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

4651 lines
159 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": "8f597771",
"metadata": {},
"source": [
"Player/match dataset creation\n",
"\n",
"For each serie A (already happened) match and player, a database entry is generated, with this form:\n",
" \n",
"[y = player votes data, player data, team data, vs team data, opp team data, vs opp team data]"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "3ecf3676",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"id": "a7d3a9d6",
"metadata": {},
"source": [
"Load team data from FBref"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "8a6867a5",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_3124\\552672520.py:19: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" team_data['team_idx'][i] = team_data['team_idx'][i].split(' ')[-1]\n"
]
},
{
"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>team</th>\n",
" <th>team_players_used</th>\n",
" <th>team_possession</th>\n",
" <th>team_games</th>\n",
" <th>team_games_starts</th>\n",
" <th>team_minutes</th>\n",
" <th>team_goals</th>\n",
" <th>team_assists</th>\n",
" <th>team_pens_made</th>\n",
" <th>team_pens_att</th>\n",
" <th>...</th>\n",
" <th>vs_team_fouls</th>\n",
" <th>vs_team_fouled</th>\n",
" <th>vs_team_offsides</th>\n",
" <th>vs_team_pens_won</th>\n",
" <th>vs_team_pens_conceded</th>\n",
" <th>vs_team_own_goals</th>\n",
" <th>vs_team_ball_recoveries</th>\n",
" <th>vs_team_aerials_won</th>\n",
" <th>vs_team_aerials_lost</th>\n",
" <th>vs_team_aerials_won_pct</th>\n",
" </tr>\n",
" <tr>\n",
" <th>team_idx</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Atalanta</th>\n",
" <td>Atalanta</td>\n",
" <td>25.0</td>\n",
" <td>50.0</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>50.0</td>\n",
" <td>32.0</td>\n",
" <td>6.0</td>\n",
" <td>8.0</td>\n",
" <td>...</td>\n",
" <td>338.0</td>\n",
" <td>356.0</td>\n",
" <td>40.0</td>\n",
" <td>1.0</td>\n",
" <td>8.0</td>\n",
" <td>1.0</td>\n",
" <td>1865.0</td>\n",
" <td>389.0</td>\n",
" <td>472.0</td>\n",
" <td>45.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Bologna</th>\n",
" <td>Bologna</td>\n",
" <td>27.0</td>\n",
" <td>53.4</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>39.0</td>\n",
" <td>32.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>...</td>\n",
" <td>376.0</td>\n",
" <td>365.0</td>\n",
" <td>52.0</td>\n",
" <td>5.0</td>\n",
" <td>4.0</td>\n",
" <td>1.0</td>\n",
" <td>1687.0</td>\n",
" <td>379.0</td>\n",
" <td>306.0</td>\n",
" <td>55.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Cremonese</th>\n",
" <td>Cremonese</td>\n",
" <td>32.0</td>\n",
" <td>43.2</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>27.0</td>\n",
" <td>13.0</td>\n",
" <td>4.0</td>\n",
" <td>6.0</td>\n",
" <td>...</td>\n",
" <td>345.0</td>\n",
" <td>372.0</td>\n",
" <td>52.0</td>\n",
" <td>4.0</td>\n",
" <td>6.0</td>\n",
" <td>0.0</td>\n",
" <td>1745.0</td>\n",
" <td>594.0</td>\n",
" <td>462.0</td>\n",
" <td>56.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Empoli</th>\n",
" <td>Empoli</td>\n",
" <td>31.0</td>\n",
" <td>47.4</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>25.0</td>\n",
" <td>13.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>...</td>\n",
" <td>384.0</td>\n",
" <td>341.0</td>\n",
" <td>60.0</td>\n",
" <td>2.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1607.0</td>\n",
" <td>412.0</td>\n",
" <td>330.0</td>\n",
" <td>55.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Fiorentina</th>\n",
" <td>Fiorentina</td>\n",
" <td>29.0</td>\n",
" <td>56.6</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>35.0</td>\n",
" <td>25.0</td>\n",
" <td>4.0</td>\n",
" <td>6.0</td>\n",
" <td>...</td>\n",
" <td>460.0</td>\n",
" <td>371.0</td>\n",
" <td>78.0</td>\n",
" <td>2.0</td>\n",
" <td>6.0</td>\n",
" <td>2.0</td>\n",
" <td>1625.0</td>\n",
" <td>425.0</td>\n",
" <td>504.0</td>\n",
" <td>45.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Verona</th>\n",
" <td>Hellas Verona</td>\n",
" <td>36.0</td>\n",
" <td>42.0</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>24.0</td>\n",
" <td>18.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>...</td>\n",
" <td>337.0</td>\n",
" <td>438.0</td>\n",
" <td>32.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>2.0</td>\n",
" <td>1728.0</td>\n",
" <td>619.0</td>\n",
" <td>615.0</td>\n",
" <td>50.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Inter</th>\n",
" <td>Inter</td>\n",
" <td>24.0</td>\n",
" <td>56.2</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>50.0</td>\n",
" <td>35.0</td>\n",
" <td>4.0</td>\n",
" <td>5.0</td>\n",
" <td>...</td>\n",
" <td>368.0</td>\n",
" <td>336.0</td>\n",
" <td>29.0</td>\n",
" <td>3.0</td>\n",
" <td>5.0</td>\n",
" <td>1.0</td>\n",
" <td>1443.0</td>\n",
" <td>344.0</td>\n",
" <td>443.0</td>\n",
" <td>43.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Juventus</th>\n",
" <td>Juventus</td>\n",
" <td>29.0</td>\n",
" <td>48.6</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>47.0</td>\n",
" <td>37.0</td>\n",
" <td>3.0</td>\n",
" <td>5.0</td>\n",
" <td>...</td>\n",
" <td>348.0</td>\n",
" <td>328.0</td>\n",
" <td>39.0</td>\n",
" <td>0.0</td>\n",
" <td>5.0</td>\n",
" <td>0.0</td>\n",
" <td>1556.0</td>\n",
" <td>381.0</td>\n",
" <td>390.0</td>\n",
" <td>49.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Lazio</th>\n",
" <td>Lazio</td>\n",
" <td>22.0</td>\n",
" <td>51.9</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>48.0</td>\n",
" <td>29.0</td>\n",
" <td>5.0</td>\n",
" <td>7.0</td>\n",
" <td>...</td>\n",
" <td>421.0</td>\n",
" <td>304.0</td>\n",
" <td>55.0</td>\n",
" <td>1.0</td>\n",
" <td>7.0</td>\n",
" <td>1.0</td>\n",
" <td>1677.0</td>\n",
" <td>319.0</td>\n",
" <td>319.0</td>\n",
" <td>50.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Lecce</th>\n",
" <td>Lecce</td>\n",
" <td>29.0</td>\n",
" <td>41.7</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>24.0</td>\n",
" <td>17.0</td>\n",
" <td>1.0</td>\n",
" <td>2.0</td>\n",
" <td>...</td>\n",
" <td>378.0</td>\n",
" <td>425.0</td>\n",
" <td>57.0</td>\n",
" <td>4.0</td>\n",
" <td>2.0</td>\n",
" <td>2.0</td>\n",
" <td>1694.0</td>\n",
" <td>582.0</td>\n",
" <td>466.0</td>\n",
" <td>55.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Milan</th>\n",
" <td>Milan</td>\n",
" <td>29.0</td>\n",
" <td>54.0</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>48.0</td>\n",
" <td>39.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>...</td>\n",
" <td>378.0</td>\n",
" <td>369.0</td>\n",
" <td>31.0</td>\n",
" <td>5.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>1617.0</td>\n",
" <td>387.0</td>\n",
" <td>456.0</td>\n",
" <td>45.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Monza</th>\n",
" <td>Monza</td>\n",
" <td>31.0</td>\n",
" <td>55.0</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>36.0</td>\n",
" <td>23.0</td>\n",
" <td>5.0</td>\n",
" <td>5.0</td>\n",
" <td>...</td>\n",
" <td>437.0</td>\n",
" <td>385.0</td>\n",
" <td>48.0</td>\n",
" <td>1.0</td>\n",
" <td>5.0</td>\n",
" <td>2.0</td>\n",
" <td>1608.0</td>\n",
" <td>340.0</td>\n",
" <td>357.0</td>\n",
" <td>48.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Napoli</th>\n",
" <td>Napoli</td>\n",
" <td>26.0</td>\n",
" <td>61.8</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>65.0</td>\n",
" <td>51.0</td>\n",
" <td>6.0</td>\n",
" <td>7.0</td>\n",
" <td>...</td>\n",
" <td>405.0</td>\n",
" <td>287.0</td>\n",
" <td>39.0</td>\n",
" <td>1.0</td>\n",
" <td>6.0</td>\n",
" <td>2.0</td>\n",
" <td>1562.0</td>\n",
" <td>322.0</td>\n",
" <td>389.0</td>\n",
" <td>45.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Roma</th>\n",
" <td>Roma</td>\n",
" <td>27.0</td>\n",
" <td>49.2</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>43.0</td>\n",
" <td>30.0</td>\n",
" <td>6.0</td>\n",
" <td>9.0</td>\n",
" <td>...</td>\n",
" <td>447.0</td>\n",
" <td>344.0</td>\n",
" <td>21.0</td>\n",
" <td>2.0</td>\n",
" <td>9.0</td>\n",
" <td>0.0</td>\n",
" <td>1621.0</td>\n",
" <td>331.0</td>\n",
" <td>426.0</td>\n",
" <td>43.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Salernitana</th>\n",
" <td>Salernitana</td>\n",
" <td>28.0</td>\n",
" <td>44.6</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>35.0</td>\n",
" <td>25.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>...</td>\n",
" <td>375.0</td>\n",
" <td>357.0</td>\n",
" <td>64.0</td>\n",
" <td>10.0</td>\n",
" <td>1.0</td>\n",
" <td>2.0</td>\n",
" <td>1709.0</td>\n",
" <td>448.0</td>\n",
" <td>427.0</td>\n",
" <td>51.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Sampdoria</th>\n",
" <td>Sampdoria</td>\n",
" <td>37.0</td>\n",
" <td>47.4</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>20.0</td>\n",
" <td>16.0</td>\n",
" <td>1.0</td>\n",
" <td>2.0</td>\n",
" <td>...</td>\n",
" <td>449.0</td>\n",
" <td>408.0</td>\n",
" <td>75.0</td>\n",
" <td>6.0</td>\n",
" <td>2.0</td>\n",
" <td>0.0</td>\n",
" <td>1693.0</td>\n",
" <td>535.0</td>\n",
" <td>517.0</td>\n",
" <td>50.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Sassuolo</th>\n",
" <td>Sassuolo</td>\n",
" <td>29.0</td>\n",
" <td>48.9</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>37.0</td>\n",
" <td>24.0</td>\n",
" <td>6.0</td>\n",
" <td>7.0</td>\n",
" <td>...</td>\n",
" <td>384.0</td>\n",
" <td>307.0</td>\n",
" <td>94.0</td>\n",
" <td>2.0</td>\n",
" <td>7.0</td>\n",
" <td>1.0</td>\n",
" <td>1611.0</td>\n",
" <td>385.0</td>\n",
" <td>329.0</td>\n",
" <td>53.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Spezia</th>\n",
" <td>Spezia</td>\n",
" <td>34.0</td>\n",
" <td>47.0</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>24.0</td>\n",
" <td>15.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>...</td>\n",
" <td>321.0</td>\n",
" <td>396.0</td>\n",
" <td>67.0</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" <td>2.0</td>\n",
" <td>1708.0</td>\n",
" <td>470.0</td>\n",
" <td>424.0</td>\n",
" <td>52.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Torino</th>\n",
" <td>Torino</td>\n",
" <td>28.0</td>\n",
" <td>53.0</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>32.0</td>\n",
" <td>26.0</td>\n",
" <td>2.0</td>\n",
" <td>2.0</td>\n",
" <td>...</td>\n",
" <td>341.0</td>\n",
" <td>409.0</td>\n",
" <td>32.0</td>\n",
" <td>4.0</td>\n",
" <td>2.0</td>\n",
" <td>0.0</td>\n",
" <td>1597.0</td>\n",
" <td>508.0</td>\n",
" <td>474.0</td>\n",
" <td>51.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Udinese</th>\n",
" <td>Udinese</td>\n",
" <td>27.0</td>\n",
" <td>48.1</td>\n",
" <td>31.0</td>\n",
" <td>341.0</td>\n",
" <td>2790.0</td>\n",
" <td>41.0</td>\n",
" <td>36.0</td>\n",
" <td>1.0</td>\n",
" <td>2.0</td>\n",
" <td>...</td>\n",
" <td>412.0</td>\n",
" <td>357.0</td>\n",
" <td>50.0</td>\n",
" <td>3.0</td>\n",
" <td>2.0</td>\n",
" <td>1.0</td>\n",
" <td>1577.0</td>\n",
" <td>326.0</td>\n",
" <td>390.0</td>\n",
" <td>45.5</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>20 rows × 303 columns</p>\n",
"</div>"
],
"text/plain": [
" team team_players_used team_possession team_games \\\n",
"team_idx \n",
"Atalanta Atalanta 25.0 50.0 31.0 \n",
"Bologna Bologna 27.0 53.4 31.0 \n",
"Cremonese Cremonese 32.0 43.2 31.0 \n",
"Empoli Empoli 31.0 47.4 31.0 \n",
"Fiorentina Fiorentina 29.0 56.6 31.0 \n",
"Verona Hellas Verona 36.0 42.0 31.0 \n",
"Inter Inter 24.0 56.2 31.0 \n",
"Juventus Juventus 29.0 48.6 31.0 \n",
"Lazio Lazio 22.0 51.9 31.0 \n",
"Lecce Lecce 29.0 41.7 31.0 \n",
"Milan Milan 29.0 54.0 31.0 \n",
"Monza Monza 31.0 55.0 31.0 \n",
"Napoli Napoli 26.0 61.8 31.0 \n",
"Roma Roma 27.0 49.2 31.0 \n",
"Salernitana Salernitana 28.0 44.6 31.0 \n",
"Sampdoria Sampdoria 37.0 47.4 31.0 \n",
"Sassuolo Sassuolo 29.0 48.9 31.0 \n",
"Spezia Spezia 34.0 47.0 31.0 \n",
"Torino Torino 28.0 53.0 31.0 \n",
"Udinese Udinese 27.0 48.1 31.0 \n",
"\n",
" team_games_starts team_minutes team_goals team_assists \\\n",
"team_idx \n",
"Atalanta 341.0 2790.0 50.0 32.0 \n",
"Bologna 341.0 2790.0 39.0 32.0 \n",
"Cremonese 341.0 2790.0 27.0 13.0 \n",
"Empoli 341.0 2790.0 25.0 13.0 \n",
"Fiorentina 341.0 2790.0 35.0 25.0 \n",
"Verona 341.0 2790.0 24.0 18.0 \n",
"Inter 341.0 2790.0 50.0 35.0 \n",
"Juventus 341.0 2790.0 47.0 37.0 \n",
"Lazio 341.0 2790.0 48.0 29.0 \n",
"Lecce 341.0 2790.0 24.0 17.0 \n",
"Milan 341.0 2790.0 48.0 39.0 \n",
"Monza 341.0 2790.0 36.0 23.0 \n",
"Napoli 341.0 2790.0 65.0 51.0 \n",
"Roma 341.0 2790.0 43.0 30.0 \n",
"Salernitana 341.0 2790.0 35.0 25.0 \n",
"Sampdoria 341.0 2790.0 20.0 16.0 \n",
"Sassuolo 341.0 2790.0 37.0 24.0 \n",
"Spezia 341.0 2790.0 24.0 15.0 \n",
"Torino 341.0 2790.0 32.0 26.0 \n",
"Udinese 341.0 2790.0 41.0 36.0 \n",
"\n",
" team_pens_made team_pens_att ... vs_team_fouls \\\n",
"team_idx ... \n",
"Atalanta 6.0 8.0 ... 338.0 \n",
"Bologna 4.0 4.0 ... 376.0 \n",
"Cremonese 4.0 6.0 ... 345.0 \n",
"Empoli 1.0 1.0 ... 384.0 \n",
"Fiorentina 4.0 6.0 ... 460.0 \n",
"Verona 1.0 1.0 ... 337.0 \n",
"Inter 4.0 5.0 ... 368.0 \n",
"Juventus 3.0 5.0 ... 348.0 \n",
"Lazio 5.0 7.0 ... 421.0 \n",
"Lecce 1.0 2.0 ... 378.0 \n",
"Milan 3.0 3.0 ... 378.0 \n",
"Monza 5.0 5.0 ... 437.0 \n",
"Napoli 6.0 7.0 ... 405.0 \n",
"Roma 6.0 9.0 ... 447.0 \n",
"Salernitana 1.0 1.0 ... 375.0 \n",
"Sampdoria 1.0 2.0 ... 449.0 \n",
"Sassuolo 6.0 7.0 ... 384.0 \n",
"Spezia 4.0 4.0 ... 321.0 \n",
"Torino 2.0 2.0 ... 341.0 \n",
"Udinese 1.0 2.0 ... 412.0 \n",
"\n",
" vs_team_fouled vs_team_offsides vs_team_pens_won \\\n",
"team_idx \n",
"Atalanta 356.0 40.0 1.0 \n",
"Bologna 365.0 52.0 5.0 \n",
"Cremonese 372.0 52.0 4.0 \n",
"Empoli 341.0 60.0 2.0 \n",
"Fiorentina 371.0 78.0 2.0 \n",
"Verona 438.0 32.0 1.0 \n",
"Inter 336.0 29.0 3.0 \n",
"Juventus 328.0 39.0 0.0 \n",
"Lazio 304.0 55.0 1.0 \n",
"Lecce 425.0 57.0 4.0 \n",
"Milan 369.0 31.0 5.0 \n",
"Monza 385.0 48.0 1.0 \n",
"Napoli 287.0 39.0 1.0 \n",
"Roma 344.0 21.0 2.0 \n",
"Salernitana 357.0 64.0 10.0 \n",
"Sampdoria 408.0 75.0 6.0 \n",
"Sassuolo 307.0 94.0 2.0 \n",
"Spezia 396.0 67.0 4.0 \n",
"Torino 409.0 32.0 4.0 \n",
"Udinese 357.0 50.0 3.0 \n",
"\n",
" vs_team_pens_conceded vs_team_own_goals \\\n",
"team_idx \n",
"Atalanta 8.0 1.0 \n",
"Bologna 4.0 1.0 \n",
"Cremonese 6.0 0.0 \n",
"Empoli 1.0 0.0 \n",
"Fiorentina 6.0 2.0 \n",
"Verona 1.0 2.0 \n",
"Inter 5.0 1.0 \n",
"Juventus 5.0 0.0 \n",
"Lazio 7.0 1.0 \n",
"Lecce 2.0 2.0 \n",
"Milan 3.0 3.0 \n",
"Monza 5.0 2.0 \n",
"Napoli 6.0 2.0 \n",
"Roma 9.0 0.0 \n",
"Salernitana 1.0 2.0 \n",
"Sampdoria 2.0 0.0 \n",
"Sassuolo 7.0 1.0 \n",
"Spezia 4.0 2.0 \n",
"Torino 2.0 0.0 \n",
"Udinese 2.0 1.0 \n",
"\n",
" vs_team_ball_recoveries vs_team_aerials_won \\\n",
"team_idx \n",
"Atalanta 1865.0 389.0 \n",
"Bologna 1687.0 379.0 \n",
"Cremonese 1745.0 594.0 \n",
"Empoli 1607.0 412.0 \n",
"Fiorentina 1625.0 425.0 \n",
"Verona 1728.0 619.0 \n",
"Inter 1443.0 344.0 \n",
"Juventus 1556.0 381.0 \n",
"Lazio 1677.0 319.0 \n",
"Lecce 1694.0 582.0 \n",
"Milan 1617.0 387.0 \n",
"Monza 1608.0 340.0 \n",
"Napoli 1562.0 322.0 \n",
"Roma 1621.0 331.0 \n",
"Salernitana 1709.0 448.0 \n",
"Sampdoria 1693.0 535.0 \n",
"Sassuolo 1611.0 385.0 \n",
"Spezia 1708.0 470.0 \n",
"Torino 1597.0 508.0 \n",
"Udinese 1577.0 326.0 \n",
"\n",
" vs_team_aerials_lost vs_team_aerials_won_pct \n",
"team_idx \n",
"Atalanta 472.0 45.2 \n",
"Bologna 306.0 55.3 \n",
"Cremonese 462.0 56.3 \n",
"Empoli 330.0 55.5 \n",
"Fiorentina 504.0 45.7 \n",
"Verona 615.0 50.2 \n",
"Inter 443.0 43.7 \n",
"Juventus 390.0 49.4 \n",
"Lazio 319.0 50.0 \n",
"Lecce 466.0 55.5 \n",
"Milan 456.0 45.9 \n",
"Monza 357.0 48.8 \n",
"Napoli 389.0 45.3 \n",
"Roma 426.0 43.7 \n",
"Salernitana 427.0 51.2 \n",
"Sampdoria 517.0 50.9 \n",
"Sassuolo 329.0 53.9 \n",
"Spezia 424.0 52.6 \n",
"Torino 474.0 51.7 \n",
"Udinese 390.0 45.5 \n",
"\n",
"[20 rows x 303 columns]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rcsv = pd.read_csv('fbref_data/teams.csv') \n",
"team = pd.DataFrame(rcsv)\n",
"\n",
"rcsv = pd.read_csv('fbref_data/teams_vs.csv') \n",
"vs_team = pd.DataFrame(rcsv)\n",
"\n",
"for i in range(1, team.shape[1]):\n",
" team = team.rename(columns = {team.columns[i] : 'team_' + team.columns[i]})\n",
" \n",
"for i in range(1, vs_team.shape[1]):\n",
" vs_team = vs_team.rename(columns = {vs_team.columns[i] : 'vs_team_' + vs_team.columns[i]})\n",
" \n",
"vs_team.pop('team')\n",
"\n",
"team_data = pd.concat([team, vs_team], axis = 1)\n",
"\n",
"team_data['team_idx'] = team_data['team']\n",
"for i in range(team_data.shape[0]):\n",
" team_data['team_idx'][i] = team_data['team_idx'][i].split(' ')[-1]\n",
"\n",
"team_data = team_data.set_index('team_idx')\n",
"\n",
"team_data\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "b6a3db98",
"metadata": {},
"outputs": [],
"source": [
"team_data.to_excel('mid_outputs/team_data.xlsx')"
]
},
{
"cell_type": "markdown",
"id": "cc50dde9",
"metadata": {},
"source": [
"Load data generated from players_dataset_creation"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "c34eb398",
"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>Unnamed: 0</th>\n",
" <th>id</th>\n",
" <th>r</th>\n",
" <th>team</th>\n",
" <th>surname</th>\n",
" <th>initial</th>\n",
" <th>fb_ID</th>\n",
" <th>age</th>\n",
" <th>birth_year</th>\n",
" <th>games</th>\n",
" <th>...</th>\n",
" <th>gk_pct_goal_kicks_launched</th>\n",
" <th>gk_goal_kick_length_avg</th>\n",
" <th>gk_crosses</th>\n",
" <th>gk_crosses_stopped</th>\n",
" <th>gk_crosses_stopped_pct</th>\n",
" <th>gk_def_actions_outside_pen_area</th>\n",
" <th>gk_def_actions_outside_pen_area_per90</th>\n",
" <th>gk_avg_distance_def_actions</th>\n",
" <th>vote_avg</th>\n",
" <th>vote_std</th>\n",
" </tr>\n",
" <tr>\n",
" <th>name</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Meret</th>\n",
" <td>0</td>\n",
" <td>572</td>\n",
" <td>P</td>\n",
" <td>Napoli</td>\n",
" <td>Meret</td>\n",
" <td>NaN</td>\n",
" <td>594</td>\n",
" <td>26-034</td>\n",
" <td>1997</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>20.0</td>\n",
" <td>26.8</td>\n",
" <td>308.0</td>\n",
" <td>10.0</td>\n",
" <td>3.2</td>\n",
" <td>32.0</td>\n",
" <td>1.07</td>\n",
" <td>17.0</td>\n",
" <td>6.200000</td>\n",
" <td>0.420317</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Provedel</th>\n",
" <td>1</td>\n",
" <td>2814</td>\n",
" <td>P</td>\n",
" <td>Lazio</td>\n",
" <td>Provedel</td>\n",
" <td>NaN</td>\n",
" <td>605</td>\n",
" <td>29-039</td>\n",
" <td>1994</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>36.0</td>\n",
" <td>34.7</td>\n",
" <td>402.0</td>\n",
" <td>17.0</td>\n",
" <td>4.2</td>\n",
" <td>46.0</td>\n",
" <td>1.49</td>\n",
" <td>16.4</td>\n",
" <td>6.274194</td>\n",
" <td>0.418112</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Vicario</th>\n",
" <td>2</td>\n",
" <td>4964</td>\n",
" <td>P</td>\n",
" <td>Empoli</td>\n",
" <td>Vicario</td>\n",
" <td>NaN</td>\n",
" <td>617</td>\n",
" <td>26-200</td>\n",
" <td>1996</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>48.9</td>\n",
" <td>42.6</td>\n",
" <td>489.0</td>\n",
" <td>28.0</td>\n",
" <td>5.7</td>\n",
" <td>15.0</td>\n",
" <td>0.63</td>\n",
" <td>10.7</td>\n",
" <td>6.458333</td>\n",
" <td>0.379601</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Szczesny</th>\n",
" <td>3</td>\n",
" <td>453</td>\n",
" <td>P</td>\n",
" <td>Juventus</td>\n",
" <td>Szczesny</td>\n",
" <td>NaN</td>\n",
" <td>613</td>\n",
" <td>33-007</td>\n",
" <td>1990</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>49.1</td>\n",
" <td>41.5</td>\n",
" <td>301.0</td>\n",
" <td>9.0</td>\n",
" <td>3.0</td>\n",
" <td>19.0</td>\n",
" <td>0.89</td>\n",
" <td>15.4</td>\n",
" <td>6.090909</td>\n",
" <td>0.324610</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Falcone</th>\n",
" <td>4</td>\n",
" <td>2134</td>\n",
" <td>P</td>\n",
" <td>Lecce</td>\n",
" <td>Falcone</td>\n",
" <td>NaN</td>\n",
" <td>587</td>\n",
" <td>28-013</td>\n",
" <td>1995</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>77.3</td>\n",
" <td>52.4</td>\n",
" <td>441.0</td>\n",
" <td>22.0</td>\n",
" <td>5.0</td>\n",
" <td>35.0</td>\n",
" <td>1.13</td>\n",
" <td>13.7</td>\n",
" <td>6.225806</td>\n",
" <td>0.521145</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",
" <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",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>De Luca</th>\n",
" <td>538</td>\n",
" <td>5512</td>\n",
" <td>A</td>\n",
" <td>Sampdoria</td>\n",
" <td>Luca</td>\n",
" <td>NaN</td>\n",
" <td>145</td>\n",
" <td>24-282</td>\n",
" <td>1998</td>\n",
" <td>2</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>5.958536</td>\n",
" <td>0.291436</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Voelkerling Persson</th>\n",
" <td>539</td>\n",
" <td>5837</td>\n",
" <td>A</td>\n",
" <td>Lecce</td>\n",
" <td>Persson</td>\n",
" <td>NaN</td>\n",
" <td>542</td>\n",
" <td>20-100</td>\n",
" <td>2003</td>\n",
" <td>7</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>6.068166</td>\n",
" <td>0.351902</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Montevago</th>\n",
" <td>540</td>\n",
" <td>6113</td>\n",
" <td>A</td>\n",
" <td>Sampdoria</td>\n",
" <td>Montevago</td>\n",
" <td>NaN</td>\n",
" <td>352</td>\n",
" <td>20-038</td>\n",
" <td>2003</td>\n",
" <td>6</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>5.618477</td>\n",
" <td>0.288497</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Krollis</th>\n",
" <td>541</td>\n",
" <td>6143</td>\n",
" <td>A</td>\n",
" <td>Spezia</td>\n",
" <td>Krollis</td>\n",
" <td>NaN</td>\n",
" <td>277</td>\n",
" <td>21-179</td>\n",
" <td>2001</td>\n",
" <td>1</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>6.290321</td>\n",
" <td>0.466766</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Vivaldo</th>\n",
" <td>542</td>\n",
" <td>6160</td>\n",
" <td>A</td>\n",
" <td>Udinese</td>\n",
" <td>Vivaldo</td>\n",
" <td>NaN</td>\n",
" <td>-1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>5.790668</td>\n",
" <td>0.631282</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>543 rows × 160 columns</p>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0 id r team surname initial fb_ID \\\n",
"name \n",
"Meret 0 572 P Napoli Meret NaN 594 \n",
"Provedel 1 2814 P Lazio Provedel NaN 605 \n",
"Vicario 2 4964 P Empoli Vicario NaN 617 \n",
"Szczesny 3 453 P Juventus Szczesny NaN 613 \n",
"Falcone 4 2134 P Lecce Falcone NaN 587 \n",
"... ... ... .. ... ... ... ... \n",
"De Luca 538 5512 A Sampdoria Luca NaN 145 \n",
"Voelkerling Persson 539 5837 A Lecce Persson NaN 542 \n",
"Montevago 540 6113 A Sampdoria Montevago NaN 352 \n",
"Krollis 541 6143 A Spezia Krollis NaN 277 \n",
"Vivaldo 542 6160 A Udinese Vivaldo NaN -1 \n",
"\n",
" age birth_year games ... \\\n",
"name ... \n",
"Meret 26-034 1997 0 ... \n",
"Provedel 29-039 1994 0 ... \n",
"Vicario 26-200 1996 0 ... \n",
"Szczesny 33-007 1990 0 ... \n",
"Falcone 28-013 1995 0 ... \n",
"... ... ... ... ... \n",
"De Luca 24-282 1998 2 ... \n",
"Voelkerling Persson 20-100 2003 7 ... \n",
"Montevago 20-038 2003 6 ... \n",
"Krollis 21-179 2001 1 ... \n",
"Vivaldo 0 0 0 ... \n",
"\n",
" gk_pct_goal_kicks_launched gk_goal_kick_length_avg \\\n",
"name \n",
"Meret 20.0 26.8 \n",
"Provedel 36.0 34.7 \n",
"Vicario 48.9 42.6 \n",
"Szczesny 49.1 41.5 \n",
"Falcone 77.3 52.4 \n",
"... ... ... \n",
"De Luca 0.0 0.0 \n",
"Voelkerling Persson 0.0 0.0 \n",
"Montevago 0.0 0.0 \n",
"Krollis 0.0 0.0 \n",
"Vivaldo 0.0 0.0 \n",
"\n",
" gk_crosses gk_crosses_stopped gk_crosses_stopped_pct \\\n",
"name \n",
"Meret 308.0 10.0 3.2 \n",
"Provedel 402.0 17.0 4.2 \n",
"Vicario 489.0 28.0 5.7 \n",
"Szczesny 301.0 9.0 3.0 \n",
"Falcone 441.0 22.0 5.0 \n",
"... ... ... ... \n",
"De Luca 0.0 0.0 0.0 \n",
"Voelkerling Persson 0.0 0.0 0.0 \n",
"Montevago 0.0 0.0 0.0 \n",
"Krollis 0.0 0.0 0.0 \n",
"Vivaldo 0.0 0.0 0.0 \n",
"\n",
" gk_def_actions_outside_pen_area \\\n",
"name \n",
"Meret 32.0 \n",
"Provedel 46.0 \n",
"Vicario 15.0 \n",
"Szczesny 19.0 \n",
"Falcone 35.0 \n",
"... ... \n",
"De Luca 0.0 \n",
"Voelkerling Persson 0.0 \n",
"Montevago 0.0 \n",
"Krollis 0.0 \n",
"Vivaldo 0.0 \n",
"\n",
" gk_def_actions_outside_pen_area_per90 \\\n",
"name \n",
"Meret 1.07 \n",
"Provedel 1.49 \n",
"Vicario 0.63 \n",
"Szczesny 0.89 \n",
"Falcone 1.13 \n",
"... ... \n",
"De Luca 0.00 \n",
"Voelkerling Persson 0.00 \n",
"Montevago 0.00 \n",
"Krollis 0.00 \n",
"Vivaldo 0.00 \n",
"\n",
" gk_avg_distance_def_actions vote_avg vote_std \n",
"name \n",
"Meret 17.0 6.200000 0.420317 \n",
"Provedel 16.4 6.274194 0.418112 \n",
"Vicario 10.7 6.458333 0.379601 \n",
"Szczesny 15.4 6.090909 0.324610 \n",
"Falcone 13.7 6.225806 0.521145 \n",
"... ... ... ... \n",
"De Luca 0.0 5.958536 0.291436 \n",
"Voelkerling Persson 0.0 6.068166 0.351902 \n",
"Montevago 0.0 5.618477 0.288497 \n",
"Krollis 0.0 6.290321 0.466766 \n",
"Vivaldo 0.0 5.790668 0.631282 \n",
"\n",
"[543 rows x 160 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rx = pd.read_excel('mid_outputs/players_stats.xlsx', index_col = 3) \n",
"players = pd.DataFrame(rx)\n",
"\n",
"players\n"
]
},
{
"cell_type": "markdown",
"id": "ae37dfe3",
"metadata": {},
"source": [
"Function for merging match data (player, team, opponent team)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "71c8804e",
"metadata": {},
"outputs": [],
"source": [
"def player_match_data(player, pteam, oppteam):\n",
" if(not(player in players.index)):\n",
" return None\n",
" \n",
" pdata = players.loc[[player]]\n",
" \n",
" pteam_stats = team_data.loc[[pteam]].rename(index = {pteam : player})\n",
" \n",
" oppteam_stats = team_data.loc[[oppteam]].rename(index = {oppteam : player})\n",
" \n",
" oppteam_stats = oppteam_stats.rename(lambda x: 'opp_' + x, axis='columns')\n",
" \n",
" out = pd.concat([pdata, pteam_stats, oppteam_stats], axis = 1)\n",
" \n",
" return(out)\n",
" "
]
},
{
"cell_type": "markdown",
"id": "a6fdd15b",
"metadata": {},
"source": [
"Output to excel file data for a player. \n",
"\n",
"The file is copied and there the desired features are manually selected and printed."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "7eb4e666",
"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>Unnamed: 0</th>\n",
" <th>id</th>\n",
" <th>r</th>\n",
" <th>team</th>\n",
" <th>surname</th>\n",
" <th>initial</th>\n",
" <th>fb_ID</th>\n",
" <th>age</th>\n",
" <th>birth_year</th>\n",
" <th>games</th>\n",
" <th>...</th>\n",
" <th>opp_vs_team_fouls</th>\n",
" <th>opp_vs_team_fouled</th>\n",
" <th>opp_vs_team_offsides</th>\n",
" <th>opp_vs_team_pens_won</th>\n",
" <th>opp_vs_team_pens_conceded</th>\n",
" <th>opp_vs_team_own_goals</th>\n",
" <th>opp_vs_team_ball_recoveries</th>\n",
" <th>opp_vs_team_aerials_won</th>\n",
" <th>opp_vs_team_aerials_lost</th>\n",
" <th>opp_vs_team_aerials_won_pct</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Frattesi</th>\n",
" <td>274</td>\n",
" <td>2848</td>\n",
" <td>C</td>\n",
" <td>Sassuolo</td>\n",
" <td>Frattesi</td>\n",
" <td>NaN</td>\n",
" <td>202</td>\n",
" <td>23-185</td>\n",
" <td>1999</td>\n",
" <td>31</td>\n",
" <td>...</td>\n",
" <td>338.0</td>\n",
" <td>356.0</td>\n",
" <td>40.0</td>\n",
" <td>1.0</td>\n",
" <td>8.0</td>\n",
" <td>1.0</td>\n",
" <td>1865.0</td>\n",
" <td>389.0</td>\n",
" <td>472.0</td>\n",
" <td>45.2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1 rows × 766 columns</p>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0 id r team surname initial fb_ID age \\\n",
"Frattesi 274 2848 C Sassuolo Frattesi NaN 202 23-185 \n",
"\n",
" birth_year games ... opp_vs_team_fouls opp_vs_team_fouled \\\n",
"Frattesi 1999 31 ... 338.0 356.0 \n",
"\n",
" opp_vs_team_offsides opp_vs_team_pens_won \\\n",
"Frattesi 40.0 1.0 \n",
"\n",
" opp_vs_team_pens_conceded opp_vs_team_own_goals \\\n",
"Frattesi 8.0 1.0 \n",
"\n",
" opp_vs_team_ball_recoveries opp_vs_team_aerials_won \\\n",
"Frattesi 1865.0 389.0 \n",
"\n",
" opp_vs_team_aerials_lost opp_vs_team_aerials_won_pct \n",
"Frattesi 472.0 45.2 \n",
"\n",
"[1 rows x 766 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test = player_match_data('Frattesi', 'Sassuolo', 'Atalanta')\n",
"test.to_excel('tmp/playermatchdata.xlsx')\n",
"\n",
"test"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "6b4c1b00",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Sassuolo'"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pteam = 'Sassuolo'\n",
"pteam_stats = team_data.loc[[pteam]]\n",
"pteam_stats.index[0]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "6ea6df1f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['r',\n",
" 'fb_ID',\n",
" 'games',\n",
" 'games_starts',\n",
" 'minutes',\n",
" 'goals',\n",
" 'assists',\n",
" 'cards_yellow',\n",
" 'cards_red',\n",
" 'xg',\n",
" 'npxg',\n",
" 'shots_on_target',\n",
" 'shots_on_target_pct',\n",
" 'goals_per_shot',\n",
" 'goals_per_shot_on_target',\n",
" 'passes_completed',\n",
" 'passes_pct',\n",
" 'passes_into_final_third',\n",
" 'passes_into_penalty_area',\n",
" 'progressive_passes',\n",
" 'passes_live',\n",
" 'passes_dead',\n",
" 'through_balls',\n",
" 'passes_switches',\n",
" 'crosses',\n",
" 'corner_kicks',\n",
" 'dribble_tackles',\n",
" 'dribbles_vs',\n",
" 'dribble_tackles_pct',\n",
" 'dribbled_past',\n",
" 'blocks',\n",
" 'blocked_shots',\n",
" 'blocked_passes',\n",
" 'interceptions',\n",
" 'clearances',\n",
" 'errors',\n",
" 'touches',\n",
" 'touches_def_pen_area',\n",
" 'touches_def_3rd',\n",
" 'touches_mid_3rd',\n",
" 'touches_att_3rd',\n",
" 'touches_att_pen_area',\n",
" 'touches_live_ball',\n",
" 'dribbles_completed',\n",
" 'dribbles',\n",
" 'dribbles_completed_pct',\n",
" 'carries',\n",
" 'progressive_carries',\n",
" 'carries_into_final_third',\n",
" 'carries_into_penalty_area',\n",
" 'passes_received',\n",
" 'miscontrols',\n",
" 'dispossessed',\n",
" 'fouls',\n",
" 'fouled',\n",
" 'aerials_won',\n",
" 'aerials_lost',\n",
" 'aerials_won_pct',\n",
" 'team_possession',\n",
" 'team_goals_assists_per90',\n",
" 'team_goals_pens_per90',\n",
" 'team_goals_assists_pens_per90',\n",
" 'team_xg_per90',\n",
" 'team_gk_goals_against_per90',\n",
" 'team_gk_save_pct',\n",
" 'team_gk_clean_sheets_pct',\n",
" 'team_passes_pct',\n",
" 'team_passes_pct_medium',\n",
" 'team_passes_pct_long',\n",
" 'team_sca_per90',\n",
" 'team_gca_per90',\n",
" 'team_dribble_tackles_pct',\n",
" 'team_aerials_won_pct',\n",
" 'vs_team_possession',\n",
" 'vs_team_goals_per90',\n",
" 'vs_team_assists_per90',\n",
" 'vs_team_xg_per90',\n",
" 'vs_team_gk_save_pct',\n",
" 'vs_team_gk_clean_sheets_pct',\n",
" 'vs_team_gk_pct_passes_launched',\n",
" 'vs_team_gk_crosses_stopped_pct',\n",
" 'vs_team_shots_on_target_per90',\n",
" 'vs_team_passes_pct',\n",
" 'vs_team_passes_pct_short',\n",
" 'vs_team_passes_pct_medium',\n",
" 'vs_team_passes_pct_long',\n",
" 'vs_team_sca_per90',\n",
" 'vs_team_gca_per90',\n",
" 'vs_team_dribble_tackles_pct',\n",
" 'vs_team_dribbles_completed_pct',\n",
" 'vs_team_aerials_won_pct']"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rx = pd.read_excel('tmp/playermatchdata_sel.xlsx', index_col = 0, header = None) \n",
"\n",
"out = list()\n",
"\n",
"for i in range(1, rx.shape[1]):\n",
" if(rx[i][2] == \"x\"):\n",
" out.append(rx[i][0])\n",
" \n",
"out"
]
},
{
"cell_type": "markdown",
"id": "d4097382",
"metadata": {},
"source": [
"Define and select the dataset features: abs features and rel features.\n",
" \n",
"Rel features are divided by the player minutes played.\n",
"\n",
"Rel features (game corrected) are divided by the player number of games instead of minutes. \n",
"For example, a player who plays 20 minutes and scores, would be to match for stats averaging. It is better to consider the goals made per match."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "47bc651f",
"metadata": {},
"outputs": [],
"source": [
"features_abs = ['r',\n",
" 'games',\n",
" 'games_starts', \n",
" 'minutes',\n",
" 'shots_on_target_pct',\n",
" 'goals_per_shot',\n",
" 'goals_per_shot_on_target',\n",
" 'passes_pct',\n",
" #'dribble_tackles_pct',\n",
" #'dribbles_completed_pct',\n",
" 'aerials_won_pct',\n",
" 'team_possession',\n",
" 'team_goals_assists_per90',\n",
" 'team_goals_pens_per90',\n",
" 'team_goals_assists_pens_per90',\n",
" 'team_xg_per90',\n",
" 'team_gk_goals_against_per90',\n",
" 'team_gk_save_pct',\n",
" 'team_gk_clean_sheets_pct',\n",
" 'team_passes_pct',\n",
" 'team_passes_pct_medium',\n",
" 'team_passes_pct_long',\n",
" 'team_sca_per90',\n",
" 'team_gca_per90',\n",
" #'team_dribble_tackles_pct',\n",
" 'team_aerials_won_pct',\n",
" 'vs_team_possession',\n",
" 'vs_team_goals_per90',\n",
" 'vs_team_assists_per90',\n",
" 'vs_team_xg_per90',\n",
" 'vs_team_gk_save_pct',\n",
" 'vs_team_gk_clean_sheets_pct',\n",
" 'vs_team_gk_pct_passes_launched',\n",
" 'vs_team_gk_crosses_stopped_pct',\n",
" 'vs_team_shots_on_target_per90',\n",
" 'vs_team_passes_pct',\n",
" 'vs_team_passes_pct_short',\n",
" 'vs_team_passes_pct_medium',\n",
" 'vs_team_passes_pct_long',\n",
" 'vs_team_sca_per90',\n",
" 'vs_team_gca_per90',\n",
" #'vs_team_dribble_tackles_pct',\n",
" #'vs_team_dribbles_completed_pct',\n",
" 'vs_team_aerials_won_pct',\n",
" 'opp_team_possession',\n",
" 'opp_team_goals_assists_per90',\n",
" 'opp_team_goals_pens_per90',\n",
" 'opp_team_goals_assists_pens_per90',\n",
" 'opp_team_xg_per90',\n",
" 'opp_team_gk_goals_against_per90',\n",
" 'opp_team_gk_save_pct',\n",
" 'opp_team_gk_clean_sheets_pct',\n",
" 'opp_team_passes_pct',\n",
" 'opp_team_passes_pct_medium',\n",
" 'opp_team_passes_pct_long',\n",
" 'opp_team_sca_per90',\n",
" 'opp_team_gca_per90',\n",
" #'opp_team_dribble_tackles_pct',\n",
" 'opp_team_aerials_won_pct',\n",
" 'opp_vs_team_possession',\n",
" 'opp_vs_team_goals_per90',\n",
" 'opp_vs_team_assists_per90',\n",
" 'opp_vs_team_xg_per90',\n",
" 'opp_vs_team_gk_save_pct',\n",
" 'opp_vs_team_gk_clean_sheets_pct',\n",
" 'opp_vs_team_gk_pct_passes_launched',\n",
" 'opp_vs_team_gk_crosses_stopped_pct',\n",
" 'opp_vs_team_shots_on_target_per90',\n",
" 'opp_vs_team_passes_pct',\n",
" 'opp_vs_team_passes_pct_short',\n",
" 'opp_vs_team_passes_pct_medium',\n",
" 'opp_vs_team_passes_pct_long',\n",
" 'opp_vs_team_sca_per90',\n",
" 'opp_vs_team_gca_per90',\n",
" #'opp_vs_team_dribble_tackles_pct',\n",
" #'opp_vs_team_dribbles_completed_pct',\n",
" 'opp_vs_team_aerials_won_pct',\n",
" \n",
" 'vote_avg',\n",
" 'vote_std']\n",
"\n",
"features_rel = [\n",
" 'goals',\n",
" 'assists',\n",
" 'cards_yellow',\n",
" 'cards_red',\n",
" 'xg',\n",
" 'npxg',\n",
" 'shots_on_target',\n",
" 'passes_completed',\n",
" 'passes_into_final_third',\n",
" 'passes_into_penalty_area',\n",
" 'progressive_passes',\n",
" 'passes_live',\n",
" 'passes_dead',\n",
" 'through_balls',\n",
" 'passes_switches',\n",
" 'crosses',\n",
" 'corner_kicks',\n",
" #'dribble_tackles',\n",
" #'dribbles_vs',\n",
" #'dribbled_past',\n",
" 'blocks',\n",
" 'blocked_shots',\n",
" 'blocked_passes',\n",
" 'interceptions',\n",
" 'clearances',\n",
" 'errors',\n",
" 'touches',\n",
" 'touches_def_pen_area',\n",
" 'touches_def_3rd',\n",
" 'touches_mid_3rd',\n",
" 'touches_att_3rd',\n",
" 'touches_att_pen_area',\n",
" 'touches_live_ball',\n",
" #'dribbles_completed',\n",
" #'dribbles',\n",
" 'passes_received',\n",
" 'miscontrols',\n",
" 'dispossessed',\n",
" 'fouls',\n",
" 'fouled',\n",
" 'aerials_won',\n",
" 'aerials_lost',\n",
" 'carries',\n",
" 'progressive_carries',\n",
" 'carries_into_final_third',\n",
" 'carries_into_penalty_area']\n",
"\n",
"features_rel_gamecorr = [\n",
" 'goals',\n",
" 'assists',\n",
" 'xg',\n",
" 'npxg',\n",
" 'cards_yellow',\n",
" 'cards_red'\n",
"]"
]
},
{
"cell_type": "markdown",
"id": "ced70285",
"metadata": {},
"source": [
"Function for merging match data (player, team, opponent team) and select only the desired features, applying the desired corrections."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "3f43d509",
"metadata": {},
"outputs": [],
"source": [
"def player_match_data_ext(player, pteam, oppteam):\n",
" pdata = player_match_data(player, pteam, oppteam)\n",
" \n",
" if(not isinstance(pdata, pd.DataFrame)):\n",
" return None\n",
" \n",
" out = pd.concat([pdata[features_abs], pdata[features_rel]], axis = 1)\n",
" \n",
" out[features_rel] = out[features_rel] / max(pdata['minutes'][0], 1)\n",
" \n",
" out[features_rel_gamecorr] = out[features_rel_gamecorr] * (pdata['minutes'][0] / max(pdata['games'][0], 1) / 90)\n",
" \n",
" return out\n",
" "
]
},
{
"cell_type": "markdown",
"id": "959bf152",
"metadata": {},
"source": [
"Columns variable for the match data, to be then added to votes data."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "930d00c7",
"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>r</th>\n",
" <th>games</th>\n",
" <th>games_starts</th>\n",
" <th>minutes</th>\n",
" <th>shots_on_target_pct</th>\n",
" <th>goals_per_shot</th>\n",
" <th>goals_per_shot_on_target</th>\n",
" <th>passes_pct</th>\n",
" <th>aerials_won_pct</th>\n",
" <th>team_possession</th>\n",
" <th>...</th>\n",
" <th>miscontrols</th>\n",
" <th>dispossessed</th>\n",
" <th>fouls</th>\n",
" <th>fouled</th>\n",
" <th>aerials_won</th>\n",
" <th>aerials_lost</th>\n",
" <th>carries</th>\n",
" <th>progressive_carries</th>\n",
" <th>carries_into_final_third</th>\n",
" <th>carries_into_penalty_area</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Frattesi</th>\n",
" <td>C</td>\n",
" <td>31</td>\n",
" <td>30</td>\n",
" <td>2454</td>\n",
" <td>39.6</td>\n",
" <td>0.11</td>\n",
" <td>0.29</td>\n",
" <td>77.5</td>\n",
" <td>50.0</td>\n",
" <td>48.9</td>\n",
" <td>...</td>\n",
" <td>0.01956</td>\n",
" <td>0.014262</td>\n",
" <td>0.01467</td>\n",
" <td>0.01956</td>\n",
" <td>0.008965</td>\n",
" <td>0.008965</td>\n",
" <td>0.277914</td>\n",
" <td>0.026487</td>\n",
" <td>0.019967</td>\n",
" <td>0.007742</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1 rows × 112 columns</p>\n",
"</div>"
],
"text/plain": [
" r games games_starts minutes shots_on_target_pct \\\n",
"Frattesi C 31 30 2454 39.6 \n",
"\n",
" goals_per_shot goals_per_shot_on_target passes_pct \\\n",
"Frattesi 0.11 0.29 77.5 \n",
"\n",
" aerials_won_pct team_possession ... miscontrols dispossessed \\\n",
"Frattesi 50.0 48.9 ... 0.01956 0.014262 \n",
"\n",
" fouls fouled aerials_won aerials_lost carries \\\n",
"Frattesi 0.01467 0.01956 0.008965 0.008965 0.277914 \n",
"\n",
" progressive_carries carries_into_final_third \\\n",
"Frattesi 0.026487 0.019967 \n",
"\n",
" carries_into_penalty_area \n",
"Frattesi 0.007742 \n",
"\n",
"[1 rows x 112 columns]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test = player_match_data_ext('Frattesi', 'Sassuolo', 'Atalanta')\n",
"\n",
"add_columns = test.columns\n",
"\n",
"test"
]
},
{
"cell_type": "markdown",
"id": "8d95c9ef",
"metadata": {},
"source": [
"Load Fantacalcio votes data for each match of the season."
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "3ae718d2",
"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>8809</th>\n",
" <td>31</td>\n",
" <td>Tameze</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</td>\n",
" <td>1</td>\n",
" <td>6.5</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>6.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8810</th>\n",
" <td>31</td>\n",
" <td>Abildgaard</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</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>8811</th>\n",
" <td>31</td>\n",
" <td>Lasagna</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</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>8812</th>\n",
" <td>31</td>\n",
" <td>Gaich</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</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>8813</th>\n",
" <td>31</td>\n",
" <td>Djuric</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</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>8814 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",
"8809 31 Tameze Verona Bologna 1 6.5 0 0 \n",
"8810 31 Abildgaard Verona Bologna 1 6.0 0 0 \n",
"8811 31 Lasagna Verona Bologna 1 5.5 0 0 \n",
"8812 31 Gaich Verona Bologna 1 6.0 0 0 \n",
"8813 31 Djuric Verona Bologna 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",
"8809 0.0 6.5 \n",
"8810 0.0 6.0 \n",
"8811 0.0 5.5 \n",
"8812 0.0 6.0 \n",
"8813 0.0 6.0 \n",
"\n",
"[8814 rows x 10 columns]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"votes = pd.read_excel('mid_outputs/players_votes.xlsx', index_col = 0)\n",
"votes"
]
},
{
"cell_type": "markdown",
"id": "8cf677e4",
"metadata": {},
"source": [
"Merge votes data with match data for the player."
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "ec0bc56b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0\n",
"100\n",
"200\n",
"300\n",
"400\n",
"500\n",
"700\n",
"800\n",
"900\n",
"1000\n",
"1100\n",
"1300\n",
"1400\n",
"1500\n",
"1600\n",
"1700\n",
"1800\n",
"1900\n",
"2000\n",
"2200\n",
"2300\n",
"2400\n",
"2500\n",
"2600\n",
"2700\n",
"2800\n",
"2900\n",
"3000\n",
"3100\n",
"3200\n",
"3300\n",
"3400\n",
"3500\n",
"3600\n",
"3700\n",
"3800\n",
"3900\n",
"4000\n",
"4100\n",
"4200\n",
"4300\n",
"4400\n",
"4500\n",
"4600\n",
"4700\n",
"4800\n",
"4900\n",
"5000\n",
"5100\n",
"5200\n",
"5300\n",
"5400\n",
"5500\n",
"5600\n",
"5700\n",
"5800\n",
"5900\n",
"6000\n",
"6100\n",
"6200\n",
"6300\n",
"6400\n",
"6500\n",
"6600\n",
"6700\n",
"6800\n",
"6900\n",
"7000\n",
"7100\n",
"7300\n",
"7400\n",
"7500\n",
"7600\n",
"7700\n",
"7800\n",
"7900\n",
"8000\n",
"8100\n",
"8200\n",
"8300\n",
"8400\n",
"8500\n",
"8600\n",
"8700\n",
"8800\n"
]
}
],
"source": [
"db = votes.copy()\n",
"\n",
"delta = pd.DataFrame(columns = add_columns)\n",
"\n",
"for i in range(db.shape[0]):\n",
" ext_data = player_match_data_ext(db['player'][i], db['team'][i], db['oppteam'][i])\n",
" \n",
" if(not isinstance(ext_data, pd.DataFrame)):\n",
" continue\n",
" \n",
" ext_data = ext_data.rename(index = {db['player'][i] : i})\n",
" \n",
" delta = pd.concat([delta, ext_data], axis = 0)\n",
" \n",
" if(i % 100 == 0):\n",
" print(i)\n",
" \n",
"db = pd.concat([db, delta], axis = 1)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "b292f9f9",
"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",
" <th>...</th>\n",
" <th>miscontrols</th>\n",
" <th>dispossessed</th>\n",
" <th>fouls</th>\n",
" <th>fouled</th>\n",
" <th>aerials_won</th>\n",
" <th>aerials_lost</th>\n",
" <th>carries</th>\n",
" <th>progressive_carries</th>\n",
" <th>carries_into_final_third</th>\n",
" <th>carries_into_penalty_area</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",
" <td>...</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</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",
" <td>...</td>\n",
" <td>0.006961</td>\n",
" <td>0.001392</td>\n",
" <td>0.011137</td>\n",
" <td>0.006961</td>\n",
" <td>0.015313</td>\n",
" <td>0.010209</td>\n",
" <td>0.386543</td>\n",
" <td>0.007889</td>\n",
" <td>0.015777</td>\n",
" <td>0.000000</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",
" <td>...</td>\n",
" <td>0.006734</td>\n",
" <td>0.004209</td>\n",
" <td>0.008418</td>\n",
" <td>0.004209</td>\n",
" <td>0.028620</td>\n",
" <td>0.022727</td>\n",
" <td>0.414141</td>\n",
" <td>0.005051</td>\n",
" <td>0.005051</td>\n",
" <td>0.000842</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",
" <td>...</td>\n",
" <td>0.005727</td>\n",
" <td>0.005011</td>\n",
" <td>0.013601</td>\n",
" <td>0.002147</td>\n",
" <td>0.017180</td>\n",
" <td>0.010021</td>\n",
" <td>0.284896</td>\n",
" <td>0.011453</td>\n",
" <td>0.010021</td>\n",
" <td>0.000716</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",
" <td>...</td>\n",
" <td>0.013018</td>\n",
" <td>0.003550</td>\n",
" <td>0.015385</td>\n",
" <td>0.008284</td>\n",
" <td>0.047337</td>\n",
" <td>0.027219</td>\n",
" <td>0.269822</td>\n",
" <td>0.002367</td>\n",
" <td>0.004734</td>\n",
" <td>0.000000</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",
" <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",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8809</th>\n",
" <td>31</td>\n",
" <td>Tameze</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</td>\n",
" <td>1</td>\n",
" <td>6.5</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>6.5</td>\n",
" <td>...</td>\n",
" <td>0.012597</td>\n",
" <td>0.010565</td>\n",
" <td>0.010565</td>\n",
" <td>0.010971</td>\n",
" <td>0.009752</td>\n",
" <td>0.010565</td>\n",
" <td>0.236489</td>\n",
" <td>0.010158</td>\n",
" <td>0.012190</td>\n",
" <td>0.001625</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8810</th>\n",
" <td>31</td>\n",
" <td>Abildgaard</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</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",
" <td>...</td>\n",
" <td>0.010152</td>\n",
" <td>0.000000</td>\n",
" <td>0.015228</td>\n",
" <td>0.005076</td>\n",
" <td>0.076142</td>\n",
" <td>0.025381</td>\n",
" <td>0.126904</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8811</th>\n",
" <td>31</td>\n",
" <td>Lasagna</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</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",
" <td>...</td>\n",
" <td>0.033694</td>\n",
" <td>0.021615</td>\n",
" <td>0.015893</td>\n",
" <td>0.013986</td>\n",
" <td>0.012715</td>\n",
" <td>0.043229</td>\n",
" <td>0.169739</td>\n",
" <td>0.022886</td>\n",
" <td>0.014622</td>\n",
" <td>0.008900</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8812</th>\n",
" <td>31</td>\n",
" <td>Gaich</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</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",
" <td>...</td>\n",
" <td>0.031034</td>\n",
" <td>0.013793</td>\n",
" <td>0.027586</td>\n",
" <td>0.022414</td>\n",
" <td>0.036207</td>\n",
" <td>0.075862</td>\n",
" <td>0.220690</td>\n",
" <td>0.008621</td>\n",
" <td>0.005172</td>\n",
" <td>0.006897</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8813</th>\n",
" <td>31</td>\n",
" <td>Djuric</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</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",
" <td>...</td>\n",
" <td>0.024334</td>\n",
" <td>0.008111</td>\n",
" <td>0.024334</td>\n",
" <td>0.023175</td>\n",
" <td>0.152955</td>\n",
" <td>0.040556</td>\n",
" <td>0.203940</td>\n",
" <td>0.001159</td>\n",
" <td>0.004635</td>\n",
" <td>0.002317</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>8814 rows × 122 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",
"8809 31 Tameze Verona Bologna 1 6.5 0 0 \n",
"8810 31 Abildgaard Verona Bologna 1 6.0 0 0 \n",
"8811 31 Lasagna Verona Bologna 1 5.5 0 0 \n",
"8812 31 Gaich Verona Bologna 1 6.0 0 0 \n",
"8813 31 Djuric Verona Bologna 1 6.0 0 0 \n",
"\n",
" cards_malus fantavote ... miscontrols dispossessed fouls \\\n",
"0 0.5 5.5 ... 0.000000 0.000000 0.000000 \n",
"1 0.0 10.0 ... 0.006961 0.001392 0.011137 \n",
"2 0.0 6.0 ... 0.006734 0.004209 0.008418 \n",
"3 0.5 5.5 ... 0.005727 0.005011 0.013601 \n",
"4 0.5 5.0 ... 0.013018 0.003550 0.015385 \n",
"... ... ... ... ... ... ... \n",
"8809 0.0 6.5 ... 0.012597 0.010565 0.010565 \n",
"8810 0.0 6.0 ... 0.010152 0.000000 0.015228 \n",
"8811 0.0 5.5 ... 0.033694 0.021615 0.015893 \n",
"8812 0.0 6.0 ... 0.031034 0.013793 0.027586 \n",
"8813 0.0 6.0 ... 0.024334 0.008111 0.024334 \n",
"\n",
" fouled aerials_won aerials_lost carries progressive_carries \\\n",
"0 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"1 0.006961 0.015313 0.010209 0.386543 0.007889 \n",
"2 0.004209 0.028620 0.022727 0.414141 0.005051 \n",
"3 0.002147 0.017180 0.010021 0.284896 0.011453 \n",
"4 0.008284 0.047337 0.027219 0.269822 0.002367 \n",
"... ... ... ... ... ... \n",
"8809 0.010971 0.009752 0.010565 0.236489 0.010158 \n",
"8810 0.005076 0.076142 0.025381 0.126904 0.000000 \n",
"8811 0.013986 0.012715 0.043229 0.169739 0.022886 \n",
"8812 0.022414 0.036207 0.075862 0.220690 0.008621 \n",
"8813 0.023175 0.152955 0.040556 0.203940 0.001159 \n",
"\n",
" carries_into_final_third carries_into_penalty_area \n",
"0 0.000000 0.000000 \n",
"1 0.015777 0.000000 \n",
"2 0.005051 0.000842 \n",
"3 0.010021 0.000716 \n",
"4 0.004734 0.000000 \n",
"... ... ... \n",
"8809 0.012190 0.001625 \n",
"8810 0.000000 0.000000 \n",
"8811 0.014622 0.008900 \n",
"8812 0.005172 0.006897 \n",
"8813 0.004635 0.002317 \n",
"\n",
"[8814 rows x 122 columns]"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"db"
]
},
{
"cell_type": "markdown",
"id": "d237f87b",
"metadata": {},
"source": [
"Remove undesired database entries."
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "1db9f77f",
"metadata": {},
"outputs": [],
"source": [
"db = db.drop(db[db.r == 'P'].index) # remove goalkeepers\n",
"db = db.drop(db[db.r != db.r].index) # remove non existing players (by searching NaN values)\n",
"db = db.drop(db[db.xg != db.xg].index)\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "f56df3ca",
"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",
" <th>...</th>\n",
" <th>miscontrols</th>\n",
" <th>dispossessed</th>\n",
" <th>fouls</th>\n",
" <th>fouled</th>\n",
" <th>aerials_won</th>\n",
" <th>aerials_lost</th>\n",
" <th>carries</th>\n",
" <th>progressive_carries</th>\n",
" <th>carries_into_final_third</th>\n",
" <th>carries_into_penalty_area</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\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",
" <td>...</td>\n",
" <td>0.006961</td>\n",
" <td>0.001392</td>\n",
" <td>0.011137</td>\n",
" <td>0.006961</td>\n",
" <td>0.015313</td>\n",
" <td>0.010209</td>\n",
" <td>0.386543</td>\n",
" <td>0.007889</td>\n",
" <td>0.015777</td>\n",
" <td>0.000000</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",
" <td>...</td>\n",
" <td>0.006734</td>\n",
" <td>0.004209</td>\n",
" <td>0.008418</td>\n",
" <td>0.004209</td>\n",
" <td>0.028620</td>\n",
" <td>0.022727</td>\n",
" <td>0.414141</td>\n",
" <td>0.005051</td>\n",
" <td>0.005051</td>\n",
" <td>0.000842</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",
" <td>...</td>\n",
" <td>0.005727</td>\n",
" <td>0.005011</td>\n",
" <td>0.013601</td>\n",
" <td>0.002147</td>\n",
" <td>0.017180</td>\n",
" <td>0.010021</td>\n",
" <td>0.284896</td>\n",
" <td>0.011453</td>\n",
" <td>0.010021</td>\n",
" <td>0.000716</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",
" <td>...</td>\n",
" <td>0.013018</td>\n",
" <td>0.003550</td>\n",
" <td>0.015385</td>\n",
" <td>0.008284</td>\n",
" <td>0.047337</td>\n",
" <td>0.027219</td>\n",
" <td>0.269822</td>\n",
" <td>0.002367</td>\n",
" <td>0.004734</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>1</td>\n",
" <td>Zortea</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",
" <td>...</td>\n",
" <td>0.017279</td>\n",
" <td>0.006479</td>\n",
" <td>0.019438</td>\n",
" <td>0.010799</td>\n",
" <td>0.006479</td>\n",
" <td>0.017279</td>\n",
" <td>0.431965</td>\n",
" <td>0.034557</td>\n",
" <td>0.025918</td>\n",
" <td>0.002160</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",
" <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",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8809</th>\n",
" <td>31</td>\n",
" <td>Tameze</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</td>\n",
" <td>1</td>\n",
" <td>6.5</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>6.5</td>\n",
" <td>...</td>\n",
" <td>0.012597</td>\n",
" <td>0.010565</td>\n",
" <td>0.010565</td>\n",
" <td>0.010971</td>\n",
" <td>0.009752</td>\n",
" <td>0.010565</td>\n",
" <td>0.236489</td>\n",
" <td>0.010158</td>\n",
" <td>0.012190</td>\n",
" <td>0.001625</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8810</th>\n",
" <td>31</td>\n",
" <td>Abildgaard</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</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",
" <td>...</td>\n",
" <td>0.010152</td>\n",
" <td>0.000000</td>\n",
" <td>0.015228</td>\n",
" <td>0.005076</td>\n",
" <td>0.076142</td>\n",
" <td>0.025381</td>\n",
" <td>0.126904</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8811</th>\n",
" <td>31</td>\n",
" <td>Lasagna</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</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",
" <td>...</td>\n",
" <td>0.033694</td>\n",
" <td>0.021615</td>\n",
" <td>0.015893</td>\n",
" <td>0.013986</td>\n",
" <td>0.012715</td>\n",
" <td>0.043229</td>\n",
" <td>0.169739</td>\n",
" <td>0.022886</td>\n",
" <td>0.014622</td>\n",
" <td>0.008900</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8812</th>\n",
" <td>31</td>\n",
" <td>Gaich</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</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",
" <td>...</td>\n",
" <td>0.031034</td>\n",
" <td>0.013793</td>\n",
" <td>0.027586</td>\n",
" <td>0.022414</td>\n",
" <td>0.036207</td>\n",
" <td>0.075862</td>\n",
" <td>0.220690</td>\n",
" <td>0.008621</td>\n",
" <td>0.005172</td>\n",
" <td>0.006897</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8813</th>\n",
" <td>31</td>\n",
" <td>Djuric</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</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",
" <td>...</td>\n",
" <td>0.024334</td>\n",
" <td>0.008111</td>\n",
" <td>0.024334</td>\n",
" <td>0.023175</td>\n",
" <td>0.152955</td>\n",
" <td>0.040556</td>\n",
" <td>0.203940</td>\n",
" <td>0.001159</td>\n",
" <td>0.004635</td>\n",
" <td>0.002317</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>7929 rows × 122 columns</p>\n",
"</div>"
],
"text/plain": [
" matchday player team oppteam home vote goals assists \\\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",
"5 1 Zortea Atalanta Sampdoria 0 6.0 0 0 \n",
"... ... ... ... ... ... ... ... ... \n",
"8809 31 Tameze Verona Bologna 1 6.5 0 0 \n",
"8810 31 Abildgaard Verona Bologna 1 6.0 0 0 \n",
"8811 31 Lasagna Verona Bologna 1 5.5 0 0 \n",
"8812 31 Gaich Verona Bologna 1 6.0 0 0 \n",
"8813 31 Djuric Verona Bologna 1 6.0 0 0 \n",
"\n",
" cards_malus fantavote ... miscontrols dispossessed fouls \\\n",
"1 0.0 10.0 ... 0.006961 0.001392 0.011137 \n",
"2 0.0 6.0 ... 0.006734 0.004209 0.008418 \n",
"3 0.5 5.5 ... 0.005727 0.005011 0.013601 \n",
"4 0.5 5.0 ... 0.013018 0.003550 0.015385 \n",
"5 0.5 5.5 ... 0.017279 0.006479 0.019438 \n",
"... ... ... ... ... ... ... \n",
"8809 0.0 6.5 ... 0.012597 0.010565 0.010565 \n",
"8810 0.0 6.0 ... 0.010152 0.000000 0.015228 \n",
"8811 0.0 5.5 ... 0.033694 0.021615 0.015893 \n",
"8812 0.0 6.0 ... 0.031034 0.013793 0.027586 \n",
"8813 0.0 6.0 ... 0.024334 0.008111 0.024334 \n",
"\n",
" fouled aerials_won aerials_lost carries progressive_carries \\\n",
"1 0.006961 0.015313 0.010209 0.386543 0.007889 \n",
"2 0.004209 0.028620 0.022727 0.414141 0.005051 \n",
"3 0.002147 0.017180 0.010021 0.284896 0.011453 \n",
"4 0.008284 0.047337 0.027219 0.269822 0.002367 \n",
"5 0.010799 0.006479 0.017279 0.431965 0.034557 \n",
"... ... ... ... ... ... \n",
"8809 0.010971 0.009752 0.010565 0.236489 0.010158 \n",
"8810 0.005076 0.076142 0.025381 0.126904 0.000000 \n",
"8811 0.013986 0.012715 0.043229 0.169739 0.022886 \n",
"8812 0.022414 0.036207 0.075862 0.220690 0.008621 \n",
"8813 0.023175 0.152955 0.040556 0.203940 0.001159 \n",
"\n",
" carries_into_final_third carries_into_penalty_area \n",
"1 0.015777 0.000000 \n",
"2 0.005051 0.000842 \n",
"3 0.010021 0.000716 \n",
"4 0.004734 0.000000 \n",
"5 0.025918 0.002160 \n",
"... ... ... \n",
"8809 0.012190 0.001625 \n",
"8810 0.000000 0.000000 \n",
"8811 0.014622 0.008900 \n",
"8812 0.005172 0.006897 \n",
"8813 0.004635 0.002317 \n",
"\n",
"[7929 rows x 122 columns]"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"db"
]
},
{
"cell_type": "markdown",
"id": "ab69d09e",
"metadata": {},
"source": [
"Save outfield players database to file."
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "df26c8e0",
"metadata": {},
"outputs": [],
"source": [
"db.to_excel('mid_outputs/database_entries.xlsx')"
]
},
{
"cell_type": "markdown",
"id": "38b564d2",
"metadata": {},
"source": [
"Do the same process for goalkeepers, generating a different database."
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "4d06576a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 - matchday\n",
"1 - player\n",
"2 - team\n",
"3 - oppteam\n",
"4 - home\n",
"5 - vote\n",
"6 - goals\n",
"7 - assists\n",
"8 - cards_malus\n",
"9 - fantavote\n",
"10 - r\n",
"11 - games\n",
"12 - games_starts\n",
"13 - minutes\n",
"14 - shots_on_target_pct\n",
"15 - goals_per_shot\n",
"16 - goals_per_shot_on_target\n",
"17 - passes_pct\n",
"18 - aerials_won_pct\n",
"19 - team_possession\n",
"20 - team_goals_assists_per90\n",
"21 - team_goals_pens_per90\n",
"22 - team_goals_assists_pens_per90\n",
"23 - team_xg_per90\n",
"24 - team_gk_goals_against_per90\n",
"25 - team_gk_save_pct\n",
"26 - team_gk_clean_sheets_pct\n",
"27 - team_passes_pct\n",
"28 - team_passes_pct_medium\n",
"29 - team_passes_pct_long\n",
"30 - team_sca_per90\n",
"31 - team_gca_per90\n",
"32 - team_aerials_won_pct\n",
"33 - vs_team_possession\n",
"34 - vs_team_goals_per90\n",
"35 - vs_team_assists_per90\n",
"36 - vs_team_xg_per90\n",
"37 - vs_team_gk_save_pct\n",
"38 - vs_team_gk_clean_sheets_pct\n",
"39 - vs_team_gk_pct_passes_launched\n",
"40 - vs_team_gk_crosses_stopped_pct\n",
"41 - vs_team_shots_on_target_per90\n",
"42 - vs_team_passes_pct\n",
"43 - vs_team_passes_pct_short\n",
"44 - vs_team_passes_pct_medium\n",
"45 - vs_team_passes_pct_long\n",
"46 - vs_team_sca_per90\n",
"47 - vs_team_gca_per90\n",
"48 - vs_team_aerials_won_pct\n",
"49 - opp_team_possession\n",
"50 - opp_team_goals_assists_per90\n",
"51 - opp_team_goals_pens_per90\n",
"52 - opp_team_goals_assists_pens_per90\n",
"53 - opp_team_xg_per90\n",
"54 - opp_team_gk_goals_against_per90\n",
"55 - opp_team_gk_save_pct\n",
"56 - opp_team_gk_clean_sheets_pct\n",
"57 - opp_team_passes_pct\n",
"58 - opp_team_passes_pct_medium\n",
"59 - opp_team_passes_pct_long\n",
"60 - opp_team_sca_per90\n",
"61 - opp_team_gca_per90\n",
"62 - opp_team_aerials_won_pct\n",
"63 - opp_vs_team_possession\n",
"64 - opp_vs_team_goals_per90\n",
"65 - opp_vs_team_assists_per90\n",
"66 - opp_vs_team_xg_per90\n",
"67 - opp_vs_team_gk_save_pct\n",
"68 - opp_vs_team_gk_clean_sheets_pct\n",
"69 - opp_vs_team_gk_pct_passes_launched\n",
"70 - opp_vs_team_gk_crosses_stopped_pct\n",
"71 - opp_vs_team_shots_on_target_per90\n",
"72 - opp_vs_team_passes_pct\n",
"73 - opp_vs_team_passes_pct_short\n",
"74 - opp_vs_team_passes_pct_medium\n",
"75 - opp_vs_team_passes_pct_long\n",
"76 - opp_vs_team_sca_per90\n",
"77 - opp_vs_team_gca_per90\n",
"78 - opp_vs_team_aerials_won_pct\n",
"79 - vote_avg\n",
"80 - vote_std\n",
"81 - goals\n",
"82 - assists\n",
"83 - cards_yellow\n",
"84 - cards_red\n",
"85 - xg\n",
"86 - npxg\n",
"87 - shots_on_target\n",
"88 - passes_completed\n",
"89 - passes_into_final_third\n",
"90 - passes_into_penalty_area\n",
"91 - progressive_passes\n",
"92 - passes_live\n",
"93 - passes_dead\n",
"94 - through_balls\n",
"95 - passes_switches\n",
"96 - crosses\n",
"97 - corner_kicks\n",
"98 - blocks\n",
"99 - blocked_shots\n",
"100 - blocked_passes\n",
"101 - interceptions\n",
"102 - clearances\n",
"103 - errors\n",
"104 - touches\n",
"105 - touches_def_pen_area\n",
"106 - touches_def_3rd\n",
"107 - touches_mid_3rd\n",
"108 - touches_att_3rd\n",
"109 - touches_att_pen_area\n",
"110 - touches_live_ball\n",
"111 - passes_received\n",
"112 - miscontrols\n",
"113 - dispossessed\n",
"114 - fouls\n",
"115 - fouled\n",
"116 - aerials_won\n",
"117 - aerials_lost\n",
"118 - carries\n",
"119 - progressive_carries\n",
"120 - carries_into_final_third\n",
"121 - carries_into_penalty_area\n"
]
}
],
"source": [
"for i in range(db.columns.shape[0]):\n",
" print(str(i) + \" - \" + str(db.columns[i]))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "01bb7413",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['r',\n",
" 'fb_ID',\n",
" 'gk_games',\n",
" 'gk_games_starts',\n",
" 'gk_minutes',\n",
" 'gk_goals_against_per90',\n",
" 'gk_shots_on_target_against',\n",
" 'gk_saves',\n",
" 'gk_save_pct',\n",
" 'gk_clean_sheets_pct',\n",
" 'gk_free_kick_goals_against',\n",
" 'gk_corner_kick_goals_against',\n",
" 'gk_own_goals_against',\n",
" 'gk_psxg',\n",
" 'gk_psnpxg_per_shot_on_target_against',\n",
" 'gk_psxg_net',\n",
" 'gk_psxg_net_per90',\n",
" 'gk_passes_completed_launched',\n",
" 'gk_passes_launched',\n",
" 'gk_passes_pct_launched',\n",
" 'gk_passes',\n",
" 'gk_passes_throws',\n",
" 'gk_pct_passes_launched',\n",
" 'gk_passes_length_avg',\n",
" 'gk_goal_kicks',\n",
" 'gk_pct_goal_kicks_launched',\n",
" 'gk_goal_kick_length_avg',\n",
" 'gk_crosses',\n",
" 'gk_crosses_stopped',\n",
" 'gk_crosses_stopped_pct',\n",
" 'gk_def_actions_outside_pen_area',\n",
" 'gk_def_actions_outside_pen_area_per90',\n",
" 'gk_avg_distance_def_actions',\n",
" 'team_possession',\n",
" 'team_goals_assists_per90',\n",
" 'team_goals_pens_per90',\n",
" 'team_goals_assists_pens_per90',\n",
" 'team_xg_per90',\n",
" 'team_gk_goals_against_per90',\n",
" 'team_gk_save_pct',\n",
" 'team_gk_clean_sheets_pct',\n",
" 'team_passes_pct',\n",
" 'team_passes_pct_medium',\n",
" 'team_passes_pct_long',\n",
" 'team_sca_per90',\n",
" 'team_gca_per90',\n",
" 'team_dribble_tackles_pct',\n",
" 'team_aerials_won_pct',\n",
" 'vs_team_possession',\n",
" 'vs_team_goals_per90',\n",
" 'vs_team_assists_per90',\n",
" 'vs_team_xg_per90',\n",
" 'vs_team_gk_save_pct',\n",
" 'vs_team_gk_clean_sheets_pct',\n",
" 'vs_team_gk_pct_passes_launched',\n",
" 'vs_team_gk_crosses_stopped_pct',\n",
" 'vs_team_shots_on_target_per90',\n",
" 'vs_team_passes_pct',\n",
" 'vs_team_passes_pct_short',\n",
" 'vs_team_passes_pct_medium',\n",
" 'vs_team_passes_pct_long',\n",
" 'vs_team_sca_per90',\n",
" 'vs_team_gca_per90',\n",
" 'vs_team_dribble_tackles_pct',\n",
" 'vs_team_dribbles_completed_pct',\n",
" 'vs_team_aerials_won_pct']"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rx = pd.read_excel('tmp/playermatchdata_sel_gk.xlsx', index_col = 0, header = None) \n",
"\n",
"out = list()\n",
"\n",
"for i in range(1, rx.shape[1]):\n",
" if(rx[i][2] == \"x\"):\n",
" out.append(rx[i][0])\n",
" \n",
"out"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "02f961d8",
"metadata": {},
"outputs": [],
"source": [
"features_abs_gk = [\n",
" 'gk_games',\n",
" 'gk_games_starts',\n",
" 'gk_minutes',\n",
" 'gk_goals_against_per90', \n",
" 'gk_save_pct',\n",
" 'gk_clean_sheets_pct',\n",
" 'gk_psxg_net_per90',\n",
" 'gk_passes_pct_launched',\n",
" 'gk_pct_passes_launched',\n",
" 'gk_passes_length_avg',\n",
" 'gk_pct_goal_kicks_launched',\n",
" 'gk_goal_kick_length_avg',\n",
" 'gk_crosses_stopped_pct',\n",
" 'gk_def_actions_outside_pen_area_per90',\n",
" 'gk_avg_distance_def_actions',\n",
" \n",
" 'team_possession',\n",
" 'team_goals_assists_per90',\n",
" 'team_goals_pens_per90',\n",
" 'team_goals_assists_pens_per90',\n",
" 'team_xg_per90',\n",
" 'team_gk_goals_against_per90',\n",
" 'team_gk_save_pct',\n",
" 'team_gk_clean_sheets_pct',\n",
" 'team_passes_pct',\n",
" 'team_passes_pct_medium',\n",
" 'team_passes_pct_long',\n",
" 'team_sca_per90',\n",
" 'team_gca_per90',\n",
" #'team_dribble_tackles_pct',\n",
" 'team_aerials_won_pct',\n",
" 'vs_team_possession',\n",
" 'vs_team_goals_per90',\n",
" 'vs_team_assists_per90',\n",
" 'vs_team_xg_per90',\n",
" 'vs_team_gk_save_pct',\n",
" 'vs_team_gk_clean_sheets_pct',\n",
" 'vs_team_gk_pct_passes_launched',\n",
" 'vs_team_gk_crosses_stopped_pct',\n",
" 'vs_team_shots_on_target_per90',\n",
" 'vs_team_passes_pct',\n",
" 'vs_team_passes_pct_short',\n",
" 'vs_team_passes_pct_medium',\n",
" 'vs_team_passes_pct_long',\n",
" 'vs_team_sca_per90',\n",
" 'vs_team_gca_per90',\n",
" #'vs_team_dribble_tackles_pct',\n",
" #'vs_team_dribbles_completed_pct',\n",
" 'vs_team_aerials_won_pct',\n",
" 'opp_team_possession',\n",
" 'opp_team_goals_assists_per90',\n",
" 'opp_team_goals_pens_per90',\n",
" 'opp_team_goals_assists_pens_per90',\n",
" 'opp_team_xg_per90',\n",
" 'opp_team_gk_goals_against_per90',\n",
" 'opp_team_gk_save_pct',\n",
" 'opp_team_gk_clean_sheets_pct',\n",
" 'opp_team_passes_pct',\n",
" 'opp_team_passes_pct_medium',\n",
" 'opp_team_passes_pct_long',\n",
" 'opp_team_sca_per90',\n",
" 'opp_team_gca_per90',\n",
" #'opp_team_dribble_tackles_pct',\n",
" 'opp_team_aerials_won_pct',\n",
" 'opp_vs_team_possession',\n",
" 'opp_vs_team_goals_per90',\n",
" 'opp_vs_team_assists_per90',\n",
" 'opp_vs_team_xg_per90',\n",
" 'opp_vs_team_gk_save_pct',\n",
" 'opp_vs_team_gk_clean_sheets_pct',\n",
" 'opp_vs_team_gk_pct_passes_launched',\n",
" 'opp_vs_team_gk_crosses_stopped_pct',\n",
" 'opp_vs_team_shots_on_target_per90',\n",
" 'opp_vs_team_passes_pct',\n",
" 'opp_vs_team_passes_pct_short',\n",
" 'opp_vs_team_passes_pct_medium',\n",
" 'opp_vs_team_passes_pct_long',\n",
" 'opp_vs_team_sca_per90',\n",
" 'opp_vs_team_gca_per90',\n",
" #'opp_vs_team_dribble_tackles_pct',\n",
" #'opp_vs_team_dribbles_completed_pct',\n",
" 'opp_vs_team_aerials_won_pct',\n",
" \n",
" 'vote_avg',\n",
" 'vote_std']\n",
"\n",
"features_rel_gk = [\n",
" 'gk_shots_on_target_against',\n",
" 'gk_saves',\n",
" 'gk_free_kick_goals_against',\n",
" 'gk_corner_kick_goals_against',\n",
" 'gk_own_goals_against',\n",
" 'gk_psxg',\n",
" 'gk_psnpxg_per_shot_on_target_against',\n",
" 'gk_psxg_net',\n",
" 'gk_passes_completed_launched',\n",
" 'gk_passes_launched',\n",
" 'gk_passes',\n",
" 'gk_passes_throws',\n",
" 'gk_goal_kicks',\n",
" 'gk_crosses',\n",
" 'gk_crosses_stopped',\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "5e3694a0",
"metadata": {},
"outputs": [],
"source": [
"def player_match_data_ext_gk(player, pteam, oppteam):\n",
" pdata = player_match_data(player, pteam, oppteam)\n",
" \n",
" if(not isinstance(pdata, pd.DataFrame)):\n",
" return None\n",
" \n",
" if(pdata['gk_games'][0] <= 0):\n",
" return None\n",
" \n",
" out = pd.concat([pdata[features_abs_gk], pdata[features_rel_gk]], axis = 1)\n",
" \n",
" out[features_rel_gk] = out[features_rel_gk] / max(pdata['minutes'][0], 1)\n",
"\n",
" return out\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "9b671646",
"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>gk_games</th>\n",
" <th>gk_games_starts</th>\n",
" <th>gk_minutes</th>\n",
" <th>gk_goals_against_per90</th>\n",
" <th>gk_save_pct</th>\n",
" <th>gk_clean_sheets_pct</th>\n",
" <th>gk_psxg_net_per90</th>\n",
" <th>gk_passes_pct_launched</th>\n",
" <th>gk_pct_passes_launched</th>\n",
" <th>gk_passes_length_avg</th>\n",
" <th>...</th>\n",
" <th>gk_psxg</th>\n",
" <th>gk_psnpxg_per_shot_on_target_against</th>\n",
" <th>gk_psxg_net</th>\n",
" <th>gk_passes_completed_launched</th>\n",
" <th>gk_passes_launched</th>\n",
" <th>gk_passes</th>\n",
" <th>gk_passes_throws</th>\n",
" <th>gk_goal_kicks</th>\n",
" <th>gk_crosses</th>\n",
" <th>gk_crosses_stopped</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Consigli</th>\n",
" <td>29</td>\n",
" <td>29</td>\n",
" <td>2610</td>\n",
" <td>1.48</td>\n",
" <td>58.3</td>\n",
" <td>31.0</td>\n",
" <td>-0.41</td>\n",
" <td>40.3</td>\n",
" <td>31.6</td>\n",
" <td>34.2</td>\n",
" <td>...</td>\n",
" <td>31.0</td>\n",
" <td>0.3</td>\n",
" <td>-12.0</td>\n",
" <td>153.0</td>\n",
" <td>380.0</td>\n",
" <td>946.0</td>\n",
" <td>154.0</td>\n",
" <td>249.0</td>\n",
" <td>409.0</td>\n",
" <td>24.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1 rows × 92 columns</p>\n",
"</div>"
],
"text/plain": [
" gk_games gk_games_starts gk_minutes gk_goals_against_per90 \\\n",
"Consigli 29 29 2610 1.48 \n",
"\n",
" gk_save_pct gk_clean_sheets_pct gk_psxg_net_per90 \\\n",
"Consigli 58.3 31.0 -0.41 \n",
"\n",
" gk_passes_pct_launched gk_pct_passes_launched \\\n",
"Consigli 40.3 31.6 \n",
"\n",
" gk_passes_length_avg ... gk_psxg \\\n",
"Consigli 34.2 ... 31.0 \n",
"\n",
" gk_psnpxg_per_shot_on_target_against gk_psxg_net \\\n",
"Consigli 0.3 -12.0 \n",
"\n",
" gk_passes_completed_launched gk_passes_launched gk_passes \\\n",
"Consigli 153.0 380.0 946.0 \n",
"\n",
" gk_passes_throws gk_goal_kicks gk_crosses gk_crosses_stopped \n",
"Consigli 154.0 249.0 409.0 24.0 \n",
"\n",
"[1 rows x 92 columns]"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test = player_match_data_ext_gk('Consigli', 'Sassuolo', 'Atalanta')\n",
"\n",
"add_columns_gk = test.columns\n",
"\n",
"test"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "33f805a9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0\n",
"100\n",
"200\n",
"300\n",
"400\n",
"500\n",
"600\n",
"700\n",
"800\n",
"900\n",
"1000\n",
"1100\n",
"1200\n",
"1300\n",
"1400\n",
"1500\n",
"1600\n",
"1700\n",
"1800\n",
"1900\n",
"2000\n",
"2100\n",
"2200\n",
"2300\n",
"2400\n",
"2500\n",
"2600\n",
"2700\n",
"2800\n",
"2900\n",
"3000\n",
"3100\n",
"3200\n",
"3300\n",
"3400\n",
"3500\n",
"3600\n",
"3700\n",
"3800\n",
"3900\n",
"4000\n",
"4100\n",
"4200\n",
"4300\n",
"4400\n",
"4500\n",
"4600\n",
"4700\n",
"4800\n",
"4900\n",
"5000\n",
"5100\n",
"5200\n",
"5300\n",
"5400\n",
"5500\n",
"5600\n",
"5700\n",
"5800\n",
"5900\n",
"6000\n",
"6100\n",
"6200\n",
"6300\n",
"6400\n",
"6500\n",
"6600\n",
"6700\n",
"6800\n",
"6900\n",
"7000\n",
"7100\n",
"7200\n",
"7300\n",
"7400\n",
"7500\n",
"7600\n",
"7700\n",
"7800\n",
"7900\n",
"8000\n",
"8100\n",
"8200\n",
"8300\n",
"8400\n",
"8500\n",
"8600\n",
"8700\n",
"8800\n"
]
}
],
"source": [
"db_gk = votes.copy()\n",
"\n",
"delta = pd.DataFrame(columns = add_columns_gk)\n",
"\n",
"for i in range(db_gk.shape[0]):\n",
" ext_data = player_match_data_ext_gk(db_gk['player'][i], db_gk['team'][i], db_gk['oppteam'][i])\n",
" \n",
" if(i % 100 == 0):\n",
" print(i)\n",
" \n",
" if(not isinstance(ext_data, pd.DataFrame)):\n",
" continue\n",
" \n",
" ext_data = ext_data.rename(index = {db_gk['player'][i] : i})\n",
" \n",
" delta = pd.concat([delta, ext_data], axis = 0)\n",
" \n",
" \n",
" \n",
"db_gk = pd.concat([db_gk, delta], axis = 1)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "4d484846",
"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",
" <th>...</th>\n",
" <th>gk_psxg</th>\n",
" <th>gk_psnpxg_per_shot_on_target_against</th>\n",
" <th>gk_psxg_net</th>\n",
" <th>gk_passes_completed_launched</th>\n",
" <th>gk_passes_launched</th>\n",
" <th>gk_passes</th>\n",
" <th>gk_passes_throws</th>\n",
" <th>gk_goal_kicks</th>\n",
" <th>gk_crosses</th>\n",
" <th>gk_crosses_stopped</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",
" <td>...</td>\n",
" <td>20.0</td>\n",
" <td>0.22</td>\n",
" <td>-3.0</td>\n",
" <td>108.0</td>\n",
" <td>266.0</td>\n",
" <td>532.0</td>\n",
" <td>148.0</td>\n",
" <td>149.0</td>\n",
" <td>247.0</td>\n",
" <td>14.0</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",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</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",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</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",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</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",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</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",
" <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",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8809</th>\n",
" <td>31</td>\n",
" <td>Tameze</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</td>\n",
" <td>1</td>\n",
" <td>6.5</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>6.5</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8810</th>\n",
" <td>31</td>\n",
" <td>Abildgaard</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</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",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8811</th>\n",
" <td>31</td>\n",
" <td>Lasagna</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</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",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8812</th>\n",
" <td>31</td>\n",
" <td>Gaich</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</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",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8813</th>\n",
" <td>31</td>\n",
" <td>Djuric</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</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",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>8814 rows × 102 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",
"8809 31 Tameze Verona Bologna 1 6.5 0 0 \n",
"8810 31 Abildgaard Verona Bologna 1 6.0 0 0 \n",
"8811 31 Lasagna Verona Bologna 1 5.5 0 0 \n",
"8812 31 Gaich Verona Bologna 1 6.0 0 0 \n",
"8813 31 Djuric Verona Bologna 1 6.0 0 0 \n",
"\n",
" cards_malus fantavote ... gk_psxg \\\n",
"0 0.5 5.5 ... 20.0 \n",
"1 0.0 10.0 ... NaN \n",
"2 0.0 6.0 ... NaN \n",
"3 0.5 5.5 ... NaN \n",
"4 0.5 5.0 ... NaN \n",
"... ... ... ... ... \n",
"8809 0.0 6.5 ... NaN \n",
"8810 0.0 6.0 ... NaN \n",
"8811 0.0 5.5 ... NaN \n",
"8812 0.0 6.0 ... NaN \n",
"8813 0.0 6.0 ... NaN \n",
"\n",
" gk_psnpxg_per_shot_on_target_against gk_psxg_net \\\n",
"0 0.22 -3.0 \n",
"1 NaN NaN \n",
"2 NaN NaN \n",
"3 NaN NaN \n",
"4 NaN NaN \n",
"... ... ... \n",
"8809 NaN NaN \n",
"8810 NaN NaN \n",
"8811 NaN NaN \n",
"8812 NaN NaN \n",
"8813 NaN NaN \n",
"\n",
" gk_passes_completed_launched gk_passes_launched gk_passes \\\n",
"0 108.0 266.0 532.0 \n",
"1 NaN NaN NaN \n",
"2 NaN NaN NaN \n",
"3 NaN NaN NaN \n",
"4 NaN NaN NaN \n",
"... ... ... ... \n",
"8809 NaN NaN NaN \n",
"8810 NaN NaN NaN \n",
"8811 NaN NaN NaN \n",
"8812 NaN NaN NaN \n",
"8813 NaN NaN NaN \n",
"\n",
" gk_passes_throws gk_goal_kicks gk_crosses gk_crosses_stopped \n",
"0 148.0 149.0 247.0 14.0 \n",
"1 NaN NaN NaN NaN \n",
"2 NaN NaN NaN NaN \n",
"3 NaN NaN NaN NaN \n",
"4 NaN NaN NaN NaN \n",
"... ... ... ... ... \n",
"8809 NaN NaN NaN NaN \n",
"8810 NaN NaN NaN NaN \n",
"8811 NaN NaN NaN NaN \n",
"8812 NaN NaN NaN NaN \n",
"8813 NaN NaN NaN NaN \n",
"\n",
"[8814 rows x 102 columns]"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"db_gk"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "adab3577",
"metadata": {},
"outputs": [],
"source": [
"db_gk = db_gk.drop(db_gk[db_gk.gk_games != db_gk.gk_games].index) # remove non extisting players"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "e7ae792d",
"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",
" <th>...</th>\n",
" <th>gk_psxg</th>\n",
" <th>gk_psnpxg_per_shot_on_target_against</th>\n",
" <th>gk_psxg_net</th>\n",
" <th>gk_passes_completed_launched</th>\n",
" <th>gk_passes_launched</th>\n",
" <th>gk_passes</th>\n",
" <th>gk_passes_throws</th>\n",
" <th>gk_goal_kicks</th>\n",
" <th>gk_crosses</th>\n",
" <th>gk_crosses_stopped</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",
" <td>...</td>\n",
" <td>20.000000</td>\n",
" <td>0.220000</td>\n",
" <td>-3.000000</td>\n",
" <td>108.0</td>\n",
" <td>266.0</td>\n",
" <td>532.000000</td>\n",
" <td>148.000000</td>\n",
" <td>149.000000</td>\n",
" <td>247.000000</td>\n",
" <td>14.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>1</td>\n",
" <td>Skorupski</td>\n",
" <td>Bologna</td>\n",
" <td>Lazio</td>\n",
" <td>0</td>\n",
" <td>6.5</td>\n",
" <td>-2</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>4.5</td>\n",
" <td>...</td>\n",
" <td>40.200000</td>\n",
" <td>0.250000</td>\n",
" <td>3.200000</td>\n",
" <td>129.0</td>\n",
" <td>329.0</td>\n",
" <td>773.000000</td>\n",
" <td>169.000000</td>\n",
" <td>219.000000</td>\n",
" <td>402.000000</td>\n",
" <td>24.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44</th>\n",
" <td>1</td>\n",
" <td>Vicario</td>\n",
" <td>Empoli</td>\n",
" <td>Spezia</td>\n",
" <td>0</td>\n",
" <td>5.5</td>\n",
" <td>-1</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>4.5</td>\n",
" <td>...</td>\n",
" <td>32.300000</td>\n",
" <td>0.280000</td>\n",
" <td>2.300000</td>\n",
" <td>117.0</td>\n",
" <td>346.0</td>\n",
" <td>869.000000</td>\n",
" <td>123.000000</td>\n",
" <td>139.000000</td>\n",
" <td>489.000000</td>\n",
" <td>28.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>57</th>\n",
" <td>1</td>\n",
" <td>Gollini</td>\n",
" <td>Fiorentina</td>\n",
" <td>Cremonese</td>\n",
" <td>1</td>\n",
" <td>5.0</td>\n",
" <td>-2</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>...</td>\n",
" <td>18.616667</td>\n",
" <td>0.220000</td>\n",
" <td>1.116667</td>\n",
" <td>45.5</td>\n",
" <td>114.0</td>\n",
" <td>556.166667</td>\n",
" <td>92.833333</td>\n",
" <td>155.000000</td>\n",
" <td>258.666667</td>\n",
" <td>8.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>71</th>\n",
" <td>1</td>\n",
" <td>Handanovic</td>\n",
" <td>Inter</td>\n",
" <td>Lecce</td>\n",
" <td>0</td>\n",
" <td>6.5</td>\n",
" <td>-1</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>5.5</td>\n",
" <td>...</td>\n",
" <td>12.500000</td>\n",
" <td>0.270000</td>\n",
" <td>-2.500000</td>\n",
" <td>31.0</td>\n",
" <td>62.0</td>\n",
" <td>345.000000</td>\n",
" <td>54.000000</td>\n",
" <td>59.000000</td>\n",
" <td>112.000000</td>\n",
" <td>2.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",
" <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",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8745</th>\n",
" <td>31</td>\n",
" <td>Consigli</td>\n",
" <td>Sassuolo</td>\n",
" <td>Salernitana</td>\n",
" <td>0</td>\n",
" <td>5.0</td>\n",
" <td>-3</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>2.0</td>\n",
" <td>...</td>\n",
" <td>31.000000</td>\n",
" <td>0.300000</td>\n",
" <td>-12.000000</td>\n",
" <td>153.0</td>\n",
" <td>380.0</td>\n",
" <td>946.000000</td>\n",
" <td>154.000000</td>\n",
" <td>249.000000</td>\n",
" <td>409.000000</td>\n",
" <td>24.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8760</th>\n",
" <td>31</td>\n",
" <td>Zoet</td>\n",
" <td>Spezia</td>\n",
" <td>Sampdoria</td>\n",
" <td>0</td>\n",
" <td>6.5</td>\n",
" <td>-1</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>5.5</td>\n",
" <td>...</td>\n",
" <td>14.566667</td>\n",
" <td>0.213333</td>\n",
" <td>-0.433333</td>\n",
" <td>56.0</td>\n",
" <td>171.0</td>\n",
" <td>316.333333</td>\n",
" <td>49.666667</td>\n",
" <td>64.333333</td>\n",
" <td>160.333333</td>\n",
" <td>5.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8774</th>\n",
" <td>31</td>\n",
" <td>Milinkovic-Savic V.</td>\n",
" <td>Torino</td>\n",
" <td>Lazio</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",
" <td>...</td>\n",
" <td>31.500000</td>\n",
" <td>0.240000</td>\n",
" <td>-4.500000</td>\n",
" <td>224.0</td>\n",
" <td>762.0</td>\n",
" <td>1196.000000</td>\n",
" <td>142.000000</td>\n",
" <td>236.000000</td>\n",
" <td>387.000000</td>\n",
" <td>25.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8787</th>\n",
" <td>31</td>\n",
" <td>Silvestri</td>\n",
" <td>Udinese</td>\n",
" <td>Cremonese</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",
" <td>...</td>\n",
" <td>37.500000</td>\n",
" <td>0.300000</td>\n",
" <td>0.500000</td>\n",
" <td>121.0</td>\n",
" <td>316.0</td>\n",
" <td>687.000000</td>\n",
" <td>120.000000</td>\n",
" <td>237.000000</td>\n",
" <td>441.000000</td>\n",
" <td>11.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8800</th>\n",
" <td>31</td>\n",
" <td>Montipo'</td>\n",
" <td>Verona</td>\n",
" <td>Bologna</td>\n",
" <td>1</td>\n",
" <td>6.5</td>\n",
" <td>-1</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>5.5</td>\n",
" <td>...</td>\n",
" <td>38.700000</td>\n",
" <td>0.260000</td>\n",
" <td>-4.300000</td>\n",
" <td>280.0</td>\n",
" <td>616.0</td>\n",
" <td>745.000000</td>\n",
" <td>99.000000</td>\n",
" <td>227.000000</td>\n",
" <td>401.000000</td>\n",
" <td>22.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>616 rows × 102 columns</p>\n",
"</div>"
],
"text/plain": [
" matchday player team oppteam home vote \\\n",
"0 1 Musso Atalanta Sampdoria 0 6.0 \n",
"15 1 Skorupski Bologna Lazio 0 6.5 \n",
"44 1 Vicario Empoli Spezia 0 5.5 \n",
"57 1 Gollini Fiorentina Cremonese 1 5.0 \n",
"71 1 Handanovic Inter Lecce 0 6.5 \n",
"... ... ... ... ... ... ... \n",
"8745 31 Consigli Sassuolo Salernitana 0 5.0 \n",
"8760 31 Zoet Spezia Sampdoria 0 6.5 \n",
"8774 31 Milinkovic-Savic V. Torino Lazio 0 6.0 \n",
"8787 31 Silvestri Udinese Cremonese 1 6.0 \n",
"8800 31 Montipo' Verona Bologna 1 6.5 \n",
"\n",
" goals assists cards_malus fantavote ... gk_psxg \\\n",
"0 0 0 0.5 5.5 ... 20.000000 \n",
"15 -2 0 0.0 4.5 ... 40.200000 \n",
"44 -1 0 0.0 4.5 ... 32.300000 \n",
"57 -2 0 0.0 3.0 ... 18.616667 \n",
"71 -1 0 0.0 5.5 ... 12.500000 \n",
"... ... ... ... ... ... ... \n",
"8745 -3 0 0.0 2.0 ... 31.000000 \n",
"8760 -1 0 0.0 5.5 ... 14.566667 \n",
"8774 0 0 0.0 6.0 ... 31.500000 \n",
"8787 0 0 0.0 6.0 ... 37.500000 \n",
"8800 -1 0 0.0 5.5 ... 38.700000 \n",
"\n",
" gk_psnpxg_per_shot_on_target_against gk_psxg_net \\\n",
"0 0.220000 -3.000000 \n",
"15 0.250000 3.200000 \n",
"44 0.280000 2.300000 \n",
"57 0.220000 1.116667 \n",
"71 0.270000 -2.500000 \n",
"... ... ... \n",
"8745 0.300000 -12.000000 \n",
"8760 0.213333 -0.433333 \n",
"8774 0.240000 -4.500000 \n",
"8787 0.300000 0.500000 \n",
"8800 0.260000 -4.300000 \n",
"\n",
" gk_passes_completed_launched gk_passes_launched gk_passes \\\n",
"0 108.0 266.0 532.000000 \n",
"15 129.0 329.0 773.000000 \n",
"44 117.0 346.0 869.000000 \n",
"57 45.5 114.0 556.166667 \n",
"71 31.0 62.0 345.000000 \n",
"... ... ... ... \n",
"8745 153.0 380.0 946.000000 \n",
"8760 56.0 171.0 316.333333 \n",
"8774 224.0 762.0 1196.000000 \n",
"8787 121.0 316.0 687.000000 \n",
"8800 280.0 616.0 745.000000 \n",
"\n",
" gk_passes_throws gk_goal_kicks gk_crosses gk_crosses_stopped \n",
"0 148.000000 149.000000 247.000000 14.0 \n",
"15 169.000000 219.000000 402.000000 24.0 \n",
"44 123.000000 139.000000 489.000000 28.0 \n",
"57 92.833333 155.000000 258.666667 8.5 \n",
"71 54.000000 59.000000 112.000000 2.0 \n",
"... ... ... ... ... \n",
"8745 154.000000 249.000000 409.000000 24.0 \n",
"8760 49.666667 64.333333 160.333333 5.0 \n",
"8774 142.000000 236.000000 387.000000 25.0 \n",
"8787 120.000000 237.000000 441.000000 11.0 \n",
"8800 99.000000 227.000000 401.000000 22.0 \n",
"\n",
"[616 rows x 102 columns]"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"db_gk"
]
},
{
"cell_type": "markdown",
"id": "8dbb7476",
"metadata": {},
"source": [
"Save goalkeepers players database to file."
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "d8b8b6da",
"metadata": {},
"outputs": [],
"source": [
"db_gk.to_excel('mid_outputs/database_entries_gk.xlsx')"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "54519b24",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 - matchday\n",
"1 - player\n",
"2 - team\n",
"3 - oppteam\n",
"4 - home\n",
"5 - vote\n",
"6 - goals\n",
"7 - assists\n",
"8 - cards_malus\n",
"9 - fantavote\n",
"10 - gk_games\n",
"11 - gk_games_starts\n",
"12 - gk_minutes\n",
"13 - gk_goals_against_per90\n",
"14 - gk_save_pct\n",
"15 - gk_clean_sheets_pct\n",
"16 - gk_psxg_net_per90\n",
"17 - gk_passes_pct_launched\n",
"18 - gk_pct_passes_launched\n",
"19 - gk_passes_length_avg\n",
"20 - gk_pct_goal_kicks_launched\n",
"21 - gk_goal_kick_length_avg\n",
"22 - gk_crosses_stopped_pct\n",
"23 - gk_def_actions_outside_pen_area_per90\n",
"24 - gk_avg_distance_def_actions\n",
"25 - team_possession\n",
"26 - team_goals_assists_per90\n",
"27 - team_goals_pens_per90\n",
"28 - team_goals_assists_pens_per90\n",
"29 - team_xg_per90\n",
"30 - team_gk_goals_against_per90\n",
"31 - team_gk_save_pct\n",
"32 - team_gk_clean_sheets_pct\n",
"33 - team_passes_pct\n",
"34 - team_passes_pct_medium\n",
"35 - team_passes_pct_long\n",
"36 - team_sca_per90\n",
"37 - team_gca_per90\n",
"38 - team_aerials_won_pct\n",
"39 - vs_team_possession\n",
"40 - vs_team_goals_per90\n",
"41 - vs_team_assists_per90\n",
"42 - vs_team_xg_per90\n",
"43 - vs_team_gk_save_pct\n",
"44 - vs_team_gk_clean_sheets_pct\n",
"45 - vs_team_gk_pct_passes_launched\n",
"46 - vs_team_gk_crosses_stopped_pct\n",
"47 - vs_team_shots_on_target_per90\n",
"48 - vs_team_passes_pct\n",
"49 - vs_team_passes_pct_short\n",
"50 - vs_team_passes_pct_medium\n",
"51 - vs_team_passes_pct_long\n",
"52 - vs_team_sca_per90\n",
"53 - vs_team_gca_per90\n",
"54 - vs_team_aerials_won_pct\n",
"55 - opp_team_possession\n",
"56 - opp_team_goals_assists_per90\n",
"57 - opp_team_goals_pens_per90\n",
"58 - opp_team_goals_assists_pens_per90\n",
"59 - opp_team_xg_per90\n",
"60 - opp_team_gk_goals_against_per90\n",
"61 - opp_team_gk_save_pct\n",
"62 - opp_team_gk_clean_sheets_pct\n",
"63 - opp_team_passes_pct\n",
"64 - opp_team_passes_pct_medium\n",
"65 - opp_team_passes_pct_long\n",
"66 - opp_team_sca_per90\n",
"67 - opp_team_gca_per90\n",
"68 - opp_team_aerials_won_pct\n",
"69 - opp_vs_team_possession\n",
"70 - opp_vs_team_goals_per90\n",
"71 - opp_vs_team_assists_per90\n",
"72 - opp_vs_team_xg_per90\n",
"73 - opp_vs_team_gk_save_pct\n",
"74 - opp_vs_team_gk_clean_sheets_pct\n",
"75 - opp_vs_team_gk_pct_passes_launched\n",
"76 - opp_vs_team_gk_crosses_stopped_pct\n",
"77 - opp_vs_team_shots_on_target_per90\n",
"78 - opp_vs_team_passes_pct\n",
"79 - opp_vs_team_passes_pct_short\n",
"80 - opp_vs_team_passes_pct_medium\n",
"81 - opp_vs_team_passes_pct_long\n",
"82 - opp_vs_team_sca_per90\n",
"83 - opp_vs_team_gca_per90\n",
"84 - opp_vs_team_aerials_won_pct\n",
"85 - vote_avg\n",
"86 - vote_std\n",
"87 - gk_shots_on_target_against\n",
"88 - gk_saves\n",
"89 - gk_free_kick_goals_against\n",
"90 - gk_corner_kick_goals_against\n",
"91 - gk_own_goals_against\n",
"92 - gk_psxg\n",
"93 - gk_psnpxg_per_shot_on_target_against\n",
"94 - gk_psxg_net\n",
"95 - gk_passes_completed_launched\n",
"96 - gk_passes_launched\n",
"97 - gk_passes\n",
"98 - gk_passes_throws\n",
"99 - gk_goal_kicks\n",
"100 - gk_crosses\n",
"101 - gk_crosses_stopped\n"
]
}
],
"source": [
"for i in range(db_gk.columns.shape[0]):\n",
" print(str(i) + \" - \" + str(db_gk.columns[i]))"
]
}
],
"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
}