Files
fantabeto/3_players_dataset_creation.ipynb
T
Giuseppe Musicco b60a8a061c Release
2022-11-12 11:29:20 +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>515</th>\n",
" <td>Wojciech Szczęsny</td>\n",
" <td>Juventus</td>\n",
" </tr>\n",
" <tr>\n",
" <th>516</th>\n",
" <td>Ciprian Tătărușanu</td>\n",
" <td>Milan</td>\n",
" </tr>\n",
" <tr>\n",
" <th>517</th>\n",
" <td>Pietro Terracciano</td>\n",
" <td>Fiorentina</td>\n",
" </tr>\n",
" <tr>\n",
" <th>518</th>\n",
" <td>Guglielmo Vicario</td>\n",
" <td>Empoli</td>\n",
" </tr>\n",
" <tr>\n",
" <th>519</th>\n",
" <td>Jeroen Zoet</td>\n",
" <td>Spezia</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>520 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",
"515 Wojciech Szczęsny Juventus\n",
"516 Ciprian Tătărușanu Milan\n",
"517 Pietro Terracciano Fiorentina\n",
"518 Guglielmo Vicario Empoli\n",
"519 Jeroen Zoet Spezia\n",
"\n",
"[520 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 Romelu Lukaku Lukaku\n",
"265 Saša Lukić Lukic\n",
"266 Sebastiano Luperto Luperto\n",
"267 Charalambos Lykogiannis Lykogiannis\n",
"268 Giulio Maggiore Maggiore\n",
"269 Giangiacomo Magnani Magnani\n",
"270 Mike Maignan Maignan\n",
"271 Jean-Victor Makengo Makengo\n",
"272 Daniel Maldini Maldini\n",
"273 Youssef Maleh Maleh\n",
"274 Ruslan Malinovskyi Malinovskyi\n",
"275 Gianluca Mancini Mancini\n",
"276 Rolando Mandragora Mandragora\n",
"277 Riccardo Marchizza Marchizza\n",
"278 Gian Marco Ferrari Ferrari\n",
"279 Pablo Marí Mari\n",
"280 Răzvan Marin Marin\n",
"281 Marlon Marlon\n",
"282 Luca Marrone Marrone\n",
"283 Lautaro Martínez Martinez\n",
"284 Lucas Martínez Quarta Quarta\n",
"285 Adam Marušić Marusic\n",
"286 Adam Masina Masina\n",
"287 Nemanja Matić Matic\n",
"288 Luís Maximiano Maximiano\n",
"289 Pasquale Mazzocchi Mazzocchi\n",
"290 Weston McKennie McKennie\n",
"291 Gary Medel Medel\n",
"292 Soualiho Meïté Meite\n",
"293 Alex Meret Meret\n",
"294 Yıldırım Mert Çetin Cetin\n",
"295 Junior Messias Messias\n",
"296 Tommaso Milanese Milanese\n",
"297 Nikola Milenković Milenkovic\n",
"298 Arkadiusz Milik Milik\n",
"299 Sergej Milinković-Savić Milinkovic-Savic\n",
"300 Vanja Milinković-Savić Milinkovic-Savic\n",
"301 Kim Min-jae Min-jae\n",
"302 Aleksei Miranchuk Miranchuk\n",
"303 Fabio Miretti Miretti\n",
"304 Henrikh Mkhitaryan Mkhitaryan\n",
"305 Salvatore Molina Molina\n",
"306 Daniele Montevago Montevago\n",
"307 Lorenzo Montipò Montipo\n",
"308 Nikola Moro Moro\n",
"309 Dany Mota Mota\n",
"310 Mert Müldür Muldur\n",
"311 Luis Muriel Muriel\n",
"312 Jeison Murillo Murillo\n",
"313 Nicola Murru Murru\n",
"314 Juan Musso Musso\n",
"315 Joakim Mæhle Mhle\n",
"316 Michel Ndary Adopo Adopo\n",
"317 Tanguy Ndombele Ndombele\n",
"318 Ilija Nestorovski Nestorovski\n",
"319 Dimitris Nikolaou Nikolaou\n",
"320 Bram Nuytinck Nuytinck\n",
"321 M'Bala Nzola Nzola\n",
"322 Pedro Obiang Obiang\n",
"323 David Okereke Okereke\n",
"324 Caleb Okoli Okoli\n",
"325 Mathías Olivera Olivera\n",
"326 André Onana Onana\n",
"327 Divock Origi Origi\n",
"328 Riccardo Orsolini Orsolini\n",
"329 Victor Osimhen Osimhen\n",
"330 Remi Oudin Oudin\n",
"331 Adam Ounas Ounas\n",
"332 Leandro Paredes Paredes\n",
"333 Fabiano Parisi Parisi\n",
"334 Mario Pašalić Pasalic\n",
"335 Patric Patric\n",
"336 Rui Patrício Patricio\n",
"337 Pedro Pedro\n",
"338 Pietro Pellegri Pellegri\n",
"339 Lorenzo Pellegrini Pellegrini\n",
"340 Pepín Pepin\n",
"341 Roberto Pereyra Pereyra\n",
"342 Nehuén Pérez Perez\n",
"343 Mattia Perin Perin\n",
"344 Matteo Pessina Pessina\n",
"345 Andrea Petagna Petagna\n",
"346 Giuseppe Pezzella Pezzella\n",
"347 Krzysztof Piątek Piatek\n",
"348 Roberto Piccoli Piccoli\n",
"349 Charles Pickel Pickel\n",
"350 Andrea Pinamonti Pinamonti\n",
"351 Lorenzo Pirola Pirola\n",
"352 Marko Pjaca Pjaca\n",
"353 Tommaso Pobega Pobega\n",
"354 Matteo Politano Politano\n",
"355 Marin Pongračić Pongracic\n",
"356 Stefan Posch Posch\n",
"357 Ivan Provedel Provedel\n",
"358 Ignacio Pussetto Pussetto\n",
"359 Fabio Quagliarella Quagliarella\n",
"360 Giacomo Quagliata Quagliata\n",
"361 Adrien Rabiot Rabiot\n",
"362 Nemanja Radonjić Radonjic\n",
"363 Ivan Radovanović Radovanovic\n",
"364 Ionuț Radu Radu\n",
"365 Luca Ranieri Ranieri\n",
"366 Andrea Ranocchia Ranocchia\n",
"367 Filippo Ranocchia Ranocchia\n",
"368 Giacomo Raspadori Raspadori\n",
"369 Giacomo Raspadori Raspadori\n",
"370 Ante Rebić Rebic\n",
"371 Arkadiusz Reca Reca\n",
"372 Panagiotis Retsos Retsos\n",
"373 Franck Ribéry Ribery\n",
"374 Samuele Ricci Ricci\n",
"375 Tomás Rincón Rincon\n",
"376 Pablo Rodríguez Rodriguez\n",
"377 Ricardo Rodríguez Rodriguez\n",
"378 Rogério Rogerio\n",
"379 Alessio Romagnoli Romagnoli\n",
"380 Luka Romero Romero\n",
"381 Marten de Roon Roon\n",
"382 Nicolò Rovella Rovella\n",
"383 Nicolò Rovella Rovella\n",
"384 Amir Rrahmani Rrahmani\n",
"385 Ruan Ruan\n",
"386 Daniele Rugani Rugani\n",
"387 Matteo Ruggeri Ruggeri\n",
"388 Mário Rui Rui\n",
"389 Abdelhamid Sabiri Sabiri\n",
"390 Alexis Saelemaekers Saelemaekers\n",
"391 Jacopo Sala Sala\n",
"392 Lazar Samardzic Samardzic\n",
"393 Junior Sambia Sambia\n",
"394 Antonio Sanabria Sanabria\n",
"395 Leandro Sanca Sanca\n",
"396 Alex Sandro Sandro\n",
"397 Nicola Sansone Sansone\n",
"398 Riccardo Saponara Saponara\n",
"399 Martin Satriano Satriano\n",
"400 Giorgio Scalvini Scalvini\n",
"401 Jerdy Schouten Schouten\n",
"402 Perr Schuurs Schuurs\n",
"403 Demba Seck Seck\n",
"404 Jacopo Segre Segre\n",
"405 Stefano Sensi Sensi\n",
"406 Luigi Sepe Sepe\n",
"407 Leonardo Sernicola Sernicola\n",
"408 Stephan El Shaarawy Shaarawy\n",
"409 Eldor Shomurodov Shomurodov\n",
"410 Marco Silvestri Silvestri\n",
"411 Giovanni Simeone Simeone\n",
"412 Wilfried Singo Singo\n",
"413 Leo Skiri Østigård stigard\n",
"414 Łukasz Skorupski Skorupski\n",
"415 Milan Škriniar Skriniar\n",
"416 Chris Smalling Smalling\n",
"417 Brandon Soppy Soppy\n",
"418 Brandon Soppy Soppy\n",
"419 Roberto Soriano Soriano\n",
"420 Joaquin Sosa Sosa\n",
"421 Riccardo Sottil Sottil\n",
"422 Matìas Soulé Soule\n",
"423 Adama Soumaoro Soumaoro\n",
"424 Leonardo Spinazzola Spinazzola\n",
"425 Marco Sportiello Sportiello\n",
"426 Petar Stojanović Stojanovic\n",
"427 Gabriel Strefezza Strefezza\n",
"428 Dávid Strelec Strelec\n",
"429 Isaac Success Success\n",
"430 Ibrahim Sulemana Sulemana\n",
"431 Wojciech Szczęsny Szczesny\n",
"432 Adrien Tameze Tameze\n",
"433 Ciprian Tătărușanu Tatarusanu\n",
"434 Filippo Terracciano Terracciano\n",
"435 Pietro Terracciano Terracciano\n",
"436 Aleksa Terzić Terzic\n",
"437 Malick Thiaw Thiaw\n",
"438 Kristian Thorstvedt Thorstvedt\n",
"439 Jeremy Toljan Toljan\n",
"440 Rafael Tolói Toloi\n",
"441 Fikayo Tomori Tomori\n",
"442 Sandro Tonali Tonali\n",
"443 Frank Tsadjout Tsadjout\n",
"444 Alessandro Tuia Tuia\n",
"445 Iyenoma Udogie Udogie\n",
"446 Samuel Umtiti Umtiti\n",
"447 Diego Valencia Valencia\n",
"448 Emanuele Valeri Valeri\n",
"449 Mattia Valoti Valoti\n",
"450 Johan Vásquez Vasquez\n",
"451 Matías Vecino Vecino\n",
"452 Miguel Veloso Veloso\n",
"453 Lorenzo Venuti Venuti\n",
"454 Daniele Verde Verde\n",
"455 Simone Verdi Verdi\n",
"456 Valerio Verre Verre\n",
"457 Guglielmo Vicario Vicario\n",
"458 Ronaldo Vieira Vieira\n",
"459 Emanuel Vignato Vignato\n",
"460 Samuele Vignato Vignato\n",
"461 Tonny Vilhena Vilhena\n",
"462 Gonzalo Villar Villar\n",
"463 Matías Viña Vina\n",
"464 Dušan Vlahović Vlahovic\n",
"465 Nikola Vlašić Vlasic\n",
"466 Mërgim Vojvoda Vojvoda\n",
"467 Cristian Volpato Volpato\n",
"468 Aster Vranckx Vranckx\n",
"469 Stefan de Vrij Vrij\n",
"470 Walace Walace\n",
"471 Sebastian Walukiewicz Walukiewicz\n",
"472 Georginio Wijnaldum Wijnaldum\n",
"473 Gerard Yepes Yepes\n",
"474 Mattia Zaccagni Zaccagni\n",
"475 Denis Zakaria Zakaria\n",
"476 Nicola Zalewski Zalewski\n",
"477 Andre-Frank Zambo Anguissa Anguissa\n",
"478 Luca Zanimacchia Zanimacchia\n",
"479 Nicolò Zaniolo Zaniolo\n",
"480 Alessandro Zanoli Zanoli\n",
"481 Duván Zapata Zapata\n",
"482 Davide Zappacosta Zappacosta\n",
"483 Alessio Zerbin Zerbin\n",
"484 Piotr Zieliński Zielinski\n",
"485 David Zima Zima\n",
"486 Joshua Zirkzee Zirkzee\n",
"487 Jeroen Zoet Zoet\n",
"488 Nadir Zortea Zortea\n",
"489 Szymon Żurkowski Zurkowski\n",
"490 Milan Đurić uric\n",
"491 Filip Đuričić uricic\n",
"492 Emil Audero Audero\n",
"493 Marco Carnesecchi Carnesecchi\n",
"494 Andrea Consigli Consigli\n",
"495 Michele Di Gregorio Gregorio\n",
"496 Bartłomiej Drągowski Dragowski\n",
"497 Wladimiro Falcone Falcone\n",
"498 Pierluigi Gollini Gollini\n",
"499 Samir Handanović Handanovic\n",
"500 Mike Maignan Maignan\n",
"501 Luís Maximiano Maximiano\n",
"502 Alex Meret Meret\n",
"503 Vanja Milinković-Savić Milinkovic-Savic\n",
"504 Lorenzo Montipò Montipo\n",
"505 Juan Musso Musso\n",
"506 André Onana Onana\n",
"507 Rui Patrício Patricio\n",
"508 Mattia Perin Perin\n",
"509 Ivan Provedel Provedel\n",
"510 Ionuț Radu Radu\n",
"511 Luigi Sepe Sepe\n",
"512 Marco Silvestri Silvestri\n",
"513 Łukasz Skorupski Skorupski\n",
"514 Marco Sportiello Sportiello\n",
"515 Wojciech Szczęsny Szczesny\n",
"516 Ciprian Tătărușanu Tatarusanu\n",
"517 Pietro Terracciano Terracciano\n",
"518 Guglielmo Vicario Vicario\n",
"519 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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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",
"Palomino\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>502</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>509</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>500</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>512</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>511</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>422</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>395</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 502\n",
"1 2814 P Provedel Lazio Provedel 509\n",
"2 4312 P Maignan Milan Maignan 500\n",
"3 2211 P Silvestri Udinese Silvestri 512\n",
"4 159 P Sepe Salernitana Sepe 511\n",
".. ... .. ... ... ... ... ...\n",
"549 5512 A De Luca Sampdoria Luca 122\n",
"550 5734 A Soule' Juventus Soule 422\n",
"551 5785 A Lazetic Milan Lazetic 248\n",
"552 5837 A Voelkerling Persson Lecce Persson -1\n",
"553 6063 A Sanca Spezia Sanca 395\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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\\nicol\\AppData\\Local\\Temp\\ipykernel_2484\\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>502</td>\n",
" <td>25-234</td>\n",
" <td>1997</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>26.9</td>\n",
" <td>92</td>\n",
" <td>19.6</td>\n",
" <td>26.6</td>\n",
" <td>142</td>\n",
" <td>6</td>\n",
" <td>4.2</td>\n",
" <td>10</td>\n",
" <td>0.71</td>\n",
" <td>15.1</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>509</td>\n",
" <td>28-239</td>\n",
" <td>1994</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>33.1</td>\n",
" <td>94</td>\n",
" <td>37.2</td>\n",
" <td>36.6</td>\n",
" <td>201</td>\n",
" <td>5</td>\n",
" <td>2.5</td>\n",
" <td>29</td>\n",
" <td>2.08</td>\n",
" <td>17.6</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>500</td>\n",
" <td>27-131</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>512</td>\n",
" <td>31-254</td>\n",
" <td>1991</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>34.4</td>\n",
" <td>110</td>\n",
" <td>40.9</td>\n",
" <td>38.2</td>\n",
" <td>194</td>\n",
" <td>4</td>\n",
" <td>2.1</td>\n",
" <td>5</td>\n",
" <td>0.36</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>511</td>\n",
" <td>31-187</td>\n",
" <td>1991</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>36.6</td>\n",
" <td>128</td>\n",
" <td>48.4</td>\n",
" <td>41.7</td>\n",
" <td>187</td>\n",
" <td>14</td>\n",
" <td>7.5</td>\n",
" <td>9</td>\n",
" <td>0.64</td>\n",
" <td>13.7</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-117</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>422</td>\n",
" <td>19-210</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-293</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>395</td>\n",
" <td>22-311</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 502 \n",
"1 2814 P Provedel Lazio Provedel 509 \n",
"2 4312 P Maignan Milan Maignan 500 \n",
"3 2211 P Silvestri Udinese Silvestri 512 \n",
"4 159 P Sepe Salernitana Sepe 511 \n",
".. ... .. ... ... ... ... ... \n",
"549 5512 A De Luca Sampdoria Luca 122 \n",
"550 5734 A Soule' Juventus Soule 422 \n",
"551 5785 A Lazetic Milan Lazetic 248 \n",
"552 5837 A Voelkerling Persson Lecce Persson -1 \n",
"553 6063 A Sanca Spezia Sanca 395 \n",
"\n",
" age birth_year games ... gk_passes_length_avg gk_goal_kicks \\\n",
"0 25-234 1997 0 ... 26.9 92 \n",
"1 28-239 1994 0 ... 33.1 94 \n",
"2 27-131 1995 0 ... 33.5 18 \n",
"3 31-254 1991 0 ... 34.4 110 \n",
"4 31-187 1991 0 ... 36.6 128 \n",
".. ... ... ... ... ... ... \n",
"549 24-117 1998 1 ... 0.0 0 \n",
"550 19-210 2003 5 ... 0.0 0 \n",
"551 18-293 2004 1 ... 0.0 0 \n",
"552 0 0 0 ... 0.0 0 \n",
"553 22-311 2000 3 ... 0.0 0 \n",
"\n",
" gk_pct_goal_kicks_launched gk_goal_kick_length_avg gk_crosses \\\n",
"0 19.6 26.6 142 \n",
"1 37.2 36.6 201 \n",
"2 38.9 40.4 65 \n",
"3 40.9 38.2 194 \n",
"4 48.4 41.7 187 \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 4.2 \n",
"1 5 2.5 \n",
"2 5 7.7 \n",
"3 4 2.1 \n",
"4 14 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 10 0.71 \n",
"1 29 2.08 \n",
"2 6 0.86 \n",
"3 5 0.36 \n",
"4 9 0.64 \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 15.1 \n",
"1 17.6 \n",
"2 12.9 \n",
"3 11.3 \n",
"4 13.7 \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": 16,
"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": 18,
"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.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>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>549</th>\n",
" <td>5.877688</td>\n",
" <td>0.485814</td>\n",
" </tr>\n",
" <tr>\n",
" <th>550</th>\n",
" <td>6.067846</td>\n",
" <td>0.581002</td>\n",
" </tr>\n",
" <tr>\n",
" <th>551</th>\n",
" <td>6.170097</td>\n",
" <td>0.204814</td>\n",
" </tr>\n",
" <tr>\n",
" <th>552</th>\n",
" <td>6.041983</td>\n",
" <td>0.689071</td>\n",
" </tr>\n",
" <tr>\n",
" <th>553</th>\n",
" <td>5.991021</td>\n",
" <td>0.262247</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.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",
".. ... ...\n",
"549 5.877688 0.485814\n",
"550 6.067846 0.581002\n",
"551 6.170097 0.204814\n",
"552 6.041983 0.689071\n",
"553 5.991021 0.262247\n",
"\n",
"[554 rows x 2 columns]"
]
},
"execution_count": 18,
"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": 19,
"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>502</td>\n",
" <td>25-234</td>\n",
" <td>1997</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>19.6</td>\n",
" <td>26.6</td>\n",
" <td>142</td>\n",
" <td>6</td>\n",
" <td>4.2</td>\n",
" <td>10</td>\n",
" <td>0.71</td>\n",
" <td>15.1</td>\n",
" <td>6.214286</td>\n",
" <td>0.557875</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>509</td>\n",
" <td>28-239</td>\n",
" <td>1994</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>37.2</td>\n",
" <td>36.6</td>\n",
" <td>201</td>\n",
" <td>5</td>\n",
" <td>2.5</td>\n",
" <td>29</td>\n",
" <td>2.08</td>\n",
" <td>17.6</td>\n",
" <td>6.321429</td>\n",
" <td>0.305143</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>500</td>\n",
" <td>27-131</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>512</td>\n",
" <td>31-254</td>\n",
" <td>1991</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>40.9</td>\n",
" <td>38.2</td>\n",
" <td>194</td>\n",
" <td>4</td>\n",
" <td>2.1</td>\n",
" <td>5</td>\n",
" <td>0.36</td>\n",
" <td>11.3</td>\n",
" <td>6.321429</td>\n",
" <td>0.485767</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>511</td>\n",
" <td>31-187</td>\n",
" <td>1991</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>48.4</td>\n",
" <td>41.7</td>\n",
" <td>187</td>\n",
" <td>14</td>\n",
" <td>7.5</td>\n",
" <td>9</td>\n",
" <td>0.64</td>\n",
" <td>13.7</td>\n",
" <td>6.428571</td>\n",
" <td>0.371154</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-117</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>5.877688</td>\n",
" <td>0.485814</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>422</td>\n",
" <td>19-210</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>6.067846</td>\n",
" <td>0.581002</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-293</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.170097</td>\n",
" <td>0.204814</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.041983</td>\n",
" <td>0.689071</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>395</td>\n",
" <td>22-311</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.991021</td>\n",
" <td>0.262247</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 502 \n",
"1 2814 P Provedel Lazio Provedel 509 \n",
"2 4312 P Maignan Milan Maignan 500 \n",
"3 2211 P Silvestri Udinese Silvestri 512 \n",
"4 159 P Sepe Salernitana Sepe 511 \n",
".. ... .. ... ... ... ... ... \n",
"549 5512 A De Luca Sampdoria Luca 122 \n",
"550 5734 A Soule' Juventus Soule 422 \n",
"551 5785 A Lazetic Milan Lazetic 248 \n",
"552 5837 A Voelkerling Persson Lecce Persson -1 \n",
"553 6063 A Sanca Spezia Sanca 395 \n",
"\n",
" age birth_year games ... gk_pct_goal_kicks_launched \\\n",
"0 25-234 1997 0 ... 19.6 \n",
"1 28-239 1994 0 ... 37.2 \n",
"2 27-131 1995 0 ... 38.9 \n",
"3 31-254 1991 0 ... 40.9 \n",
"4 31-187 1991 0 ... 48.4 \n",
".. ... ... ... ... ... \n",
"549 24-117 1998 1 ... 0.0 \n",
"550 19-210 2003 5 ... 0.0 \n",
"551 18-293 2004 1 ... 0.0 \n",
"552 0 0 0 ... 0.0 \n",
"553 22-311 2000 3 ... 0.0 \n",
"\n",
" gk_goal_kick_length_avg gk_crosses gk_crosses_stopped \\\n",
"0 26.6 142 6 \n",
"1 36.6 201 5 \n",
"2 40.4 65 5 \n",
"3 38.2 194 4 \n",
"4 41.7 187 14 \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 4.2 10 \n",
"1 2.5 29 \n",
"2 7.7 6 \n",
"3 2.1 5 \n",
"4 7.5 9 \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 0.71 15.1 \n",
"1 2.08 17.6 \n",
"2 0.86 12.9 \n",
"3 0.36 11.3 \n",
"4 0.64 13.7 \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.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",
".. ... ... \n",
"549 5.877688 0.485814 \n",
"550 6.067846 0.581002 \n",
"551 6.170097 0.204814 \n",
"552 6.041983 0.689071 \n",
"553 5.991021 0.262247 \n",
"\n",
"[554 rows x 165 columns]"
]
},
"execution_count": 19,
"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": 20,
"id": "f7620abe",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'gk_games'"
]
},
"execution_count": 20,
"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": 21,
"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",
"Carnesecchi, 0.8333333333333334\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.16666666666666663\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": 22,
"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>502</td>\n",
" <td>25-234</td>\n",
" <td>1997</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>19.6</td>\n",
" <td>26.6</td>\n",
" <td>142.0</td>\n",
" <td>6.0</td>\n",
" <td>4.2</td>\n",
" <td>10.0</td>\n",
" <td>0.71</td>\n",
" <td>15.1</td>\n",
" <td>6.214286</td>\n",
" <td>0.557875</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>509</td>\n",
" <td>28-239</td>\n",
" <td>1994</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>37.2</td>\n",
" <td>36.6</td>\n",
" <td>201.0</td>\n",
" <td>5.0</td>\n",
" <td>2.5</td>\n",
" <td>29.0</td>\n",
" <td>2.08</td>\n",
" <td>17.6</td>\n",
" <td>6.321429</td>\n",
" <td>0.305143</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>500</td>\n",
" <td>27-131</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.0</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>512</td>\n",
" <td>31-254</td>\n",
" <td>1991</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>40.9</td>\n",
" <td>38.2</td>\n",
" <td>194.0</td>\n",
" <td>4.0</td>\n",
" <td>2.1</td>\n",
" <td>5.0</td>\n",
" <td>0.36</td>\n",
" <td>11.3</td>\n",
" <td>6.321429</td>\n",
" <td>0.485767</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>511</td>\n",
" <td>31-187</td>\n",
" <td>1991</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>48.4</td>\n",
" <td>41.7</td>\n",
" <td>187.0</td>\n",
" <td>14.0</td>\n",
" <td>7.5</td>\n",
" <td>9.0</td>\n",
" <td>0.64</td>\n",
" <td>13.7</td>\n",
" <td>6.428571</td>\n",
" <td>0.371154</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-117</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.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>5.877688</td>\n",
" <td>0.485814</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>422</td>\n",
" <td>19-210</td>\n",
" <td>2003</td>\n",
" <td>5</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>6.067846</td>\n",
" <td>0.581002</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-293</td>\n",
" <td>2004</td>\n",
" <td>1</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>6.170097</td>\n",
" <td>0.204814</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.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>6.041983</td>\n",
" <td>0.689071</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>395</td>\n",
" <td>22-311</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.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>5.991021</td>\n",
" <td>0.262247</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 502 \n",
"1 2814 P Provedel Lazio Provedel 509 \n",
"2 4312 P Maignan Milan Maignan 500 \n",
"3 2211 P Silvestri Udinese Silvestri 512 \n",
"4 159 P Sepe Salernitana Sepe 511 \n",
".. ... .. ... ... ... ... ... \n",
"549 5512 A De Luca Sampdoria Luca 122 \n",
"550 5734 A Soule' Juventus Soule 422 \n",
"551 5785 A Lazetic Milan Lazetic 248 \n",
"552 5837 A Voelkerling Persson Lecce Persson -1 \n",
"553 6063 A Sanca Spezia Sanca 395 \n",
"\n",
" age birth_year games ... gk_pct_goal_kicks_launched \\\n",
"0 25-234 1997 0 ... 19.6 \n",
"1 28-239 1994 0 ... 37.2 \n",
"2 27-131 1995 0 ... 38.9 \n",
"3 31-254 1991 0 ... 40.9 \n",
"4 31-187 1991 0 ... 48.4 \n",
".. ... ... ... ... ... \n",
"549 24-117 1998 1 ... 0.0 \n",
"550 19-210 2003 5 ... 0.0 \n",
"551 18-293 2004 1 ... 0.0 \n",
"552 0 0 0 ... 0.0 \n",
"553 22-311 2000 3 ... 0.0 \n",
"\n",
" gk_goal_kick_length_avg gk_crosses gk_crosses_stopped \\\n",
"0 26.6 142.0 6.0 \n",
"1 36.6 201.0 5.0 \n",
"2 40.4 65.0 5.0 \n",
"3 38.2 194.0 4.0 \n",
"4 41.7 187.0 14.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 4.2 10.0 \n",
"1 2.5 29.0 \n",
"2 7.7 6.0 \n",
"3 2.1 5.0 \n",
"4 7.5 9.0 \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_def_actions_outside_pen_area_per90 gk_avg_distance_def_actions \\\n",
"0 0.71 15.1 \n",
"1 2.08 17.6 \n",
"2 0.86 12.9 \n",
"3 0.36 11.3 \n",
"4 0.64 13.7 \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.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",
".. ... ... \n",
"549 5.877688 0.485814 \n",
"550 6.067846 0.581002 \n",
"551 6.170097 0.204814 \n",
"552 6.041983 0.689071 \n",
"553 5.991021 0.262247 \n",
"\n",
"[554 rows x 165 columns]"
]
},
"execution_count": 22,
"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": 23,
"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
}