Files
fantabeto/.ipynb_checkpoints/3_players_dataset_creation-checkpoint.ipynb
Giuseppe Musicco 3e9080e07d Matchday #7
2023-09-30 09:24:58 +02:00

3458 lines
146 KiB
Plaintext
Raw Permalink 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": "b2cd2177",
"metadata": {},
"source": [
"Players dataset creation\n",
"\n",
"The Fantacalcio players list is manually downloaded from https://www.fantacalcio.it/quotazioni-fantacalcio\n",
"\n",
"Here, the players database is generated, by merging the Fantacalcio list to stats downloaded from http://fbref.com"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "7c65df92",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"id": "5ab35d0c",
"metadata": {},
"source": [
"Load fbref data for outfield players and goalkeepers.\n",
"\n",
"Generate fbref player list, adding player surname (with special characters replaced to normal ones)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "b2d7073e",
"metadata": {},
"outputs": [],
"source": [
"rcsv = pd.read_csv('fbref_data/outfield_players.csv') \n",
"outfield_players = pd.DataFrame(rcsv)\n",
"\n",
"rcsv = pd.read_csv('fbref_data/keepers_players.csv') \n",
"keeper_players = pd.DataFrame(rcsv)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "667970f6",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>player</th>\n",
" <th>team</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Francesco Acerbi</td>\n",
" <td>Inter</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Yacine Adli</td>\n",
" <td>Milan</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Michel Aebischer</td>\n",
" <td>Bologna</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Jean-Daniel Akpa-Akpro</td>\n",
" <td>Monza</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Luis Alberto</td>\n",
" <td>Lazio</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>482</th>\n",
" <td>Alessandro Sorrentino</td>\n",
" <td>Monza</td>\n",
" </tr>\n",
" <tr>\n",
" <th>483</th>\n",
" <td>Marco Sportiello</td>\n",
" <td>Milan</td>\n",
" </tr>\n",
" <tr>\n",
" <th>484</th>\n",
" <td>Wojciech Szczęsny</td>\n",
" <td>Juventus</td>\n",
" </tr>\n",
" <tr>\n",
" <th>485</th>\n",
" <td>Pietro Terracciano</td>\n",
" <td>Fiorentina</td>\n",
" </tr>\n",
" <tr>\n",
" <th>486</th>\n",
" <td>Stefano Turati</td>\n",
" <td>Frosinone</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>487 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" player team\n",
"0 Francesco Acerbi Inter\n",
"1 Yacine Adli Milan\n",
"2 Michel Aebischer Bologna\n",
"3 Jean-Daniel Akpa-Akpro Monza\n",
"4 Luis Alberto Lazio\n",
".. ... ...\n",
"482 Alessandro Sorrentino Monza\n",
"483 Marco Sportiello Milan\n",
"484 Wojciech Szczęsny Juventus\n",
"485 Pietro Terracciano Fiorentina\n",
"486 Stefano Turati Frosinone\n",
"\n",
"[487 rows x 2 columns]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"players = pd.concat( [ outfield_players[['player', 'team']], keeper_players[['player', 'team']] ], axis = 0, ignore_index = True)\n",
"\n",
"keepers_ID = len(outfield_players)\n",
"\n",
"players"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "e1e64596",
"metadata": {},
"outputs": [],
"source": [
"import unicodedata\n",
"\n",
"def normalize_name(input_str):\n",
" nfkd_form = unicodedata.normalize('NFKD', input_str)\n",
" only_ascii = nfkd_form.encode('ASCII', 'ignore')\n",
" return only_ascii.decode('utf-8')"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "3078d6f3",
"metadata": {},
"outputs": [],
"source": [
"players['surname'] = players['player']\n",
"players['initial'] = players['player']\n",
"\n",
"for i in range(players.shape[0]):\n",
" players['surname'][i] = players['surname'][i].split(' ')[-1]\n",
" players['surname'][i] = normalize_name(players['surname'][i]).replace('\\'', '')\n",
" \n",
" \n",
" players['initial'][i] = players['player'][i][0]"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "ffd6091c",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" player surname\n",
"0 Francesco Acerbi Acerbi\n",
"1 Yacine Adli Adli\n",
"2 Michel Aebischer Aebischer\n",
"3 Jean-Daniel Akpa-Akpro Akpa-Akpro\n",
"4 Luis Alberto Alberto\n",
"5 Pontus Almqvist Almqvist\n",
"6 Lorenzo Amatucci Amatucci\n",
"7 Bruno Amione Amione\n",
"8 Felipe Anderson Anderson\n",
"9 Houssem Aouar Aouar\n",
"10 Marko Arnautović Arnautovic\n",
"11 Kristjan Asllani Asllani\n",
"12 Tommaso Augello Augello\n",
"13 Yann Aurel Bisseck Bisseck\n",
"14 Sardar Azmoun Azmoun\n",
"15 Paulo Azzi Azzi\n",
"16 Oussama El Azzouzi Azzouzi\n",
"17 Milan Badelj Badelj\n",
"18 Jaime Báez Baez\n",
"19 Nedim Bajrami Bajrami\n",
"20 Mitchel Bakker Bakker\n",
"21 Tommaso Baldanzi Baldanzi\n",
"22 Lameck Banda Banda\n",
"23 Mattia Bani Bani\n",
"24 Antonín Barák Barak\n",
"25 Nicolò Barella Barella\n",
"26 Enzo Barrenechea Barrenechea\n",
"27 Davide Bartesaghi Bartesaghi\n",
"28 Federico Baschirotto Baschirotto\n",
"29 Alessandro Bastoni Bastoni\n",
"30 Simone Bastoni Bastoni\n",
"31 Raoul Bellanova Bellanova\n",
"32 Andrea Belotti Belotti\n",
"33 Lucas Beltrán Beltran\n",
"34 Domenico Berardi Berardi\n",
"35 Bartosz Bereszyński Bereszynski\n",
"36 Etrit Berisha Berisha\n",
"37 Victor Bernth Kristiansen Kristiansen\n",
"38 Beto Beto\n",
"39 Sam Beukema Beukema\n",
"40 Jaka Bijol Bijol\n",
"41 Cristiano Biraghi Biraghi\n",
"42 Davide Biraschi Biraschi\n",
"43 Samuele Birindelli Birindelli\n",
"44 Alexis Blin Blin\n",
"45 Emil Bohinen Bohinen\n",
"46 Daniel Boloca Boloca\n",
"47 Giacomo Bonaventura Bonaventura\n",
"48 Federico Bonazzoli Bonazzoli\n",
"49 Warren Bondo Bondo\n",
"50 Gennaro Borrelli Borrelli\n",
"51 Erik Botheim Botheim\n",
"52 Mehdi Bourabia Bourabia\n",
"53 Edoardo Bove Bove\n",
"54 Domagoj Bradarić Bradaric\n",
"55 Josip Brekalo Brekalo\n",
"56 Gleison Bremer Bremer\n",
"57 Marco Brescianini Brescianini\n",
"58 Alessandro Buongiorno Buongiorno\n",
"59 Rareș-Cătălin Burnete Burnete\n",
"60 Juan Cabal Cabal\n",
"61 Jovane Cabral Cabral\n",
"62 Liberato Cacace Cacace\n",
"63 Jens Cajuste Cajuste\n",
"64 Davide Calabria Calabria\n",
"65 Riccardo Calafiori Calafiori\n",
"66 Luca Caldirola Caldirola\n",
"67 Hakan Çalhanoğlu Calhanoglu\n",
"68 Nicolò Cambiaghi Cambiaghi\n",
"69 Andrea Cambiaso Cambiaso\n",
"70 Matteo Cancellieri Cancellieri\n",
"71 Antonio Candreva Candreva\n",
"72 Luigi Canotto Canotto\n",
"73 Gianluca Caprari Caprari\n",
"74 Elia Caprile Caprile\n",
"75 Francesco Caputo Caputo\n",
"76 Andrea Carboni Carboni\n",
"77 Valentin Carboni Carboni\n",
"78 Carlos Carlos\n",
"79 Marco Carnesecchi Carnesecchi\n",
"80 Nicolò Casale Casale\n",
"81 Giuseppe Caso Caso\n",
"82 Valentín Castellanos Castellanos\n",
"83 Samu Castillejo Castillejo\n",
"84 Danilo Cataldi Cataldi\n",
"85 Emil Ceide Ceide\n",
"86 Zeki Çelik Celik\n",
"87 Michele Cerofolini Cerofolini\n",
"88 Walid Cheddira Cheddira\n",
"89 Federico Chiesa Chiesa\n",
"90 Oliver Christensen Christensen\n",
"91 Samuel Chukwueze Chukwueze\n",
"92 Patrick Ciurria Ciurria\n",
"93 Lorenzo Colombo Colombo\n",
"94 Andrea Colpani Colpani\n",
"95 Andrea Consigli Consigli\n",
"96 Diego Coppola Coppola\n",
"97 Tommaso Corazza Corazza\n",
"98 Lassana Coulibaly Coulibaly\n",
"99 Mamadou Coulibaly Coulibaly\n",
"100 Alessio Cragno Cragno\n",
"101 Bryan Cristante Cristante\n",
"102 Juan Cuadrado Cuadrado\n",
"103 Marvin Cuni Cuni\n",
"104 Danilo D'Ambrosio DAmbrosio\n",
"105 Flavius Daniliuc Daniliuc\n",
"106 Danilo Danilo\n",
"107 Matteo Darmian Darmian\n",
"108 Paweł Dawidowicz Dawidowicz\n",
"109 Charles De Ketelaere Ketelaere\n",
"110 Lorenzo De Silvestri Silvestri\n",
"111 Koni De Winter Winter\n",
"112 Grégoire Defrel Defrel\n",
"113 Alessandro Deiola Deiola\n",
"114 Mattia Destro Destro\n",
"115 Federico Di Francesco Francesco\n",
"116 Michele Di Gregorio Gregorio\n",
"117 Giovanni Di Lorenzo Lorenzo\n",
"118 Alessandro Di Pardo Pardo\n",
"119 Boulaye Dia Dia\n",
"120 Federico Dimarco Dimarco\n",
"121 Berat Djimsiti Djimsiti\n",
"122 Dodô Dodo\n",
"123 Josh Doig Doig\n",
"124 Nicolás Domínguez Dominguez\n",
"125 Patrick Dorgu Dorgu\n",
"126 Alberto Dossena Dossena\n",
"127 Radu Drăgușin Dragusin\n",
"128 Ondrej Duda Duda\n",
"129 Denzel Dumfries Dumfries\n",
"130 Alfred Duncan Duncan\n",
"131 Paulo Dybala Dybala\n",
"132 Festy Ebosele Ebosele\n",
"133 Enzo Ebosse Ebosse\n",
"134 Tyronne Ebuehi Ebuehi\n",
"135 Éderson Ederson\n",
"136 Emmanuel Ekong Ekong\n",
"137 Caleb Ekuban Ekuban\n",
"138 Elif Elmas Elmas\n",
"139 Martin Erlic Erlic\n",
"140 Giovanni Fabbian Fabbian\n",
"141 Nicolò Fagioli Fagioli\n",
"142 Wladimiro Falcone Falcone\n",
"143 Davide Faraoni Faraoni\n",
"144 Federico Fazio Fazio\n",
"145 Jacopo Fazzini Fazzini\n",
"146 Lewis Ferguson Ferguson\n",
"147 João Ferreira Ferreira\n",
"148 Alessandro Florenzi Florenzi\n",
"149 Michael Folorunsho Folorunsho\n",
"150 Davide Frattesi Frattesi\n",
"151 Morten Frendrup Frendrup\n",
"152 Remo Freuler Freuler\n",
"153 Roberto Gagliardini Gagliardini\n",
"154 Antonino Gallo Gallo\n",
"155 Luca Garritano Garritano\n",
"156 Federico Gatti Gatti\n",
"157 Francesco Gelli Gelli\n",
"158 Valentin Gendrey Gendrey\n",
"159 Gvidas Gineitis Gineitis\n",
"160 Olivier Giroud Giroud\n",
"161 Edoardo Goldaniga Goldaniga\n",
"162 Joan Gonzàlez Gonzalez\n",
"163 Nicolás González Gonzalez\n",
"164 Alberto Grassi Grassi\n",
"165 Mattéo Guendouzi Guendouzi\n",
"166 Axel Guessand Guessand\n",
"167 Albert Guðmundsson Gumundsson\n",
"168 Emmanuel Gyasi Gyasi\n",
"169 Norbert Gyömbér Gyomber\n",
"170 Nicolas Haas Haas\n",
"171 Abdou Harroui Harroui\n",
"172 Hans Hateboer Hateboer\n",
"173 Pantelis Hatzidiakos Hatzidiakos\n",
"174 Silvan Hefti Hefti\n",
"175 Liam Henderson Henderson\n",
"176 Matheus Henrique Henrique\n",
"177 Thomas Henry Henry\n",
"178 Theo Hernández Hernandez\n",
"179 Isak Hien Hien\n",
"180 Emil Holm Holm\n",
"181 Martin Hongla Hongla\n",
"182 Sydney van Hooijdonk Hooijdonk\n",
"183 Elseid Hysaj Hysaj\n",
"184 Jonathan Ikone Ikone\n",
"185 Chukwubuikem Ikwuemesi Ikwuemesi\n",
"186 Ivan Ilić Ilic\n",
"187 Samuel Iling-Junior Iling-Junior\n",
"188 Ciro Immobile Immobile\n",
"189 Gino Infantino Infantino\n",
"190 Gustav Isaksen Isaksen\n",
"191 Ardian Ismajli Ismajli\n",
"192 Armando Izzo Izzo\n",
"193 Filip Jagiełło Jagieo\n",
"194 Jakub Jankto Jankto\n",
"195 Juan Jesus Jesus\n",
"196 Luka Jović Jovic\n",
"197 Mohamed Kaba Kaba\n",
"198 Christian Kabasele Kabasele\n",
"199 Pierre Kalulu Kalulu\n",
"200 Daichi Kamada Kamada\n",
"201 Hassane Kamara Kamara\n",
"202 Yann Karamoh Karamoh\n",
"203 Jesper Karlsson Karlsson\n",
"204 Rick Karsdorp Karsdorp\n",
"205 Grigoris Kastanos Kastanos\n",
"206 Michael Kayode Kayode\n",
"207 Moise Kean Kean\n",
"208 Simon Kjær Kjr\n",
"209 Davy Klaassen Klaassen\n",
"210 Sead Kolašinac Kolasinac\n",
"211 Teun Koopmeiners Koopmeiners\n",
"212 Filip Kostić Kostic\n",
"213 Christian Kouamé Kouame\n",
"214 Viktor Kovalenko Kovalenko\n",
"215 Thomas Kristensen Kristensen\n",
"216 Nikola Krstović Krstovic\n",
"217 Rade Krunić Krunic\n",
"218 Berkan Kutlu Kutlu\n",
"219 Khvicha Kvaratskhelia Kvaratskhelia\n",
"220 Giorgi Kvernadze Kvernadze\n",
"221 Giorgos Kyriakopoulos Kyriakopoulos\n",
"222 Armand Lauriente Lauriente\n",
"223 Valentino Lazaro Lazaro\n",
"224 Darko Lazović Lazovic\n",
"225 Manuel Lazzari Lazzari\n",
"226 Rafael Leão Leao\n",
"227 Jesper Lindstrøm Lindstrm\n",
"228 Karol Linetty Linetty\n",
"229 Pol Lirola Lirola\n",
"230 Diego Llorente Llorente\n",
"231 Stanislav Lobotka Lobotka\n",
"232 Manuel Locatelli Locatelli\n",
"233 Ruben Loftus-Cheek Loftus-Cheek\n",
"234 Ademola Lookman Lookman\n",
"235 Maxime Lopez Lopez\n",
"236 Maxime Lopez Lopez\n",
"237 Matteo Lovato Lovato\n",
"238 Sandi Lovrić Lovric\n",
"239 Lorenzo Lucca Lucca\n",
"240 Jhon Lucumí Lucumi\n",
"241 José Luis Palomino Palomino\n",
"242 Romelu Lukaku Lukaku\n",
"243 Sebastiano Luperto Luperto\n",
"244 Charalambos Lykogiannis Lykogiannis\n",
"245 Giulio Maggiore Maggiore\n",
"246 Giangiacomo Magnani Magnani\n",
"247 Mike Maignan Maignan\n",
"248 Antoine Makoumbou Makoumbou\n",
"249 Youssef Maleh Maleh\n",
"250 Ruslan Malinovskyi Malinovskyi\n",
"251 Gianluca Mancini Mancini\n",
"252 Rolando Mandragora Mandragora\n",
"253 Riccardo Marchizza Marchizza\n",
"254 Gian Marco Ferrari Ferrari\n",
"255 Pablo Marí Mari\n",
"256 Mirko Marić Maric\n",
"257 Răzvan Marin Marin\n",
"258 Agustín Martegani Martegani\n",
"259 Aarón Martín Martin\n",
"260 Josep Martinez Martinez\n",
"261 Lautaro Martínez Martinez\n",
"262 Lucas Martínez Quarta Quarta\n",
"263 Adam Marušić Marusic\n",
"264 Alan Matturro Matturro\n",
"265 Luca Mazzitelli Mazzitelli\n",
"266 Pasquale Mazzocchi Mazzocchi\n",
"267 Jordi Mboula Mboula\n",
"268 Weston McKennie McKennie\n",
"269 Arthur Melo Melo\n",
"270 Alex Meret Meret\n",
"271 Junior Messias Messias\n",
"272 Nikola Milenković Milenkovic\n",
"273 Arkadiusz Milik Milik\n",
"274 Vanja Milinković-Savić Milinkovic-Savic\n",
"275 Aleksei Miranchuk Miranchuk\n",
"276 Kevin Miranda Miranda\n",
"277 Fabio Miretti Miretti\n",
"278 Filippo Missori Missori\n",
"279 Henrikh Mkhitaryan Mkhitaryan\n",
"280 Ilario Monterisi Monterisi\n",
"281 Lorenzo Montipò Montipo\n",
"282 Nikola Moro Moro\n",
"283 Dany Mota Mota\n",
"284 Samuele Mulattieri Mulattieri\n",
"285 Luis Muriel Muriel\n",
"286 Yunus Musah Musah\n",
"287 Juan Musso Musso\n",
"288 Obite N'Dicka NDicka\n",
"289 Nahitan Nández Nandez\n",
"290 Natan Natan\n",
"291 Michel Ndary Adopo Adopo\n",
"292 Dan Ndoye Ndoye\n",
"293 Cyril Ngonge Ngonge\n",
"294 Rasmus Nissen Nissen\n",
"295 M'Bala Nzola Nzola\n",
"296 Adam Obert Obert\n",
"297 Guillermo Ochoa Ochoa\n",
"298 Noah Okafor Okafor\n",
"299 Caleb Okoli Okoli\n",
"300 Mathías Olivera Olivera\n",
"301 Gaetano Oristanio Oristanio\n",
"302 Riccardo Orsolini Orsolini\n",
"303 Victor Osimhen Osimhen\n",
"304 Remi Oudin Oudin\n",
"305 Anthony Oyono Oyono\n",
"306 Simone Pafundi Pafundi\n",
"307 Riccardo Pagano Pagano\n",
"308 Leandro Paredes Paredes\n",
"309 Fabiano Parisi Parisi\n",
"310 Mario Pašalić Pasalic\n",
"311 Patric Patric\n",
"312 Rui Patrício Patricio\n",
"313 Benjamin Pavard Pavard\n",
"314 Leonardo Pavoletti Pavoletti\n",
"315 Martín Payero Payero\n",
"316 Marcus Pedersen Pedersen\n",
"317 Pedro Pedro\n",
"318 Pietro Pellegri Pellegri\n",
"319 Lorenzo Pellegrini Pellegrini\n",
"320 Luca Pellegrini Pellegrini\n",
"321 Pepín Pepin\n",
"322 Pedro Pereira Pereira\n",
"323 Roberto Pereyra Pereyra\n",
"324 Nehuén Pérez Perez\n",
"325 Mattia Perin Perin\n",
"326 Samuele Perisan Perisan\n",
"327 Matteo Pessina Pessina\n",
"328 Andrea Petagna Petagna\n",
"329 Giuseppe Pezzella Pezzella\n",
"330 Roberto Piccoli Piccoli\n",
"331 Roberto Piccoli Piccoli\n",
"332 Andrea Pinamonti Pinamonti\n",
"333 Lorenzo Pirola Pirola\n",
"334 Tommaso Pobega Pobega\n",
"335 Paul Pogba Pogba\n",
"336 Matteo Politano Politano\n",
"337 Marin Pongračić Pongracic\n",
"338 Stefan Posch Posch\n",
"339 Matteo Prati Prati\n",
"340 Ivan Provedel Provedel\n",
"341 Christian Pulisic Pulisic\n",
"342 George Pușcaș Puscas\n",
"343 Domingos Quina Quina\n",
"344 Adrien Rabiot Rabiot\n",
"345 Uroš Račić Racic\n",
"346 Nemanja Radonjić Radonjic\n",
"347 Boris Radunović Radunovic\n",
"348 Hamza Rafia Rafia\n",
"349 Ylber Ramadani Ramadani\n",
"350 Luca Ranieri Ranieri\n",
"351 Filippo Ranocchia Ranocchia\n",
"352 Giacomo Raspadori Raspadori\n",
"353 Tijjani Reijnders Reijnders\n",
"354 Mateo Retegui Retegui\n",
"355 Samuele Ricci Ricci\n",
"356 Ricardo Rodríguez Rodriguez\n",
"357 Alessio Romagnoli Romagnoli\n",
"358 Simone Romagnoli Romagnoli\n",
"359 Luka Romero Romero\n",
"360 Marten de Roon Roon\n",
"361 Nicolò Rovella Rovella\n",
"362 Amir Rrahmani Rrahmani\n",
"363 Ruan Ruan\n",
"364 Daniele Rugani Rugani\n",
"365 Matteo Ruggeri Ruggeri\n",
"366 Mário Rui Rui\n",
"367 Stefano Sabelli Sabelli\n",
"368 Alexis Saelemaekers Saelemaekers\n",
"369 Lazar Samardzic Samardzic\n",
"370 Junior Sambia Sambia\n",
"371 Antonio Sanabria Sanabria\n",
"372 Renato Sanches Sanches\n",
"373 Alexis Sánchez Sanchez\n",
"374 Alex Sandro Sandro\n",
"375 Nicola Sansone Sansone\n",
"376 Riccardo Saponara Saponara\n",
"377 Saba Sazonov Sazonov\n",
"378 Giorgio Scalvini Scalvini\n",
"379 Gianluca Scamacca Scamacca\n",
"380 Perr Schuurs Schuurs\n",
"381 Demba Seck Seck\n",
"382 Vivaldo Semedo Semedo\n",
"383 Stefano Sensi Sensi\n",
"384 Suat Serdar Serdar\n",
"385 Stephan El Shaarawy Shaarawy\n",
"386 Eldor Shomurodov Shomurodov\n",
"387 Steven Shpendi Shpendi\n",
"388 Marco Silvestri Silvestri\n",
"389 Giovanni Simeone Simeone\n",
"390 Leo Skiri Østigård stigard\n",
"391 Łukasz Skorupski Skorupski\n",
"392 Chris Smalling Smalling\n",
"393 Ola Solbakken Solbakken\n",
"394 Yann Sommer Sommer\n",
"395 Brandon Soppy Soppy\n",
"396 Alessandro Sorrentino Sorrentino\n",
"397 Riccardo Sottil Sottil\n",
"398 Matìas Soulé Soule\n",
"399 Leonardo Spinazzola Spinazzola\n",
"400 Marco Sportiello Sportiello\n",
"401 Gabriel Strefezza Strefezza\n",
"402 Kevin Strootman Strootman\n",
"403 Isaac Success Success\n",
"404 Ibrahim Sulemana Sulemana\n",
"405 Tomáš Suslov Suslov\n",
"406 Wojciech Szczęsny Szczesny\n",
"407 Przemysław Szymiński Szyminski\n",
"408 Adrien Tameze Tameze\n",
"409 Loum Tchaouna Tchaouna\n",
"410 Filippo Terracciano Terracciano\n",
"411 Pietro Terracciano Terracciano\n",
"412 Florian Thauvin Thauvin\n",
"413 Malick Thiaw Thiaw\n",
"414 Morten Thorsby Thorsby\n",
"415 Kristian Thorstvedt Thorstvedt\n",
"416 Marcus Thuram Thuram\n",
"417 Jeremy Toljan Toljan\n",
"418 Rafael Tolói Toloi\n",
"419 Fikayo Tomori Tomori\n",
"420 Ahmed Touba Touba\n",
"421 Stefano Turati Turati\n",
"422 Kacper Urbanski Urbanski\n",
"423 Johan Vásquez Vasquez\n",
"424 Matías Vecino Vecino\n",
"425 Lorenzo Venuti Venuti\n",
"426 Simone Verdi Verdi\n",
"427 Samuele Vignato Vignato\n",
"428 Matías Viña Vina\n",
"429 Nicolas Viola Viola\n",
"430 Mattia Viti Viti\n",
"431 Dušan Vlahović Vlahovic\n",
"432 Nikola Vlašić Vlasic\n",
"433 Mërgim Vojvoda Vojvoda\n",
"434 Cristian Volpato Volpato\n",
"435 Stefan de Vrij Vrij\n",
"436 Walace Walace\n",
"437 Sebastian Walukiewicz Walukiewicz\n",
"438 Timothy Weah Weah\n",
"439 Mateusz Wieteska Wieteska\n",
"440 Kenan Yıldız Yldz\n",
"441 Mattia Zaccagni Zaccagni\n",
"442 Nicola Zalewski Zalewski\n",
"443 Andre-Frank Zambo Anguissa Anguissa\n",
"444 Duván Zapata Zapata\n",
"445 Duván Zapata Zapata\n",
"446 Gabriele Zappa Zappa\n",
"447 Davide Zappacosta Zappacosta\n",
"448 Oier Zarraga Zarraga\n",
"449 Jordan Zemura Zemura\n",
"450 Alessio Zerbin Zerbin\n",
"451 Piotr Zieliński Zielinski\n",
"452 David Zima Zima\n",
"453 Joshua Zirkzee Zirkzee\n",
"454 Zito Zito\n",
"455 Nadir Zortea Zortea\n",
"456 Milan Đurić uric\n",
"457 Mateusz Łęgowski egowski\n",
"458 Etrit Berisha Berisha\n",
"459 Elia Caprile Caprile\n",
"460 Marco Carnesecchi Carnesecchi\n",
"461 Michele Cerofolini Cerofolini\n",
"462 Oliver Christensen Christensen\n",
"463 Andrea Consigli Consigli\n",
"464 Alessio Cragno Cragno\n",
"465 Michele Di Gregorio Gregorio\n",
"466 Wladimiro Falcone Falcone\n",
"467 Mike Maignan Maignan\n",
"468 Josep Martinez Martinez\n",
"469 Alex Meret Meret\n",
"470 Vanja Milinković-Savić Milinkovic-Savic\n",
"471 Lorenzo Montipò Montipo\n",
"472 Juan Musso Musso\n",
"473 Guillermo Ochoa Ochoa\n",
"474 Rui Patrício Patricio\n",
"475 Mattia Perin Perin\n",
"476 Samuele Perisan Perisan\n",
"477 Ivan Provedel Provedel\n",
"478 Boris Radunović Radunovic\n",
"479 Marco Silvestri Silvestri\n",
"480 Łukasz Skorupski Skorupski\n",
"481 Yann Sommer Sommer\n",
"482 Alessandro Sorrentino Sorrentino\n",
"483 Marco Sportiello Sportiello\n",
"484 Wojciech Szczęsny Szczesny\n",
"485 Pietro Terracciano Terracciano\n",
"486 Stefano Turati Turati\n"
]
}
],
"source": [
"print(players[['player', 'surname']].to_string())"
]
},
{
"cell_type": "markdown",
"id": "9ab06a5c",
"metadata": {},
"source": [
"Replace the surname for some specific players, according to config/name_fix.txt file.\n",
"\n",
"This is done for players for which the decoded fbref surname doesn't correspond to Fantacalcio list."
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "3e759b1b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Ostigard\n",
"Augusto\n",
"Kjaer\n",
"Djuric\n",
"Gudmundsson\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>FROM</th>\n",
" <th>TO</th>\n",
" <th>TEAM</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>stigard</td>\n",
" <td>Ostigard</td>\n",
" <td>Napoli</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Min-jae</td>\n",
" <td>Kim</td>\n",
" <td>Napoli</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Hjlund</td>\n",
" <td>Hojlund</td>\n",
" <td>Atalanta</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Gytkjr</td>\n",
" <td>Gytkjaer</td>\n",
" <td>Monza</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Carlos</td>\n",
" <td>Augusto</td>\n",
" <td>Inter</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Mhle</td>\n",
" <td>Maehle</td>\n",
" <td>Atalanta</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Kjr</td>\n",
" <td>Kjaer</td>\n",
" <td>Milan</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>uricic</td>\n",
" <td>Djuricic</td>\n",
" <td>Sampdoria</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>uric</td>\n",
" <td>Djuric</td>\n",
" <td>Hellas Verona</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>Arthur</td>\n",
" <td>Cabral</td>\n",
" <td>Fiorentina</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>Martinez</td>\n",
" <td>Alvarez</td>\n",
" <td>Sassuolo</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>Gumundsson</td>\n",
" <td>Gudmundsson</td>\n",
" <td>Genoa</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>Kristensen</td>\n",
" <td>Nissen</td>\n",
" <td>Roma</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" FROM TO TEAM\n",
"0 stigard Ostigard Napoli\n",
"1 Min-jae Kim Napoli\n",
"2 Hjlund Hojlund Atalanta\n",
"3 Gytkjr Gytkjaer Monza\n",
"4 Carlos Augusto Inter\n",
"5 Mhle Maehle Atalanta\n",
"6 Kjr Kjaer Milan\n",
"7 uricic Djuricic Sampdoria\n",
"8 uric Djuric Hellas Verona\n",
"9 Arthur Cabral Fiorentina\n",
"10 Martinez Alvarez Sassuolo\n",
"11 Gumundsson Gudmundsson Genoa\n",
"12 Kristensen Nissen Roma"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rcsv = pd.read_csv('config/name_fix.txt') \n",
"name_fix = pd.DataFrame(rcsv)\n",
"\n",
"for i in range(name_fix.shape[0]):\n",
" for j in range(players.shape[0]):\n",
" if(players['surname'][j].lower() == name_fix['FROM'][i].lower() and players['team'][j].lower() == name_fix['TEAM'][i].lower()):\n",
" players['surname'][j] = name_fix['TO'][i]\n",
" print(name_fix['TO'][i])\n",
"\n",
"name_fix\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "3c686d9f",
"metadata": {},
"source": [
"Load players from Fantacalcio list."
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "f96eaaa1",
"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>id</th>\n",
" <th>r</th>\n",
" <th>name</th>\n",
" <th>team</th>\n",
" <th>surname</th>\n",
" <th>initial</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2428</td>\n",
" <td>P</td>\n",
" <td>Sommer</td>\n",
" <td>Inter</td>\n",
" <td>Sommer</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>453</td>\n",
" <td>P</td>\n",
" <td>Szczesny</td>\n",
" <td>Juventus</td>\n",
" <td>Szczesny</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>572</td>\n",
" <td>P</td>\n",
" <td>Meret</td>\n",
" <td>Napoli</td>\n",
" <td>Meret</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2814</td>\n",
" <td>P</td>\n",
" <td>Provedel</td>\n",
" <td>Lazio</td>\n",
" <td>Provedel</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4312</td>\n",
" <td>P</td>\n",
" <td>Maignan</td>\n",
" <td>Milan</td>\n",
" <td>Maignan</td>\n",
" <td></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",
" </tr>\n",
" <tr>\n",
" <th>534</th>\n",
" <td>6395</td>\n",
" <td>A</td>\n",
" <td>Shpendi S.</td>\n",
" <td>Empoli</td>\n",
" <td>Shpendi</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>535</th>\n",
" <td>6418</td>\n",
" <td>A</td>\n",
" <td>Burnete</td>\n",
" <td>Lecce</td>\n",
" <td>Burnete</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>536</th>\n",
" <td>6419</td>\n",
" <td>A</td>\n",
" <td>Corfitzen</td>\n",
" <td>Lecce</td>\n",
" <td>Corfitzen</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>537</th>\n",
" <td>6427</td>\n",
" <td>A</td>\n",
" <td>Stewart</td>\n",
" <td>Salernitana</td>\n",
" <td>Stewart</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>538</th>\n",
" <td>6434</td>\n",
" <td>A</td>\n",
" <td>Yildiz</td>\n",
" <td>Juventus</td>\n",
" <td>Yildiz</td>\n",
" <td></td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>539 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" id r name team surname initial\n",
"0 2428 P Sommer Inter Sommer \n",
"1 453 P Szczesny Juventus Szczesny \n",
"2 572 P Meret Napoli Meret \n",
"3 2814 P Provedel Lazio Provedel \n",
"4 4312 P Maignan Milan Maignan \n",
".. ... .. ... ... ... ...\n",
"534 6395 A Shpendi S. Empoli Shpendi S\n",
"535 6418 A Burnete Lecce Burnete \n",
"536 6419 A Corfitzen Lecce Corfitzen \n",
"537 6427 A Stewart Salernitana Stewart \n",
"538 6434 A Yildiz Juventus Yildiz \n",
"\n",
"[539 rows x 6 columns]"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fc_data = pd.read_excel('fantacalcio/Quotazioni_Fantacalcio.xlsx', 'Tutti', header = 1)\n",
"\n",
"fc_players = fc_data [['Id', 'R', 'Nome', 'Squadra']]\n",
"\n",
"fc_players = fc_players.rename(columns = {'Id' : 'id', 'R': 'r', 'Nome' : 'name', 'Squadra' : 'team'})\n",
"\n",
"fc_players['surname'] = fc_players['name']\n",
"fc_players['initial'] = fc_players['name']\n",
"\n",
"\n",
"for i in range(fc_players.shape[0]):\n",
" spl = normalize_name( fc_players['name'][i].replace('\\'', '') ).split(' ')\n",
" if('.' in spl[-1]):\n",
" fc_players.loc[i, 'surname'] = spl[-2]\n",
" fc_players.loc[i, 'initial'] = spl[-1][0]\n",
" else:\n",
" fc_players.loc[i, 'surname'] = spl[-1]\n",
" fc_players.loc[i, 'initial'] = ''\n",
" \n",
"fc_players\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "d944c720",
"metadata": {},
"source": [
"Associate players from Fantacalcio list to ID for FBref data."
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "9c50e4b5",
"metadata": {},
"outputs": [],
"source": [
"fc_players['fb_ID'] = fc_players['id']\n",
"\n",
"for i in range(fc_players.shape[0]):\n",
" fc_players.loc[i, 'fb_ID'] = -1\n",
" \n",
" for j in range(players.shape[0]):\n",
" if(fc_players['team'][i].lower() in players['team'][j].lower()):\n",
" if(fc_players['surname'][i].lower() == players['surname'][j].lower()): \n",
" # if(fc_players['initial'][i] == '' or fc_players['initial'][i].lower() == players['initial'][j].lower()):\n",
" if((fc_players['r'][i] == 'P') == (j >= keepers_ID)): # check wether they're a goalkeeper for both FBREF and Fantacalcio\n",
" fc_players.loc[i, 'fb_ID'] = j\n",
" \n",
" "
]
},
{
"cell_type": "markdown",
"id": "4e60fd2e",
"metadata": {},
"source": [
"Print players for which the association failed.\n",
"\n",
"Most of them are players who didn't play a single Serie A game this season with their team. If that is the case, and there is data from their previous team, that is taken here.\n",
"\n",
"Others are ones for which the FBRef surname doesn't correspond to Fantacalcio one.\n",
"\n",
"\n",
"For example, Cabral is Arthur for FBref.\n",
"\n",
"Correction is made in the name_fix code above."
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "18f6c5f2",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mirante not found\n",
"Sepe not found\n",
"Leali not found\n",
"Lamanna not found\n",
"Sommariva not found\n",
"Pegolo not found\n",
"Perilli not found\n",
"Padelli not found\n",
"Scuffet not found\n",
"Gollini not found\n",
"Audero not found\n",
"Di Gennaro not found\n",
"Pinsoglio not found\n",
"Aresti not found\n",
"Fiorillo not found\n",
"Rossi F. not found\n",
"Costil not found\n",
"Ravaglia F. not found\n",
"Frattali not found\n",
"Contini not found\n",
"Brancolini not found\n",
"Berardi A. not found\n",
"Gemello not found\n",
"Boer not found\n",
"Bagnolini not found\n",
"Svilar not found\n",
"Martinelli T. not found\n",
"Popa not found\n",
"Stubljar not found\n",
"Gori not found\n",
"Borbei not found\n",
"Okoye not found\n",
"Mandas not found\n",
"Kristensen not found\n",
"Mina not found\n",
"Masina not found\n",
"Djidji not found\n",
"Tressoldi not found\n",
"Ehizibue not found\n",
"Vogliacco not found\n",
"Gunter not found\n",
"Soumaoro not found\n",
"Zanoli not found\n",
"De Sciglio not found\n",
"Bonifazi not found\n",
"Kumbulla not found\n",
"Haps not found\n",
"Cittadini not found\n",
"Dermaku not found\n",
"Tonelli not found\n",
"Capradossi not found\n",
"Bettella not found\n",
"Amey not found\n",
"Gila not found\n",
"Bronn not found\n",
"Guarino not found\n",
"Smajlovic not found\n",
"N'guessan not found\n",
"Mateus Lusuardi not found\n",
"Kalaj not found\n",
"Pierozzi not found\n",
"Huijsen not found\n",
"Bonfanti not found\n",
"Pellegrino not found\n",
"Comuzzo not found\n",
"Lindstrom not found\n",
"Bennacer not found\n",
"Castrovilli not found\n",
"Reinier not found\n",
"Cajuste not found\n",
"Mancosu not found\n",
"Machin not found\n",
"Iling Junior not found\n",
"Maldini not found\n",
"Tchatchoua not found\n",
"Basic not found\n",
"Gaetano not found\n",
"Jagiello not found\n",
"Obiang not found\n",
"Akpa Akpro not found\n",
"Hrustic not found\n",
"Camara E. not found\n",
"Lulic K. not found\n",
"Rog not found\n",
"Nicolussi Caviglia not found\n",
"Demme not found\n",
"Faticanti not found\n",
"Belardinelli not found\n",
"Lipani not found\n",
"Joselito not found\n",
"Legowski not found\n",
"Ibrahimovic A. not found\n",
"Toure' E. not found\n",
"Lapadula not found\n",
"Abraham not found\n",
"Deulofeu not found\n",
"Luvumbo not found\n",
"Brenner not found\n",
"Davis K. not found\n",
"Jovane not found\n",
"Alvarez A. not found\n",
"Cruz not found\n",
"Ake' M. not found\n",
"Braaf not found\n",
"Kallon not found\n",
"Kaio Jorge not found\n",
"Vivaldo not found\n",
"Bidaoui not found\n",
"Corfitzen not found\n",
"Stewart not found\n",
"Yildiz not found\n"
]
}
],
"source": [
"exceptions = ['pellegrini', 'bastoni', 'kristensen'] # exceptions for such players that have the same surname as others (Berardi A., Luca Pellegrini)\n",
"\n",
"for i in range(fc_players.shape[0]):\n",
" if(fc_players['fb_ID'][i] == -1):\n",
" found = False\n",
" for j in range(players.shape[0]):\n",
" if(fc_players['surname'][i].lower() == players['surname'][j].lower()):\n",
" if(not(players['surname'][j].lower() in exceptions)):\n",
" if((fc_players['r'][i] == 'P') == (j >= keepers_ID)):\n",
" fc_players.loc[i, 'fb_ID']= j\n",
" found = True\n",
" if(found):\n",
" print(fc_players['name'][i] + ' from previous team stats')\n",
" else:\n",
" print(fc_players['name'][i] + ' not found')"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "3b4a36af",
"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>id</th>\n",
" <th>r</th>\n",
" <th>name</th>\n",
" <th>team</th>\n",
" <th>surname</th>\n",
" <th>initial</th>\n",
" <th>fb_ID</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2428</td>\n",
" <td>P</td>\n",
" <td>Sommer</td>\n",
" <td>Inter</td>\n",
" <td>Sommer</td>\n",
" <td></td>\n",
" <td>481</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>453</td>\n",
" <td>P</td>\n",
" <td>Szczesny</td>\n",
" <td>Juventus</td>\n",
" <td>Szczesny</td>\n",
" <td></td>\n",
" <td>484</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>572</td>\n",
" <td>P</td>\n",
" <td>Meret</td>\n",
" <td>Napoli</td>\n",
" <td>Meret</td>\n",
" <td></td>\n",
" <td>469</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2814</td>\n",
" <td>P</td>\n",
" <td>Provedel</td>\n",
" <td>Lazio</td>\n",
" <td>Provedel</td>\n",
" <td></td>\n",
" <td>477</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4312</td>\n",
" <td>P</td>\n",
" <td>Maignan</td>\n",
" <td>Milan</td>\n",
" <td>Maignan</td>\n",
" <td></td>\n",
" <td>467</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",
" </tr>\n",
" <tr>\n",
" <th>534</th>\n",
" <td>6395</td>\n",
" <td>A</td>\n",
" <td>Shpendi S.</td>\n",
" <td>Empoli</td>\n",
" <td>Shpendi</td>\n",
" <td>S</td>\n",
" <td>387</td>\n",
" </tr>\n",
" <tr>\n",
" <th>535</th>\n",
" <td>6418</td>\n",
" <td>A</td>\n",
" <td>Burnete</td>\n",
" <td>Lecce</td>\n",
" <td>Burnete</td>\n",
" <td></td>\n",
" <td>59</td>\n",
" </tr>\n",
" <tr>\n",
" <th>536</th>\n",
" <td>6419</td>\n",
" <td>A</td>\n",
" <td>Corfitzen</td>\n",
" <td>Lecce</td>\n",
" <td>Corfitzen</td>\n",
" <td></td>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>537</th>\n",
" <td>6427</td>\n",
" <td>A</td>\n",
" <td>Stewart</td>\n",
" <td>Salernitana</td>\n",
" <td>Stewart</td>\n",
" <td></td>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>538</th>\n",
" <td>6434</td>\n",
" <td>A</td>\n",
" <td>Yildiz</td>\n",
" <td>Juventus</td>\n",
" <td>Yildiz</td>\n",
" <td></td>\n",
" <td>-1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>539 rows × 7 columns</p>\n",
"</div>"
],
"text/plain": [
" id r name team surname initial fb_ID\n",
"0 2428 P Sommer Inter Sommer 481\n",
"1 453 P Szczesny Juventus Szczesny 484\n",
"2 572 P Meret Napoli Meret 469\n",
"3 2814 P Provedel Lazio Provedel 477\n",
"4 4312 P Maignan Milan Maignan 467\n",
".. ... .. ... ... ... ... ...\n",
"534 6395 A Shpendi S. Empoli Shpendi S 387\n",
"535 6418 A Burnete Lecce Burnete 59\n",
"536 6419 A Corfitzen Lecce Corfitzen -1\n",
"537 6427 A Stewart Salernitana Stewart -1\n",
"538 6434 A Yildiz Juventus Yildiz -1\n",
"\n",
"[539 rows x 7 columns]"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fc_players"
]
},
{
"cell_type": "markdown",
"id": "f06afbb6",
"metadata": {},
"source": [
"Populate players dataset with stats from FBref, for outfield players and goalkeepers"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "1d73a312",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\2053436513.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy] = 0\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\2053436513.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy] = 0\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\2053436513.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy] = 0\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\2053436513.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy] = 0\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\2053436513.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy] = 0\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\2053436513.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy] = 0\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\2053436513.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy] = 0\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\2053436513.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy] = 0\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\2053436513.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy] = 0\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\2053436513.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy] = 0\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\2053436513.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy] = 0\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\2053436513.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy] = 0\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\2053436513.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy] = 0\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\2053436513.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy] = 0\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\2053436513.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy] = 0\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\2053436513.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy] = 0\n"
]
}
],
"source": [
"#Data for Outfield players\n",
"columns_to_copy = outfield_players.columns[4:]\n",
"\n",
"fc_players[columns_to_copy] = 0\n",
"\n",
"for i in range(fc_players.shape[0]):\n",
" if(fc_players['fb_ID'][i] != -1 and fc_players['r'][i] != 'P'):\n",
" for j in range(columns_to_copy.shape[0]):\n",
" #fc_players[columns_to_copy[j]][i] = outfield_players[columns_to_copy[j]][fc_players['fb_ID'][i]]\n",
" fc_players.loc[i, columns_to_copy[j]] = outfield_players.loc[fc_players['fb_ID'][i], columns_to_copy[j]]\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "7acb93e3",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['age', 'birth_year', 'gk_games', 'gk_games_starts', 'gk_minutes',\n",
" 'gk_goals_against', 'gk_goals_against_per90',\n",
" 'gk_shots_on_target_against', 'gk_saves', 'gk_save_pct', 'gk_wins',\n",
" 'gk_ties', 'gk_losses', 'gk_clean_sheets', 'gk_clean_sheets_pct',\n",
" 'gk_pens_att', 'gk_pens_allowed', 'gk_pens_saved', 'gk_pens_missed',\n",
" 'minutes_90s', 'gk_free_kick_goals_against',\n",
" 'gk_corner_kick_goals_against', 'gk_own_goals_against', 'gk_psxg',\n",
" 'gk_psnpxg_per_shot_on_target_against', 'gk_psxg_net',\n",
" 'gk_psxg_net_per90', 'gk_passes_completed_launched',\n",
" 'gk_passes_launched', 'gk_passes_pct_launched', 'gk_passes',\n",
" 'gk_passes_throws', 'gk_pct_passes_launched', 'gk_passes_length_avg',\n",
" 'gk_goal_kicks', 'gk_pct_goal_kicks_launched',\n",
" 'gk_goal_kick_length_avg', 'gk_crosses', 'gk_crosses_stopped',\n",
" 'gk_crosses_stopped_pct', 'gk_def_actions_outside_pen_area',\n",
" 'gk_def_actions_outside_pen_area_per90', 'gk_avg_distance_def_actions'],\n",
" dtype='object')"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"keeper_players.columns[4:]"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "eb9127a9",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16756\\127446819.py:4: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n"
]
}
],
"source": [
"#Data for Keepers\n",
"columns_to_copy = keeper_players.columns[4:]\n",
"\n",
"fc_players[columns_to_copy[2:]] = 0 # add columns but do not override age and birth_year\n",
"\n",
"delta_k = outfield_players.shape[0]\n",
"\n",
"for i in range(fc_players.shape[0]):\n",
" if(fc_players['fb_ID'][i] != -1 and fc_players['r'][i] == 'P'):\n",
" for j in range(columns_to_copy.shape[0]):\n",
" #fc_players[columns_to_copy[j]][i] = keeper_players[columns_to_copy[j]][fc_players['fb_ID'][i] - delta_k]\n",
" fc_players.loc[i, columns_to_copy[j]] = keeper_players.loc[fc_players['fb_ID'][i] - delta_k, columns_to_copy[j]]"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "da977789",
"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>id</th>\n",
" <th>r</th>\n",
" <th>name</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_passes_length_avg</th>\n",
" <th>gk_goal_kicks</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",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2428</td>\n",
" <td>P</td>\n",
" <td>Sommer</td>\n",
" <td>Inter</td>\n",
" <td>Sommer</td>\n",
" <td></td>\n",
" <td>481</td>\n",
" <td>34-287</td>\n",
" <td>1988</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>29.7</td>\n",
" <td>39</td>\n",
" <td>20.5</td>\n",
" <td>27.3</td>\n",
" <td>59</td>\n",
" <td>5</td>\n",
" <td>8.5</td>\n",
" <td>2</td>\n",
" <td>0.33</td>\n",
" <td>9.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>453</td>\n",
" <td>P</td>\n",
" <td>Szczesny</td>\n",
" <td>Juventus</td>\n",
" <td>Szczesny</td>\n",
" <td></td>\n",
" <td>484</td>\n",
" <td>33-165</td>\n",
" <td>1990</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>33.2</td>\n",
" <td>16</td>\n",
" <td>50.0</td>\n",
" <td>45.8</td>\n",
" <td>59</td>\n",
" <td>1</td>\n",
" <td>1.7</td>\n",
" <td>1</td>\n",
" <td>0.25</td>\n",
" <td>8.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>572</td>\n",
" <td>P</td>\n",
" <td>Meret</td>\n",
" <td>Napoli</td>\n",
" <td>Meret</td>\n",
" <td></td>\n",
" <td>469</td>\n",
" <td>26-192</td>\n",
" <td>1997</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>24.1</td>\n",
" <td>21</td>\n",
" <td>0.0</td>\n",
" <td>20.5</td>\n",
" <td>53</td>\n",
" <td>1</td>\n",
" <td>1.9</td>\n",
" <td>8</td>\n",
" <td>1.33</td>\n",
" <td>17.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2814</td>\n",
" <td>P</td>\n",
" <td>Provedel</td>\n",
" <td>Lazio</td>\n",
" <td>Provedel</td>\n",
" <td></td>\n",
" <td>477</td>\n",
" <td>29-197</td>\n",
" <td>1994</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>28.8</td>\n",
" <td>29</td>\n",
" <td>27.6</td>\n",
" <td>32.3</td>\n",
" <td>63</td>\n",
" <td>3</td>\n",
" <td>4.8</td>\n",
" <td>7</td>\n",
" <td>1.17</td>\n",
" <td>16.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4312</td>\n",
" <td>P</td>\n",
" <td>Maignan</td>\n",
" <td>Milan</td>\n",
" <td>Maignan</td>\n",
" <td></td>\n",
" <td>467</td>\n",
" <td>28-089</td>\n",
" <td>1995</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>29.2</td>\n",
" <td>23</td>\n",
" <td>60.9</td>\n",
" <td>47.0</td>\n",
" <td>52</td>\n",
" <td>12</td>\n",
" <td>23.1</td>\n",
" <td>3</td>\n",
" <td>0.75</td>\n",
" <td>9.8</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>534</th>\n",
" <td>6395</td>\n",
" <td>A</td>\n",
" <td>Shpendi S.</td>\n",
" <td>Empoli</td>\n",
" <td>Shpendi</td>\n",
" <td>S</td>\n",
" <td>387</td>\n",
" <td>20-134</td>\n",
" <td>2003</td>\n",
" <td>5</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>535</th>\n",
" <td>6418</td>\n",
" <td>A</td>\n",
" <td>Burnete</td>\n",
" <td>Lecce</td>\n",
" <td>Burnete</td>\n",
" <td></td>\n",
" <td>59</td>\n",
" <td>19-242</td>\n",
" <td>2004</td>\n",
" <td>1</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>536</th>\n",
" <td>6419</td>\n",
" <td>A</td>\n",
" <td>Corfitzen</td>\n",
" <td>Lecce</td>\n",
" <td>Corfitzen</td>\n",
" <td></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</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>537</th>\n",
" <td>6427</td>\n",
" <td>A</td>\n",
" <td>Stewart</td>\n",
" <td>Salernitana</td>\n",
" <td>Stewart</td>\n",
" <td></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</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>538</th>\n",
" <td>6434</td>\n",
" <td>A</td>\n",
" <td>Yildiz</td>\n",
" <td>Juventus</td>\n",
" <td>Yildiz</td>\n",
" <td></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</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>539 rows × 158 columns</p>\n",
"</div>"
],
"text/plain": [
" id r name team surname initial fb_ID age \\\n",
"0 2428 P Sommer Inter Sommer 481 34-287 \n",
"1 453 P Szczesny Juventus Szczesny 484 33-165 \n",
"2 572 P Meret Napoli Meret 469 26-192 \n",
"3 2814 P Provedel Lazio Provedel 477 29-197 \n",
"4 4312 P Maignan Milan Maignan 467 28-089 \n",
".. ... .. ... ... ... ... ... ... \n",
"534 6395 A Shpendi S. Empoli Shpendi S 387 20-134 \n",
"535 6418 A Burnete Lecce Burnete 59 19-242 \n",
"536 6419 A Corfitzen Lecce Corfitzen -1 0 \n",
"537 6427 A Stewart Salernitana Stewart -1 0 \n",
"538 6434 A Yildiz Juventus Yildiz -1 0 \n",
"\n",
" birth_year games ... gk_passes_length_avg gk_goal_kicks \\\n",
"0 1988 0 ... 29.7 39 \n",
"1 1990 0 ... 33.2 16 \n",
"2 1997 0 ... 24.1 21 \n",
"3 1994 0 ... 28.8 29 \n",
"4 1995 0 ... 29.2 23 \n",
".. ... ... ... ... ... \n",
"534 2003 5 ... 0.0 0 \n",
"535 2004 1 ... 0.0 0 \n",
"536 0 0 ... 0.0 0 \n",
"537 0 0 ... 0.0 0 \n",
"538 0 0 ... 0.0 0 \n",
"\n",
" gk_pct_goal_kicks_launched gk_goal_kick_length_avg gk_crosses \\\n",
"0 20.5 27.3 59 \n",
"1 50.0 45.8 59 \n",
"2 0.0 20.5 53 \n",
"3 27.6 32.3 63 \n",
"4 60.9 47.0 52 \n",
".. ... ... ... \n",
"534 0.0 0.0 0 \n",
"535 0.0 0.0 0 \n",
"536 0.0 0.0 0 \n",
"537 0.0 0.0 0 \n",
"538 0.0 0.0 0 \n",
"\n",
" gk_crosses_stopped gk_crosses_stopped_pct \\\n",
"0 5 8.5 \n",
"1 1 1.7 \n",
"2 1 1.9 \n",
"3 3 4.8 \n",
"4 12 23.1 \n",
".. ... ... \n",
"534 0 0.0 \n",
"535 0 0.0 \n",
"536 0 0.0 \n",
"537 0 0.0 \n",
"538 0 0.0 \n",
"\n",
" gk_def_actions_outside_pen_area gk_def_actions_outside_pen_area_per90 \\\n",
"0 2 0.33 \n",
"1 1 0.25 \n",
"2 8 1.33 \n",
"3 7 1.17 \n",
"4 3 0.75 \n",
".. ... ... \n",
"534 0 0.00 \n",
"535 0 0.00 \n",
"536 0 0.00 \n",
"537 0 0.00 \n",
"538 0 0.00 \n",
"\n",
" gk_avg_distance_def_actions \n",
"0 9.6 \n",
"1 8.5 \n",
"2 17.2 \n",
"3 16.0 \n",
"4 9.8 \n",
".. ... \n",
"534 0.0 \n",
"535 0.0 \n",
"536 0.0 \n",
"537 0.0 \n",
"538 0.0 \n",
"\n",
"[539 rows x 158 columns]"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fc_players"
]
},
{
"cell_type": "markdown",
"id": "81a17f84",
"metadata": {},
"source": [
"Load votes database, to add data to players database (mean vote and its standard deviation)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "6a0e43cd",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"votes = pd.read_excel('mid_outputs/players_votes.xlsx', index_col = 0)"
]
},
{
"cell_type": "markdown",
"id": "6c1b733a",
"metadata": {},
"source": [
"Compute the average Serie A Goal Keeper mean vote and vote std"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "61fac91a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"vote_avg 6.096667\n",
"vote_std 0.387547\n",
"dtype: float64\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>vote_avg</th>\n",
" <th>vote_std</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>5.833333</td>\n",
" <td>0.372678</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>5.875000</td>\n",
" <td>1.138804</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>5.833333</td>\n",
" <td>0.235702</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>6.416667</td>\n",
" <td>0.448764</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>6.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>5.833333</td>\n",
" <td>0.471405</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>6.250000</td>\n",
" <td>0.250000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>6.000000</td>\n",
" <td>0.288675</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>6.500000</td>\n",
" <td>0.547723</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>6.416667</td>\n",
" <td>0.448764</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>5.666667</td>\n",
" <td>0.372678</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>6.250000</td>\n",
" <td>0.750000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>6.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>5.833333</td>\n",
" <td>0.799305</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>6.416667</td>\n",
" <td>0.343592</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>5.916667</td>\n",
" <td>0.186339</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>6.250000</td>\n",
" <td>0.559017</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>6.500000</td>\n",
" <td>0.707107</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>6.000000</td>\n",
" <td>0.353553</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>6.250000</td>\n",
" <td>0.250000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>6.250000</td>\n",
" <td>0.250000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>6.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>6.125000</td>\n",
" <td>0.414578</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>5.750000</td>\n",
" <td>0.250000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>6.250000</td>\n",
" <td>0.250000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" vote_avg vote_std\n",
"0 5.833333 0.372678\n",
"1 5.875000 1.138804\n",
"2 5.833333 0.235702\n",
"3 6.416667 0.448764\n",
"4 6.000000 0.000000\n",
"5 5.833333 0.471405\n",
"6 6.250000 0.250000\n",
"7 6.000000 0.288675\n",
"8 6.500000 0.547723\n",
"9 6.416667 0.448764\n",
"10 5.666667 0.372678\n",
"11 6.250000 0.750000\n",
"12 6.000000 0.000000\n",
"13 5.833333 0.799305\n",
"14 6.416667 0.343592\n",
"15 5.916667 0.186339\n",
"16 6.250000 0.559017\n",
"17 6.500000 0.707107\n",
"18 6.000000 0.353553\n",
"19 6.250000 0.250000\n",
"20 6.250000 0.250000\n",
"21 6.000000 0.000000\n",
"22 6.125000 0.414578\n",
"23 5.750000 0.250000\n",
"24 6.250000 0.250000"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"min_votes = 3 # TO BE UPDATED WHEN SERIE A HAS MORE CALENDAR WEEKS PLAYED\n",
"\n",
"perf_df_P = pd.DataFrame(columns = ['vote_avg', 'vote_std'])\n",
"\n",
"for i in range(fc_players.shape[0]): \n",
" if(fc_players.loc[i]['r'] == 'P'):\n",
" v = np.array([])\n",
" for j in range(votes.shape[0]):\n",
" if(fc_players['name'][i] == votes['player'][j]):\n",
" v = np.append(v, votes['vote'][j])\n",
"\n",
" if(v.shape[0] >= min_votes - 1):\n",
" row_df = pd.DataFrame(data = [[np.mean(v), np.std(v)]], columns = perf_df_P.columns)\n",
" perf_df_P = pd.concat([perf_df_P, row_df], ignore_index = True)\n",
"\n",
"\n",
"print(perf_df_P.mean())\n",
"\n",
"perf_df_P\n"
]
},
{
"cell_type": "markdown",
"id": "dbb344e2",
"metadata": {},
"source": [
"Add to players data their mean vote (and its standard deviation).\n",
"\n",
"For players who don't have a minimum amount of games, more data to reach this value is computed, according to the average Serie A player vote (and std). For goalkeepers, this values are different.\n"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "c9312080",
"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>vote_avg</th>\n",
" <th>vote_std</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>5.833333</td>\n",
" <td>0.372678</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>5.875000</td>\n",
" <td>1.138804</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>5.833333</td>\n",
" <td>0.235702</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>6.416667</td>\n",
" <td>0.448764</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>6.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>534</th>\n",
" <td>5.875000</td>\n",
" <td>0.216506</td>\n",
" </tr>\n",
" <tr>\n",
" <th>535</th>\n",
" <td>6.211157</td>\n",
" <td>0.443859</td>\n",
" </tr>\n",
" <tr>\n",
" <th>536</th>\n",
" <td>5.482051</td>\n",
" <td>0.490718</td>\n",
" </tr>\n",
" <tr>\n",
" <th>537</th>\n",
" <td>6.039974</td>\n",
" <td>0.448371</td>\n",
" </tr>\n",
" <tr>\n",
" <th>538</th>\n",
" <td>5.601015</td>\n",
" <td>0.337620</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>539 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" vote_avg vote_std\n",
"0 5.833333 0.372678\n",
"1 5.875000 1.138804\n",
"2 5.833333 0.235702\n",
"3 6.416667 0.448764\n",
"4 6.000000 0.000000\n",
".. ... ...\n",
"534 5.875000 0.216506\n",
"535 6.211157 0.443859\n",
"536 5.482051 0.490718\n",
"537 6.039974 0.448371\n",
"538 5.601015 0.337620\n",
"\n",
"[539 rows x 2 columns]"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"min_votes = 3 # TO BE UPDATED WHEN SERIE A HAS MORE CALENDAR WEEKS PLAYED\n",
"\n",
"#outfield players\n",
"mean_def = 6\n",
"std_def = 0.58\n",
"\n",
"#goalkeepers\n",
"mean_def_P = 6.22\n",
"std_def_P = 0.43\n",
"\n",
"\n",
"perf_df = pd.DataFrame(columns = ['vote_avg', 'vote_std'])\n",
"\n",
"for i in range(fc_players.shape[0]):\n",
" v = np.array([])\n",
" for j in range(votes.shape[0]):\n",
" if(fc_players['name'][i] == votes['player'][j]):\n",
" v = np.append(v, votes['vote'][j])\n",
" \n",
" mean_def_i = mean_def\n",
" std_def_i = std_def\n",
" \n",
" if(fc_players['r'][i] == 'P'):\n",
" mean_def_i = mean_def_P\n",
" std_def_i = std_def_P\n",
" \n",
" if(v.shape[0] < min_votes):\n",
" for k in range(min_votes - v.shape[0]):\n",
" v = np.append( v, np.random.normal(mean_def_i, std_def_i) )\n",
" \n",
" row_df = pd.DataFrame(data = [[np.mean(v), np.std(v)]], columns = perf_df.columns)\n",
" perf_df = pd.concat([perf_df, row_df], ignore_index = True)\n",
" \n",
"perf_df\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "b2570ce5",
"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>id</th>\n",
" <th>r</th>\n",
" <th>name</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",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2428</td>\n",
" <td>P</td>\n",
" <td>Sommer</td>\n",
" <td>Inter</td>\n",
" <td>Sommer</td>\n",
" <td></td>\n",
" <td>481</td>\n",
" <td>34-287</td>\n",
" <td>1988</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>20.5</td>\n",
" <td>27.3</td>\n",
" <td>59</td>\n",
" <td>5</td>\n",
" <td>8.5</td>\n",
" <td>2</td>\n",
" <td>0.33</td>\n",
" <td>9.6</td>\n",
" <td>5.833333</td>\n",
" <td>0.372678</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>453</td>\n",
" <td>P</td>\n",
" <td>Szczesny</td>\n",
" <td>Juventus</td>\n",
" <td>Szczesny</td>\n",
" <td></td>\n",
" <td>484</td>\n",
" <td>33-165</td>\n",
" <td>1990</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>50.0</td>\n",
" <td>45.8</td>\n",
" <td>59</td>\n",
" <td>1</td>\n",
" <td>1.7</td>\n",
" <td>1</td>\n",
" <td>0.25</td>\n",
" <td>8.5</td>\n",
" <td>5.875000</td>\n",
" <td>1.138804</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>572</td>\n",
" <td>P</td>\n",
" <td>Meret</td>\n",
" <td>Napoli</td>\n",
" <td>Meret</td>\n",
" <td></td>\n",
" <td>469</td>\n",
" <td>26-192</td>\n",
" <td>1997</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>20.5</td>\n",
" <td>53</td>\n",
" <td>1</td>\n",
" <td>1.9</td>\n",
" <td>8</td>\n",
" <td>1.33</td>\n",
" <td>17.2</td>\n",
" <td>5.833333</td>\n",
" <td>0.235702</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2814</td>\n",
" <td>P</td>\n",
" <td>Provedel</td>\n",
" <td>Lazio</td>\n",
" <td>Provedel</td>\n",
" <td></td>\n",
" <td>477</td>\n",
" <td>29-197</td>\n",
" <td>1994</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>27.6</td>\n",
" <td>32.3</td>\n",
" <td>63</td>\n",
" <td>3</td>\n",
" <td>4.8</td>\n",
" <td>7</td>\n",
" <td>1.17</td>\n",
" <td>16.0</td>\n",
" <td>6.416667</td>\n",
" <td>0.448764</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4312</td>\n",
" <td>P</td>\n",
" <td>Maignan</td>\n",
" <td>Milan</td>\n",
" <td>Maignan</td>\n",
" <td></td>\n",
" <td>467</td>\n",
" <td>28-089</td>\n",
" <td>1995</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>60.9</td>\n",
" <td>47.0</td>\n",
" <td>52</td>\n",
" <td>12</td>\n",
" <td>23.1</td>\n",
" <td>3</td>\n",
" <td>0.75</td>\n",
" <td>9.8</td>\n",
" <td>6.000000</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>534</th>\n",
" <td>6395</td>\n",
" <td>A</td>\n",
" <td>Shpendi S.</td>\n",
" <td>Empoli</td>\n",
" <td>Shpendi</td>\n",
" <td>S</td>\n",
" <td>387</td>\n",
" <td>20-134</td>\n",
" <td>2003</td>\n",
" <td>5</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>5.875000</td>\n",
" <td>0.216506</td>\n",
" </tr>\n",
" <tr>\n",
" <th>535</th>\n",
" <td>6418</td>\n",
" <td>A</td>\n",
" <td>Burnete</td>\n",
" <td>Lecce</td>\n",
" <td>Burnete</td>\n",
" <td></td>\n",
" <td>59</td>\n",
" <td>19-242</td>\n",
" <td>2004</td>\n",
" <td>1</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>6.211157</td>\n",
" <td>0.443859</td>\n",
" </tr>\n",
" <tr>\n",
" <th>536</th>\n",
" <td>6419</td>\n",
" <td>A</td>\n",
" <td>Corfitzen</td>\n",
" <td>Lecce</td>\n",
" <td>Corfitzen</td>\n",
" <td></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</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>5.482051</td>\n",
" <td>0.490718</td>\n",
" </tr>\n",
" <tr>\n",
" <th>537</th>\n",
" <td>6427</td>\n",
" <td>A</td>\n",
" <td>Stewart</td>\n",
" <td>Salernitana</td>\n",
" <td>Stewart</td>\n",
" <td></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</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>6.039974</td>\n",
" <td>0.448371</td>\n",
" </tr>\n",
" <tr>\n",
" <th>538</th>\n",
" <td>6434</td>\n",
" <td>A</td>\n",
" <td>Yildiz</td>\n",
" <td>Juventus</td>\n",
" <td>Yildiz</td>\n",
" <td></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</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>5.601015</td>\n",
" <td>0.337620</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>539 rows × 160 columns</p>\n",
"</div>"
],
"text/plain": [
" id r name team surname initial fb_ID age \\\n",
"0 2428 P Sommer Inter Sommer 481 34-287 \n",
"1 453 P Szczesny Juventus Szczesny 484 33-165 \n",
"2 572 P Meret Napoli Meret 469 26-192 \n",
"3 2814 P Provedel Lazio Provedel 477 29-197 \n",
"4 4312 P Maignan Milan Maignan 467 28-089 \n",
".. ... .. ... ... ... ... ... ... \n",
"534 6395 A Shpendi S. Empoli Shpendi S 387 20-134 \n",
"535 6418 A Burnete Lecce Burnete 59 19-242 \n",
"536 6419 A Corfitzen Lecce Corfitzen -1 0 \n",
"537 6427 A Stewart Salernitana Stewart -1 0 \n",
"538 6434 A Yildiz Juventus Yildiz -1 0 \n",
"\n",
" birth_year games ... gk_pct_goal_kicks_launched \\\n",
"0 1988 0 ... 20.5 \n",
"1 1990 0 ... 50.0 \n",
"2 1997 0 ... 0.0 \n",
"3 1994 0 ... 27.6 \n",
"4 1995 0 ... 60.9 \n",
".. ... ... ... ... \n",
"534 2003 5 ... 0.0 \n",
"535 2004 1 ... 0.0 \n",
"536 0 0 ... 0.0 \n",
"537 0 0 ... 0.0 \n",
"538 0 0 ... 0.0 \n",
"\n",
" gk_goal_kick_length_avg gk_crosses gk_crosses_stopped \\\n",
"0 27.3 59 5 \n",
"1 45.8 59 1 \n",
"2 20.5 53 1 \n",
"3 32.3 63 3 \n",
"4 47.0 52 12 \n",
".. ... ... ... \n",
"534 0.0 0 0 \n",
"535 0.0 0 0 \n",
"536 0.0 0 0 \n",
"537 0.0 0 0 \n",
"538 0.0 0 0 \n",
"\n",
" gk_crosses_stopped_pct gk_def_actions_outside_pen_area \\\n",
"0 8.5 2 \n",
"1 1.7 1 \n",
"2 1.9 8 \n",
"3 4.8 7 \n",
"4 23.1 3 \n",
".. ... ... \n",
"534 0.0 0 \n",
"535 0.0 0 \n",
"536 0.0 0 \n",
"537 0.0 0 \n",
"538 0.0 0 \n",
"\n",
" gk_def_actions_outside_pen_area_per90 gk_avg_distance_def_actions \\\n",
"0 0.33 9.6 \n",
"1 0.25 8.5 \n",
"2 1.33 17.2 \n",
"3 1.17 16.0 \n",
"4 0.75 9.8 \n",
".. ... ... \n",
"534 0.00 0.0 \n",
"535 0.00 0.0 \n",
"536 0.00 0.0 \n",
"537 0.00 0.0 \n",
"538 0.00 0.0 \n",
"\n",
" vote_avg vote_std \n",
"0 5.833333 0.372678 \n",
"1 5.875000 1.138804 \n",
"2 5.833333 0.235702 \n",
"3 6.416667 0.448764 \n",
"4 6.000000 0.000000 \n",
".. ... ... \n",
"534 5.875000 0.216506 \n",
"535 6.211157 0.443859 \n",
"536 5.482051 0.490718 \n",
"537 6.039974 0.448371 \n",
"538 5.601015 0.337620 \n",
"\n",
"[539 rows x 160 columns]"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fc_players = pd.concat([fc_players, perf_df], axis = 1)\n",
"\n",
"fc_players"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "f7620abe",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'gk_games'"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"GK_GAMES_COLUMN = 118\n",
"\n",
"fc_players.columns[GK_GAMES_COLUMN]\n",
"\n",
"# check it if is 'gk_games'"
]
},
{
"cell_type": "markdown",
"id": "c550c370",
"metadata": {},
"source": [
"For goalkeepers who didn't play a miminum amount of games, data is weightly averaged with one of the main goalkeeper of their same team."
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "700b7a7d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Carnesecchi, 0.6666666666666667\n",
"Caprile, 0.33333333333333337\n",
"Cragno, 0.6666666666666667\n",
"Perin, 0.6666666666666667\n",
"Christensen O., 0.6666666666666667\n",
"Sportiello, 0.6666666666666667\n",
"Mirante, 0.0\n",
"Sepe, 0.0\n",
"Leali, 0.0\n",
"Lamanna, 0.0\n",
"Sommariva, 0.0\n",
"Pegolo, 0.0\n",
"Perilli, 0.0\n",
"Padelli, 0.0\n",
"Scuffet, 0.0\n",
"Gollini, 0.0\n",
"Perisan, 0.33333333333333337\n",
"Audero, 0.0\n",
"Di Gennaro, 0.0\n",
"Pinsoglio, 0.0\n",
"Aresti, 0.0\n",
"Fiorillo, 0.0\n",
"Cerofolini, 0.33333333333333337\n",
"Rossi F., 0.0\n",
"Costil, 0.0\n",
"Ravaglia F., 0.0\n",
"Frattali, 0.0\n",
"Contini, 0.0\n",
"Brancolini, 0.0\n",
"Berardi A., 0.0\n",
"Gemello, 0.0\n",
"Boer, 0.0\n",
"Bagnolini, 0.0\n",
"Svilar, 0.0\n",
"Sorrentino A., 0.33333333333333337\n",
"Martinelli T., 0.0\n",
"Popa, 0.0\n",
"Stubljar, 0.0\n",
"Gori, 0.0\n",
"Borbei, 0.0\n",
"Okoye, 0.0\n",
"Mandas, 0.0\n"
]
}
],
"source": [
"min_gk_games = 3 # TO BE UPDATED WHEN SERIE A HAS MORE CALENDAR WEEKS PLAYED\n",
"\n",
"fc_players_newgk = fc_players.copy()\n",
"\n",
"columns_to_avg = fc_players.columns[GK_GAMES_COLUMN:] # from gk_games to end\n",
"\n",
"for i in range(fc_players.shape[0]):\n",
" if(fc_players['r'][i] == 'P'):\n",
" if(fc_players['gk_games'][i] < min_gk_games):\n",
" for j in range(fc_players.shape[0]):\n",
" if(fc_players['team'][i] == fc_players['team'][j] and fc_players['gk_games'][j] >= min_gk_games):\n",
" break\n",
" \n",
" weight = 1 - (min_gk_games - fc_players['gk_games'][i]) / min_gk_games\n",
" \n",
" fc_players_newgk.at[i, columns_to_avg] = fc_players.loc[i][columns_to_avg] * weight + (1 - weight) * fc_players.loc[j][columns_to_avg]\n",
" \n",
" print(fc_players['name'][i] + ', ' + str(weight))\n",
" \n",
" "
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "2d9eee99",
"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>id</th>\n",
" <th>r</th>\n",
" <th>name</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",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2428</td>\n",
" <td>P</td>\n",
" <td>Sommer</td>\n",
" <td>Inter</td>\n",
" <td>Sommer</td>\n",
" <td></td>\n",
" <td>481</td>\n",
" <td>34-287</td>\n",
" <td>1988</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>20.5</td>\n",
" <td>27.3</td>\n",
" <td>59.0</td>\n",
" <td>5.0</td>\n",
" <td>8.5</td>\n",
" <td>2.0</td>\n",
" <td>0.33</td>\n",
" <td>9.6</td>\n",
" <td>5.833333</td>\n",
" <td>0.372678</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>453</td>\n",
" <td>P</td>\n",
" <td>Szczesny</td>\n",
" <td>Juventus</td>\n",
" <td>Szczesny</td>\n",
" <td></td>\n",
" <td>484</td>\n",
" <td>33-165</td>\n",
" <td>1990</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>50.0</td>\n",
" <td>45.8</td>\n",
" <td>59.0</td>\n",
" <td>1.0</td>\n",
" <td>1.7</td>\n",
" <td>1.0</td>\n",
" <td>0.25</td>\n",
" <td>8.5</td>\n",
" <td>5.875000</td>\n",
" <td>1.138804</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>572</td>\n",
" <td>P</td>\n",
" <td>Meret</td>\n",
" <td>Napoli</td>\n",
" <td>Meret</td>\n",
" <td></td>\n",
" <td>469</td>\n",
" <td>26-192</td>\n",
" <td>1997</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>20.5</td>\n",
" <td>53.0</td>\n",
" <td>1.0</td>\n",
" <td>1.9</td>\n",
" <td>8.0</td>\n",
" <td>1.33</td>\n",
" <td>17.2</td>\n",
" <td>5.833333</td>\n",
" <td>0.235702</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2814</td>\n",
" <td>P</td>\n",
" <td>Provedel</td>\n",
" <td>Lazio</td>\n",
" <td>Provedel</td>\n",
" <td></td>\n",
" <td>477</td>\n",
" <td>29-197</td>\n",
" <td>1994</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>27.6</td>\n",
" <td>32.3</td>\n",
" <td>63.0</td>\n",
" <td>3.0</td>\n",
" <td>4.8</td>\n",
" <td>7.0</td>\n",
" <td>1.17</td>\n",
" <td>16.0</td>\n",
" <td>6.416667</td>\n",
" <td>0.448764</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4312</td>\n",
" <td>P</td>\n",
" <td>Maignan</td>\n",
" <td>Milan</td>\n",
" <td>Maignan</td>\n",
" <td></td>\n",
" <td>467</td>\n",
" <td>28-089</td>\n",
" <td>1995</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>60.9</td>\n",
" <td>47.0</td>\n",
" <td>52.0</td>\n",
" <td>12.0</td>\n",
" <td>23.1</td>\n",
" <td>3.0</td>\n",
" <td>0.75</td>\n",
" <td>9.8</td>\n",
" <td>6.000000</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>534</th>\n",
" <td>6395</td>\n",
" <td>A</td>\n",
" <td>Shpendi S.</td>\n",
" <td>Empoli</td>\n",
" <td>Shpendi</td>\n",
" <td>S</td>\n",
" <td>387</td>\n",
" <td>20-134</td>\n",
" <td>2003</td>\n",
" <td>5</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.875000</td>\n",
" <td>0.216506</td>\n",
" </tr>\n",
" <tr>\n",
" <th>535</th>\n",
" <td>6418</td>\n",
" <td>A</td>\n",
" <td>Burnete</td>\n",
" <td>Lecce</td>\n",
" <td>Burnete</td>\n",
" <td></td>\n",
" <td>59</td>\n",
" <td>19-242</td>\n",
" <td>2004</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.211157</td>\n",
" <td>0.443859</td>\n",
" </tr>\n",
" <tr>\n",
" <th>536</th>\n",
" <td>6419</td>\n",
" <td>A</td>\n",
" <td>Corfitzen</td>\n",
" <td>Lecce</td>\n",
" <td>Corfitzen</td>\n",
" <td></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.482051</td>\n",
" <td>0.490718</td>\n",
" </tr>\n",
" <tr>\n",
" <th>537</th>\n",
" <td>6427</td>\n",
" <td>A</td>\n",
" <td>Stewart</td>\n",
" <td>Salernitana</td>\n",
" <td>Stewart</td>\n",
" <td></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>6.039974</td>\n",
" <td>0.448371</td>\n",
" </tr>\n",
" <tr>\n",
" <th>538</th>\n",
" <td>6434</td>\n",
" <td>A</td>\n",
" <td>Yildiz</td>\n",
" <td>Juventus</td>\n",
" <td>Yildiz</td>\n",
" <td></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.601015</td>\n",
" <td>0.337620</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>539 rows × 160 columns</p>\n",
"</div>"
],
"text/plain": [
" id r name team surname initial fb_ID age \\\n",
"0 2428 P Sommer Inter Sommer 481 34-287 \n",
"1 453 P Szczesny Juventus Szczesny 484 33-165 \n",
"2 572 P Meret Napoli Meret 469 26-192 \n",
"3 2814 P Provedel Lazio Provedel 477 29-197 \n",
"4 4312 P Maignan Milan Maignan 467 28-089 \n",
".. ... .. ... ... ... ... ... ... \n",
"534 6395 A Shpendi S. Empoli Shpendi S 387 20-134 \n",
"535 6418 A Burnete Lecce Burnete 59 19-242 \n",
"536 6419 A Corfitzen Lecce Corfitzen -1 0 \n",
"537 6427 A Stewart Salernitana Stewart -1 0 \n",
"538 6434 A Yildiz Juventus Yildiz -1 0 \n",
"\n",
" birth_year games ... gk_pct_goal_kicks_launched \\\n",
"0 1988 0 ... 20.5 \n",
"1 1990 0 ... 50.0 \n",
"2 1997 0 ... 0.0 \n",
"3 1994 0 ... 27.6 \n",
"4 1995 0 ... 60.9 \n",
".. ... ... ... ... \n",
"534 2003 5 ... 0.0 \n",
"535 2004 1 ... 0.0 \n",
"536 0 0 ... 0.0 \n",
"537 0 0 ... 0.0 \n",
"538 0 0 ... 0.0 \n",
"\n",
" gk_goal_kick_length_avg gk_crosses gk_crosses_stopped \\\n",
"0 27.3 59.0 5.0 \n",
"1 45.8 59.0 1.0 \n",
"2 20.5 53.0 1.0 \n",
"3 32.3 63.0 3.0 \n",
"4 47.0 52.0 12.0 \n",
".. ... ... ... \n",
"534 0.0 0.0 0.0 \n",
"535 0.0 0.0 0.0 \n",
"536 0.0 0.0 0.0 \n",
"537 0.0 0.0 0.0 \n",
"538 0.0 0.0 0.0 \n",
"\n",
" gk_crosses_stopped_pct gk_def_actions_outside_pen_area \\\n",
"0 8.5 2.0 \n",
"1 1.7 1.0 \n",
"2 1.9 8.0 \n",
"3 4.8 7.0 \n",
"4 23.1 3.0 \n",
".. ... ... \n",
"534 0.0 0.0 \n",
"535 0.0 0.0 \n",
"536 0.0 0.0 \n",
"537 0.0 0.0 \n",
"538 0.0 0.0 \n",
"\n",
" gk_def_actions_outside_pen_area_per90 gk_avg_distance_def_actions \\\n",
"0 0.33 9.6 \n",
"1 0.25 8.5 \n",
"2 1.33 17.2 \n",
"3 1.17 16.0 \n",
"4 0.75 9.8 \n",
".. ... ... \n",
"534 0.00 0.0 \n",
"535 0.00 0.0 \n",
"536 0.00 0.0 \n",
"537 0.00 0.0 \n",
"538 0.00 0.0 \n",
"\n",
" vote_avg vote_std \n",
"0 5.833333 0.372678 \n",
"1 5.875000 1.138804 \n",
"2 5.833333 0.235702 \n",
"3 6.416667 0.448764 \n",
"4 6.000000 0.000000 \n",
".. ... ... \n",
"534 5.875000 0.216506 \n",
"535 6.211157 0.443859 \n",
"536 5.482051 0.490718 \n",
"537 6.039974 0.448371 \n",
"538 5.601015 0.337620 \n",
"\n",
"[539 rows x 160 columns]"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fc_players = fc_players_newgk\n",
"\n",
"fc_players"
]
},
{
"cell_type": "markdown",
"id": "2b13240e",
"metadata": {},
"source": [
"Save to file."
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "8336c025",
"metadata": {},
"outputs": [],
"source": [
"fc_players.to_excel('mid_outputs/players_stats.xlsx')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}