Update Jan before matchday 20
This commit is contained in:
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
Reference in New Issue
Block a user