Files
fantabeto/3_players_dataset_creation.ipynb
T
2022-11-15 20:10:35 +01:00

3502 lines
150 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"id": "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": 2,
"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": 3,
"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>Tammy Abraham</td>\n",
" <td>Roma</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Francesco Acerbi</td>\n",
" <td>Inter</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Yacine Adli</td>\n",
" <td>Milan</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Michel Aebischer</td>\n",
" <td>Bologna</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Felix Afena-Gyan</td>\n",
" <td>Cremonese</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>517</th>\n",
" <td>Wojciech Szczęsny</td>\n",
" <td>Juventus</td>\n",
" </tr>\n",
" <tr>\n",
" <th>518</th>\n",
" <td>Ciprian Tătărușanu</td>\n",
" <td>Milan</td>\n",
" </tr>\n",
" <tr>\n",
" <th>519</th>\n",
" <td>Pietro Terracciano</td>\n",
" <td>Fiorentina</td>\n",
" </tr>\n",
" <tr>\n",
" <th>520</th>\n",
" <td>Guglielmo Vicario</td>\n",
" <td>Empoli</td>\n",
" </tr>\n",
" <tr>\n",
" <th>521</th>\n",
" <td>Jeroen Zoet</td>\n",
" <td>Spezia</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>522 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" player team\n",
"0 Tammy Abraham Roma\n",
"1 Francesco Acerbi Inter\n",
"2 Yacine Adli Milan\n",
"3 Michel Aebischer Bologna\n",
"4 Felix Afena-Gyan Cremonese\n",
".. ... ...\n",
"517 Wojciech Szczęsny Juventus\n",
"518 Ciprian Tătărușanu Milan\n",
"519 Pietro Terracciano Fiorentina\n",
"520 Guglielmo Vicario Empoli\n",
"521 Jeroen Zoet Spezia\n",
"\n",
"[522 rows x 2 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"players = pd.concat( [ outfield_players[['player', 'team']], keeper_players[['player', 'team']] ], axis = 0, ignore_index = True)\n",
"\n",
"players"
]
},
{
"cell_type": "code",
"execution_count": 4,
"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": 5,
"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": 6,
"id": "ffd6091c",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" player surname\n",
"0 Tammy Abraham Abraham\n",
"1 Francesco Acerbi Acerbi\n",
"2 Yacine Adli Adli\n",
"3 Michel Aebischer Aebischer\n",
"4 Felix Afena-Gyan Afena-Gyan\n",
"5 Kevin Agudelo Agudelo\n",
"6 Ola Aina Aina\n",
"7 Emanuel Aiwum Aiwum\n",
"8 Jean-Daniel Akpa-Akpro Akpa-Akpro\n",
"9 Luis Alberto Alberto\n",
"10 Agustín Álvarez Martínez Martinez\n",
"11 Kelvin Amian Amian\n",
"12 Bruno Amione Amione\n",
"13 Bruno Amione Amione\n",
"14 Ethan Ampadu Ampadu\n",
"15 Sofyan Amrabat Amrabat\n",
"16 Felipe Anderson Anderson\n",
"17 Janis Antiste Antiste\n",
"18 Marcos Antônio Antonio\n",
"19 Valentin Antov Antov\n",
"20 Marko Arnautović Arnautovic\n",
"21 Tolgay Arslan Arslan\n",
"22 Arthur Arthur\n",
"23 Santiago Ascacíbar Ascacibar\n",
"24 Kristoffer Askildsen Askildsen\n",
"25 Kristjan Asllani Asllani\n",
"26 Emil Audero Audero\n",
"27 Tommaso Augello Augello\n",
"28 Kaan Ayhan Ayhan\n",
"29 Jaime Báez Baez\n",
"30 Nedim Bajrami Bajrami\n",
"31 Tommaso Baldanzi Baldanzi\n",
"32 Fodé Ballo-Touré Ballo-Toure\n",
"33 Lameck Banda Banda\n",
"34 Filippo Bandinelli Bandinelli\n",
"35 Antonín Barák Barak\n",
"36 Antonín Barák Barak\n",
"37 Andrea Barberis Barberis\n",
"38 Nicolò Barella Barella\n",
"39 Musa Barrow Barrow\n",
"40 Federico Baschirotto Baschirotto\n",
"41 Toma Bašić Basic\n",
"42 Alessandro Bastoni Bastoni\n",
"43 Simone Bastoni Bastoni\n",
"44 Rodrigo Becão Becao\n",
"45 Julius Beck Beck\n",
"46 Raoul Bellanova Bellanova\n",
"47 Andrea Belotti Belotti\n",
"48 Marco Benassi Benassi\n",
"49 Ismaël Bennacer Bennacer\n",
"50 Domenico Berardi Berardi\n",
"51 Bartosz Bereszyński Bereszynski\n",
"52 Beto Beto\n",
"53 Matteo Bianchetti Bianchetti\n",
"54 Jaka Bijol Bijol\n",
"55 Cristiano Biraghi Biraghi\n",
"56 Samuele Birindelli Birindelli\n",
"57 Kristijan Bistrović Bistrovic\n",
"58 Alexis Blin Blin\n",
"59 Jeremie Boga Boga\n",
"60 Emil Bohinen Bohinen\n",
"61 Giacomo Bonaventura Bonaventura\n",
"62 Federico Bonazzoli Bonazzoli\n",
"63 Warren Bondo Bondo\n",
"64 Kevin Bonifazi Bonifazi\n",
"65 Leonardo Bonucci Bonucci\n",
"66 Erik Botheim Botheim\n",
"67 Mehdi Bourabia Bourabia\n",
"68 Edoardo Bove Bove\n",
"69 Domagoj Bradarić Bradaric\n",
"70 Gleison Bremer Bremer\n",
"71 Dylan Bronn Bronn\n",
"72 Marcelo Brozović Brozovic\n",
"73 Cristian Buonaiuto Buonaiuto\n",
"74 Alessandro Buongiorno Buongiorno\n",
"75 Juan Cabal Cabal\n",
"76 Liberato Cacace Cacace\n",
"77 Davide Calabria Calabria\n",
"78 Mattia Caldara Caldara\n",
"79 Luca Caldirola Caldirola\n",
"80 Hakan Çalhanoğlu Calhanoglu\n",
"81 Mohamed Camara Camara\n",
"82 Nicolò Cambiaghi Cambiaghi\n",
"83 Andrea Cambiaso Cambiaso\n",
"84 Matteo Cancellieri Cancellieri\n",
"85 Antonio Candreva Candreva\n",
"86 Gianluca Caprari Caprari\n",
"87 Francesco Caputo Caputo\n",
"88 Andrea Carboni Carboni\n",
"89 Valentin Carboni Carboni\n",
"90 Carlos Carlos\n",
"91 Marco Carnesecchi Carnesecchi\n",
"92 Nicolò Casale Casale\n",
"93 Michele Castagnetti Castagnetti\n",
"94 Danilo Cataldi Cataldi\n",
"95 Federico Ceccherini Ceccherini\n",
"96 Assan Ceesay Ceesay\n",
"97 Emil Ceide Ceide\n",
"98 Zeki Çelik Celik\n",
"99 Federico Chiesa Chiesa\n",
"100 Vlad Chiricheș Chiriches\n",
"101 Daniel Ciofani Ciofani\n",
"102 Patrick Ciurria Ciurria\n",
"103 Omar Colley Colley\n",
"104 Lorenzo Colombo Colombo\n",
"105 Andrea Colpani Colpani\n",
"106 Andrea Consigli Consigli\n",
"107 Andrea Conti Conti\n",
"108 Diego Coppola Coppola\n",
"109 Joaquín Correa Correa\n",
"110 Alessandro Cortinovis Cortinovis\n",
"111 Lassana Coulibaly Coulibaly\n",
"112 Bryan Cristante Cristante\n",
"113 Juan Cuadrado Cuadrado\n",
"114 Marco D'Alessandro DAlessandro\n",
"115 Danilo D'Ambrosio DAmbrosio\n",
"116 Luca D'Andrea DAndrea\n",
"117 Flavius Daniliuc Daniliuc\n",
"118 Danilo Danilo\n",
"119 Matteo Darmian Darmian\n",
"120 Paweł Dawidowicz Dawidowicz\n",
"121 Charles De Ketelaere Ketelaere\n",
"122 Manuel De Luca Luca\n",
"123 Mattia De Sciglio Sciglio\n",
"124 Lorenzo De Silvestri Silvestri\n",
"125 Koni De Winter Winter\n",
"126 Grégoire Defrel Defrel\n",
"127 Duccio Degli Innocenti Innocenti\n",
"128 Merih Demiral Demiral\n",
"129 Diego Demme Demme\n",
"130 Fabio Depaoli Depaoli\n",
"131 Fabio Depaoli Depaoli\n",
"132 Kastriot Dermaku Dermaku\n",
"133 Cyriel Dessers Dessers\n",
"134 Sergiño Dest Dest\n",
"135 Mattia Destro Destro\n",
"136 Gerard Deulofeu Deulofeu\n",
"137 Samuel Di Carmine Carmine\n",
"138 Federico Di Francesco Francesco\n",
"139 Michele Di Gregorio Gregorio\n",
"140 Giovanni Di Lorenzo Lorenzo\n",
"141 Ángel Di María Maria\n",
"142 Boulaye Dia Dia\n",
"143 Brahim Díaz Diaz\n",
"144 Federico Dimarco Dimarco\n",
"145 Koffi Djidji Djidji\n",
"146 Berat Djimsiti Djimsiti\n",
"147 Dodô Dodo\n",
"148 Josh Doig Doig\n",
"149 Nicolás Domínguez Dominguez\n",
"150 Giulio Donati Donati\n",
"151 Bartłomiej Drągowski Dragowski\n",
"152 Denzel Dumfries Dumfries\n",
"153 Alfred Duncan Duncan\n",
"154 Paulo Dybala Dybala\n",
"155 Edin Džeko Dzeko\n",
"156 Festy Ebosele Ebosele\n",
"157 Enzo Ebosse Ebosse\n",
"158 Tyronne Ebuehi Ebuehi\n",
"159 Éderson Ederson\n",
"160 Kingsley Ehizibue Ehizibue\n",
"161 Albin Ekdal Ekdal\n",
"162 Emmanuel Ekong Ekong\n",
"163 Mikael Ellertsson Ellertsson\n",
"164 Elif Elmas Elmas\n",
"165 Martin Erlic Erlic\n",
"166 Gonzalo Escalante Escalante\n",
"167 Nicolò Fagioli Fagioli\n",
"168 Wladimiro Falcone Falcone\n",
"169 Davide Faraoni Faraoni\n",
"170 Federico Fazio Fazio\n",
"171 Jacopo Fazzini Fazzini\n",
"172 Lewis Ferguson Ferguson\n",
"173 Alex Ferrari Ferrari\n",
"174 Alessandro Florenzi Florenzi\n",
"175 Davide Frattesi Frattesi\n",
"176 Matteo Gabbia Gabbia\n",
"177 Manolo Gabbiadini Gabbiadini\n",
"178 Gianluca Gaetano Gaetano\n",
"179 Roberto Gagliardini Gagliardini\n",
"180 Antonino Gallo Gallo\n",
"181 Federico Gatti Gatti\n",
"182 Valentin Gendrey Gendrey\n",
"183 Paolo Ghiglione Ghiglione\n",
"184 Mario Gila Gila\n",
"185 Olivier Giroud Giroud\n",
"186 Pierluigi Gollini Gollini\n",
"187 Joan Gonzàlez Gonzalez\n",
"188 Nicolás González Gonzalez\n",
"189 Robin Gosens Gosens\n",
"190 Alberto Grassi Grassi\n",
"191 Koray Günter Gunter\n",
"192 Emmanuel Gyasi Gyasi\n",
"193 Norbert Gyömbér Gyomber\n",
"194 Christian Gytkjær Gytkjr\n",
"195 Nicolas Haas Haas\n",
"196 Samir Handanović Handanovic\n",
"197 Abdou Harroui Harroui\n",
"198 Hans Hateboer Hateboer\n",
"199 Liam Henderson Henderson\n",
"200 Jack Hendry Hendry\n",
"201 Matheus Henrique Henrique\n",
"202 Thomas Henry Henry\n",
"203 Theo Hernández Hernandez\n",
"204 Isak Hien Hien\n",
"205 Morten Hjulmand Hjulmand\n",
"206 Emil Holm Holm\n",
"207 Martin Hongla Hongla\n",
"208 Petko Hristov Hristov\n",
"209 Ajdin Hrustic Hrustic\n",
"210 Elseid Hysaj Hysaj\n",
"211 Rasmus Højlund Hjlund\n",
"212 Roger Ibanez Ibanez\n",
"213 Igor Igor\n",
"214 Jonathan Ikone Ikone\n",
"215 Ivan Ilić Ilic\n",
"216 Samuel Iling-Junior Iling-Junior\n",
"217 Emirhan İlkhan Ilkhan\n",
"218 Ciro Immobile Immobile\n",
"219 Ardian Ismajli Ismajli\n",
"220 Armando Izzo Izzo\n",
"221 Mato Jajalo Jajalo\n",
"222 Juan Jesus Jesus\n",
"223 Þórir Jóhann Helgason Helgason\n",
"224 Luka Jović Jovic\n",
"225 Hamed Junior Traorè Traore\n",
"226 Yayah Kallon Kallon\n",
"227 Pierre Kalulu Kalulu\n",
"228 Yann Karamoh Karamoh\n",
"229 Rick Karsdorp Karsdorp\n",
"230 Denso Kasius Kasius\n",
"231 Grigoris Kastanos Kastanos\n",
"232 Moise Kean Kean\n",
"233 Jakub Kiwior Kiwior\n",
"234 Simon Kjær Kjr\n",
"235 Teun Koopmeiners Koopmeiners\n",
"236 Filip Kostić Kostic\n",
"237 Christian Kouamé Kouame\n",
"238 Viktor Kovalenko Kovalenko\n",
"239 Julian Kristoffersen Kristoffersen\n",
"240 Rade Krunić Krunic\n",
"241 Marash Kumbulla Kumbulla\n",
"242 Khvicha Kvaratskhelia Kvaratskhelia\n",
"243 Giorgos Kyriakopoulos Kyriakopoulos\n",
"244 Sam Lammers Lammers\n",
"245 Kevin Lasagna Lasagna\n",
"246 Armand Lauriente Lauriente\n",
"247 Valentino Lazaro Lazaro\n",
"248 Marko Lazetić Lazetic\n",
"249 Darko Lazović Lazovic\n",
"250 Manuel Lazzari Lazzari\n",
"251 Rafael Leão Leao\n",
"252 Mehdi Léris Leris\n",
"253 Karol Linetty Linetty\n",
"254 Marcin Listkowski Listkowski\n",
"255 Stanislav Lobotka Lobotka\n",
"256 Manuel Locatelli Locatelli\n",
"257 Luka Lochoshvili Lochoshvili\n",
"258 Ademola Lookman Lookman\n",
"259 Maxime Lopez Lopez\n",
"260 Matteo Lovato Lovato\n",
"261 Sandi Lovrić Lovric\n",
"262 Hirving Lozano Lozano\n",
"263 Jhon Lucumí Lucumi\n",
"264 José Luis Palomino Palomino\n",
"265 Romelu Lukaku Lukaku\n",
"266 Saša Lukić Lukic\n",
"267 Sebastiano Luperto Luperto\n",
"268 Charalambos Lykogiannis Lykogiannis\n",
"269 Giulio Maggiore Maggiore\n",
"270 Giangiacomo Magnani Magnani\n",
"271 Mike Maignan Maignan\n",
"272 Jean-Victor Makengo Makengo\n",
"273 Daniel Maldini Maldini\n",
"274 Youssef Maleh Maleh\n",
"275 Ruslan Malinovskyi Malinovskyi\n",
"276 Gianluca Mancini Mancini\n",
"277 Rolando Mandragora Mandragora\n",
"278 Riccardo Marchizza Marchizza\n",
"279 Gian Marco Ferrari Ferrari\n",
"280 Pablo Marí Mari\n",
"281 Răzvan Marin Marin\n",
"282 Marlon Marlon\n",
"283 Luca Marrone Marrone\n",
"284 Lautaro Martínez Martinez\n",
"285 Lucas Martínez Quarta Quarta\n",
"286 Adam Marušić Marusic\n",
"287 Adam Masina Masina\n",
"288 Nemanja Matić Matic\n",
"289 Luís Maximiano Maximiano\n",
"290 Pasquale Mazzocchi Mazzocchi\n",
"291 Weston McKennie McKennie\n",
"292 Gary Medel Medel\n",
"293 Soualiho Meïté Meite\n",
"294 Alex Meret Meret\n",
"295 Yıldırım Mert Çetin Cetin\n",
"296 Junior Messias Messias\n",
"297 Tommaso Milanese Milanese\n",
"298 Nikola Milenković Milenkovic\n",
"299 Arkadiusz Milik Milik\n",
"300 Sergej Milinković-Savić Milinkovic-Savic\n",
"301 Vanja Milinković-Savić Milinkovic-Savic\n",
"302 Kim Min-jae Min-jae\n",
"303 Aleksei Miranchuk Miranchuk\n",
"304 Fabio Miretti Miretti\n",
"305 Henrikh Mkhitaryan Mkhitaryan\n",
"306 Salvatore Molina Molina\n",
"307 Daniele Montevago Montevago\n",
"308 Lorenzo Montipò Montipo\n",
"309 Nikola Moro Moro\n",
"310 Dany Mota Mota\n",
"311 Mert Müldür Muldur\n",
"312 Luis Muriel Muriel\n",
"313 Jeison Murillo Murillo\n",
"314 Nicola Murru Murru\n",
"315 Juan Musso Musso\n",
"316 Joakim Mæhle Mhle\n",
"317 Michel Ndary Adopo Adopo\n",
"318 Tanguy Ndombele Ndombele\n",
"319 Ilija Nestorovski Nestorovski\n",
"320 Dimitris Nikolaou Nikolaou\n",
"321 Bram Nuytinck Nuytinck\n",
"322 M'Bala Nzola Nzola\n",
"323 Pedro Obiang Obiang\n",
"324 David Okereke Okereke\n",
"325 Caleb Okoli Okoli\n",
"326 Mathías Olivera Olivera\n",
"327 André Onana Onana\n",
"328 Divock Origi Origi\n",
"329 Riccardo Orsolini Orsolini\n",
"330 Victor Osimhen Osimhen\n",
"331 Remi Oudin Oudin\n",
"332 Adam Ounas Ounas\n",
"333 Leandro Paredes Paredes\n",
"334 Fabiano Parisi Parisi\n",
"335 Mario Pašalić Pasalic\n",
"336 Patric Patric\n",
"337 Rui Patrício Patricio\n",
"338 Pedro Pedro\n",
"339 Pietro Pellegri Pellegri\n",
"340 Lorenzo Pellegrini Pellegrini\n",
"341 Pepín Pepin\n",
"342 Roberto Pereyra Pereyra\n",
"343 Nehuén Pérez Perez\n",
"344 Mattia Perin Perin\n",
"345 Matteo Pessina Pessina\n",
"346 Andrea Petagna Petagna\n",
"347 Giuseppe Pezzella Pezzella\n",
"348 Krzysztof Piątek Piatek\n",
"349 Roberto Piccoli Piccoli\n",
"350 Charles Pickel Pickel\n",
"351 Andrea Pinamonti Pinamonti\n",
"352 Lorenzo Pirola Pirola\n",
"353 Marko Pjaca Pjaca\n",
"354 Tommaso Pobega Pobega\n",
"355 Matteo Politano Politano\n",
"356 Marin Pongračić Pongracic\n",
"357 Stefan Posch Posch\n",
"358 Ivan Provedel Provedel\n",
"359 Ignacio Pussetto Pussetto\n",
"360 Fabio Quagliarella Quagliarella\n",
"361 Giacomo Quagliata Quagliata\n",
"362 Adrien Rabiot Rabiot\n",
"363 Nemanja Radonjić Radonjic\n",
"364 Ivan Radovanović Radovanovic\n",
"365 Ionuț Radu Radu\n",
"366 Luca Ranieri Ranieri\n",
"367 Andrea Ranocchia Ranocchia\n",
"368 Filippo Ranocchia Ranocchia\n",
"369 Giacomo Raspadori Raspadori\n",
"370 Giacomo Raspadori Raspadori\n",
"371 Ante Rebić Rebic\n",
"372 Arkadiusz Reca Reca\n",
"373 Panagiotis Retsos Retsos\n",
"374 Franck Ribéry Ribery\n",
"375 Samuele Ricci Ricci\n",
"376 Tomás Rincón Rincon\n",
"377 Pablo Rodríguez Rodriguez\n",
"378 Ricardo Rodríguez Rodriguez\n",
"379 Rogério Rogerio\n",
"380 Alessio Romagnoli Romagnoli\n",
"381 Luka Romero Romero\n",
"382 Marten de Roon Roon\n",
"383 Nicolò Rovella Rovella\n",
"384 Nicolò Rovella Rovella\n",
"385 Amir Rrahmani Rrahmani\n",
"386 Ruan Ruan\n",
"387 Daniele Rugani Rugani\n",
"388 Matteo Ruggeri Ruggeri\n",
"389 Mário Rui Rui\n",
"390 Abdelhamid Sabiri Sabiri\n",
"391 Alexis Saelemaekers Saelemaekers\n",
"392 Jacopo Sala Sala\n",
"393 Lazar Samardzic Samardzic\n",
"394 Junior Sambia Sambia\n",
"395 Antonio Sanabria Sanabria\n",
"396 Leandro Sanca Sanca\n",
"397 Alex Sandro Sandro\n",
"398 Nicola Sansone Sansone\n",
"399 Riccardo Saponara Saponara\n",
"400 Martin Satriano Satriano\n",
"401 Giorgio Scalvini Scalvini\n",
"402 Jerdy Schouten Schouten\n",
"403 Perr Schuurs Schuurs\n",
"404 Demba Seck Seck\n",
"405 Jacopo Segre Segre\n",
"406 Stefano Sensi Sensi\n",
"407 Luigi Sepe Sepe\n",
"408 Leonardo Sernicola Sernicola\n",
"409 Stephan El Shaarawy Shaarawy\n",
"410 Eldor Shomurodov Shomurodov\n",
"411 Marco Silvestri Silvestri\n",
"412 Giovanni Simeone Simeone\n",
"413 Wilfried Singo Singo\n",
"414 Leo Skiri Østigård stigard\n",
"415 Łukasz Skorupski Skorupski\n",
"416 Milan Škriniar Skriniar\n",
"417 Chris Smalling Smalling\n",
"418 Brandon Soppy Soppy\n",
"419 Brandon Soppy Soppy\n",
"420 Roberto Soriano Soriano\n",
"421 Joaquin Sosa Sosa\n",
"422 Riccardo Sottil Sottil\n",
"423 Matìas Soulé Soule\n",
"424 Adama Soumaoro Soumaoro\n",
"425 Leonardo Spinazzola Spinazzola\n",
"426 Marco Sportiello Sportiello\n",
"427 Petar Stojanović Stojanovic\n",
"428 Gabriel Strefezza Strefezza\n",
"429 Dávid Strelec Strelec\n",
"430 Isaac Success Success\n",
"431 Ibrahim Sulemana Sulemana\n",
"432 Wojciech Szczęsny Szczesny\n",
"433 Benjamin Tahirovic Tahirovic\n",
"434 Adrien Tameze Tameze\n",
"435 Ciprian Tătărușanu Tatarusanu\n",
"436 Filippo Terracciano Terracciano\n",
"437 Pietro Terracciano Terracciano\n",
"438 Aleksa Terzić Terzic\n",
"439 Malick Thiaw Thiaw\n",
"440 Kristian Thorstvedt Thorstvedt\n",
"441 Jeremy Toljan Toljan\n",
"442 Rafael Tolói Toloi\n",
"443 Fikayo Tomori Tomori\n",
"444 Sandro Tonali Tonali\n",
"445 Frank Tsadjout Tsadjout\n",
"446 Alessandro Tuia Tuia\n",
"447 Iyenoma Udogie Udogie\n",
"448 Samuel Umtiti Umtiti\n",
"449 Diego Valencia Valencia\n",
"450 Emanuele Valeri Valeri\n",
"451 Mattia Valoti Valoti\n",
"452 Johan Vásquez Vasquez\n",
"453 Matías Vecino Vecino\n",
"454 Miguel Veloso Veloso\n",
"455 Lorenzo Venuti Venuti\n",
"456 Daniele Verde Verde\n",
"457 Simone Verdi Verdi\n",
"458 Valerio Verre Verre\n",
"459 Guglielmo Vicario Vicario\n",
"460 Ronaldo Vieira Vieira\n",
"461 Emanuel Vignato Vignato\n",
"462 Samuele Vignato Vignato\n",
"463 Tonny Vilhena Vilhena\n",
"464 Gonzalo Villar Villar\n",
"465 Matías Viña Vina\n",
"466 Dušan Vlahović Vlahovic\n",
"467 Nikola Vlašić Vlasic\n",
"468 Mërgim Vojvoda Vojvoda\n",
"469 Cristian Volpato Volpato\n",
"470 Aster Vranckx Vranckx\n",
"471 Stefan de Vrij Vrij\n",
"472 Walace Walace\n",
"473 Sebastian Walukiewicz Walukiewicz\n",
"474 Georginio Wijnaldum Wijnaldum\n",
"475 Gerard Yepes Yepes\n",
"476 Mattia Zaccagni Zaccagni\n",
"477 Denis Zakaria Zakaria\n",
"478 Nicola Zalewski Zalewski\n",
"479 Andre-Frank Zambo Anguissa Anguissa\n",
"480 Luca Zanimacchia Zanimacchia\n",
"481 Nicolò Zaniolo Zaniolo\n",
"482 Alessandro Zanoli Zanoli\n",
"483 Duván Zapata Zapata\n",
"484 Davide Zappacosta Zappacosta\n",
"485 Alessio Zerbin Zerbin\n",
"486 Piotr Zieliński Zielinski\n",
"487 David Zima Zima\n",
"488 Joshua Zirkzee Zirkzee\n",
"489 Jeroen Zoet Zoet\n",
"490 Nadir Zortea Zortea\n",
"491 Szymon Żurkowski Zurkowski\n",
"492 Milan Đurić uric\n",
"493 Filip Đuričić uricic\n",
"494 Emil Audero Audero\n",
"495 Marco Carnesecchi Carnesecchi\n",
"496 Andrea Consigli Consigli\n",
"497 Michele Di Gregorio Gregorio\n",
"498 Bartłomiej Drągowski Dragowski\n",
"499 Wladimiro Falcone Falcone\n",
"500 Pierluigi Gollini Gollini\n",
"501 Samir Handanović Handanovic\n",
"502 Mike Maignan Maignan\n",
"503 Luís Maximiano Maximiano\n",
"504 Alex Meret Meret\n",
"505 Vanja Milinković-Savić Milinkovic-Savic\n",
"506 Lorenzo Montipò Montipo\n",
"507 Juan Musso Musso\n",
"508 André Onana Onana\n",
"509 Rui Patrício Patricio\n",
"510 Mattia Perin Perin\n",
"511 Ivan Provedel Provedel\n",
"512 Ionuț Radu Radu\n",
"513 Luigi Sepe Sepe\n",
"514 Marco Silvestri Silvestri\n",
"515 Łukasz Skorupski Skorupski\n",
"516 Marco Sportiello Sportiello\n",
"517 Wojciech Szczęsny Szczesny\n",
"518 Ciprian Tătărușanu Tatarusanu\n",
"519 Pietro Terracciano Terracciano\n",
"520 Guglielmo Vicario Vicario\n",
"521 Jeroen Zoet Zoet\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": 7,
"id": "3e759b1b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Ostigard\n",
"Kim\n",
"Hojlund\n",
"Gytkjaer\n",
"Augusto\n",
"Maehle\n",
"Kjaer\n",
"Djuricic\n",
"Djuric\n",
"Cabral\n",
"Alvarez\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>Monza</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",
" </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 Monza\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"
]
},
"execution_count": 7,
"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": 8,
"id": "f96eaaa1",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2263921821.py:17: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" fc_players['surname'][i] = spl[-1]\n",
"C:\\Users\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2263921821.py:18: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" fc_players['initial'][i] = ''\n",
"C:\\Users\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2263921821.py:14: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" fc_players['surname'][i] = spl[-2]\n",
"C:\\Users\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2263921821.py:15: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" fc_players['initial'][i] = spl[-1][0]\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>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>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>1</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>2</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>3</th>\n",
" <td>2211</td>\n",
" <td>P</td>\n",
" <td>Silvestri</td>\n",
" <td>Udinese</td>\n",
" <td>Silvestri</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>159</td>\n",
" <td>P</td>\n",
" <td>Sepe</td>\n",
" <td>Salernitana</td>\n",
" <td>Sepe</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>549</th>\n",
" <td>5512</td>\n",
" <td>A</td>\n",
" <td>De Luca</td>\n",
" <td>Sampdoria</td>\n",
" <td>Luca</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>550</th>\n",
" <td>5734</td>\n",
" <td>A</td>\n",
" <td>Soule'</td>\n",
" <td>Juventus</td>\n",
" <td>Soule</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>551</th>\n",
" <td>5785</td>\n",
" <td>A</td>\n",
" <td>Lazetic</td>\n",
" <td>Milan</td>\n",
" <td>Lazetic</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>552</th>\n",
" <td>5837</td>\n",
" <td>A</td>\n",
" <td>Voelkerling Persson</td>\n",
" <td>Lecce</td>\n",
" <td>Persson</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>553</th>\n",
" <td>6063</td>\n",
" <td>A</td>\n",
" <td>Sanca</td>\n",
" <td>Spezia</td>\n",
" <td>Sanca</td>\n",
" <td></td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>554 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" id r name team surname initial\n",
"0 572 P Meret Napoli Meret \n",
"1 2814 P Provedel Lazio Provedel \n",
"2 4312 P Maignan Milan Maignan \n",
"3 2211 P Silvestri Udinese Silvestri \n",
"4 159 P Sepe Salernitana Sepe \n",
".. ... .. ... ... ... ...\n",
"549 5512 A De Luca Sampdoria Luca \n",
"550 5734 A Soule' Juventus Soule \n",
"551 5785 A Lazetic Milan Lazetic \n",
"552 5837 A Voelkerling Persson Lecce Persson \n",
"553 6063 A Sanca Spezia Sanca \n",
"\n",
"[554 rows x 6 columns]"
]
},
"execution_count": 8,
"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['surname'][i] = spl[-2]\n",
" fc_players['initial'][i] = spl[-1][0]\n",
" else:\n",
" fc_players['surname'][i] = spl[-1]\n",
" fc_players['initial'][i] = ''\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": 9,
"id": "9c50e4b5",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\1456862974.py:4: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" fc_players['fb_ID'][i] = -1\n",
"C:\\Users\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\1456862974.py:10: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" fc_players['fb_ID'][i] = j\n"
]
}
],
"source": [
"fc_players['fb_ID'] = fc_players['id']\n",
"\n",
"for i in range(fc_players.shape[0]):\n",
" fc_players['fb_ID'][i] = -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",
" fc_players['fb_ID'][i] = 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. \n",
"\n",
"Others are ones for which the FBRef surname doesn't correspond to Fantacalcio one.\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": 10,
"id": "5a3e2771",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Berisha\n",
"Cragno\n",
"Mirante\n",
"Sarr M.\n",
"Lamanna\n",
"Ujkani\n",
"Pegolo\n",
"Perilli\n",
"Padelli\n",
"Perisan\n",
"Bardi\n",
"Cordaz\n",
"Pinsoglio\n",
"Fiorillo\n",
"Sirigu\n",
"Cerofolini\n",
"Rossi F.\n",
"Contini\n",
"Brancolini\n",
"Bleve\n",
"Berardi A.\n",
"Russo A.\n",
"Gemello\n",
"Ravaglia\n",
"Boer\n",
"Adamonis\n",
"Marfella\n",
"Zovko\n",
"Piana\n",
"Bagnolini\n",
"Svilar\n",
"Sorrentino A.\n",
"Ciezkowski\n",
"Micai\n",
"Chiesa M.\n",
"Saro\n",
"Aiwu\n",
"Tonelli\n",
"Radu\n",
"Paletta\n",
"Fares\n",
"Romagna\n",
"Ferrer\n",
"Amey\n",
"Ferrarini\n",
"Kamenovic\n",
"Zanotti\n",
"Motoc\n",
"Bayeye\n",
"Buta\n",
"Ndiaye\n",
"Abankwah\n",
"Guessand A.\n",
"Guarino\n",
"Pogba\n",
"Winks\n",
"Castrovilli\n",
"Capezzi\n",
"Machin\n",
"Bakayoko\n",
"Scozzarella\n",
"Akpa Akpro\n",
"Darboe\n",
"Urbanski\n",
"Bertini\n",
"Bianco\n",
"Sher\n",
"Nguiamba\n",
"Praszelik\n",
"Trimboli\n",
"Pafundi\n",
"Bjorkengren\n",
"Samek\n",
"Acella\n",
"Tripi\n",
"Garbett\n",
"Ibrahimovic\n",
"Edera\n",
"Oddei\n",
"Raimondo\n",
"Kaio Jorge\n",
"Voelkerling Persson\n"
]
}
],
"source": [
"for i in range(fc_players.shape[0]):\n",
" if(fc_players['fb_ID'][i] == -1):\n",
" print(fc_players['name'][i])"
]
},
{
"cell_type": "code",
"execution_count": 11,
"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>572</td>\n",
" <td>P</td>\n",
" <td>Meret</td>\n",
" <td>Napoli</td>\n",
" <td>Meret</td>\n",
" <td></td>\n",
" <td>504</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</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>511</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</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>502</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2211</td>\n",
" <td>P</td>\n",
" <td>Silvestri</td>\n",
" <td>Udinese</td>\n",
" <td>Silvestri</td>\n",
" <td></td>\n",
" <td>514</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>159</td>\n",
" <td>P</td>\n",
" <td>Sepe</td>\n",
" <td>Salernitana</td>\n",
" <td>Sepe</td>\n",
" <td></td>\n",
" <td>513</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>549</th>\n",
" <td>5512</td>\n",
" <td>A</td>\n",
" <td>De Luca</td>\n",
" <td>Sampdoria</td>\n",
" <td>Luca</td>\n",
" <td></td>\n",
" <td>122</td>\n",
" </tr>\n",
" <tr>\n",
" <th>550</th>\n",
" <td>5734</td>\n",
" <td>A</td>\n",
" <td>Soule'</td>\n",
" <td>Juventus</td>\n",
" <td>Soule</td>\n",
" <td></td>\n",
" <td>423</td>\n",
" </tr>\n",
" <tr>\n",
" <th>551</th>\n",
" <td>5785</td>\n",
" <td>A</td>\n",
" <td>Lazetic</td>\n",
" <td>Milan</td>\n",
" <td>Lazetic</td>\n",
" <td></td>\n",
" <td>248</td>\n",
" </tr>\n",
" <tr>\n",
" <th>552</th>\n",
" <td>5837</td>\n",
" <td>A</td>\n",
" <td>Voelkerling Persson</td>\n",
" <td>Lecce</td>\n",
" <td>Persson</td>\n",
" <td></td>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>553</th>\n",
" <td>6063</td>\n",
" <td>A</td>\n",
" <td>Sanca</td>\n",
" <td>Spezia</td>\n",
" <td>Sanca</td>\n",
" <td></td>\n",
" <td>396</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>554 rows × 7 columns</p>\n",
"</div>"
],
"text/plain": [
" id r name team surname initial fb_ID\n",
"0 572 P Meret Napoli Meret 504\n",
"1 2814 P Provedel Lazio Provedel 511\n",
"2 4312 P Maignan Milan Maignan 502\n",
"3 2211 P Silvestri Udinese Silvestri 514\n",
"4 159 P Sepe Salernitana Sepe 513\n",
".. ... .. ... ... ... ... ...\n",
"549 5512 A De Luca Sampdoria Luca 122\n",
"550 5734 A Soule' Juventus Soule 423\n",
"551 5785 A Lazetic Milan Lazetic 248\n",
"552 5837 A Voelkerling Persson Lecce Persson -1\n",
"553 6063 A Sanca Spezia Sanca 396\n",
"\n",
"[554 rows x 7 columns]"
]
},
"execution_count": 11,
"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": 12,
"id": "1d73a312",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\2261782218.py:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" fc_players[columns_to_copy[j]][i] = outfield_players[columns_to_copy[j]][fc_players['fb_ID'][i]]\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",
" "
]
},
{
"cell_type": "code",
"execution_count": 13,
"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": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"keeper_players.columns[4:]"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "eb9127a9",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.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\\Peppe\\AppData\\Local\\Temp\\ipykernel_4560\\3664433845.py:11: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" fc_players[columns_to_copy[j]][i] = keeper_players[columns_to_copy[j]][fc_players['fb_ID'][i] - delta_k]\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]"
]
},
{
"cell_type": "code",
"execution_count": 15,
"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>572</td>\n",
" <td>P</td>\n",
" <td>Meret</td>\n",
" <td>Napoli</td>\n",
" <td>Meret</td>\n",
" <td></td>\n",
" <td>504</td>\n",
" <td>25-238</td>\n",
" <td>1997</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>26.9</td>\n",
" <td>95</td>\n",
" <td>20.0</td>\n",
" <td>26.6</td>\n",
" <td>154</td>\n",
" <td>6</td>\n",
" <td>3.9</td>\n",
" <td>18</td>\n",
" <td>1.20</td>\n",
" <td>16.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</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>511</td>\n",
" <td>28-243</td>\n",
" <td>1994</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>32.7</td>\n",
" <td>95</td>\n",
" <td>36.8</td>\n",
" <td>36.3</td>\n",
" <td>212</td>\n",
" <td>5</td>\n",
" <td>2.4</td>\n",
" <td>30</td>\n",
" <td>2.01</td>\n",
" <td>17.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</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>502</td>\n",
" <td>27-135</td>\n",
" <td>1995</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>33.5</td>\n",
" <td>18</td>\n",
" <td>38.9</td>\n",
" <td>40.4</td>\n",
" <td>65</td>\n",
" <td>5</td>\n",
" <td>7.7</td>\n",
" <td>6</td>\n",
" <td>0.86</td>\n",
" <td>12.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2211</td>\n",
" <td>P</td>\n",
" <td>Silvestri</td>\n",
" <td>Udinese</td>\n",
" <td>Silvestri</td>\n",
" <td></td>\n",
" <td>514</td>\n",
" <td>31-258</td>\n",
" <td>1991</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>34.1</td>\n",
" <td>116</td>\n",
" <td>38.8</td>\n",
" <td>36.9</td>\n",
" <td>205</td>\n",
" <td>4</td>\n",
" <td>2.0</td>\n",
" <td>5</td>\n",
" <td>0.33</td>\n",
" <td>11.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>159</td>\n",
" <td>P</td>\n",
" <td>Sepe</td>\n",
" <td>Salernitana</td>\n",
" <td>Sepe</td>\n",
" <td></td>\n",
" <td>513</td>\n",
" <td>31-191</td>\n",
" <td>1991</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>36.1</td>\n",
" <td>134</td>\n",
" <td>46.3</td>\n",
" <td>40.6</td>\n",
" <td>199</td>\n",
" <td>15</td>\n",
" <td>7.5</td>\n",
" <td>11</td>\n",
" <td>0.73</td>\n",
" <td>14.2</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>549</th>\n",
" <td>5512</td>\n",
" <td>A</td>\n",
" <td>De Luca</td>\n",
" <td>Sampdoria</td>\n",
" <td>Luca</td>\n",
" <td></td>\n",
" <td>122</td>\n",
" <td>24-121</td>\n",
" <td>1998</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>550</th>\n",
" <td>5734</td>\n",
" <td>A</td>\n",
" <td>Soule'</td>\n",
" <td>Juventus</td>\n",
" <td>Soule</td>\n",
" <td></td>\n",
" <td>423</td>\n",
" <td>19-214</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>551</th>\n",
" <td>5785</td>\n",
" <td>A</td>\n",
" <td>Lazetic</td>\n",
" <td>Milan</td>\n",
" <td>Lazetic</td>\n",
" <td></td>\n",
" <td>248</td>\n",
" <td>18-297</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>552</th>\n",
" <td>5837</td>\n",
" <td>A</td>\n",
" <td>Voelkerling Persson</td>\n",
" <td>Lecce</td>\n",
" <td>Persson</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>553</th>\n",
" <td>6063</td>\n",
" <td>A</td>\n",
" <td>Sanca</td>\n",
" <td>Spezia</td>\n",
" <td>Sanca</td>\n",
" <td></td>\n",
" <td>396</td>\n",
" <td>22-315</td>\n",
" <td>2000</td>\n",
" <td>3</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>554 rows × 163 columns</p>\n",
"</div>"
],
"text/plain": [
" id r name team surname initial fb_ID \\\n",
"0 572 P Meret Napoli Meret 504 \n",
"1 2814 P Provedel Lazio Provedel 511 \n",
"2 4312 P Maignan Milan Maignan 502 \n",
"3 2211 P Silvestri Udinese Silvestri 514 \n",
"4 159 P Sepe Salernitana Sepe 513 \n",
".. ... .. ... ... ... ... ... \n",
"549 5512 A De Luca Sampdoria Luca 122 \n",
"550 5734 A Soule' Juventus Soule 423 \n",
"551 5785 A Lazetic Milan Lazetic 248 \n",
"552 5837 A Voelkerling Persson Lecce Persson -1 \n",
"553 6063 A Sanca Spezia Sanca 396 \n",
"\n",
" age birth_year games ... gk_passes_length_avg gk_goal_kicks \\\n",
"0 25-238 1997 0 ... 26.9 95 \n",
"1 28-243 1994 0 ... 32.7 95 \n",
"2 27-135 1995 0 ... 33.5 18 \n",
"3 31-258 1991 0 ... 34.1 116 \n",
"4 31-191 1991 0 ... 36.1 134 \n",
".. ... ... ... ... ... ... \n",
"549 24-121 1998 1 ... 0.0 0 \n",
"550 19-214 2003 5 ... 0.0 0 \n",
"551 18-297 2004 1 ... 0.0 0 \n",
"552 0 0 0 ... 0.0 0 \n",
"553 22-315 2000 3 ... 0.0 0 \n",
"\n",
" gk_pct_goal_kicks_launched gk_goal_kick_length_avg gk_crosses \\\n",
"0 20.0 26.6 154 \n",
"1 36.8 36.3 212 \n",
"2 38.9 40.4 65 \n",
"3 38.8 36.9 205 \n",
"4 46.3 40.6 199 \n",
".. ... ... ... \n",
"549 0.0 0.0 0 \n",
"550 0.0 0.0 0 \n",
"551 0.0 0.0 0 \n",
"552 0.0 0.0 0 \n",
"553 0.0 0.0 0 \n",
"\n",
" gk_crosses_stopped gk_crosses_stopped_pct \\\n",
"0 6 3.9 \n",
"1 5 2.4 \n",
"2 5 7.7 \n",
"3 4 2.0 \n",
"4 15 7.5 \n",
".. ... ... \n",
"549 0 0.0 \n",
"550 0 0.0 \n",
"551 0 0.0 \n",
"552 0 0.0 \n",
"553 0 0.0 \n",
"\n",
" gk_def_actions_outside_pen_area gk_def_actions_outside_pen_area_per90 \\\n",
"0 18 1.20 \n",
"1 30 2.01 \n",
"2 6 0.86 \n",
"3 5 0.33 \n",
"4 11 0.73 \n",
".. ... ... \n",
"549 0 0.00 \n",
"550 0 0.00 \n",
"551 0 0.00 \n",
"552 0 0.00 \n",
"553 0 0.00 \n",
"\n",
" gk_avg_distance_def_actions \n",
"0 16.9 \n",
"1 17.8 \n",
"2 12.9 \n",
"3 11.3 \n",
"4 14.2 \n",
".. ... \n",
"549 0.0 \n",
"550 0.0 \n",
"551 0.0 \n",
"552 0.0 \n",
"553 0.0 \n",
"\n",
"[554 rows x 163 columns]"
]
},
"execution_count": 15,
"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": 19,
"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": 17,
"id": "61fac91a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"vote_avg 6.214464\n",
"vote_std 0.438749\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>6.214286</td>\n",
" <td>0.557875</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>6.321429</td>\n",
" <td>0.305143</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>6.357143</td>\n",
" <td>0.440315</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>6.321429</td>\n",
" <td>0.485767</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>6.428571</td>\n",
" <td>0.371154</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>6.125000</td>\n",
" <td>0.216506</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>6.142857</td>\n",
" <td>0.349927</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>6.428571</td>\n",
" <td>0.371154</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>6.187500</td>\n",
" <td>0.347985</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>6.428571</td>\n",
" <td>0.416497</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>6.000000</td>\n",
" <td>0.500000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>6.178571</td>\n",
" <td>0.358924</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>6.321429</td>\n",
" <td>0.485767</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>6.214286</td>\n",
" <td>0.489690</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>6.166667</td>\n",
" <td>0.471405</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>6.035714</td>\n",
" <td>0.480487</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>6.250000</td>\n",
" <td>0.590097</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>6.428571</td>\n",
" <td>0.562429</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>6.062500</td>\n",
" <td>0.526634</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>6.071429</td>\n",
" <td>0.174964</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>6.153846</td>\n",
" <td>0.455083</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>6.045455</td>\n",
" <td>0.396264</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>6.111111</td>\n",
" <td>0.566558</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>6.166667</td>\n",
" <td>0.235702</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>6.200000</td>\n",
" <td>0.812404</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" vote_avg vote_std\n",
"0 6.214286 0.557875\n",
"1 6.321429 0.305143\n",
"2 6.357143 0.440315\n",
"3 6.321429 0.485767\n",
"4 6.428571 0.371154\n",
"5 6.125000 0.216506\n",
"6 6.142857 0.349927\n",
"7 6.428571 0.371154\n",
"8 6.187500 0.347985\n",
"9 6.428571 0.416497\n",
"10 6.000000 0.500000\n",
"11 6.178571 0.358924\n",
"12 6.321429 0.485767\n",
"13 6.214286 0.489690\n",
"14 6.166667 0.471405\n",
"15 6.035714 0.480487\n",
"16 6.250000 0.590097\n",
"17 6.428571 0.562429\n",
"18 6.062500 0.526634\n",
"19 6.071429 0.174964\n",
"20 6.153846 0.455083\n",
"21 6.045455 0.396264\n",
"22 6.111111 0.566558\n",
"23 6.166667 0.235702\n",
"24 6.200000 0.812404"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"min_votes = 6\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": 20,
"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>6.233333</td>\n",
" <td>0.543650</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>6.266667</td>\n",
" <td>0.359011</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>6.357143</td>\n",
" <td>0.440315</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>6.333333</td>\n",
" <td>0.471405</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>6.366667</td>\n",
" <td>0.426875</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>549</th>\n",
" <td>6.022443</td>\n",
" <td>0.391286</td>\n",
" </tr>\n",
" <tr>\n",
" <th>550</th>\n",
" <td>5.662820</td>\n",
" <td>0.533573</td>\n",
" </tr>\n",
" <tr>\n",
" <th>551</th>\n",
" <td>6.031972</td>\n",
" <td>0.451508</td>\n",
" </tr>\n",
" <tr>\n",
" <th>552</th>\n",
" <td>6.084084</td>\n",
" <td>0.437134</td>\n",
" </tr>\n",
" <tr>\n",
" <th>553</th>\n",
" <td>5.971695</td>\n",
" <td>0.424945</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>554 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" vote_avg vote_std\n",
"0 6.233333 0.543650\n",
"1 6.266667 0.359011\n",
"2 6.357143 0.440315\n",
"3 6.333333 0.471405\n",
"4 6.366667 0.426875\n",
".. ... ...\n",
"549 6.022443 0.391286\n",
"550 5.662820 0.533573\n",
"551 6.031972 0.451508\n",
"552 6.084084 0.437134\n",
"553 5.971695 0.424945\n",
"\n",
"[554 rows x 2 columns]"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"min_votes = 6\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": 21,
"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>572</td>\n",
" <td>P</td>\n",
" <td>Meret</td>\n",
" <td>Napoli</td>\n",
" <td>Meret</td>\n",
" <td></td>\n",
" <td>504</td>\n",
" <td>25-238</td>\n",
" <td>1997</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>20.0</td>\n",
" <td>26.6</td>\n",
" <td>154</td>\n",
" <td>6</td>\n",
" <td>3.9</td>\n",
" <td>18</td>\n",
" <td>1.20</td>\n",
" <td>16.9</td>\n",
" <td>6.233333</td>\n",
" <td>0.543650</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</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>511</td>\n",
" <td>28-243</td>\n",
" <td>1994</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>36.8</td>\n",
" <td>36.3</td>\n",
" <td>212</td>\n",
" <td>5</td>\n",
" <td>2.4</td>\n",
" <td>30</td>\n",
" <td>2.01</td>\n",
" <td>17.8</td>\n",
" <td>6.266667</td>\n",
" <td>0.359011</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</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>502</td>\n",
" <td>27-135</td>\n",
" <td>1995</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>38.9</td>\n",
" <td>40.4</td>\n",
" <td>65</td>\n",
" <td>5</td>\n",
" <td>7.7</td>\n",
" <td>6</td>\n",
" <td>0.86</td>\n",
" <td>12.9</td>\n",
" <td>6.357143</td>\n",
" <td>0.440315</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2211</td>\n",
" <td>P</td>\n",
" <td>Silvestri</td>\n",
" <td>Udinese</td>\n",
" <td>Silvestri</td>\n",
" <td></td>\n",
" <td>514</td>\n",
" <td>31-258</td>\n",
" <td>1991</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>38.8</td>\n",
" <td>36.9</td>\n",
" <td>205</td>\n",
" <td>4</td>\n",
" <td>2.0</td>\n",
" <td>5</td>\n",
" <td>0.33</td>\n",
" <td>11.3</td>\n",
" <td>6.333333</td>\n",
" <td>0.471405</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>159</td>\n",
" <td>P</td>\n",
" <td>Sepe</td>\n",
" <td>Salernitana</td>\n",
" <td>Sepe</td>\n",
" <td></td>\n",
" <td>513</td>\n",
" <td>31-191</td>\n",
" <td>1991</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>46.3</td>\n",
" <td>40.6</td>\n",
" <td>199</td>\n",
" <td>15</td>\n",
" <td>7.5</td>\n",
" <td>11</td>\n",
" <td>0.73</td>\n",
" <td>14.2</td>\n",
" <td>6.366667</td>\n",
" <td>0.426875</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>549</th>\n",
" <td>5512</td>\n",
" <td>A</td>\n",
" <td>De Luca</td>\n",
" <td>Sampdoria</td>\n",
" <td>Luca</td>\n",
" <td></td>\n",
" <td>122</td>\n",
" <td>24-121</td>\n",
" <td>1998</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.022443</td>\n",
" <td>0.391286</td>\n",
" </tr>\n",
" <tr>\n",
" <th>550</th>\n",
" <td>5734</td>\n",
" <td>A</td>\n",
" <td>Soule'</td>\n",
" <td>Juventus</td>\n",
" <td>Soule</td>\n",
" <td></td>\n",
" <td>423</td>\n",
" <td>19-214</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.662820</td>\n",
" <td>0.533573</td>\n",
" </tr>\n",
" <tr>\n",
" <th>551</th>\n",
" <td>5785</td>\n",
" <td>A</td>\n",
" <td>Lazetic</td>\n",
" <td>Milan</td>\n",
" <td>Lazetic</td>\n",
" <td></td>\n",
" <td>248</td>\n",
" <td>18-297</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.031972</td>\n",
" <td>0.451508</td>\n",
" </tr>\n",
" <tr>\n",
" <th>552</th>\n",
" <td>5837</td>\n",
" <td>A</td>\n",
" <td>Voelkerling Persson</td>\n",
" <td>Lecce</td>\n",
" <td>Persson</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.084084</td>\n",
" <td>0.437134</td>\n",
" </tr>\n",
" <tr>\n",
" <th>553</th>\n",
" <td>6063</td>\n",
" <td>A</td>\n",
" <td>Sanca</td>\n",
" <td>Spezia</td>\n",
" <td>Sanca</td>\n",
" <td></td>\n",
" <td>396</td>\n",
" <td>22-315</td>\n",
" <td>2000</td>\n",
" <td>3</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.971695</td>\n",
" <td>0.424945</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>554 rows × 165 columns</p>\n",
"</div>"
],
"text/plain": [
" id r name team surname initial fb_ID \\\n",
"0 572 P Meret Napoli Meret 504 \n",
"1 2814 P Provedel Lazio Provedel 511 \n",
"2 4312 P Maignan Milan Maignan 502 \n",
"3 2211 P Silvestri Udinese Silvestri 514 \n",
"4 159 P Sepe Salernitana Sepe 513 \n",
".. ... .. ... ... ... ... ... \n",
"549 5512 A De Luca Sampdoria Luca 122 \n",
"550 5734 A Soule' Juventus Soule 423 \n",
"551 5785 A Lazetic Milan Lazetic 248 \n",
"552 5837 A Voelkerling Persson Lecce Persson -1 \n",
"553 6063 A Sanca Spezia Sanca 396 \n",
"\n",
" age birth_year games ... gk_pct_goal_kicks_launched \\\n",
"0 25-238 1997 0 ... 20.0 \n",
"1 28-243 1994 0 ... 36.8 \n",
"2 27-135 1995 0 ... 38.9 \n",
"3 31-258 1991 0 ... 38.8 \n",
"4 31-191 1991 0 ... 46.3 \n",
".. ... ... ... ... ... \n",
"549 24-121 1998 1 ... 0.0 \n",
"550 19-214 2003 5 ... 0.0 \n",
"551 18-297 2004 1 ... 0.0 \n",
"552 0 0 0 ... 0.0 \n",
"553 22-315 2000 3 ... 0.0 \n",
"\n",
" gk_goal_kick_length_avg gk_crosses gk_crosses_stopped \\\n",
"0 26.6 154 6 \n",
"1 36.3 212 5 \n",
"2 40.4 65 5 \n",
"3 36.9 205 4 \n",
"4 40.6 199 15 \n",
".. ... ... ... \n",
"549 0.0 0 0 \n",
"550 0.0 0 0 \n",
"551 0.0 0 0 \n",
"552 0.0 0 0 \n",
"553 0.0 0 0 \n",
"\n",
" gk_crosses_stopped_pct gk_def_actions_outside_pen_area \\\n",
"0 3.9 18 \n",
"1 2.4 30 \n",
"2 7.7 6 \n",
"3 2.0 5 \n",
"4 7.5 11 \n",
".. ... ... \n",
"549 0.0 0 \n",
"550 0.0 0 \n",
"551 0.0 0 \n",
"552 0.0 0 \n",
"553 0.0 0 \n",
"\n",
" gk_def_actions_outside_pen_area_per90 gk_avg_distance_def_actions \\\n",
"0 1.20 16.9 \n",
"1 2.01 17.8 \n",
"2 0.86 12.9 \n",
"3 0.33 11.3 \n",
"4 0.73 14.2 \n",
".. ... ... \n",
"549 0.00 0.0 \n",
"550 0.00 0.0 \n",
"551 0.00 0.0 \n",
"552 0.00 0.0 \n",
"553 0.00 0.0 \n",
"\n",
" vote_avg vote_std \n",
"0 6.233333 0.543650 \n",
"1 6.266667 0.359011 \n",
"2 6.357143 0.440315 \n",
"3 6.333333 0.471405 \n",
"4 6.366667 0.426875 \n",
".. ... ... \n",
"549 6.022443 0.391286 \n",
"550 5.662820 0.533573 \n",
"551 6.031972 0.451508 \n",
"552 6.084084 0.437134 \n",
"553 5.971695 0.424945 \n",
"\n",
"[554 rows x 165 columns]"
]
},
"execution_count": 21,
"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": 22,
"id": "f7620abe",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'gk_games'"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fc_players.columns[123]"
]
},
{
"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": 23,
"id": "700b7a7d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gollini, 0.5\n",
"Berisha, 0.0\n",
"Cragno, 0.0\n",
"Luis Maximiano, 0.16666666666666663\n",
"Mirante, 0.0\n",
"Sarr M., 0.0\n",
"Lamanna, 0.0\n",
"Ujkani, 0.0\n",
"Pegolo, 0.0\n",
"Perilli, 0.0\n",
"Padelli, 0.0\n",
"Perisan, 0.0\n",
"Bardi, 0.0\n",
"Cordaz, 0.0\n",
"Pinsoglio, 0.0\n",
"Fiorillo, 0.0\n",
"Sirigu, 0.0\n",
"Cerofolini, 0.0\n",
"Rossi F., 0.0\n",
"Contini, 0.0\n",
"Brancolini, 0.0\n",
"Bleve, 0.0\n",
"Berardi A., 0.0\n",
"Russo A., 0.0\n",
"Gemello, 0.0\n",
"Ravaglia, 0.0\n",
"Zoet, 0.33333333333333337\n",
"Boer, 0.0\n",
"Adamonis, 0.0\n",
"Marfella, 0.0\n",
"Zovko, 0.0\n",
"Piana, 0.0\n",
"Bagnolini, 0.0\n",
"Svilar, 0.0\n",
"Sorrentino A., 0.0\n",
"Ciezkowski, 0.0\n",
"Micai, 0.0\n",
"Chiesa M., 0.0\n",
"Saro, 0.0\n"
]
}
],
"source": [
"min_gk_games = 6\n",
"\n",
"fc_players_newgk = fc_players.copy()\n",
"\n",
"columns_to_avg = fc_players.columns[123:] # 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": 24,
"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>572</td>\n",
" <td>P</td>\n",
" <td>Meret</td>\n",
" <td>Napoli</td>\n",
" <td>Meret</td>\n",
" <td></td>\n",
" <td>504</td>\n",
" <td>25-238</td>\n",
" <td>1997</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>20.0</td>\n",
" <td>26.6</td>\n",
" <td>154.0</td>\n",
" <td>6.0</td>\n",
" <td>3.9</td>\n",
" <td>18</td>\n",
" <td>1.20</td>\n",
" <td>16.9</td>\n",
" <td>6.233333</td>\n",
" <td>0.543650</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</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>511</td>\n",
" <td>28-243</td>\n",
" <td>1994</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>36.8</td>\n",
" <td>36.3</td>\n",
" <td>212.0</td>\n",
" <td>5.0</td>\n",
" <td>2.4</td>\n",
" <td>30</td>\n",
" <td>2.01</td>\n",
" <td>17.8</td>\n",
" <td>6.266667</td>\n",
" <td>0.359011</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</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>502</td>\n",
" <td>27-135</td>\n",
" <td>1995</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>38.9</td>\n",
" <td>40.4</td>\n",
" <td>65.0</td>\n",
" <td>5.0</td>\n",
" <td>7.7</td>\n",
" <td>6</td>\n",
" <td>0.86</td>\n",
" <td>12.9</td>\n",
" <td>6.357143</td>\n",
" <td>0.440315</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2211</td>\n",
" <td>P</td>\n",
" <td>Silvestri</td>\n",
" <td>Udinese</td>\n",
" <td>Silvestri</td>\n",
" <td></td>\n",
" <td>514</td>\n",
" <td>31-258</td>\n",
" <td>1991</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>38.8</td>\n",
" <td>36.9</td>\n",
" <td>205.0</td>\n",
" <td>4.0</td>\n",
" <td>2.0</td>\n",
" <td>5</td>\n",
" <td>0.33</td>\n",
" <td>11.3</td>\n",
" <td>6.333333</td>\n",
" <td>0.471405</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>159</td>\n",
" <td>P</td>\n",
" <td>Sepe</td>\n",
" <td>Salernitana</td>\n",
" <td>Sepe</td>\n",
" <td></td>\n",
" <td>513</td>\n",
" <td>31-191</td>\n",
" <td>1991</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>46.3</td>\n",
" <td>40.6</td>\n",
" <td>199.0</td>\n",
" <td>15.0</td>\n",
" <td>7.5</td>\n",
" <td>11</td>\n",
" <td>0.73</td>\n",
" <td>14.2</td>\n",
" <td>6.366667</td>\n",
" <td>0.426875</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>549</th>\n",
" <td>5512</td>\n",
" <td>A</td>\n",
" <td>De Luca</td>\n",
" <td>Sampdoria</td>\n",
" <td>Luca</td>\n",
" <td></td>\n",
" <td>122</td>\n",
" <td>24-121</td>\n",
" <td>1998</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</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>6.022443</td>\n",
" <td>0.391286</td>\n",
" </tr>\n",
" <tr>\n",
" <th>550</th>\n",
" <td>5734</td>\n",
" <td>A</td>\n",
" <td>Soule'</td>\n",
" <td>Juventus</td>\n",
" <td>Soule</td>\n",
" <td></td>\n",
" <td>423</td>\n",
" <td>19-214</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</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>5.662820</td>\n",
" <td>0.533573</td>\n",
" </tr>\n",
" <tr>\n",
" <th>551</th>\n",
" <td>5785</td>\n",
" <td>A</td>\n",
" <td>Lazetic</td>\n",
" <td>Milan</td>\n",
" <td>Lazetic</td>\n",
" <td></td>\n",
" <td>248</td>\n",
" <td>18-297</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</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>6.031972</td>\n",
" <td>0.451508</td>\n",
" </tr>\n",
" <tr>\n",
" <th>552</th>\n",
" <td>5837</td>\n",
" <td>A</td>\n",
" <td>Voelkerling Persson</td>\n",
" <td>Lecce</td>\n",
" <td>Persson</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</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>6.084084</td>\n",
" <td>0.437134</td>\n",
" </tr>\n",
" <tr>\n",
" <th>553</th>\n",
" <td>6063</td>\n",
" <td>A</td>\n",
" <td>Sanca</td>\n",
" <td>Spezia</td>\n",
" <td>Sanca</td>\n",
" <td></td>\n",
" <td>396</td>\n",
" <td>22-315</td>\n",
" <td>2000</td>\n",
" <td>3</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</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>5.971695</td>\n",
" <td>0.424945</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>554 rows × 165 columns</p>\n",
"</div>"
],
"text/plain": [
" id r name team surname initial fb_ID \\\n",
"0 572 P Meret Napoli Meret 504 \n",
"1 2814 P Provedel Lazio Provedel 511 \n",
"2 4312 P Maignan Milan Maignan 502 \n",
"3 2211 P Silvestri Udinese Silvestri 514 \n",
"4 159 P Sepe Salernitana Sepe 513 \n",
".. ... .. ... ... ... ... ... \n",
"549 5512 A De Luca Sampdoria Luca 122 \n",
"550 5734 A Soule' Juventus Soule 423 \n",
"551 5785 A Lazetic Milan Lazetic 248 \n",
"552 5837 A Voelkerling Persson Lecce Persson -1 \n",
"553 6063 A Sanca Spezia Sanca 396 \n",
"\n",
" age birth_year games ... gk_pct_goal_kicks_launched \\\n",
"0 25-238 1997 0 ... 20.0 \n",
"1 28-243 1994 0 ... 36.8 \n",
"2 27-135 1995 0 ... 38.9 \n",
"3 31-258 1991 0 ... 38.8 \n",
"4 31-191 1991 0 ... 46.3 \n",
".. ... ... ... ... ... \n",
"549 24-121 1998 1 ... 0.0 \n",
"550 19-214 2003 5 ... 0.0 \n",
"551 18-297 2004 1 ... 0.0 \n",
"552 0 0 0 ... 0.0 \n",
"553 22-315 2000 3 ... 0.0 \n",
"\n",
" gk_goal_kick_length_avg gk_crosses gk_crosses_stopped \\\n",
"0 26.6 154.0 6.0 \n",
"1 36.3 212.0 5.0 \n",
"2 40.4 65.0 5.0 \n",
"3 36.9 205.0 4.0 \n",
"4 40.6 199.0 15.0 \n",
".. ... ... ... \n",
"549 0.0 0.0 0.0 \n",
"550 0.0 0.0 0.0 \n",
"551 0.0 0.0 0.0 \n",
"552 0.0 0.0 0.0 \n",
"553 0.0 0.0 0.0 \n",
"\n",
" gk_crosses_stopped_pct gk_def_actions_outside_pen_area \\\n",
"0 3.9 18 \n",
"1 2.4 30 \n",
"2 7.7 6 \n",
"3 2.0 5 \n",
"4 7.5 11 \n",
".. ... ... \n",
"549 0.0 0 \n",
"550 0.0 0 \n",
"551 0.0 0 \n",
"552 0.0 0 \n",
"553 0.0 0 \n",
"\n",
" gk_def_actions_outside_pen_area_per90 gk_avg_distance_def_actions \\\n",
"0 1.20 16.9 \n",
"1 2.01 17.8 \n",
"2 0.86 12.9 \n",
"3 0.33 11.3 \n",
"4 0.73 14.2 \n",
".. ... ... \n",
"549 0.00 0.0 \n",
"550 0.00 0.0 \n",
"551 0.00 0.0 \n",
"552 0.00 0.0 \n",
"553 0.00 0.0 \n",
"\n",
" vote_avg vote_std \n",
"0 6.233333 0.543650 \n",
"1 6.266667 0.359011 \n",
"2 6.357143 0.440315 \n",
"3 6.333333 0.471405 \n",
"4 6.366667 0.426875 \n",
".. ... ... \n",
"549 6.022443 0.391286 \n",
"550 5.662820 0.533573 \n",
"551 6.031972 0.451508 \n",
"552 6.084084 0.437134 \n",
"553 5.971695 0.424945 \n",
"\n",
"[554 rows x 165 columns]"
]
},
"execution_count": 24,
"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": 25,
"id": "8336c025",
"metadata": {},
"outputs": [],
"source": [
"fc_players.to_excel('mid_outputs/players_stats.xlsx')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f3fc9b1b",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}