Files
fantabeto/2_votes_dataset_creation.ipynb
T
Giuseppe Musicco 99fb244c26 Matchday 34
2023-05-06 09:12:45 +02:00

994 lines
31 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"id": "5c9991b1",
"metadata": {},
"source": [
"Generate player votes database, containing votes for Serie A matchday and player.\n",
"\n",
"Votes data is manually downloaded from https://www.fantacalcio.it/voti-fantacalcio-serie-a\n",
"\n",
"Serie A calendar is loaded from another file, to add information not containing in votes files: home/away, team opponent."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "b63beb69",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "a3c39376",
"metadata": {},
"outputs": [],
"source": [
"cal = np.array(pd.read_excel('fantacalcio/seriea_calendar.xlsx', header = None))\n",
"\n",
"cal_df = pd.DataFrame(columns = ['matchday', 'team1', 'team2'])\n",
"\n",
"matchday = 0\n",
"\n",
"for i in range(cal.shape[0]):\n",
" if(cal[i, 0][0].isnumeric()):\n",
" matchday = matchday + 1\n",
" continue\n",
" \n",
" teams = cal[i, 0].split('-')\n",
" \n",
" frame = pd.DataFrame([[matchday, teams[0], teams[1]]], columns = cal_df.columns)\n",
"\n",
" cal_df = pd.concat([cal_df, frame], ignore_index = True)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "92d3c6fb",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>matchday</th>\n",
" <th>team1</th>\n",
" <th>team2</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>Fiorentina</td>\n",
" <td>Cremonese</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>Verona</td>\n",
" <td>Napoli</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>Juventus</td>\n",
" <td>Sassuolo</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>Lazio</td>\n",
" <td>Bologna</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>Lecce</td>\n",
" <td>Inter</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>375</th>\n",
" <td>38</td>\n",
" <td>Lecce</td>\n",
" <td>Bologna</td>\n",
" </tr>\n",
" <tr>\n",
" <th>376</th>\n",
" <td>38</td>\n",
" <td>Sassuolo</td>\n",
" <td>Fiorentina</td>\n",
" </tr>\n",
" <tr>\n",
" <th>377</th>\n",
" <td>38</td>\n",
" <td>Milan</td>\n",
" <td>Verona</td>\n",
" </tr>\n",
" <tr>\n",
" <th>378</th>\n",
" <td>38</td>\n",
" <td>Torino</td>\n",
" <td>Inter</td>\n",
" </tr>\n",
" <tr>\n",
" <th>379</th>\n",
" <td>38</td>\n",
" <td>Udinese</td>\n",
" <td>Juventus</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>380 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" matchday team1 team2\n",
"0 1 Fiorentina Cremonese\n",
"1 1 Verona Napoli\n",
"2 1 Juventus Sassuolo\n",
"3 1 Lazio Bologna\n",
"4 1 Lecce Inter\n",
".. ... ... ...\n",
"375 38 Lecce Bologna\n",
"376 38 Sassuolo Fiorentina\n",
"377 38 Milan Verona\n",
"378 38 Torino Inter\n",
"379 38 Udinese Juventus\n",
"\n",
"[380 rows x 3 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cal_df"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "0d4a330d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"loaded votes for matchday 1\n",
"loaded votes for matchday 2\n",
"loaded votes for matchday 3\n",
"loaded votes for matchday 4\n",
"loaded votes for matchday 5\n",
"loaded votes for matchday 6\n",
"loaded votes for matchday 7\n",
"loaded votes for matchday 8\n",
"loaded votes for matchday 9\n",
"loaded votes for matchday 10\n",
"loaded votes for matchday 11\n",
"loaded votes for matchday 12\n",
"loaded votes for matchday 13\n",
"loaded votes for matchday 14\n",
"loaded votes for matchday 15\n",
"loaded votes for matchday 16\n",
"loaded votes for matchday 17\n",
"loaded votes for matchday 18\n",
"loaded votes for matchday 19\n",
"loaded votes for matchday 20\n",
"loaded votes for matchday 21\n",
"loaded votes for matchday 22\n",
"loaded votes for matchday 23\n",
"loaded votes for matchday 24\n",
"loaded votes for matchday 25\n",
"loaded votes for matchday 26\n",
"loaded votes for matchday 27\n",
"loaded votes for matchday 28\n",
"loaded votes for matchday 29\n",
"loaded votes for matchday 30\n",
"loaded votes for matchday 31\n",
"loaded votes for matchday 32\n"
]
}
],
"source": [
"df = pd.DataFrame(columns = ['matchday', 'player', 'team', 'oppteam', 'home', 'vote', 'goals', 'assists', 'cards_malus', 'fantavote'])\n",
"\n",
"LAST_MATCH = 38\n",
"\n",
"for matchday in range(1, LAST_MATCH + 1):\n",
" \n",
" votes_file = 'fantacalcio/voti/Voti_Fantacalcio_Stagione_2022_23_Giornata_' + str(matchday) + '.xlsx'\n",
"\n",
" try:\n",
" rx = np.array(pd.read_excel(votes_file, header = None))\n",
" except:\n",
" break\n",
"\n",
" read = 0\n",
" for i in range(rx.shape[0]):\n",
" if(rx[i, 0] == \"Cod.\"):\n",
" read = 1\n",
" team = rx[i-1, 0];\n",
" continue\n",
"\n",
" if(read):\n",
" if(isinstance(rx[i, 0], int)):\n",
" if((isinstance(rx[i, 3], float) or isinstance(rx[i, 3], int)) and rx[i, 1] != \"ALL\") :\n",
" player = rx[i, 2];\n",
" vote = float(rx[i, 3])\n",
" goals = rx[i, 4] + rx[i, 8] - rx[i, 5]\n",
" assists = rx[i, 12]\n",
" cards_malus = rx[i, 10] * 0.5 + rx[i, 11]\n",
" \n",
" oppteam = ''\n",
" home = 0\n",
" for j in range(cal_df.shape[0]):\n",
" if(cal_df['matchday'][j] == matchday):\n",
" if(cal_df['team1'][j] == team):\n",
" oppteam = cal_df['team2'][j] \n",
" home = 1\n",
" elif(cal_df['team2'][j] == team):\n",
" oppteam = cal_df['team1'][j] \n",
" home = 0\n",
"\n",
" goals_gen = goals * 3;\n",
" if(goals < 0):\n",
" goals_gen = goals\n",
" \n",
" fantavote = vote + goals_gen + assists - cards_malus \n",
" \n",
" frame = pd.DataFrame([[matchday, player, team, oppteam, home, vote, goals, assists, cards_malus, fantavote]], columns = df.columns)\n",
"\n",
" df = pd.concat([df, frame], axis = 0, ignore_index = True)\n",
" else:\n",
" read = 0\n",
" continue\n",
" \n",
" print('loaded votes for matchday ' + str(matchday))\n",
"\n",
" df"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "6ade957d",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>matchday</th>\n",
" <th>player</th>\n",
" <th>team</th>\n",
" <th>oppteam</th>\n",
" <th>home</th>\n",
" <th>vote</th>\n",
" <th>goals</th>\n",
" <th>assists</th>\n",
" <th>cards_malus</th>\n",
" <th>fantavote</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>Musso</td>\n",
" <td>Atalanta</td>\n",
" <td>Sampdoria</td>\n",
" <td>0</td>\n",
" <td>6.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.5</td>\n",
" <td>5.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>Toloi</td>\n",
" <td>Atalanta</td>\n",
" <td>Sampdoria</td>\n",
" <td>0</td>\n",
" <td>7.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>10.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>Djimsiti</td>\n",
" <td>Atalanta</td>\n",
" <td>Sampdoria</td>\n",
" <td>0</td>\n",
" <td>6.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>6.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>Hateboer</td>\n",
" <td>Atalanta</td>\n",
" <td>Sampdoria</td>\n",
" <td>0</td>\n",
" <td>6.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.5</td>\n",
" <td>5.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>Okoli</td>\n",
" <td>Atalanta</td>\n",
" <td>Sampdoria</td>\n",
" <td>0</td>\n",
" <td>5.5</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.5</td>\n",
" <td>5.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9097</th>\n",
" <td>32</td>\n",
" <td>Terracciano F.</td>\n",
" <td>Verona</td>\n",
" <td>Cremonese</td>\n",
" <td>0</td>\n",
" <td>6.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>6.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9098</th>\n",
" <td>32</td>\n",
" <td>Abildgaard</td>\n",
" <td>Verona</td>\n",
" <td>Cremonese</td>\n",
" <td>0</td>\n",
" <td>5.5</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>5.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9099</th>\n",
" <td>32</td>\n",
" <td>Braaf</td>\n",
" <td>Verona</td>\n",
" <td>Cremonese</td>\n",
" <td>0</td>\n",
" <td>5.5</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>5.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9100</th>\n",
" <td>32</td>\n",
" <td>Kallon</td>\n",
" <td>Verona</td>\n",
" <td>Cremonese</td>\n",
" <td>0</td>\n",
" <td>5.5</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>5.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9101</th>\n",
" <td>32</td>\n",
" <td>Djuric</td>\n",
" <td>Verona</td>\n",
" <td>Cremonese</td>\n",
" <td>0</td>\n",
" <td>6.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>6.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>9102 rows × 10 columns</p>\n",
"</div>"
],
"text/plain": [
" matchday player team oppteam home vote goals assists \\\n",
"0 1 Musso Atalanta Sampdoria 0 6.0 0 0 \n",
"1 1 Toloi Atalanta Sampdoria 0 7.0 1 0 \n",
"2 1 Djimsiti Atalanta Sampdoria 0 6.0 0 0 \n",
"3 1 Hateboer Atalanta Sampdoria 0 6.0 0 0 \n",
"4 1 Okoli Atalanta Sampdoria 0 5.5 0 0 \n",
"... ... ... ... ... ... ... ... ... \n",
"9097 32 Terracciano F. Verona Cremonese 0 6.0 0 0 \n",
"9098 32 Abildgaard Verona Cremonese 0 5.5 0 0 \n",
"9099 32 Braaf Verona Cremonese 0 5.5 0 0 \n",
"9100 32 Kallon Verona Cremonese 0 5.5 0 0 \n",
"9101 32 Djuric Verona Cremonese 0 6.0 0 0 \n",
"\n",
" cards_malus fantavote \n",
"0 0.5 5.5 \n",
"1 0.0 10.0 \n",
"2 0.0 6.0 \n",
"3 0.5 5.5 \n",
"4 0.5 5.0 \n",
"... ... ... \n",
"9097 0.0 6.0 \n",
"9098 0.0 5.5 \n",
"9099 0.0 5.5 \n",
"9100 0.0 5.5 \n",
"9101 0.0 6.0 \n",
"\n",
"[9102 rows x 10 columns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "230213fe",
"metadata": {},
"outputs": [],
"source": [
"df.to_excel('mid_outputs/players_votes.xlsx')"
]
},
{
"cell_type": "markdown",
"id": "ef91ece3",
"metadata": {},
"source": [
"Elaborate data for past seasons.\n",
"\n",
"Do not repeat if data is already present."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "da35bdf9",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>matchday</th>\n",
" <th>team1</th>\n",
" <th>team2</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>Verona</td>\n",
" <td>Sassuolo</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>Inter</td>\n",
" <td>Genoa</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>Empoli</td>\n",
" <td>Lazio</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>Torino</td>\n",
" <td>Atalanta</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>Bologna</td>\n",
" <td>Salernitana</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>375</th>\n",
" <td>38</td>\n",
" <td>Spezia</td>\n",
" <td>Napoli</td>\n",
" </tr>\n",
" <tr>\n",
" <th>376</th>\n",
" <td>38</td>\n",
" <td>Sassuolo</td>\n",
" <td>Milan</td>\n",
" </tr>\n",
" <tr>\n",
" <th>377</th>\n",
" <td>38</td>\n",
" <td>Inter</td>\n",
" <td>Sampdoria</td>\n",
" </tr>\n",
" <tr>\n",
" <th>378</th>\n",
" <td>38</td>\n",
" <td>Salernitana</td>\n",
" <td>Udinese</td>\n",
" </tr>\n",
" <tr>\n",
" <th>379</th>\n",
" <td>38</td>\n",
" <td>Venezia</td>\n",
" <td>Cagliari</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>380 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" matchday team1 team2\n",
"0 1 Verona Sassuolo\n",
"1 1 Inter Genoa\n",
"2 1 Empoli Lazio\n",
"3 1 Torino Atalanta\n",
"4 1 Bologna Salernitana\n",
".. ... ... ...\n",
"375 38 Spezia Napoli\n",
"376 38 Sassuolo Milan\n",
"377 38 Inter Sampdoria\n",
"378 38 Salernitana Udinese\n",
"379 38 Venezia Cagliari\n",
"\n",
"[380 rows x 3 columns]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cal_df = pd.read_excel('fantacalcio/season2122/seriea_calendar.xlsx')\n",
"\n",
"to_drop = list()\n",
"\n",
"for i in range(cal_df.shape[0]):\n",
" if(not isinstance(cal_df['matchday'][i], int)):\n",
" to_drop.append(i)\n",
" \n",
"cal_df = cal_df.drop(to_drop)\n",
"\n",
"cal_df = cal_df.reset_index(drop = True)\n",
"\n",
"cal_df"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "0313a0f4",
"metadata": {},
"outputs": [],
"source": [
"df = pd.DataFrame(columns = ['matchday', 'player', 'team', 'oppteam', 'home', 'vote', 'goals', 'assists', 'cards_malus', 'fantavote'])\n",
"\n",
"LAST_MATCH = 38\n",
"\n",
"for matchday in range(1, LAST_MATCH + 1):\n",
" \n",
" votes_file = 'fantacalcio/season2122/voti/Voti_Fantacalcio_Stagione_2021_22_Giornata_' + str(matchday) + '.xlsx'\n",
"\n",
"\n",
"\n",
"\n",
" rx = np.array(pd.read_excel(votes_file, header = None))\n",
"\n",
" read = 0\n",
" for i in range(rx.shape[0]):\n",
" if(rx[i, 0] == \"Cod.\"):\n",
" read = 1\n",
" team = rx[i-1, 0];\n",
" continue\n",
"\n",
" if(read):\n",
" if(isinstance(rx[i, 0], int)):\n",
" if((isinstance(rx[i, 3], float) or isinstance(rx[i, 3], int)) and rx[i, 1] != \"ALL\") :\n",
" player = rx[i, 2];\n",
" vote = float(rx[i, 3])\n",
" goals = rx[i, 4] + rx[i, 8] - rx[i, 5]\n",
" assists = rx[i, 12]\n",
" cards_malus = rx[i, 10] * 0.5 + rx[i, 11]\n",
" \n",
" oppteam = ''\n",
" home = 0\n",
" for j in range(cal_df.shape[0]):\n",
" if(cal_df['matchday'][j] == matchday):\n",
" if(cal_df['team1'][j] == team):\n",
" oppteam = cal_df['team2'][j] \n",
" home = 1\n",
" elif(cal_df['team2'][j] == team):\n",
" oppteam = cal_df['team1'][j] \n",
" home = 0\n",
"\n",
" goals_gen = goals * 3;\n",
" if(goals < 0):\n",
" goals_gen = goals\n",
" \n",
" fantavote = vote + goals_gen + assists - cards_malus \n",
" \n",
" frame = pd.DataFrame([[matchday, player, team, oppteam, home, vote, goals, assists, cards_malus, fantavote]], columns = df.columns)\n",
"\n",
" df = pd.concat([df, frame], axis = 0, ignore_index = True)\n",
" else:\n",
" read = 0\n",
" continue\n",
"\n",
" df"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "82b1cfc8",
"metadata": {},
"outputs": [],
"source": [
"df.to_excel('mid_outputs/season2122/players_votes.xlsx')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "d1fca3ba",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>matchday</th>\n",
" <th>team1</th>\n",
" <th>team2</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>Fiorentina</td>\n",
" <td>Torino</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>Verona</td>\n",
" <td>Roma</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>Parma</td>\n",
" <td>Napoli</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>Genoa</td>\n",
" <td>Crotone</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>Sassuolo</td>\n",
" <td>Cagliari</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>375</th>\n",
" <td>38</td>\n",
" <td>Sassuolo</td>\n",
" <td>Lazio</td>\n",
" </tr>\n",
" <tr>\n",
" <th>376</th>\n",
" <td>38</td>\n",
" <td>Atalanta</td>\n",
" <td>Milan</td>\n",
" </tr>\n",
" <tr>\n",
" <th>377</th>\n",
" <td>38</td>\n",
" <td>Torino</td>\n",
" <td>Benevento</td>\n",
" </tr>\n",
" <tr>\n",
" <th>378</th>\n",
" <td>38</td>\n",
" <td>Bologna</td>\n",
" <td>Juventus</td>\n",
" </tr>\n",
" <tr>\n",
" <th>379</th>\n",
" <td>38</td>\n",
" <td>Napoli</td>\n",
" <td>Verona</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>380 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" matchday team1 team2\n",
"0 1 Fiorentina Torino\n",
"1 1 Verona Roma\n",
"2 1 Parma Napoli\n",
"3 1 Genoa Crotone\n",
"4 1 Sassuolo Cagliari\n",
".. ... ... ...\n",
"375 38 Sassuolo Lazio\n",
"376 38 Atalanta Milan\n",
"377 38 Torino Benevento\n",
"378 38 Bologna Juventus\n",
"379 38 Napoli Verona\n",
"\n",
"[380 rows x 3 columns]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cal_df = pd.read_excel('fantacalcio/season2021/seriea_calendar.xlsx')\n",
"\n",
"to_drop = list()\n",
"\n",
"for i in range(cal_df.shape[0]):\n",
" if(not isinstance(cal_df['matchday'][i], int)):\n",
" to_drop.append(i)\n",
" \n",
"cal_df = cal_df.drop(to_drop)\n",
"\n",
"cal_df = cal_df.reset_index(drop = True)\n",
"\n",
"cal_df"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "6d5d4101",
"metadata": {},
"outputs": [],
"source": [
"df = pd.DataFrame(columns = ['matchday', 'player', 'team', 'oppteam', 'home', 'vote', 'goals', 'assists', 'cards_malus', 'fantavote'])\n",
"\n",
"LAST_MATCH = 38\n",
"\n",
"for matchday in range(1, LAST_MATCH + 1):\n",
" \n",
" votes_file = 'fantacalcio/season2021/voti/Voti_Fantacalcio_Stagione_2020_21_Giornata_' + str(matchday) + '.xlsx'\n",
"\n",
"\n",
"\n",
"\n",
" rx = np.array(pd.read_excel(votes_file, header = None))\n",
"\n",
" read = 0\n",
" for i in range(rx.shape[0]):\n",
" if(rx[i, 0] == \"Cod.\"):\n",
" read = 1\n",
" team = rx[i-1, 0];\n",
" continue\n",
"\n",
" if(read):\n",
" if(isinstance(rx[i, 0], int)):\n",
" if((isinstance(rx[i, 3], float) or isinstance(rx[i, 3], int)) and rx[i, 1] != \"ALL\") :\n",
" player = rx[i, 2];\n",
" vote = float(rx[i, 3])\n",
" goals = rx[i, 4] + rx[i, 8] - rx[i, 5]\n",
" assists = rx[i, 12]\n",
" cards_malus = rx[i, 10] * 0.5 + rx[i, 11]\n",
" \n",
" oppteam = ''\n",
" home = 0\n",
" for j in range(cal_df.shape[0]):\n",
" if(cal_df['matchday'][j] == matchday):\n",
" if(cal_df['team1'][j] == team):\n",
" oppteam = cal_df['team2'][j] \n",
" home = 1\n",
" elif(cal_df['team2'][j] == team):\n",
" oppteam = cal_df['team1'][j] \n",
" home = 0\n",
"\n",
" goals_gen = goals * 3;\n",
" if(goals < 0):\n",
" goals_gen = goals\n",
" \n",
" fantavote = vote + goals_gen + assists - cards_malus \n",
" \n",
" frame = pd.DataFrame([[matchday, player, team, oppteam, home, vote, goals, assists, cards_malus, fantavote]], columns = df.columns)\n",
"\n",
" df = pd.concat([df, frame], axis = 0, ignore_index = True)\n",
" else:\n",
" read = 0\n",
" continue\n",
"\n",
" df"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "0a4bbffd",
"metadata": {},
"outputs": [],
"source": [
"df.to_excel('mid_outputs/season2021/players_votes.xlsx')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "48a341c2",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}