Files
fantabeto/3_players_dataset_creation.ipynb
T

3564 lines
154 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>Oliver Abildgaard</td>\n",
" <td>Hellas Verona</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Tammy Abraham</td>\n",
" <td>Roma</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Francesco Acerbi</td>\n",
" <td>Inter</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Yacine Adli</td>\n",
" <td>Milan</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Michel Aebischer</td>\n",
" <td>Bologna</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>567</th>\n",
" <td>Ciprian Tătărușanu</td>\n",
" <td>Milan</td>\n",
" </tr>\n",
" <tr>\n",
" <th>568</th>\n",
" <td>Pietro Terracciano</td>\n",
" <td>Fiorentina</td>\n",
" </tr>\n",
" <tr>\n",
" <th>569</th>\n",
" <td>Guglielmo Vicario</td>\n",
" <td>Empoli</td>\n",
" </tr>\n",
" <tr>\n",
" <th>570</th>\n",
" <td>Jeroen Zoet</td>\n",
" <td>Spezia</td>\n",
" </tr>\n",
" <tr>\n",
" <th>571</th>\n",
" <td>Petar Zovko</td>\n",
" <td>Spezia</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>572 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" player team\n",
"0 Oliver Abildgaard Hellas Verona\n",
"1 Tammy Abraham Roma\n",
"2 Francesco Acerbi Inter\n",
"3 Yacine Adli Milan\n",
"4 Michel Aebischer Bologna\n",
".. ... ...\n",
"567 Ciprian Tătărușanu Milan\n",
"568 Pietro Terracciano Fiorentina\n",
"569 Guglielmo Vicario Empoli\n",
"570 Jeroen Zoet Spezia\n",
"571 Petar Zovko Spezia\n",
"\n",
"[572 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",
"keepers_ID = len(outfield_players)\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 Oliver Abildgaard Abildgaard\n",
"1 Tammy Abraham Abraham\n",
"2 Francesco Acerbi Acerbi\n",
"3 Yacine Adli Adli\n",
"4 Michel Aebischer Aebischer\n",
"5 Felix Afena-Gyan Afena-Gyan\n",
"6 Kevin Agudelo Agudelo\n",
"7 Ola Aina Aina\n",
"8 Emanuel Aiwum Aiwum\n",
"9 Jean-Daniel Akpa-Akpro Akpa-Akpro\n",
"10 Luis Alberto Alberto\n",
"11 Agustín Álvarez Martínez Martinez\n",
"12 Kelvin Amian Amian\n",
"13 Bruno Amione Amione\n",
"14 Bruno Amione Amione\n",
"15 Ethan Ampadu Ampadu\n",
"16 Sofyan Amrabat Amrabat\n",
"17 Felipe Anderson Anderson\n",
"18 Janis Antiste Antiste\n",
"19 Marcos Antônio Antonio\n",
"20 Valentin Antov Antov\n",
"21 Marko Arnautović Arnautovic\n",
"22 Tolgay Arslan Arslan\n",
"23 Arthur Arthur\n",
"24 Santiago Ascacíbar Ascacibar\n",
"25 Kristoffer Askildsen Askildsen\n",
"26 Kristjan Asllani Asllani\n",
"27 Emil Audero Audero\n",
"28 Tommaso Augello Augello\n",
"29 Kaan Ayhan Ayhan\n",
"30 Jaime Báez Baez\n",
"31 Nedim Bajrami Bajrami\n",
"32 Nedim Bajrami Bajrami\n",
"33 Tommaso Baldanzi Baldanzi\n",
"34 Fodé Ballo-Touré Ballo-Toure\n",
"35 Lameck Banda Banda\n",
"36 Filippo Bandinelli Bandinelli\n",
"37 Antonín Barák Barak\n",
"38 Antonín Barák Barak\n",
"39 Andrea Barberis Barberis\n",
"40 Nicolò Barella Barella\n",
"41 Musa Barrow Barrow\n",
"42 Federico Baschirotto Baschirotto\n",
"43 Toma Bašić Basic\n",
"44 Alessandro Bastoni Bastoni\n",
"45 Simone Bastoni Bastoni\n",
"46 Brian Bayeye Bayeye\n",
"47 Rodrigo Becão Becao\n",
"48 Julius Beck Beck\n",
"49 Raoul Bellanova Bellanova\n",
"50 Andrea Belotti Belotti\n",
"51 Marco Benassi Benassi\n",
"52 Marco Benassi Benassi\n",
"53 Ismaël Bennacer Bennacer\n",
"54 Domenico Berardi Berardi\n",
"55 Bartosz Bereszyński Bereszynski\n",
"56 Beto Beto\n",
"57 Matteo Bianchetti Bianchetti\n",
"58 Alessandro Bianco Bianco\n",
"59 Jaka Bijol Bijol\n",
"60 Cristiano Biraghi Biraghi\n",
"61 Samuele Birindelli Birindelli\n",
"62 Kristijan Bistrović Bistrovic\n",
"63 Alexis Blin Blin\n",
"64 Jeremie Boga Boga\n",
"65 Emil Bohinen Bohinen\n",
"66 Giacomo Bonaventura Bonaventura\n",
"67 Federico Bonazzoli Bonazzoli\n",
"68 Warren Bondo Bondo\n",
"69 Kevin Bonifazi Bonifazi\n",
"70 Leonardo Bonucci Bonucci\n",
"71 Erik Botheim Botheim\n",
"72 Mehdi Bourabia Bourabia\n",
"73 Edoardo Bove Bove\n",
"74 Jayden Braaf Braaf\n",
"75 Domagoj Bradarić Bradaric\n",
"76 Josip Brekalo Brekalo\n",
"77 Gleison Bremer Bremer\n",
"78 Dylan Bronn Bronn\n",
"79 Marcelo Brozović Brozovic\n",
"80 Cristian Buonaiuto Buonaiuto\n",
"81 Alessandro Buongiorno Buongiorno\n",
"82 Juan Cabal Cabal\n",
"83 Liberato Cacace Cacace\n",
"84 Davide Calabria Calabria\n",
"85 Mattia Caldara Caldara\n",
"86 Luca Caldirola Caldirola\n",
"87 Hakan Çalhanoğlu Calhanoglu\n",
"88 Mohamed Camara Camara\n",
"89 Nicolò Cambiaghi Cambiaghi\n",
"90 Andrea Cambiaso Cambiaso\n",
"91 Matteo Cancellieri Cancellieri\n",
"92 Antonio Candreva Candreva\n",
"93 Gianluca Caprari Caprari\n",
"94 Francesco Caputo Caputo\n",
"95 Francesco Caputo Caputo\n",
"96 Andrea Carboni Carboni\n",
"97 Valentin Carboni Carboni\n",
"98 Carlos Carlos\n",
"99 Marco Carnesecchi Carnesecchi\n",
"100 Nicolò Casale Casale\n",
"101 Michele Castagnetti Castagnetti\n",
"102 Gaetano Castrovilli Castrovilli\n",
"103 Danilo Cataldi Cataldi\n",
"104 Federico Ceccherini Ceccherini\n",
"105 Assan Ceesay Ceesay\n",
"106 Emil Ceide Ceide\n",
"107 Zeki Çelik Celik\n",
"108 Federico Chiesa Chiesa\n",
"109 Vlad Chiricheș Chiriches\n",
"110 Daniel Ciofani Ciofani\n",
"111 Tio Cipot Cipot\n",
"112 Patrick Ciurria Ciurria\n",
"113 Omar Colley Colley\n",
"114 Lorenzo Colombo Colombo\n",
"115 Andrea Colpani Colpani\n",
"116 Andrea Consigli Consigli\n",
"117 Andrea Conti Conti\n",
"118 Diego Coppola Coppola\n",
"119 Joaquín Correa Correa\n",
"120 Alessandro Cortinovis Cortinovis\n",
"121 Lassana Coulibaly Coulibaly\n",
"122 Bryan Cristante Cristante\n",
"123 Domen Črnigoj Crnigoj\n",
"124 Juan Cuadrado Cuadrado\n",
"125 Mickaël Cuisance Cuisance\n",
"126 Marco D'Alessandro DAlessandro\n",
"127 Danilo D'Ambrosio DAmbrosio\n",
"128 Luca D'Andrea DAndrea\n",
"129 Flavius Daniliuc Daniliuc\n",
"130 Danilo Danilo\n",
"131 Matteo Darmian Darmian\n",
"132 Paweł Dawidowicz Dawidowicz\n",
"133 Charles De Ketelaere Ketelaere\n",
"134 Manuel De Luca Luca\n",
"135 Mattia De Sciglio Sciglio\n",
"136 Lorenzo De Silvestri Silvestri\n",
"137 Koni De Winter Winter\n",
"138 Grégoire Defrel Defrel\n",
"139 Duccio Degli Innocenti Innocenti\n",
"140 Merih Demiral Demiral\n",
"141 Diego Demme Demme\n",
"142 Fabio Depaoli Depaoli\n",
"143 Fabio Depaoli Depaoli\n",
"144 Kastriot Dermaku Dermaku\n",
"145 Cyriel Dessers Dessers\n",
"146 Sergiño Dest Dest\n",
"147 Mattia Destro Destro\n",
"148 Gerard Deulofeu Deulofeu\n",
"149 Samuel Di Carmine Carmine\n",
"150 Federico Di Francesco Francesco\n",
"151 Michele Di Gregorio Gregorio\n",
"152 Giovanni Di Lorenzo Lorenzo\n",
"153 Ángel Di María Maria\n",
"154 Boulaye Dia Dia\n",
"155 Brahim Díaz Diaz\n",
"156 Federico Dimarco Dimarco\n",
"157 Koffi Djidji Djidji\n",
"158 Berat Djimsiti Djimsiti\n",
"159 Dodô Dodo\n",
"160 Josh Doig Doig\n",
"161 Nicolás Domínguez Dominguez\n",
"162 Giulio Donati Donati\n",
"163 Bartłomiej Drągowski Dragowski\n",
"164 Ondrej Duda Duda\n",
"165 Denzel Dumfries Dumfries\n",
"166 Alfred Duncan Duncan\n",
"167 Paulo Dybala Dybala\n",
"168 Edin Džeko Dzeko\n",
"169 Festy Ebosele Ebosele\n",
"170 Enzo Ebosse Ebosse\n",
"171 Tyronne Ebuehi Ebuehi\n",
"172 Éderson Ederson\n",
"173 Kingsley Ehizibue Ehizibue\n",
"174 Albin Ekdal Ekdal\n",
"175 Emmanuel Ekong Ekong\n",
"176 Mikael Ellertsson Ellertsson\n",
"177 Elif Elmas Elmas\n",
"178 Martin Erlic Erlic\n",
"179 Gonzalo Escalante Escalante\n",
"180 Salvatore Esposito Esposito\n",
"181 Nicolò Fagioli Fagioli\n",
"182 Wladimiro Falcone Falcone\n",
"183 Davide Faraoni Faraoni\n",
"184 Federico Fazio Fazio\n",
"185 Jacopo Fazzini Fazzini\n",
"186 Lewis Ferguson Ferguson\n",
"187 Alex Ferrari Ferrari\n",
"188 Alex Ferrari Ferrari\n",
"189 Salvador Ferrer Ferrer\n",
"190 Alessandro Florenzi Florenzi\n",
"191 Davide Frattesi Frattesi\n",
"192 Matteo Gabbia Gabbia\n",
"193 Manolo Gabbiadini Gabbiadini\n",
"194 Gianluca Gaetano Gaetano\n",
"195 Roberto Gagliardini Gagliardini\n",
"196 Adolfo Gaich Gaich\n",
"197 Pablo Galdames Millán Millan\n",
"198 Antonino Gallo Gallo\n",
"199 Federico Gatti Gatti\n",
"200 Valentin Gendrey Gendrey\n",
"201 Paolo Ghiglione Ghiglione\n",
"202 Mario Gila Gila\n",
"203 Olivier Giroud Giroud\n",
"204 Pierluigi Gollini Gollini\n",
"205 Joan Gonzàlez Gonzalez\n",
"206 Nicolás González Gonzalez\n",
"207 Robin Gosens Gosens\n",
"208 Alberto Grassi Grassi\n",
"209 Koray Günter Gunter\n",
"210 Emmanuel Gyasi Gyasi\n",
"211 Norbert Gyömbér Gyomber\n",
"212 Christian Gytkjær Gytkjr\n",
"213 Nicolas Haas Haas\n",
"214 Samir Handanović Handanovic\n",
"215 Abdou Harroui Harroui\n",
"216 Hans Hateboer Hateboer\n",
"217 Liam Henderson Henderson\n",
"218 Jack Hendry Hendry\n",
"219 Matheus Henrique Henrique\n",
"220 Thomas Henry Henry\n",
"221 Theo Hernández Hernandez\n",
"222 Isak Hien Hien\n",
"223 Morten Hjulmand Hjulmand\n",
"224 Emil Holm Holm\n",
"225 Martin Hongla Hongla\n",
"226 Petko Hristov Hristov\n",
"227 Ajdin Hrustic Hrustic\n",
"228 Elseid Hysaj Hysaj\n",
"229 Rasmus Højlund Hjlund\n",
"230 Roger Ibanez Ibanez\n",
"231 Igor Igor\n",
"232 Jonathan Ikone Ikone\n",
"233 Ivan Ilić Ilic\n",
"234 Samuel Iling-Junior Iling-Junior\n",
"235 Emirhan İlkhan Ilkhan\n",
"236 Ciro Immobile Immobile\n",
"237 Ardian Ismajli Ismajli\n",
"238 Armando Izzo Izzo\n",
"239 Mato Jajalo Jajalo\n",
"240 Juan Jesus Jesus\n",
"241 Þórir Jóhann Helgason Helgason\n",
"242 Luka Jović Jovic\n",
"243 Hamed Junior Traorè Traore\n",
"244 Yayah Kallon Kallon\n",
"245 Pierre Kalulu Kalulu\n",
"246 Yann Karamoh Karamoh\n",
"247 Rick Karsdorp Karsdorp\n",
"248 Denso Kasius Kasius\n",
"249 Grigoris Kastanos Kastanos\n",
"250 Moise Kean Kean\n",
"251 Jakub Kiwior Kiwior\n",
"252 Simon Kjær Kjr\n",
"253 Teun Koopmeiners Koopmeiners\n",
"254 Filip Kostić Kostic\n",
"255 Christian Kouamé Kouame\n",
"256 Viktor Kovalenko Kovalenko\n",
"257 Julian Kristoffersen Kristoffersen\n",
"258 Raimonds Krollis Krollis\n",
"259 Rade Krunić Krunic\n",
"260 Marash Kumbulla Kumbulla\n",
"261 Khvicha Kvaratskhelia Kvaratskhelia\n",
"262 Giorgos Kyriakopoulos Kyriakopoulos\n",
"263 Giorgos Kyriakopoulos Kyriakopoulos\n",
"264 Sam Lammers Lammers\n",
"265 Sam Lammers Lammers\n",
"266 Kevin Lasagna Lasagna\n",
"267 Armand Lauriente Lauriente\n",
"268 Valentino Lazaro Lazaro\n",
"269 Marko Lazetić Lazetic\n",
"270 Darko Lazović Lazovic\n",
"271 Manuel Lazzari Lazzari\n",
"272 Rafael Leão Leao\n",
"273 Mehdi Léris Leris\n",
"274 Karol Linetty Linetty\n",
"275 Marcin Listkowski Listkowski\n",
"276 Diego Llorente Llorente\n",
"277 Stanislav Lobotka Lobotka\n",
"278 Manuel Locatelli Locatelli\n",
"279 Luka Lochoshvili Lochoshvili\n",
"280 Ademola Lookman Lookman\n",
"281 Maxime Lopez Lopez\n",
"282 Matteo Lovato Lovato\n",
"283 Sandi Lovrić Lovric\n",
"284 Hirving Lozano Lozano\n",
"285 Jhon Lucumí Lucumi\n",
"286 José Luis Palomino Palomino\n",
"287 Romelu Lukaku Lukaku\n",
"288 Saša Lukić Lukic\n",
"289 Sebastiano Luperto Luperto\n",
"290 Charalambos Lykogiannis Lykogiannis\n",
"291 Giulio Maggiore Maggiore\n",
"292 Giangiacomo Magnani Magnani\n",
"293 Mike Maignan Maignan\n",
"294 Jean-Victor Makengo Makengo\n",
"295 Lorenzo Malagrida Malagrida\n",
"296 Daniel Maldini Maldini\n",
"297 Youssef Maleh Maleh\n",
"298 Youssef Maleh Maleh\n",
"299 Ruslan Malinovskyi Malinovskyi\n",
"300 Gianluca Mancini Mancini\n",
"301 Rolando Mandragora Mandragora\n",
"302 Riccardo Marchizza Marchizza\n",
"303 Gian Marco Ferrari Ferrari\n",
"304 Pablo Marí Mari\n",
"305 Răzvan Marin Marin\n",
"306 Marlon Marlon\n",
"307 Luca Marrone Marrone\n",
"308 Lautaro Martínez Martinez\n",
"309 Lucas Martínez Quarta Quarta\n",
"310 Adam Marušić Marusic\n",
"311 Adam Masina Masina\n",
"312 Nemanja Matić Matic\n",
"313 Luís Maximiano Maximiano\n",
"314 Pasquale Mazzocchi Mazzocchi\n",
"315 Weston McKennie McKennie\n",
"316 Gary Medel Medel\n",
"317 Soualiho Meïté Meite\n",
"318 Alex Meret Meret\n",
"319 Yıldırım Mert Çetin Cetin\n",
"320 Junior Messias Messias\n",
"321 Tommaso Milanese Milanese\n",
"322 Nikola Milenković Milenkovic\n",
"323 Arkadiusz Milik Milik\n",
"324 Sergej Milinković-Savić Milinkovic-Savic\n",
"325 Vanja Milinković-Savić Milinkovic-Savic\n",
"326 Kim Min-jae Min-jae\n",
"327 Aleksei Miranchuk Miranchuk\n",
"328 Fabio Miretti Miretti\n",
"329 Henrikh Mkhitaryan Mkhitaryan\n",
"330 Salvatore Molina Molina\n",
"331 Daniele Montevago Montevago\n",
"332 Lorenzo Montipò Montipo\n",
"333 Nikola Moro Moro\n",
"334 Dany Mota Mota\n",
"335 João Moutinho Moutinho\n",
"336 Mert Müldür Muldur\n",
"337 Luis Muriel Muriel\n",
"338 Jeison Murillo Murillo\n",
"339 Nicola Murru Murru\n",
"340 Juan Musso Musso\n",
"341 Joakim Mæhle Mhle\n",
"342 Michel Ndary Adopo Adopo\n",
"343 Tanguy Ndombele Ndombele\n",
"344 Ilija Nestorovski Nestorovski\n",
"345 Cyril Ngonge Ngonge\n",
"346 Hans Nicolussi Caviglia Caviglia\n",
"347 Dimitris Nikolaou Nikolaou\n",
"348 Bram Nuytinck Nuytinck\n",
"349 Bram Nuytinck Nuytinck\n",
"350 M'Bala Nzola Nzola\n",
"351 Pedro Obiang Obiang\n",
"352 Guillermo Ochoa Ochoa\n",
"353 David Okereke Okereke\n",
"354 Caleb Okoli Okoli\n",
"355 Mathías Olivera Olivera\n",
"356 André Onana Onana\n",
"357 Divock Origi Origi\n",
"358 Riccardo Orsolini Orsolini\n",
"359 Victor Osimhen Osimhen\n",
"360 Remi Oudin Oudin\n",
"361 Adam Ounas Ounas\n",
"362 Simone Pafundi Pafundi\n",
"363 Flavio Paoletti Paoletti\n",
"364 Leandro Paredes Paredes\n",
"365 Fabiano Parisi Parisi\n",
"366 Mario Pašalić Pasalic\n",
"367 Patric Patric\n",
"368 Rui Patrício Patricio\n",
"369 Pedro Pedro\n",
"370 Gianluca Pegolo Pegolo\n",
"371 Pietro Pellegri Pellegri\n",
"372 Lorenzo Pellegrini Pellegrini\n",
"373 Pepín Pepin\n",
"374 Roberto Pereyra Pereyra\n",
"375 Nehuén Pérez Perez\n",
"376 Mattia Perin Perin\n",
"377 Matteo Pessina Pessina\n",
"378 Andrea Petagna Petagna\n",
"379 Giuseppe Pezzella Pezzella\n",
"380 Krzysztof Piątek Piatek\n",
"381 Roberto Piccoli Piccoli\n",
"382 Roberto Piccoli Piccoli\n",
"383 Charles Pickel Pickel\n",
"384 Andrea Pinamonti Pinamonti\n",
"385 Lorenzo Pirola Pirola\n",
"386 Marko Pjaca Pjaca\n",
"387 Tommaso Pobega Pobega\n",
"388 Matteo Politano Politano\n",
"389 Marin Pongračić Pongracic\n",
"390 Stefan Posch Posch\n",
"391 Ivan Provedel Provedel\n",
"392 Ignacio Pussetto Pussetto\n",
"393 Niklas Pyyhtiä Pyyhtia\n",
"394 Fabio Quagliarella Quagliarella\n",
"395 Giacomo Quagliata Quagliata\n",
"396 Adrien Rabiot Rabiot\n",
"397 Nemanja Radonjić Radonjic\n",
"398 Ivan Radovanović Radovanovic\n",
"399 Ionuț Radu Radu\n",
"400 Luca Ranieri Ranieri\n",
"401 Andrea Ranocchia Ranocchia\n",
"402 Filippo Ranocchia Ranocchia\n",
"403 Giacomo Raspadori Raspadori\n",
"404 Giacomo Raspadori Raspadori\n",
"405 Ante Rebić Rebic\n",
"406 Arkadiusz Reca Reca\n",
"407 Panagiotis Retsos Retsos\n",
"408 Franck Ribéry Ribery\n",
"409 Samuele Ricci Ricci\n",
"410 Tomás Rincón Rincon\n",
"411 Pablo Rodríguez Rodriguez\n",
"412 Ricardo Rodríguez Rodriguez\n",
"413 Rogério Rogerio\n",
"414 Alessio Romagnoli Romagnoli\n",
"415 Luka Romero Romero\n",
"416 Marten de Roon Roon\n",
"417 Nicolò Rovella Rovella\n",
"418 Nicolò Rovella Rovella\n",
"419 Amir Rrahmani Rrahmani\n",
"420 Ruan Ruan\n",
"421 Daniele Rugani Rugani\n",
"422 Matteo Ruggeri Ruggeri\n",
"423 Mário Rui Rui\n",
"424 Abdelhamid Sabiri Sabiri\n",
"425 Alexis Saelemaekers Saelemaekers\n",
"426 Jacopo Sala Sala\n",
"427 Lazar Samardzic Samardzic\n",
"428 Junior Sambia Sambia\n",
"429 Antonio Sanabria Sanabria\n",
"430 Leandro Sanca Sanca\n",
"431 Alex Sandro Sandro\n",
"432 Nicola Sansone Sansone\n",
"433 Riccardo Saponara Saponara\n",
"434 Martin Satriano Satriano\n",
"435 Giorgio Scalvini Scalvini\n",
"436 Jerdy Schouten Schouten\n",
"437 Perr Schuurs Schuurs\n",
"438 Demba Seck Seck\n",
"439 Jacopo Segre Segre\n",
"440 Vivaldo Semedo Semedo\n",
"441 Stefano Sensi Sensi\n",
"442 Luigi Sepe Sepe\n",
"443 Leonardo Sernicola Sernicola\n",
"444 Stephan El Shaarawy Shaarawy\n",
"445 Eldor Shomurodov Shomurodov\n",
"446 Eldor Shomurodov Shomurodov\n",
"447 Marco Silvestri Silvestri\n",
"448 Giovanni Simeone Simeone\n",
"449 Wilfried Singo Singo\n",
"450 Leo Skiri Østigård stigard\n",
"451 Łukasz Skorupski Skorupski\n",
"452 Milan Škriniar Skriniar\n",
"453 Chris Smalling Smalling\n",
"454 Ola Solbakken Solbakken\n",
"455 Brandon Soppy Soppy\n",
"456 Brandon Soppy Soppy\n",
"457 Roberto Soriano Soriano\n",
"458 Joaquin Sosa Sosa\n",
"459 Riccardo Sottil Sottil\n",
"460 Matìas Soulé Soule\n",
"461 Adama Soumaoro Soumaoro\n",
"462 Leonardo Spinazzola Spinazzola\n",
"463 Marco Sportiello Sportiello\n",
"464 Petar Stojanović Stojanovic\n",
"465 Gabriel Strefezza Strefezza\n",
"466 Dávid Strelec Strelec\n",
"467 Isaac Success Success\n",
"468 Ibrahim Sulemana Sulemana\n",
"469 Wojciech Szczęsny Szczesny\n",
"470 Benjamin Tahirovic Tahirovic\n",
"471 Adrien Tameze Tameze\n",
"472 Ciprian Tătărușanu Tatarusanu\n",
"473 Filippo Terracciano Terracciano\n",
"474 Pietro Terracciano Terracciano\n",
"475 Aleksa Terzić Terzic\n",
"476 Florian Thauvin Thauvin\n",
"477 Malick Thiaw Thiaw\n",
"478 Kristian Thorstvedt Thorstvedt\n",
"479 Jeremy Toljan Toljan\n",
"480 Rafael Tolói Toloi\n",
"481 Fikayo Tomori Tomori\n",
"482 Sandro Tonali Tonali\n",
"483 William Troost-Ekong Troost-Ekong\n",
"484 Frank Tsadjout Tsadjout\n",
"485 Alessandro Tuia Tuia\n",
"486 Iyenoma Udogie Udogie\n",
"487 Samuel Umtiti Umtiti\n",
"488 Diego Valencia Valencia\n",
"489 Emanuele Valeri Valeri\n",
"490 Mattia Valoti Valoti\n",
"491 Johan Vásquez Vasquez\n",
"492 Matías Vecino Vecino\n",
"493 Miguel Veloso Veloso\n",
"494 Lorenzo Venuti Venuti\n",
"495 Daniele Verde Verde\n",
"496 Simone Verdi Verdi\n",
"497 Valerio Verre Verre\n",
"498 Guglielmo Vicario Vicario\n",
"499 Ronaldo Vieira Vieira\n",
"500 Ronaldo Vieira Vieira\n",
"501 Emanuel Vignato Vignato\n",
"502 Samuele Vignato Vignato\n",
"503 Tonny Vilhena Vilhena\n",
"504 Gonzalo Villar Villar\n",
"505 Matías Viña Vina\n",
"506 Dušan Vlahović Vlahovic\n",
"507 Nikola Vlašić Vlasic\n",
"508 Joel Voelkerling Persson Persson\n",
"509 Mërgim Vojvoda Vojvoda\n",
"510 Cristian Volpato Volpato\n",
"511 Aster Vranckx Vranckx\n",
"512 Stefan de Vrij Vrij\n",
"513 Walace Walace\n",
"514 Sebastian Walukiewicz Walukiewicz\n",
"515 Georginio Wijnaldum Wijnaldum\n",
"516 Harry Winks Winks\n",
"517 Przemysław Wiśniewski Wisniewski\n",
"518 Gerard Yepes Yepes\n",
"519 Mattia Zaccagni Zaccagni\n",
"520 Denis Zakaria Zakaria\n",
"521 Nicola Zalewski Zalewski\n",
"522 Andre-Frank Zambo Anguissa Anguissa\n",
"523 Luca Zanimacchia Zanimacchia\n",
"524 Nicolò Zaniolo Zaniolo\n",
"525 Alessandro Zanoli Zanoli\n",
"526 Alessandro Zanoli Zanoli\n",
"527 Duván Zapata Zapata\n",
"528 Davide Zappacosta Zappacosta\n",
"529 Alessio Zerbin Zerbin\n",
"530 Piotr Zieliński Zielinski\n",
"531 David Zima Zima\n",
"532 Joshua Zirkzee Zirkzee\n",
"533 Jeroen Zoet Zoet\n",
"534 Nadir Zortea Zortea\n",
"535 Nadir Zortea Zortea\n",
"536 Petar Zovko Zovko\n",
"537 Szymon Żurkowski Zurkowski\n",
"538 Szymon Żurkowski Zurkowski\n",
"539 Milan Đurić uric\n",
"540 Filip Đuričić uricic\n",
"541 Emil Audero Audero\n",
"542 Marco Carnesecchi Carnesecchi\n",
"543 Andrea Consigli Consigli\n",
"544 Michele Di Gregorio Gregorio\n",
"545 Bartłomiej Drągowski Dragowski\n",
"546 Wladimiro Falcone Falcone\n",
"547 Pierluigi Gollini Gollini\n",
"548 Samir Handanović Handanovic\n",
"549 Mike Maignan Maignan\n",
"550 Luís Maximiano Maximiano\n",
"551 Alex Meret Meret\n",
"552 Vanja Milinković-Savić Milinkovic-Savic\n",
"553 Lorenzo Montipò Montipo\n",
"554 Juan Musso Musso\n",
"555 Guillermo Ochoa Ochoa\n",
"556 André Onana Onana\n",
"557 Rui Patrício Patricio\n",
"558 Gianluca Pegolo Pegolo\n",
"559 Mattia Perin Perin\n",
"560 Ivan Provedel Provedel\n",
"561 Ionuț Radu Radu\n",
"562 Luigi Sepe Sepe\n",
"563 Marco Silvestri Silvestri\n",
"564 Łukasz Skorupski Skorupski\n",
"565 Marco Sportiello Sportiello\n",
"566 Wojciech Szczęsny Szczesny\n",
"567 Ciprian Tătărușanu Tatarusanu\n",
"568 Pietro Terracciano Terracciano\n",
"569 Guglielmo Vicario Vicario\n",
"570 Jeroen Zoet Zoet\n",
"571 Petar Zovko Zovko\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_16864\\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_16864\\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_16864\\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_16864\\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>4964</td>\n",
" <td>P</td>\n",
" <td>Vicario</td>\n",
" <td>Empoli</td>\n",
" <td>Vicario</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>453</td>\n",
" <td>P</td>\n",
" <td>Szczesny</td>\n",
" <td>Juventus</td>\n",
" <td>Szczesny</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2134</td>\n",
" <td>P</td>\n",
" <td>Falcone</td>\n",
" <td>Lecce</td>\n",
" <td>Falcone</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>538</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>539</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>540</th>\n",
" <td>6113</td>\n",
" <td>A</td>\n",
" <td>Montevago</td>\n",
" <td>Sampdoria</td>\n",
" <td>Montevago</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>541</th>\n",
" <td>6143</td>\n",
" <td>A</td>\n",
" <td>Krollis</td>\n",
" <td>Spezia</td>\n",
" <td>Krollis</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>542</th>\n",
" <td>6160</td>\n",
" <td>A</td>\n",
" <td>Vivaldo</td>\n",
" <td>Udinese</td>\n",
" <td>Vivaldo</td>\n",
" <td></td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>543 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 4964 P Vicario Empoli Vicario \n",
"3 453 P Szczesny Juventus Szczesny \n",
"4 2134 P Falcone Lecce Falcone \n",
".. ... .. ... ... ... ...\n",
"538 5512 A De Luca Sampdoria Luca \n",
"539 5837 A Voelkerling Persson Lecce Persson \n",
"540 6113 A Montevago Sampdoria Montevago \n",
"541 6143 A Krollis Spezia Krollis \n",
"542 6160 A Vivaldo Udinese Vivaldo \n",
"\n",
"[543 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_16864\\2200947104.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_16864\\2200947104.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['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",
" if((fc_players['r'][i] == 'P') == (j >= keepers_ID)): # check wether they're a goalkeeper for both FBREF and Fantacalcio\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 with their team. If that is the case, and there is data from their previous team, that is taken here.\n",
"\n",
"Others are ones for which the FBRef surname doesn't correspond to Fantacalcio one.\n",
"\n",
"\n",
"For example, Cabral is Arthur for FBref.\n",
"\n",
"Correction is made in the name_fix code above."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "18f6c5f2",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\nicol\\AppData\\Local\\Temp\\ipykernel_16864\\362391242.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"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gollini from previous team stats\n",
"Mirante not found\n",
"Sarr M. not found\n",
"Lamanna not found\n",
"Ujkani not found\n",
"Berisha not found\n",
"Marchetti not found\n",
"Perilli not found\n",
"Padelli not found\n",
"Perisan not found\n",
"Bardi not found\n",
"Cordaz not found\n",
"Pinsoglio not found\n",
"Fiorillo not found\n",
"Cragno not found\n",
"Sirigu not found\n",
"Cerofolini not found\n",
"Rossi F. not found\n",
"Ravaglia F. not found\n",
"Brancolini not found\n",
"Bleve not found\n",
"Berardi A. not found\n",
"Russo A. not found\n",
"Gemello not found\n",
"Ravaglia not found\n",
"Boer not found\n",
"Adamonis not found\n",
"Marfella not found\n",
"Piana not found\n",
"Bagnolini not found\n",
"Svilar not found\n",
"Sorrentino A. not found\n",
"Ciezkowski not found\n",
"Saro not found\n",
"Vasquez D. not found\n",
"Turk not found\n",
"Pellegrini Lu. not found\n",
"Gravillon not found\n",
"Gunter from previous team stats\n",
"Ceccaroni not found\n",
"Bereszynski from previous team stats\n",
"Aiwu not found\n",
"Zeefuik not found\n",
"Romagnoli S. not found\n",
"Tonelli not found\n",
"Radu from previous team stats\n",
"Paletta not found\n",
"Fares not found\n",
"Romagna not found\n",
"Cassandro not found\n",
"Amey not found\n",
"Zanotti not found\n",
"Buta not found\n",
"Abankwah not found\n",
"Guessand A. not found\n",
"Guarino not found\n",
"Pogba not found\n",
"Ilic from previous team stats\n",
"Machin not found\n",
"Akpa Akpro not found\n",
"Galdames not found\n",
"Vignato from previous team stats\n",
"Bakayoko not found\n",
"Darboe not found\n",
"Urbanski not found\n",
"Bertini not found\n",
"Trimboli not found\n",
"Samek not found\n",
"Ilkhan from previous team stats\n",
"Acella not found\n",
"Faticanti not found\n",
"Ibrahimovic not found\n",
"Oddei not found\n",
"Raimondo not found\n",
"Kaio Jorge not found\n",
"Vivaldo not found\n"
]
}
],
"source": [
"exceptions = ['pellegrini', 'berardi', 'romagnoli'] # exceptions for such players that have the same surname as others (Berardi A., Luca Pellegrini)\n",
"\n",
"for i in range(fc_players.shape[0]):\n",
" if(fc_players['fb_ID'][i] == -1):\n",
" found = False\n",
" for j in range(players.shape[0]):\n",
" if(fc_players['surname'][i].lower() == players['surname'][j].lower()):\n",
" if(not(players['surname'][j].lower() in exceptions)):\n",
" if((fc_players['r'][i] == 'P') == (j >= keepers_ID)):\n",
" fc_players['fb_ID'][i] = j\n",
" found = True\n",
" if(found):\n",
" print(fc_players['name'][i] + ' from previous team stats')\n",
" else:\n",
" print(fc_players['name'][i] + ' not found')"
]
},
{
"cell_type": "code",
"execution_count": 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>551</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>560</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>4964</td>\n",
" <td>P</td>\n",
" <td>Vicario</td>\n",
" <td>Empoli</td>\n",
" <td>Vicario</td>\n",
" <td></td>\n",
" <td>569</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>453</td>\n",
" <td>P</td>\n",
" <td>Szczesny</td>\n",
" <td>Juventus</td>\n",
" <td>Szczesny</td>\n",
" <td></td>\n",
" <td>566</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2134</td>\n",
" <td>P</td>\n",
" <td>Falcone</td>\n",
" <td>Lecce</td>\n",
" <td>Falcone</td>\n",
" <td></td>\n",
" <td>546</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>538</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>134</td>\n",
" </tr>\n",
" <tr>\n",
" <th>539</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>508</td>\n",
" </tr>\n",
" <tr>\n",
" <th>540</th>\n",
" <td>6113</td>\n",
" <td>A</td>\n",
" <td>Montevago</td>\n",
" <td>Sampdoria</td>\n",
" <td>Montevago</td>\n",
" <td></td>\n",
" <td>331</td>\n",
" </tr>\n",
" <tr>\n",
" <th>541</th>\n",
" <td>6143</td>\n",
" <td>A</td>\n",
" <td>Krollis</td>\n",
" <td>Spezia</td>\n",
" <td>Krollis</td>\n",
" <td></td>\n",
" <td>258</td>\n",
" </tr>\n",
" <tr>\n",
" <th>542</th>\n",
" <td>6160</td>\n",
" <td>A</td>\n",
" <td>Vivaldo</td>\n",
" <td>Udinese</td>\n",
" <td>Vivaldo</td>\n",
" <td></td>\n",
" <td>-1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>543 rows × 7 columns</p>\n",
"</div>"
],
"text/plain": [
" id r name team surname initial fb_ID\n",
"0 572 P Meret Napoli Meret 551\n",
"1 2814 P Provedel Lazio Provedel 560\n",
"2 4964 P Vicario Empoli Vicario 569\n",
"3 453 P Szczesny Juventus Szczesny 566\n",
"4 2134 P Falcone Lecce Falcone 546\n",
".. ... .. ... ... ... ... ...\n",
"538 5512 A De Luca Sampdoria Luca 134\n",
"539 5837 A Voelkerling Persson Lecce Persson 508\n",
"540 6113 A Montevago Sampdoria Montevago 331\n",
"541 6143 A Krollis Spezia Krollis 258\n",
"542 6160 A Vivaldo Udinese Vivaldo -1\n",
"\n",
"[543 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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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_16864\\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>551</td>\n",
" <td>25-325</td>\n",
" <td>1997</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>26.7</td>\n",
" <td>128</td>\n",
" <td>19.5</td>\n",
" <td>27.1</td>\n",
" <td>221</td>\n",
" <td>6</td>\n",
" <td>2.7</td>\n",
" <td>24</td>\n",
" <td>1.14</td>\n",
" <td>17.2</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>560</td>\n",
" <td>28-330</td>\n",
" <td>1994</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>33.0</td>\n",
" <td>120</td>\n",
" <td>34.2</td>\n",
" <td>34.5</td>\n",
" <td>279</td>\n",
" <td>7</td>\n",
" <td>2.5</td>\n",
" <td>39</td>\n",
" <td>1.86</td>\n",
" <td>18.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>4964</td>\n",
" <td>P</td>\n",
" <td>Vicario</td>\n",
" <td>Empoli</td>\n",
" <td>Vicario</td>\n",
" <td></td>\n",
" <td>569</td>\n",
" <td>26-126</td>\n",
" <td>1996</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>34.0</td>\n",
" <td>108</td>\n",
" <td>47.2</td>\n",
" <td>42.4</td>\n",
" <td>426</td>\n",
" <td>25</td>\n",
" <td>5.9</td>\n",
" <td>12</td>\n",
" <td>0.57</td>\n",
" <td>10.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>453</td>\n",
" <td>P</td>\n",
" <td>Szczesny</td>\n",
" <td>Juventus</td>\n",
" <td>Szczesny</td>\n",
" <td></td>\n",
" <td>566</td>\n",
" <td>32-298</td>\n",
" <td>1990</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>35.0</td>\n",
" <td>72</td>\n",
" <td>41.7</td>\n",
" <td>38.7</td>\n",
" <td>178</td>\n",
" <td>4</td>\n",
" <td>2.2</td>\n",
" <td>12</td>\n",
" <td>0.83</td>\n",
" <td>15.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2134</td>\n",
" <td>P</td>\n",
" <td>Falcone</td>\n",
" <td>Lecce</td>\n",
" <td>Falcone</td>\n",
" <td></td>\n",
" <td>546</td>\n",
" <td>27-304</td>\n",
" <td>1995</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>41.3</td>\n",
" <td>163</td>\n",
" <td>76.1</td>\n",
" <td>51.7</td>\n",
" <td>316</td>\n",
" <td>15</td>\n",
" <td>4.7</td>\n",
" <td>20</td>\n",
" <td>0.95</td>\n",
" <td>12.5</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>538</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>134</td>\n",
" <td>24-208</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>539</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>508</td>\n",
" <td>20-026</td>\n",
" <td>2003</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",
" <tr>\n",
" <th>540</th>\n",
" <td>6113</td>\n",
" <td>A</td>\n",
" <td>Montevago</td>\n",
" <td>Sampdoria</td>\n",
" <td>Montevago</td>\n",
" <td></td>\n",
" <td>331</td>\n",
" <td>19-329</td>\n",
" <td>2003</td>\n",
" <td>6</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>541</th>\n",
" <td>6143</td>\n",
" <td>A</td>\n",
" <td>Krollis</td>\n",
" <td>Spezia</td>\n",
" <td>Krollis</td>\n",
" <td></td>\n",
" <td>258</td>\n",
" <td>21-105</td>\n",
" <td>2001</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>542</th>\n",
" <td>6160</td>\n",
" <td>A</td>\n",
" <td>Vivaldo</td>\n",
" <td>Udinese</td>\n",
" <td>Vivaldo</td>\n",
" <td></td>\n",
" <td>-1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>543 rows × 158 columns</p>\n",
"</div>"
],
"text/plain": [
" id r name team surname initial fb_ID \\\n",
"0 572 P Meret Napoli Meret 551 \n",
"1 2814 P Provedel Lazio Provedel 560 \n",
"2 4964 P Vicario Empoli Vicario 569 \n",
"3 453 P Szczesny Juventus Szczesny 566 \n",
"4 2134 P Falcone Lecce Falcone 546 \n",
".. ... .. ... ... ... ... ... \n",
"538 5512 A De Luca Sampdoria Luca 134 \n",
"539 5837 A Voelkerling Persson Lecce Persson 508 \n",
"540 6113 A Montevago Sampdoria Montevago 331 \n",
"541 6143 A Krollis Spezia Krollis 258 \n",
"542 6160 A Vivaldo Udinese Vivaldo -1 \n",
"\n",
" age birth_year games ... gk_passes_length_avg gk_goal_kicks \\\n",
"0 25-325 1997 0 ... 26.7 128 \n",
"1 28-330 1994 0 ... 33.0 120 \n",
"2 26-126 1996 0 ... 34.0 108 \n",
"3 32-298 1990 0 ... 35.0 72 \n",
"4 27-304 1995 0 ... 41.3 163 \n",
".. ... ... ... ... ... ... \n",
"538 24-208 1998 1 ... 0.0 0 \n",
"539 20-026 2003 3 ... 0.0 0 \n",
"540 19-329 2003 6 ... 0.0 0 \n",
"541 21-105 2001 1 ... 0.0 0 \n",
"542 0 0 0 ... 0.0 0 \n",
"\n",
" gk_pct_goal_kicks_launched gk_goal_kick_length_avg gk_crosses \\\n",
"0 19.5 27.1 221 \n",
"1 34.2 34.5 279 \n",
"2 47.2 42.4 426 \n",
"3 41.7 38.7 178 \n",
"4 76.1 51.7 316 \n",
".. ... ... ... \n",
"538 0.0 0.0 0 \n",
"539 0.0 0.0 0 \n",
"540 0.0 0.0 0 \n",
"541 0.0 0.0 0 \n",
"542 0.0 0.0 0 \n",
"\n",
" gk_crosses_stopped gk_crosses_stopped_pct \\\n",
"0 6 2.7 \n",
"1 7 2.5 \n",
"2 25 5.9 \n",
"3 4 2.2 \n",
"4 15 4.7 \n",
".. ... ... \n",
"538 0 0.0 \n",
"539 0 0.0 \n",
"540 0 0.0 \n",
"541 0 0.0 \n",
"542 0 0.0 \n",
"\n",
" gk_def_actions_outside_pen_area gk_def_actions_outside_pen_area_per90 \\\n",
"0 24 1.14 \n",
"1 39 1.86 \n",
"2 12 0.57 \n",
"3 12 0.83 \n",
"4 20 0.95 \n",
".. ... ... \n",
"538 0 0.00 \n",
"539 0 0.00 \n",
"540 0 0.00 \n",
"541 0 0.00 \n",
"542 0 0.00 \n",
"\n",
" gk_avg_distance_def_actions \n",
"0 17.2 \n",
"1 18.2 \n",
"2 10.9 \n",
"3 15.8 \n",
"4 12.5 \n",
".. ... \n",
"538 0.0 \n",
"539 0.0 \n",
"540 0.0 \n",
"541 0.0 \n",
"542 0.0 \n",
"\n",
"[543 rows x 158 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.211716\n",
"vote_std 0.441335\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.261905</td>\n",
" <td>0.478566</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>6.261905</td>\n",
" <td>0.365769</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>6.476190</td>\n",
" <td>0.392677</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>6.033333</td>\n",
" <td>0.339935</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>6.309524</td>\n",
" <td>0.361089</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>6.285714</td>\n",
" <td>0.424585</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>6.000000</td>\n",
" <td>0.436436</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>6.115385</td>\n",
" <td>0.287820</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>6.366667</td>\n",
" <td>0.426875</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>6.142857</td>\n",
" <td>0.412393</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>6.178571</td>\n",
" <td>0.305143</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>6.357143</td>\n",
" <td>0.440315</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>6.375000</td>\n",
" <td>0.616610</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>6.261905</td>\n",
" <td>0.569441</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>6.285714</td>\n",
" <td>0.451754</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>6.261905</td>\n",
" <td>0.502826</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>6.119048</td>\n",
" <td>0.509546</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>6.105263</td>\n",
" <td>0.306892</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>6.131579</td>\n",
" <td>0.482376</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>5.972222</td>\n",
" <td>0.389880</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>5.928571</td>\n",
" <td>0.371154</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>6.062500</td>\n",
" <td>0.526634</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>6.071429</td>\n",
" <td>0.494872</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>6.428571</td>\n",
" <td>0.562429</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>6.500000</td>\n",
" <td>0.577350</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" vote_avg vote_std\n",
"0 6.261905 0.478566\n",
"1 6.261905 0.365769\n",
"2 6.476190 0.392677\n",
"3 6.033333 0.339935\n",
"4 6.309524 0.361089\n",
"5 6.285714 0.424585\n",
"6 6.000000 0.436436\n",
"7 6.115385 0.287820\n",
"8 6.366667 0.426875\n",
"9 6.142857 0.412393\n",
"10 6.178571 0.305143\n",
"11 6.357143 0.440315\n",
"12 6.375000 0.616610\n",
"13 6.261905 0.569441\n",
"14 6.285714 0.451754\n",
"15 6.261905 0.502826\n",
"16 6.119048 0.509546\n",
"17 6.105263 0.306892\n",
"18 6.131579 0.482376\n",
"19 5.972222 0.389880\n",
"20 5.928571 0.371154\n",
"21 6.062500 0.526634\n",
"22 6.071429 0.494872\n",
"23 6.428571 0.562429\n",
"24 6.500000 0.577350"
]
},
"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.261905</td>\n",
" <td>0.478566</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>6.261905</td>\n",
" <td>0.365769</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>6.476190</td>\n",
" <td>0.392677</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>6.033333</td>\n",
" <td>0.339935</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>6.309524</td>\n",
" <td>0.361089</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>538</th>\n",
" <td>5.947397</td>\n",
" <td>0.490100</td>\n",
" </tr>\n",
" <tr>\n",
" <th>539</th>\n",
" <td>5.694209</td>\n",
" <td>0.383547</td>\n",
" </tr>\n",
" <tr>\n",
" <th>540</th>\n",
" <td>5.623932</td>\n",
" <td>0.280948</td>\n",
" </tr>\n",
" <tr>\n",
" <th>541</th>\n",
" <td>6.124287</td>\n",
" <td>0.483769</td>\n",
" </tr>\n",
" <tr>\n",
" <th>542</th>\n",
" <td>6.215679</td>\n",
" <td>0.378965</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>543 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" vote_avg vote_std\n",
"0 6.261905 0.478566\n",
"1 6.261905 0.365769\n",
"2 6.476190 0.392677\n",
"3 6.033333 0.339935\n",
"4 6.309524 0.361089\n",
".. ... ...\n",
"538 5.947397 0.490100\n",
"539 5.694209 0.383547\n",
"540 5.623932 0.280948\n",
"541 6.124287 0.483769\n",
"542 6.215679 0.378965\n",
"\n",
"[543 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>551</td>\n",
" <td>25-325</td>\n",
" <td>1997</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>19.5</td>\n",
" <td>27.1</td>\n",
" <td>221</td>\n",
" <td>6</td>\n",
" <td>2.7</td>\n",
" <td>24</td>\n",
" <td>1.14</td>\n",
" <td>17.2</td>\n",
" <td>6.261905</td>\n",
" <td>0.478566</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>560</td>\n",
" <td>28-330</td>\n",
" <td>1994</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>34.2</td>\n",
" <td>34.5</td>\n",
" <td>279</td>\n",
" <td>7</td>\n",
" <td>2.5</td>\n",
" <td>39</td>\n",
" <td>1.86</td>\n",
" <td>18.2</td>\n",
" <td>6.261905</td>\n",
" <td>0.365769</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>4964</td>\n",
" <td>P</td>\n",
" <td>Vicario</td>\n",
" <td>Empoli</td>\n",
" <td>Vicario</td>\n",
" <td></td>\n",
" <td>569</td>\n",
" <td>26-126</td>\n",
" <td>1996</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>47.2</td>\n",
" <td>42.4</td>\n",
" <td>426</td>\n",
" <td>25</td>\n",
" <td>5.9</td>\n",
" <td>12</td>\n",
" <td>0.57</td>\n",
" <td>10.9</td>\n",
" <td>6.476190</td>\n",
" <td>0.392677</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>453</td>\n",
" <td>P</td>\n",
" <td>Szczesny</td>\n",
" <td>Juventus</td>\n",
" <td>Szczesny</td>\n",
" <td></td>\n",
" <td>566</td>\n",
" <td>32-298</td>\n",
" <td>1990</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>41.7</td>\n",
" <td>38.7</td>\n",
" <td>178</td>\n",
" <td>4</td>\n",
" <td>2.2</td>\n",
" <td>12</td>\n",
" <td>0.83</td>\n",
" <td>15.8</td>\n",
" <td>6.033333</td>\n",
" <td>0.339935</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2134</td>\n",
" <td>P</td>\n",
" <td>Falcone</td>\n",
" <td>Lecce</td>\n",
" <td>Falcone</td>\n",
" <td></td>\n",
" <td>546</td>\n",
" <td>27-304</td>\n",
" <td>1995</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>76.1</td>\n",
" <td>51.7</td>\n",
" <td>316</td>\n",
" <td>15</td>\n",
" <td>4.7</td>\n",
" <td>20</td>\n",
" <td>0.95</td>\n",
" <td>12.5</td>\n",
" <td>6.309524</td>\n",
" <td>0.361089</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>538</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>134</td>\n",
" <td>24-208</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.947397</td>\n",
" <td>0.490100</td>\n",
" </tr>\n",
" <tr>\n",
" <th>539</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>508</td>\n",
" <td>20-026</td>\n",
" <td>2003</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.694209</td>\n",
" <td>0.383547</td>\n",
" </tr>\n",
" <tr>\n",
" <th>540</th>\n",
" <td>6113</td>\n",
" <td>A</td>\n",
" <td>Montevago</td>\n",
" <td>Sampdoria</td>\n",
" <td>Montevago</td>\n",
" <td></td>\n",
" <td>331</td>\n",
" <td>19-329</td>\n",
" <td>2003</td>\n",
" <td>6</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0</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.623932</td>\n",
" <td>0.280948</td>\n",
" </tr>\n",
" <tr>\n",
" <th>541</th>\n",
" <td>6143</td>\n",
" <td>A</td>\n",
" <td>Krollis</td>\n",
" <td>Spezia</td>\n",
" <td>Krollis</td>\n",
" <td></td>\n",
" <td>258</td>\n",
" <td>21-105</td>\n",
" <td>2001</td>\n",
" <td>1</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0</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.124287</td>\n",
" <td>0.483769</td>\n",
" </tr>\n",
" <tr>\n",
" <th>542</th>\n",
" <td>6160</td>\n",
" <td>A</td>\n",
" <td>Vivaldo</td>\n",
" <td>Udinese</td>\n",
" <td>Vivaldo</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.215679</td>\n",
" <td>0.378965</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>543 rows × 160 columns</p>\n",
"</div>"
],
"text/plain": [
" id r name team surname initial fb_ID \\\n",
"0 572 P Meret Napoli Meret 551 \n",
"1 2814 P Provedel Lazio Provedel 560 \n",
"2 4964 P Vicario Empoli Vicario 569 \n",
"3 453 P Szczesny Juventus Szczesny 566 \n",
"4 2134 P Falcone Lecce Falcone 546 \n",
".. ... .. ... ... ... ... ... \n",
"538 5512 A De Luca Sampdoria Luca 134 \n",
"539 5837 A Voelkerling Persson Lecce Persson 508 \n",
"540 6113 A Montevago Sampdoria Montevago 331 \n",
"541 6143 A Krollis Spezia Krollis 258 \n",
"542 6160 A Vivaldo Udinese Vivaldo -1 \n",
"\n",
" age birth_year games ... gk_pct_goal_kicks_launched \\\n",
"0 25-325 1997 0 ... 19.5 \n",
"1 28-330 1994 0 ... 34.2 \n",
"2 26-126 1996 0 ... 47.2 \n",
"3 32-298 1990 0 ... 41.7 \n",
"4 27-304 1995 0 ... 76.1 \n",
".. ... ... ... ... ... \n",
"538 24-208 1998 1 ... 0.0 \n",
"539 20-026 2003 3 ... 0.0 \n",
"540 19-329 2003 6 ... 0.0 \n",
"541 21-105 2001 1 ... 0.0 \n",
"542 0 0 0 ... 0.0 \n",
"\n",
" gk_goal_kick_length_avg gk_crosses gk_crosses_stopped \\\n",
"0 27.1 221 6 \n",
"1 34.5 279 7 \n",
"2 42.4 426 25 \n",
"3 38.7 178 4 \n",
"4 51.7 316 15 \n",
".. ... ... ... \n",
"538 0.0 0 0 \n",
"539 0.0 0 0 \n",
"540 0.0 0 0 \n",
"541 0.0 0 0 \n",
"542 0.0 0 0 \n",
"\n",
" gk_crosses_stopped_pct gk_def_actions_outside_pen_area \\\n",
"0 2.7 24 \n",
"1 2.5 39 \n",
"2 5.9 12 \n",
"3 2.2 12 \n",
"4 4.7 20 \n",
".. ... ... \n",
"538 0.0 0 \n",
"539 0.0 0 \n",
"540 0.0 0 \n",
"541 0.0 0 \n",
"542 0.0 0 \n",
"\n",
" gk_def_actions_outside_pen_area_per90 gk_avg_distance_def_actions \\\n",
"0 1.14 17.2 \n",
"1 1.86 18.2 \n",
"2 0.57 10.9 \n",
"3 0.83 15.8 \n",
"4 0.95 12.5 \n",
".. ... ... \n",
"538 0.00 0.0 \n",
"539 0.00 0.0 \n",
"540 0.00 0.0 \n",
"541 0.00 0.0 \n",
"542 0.00 0.0 \n",
"\n",
" vote_avg vote_std \n",
"0 6.261905 0.478566 \n",
"1 6.261905 0.365769 \n",
"2 6.476190 0.392677 \n",
"3 6.033333 0.339935 \n",
"4 6.309524 0.361089 \n",
".. ... ... \n",
"538 5.947397 0.490100 \n",
"539 5.694209 0.383547 \n",
"540 5.623932 0.280948 \n",
"541 6.124287 0.483769 \n",
"542 6.215679 0.378965 \n",
"\n",
"[543 rows x 160 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_shots_on_target_against'"
]
},
"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": [
"Zoet, 0.5\n",
"Pegolo, 0.33333333333333337\n",
"Gollini, 0.5\n",
"Mirante, 0.0\n",
"Sarr M., 0.0\n",
"Lamanna, 0.0\n",
"Ujkani, 0.0\n",
"Berisha, 0.0\n",
"Marchetti, 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",
"Cragno, 0.0\n",
"Sirigu, 0.0\n",
"Cerofolini, 0.0\n",
"Rossi F., 0.0\n",
"Ravaglia F., 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",
"Boer, 0.0\n",
"Adamonis, 0.0\n",
"Marfella, 0.0\n",
"Zovko, 0.16666666666666663\n",
"Piana, 0.0\n",
"Bagnolini, 0.0\n",
"Luis Maximiano, 0.16666666666666663\n",
"Svilar, 0.0\n",
"Sorrentino A., 0.0\n",
"Ciezkowski, 0.0\n",
"Saro, 0.0\n",
"Vasquez D., 0.0\n",
"Turk, 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>551</td>\n",
" <td>25-325</td>\n",
" <td>1997</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>19.5</td>\n",
" <td>27.1</td>\n",
" <td>221.0</td>\n",
" <td>6.0</td>\n",
" <td>2.7</td>\n",
" <td>24.0</td>\n",
" <td>1.14</td>\n",
" <td>17.2</td>\n",
" <td>6.261905</td>\n",
" <td>0.478566</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>560</td>\n",
" <td>28-330</td>\n",
" <td>1994</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>34.2</td>\n",
" <td>34.5</td>\n",
" <td>279.0</td>\n",
" <td>7.0</td>\n",
" <td>2.5</td>\n",
" <td>39.0</td>\n",
" <td>1.86</td>\n",
" <td>18.2</td>\n",
" <td>6.261905</td>\n",
" <td>0.365769</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>4964</td>\n",
" <td>P</td>\n",
" <td>Vicario</td>\n",
" <td>Empoli</td>\n",
" <td>Vicario</td>\n",
" <td></td>\n",
" <td>569</td>\n",
" <td>26-126</td>\n",
" <td>1996</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>47.2</td>\n",
" <td>42.4</td>\n",
" <td>426.0</td>\n",
" <td>25.0</td>\n",
" <td>5.9</td>\n",
" <td>12.0</td>\n",
" <td>0.57</td>\n",
" <td>10.9</td>\n",
" <td>6.476190</td>\n",
" <td>0.392677</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>453</td>\n",
" <td>P</td>\n",
" <td>Szczesny</td>\n",
" <td>Juventus</td>\n",
" <td>Szczesny</td>\n",
" <td></td>\n",
" <td>566</td>\n",
" <td>32-298</td>\n",
" <td>1990</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>41.7</td>\n",
" <td>38.7</td>\n",
" <td>178.0</td>\n",
" <td>4.0</td>\n",
" <td>2.2</td>\n",
" <td>12.0</td>\n",
" <td>0.83</td>\n",
" <td>15.8</td>\n",
" <td>6.033333</td>\n",
" <td>0.339935</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2134</td>\n",
" <td>P</td>\n",
" <td>Falcone</td>\n",
" <td>Lecce</td>\n",
" <td>Falcone</td>\n",
" <td></td>\n",
" <td>546</td>\n",
" <td>27-304</td>\n",
" <td>1995</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>76.1</td>\n",
" <td>51.7</td>\n",
" <td>316.0</td>\n",
" <td>15.0</td>\n",
" <td>4.7</td>\n",
" <td>20.0</td>\n",
" <td>0.95</td>\n",
" <td>12.5</td>\n",
" <td>6.309524</td>\n",
" <td>0.361089</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>538</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>134</td>\n",
" <td>24-208</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.947397</td>\n",
" <td>0.490100</td>\n",
" </tr>\n",
" <tr>\n",
" <th>539</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>508</td>\n",
" <td>20-026</td>\n",
" <td>2003</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.694209</td>\n",
" <td>0.383547</td>\n",
" </tr>\n",
" <tr>\n",
" <th>540</th>\n",
" <td>6113</td>\n",
" <td>A</td>\n",
" <td>Montevago</td>\n",
" <td>Sampdoria</td>\n",
" <td>Montevago</td>\n",
" <td></td>\n",
" <td>331</td>\n",
" <td>19-329</td>\n",
" <td>2003</td>\n",
" <td>6</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>5.623932</td>\n",
" <td>0.280948</td>\n",
" </tr>\n",
" <tr>\n",
" <th>541</th>\n",
" <td>6143</td>\n",
" <td>A</td>\n",
" <td>Krollis</td>\n",
" <td>Spezia</td>\n",
" <td>Krollis</td>\n",
" <td></td>\n",
" <td>258</td>\n",
" <td>21-105</td>\n",
" <td>2001</td>\n",
" <td>1</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>6.124287</td>\n",
" <td>0.483769</td>\n",
" </tr>\n",
" <tr>\n",
" <th>542</th>\n",
" <td>6160</td>\n",
" <td>A</td>\n",
" <td>Vivaldo</td>\n",
" <td>Udinese</td>\n",
" <td>Vivaldo</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.215679</td>\n",
" <td>0.378965</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>543 rows × 160 columns</p>\n",
"</div>"
],
"text/plain": [
" id r name team surname initial fb_ID \\\n",
"0 572 P Meret Napoli Meret 551 \n",
"1 2814 P Provedel Lazio Provedel 560 \n",
"2 4964 P Vicario Empoli Vicario 569 \n",
"3 453 P Szczesny Juventus Szczesny 566 \n",
"4 2134 P Falcone Lecce Falcone 546 \n",
".. ... .. ... ... ... ... ... \n",
"538 5512 A De Luca Sampdoria Luca 134 \n",
"539 5837 A Voelkerling Persson Lecce Persson 508 \n",
"540 6113 A Montevago Sampdoria Montevago 331 \n",
"541 6143 A Krollis Spezia Krollis 258 \n",
"542 6160 A Vivaldo Udinese Vivaldo -1 \n",
"\n",
" age birth_year games ... gk_pct_goal_kicks_launched \\\n",
"0 25-325 1997 0 ... 19.5 \n",
"1 28-330 1994 0 ... 34.2 \n",
"2 26-126 1996 0 ... 47.2 \n",
"3 32-298 1990 0 ... 41.7 \n",
"4 27-304 1995 0 ... 76.1 \n",
".. ... ... ... ... ... \n",
"538 24-208 1998 1 ... 0.0 \n",
"539 20-026 2003 3 ... 0.0 \n",
"540 19-329 2003 6 ... 0.0 \n",
"541 21-105 2001 1 ... 0.0 \n",
"542 0 0 0 ... 0.0 \n",
"\n",
" gk_goal_kick_length_avg gk_crosses gk_crosses_stopped \\\n",
"0 27.1 221.0 6.0 \n",
"1 34.5 279.0 7.0 \n",
"2 42.4 426.0 25.0 \n",
"3 38.7 178.0 4.0 \n",
"4 51.7 316.0 15.0 \n",
".. ... ... ... \n",
"538 0.0 0.0 0.0 \n",
"539 0.0 0.0 0.0 \n",
"540 0.0 0.0 0.0 \n",
"541 0.0 0.0 0.0 \n",
"542 0.0 0.0 0.0 \n",
"\n",
" gk_crosses_stopped_pct gk_def_actions_outside_pen_area \\\n",
"0 2.7 24.0 \n",
"1 2.5 39.0 \n",
"2 5.9 12.0 \n",
"3 2.2 12.0 \n",
"4 4.7 20.0 \n",
".. ... ... \n",
"538 0.0 0.0 \n",
"539 0.0 0.0 \n",
"540 0.0 0.0 \n",
"541 0.0 0.0 \n",
"542 0.0 0.0 \n",
"\n",
" gk_def_actions_outside_pen_area_per90 gk_avg_distance_def_actions \\\n",
"0 1.14 17.2 \n",
"1 1.86 18.2 \n",
"2 0.57 10.9 \n",
"3 0.83 15.8 \n",
"4 0.95 12.5 \n",
".. ... ... \n",
"538 0.00 0.0 \n",
"539 0.00 0.0 \n",
"540 0.00 0.0 \n",
"541 0.00 0.0 \n",
"542 0.00 0.0 \n",
"\n",
" vote_avg vote_std \n",
"0 6.261905 0.478566 \n",
"1 6.261905 0.365769 \n",
"2 6.476190 0.392677 \n",
"3 6.033333 0.339935 \n",
"4 6.309524 0.361089 \n",
".. ... ... \n",
"538 5.947397 0.490100 \n",
"539 5.694209 0.383547 \n",
"540 5.623932 0.280948 \n",
"541 6.124287 0.483769 \n",
"542 6.215679 0.378965 \n",
"\n",
"[543 rows x 160 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
}