{ "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
teamteam_players_usedteam_possessionteam_gamesteam_games_startsteam_minutesteam_goalsteam_assiststeam_pens_madeteam_pens_att...vs_team_foulsvs_team_fouledvs_team_offsidesvs_team_pens_wonvs_team_pens_concededvs_team_own_goalsvs_team_ball_recoveriesvs_team_aerials_wonvs_team_aerials_lostvs_team_aerials_won_pct
team_idx
AtalantaAtalanta25.050.031.0341.02790.050.032.06.08.0...338.0356.040.01.08.01.01865.0389.0472.045.2
BolognaBologna27.053.431.0341.02790.039.032.04.04.0...376.0365.052.05.04.01.01687.0379.0306.055.3
CremoneseCremonese32.043.231.0341.02790.027.013.04.06.0...345.0372.052.04.06.00.01745.0594.0462.056.3
EmpoliEmpoli31.047.431.0341.02790.025.013.01.01.0...384.0341.060.02.01.00.01607.0412.0330.055.5
FiorentinaFiorentina29.056.631.0341.02790.035.025.04.06.0...460.0371.078.02.06.02.01625.0425.0504.045.7
VeronaHellas Verona36.042.031.0341.02790.024.018.01.01.0...337.0438.032.01.01.02.01728.0619.0615.050.2
InterInter24.056.231.0341.02790.050.035.04.05.0...368.0336.029.03.05.01.01443.0344.0443.043.7
JuventusJuventus29.048.631.0341.02790.047.037.03.05.0...348.0328.039.00.05.00.01556.0381.0390.049.4
LazioLazio22.051.931.0341.02790.048.029.05.07.0...421.0304.055.01.07.01.01677.0319.0319.050.0
LecceLecce29.041.731.0341.02790.024.017.01.02.0...378.0425.057.04.02.02.01694.0582.0466.055.5
MilanMilan29.054.031.0341.02790.048.039.03.03.0...378.0369.031.05.03.03.01617.0387.0456.045.9
MonzaMonza31.055.031.0341.02790.036.023.05.05.0...437.0385.048.01.05.02.01608.0340.0357.048.8
NapoliNapoli26.061.831.0341.02790.065.051.06.07.0...405.0287.039.01.06.02.01562.0322.0389.045.3
RomaRoma27.049.231.0341.02790.043.030.06.09.0...447.0344.021.02.09.00.01621.0331.0426.043.7
SalernitanaSalernitana28.044.631.0341.02790.035.025.01.01.0...375.0357.064.010.01.02.01709.0448.0427.051.2
SampdoriaSampdoria37.047.431.0341.02790.020.016.01.02.0...449.0408.075.06.02.00.01693.0535.0517.050.9
SassuoloSassuolo29.048.931.0341.02790.037.024.06.07.0...384.0307.094.02.07.01.01611.0385.0329.053.9
SpeziaSpezia34.047.031.0341.02790.024.015.04.04.0...321.0396.067.04.04.02.01708.0470.0424.052.6
TorinoTorino28.053.031.0341.02790.032.026.02.02.0...341.0409.032.04.02.00.01597.0508.0474.051.7
UdineseUdinese27.048.131.0341.02790.041.036.01.02.0...412.0357.050.03.02.01.01577.0326.0390.045.5
\n", "

20 rows × 303 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0idrteamsurnameinitialfb_IDagebirth_yeargames...gk_pct_goal_kicks_launchedgk_goal_kick_length_avggk_crossesgk_crosses_stoppedgk_crosses_stopped_pctgk_def_actions_outside_pen_areagk_def_actions_outside_pen_area_per90gk_avg_distance_def_actionsvote_avgvote_std
name
Meret0572PNapoliMeretNaN59426-03419970...20.026.8308.010.03.232.01.0717.06.2000000.420317
Provedel12814PLazioProvedelNaN60529-03919940...36.034.7402.017.04.246.01.4916.46.2741940.418112
Vicario24964PEmpoliVicarioNaN61726-20019960...48.942.6489.028.05.715.00.6310.76.4583330.379601
Szczesny3453PJuventusSzczesnyNaN61333-00719900...49.141.5301.09.03.019.00.8915.46.0909090.324610
Falcone42134PLecceFalconeNaN58728-01319950...77.352.4441.022.05.035.01.1313.76.2258060.521145
..................................................................
De Luca5385512ASampdoriaLucaNaN14524-28219982...0.00.00.00.00.00.00.000.05.9585360.291436
Voelkerling Persson5395837ALeccePerssonNaN54220-10020037...0.00.00.00.00.00.00.000.06.0681660.351902
Montevago5406113ASampdoriaMontevagoNaN35220-03820036...0.00.00.00.00.00.00.000.05.6184770.288497
Krollis5416143ASpeziaKrollisNaN27721-17920011...0.00.00.00.00.00.00.000.06.2903210.466766
Vivaldo5426160AUdineseVivaldoNaN-1000...0.00.00.00.00.00.00.000.05.7906680.631282
\n", "

543 rows × 160 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0idrteamsurnameinitialfb_IDagebirth_yeargames...opp_vs_team_foulsopp_vs_team_fouledopp_vs_team_offsidesopp_vs_team_pens_wonopp_vs_team_pens_concededopp_vs_team_own_goalsopp_vs_team_ball_recoveriesopp_vs_team_aerials_wonopp_vs_team_aerials_lostopp_vs_team_aerials_won_pct
Frattesi2742848CSassuoloFrattesiNaN20223-185199931...338.0356.040.01.08.01.01865.0389.0472.045.2
\n", "

1 rows × 766 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
rgamesgames_startsminutesshots_on_target_pctgoals_per_shotgoals_per_shot_on_targetpasses_pctaerials_won_pctteam_possession...miscontrolsdispossessedfoulsfouledaerials_wonaerials_lostcarriesprogressive_carriescarries_into_final_thirdcarries_into_penalty_area
FrattesiC3130245439.60.110.2977.550.048.9...0.019560.0142620.014670.019560.0089650.0089650.2779140.0264870.0199670.007742
\n", "

1 rows × 112 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
matchdayplayerteamoppteamhomevotegoalsassistscards_malusfantavote
01MussoAtalantaSampdoria06.0000.55.5
11ToloiAtalantaSampdoria07.0100.010.0
21DjimsitiAtalantaSampdoria06.0000.06.0
31HateboerAtalantaSampdoria06.0000.55.5
41OkoliAtalantaSampdoria05.5000.55.0
.................................
880931TamezeVeronaBologna16.5000.06.5
881031AbildgaardVeronaBologna16.0000.06.0
881131LasagnaVeronaBologna15.5000.05.5
881231GaichVeronaBologna16.0000.06.0
881331DjuricVeronaBologna16.0000.06.0
\n", "

8814 rows × 10 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
matchdayplayerteamoppteamhomevotegoalsassistscards_malusfantavote...miscontrolsdispossessedfoulsfouledaerials_wonaerials_lostcarriesprogressive_carriescarries_into_final_thirdcarries_into_penalty_area
01MussoAtalantaSampdoria06.0000.55.5...0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
11ToloiAtalantaSampdoria07.0100.010.0...0.0069610.0013920.0111370.0069610.0153130.0102090.3865430.0078890.0157770.000000
21DjimsitiAtalantaSampdoria06.0000.06.0...0.0067340.0042090.0084180.0042090.0286200.0227270.4141410.0050510.0050510.000842
31HateboerAtalantaSampdoria06.0000.55.5...0.0057270.0050110.0136010.0021470.0171800.0100210.2848960.0114530.0100210.000716
41OkoliAtalantaSampdoria05.5000.55.0...0.0130180.0035500.0153850.0082840.0473370.0272190.2698220.0023670.0047340.000000
..................................................................
880931TamezeVeronaBologna16.5000.06.5...0.0125970.0105650.0105650.0109710.0097520.0105650.2364890.0101580.0121900.001625
881031AbildgaardVeronaBologna16.0000.06.0...0.0101520.0000000.0152280.0050760.0761420.0253810.1269040.0000000.0000000.000000
881131LasagnaVeronaBologna15.5000.05.5...0.0336940.0216150.0158930.0139860.0127150.0432290.1697390.0228860.0146220.008900
881231GaichVeronaBologna16.0000.06.0...0.0310340.0137930.0275860.0224140.0362070.0758620.2206900.0086210.0051720.006897
881331DjuricVeronaBologna16.0000.06.0...0.0243340.0081110.0243340.0231750.1529550.0405560.2039400.0011590.0046350.002317
\n", "

8814 rows × 122 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
matchdayplayerteamoppteamhomevotegoalsassistscards_malusfantavote...miscontrolsdispossessedfoulsfouledaerials_wonaerials_lostcarriesprogressive_carriescarries_into_final_thirdcarries_into_penalty_area
11ToloiAtalantaSampdoria07.0100.010.0...0.0069610.0013920.0111370.0069610.0153130.0102090.3865430.0078890.0157770.000000
21DjimsitiAtalantaSampdoria06.0000.06.0...0.0067340.0042090.0084180.0042090.0286200.0227270.4141410.0050510.0050510.000842
31HateboerAtalantaSampdoria06.0000.55.5...0.0057270.0050110.0136010.0021470.0171800.0100210.2848960.0114530.0100210.000716
41OkoliAtalantaSampdoria05.5000.55.0...0.0130180.0035500.0153850.0082840.0473370.0272190.2698220.0023670.0047340.000000
51ZorteaAtalantaSampdoria06.0000.55.5...0.0172790.0064790.0194380.0107990.0064790.0172790.4319650.0345570.0259180.002160
..................................................................
880931TamezeVeronaBologna16.5000.06.5...0.0125970.0105650.0105650.0109710.0097520.0105650.2364890.0101580.0121900.001625
881031AbildgaardVeronaBologna16.0000.06.0...0.0101520.0000000.0152280.0050760.0761420.0253810.1269040.0000000.0000000.000000
881131LasagnaVeronaBologna15.5000.05.5...0.0336940.0216150.0158930.0139860.0127150.0432290.1697390.0228860.0146220.008900
881231GaichVeronaBologna16.0000.06.0...0.0310340.0137930.0275860.0224140.0362070.0758620.2206900.0086210.0051720.006897
881331DjuricVeronaBologna16.0000.06.0...0.0243340.0081110.0243340.0231750.1529550.0405560.2039400.0011590.0046350.002317
\n", "

7929 rows × 122 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
gk_gamesgk_games_startsgk_minutesgk_goals_against_per90gk_save_pctgk_clean_sheets_pctgk_psxg_net_per90gk_passes_pct_launchedgk_pct_passes_launchedgk_passes_length_avg...gk_psxggk_psnpxg_per_shot_on_target_againstgk_psxg_netgk_passes_completed_launchedgk_passes_launchedgk_passesgk_passes_throwsgk_goal_kicksgk_crossesgk_crosses_stopped
Consigli292926101.4858.331.0-0.4140.331.634.2...31.00.3-12.0153.0380.0946.0154.0249.0409.024.0
\n", "

1 rows × 92 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
matchdayplayerteamoppteamhomevotegoalsassistscards_malusfantavote...gk_psxggk_psnpxg_per_shot_on_target_againstgk_psxg_netgk_passes_completed_launchedgk_passes_launchedgk_passesgk_passes_throwsgk_goal_kicksgk_crossesgk_crosses_stopped
01MussoAtalantaSampdoria06.0000.55.5...20.00.22-3.0108.0266.0532.0148.0149.0247.014.0
11ToloiAtalantaSampdoria07.0100.010.0...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
21DjimsitiAtalantaSampdoria06.0000.06.0...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
31HateboerAtalantaSampdoria06.0000.55.5...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
41OkoliAtalantaSampdoria05.5000.55.0...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
..................................................................
880931TamezeVeronaBologna16.5000.06.5...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
881031AbildgaardVeronaBologna16.0000.06.0...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
881131LasagnaVeronaBologna15.5000.05.5...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
881231GaichVeronaBologna16.0000.06.0...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
881331DjuricVeronaBologna16.0000.06.0...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", "

8814 rows × 102 columns

\n", "
" ], "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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
matchdayplayerteamoppteamhomevotegoalsassistscards_malusfantavote...gk_psxggk_psnpxg_per_shot_on_target_againstgk_psxg_netgk_passes_completed_launchedgk_passes_launchedgk_passesgk_passes_throwsgk_goal_kicksgk_crossesgk_crosses_stopped
01MussoAtalantaSampdoria06.0000.55.5...20.0000000.220000-3.000000108.0266.0532.000000148.000000149.000000247.00000014.0
151SkorupskiBolognaLazio06.5-200.04.5...40.2000000.2500003.200000129.0329.0773.000000169.000000219.000000402.00000024.0
441VicarioEmpoliSpezia05.5-100.04.5...32.3000000.2800002.300000117.0346.0869.000000123.000000139.000000489.00000028.0
571GolliniFiorentinaCremonese15.0-200.03.0...18.6166670.2200001.11666745.5114.0556.16666792.833333155.000000258.6666678.5
711HandanovicInterLecce06.5-100.05.5...12.5000000.270000-2.50000031.062.0345.00000054.00000059.000000112.0000002.0
..................................................................
874531ConsigliSassuoloSalernitana05.0-300.02.0...31.0000000.300000-12.000000153.0380.0946.000000154.000000249.000000409.00000024.0
876031ZoetSpeziaSampdoria06.5-100.05.5...14.5666670.213333-0.43333356.0171.0316.33333349.66666764.333333160.3333335.0
877431Milinkovic-Savic V.TorinoLazio06.0000.06.0...31.5000000.240000-4.500000224.0762.01196.000000142.000000236.000000387.00000025.0
878731SilvestriUdineseCremonese16.0000.06.0...37.5000000.3000000.500000121.0316.0687.000000120.000000237.000000441.00000011.0
880031Montipo'VeronaBologna16.5-100.05.5...38.7000000.260000-4.300000280.0616.0745.00000099.000000227.000000401.00000022.0
\n", "

616 rows × 102 columns

\n", "
" ], "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 }