Update Jan before matchday 20

This commit is contained in:
Giuseppe Musicco
2023-01-28 11:06:11 +01:00
parent b60a8a061c
commit c4a50cecd2
45 changed files with 36171 additions and 8491 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,952 @@
{
"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": [],
"source": [
"df = pd.DataFrame(columns = ['matchday', 'player', 'team', 'oppteam', 'home', 'vote', 'goals', 'assists', 'cards_malus', 'fantavote'])\n",
"\n",
"LAST_MATCH = 19\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",
"\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": 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>5423</th>\n",
" <td>19</td>\n",
" <td>Ilic</td>\n",
" <td>Verona</td>\n",
" <td>Lecce</td>\n",
" <td>1</td>\n",
" <td>7.0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" <td>8.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5424</th>\n",
" <td>19</td>\n",
" <td>Sulemana I.</td>\n",
" <td>Verona</td>\n",
" <td>Lecce</td>\n",
" <td>1</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>5425</th>\n",
" <td>19</td>\n",
" <td>Lasagna</td>\n",
" <td>Verona</td>\n",
" <td>Lecce</td>\n",
" <td>1</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>5426</th>\n",
" <td>19</td>\n",
" <td>Kallon</td>\n",
" <td>Verona</td>\n",
" <td>Lecce</td>\n",
" <td>1</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>5427</th>\n",
" <td>19</td>\n",
" <td>Djuric</td>\n",
" <td>Verona</td>\n",
" <td>Lecce</td>\n",
" <td>1</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>5428 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",
"5423 19 Ilic Verona Lecce 1 7.0 0 1 \n",
"5424 19 Sulemana I. Verona Lecce 1 6.0 0 0 \n",
"5425 19 Lasagna Verona Lecce 1 5.5 0 0 \n",
"5426 19 Kallon Verona Lecce 1 6.0 0 0 \n",
"5427 19 Djuric Verona Lecce 1 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",
"5423 0.0 8.0 \n",
"5424 0.0 6.0 \n",
"5425 0.0 5.5 \n",
"5426 0.0 6.0 \n",
"5427 0.0 6.0 \n",
"\n",
"[5428 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
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,762 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "fd8a6cb9",
"metadata": {},
"source": [
"Scraping for playing probability for the current Serie A matchday.\n",
"\n",
"Data from http://fantacalcio.it"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "4c7b7d26",
"metadata": {},
"outputs": [],
"source": [
"import requests\n",
"from bs4 import BeautifulSoup\n",
"import pandas as pd\n",
"import numpy as np\n",
"import re\n",
"import sys, getopt\n",
"import csv\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "91897dbb",
"metadata": {},
"outputs": [],
"source": [
"res = requests.get('https://www.fantacalcio.it/probabili-formazioni-serie-a')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "7ba89027",
"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>player</th>\n",
" <th>starter</th>\n",
" <th>percentage</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Skorupski</td>\n",
" <td>1</td>\n",
" <td>100.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Posch</td>\n",
" <td>1</td>\n",
" <td>100.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Soumaoro</td>\n",
" <td>1</td>\n",
" <td>100.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Lucumi'</td>\n",
" <td>1</td>\n",
" <td>100.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Cambiaso</td>\n",
" <td>1</td>\n",
" <td>100.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>435</th>\n",
" <td>Verdi</td>\n",
" <td>0</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>436</th>\n",
" <td>Kallon</td>\n",
" <td>0</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>437</th>\n",
" <td>Piccoli</td>\n",
" <td>0</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>438</th>\n",
" <td>Ngonge</td>\n",
" <td>0</td>\n",
" <td>25.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>439</th>\n",
" <td>Braaf</td>\n",
" <td>0</td>\n",
" <td>40.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>440 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" player starter percentage\n",
"0 Skorupski 1 100.0\n",
"1 Posch 1 100.0\n",
"2 Soumaoro 1 100.0\n",
"3 Lucumi' 1 100.0\n",
"4 Cambiaso 1 100.0\n",
".. ... ... ...\n",
"435 Verdi 0 55.0\n",
"436 Kallon 0 55.0\n",
"437 Piccoli 0 55.0\n",
"438 Ngonge 0 25.0\n",
"439 Braaf 0 40.0\n",
"\n",
"[440 rows x 3 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"soup = BeautifulSoup(res.text)\n",
"\n",
"groups = soup.findAll('ul', attrs = {'class' : 'player-list'})\n",
"\n",
"probables = pd.DataFrame(columns = ['player', 'starter', 'percentage'])\n",
"\n",
"for i in range (len(groups)):\n",
" players = groups[i].findAll('a', attrs = {'class' : 'player-name'})\n",
" bars = groups[i].findAll('div', attrs = {'class' : 'progress-bar'})\n",
" \n",
" starter_string = groups[i]['class'][1]\n",
" if(starter_string == 'starters'):\n",
" starter = 1\n",
" else:\n",
" starter = 0\n",
" \n",
" for j in range(len(players)):\n",
" player = players[j].contents[0].replace('\\n \\n ', '')\n",
" perc = float(bars[j]['aria-valuenow'])\n",
" \n",
" row_df = pd.DataFrame([[player, starter, perc]], columns = probables.columns)\n",
" \n",
" probables = pd.concat([probables, row_df], ignore_index = True)\n",
" \n",
"probables "
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "29e5b389",
"metadata": {},
"outputs": [],
"source": [
"probables = probables.set_index('player')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "d711726e",
"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>player1</th>\n",
" <th>player2</th>\n",
" <th>percentage</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Colombo</td>\n",
" <td>Ceesay</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Pezzella Giu.</td>\n",
" <td>Gallo</td>\n",
" <td>65.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Banda</td>\n",
" <td>Di Francesco F.</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Lovato</td>\n",
" <td>Bronn</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Nicolussi Caviglia</td>\n",
" <td>Bohinen</td>\n",
" <td>65.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Dia</td>\n",
" <td>Bonazzoli</td>\n",
" <td>65.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Haas</td>\n",
" <td>Akpa Akpro</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>Satriano</td>\n",
" <td>Bajrami</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Ebuehi</td>\n",
" <td>Stojanovic</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>Buongiorno</td>\n",
" <td>Adopo</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>Linetty</td>\n",
" <td>Lukic</td>\n",
" <td>65.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>Sanabria</td>\n",
" <td>Seck</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>Sanabria</td>\n",
" <td>Radonjic</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>Dessers</td>\n",
" <td>Ciofani D.</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>Chiriches</td>\n",
" <td>Bianchetti</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>Asllani</td>\n",
" <td>Gagliardini</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>Darmian</td>\n",
" <td>D'ambrosio</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>Dumfries</td>\n",
" <td>D'ambrosio</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>Maehle</td>\n",
" <td>Ruggeri</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>Boga</td>\n",
" <td>Pasalic</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>Rincon</td>\n",
" <td>Vieira</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>Gabbiadini</td>\n",
" <td>Quagliarella</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>Giroud</td>\n",
" <td>Origi</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>De Ketelaere</td>\n",
" <td>Diaz B.</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>Saelemaekers</td>\n",
" <td>Messias</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>Lopez M.</td>\n",
" <td>Obiang</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>Defrel</td>\n",
" <td>Alvarez A.</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>Traore' Hj.</td>\n",
" <td>Thorstvedt</td>\n",
" <td>65.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>Mckennie</td>\n",
" <td>Chiesa</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>Kean</td>\n",
" <td>Milik</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>Fagioli</td>\n",
" <td>Miretti</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>Rovella</td>\n",
" <td>Machin</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>Mari'</td>\n",
" <td>Caldirola</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>Petagna</td>\n",
" <td>Mota</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>Marusic</td>\n",
" <td>Hysaj</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>Cataldi</td>\n",
" <td>Marcos Antonio</td>\n",
" <td>65.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>Igor</td>\n",
" <td>Martinez Quarta</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>Kouame'</td>\n",
" <td>Jovic</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>38</th>\n",
" <td>Gonzalez N.</td>\n",
" <td>Saponara</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39</th>\n",
" <td>Elmas</td>\n",
" <td>Lozano</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40</th>\n",
" <td>Elmas</td>\n",
" <td>Politano</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41</th>\n",
" <td>Mario Rui</td>\n",
" <td>Olivera</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42</th>\n",
" <td>Spinazzola</td>\n",
" <td>El Shaarawy</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>43</th>\n",
" <td>Matic</td>\n",
" <td>Bove</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44</th>\n",
" <td>Arslan</td>\n",
" <td>Makengo</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>45</th>\n",
" <td>Samardzic</td>\n",
" <td>Lovric</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46</th>\n",
" <td>Lasagna</td>\n",
" <td>Kallon</td>\n",
" <td>60.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" player1 player2 percentage\n",
"0 Colombo Ceesay 55.0\n",
"1 Pezzella Giu. Gallo 65.0\n",
"2 Banda Di Francesco F. 60.0\n",
"3 Lovato Bronn 55.0\n",
"4 Nicolussi Caviglia Bohinen 65.0\n",
"5 Dia Bonazzoli 65.0\n",
"6 Haas Akpa Akpro 60.0\n",
"7 Satriano Bajrami 55.0\n",
"8 Ebuehi Stojanovic 60.0\n",
"9 Buongiorno Adopo 60.0\n",
"10 Linetty Lukic 65.0\n",
"11 Sanabria Seck 55.0\n",
"12 Sanabria Radonjic 55.0\n",
"13 Dessers Ciofani D. 55.0\n",
"14 Chiriches Bianchetti 60.0\n",
"15 Asllani Gagliardini 55.0\n",
"16 Darmian D'ambrosio 60.0\n",
"17 Dumfries D'ambrosio 55.0\n",
"18 Maehle Ruggeri 60.0\n",
"19 Boga Pasalic 55.0\n",
"20 Rincon Vieira 55.0\n",
"21 Gabbiadini Quagliarella 55.0\n",
"22 Giroud Origi 60.0\n",
"23 De Ketelaere Diaz B. 55.0\n",
"24 Saelemaekers Messias 60.0\n",
"25 Lopez M. Obiang 55.0\n",
"26 Defrel Alvarez A. 60.0\n",
"27 Traore' Hj. Thorstvedt 65.0\n",
"28 Mckennie Chiesa 60.0\n",
"29 Kean Milik 60.0\n",
"30 Fagioli Miretti 55.0\n",
"31 Rovella Machin 55.0\n",
"32 Mari' Caldirola 60.0\n",
"33 Petagna Mota 60.0\n",
"34 Marusic Hysaj 60.0\n",
"35 Cataldi Marcos Antonio 65.0\n",
"36 Igor Martinez Quarta 60.0\n",
"37 Kouame' Jovic 55.0\n",
"38 Gonzalez N. Saponara 55.0\n",
"39 Elmas Lozano 55.0\n",
"40 Elmas Politano 55.0\n",
"41 Mario Rui Olivera 55.0\n",
"42 Spinazzola El Shaarawy 60.0\n",
"43 Matic Bove 55.0\n",
"44 Arslan Makengo 60.0\n",
"45 Samardzic Lovric 55.0\n",
"46 Lasagna Kallon 60.0"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"groups = soup.findAll('ul', attrs = {'class' : 'ballot-list'})\n",
"\n",
"ballots = pd.DataFrame(columns = ['player1', 'player2', 'percentage'])\n",
"for i in range (len(groups)):\n",
" players = groups[i].findAll('a', attrs = {'class' : 'player-name'})\n",
" percs = groups[i].findAll('strong', attrs = {'class' : 'percentage'})\n",
" \n",
" player1 = players[0].contents[0].replace('\\n \\n ', '')\n",
" player2 = players[1].contents[0].replace('\\n \\n ', '')\n",
" perc = float(percs[0].contents[0].replace('%', ''))\n",
" \n",
" row_df = pd.DataFrame([[player1, player2, perc]], columns = ballots.columns)\n",
" \n",
" ballots = pd.concat([ballots, row_df], ignore_index = True)\n",
" \n",
"ballots"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "0171c61d",
"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>starter</th>\n",
" <th>percentage</th>\n",
" </tr>\n",
" <tr>\n",
" <th>player</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Skorupski</th>\n",
" <td>1</td>\n",
" <td>100.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Posch</th>\n",
" <td>1</td>\n",
" <td>100.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Soumaoro</th>\n",
" <td>1</td>\n",
" <td>100.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Lucumi'</th>\n",
" <td>1</td>\n",
" <td>100.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Cambiaso</th>\n",
" <td>1</td>\n",
" <td>100.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Verdi</th>\n",
" <td>0</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Kallon</th>\n",
" <td>0.4</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Piccoli</th>\n",
" <td>0</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Ngonge</th>\n",
" <td>0</td>\n",
" <td>25.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Braaf</th>\n",
" <td>0</td>\n",
" <td>40.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>440 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" starter percentage\n",
"player \n",
"Skorupski 1 100.0\n",
"Posch 1 100.0\n",
"Soumaoro 1 100.0\n",
"Lucumi' 1 100.0\n",
"Cambiaso 1 100.0\n",
"... ... ...\n",
"Verdi 0 55.0\n",
"Kallon 0.4 55.0\n",
"Piccoli 0 55.0\n",
"Ngonge 0 25.0\n",
"Braaf 0 40.0\n",
"\n",
"[440 rows x 2 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"for i in range(ballots.shape[0]):\n",
" p1 = ballots['player1'][i]\n",
" p2 = ballots['player2'][i]\n",
" \n",
" perc = float(ballots['percentage'][i])\n",
" \n",
" probables.at[p1, 'starter'] = perc/100\n",
" probables.at[p2, 'starter'] = 1 - perc/100\n",
" \n",
"probables"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "8b5468aa",
"metadata": {},
"outputs": [],
"source": [
"probables.to_excel('mid_outputs/match_probable_players.xlsx') "
]
}
],
"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
}
File diff suppressed because one or more lines are too long