{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# TransferMarkt Player Bio and Status Data Engineering\n", "##### Notebook to engineer data scraped from [TransferMarkt](https://www.transfermarkt.co.uk/) using the [Tyrone Mings web scraper](https://github.com/FCrSTATS/tyrone_mings) by [FCrSTATS](https://twitter.com/FC_rstats).\n", "\n", "### By [Edd Webster](https://www.twitter.com/eddwebster)\n", "Notebook first written: 13/09/2020
\n", "Notebook last updated: 30/08/2021\n", "\n", "![title](../../img/transfermarkt-logo-banner.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "___\n", "\n", "\n", "\n", "## Introduction\n", "This notebook engineers previously scraped data from [TransferMarkt](https://www.transfermarkt.co.uk/) using the [FCrSTATS](https://twitter.com/FC_rstats) [Tyrone Mings webscraper](https://github.com/FCrSTATS/tyrone_mings) and manipulates this landed data as DataFrames using [pandas](http://pandas.pydata.org/) and [matplotlib](https://matplotlib.org/) for visualisation.\n", "\n", "For more information about this notebook and the author, I'm available through all the following channels:\n", "* [eddwebster.com](https://www.eddwebster.com/);\n", "* edd.j.webster@gmail.com;\n", "* [@eddwebster](https://www.twitter.com/eddwebster);\n", "* [linkedin.com/in/eddwebster](https://www.linkedin.com/in/eddwebster/);\n", "* [github/eddwebster](https://github.com/eddwebster/);\n", "* [public.tableau.com/profile/edd.webster](https://public.tableau.com/profile/edd.webster);\n", "* [kaggle.com/eddwebster](https://www.kaggle.com/eddwebster); and\n", "* [hackerrank.com/eddwebster](https://www.hackerrank.com/eddwebster).\n", "\n", "![title](../../img/fifa21eddwebsterbanner.png)\n", "\n", "The accompanying GitHub repository for this notebook can be found [here](https://github.com/eddwebster/football_analytics) and a static version of this notebook can be found [here](https://nbviewer.jupyter.org/github/eddwebster/football_analytics/blob/master/notebooks/A%29%20Web%20Scraping/TransferMarkt%20Web%20Scraping%20and%20Parsing.ipynb)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "___\n", "\n", "\n", "\n", "## Notebook Contents\n", "1. [Notebook Dependencies](#section1)
\n", "2. [Project Brief](#section2)
\n", "3. [Data Sources](#section3)
\n", " 1. [Introduction](#section3.1)
\n", " 2. [Data Dictionary](#section3.2)
\n", " 3. [Creating the DataFrame](#section3.3)
\n", " 4. [Initial Data Handling](#section3.4)
\n", " 5. [Export the Raw DataFrame](#section3.5)
\n", "4. [Data Engineering](#section4)
\n", " 1. [Introduction](#section4.1)
\n", " 2. [Columns of Interest](#section4.2)
\n", " 3. [String Cleaning](#section4.3)
\n", " 4. [Converting Data Types](#section4.4)
\n", " 5. [Export the Engineered DataFrame](#section4.5)
\n", "5. [Exploratory Data Analysis (EDA)](#section5)
\n", " 1. [...](#section5.1)
\n", " 2. [...](#section5.2)
\n", " 3. [...](#section5.3)
\n", "6. [Summary](#section6)
\n", "7. [Next Steps](#section7)
\n", "8. [Bibliography](#section8)
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "___\n", "\n", "\n", "\n", "## 1. Notebook Dependencies\n", "This notebook was written using [Python 3](https://docs.python.org/3.7/) and requires the following libraries:\n", "* [`Jupyter notebooks`](https://jupyter.org/) for this notebook environment with which this project is presented;\n", "* [`NumPy`](http://www.numpy.org/) for multidimensional array computing;\n", "* [`pandas`](http://pandas.pydata.org/) for data analysis and manipulation;\n", "* [`Beautifulsoup`](https://pypi.org/project/beautifulsoup4/) for web scraping; and\n", "* [`matplotlib`](https://matplotlib.org/contents.html?v=20200411155018) for data visualisations;\n", "\n", "All packages used for this notebook except for BeautifulSoup can be obtained by downloading and installing the [Conda](https://anaconda.org/anaconda/conda) distribution, available on all platforms (Windows, Linux and Mac OSX). Step-by-step guides on how to install Anaconda can be found for Windows [here](https://medium.com/@GalarnykMichael/install-python-on-windows-anaconda-c63c7c3d1444) and Mac [here](https://medium.com/@GalarnykMichael/install-python-on-mac-anaconda-ccd9f2014072), as well as in the Anaconda documentation itself [here](https://docs.anaconda.com/anaconda/install/)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Import Libraries and Modules" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Setup Complete\n" ] } ], "source": [ "# Python ≥3.5 (ideally)\n", "import platform\n", "import sys, getopt\n", "assert sys.version_info >= (3, 5)\n", "import csv\n", "\n", "# Import Dependencies\n", "%matplotlib inline\n", "\n", "# Math Operations\n", "import numpy as np\n", "import math\n", "from math import pi\n", "\n", "# Datetime\n", "import datetime\n", "from datetime import date\n", "import time\n", "\n", "# Data Preprocessing\n", "import pandas as pd\n", "import os\n", "import re\n", "import random\n", "from io import BytesIO\n", "from pathlib import Path\n", "\n", "# Reading directories\n", "import glob\n", "import os\n", "from os.path import basename\n", "\n", "# Flatten lists\n", "from functools import reduce\n", "\n", "# Working with JSON\n", "import json\n", "from pandas.io.json import json_normalize\n", "\n", "# Web Scraping\n", "import requests\n", "from bs4 import BeautifulSoup\n", "import re\n", "\n", "# Currency Converter\n", "from currency_converter import CurrencyConverter\n", "\n", "# APIs\n", "from tyrone_mings import * \n", "\n", "# Fuzzy Matching - Record Linkage\n", "import recordlinkage\n", "import jellyfish\n", "import numexpr as ne\n", "\n", "# Data Visualisation\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "plt.style.use('seaborn-whitegrid')\n", "import missingno as msno\n", "\n", "# Progress Bar\n", "from tqdm import tqdm\n", "\n", "# Display in Jupyter\n", "from IPython.display import Image, YouTubeVideo\n", "from IPython.core.display import HTML\n", "\n", "# Ignore Warnings\n", "import warnings\n", "warnings.filterwarnings(action=\"ignore\", message=\"^internal gelsd\")\n", "\n", "print('Setup Complete')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Python: 3.7.6\n", "NumPy: 1.20.3\n", "pandas: 1.3.2\n", "matplotlib: 3.4.2\n", "Seaborn: 0.11.2\n" ] } ], "source": [ "# Python / module versions used here for reference\n", "print('Python: {}'.format(platform.python_version()))\n", "print('NumPy: {}'.format(np.__version__))\n", "print('pandas: {}'.format(pd.__version__))\n", "print('matplotlib: {}'.format(mpl.__version__))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defined Filepaths" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [], "source": [ "# Set up initial paths to subfolders\n", "base_dir = os.path.join('..', '..')\n", "data_dir = os.path.join(base_dir, 'data')\n", "data_dir_tm = os.path.join(base_dir, 'data', 'tm')\n", "img_dir = os.path.join(base_dir, 'img')\n", "fig_dir = os.path.join(base_dir, 'img', 'fig')\n", "video_dir = os.path.join(base_dir, 'video')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defined Variables" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Define today's date\n", "today = datetime.datetime.now().strftime('%d/%m/%Y').replace('/', '')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defined Lists" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [], "source": [ "# Defined Lists\n", "\n", "## Define list of league codes\n", "df_leagues = pd.read_csv(data_dir_tm + '/reference/tm_leagues_comps.csv')\n", "lst_league_codes = df_leagues['league_code'].to_numpy().tolist()\n", "\n", "## Define list of 'Big 5' European Leagues and MLS codes\n", "lst_big5_mls_league_codes = ['GB1', 'FR1', 'L1', 'IT1', 'ES1', 'MLS1']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Notebook Settings" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "pd.set_option('display.max_columns', None)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "\n", "\n", "## 2. Project Brief\n", "This Jupyter notebook is part of a series of notebooks to scrape, parse, engineer, unify, and the model, culminating in a an Expected Transfer (xTransfer) player performance vs. valuation model. This model aims to determine the under- and over-performing players based on their on-the-pitch output against transfer fee and wages.\n", "\n", "This particular notebook is one of several data eningeering notebooks, that cleans player bio and status (valuation) data from [TransferMarkt](https://www.transfermarkt.co.uk/) using [pandas](http://pandas.pydata.org/).\n", "\n", "[TransferMarkt](https://www.transfermarkt.co.uk/) is a German-based website owned by [Axel Springer](https://www.axelspringer.com/en/) and is the leading website for the football transfer market. The website posts football related data, including: scores and results, football news, transfer rumours, and most usefully for us - calculated estimates ofthe market values for teams and individual players.\n", "\n", "To read more about how these estimations are made, [Beyond crowd judgments: Data-driven estimation of market value in association football](https://www.sciencedirect.com/science/article/pii/S0377221717304332) by Oliver Müllera, Alexander Simons, and Markus Weinmann does an excellent job of explaining how the estimations are made and their level of accuracy.\n", "\n", "This notebook, along with the other notebooks in this project workflow are shown in the following diagram:\n", "\n", "![roadmap](../../img/football_analytics_data_roadmap.png)\n", "\n", "Links to these notebooks in the [`football_analytics`](https://github.com/eddwebster/football_analytics) GitHub repository can be found at the following:\n", "* [Webscraping](https://github.com/eddwebster/football_analytics/tree/master/notebooks/1_data_scraping)\n", " + [FBref Player Stats Webscraping](https://github.com/eddwebster/football_analytics/blob/master/notebooks/1_data_scraping/FBref%20Player%20Stats%20Web%20Scraping.ipynb)\n", " + [TransferMarket Player Bio and Status Webscraping](https://github.com/eddwebster/football_analytics/blob/master/notebooks/1_data_scraping/TransferMarkt%20Player%20Bio%20and%20Status%20Web%20Scraping.ipynb)\n", " + [TransferMarket Player Valuation Webscraping](https://github.com/eddwebster/football_analytics/blob/master/notebooks/1_data_scraping/TransferMarkt%20Player%20Valuation%20Web%20Scraping.ipynb)\n", " + [TransferMarkt Player Recorded Transfer Fees Webscraping](https://github.com/eddwebster/football_analytics/blob/master/notebooks/1_data_scraping/TransferMarkt%20Player%20Recorded%20Transfer%20Fees%20Webscraping.ipynb)\n", " + [Capology Player Salary Webscraping](https://github.com/eddwebster/football_analytics/blob/master/notebooks/1_data_scraping/Capology%20Player%20Salary%20Web%20Scraping.ipynb)\n", " + [FBref Team Stats Webscraping](https://github.com/eddwebster/football_analytics/blob/master/notebooks/1_data_scraping/FBref%20Team%20Stats%20Web%20Scraping.ipynb)\n", "* [Data Parsing](https://github.com/eddwebster/football_analytics/tree/master/notebooks/2_data_parsing)\n", " + [ELO Team Ratings Data Parsing](https://github.com/eddwebster/football_analytics/blob/master/notebooks/2_data_parsing/ELO%20Team%20Ratings%20Data%20Parsing.ipynb)\n", "* [Data Engineering](https://github.com/eddwebster/football_analytics/tree/master/notebooks/3_data_engineering)\n", " + [FBref Player Stats Data Engineering](https://github.com/eddwebster/football_analytics/blob/master/notebooks/3_data_engineering/FBref%20Player%20Stats%20Data%20Engineering.ipynb)\n", " + [TransferMarket Player Bio and Status Data Engineering](https://github.com/eddwebster/football_analytics/blob/master/notebooks/3_data_engineering/TransferMarkt%20Player%20Bio%20and%20Status%20Data%20Engineering.ipynb)\n", " + [TransferMarket Player Valuation Data Engineering](https://github.com/eddwebster/football_analytics/blob/master/notebooks/3_data_engineering/TransferMarkt%20Player%20Valuation%20Data%20Engineering.ipynb)\n", " + [TransferMarkt Player Recorded Transfer Fees Data Engineering](https://github.com/eddwebster/football_analytics/blob/master/notebooks/3_data_engineering/TransferMarkt%20Player%20Recorded%20Transfer%20Fees%20Data%20Engineering.ipynb)\n", " + [Capology Player Salary Data Engineering](https://github.com/eddwebster/football_analytics/blob/master/notebooks/3_data_engineering/Capology%20Player%20Salary%20Data%20Engineering.ipynb)\n", " + [FBref Team Stats Data Engineering](https://github.com/eddwebster/football_analytics/blob/master/notebooks/3_data_engineering/FBref%20Team%20Stats%20Data%20Engineering.ipynb)\n", " + [ELO Team Ratings Data Parsing](https://github.com/eddwebster/football_analytics/blob/master/notebooks/3_data_engineering/ELO%20Team%20Ratings%20Data%20Parsing.ipynb)\n", " + [TransferMarkt Team Recorded Transfer Fee Data Engineering](https://github.com/eddwebster/football_analytics/blob/master/notebooks/3_data_engineering/TransferMarkt%20Team%20Recorded%20Transfer%20Fee%20Data%20Engineering.ipynb) (aggregated from [TransferMarkt Player Recorded Transfer Fees notebook](https://github.com/eddwebster/football_analytics/blob/master/notebooks/3_data_engineering/TransferMarkt%20Player%20Recorded%20Transfer%20Fees%20Data%20Engineering.ipynb))\n", " + [Capology Team Salary Data Engineering](https://github.com/eddwebster/football_analytics/blob/master/notebooks/3_data_engineering/Capology%20Team%20Salary%20Data%20Engineering.ipynb) (aggregated from [Capology Player Salary notebook](https://github.com/eddwebster/football_analytics/blob/master/notebooks/3_data_engineering/Capology%20Player%20Salary%20Data%20Engineering.ipynb))\n", "* [Data Unification](https://github.com/eddwebster/football_analytics/tree/master/notebooks/4_data_unification)\n", " + [Golden ID for Player Level Datasets](https://github.com/eddwebster/football_analytics/blob/master/notebooks/4_data_unification/Golden%20ID%20for%20Player%20Level%20Datasets.ipynb)\n", " + [Golden ID for Team Level Datasets](https://github.com/eddwebster/football_analytics/blob/master/notebooks/4_data_unification/Golden%20ID%20for%20Team%20Level%20Datasets.ipynb)\n", "* [Production Datasets](https://github.com/eddwebster/football_analytics/tree/master/notebooks/5_production_datasets)\n", " + [Player Performance/Market Value Dataset](https://github.com/eddwebster/football_analytics/tree/master/notebooks/5_production_datasets/Player%20Performance/Market%20Value%20Dataset.ipynb)\n", " + [Team Performance/Market Value Dataset](https://github.com/eddwebster/football_analytics/tree/master/notebooks/5_production_datasets/Team%20Performance/Market%20Value%20Dataset.ipynb)\n", "* [Expected Transfer (xTransfer) Modeling](https://github.com/eddwebster/football_analytics/tree/master/notebooks/6_data_analysis_and_projects/expected_transfer_modeling)\n", " + [Expected Transfer (xTransfer) Modeling](https://github.com/eddwebster/football_analytics/tree/master/notebooks/6_data_analysis_and_projects/expected_transfer_modeling/Expected%20Transfer%20%20Modeling.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "\n", "\n", "## 3. Data Sources" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "### 3.1. Introduction\n", "Before conducting our EDA, the data needs to be imported as a DataFrame in the Data Sources section [Section 3](#section3) and cleaned in the Data Engineering section [Section 4](#section4).\n", "\n", "We'll be using the [pandas](http://pandas.pydata.org/) library to import our data to this workbook as a DataFrame." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2. Bio and Status Dataset" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3.2.1. Data Dictionaries\n", "The [TransferMarkt](https://www.transfermarkt.co.uk/) dataset has six features (columns) with the following definitions and data types:\n", "\n", "| Feature | Data type |\n", "|------|-----|\n", "| `position_number` | object |\n", "| `position_description` | object |\n", "| `name` | object |\n", "| `dob` | object |\n", "| `nationality` | object |\n", "| `value` | object |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3.2.2. Import CSV files as pandas DataFrames" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Import Bio data" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Import DataFrame as a CSV file\n", "df_tm_bio_raw = pd.read_csv(data_dir_tm + f'/raw/bio/tm_player_bio_combined_latest.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Import Status data" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# Import DataFrame as a CSV file\n", "df_tm_status_raw = pd.read_csv(data_dir_tm + f'/raw/status/tm_player_status_combined_latest.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3.2.3. Preliminary Data Handling\n", "Let's quality of the dataset by looking first and last rows in pandas using the [head()](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.head.html) and [tail()](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.tail.html) methods." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Bio data" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
player_idplayer_nameday_of_birthmonth_of_birthyear_of_birthpobcobdobpositionheightfootcitizenshipsecond_citizenshipleague_codeseason
02963martín demichelis20.012.01980.0Justiniano PosseArgentina1980-12-20Defender - Centre-Back184.0rightNaNItalyES12016
15404jérémy mathieu29.010.01983.0Luxeuil-les-BainsFrance1983-10-29Defender - Centre-Back189.0leftFranceNaNES12016
25856daniele bonera31.05.01981.0BresciaItaly1981-05-31Defender - Centre-Back183.0rightItalyNaNES12016
37593fernando navarro25.06.01982.0BarcelonaSpain1982-06-25Defender - Left-Back176.0leftSpainNaNES12016
47600andrés iniesta11.05.01984.0FuentealbillaSpain1984-05-11midfield - Central Midfield171.0bothSpainNaNES12016
\n", "
" ], "text/plain": [ " player_id player_name day_of_birth month_of_birth year_of_birth \\\n", "0 2963 martín demichelis 20.0 12.0 1980.0 \n", "1 5404 jérémy mathieu 29.0 10.0 1983.0 \n", "2 5856 daniele bonera 31.0 5.0 1981.0 \n", "3 7593 fernando navarro 25.0 6.0 1982.0 \n", "4 7600 andrés iniesta 11.0 5.0 1984.0 \n", "\n", " pob cob dob position \\\n", "0 Justiniano Posse Argentina 1980-12-20 Defender - Centre-Back \n", "1 Luxeuil-les-Bains France 1983-10-29 Defender - Centre-Back \n", "2 Brescia Italy 1981-05-31 Defender - Centre-Back \n", "3 Barcelona Spain 1982-06-25 Defender - Left-Back \n", "4 Fuentealbilla Spain 1984-05-11 midfield - Central Midfield \n", "\n", " height foot citizenship second_citizenship league_code season \n", "0 184.0 right NaN Italy ES1 2016 \n", "1 189.0 left France NaN ES1 2016 \n", "2 183.0 right Italy NaN ES1 2016 \n", "3 176.0 left Spain NaN ES1 2016 \n", "4 171.0 both Spain NaN ES1 2016 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Display the first five rows of the raw DataFrame, df_tm_bio_raw\n", "df_tm_bio_raw.head()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
player_idplayer_nameday_of_birthmonth_of_birthyear_of_birthpobcobdobpositionheightfootcitizenshipsecond_citizenshipleague_codeseason
24206898751mamadou fall21.011.02002.0RufisqueSenegal2002-11-21Defender - Centre-Back189.0NaNSenegalNaNMLS12020
24207900440bryce washington12.09.01998.0Atlanta, GeorgiaUnited States1998-09-12Defender - Centre-Back188.0NaNUnited StatesNaNMLS12020
24208900569george asomani26.03.01999.0AccraGhana1999-03-26midfield - Defensive Midfield168.0NaNGhanaNaNMLS12020
24209905609arquimides ordonez5.08.02003.0Cincinnati, OhioUnited States2003-08-05attack - Centre-Forward188.0NaNNaNGuatemalaMLS12020
24210921655ismaël koné6.06.02002.0AbidjanCote d'Ivoire2002-06-06midfield - Central Midfield188.0NaNNaNCote d'IvoireMLS12020
\n", "
" ], "text/plain": [ " player_id player_name day_of_birth month_of_birth \\\n", "24206 898751 mamadou fall 21.0 11.0 \n", "24207 900440 bryce washington 12.0 9.0 \n", "24208 900569 george asomani 26.0 3.0 \n", "24209 905609 arquimides ordonez 5.0 8.0 \n", "24210 921655 ismaël koné 6.0 6.0 \n", "\n", " year_of_birth pob cob dob \\\n", "24206 2002.0 Rufisque Senegal 2002-11-21 \n", "24207 1998.0 Atlanta, Georgia United States 1998-09-12 \n", "24208 1999.0 Accra Ghana 1999-03-26 \n", "24209 2003.0 Cincinnati, Ohio United States 2003-08-05 \n", "24210 2002.0 Abidjan Cote d'Ivoire 2002-06-06 \n", "\n", " position height foot citizenship \\\n", "24206 Defender - Centre-Back 189.0 NaN Senegal \n", "24207 Defender - Centre-Back 188.0 NaN United States \n", "24208 midfield - Defensive Midfield 168.0 NaN Ghana \n", "24209 attack - Centre-Forward 188.0 NaN NaN \n", "24210 midfield - Central Midfield 188.0 NaN NaN \n", "\n", " second_citizenship league_code season \n", "24206 NaN MLS1 2020 \n", "24207 NaN MLS1 2020 \n", "24208 NaN MLS1 2020 \n", "24209 Guatemala MLS1 2020 \n", "24210 Cote d'Ivoire MLS1 2020 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Display the last five rows of the raw DataFrame, df_tm_bio_raw\n", "df_tm_bio_raw.tail()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(24211, 15)\n" ] } ], "source": [ "# Print the shape of the raw DataFrame, df_tm_bio_raw\n", "print(df_tm_bio_raw.shape)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index(['player_id', 'player_name', 'day_of_birth', 'month_of_birth',\n", " 'year_of_birth', 'pob', 'cob', 'dob', 'position', 'height', 'foot',\n", " 'citizenship', 'second_citizenship', 'league_code', 'season'],\n", " dtype='object')\n" ] } ], "source": [ "# Print the column names of the raw DataFrame, df_tm_bio_raw\n", "print(df_tm_bio_raw.columns)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The dataset has thirteen features (columns). Full details of these attributes can be found in the [Data Dictionary](section3.3.1)." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "player_id int64\n", "player_name object\n", "day_of_birth float64\n", "month_of_birth float64\n", "year_of_birth float64\n", "pob object\n", "cob object\n", "dob object\n", "position object\n", "height float64\n", "foot object\n", "citizenship object\n", "second_citizenship object\n", "league_code object\n", "season int64\n", "dtype: object" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Data types of the features of the raw DataFrame, df_tm_bio_raw\n", "df_tm_bio_raw.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All thirteen of the columns have the object data type. Full details of these attributes and their data types can be found in the [Data Dictionary](section3.3.1)." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 24211 entries, 0 to 24210\n", "Data columns (total 15 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 player_id 24211 non-null int64 \n", " 1 player_name 24211 non-null object \n", " 2 day_of_birth 24171 non-null float64\n", " 3 month_of_birth 24171 non-null float64\n", " 4 year_of_birth 24171 non-null float64\n", " 5 pob 23930 non-null object \n", " 6 cob 24172 non-null object \n", " 7 dob 24171 non-null object \n", " 8 position 24172 non-null object \n", " 9 height 23802 non-null float64\n", " 10 foot 22565 non-null object \n", " 11 citizenship 15651 non-null object \n", " 12 second_citizenship 8521 non-null object \n", " 13 league_code 24211 non-null object \n", " 14 season 24211 non-null int64 \n", "dtypes: float64(4), int64(2), object(9)\n", "memory usage: 2.8+ MB\n" ] } ], "source": [ "# Info for the raw DataFrame, df_tm_bio_raw\n", "df_tm_bio_raw.info()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
player_idday_of_birthmonth_of_birthyear_of_birthheightseason
count24211.00000024171.00000024171.00000024171.00000023802.00000024211.000000
mean249165.46660615.4008115.8404291993.637086182.2953952018.368551
std179097.3766908.7623923.4382284.9516686.7590161.637394
min26.0000001.0000001.0000001975.000000158.0000002016.000000
25%93604.0000008.0000003.0000001990.000000178.0000002017.000000
50%221150.00000015.0000005.0000001994.000000183.0000002018.000000
75%361104.00000023.0000009.0000001997.000000187.0000002020.000000
max921655.00000031.00000012.0000002006.000000202.0000002021.000000
\n", "
" ], "text/plain": [ " player_id day_of_birth month_of_birth year_of_birth \\\n", "count 24211.000000 24171.000000 24171.000000 24171.000000 \n", "mean 249165.466606 15.400811 5.840429 1993.637086 \n", "std 179097.376690 8.762392 3.438228 4.951668 \n", "min 26.000000 1.000000 1.000000 1975.000000 \n", "25% 93604.000000 8.000000 3.000000 1990.000000 \n", "50% 221150.000000 15.000000 5.000000 1994.000000 \n", "75% 361104.000000 23.000000 9.000000 1997.000000 \n", "max 921655.000000 31.000000 12.000000 2006.000000 \n", "\n", " height season \n", "count 23802.000000 24211.000000 \n", "mean 182.295395 2018.368551 \n", "std 6.759016 1.637394 \n", "min 158.000000 2016.000000 \n", "25% 178.000000 2017.000000 \n", "50% 183.000000 2018.000000 \n", "75% 187.000000 2020.000000 \n", "max 202.000000 2021.000000 " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Description of the raw DataFrame, df_tm_bio_raw, showing some summary statistics for each numberical column in the DataFrame\n", "df_tm_bio_raw.describe()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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evSQ2aavycOHD/n555/p0qULDRs2TPU7Pz8/zGYz48ePx9XVFScnJwwGA4sWLSJ37tzpVOKM7fLly1pAtHHjxgDUr1+fBQsWcOHCBVxdXZk4cSK7d+/m0aNHeHt7M2HCBNkD7jWQ+9bbw8XFhblz5zJgwAAcHR3JmTMnuXLlYvz48Xh5efHNN9+wcOFCIiIitNXtderUYePGjdjb25MrVy7atm2LwWCQ+khDVapUoW3btmzatEmbtHHnzh22bt3K2rVr/197dx5edXXnD/xzbyAgiqiAG264gdY62o4WtxqrHSt1Oq2tOtVORevug2tnbOPoqHVqa1VC1YoLSt2XOlXb2lpbQcVfLF1EcaOgiAsqCIIaAiH33t8fmtRASHKTe+/3S3i9nuc+hnu/5+SN3ycLeeecE0cccURUV1e3fj/Vt2/f2HDDDWPddddVgpbZa6+9Fq+//nqcffbZrb80s80220Q+n4999tknjjjiiLj33nsjn8/HiSeeGLvvvnt86lOfiojw/W+ZtJydeOmll7Z+D/X000/HU089FQ0NDfHNb34zJk2aFJMmTYrBgwf7N0kZtHwtOe2006J///7xrW99K4YOHRo77bRT9O/fPx555JEYPnx4fO9734uzzjorTjrppPjwww9jxowZMXv27Bg1alSb+dyT0vrDH/7Qup3xZz7zmYj4aEXoE088EX369InDDz88rr322rj99tujf//+0a9fv7jppptaV8IB5ec76F6mZX//o48+Ovr16xeDBw9u/cHCJptsEv/+7/8e+Xw+fvKTn8See+4ZBx10UFxzzTXx05/+NEaMGJFw+t7H/Ui3pUuXxgcffBD9+vWLiI/2zt5oo43ilFNOiZdffjnuv//+OPLII+OOO+6IZcuWxWabbda6F70fQJROy8fJt771rejbt29sttlmrQcCn3nmmZHL5WL8+PEREW2KuEsuuST69OnTetai394qnUKhEJdeemncc889cdBBB8X+++8fhx9+eOy///5x4IEHxuWXXx6jRo2KU089NQ499ND48MMPo1+/fjF8+HAfI2XQ1a8ll112WXz605+OmpqaVbbI9dum5ZHP5+PNN99s8/mn5fy3Dz/8MHK5XFx44YWRzWZj8ODBscsuuzgDroxyuVy89957rV/XV6xYEUOGDInTTjstzjvvvHjooYdi6623jiuvvDIiwoqeMvJ5K11qamri+uuvjxNPPDFGjhwZW2yxResP3vbbb78oFArxs5/9LH784x/HGWecEQcccEDrFuAt3I/S6t+/f7z88suRy+Vio402ivvvvz/OPffc2GOPPeKaa66J/v37x1e/+tXo06dPLF68OGbNmhXDhw9vXR3n+97yWbZsWSxcuHCVc8RWrFgRv/rVr2LOnDlx4YUXxgUXXBDbbLNN7L777q3XKRbKY/78+dGnT5/YYIMNYurUqfHrX/867r///thoo41i0aJFcfTRR8eDDz7Y+j2Af5OUR01NTVx33XVx/PHHR0TEUUcdFUOGDInRo0fHddddF0uWLGn9ZY58Ph8zZ86MoUOHtv7bnvJZvHhx9OvXL3bccceYNWtWTJ48OSZMmBC5XC6WL18ehx9+eNx3333x1ltvxbrrrhvDhw+PIUOGJB0b1ir+1dkLVVVVxcknnxx/+tOfYtasWfHOO++0vta/f/8YPXp0bL/99vHCCy9ERMQWW2wRl112mcODy8T9SK+WbwYfe+yxiPjozLGmpqYYPHhwnHDCCfH+++/HvffeG48++mgMGzYsstls6zkBlFZVVVWcdNJJMW3atJg5c2a89dZbra+dc845ccIJJ8RVV10V9957b7z77rsR8dH9arknfhBRWplMJs4+++y47rrr4u23347x48fHV7/61XjkkUdir732iq233jqmTJkSERFbbbVV7LzzzrHddtv5GCmjrnwt2WGHHeLZZ5+NiI/KhYiPCtWW8ZRedXV1DBw4MKZPn976/zybzUYmk4mddtopnnrqqRgyZEgcccQRceCBByrgymzQoEFRXV0dzzzzTERE9O3bt/Xr+jnnnBONjY1x3XXXxdVXX51w0rWDz1vpsu+++8bEiRPjhRdeiLlz57a5H5///Ofj1FNPjQEDBsTVV18dDz300Crj3Y/SO/PMM+Pqq6+O0aNHx4MPPhjjx4+P6667LkaOHBk//vGP45hjjonzzz8/Tj/99HjyySfj7LPPjv79+/u+t8yGDBkS/fr1i8mTJ7c+VygUorq6Ov7pn/4ppk2bFvvss0/cd999cc455ySYdO2x1157xcyZM2P06NFxxhlnxCOPPBLnn39+3HvvvXHdddfF7bffHkuWLPFvkgrYd99948Ybb4zrrrsu7rjjjmhqaorvfOc7seOOO8bQoUNjxYoVsXjx4pg6dWpceeWVsfHGG8fee++ddOxeb8cdd4zXXnstTjjhhDj++ONj3Lhxceihh8bEiRPj5ptvjnvvvTcWL17c+ktPCjioPCVcL1VTUxM///nPY968efHb3/42GhoaWl/bdNNNo3///rFw4cJVxvnHVXm4H+m0zTbbxJgxY+Lqq69u3eKi5WyxefPmxS677BLf+c534rDDDmsd4zfmy6empiYmTZrUej7P/PnzW19rKeLGjRsXTzzxRJtx7kl5bLDBBrH//vvHDTfcEJdffnkMHjw4xo0bFxMmTIinn346pk6d2u4496N8uvK1ZNGiRRHxj/vgB3XlteGGG8aZZ54Zv//97+PGG2+MiH/8P29oaIgdd9wxBgwYEBH/KBYon0033TSOO+64uOGGG1b5uv7222/HVlttFV/+8pfja1/7WkT4fFUJPm+ly1577RWTJk2KmTNnxu233x4LFixofe3zn/98nHLKKdHQ0LDK91qUx0477RT77LNPnHLKKXHIIYfE3XffHVdddVXcfPPNcfLJJ0dVVVW88MILsemmm8Zdd90VO+64Y9KR1wqbbLJJnHPOOfHAAw/E9ddfHxH/+Ly0ePHi2HbbbeP999+PT33qU63b5lJeo0aNiquuuip22WWXOO200+K2226Lo48+OoYNGxbLly+PbbbZJtZbb702Y3yNL59PFnETJkyIYcOGxYUXXhj77rtv3HDDDbH//vvHhRdeGH369Ilbb73VL5hXwK677hqXX355NDc3xwEHHBBXXHFFXHzxxfHP//zPMXDgwBg2bFjrv0mAZPi1kF7sc5/7XNxwww1xyimnRCaTiUMPPTQGDx4cf//736OhoSGGDx+edMS1ivuRTsccc0y8/vrr8f3vfz9effXVGDVqVDQ1NcVdd90VO++8c4wZM6Z1SyWlaPmNGjUqJk6cGN/5zneiT58+cfTRR8fGG28cER8dNLzpppu2Hh5MZWy44YYxatSoGDVqVDzyyCMxY8aMuPHGG+P++++PfffdNw499NCkI65VOvtass022yQdca1z0EEHxXHHHRfjxo2Lt956K0aPHh2ZTCZ++ctfxpIlS2LbbbeNCMVCpRx55JHx97//Pb7//e/H22+/HV/84hdj+fLl8dBDD8Xmm28eY8eOjUGDBiUdc63i81a6fPJ7rUwm0+Z7rf322y9+/OMfxy677JJwyrXLRhttFCeffHJERNx9993R1NQU3/3ud+M73/lOLF26NKqrq63oqbBDDz005s6dG3V1dTFnzpzYb7/9IiLilltuiQ033LDN0RHuTWUceOCBceCBB0ZExLvvvhsrVqyI2bNnx89//vPYbLPNYvPNN0844dqlpYhr2Zry5JNPjosuuijGjh0bL730Umy22WYxYsQI24JW0Je//OX44he/2LrDU8RHv1z+i1/8IrLZrDOpIWGZgl/L7fWeeOKJOOGEE2L77bePrbbaqvUblnvuuSf69u2bdLy1jvuRPu+9917ceeedcdNNN0Uul4sNNtgghg0bFjfffHP07dvXeWMJmDp1ahx//PFx8sknx9FHHx1Dhw5t87pv5Ctr5Y+BGTNmRF1dXQwbNiwuvvhiHyMJ8LUkXZYuXRq/+MUvYty4cRERMXDgwBgwYEDU1dXFyJEjE0639lm0aFFMmjQpbrrppujfv3+ss846UVVVFddee23stNNOScdba/m8lS6dfa/lF9Aq7913340JEybEo48+GnvssUf8+Mc/TjrSWq2xsTF+9atfxfjx46OxsTGGDBkSW265ZUyYMCH69u3rXNGEzJgxI4444ogYPHhwVFdXx8Ybbxy33nqre5KQlq8lJ510Uhx11FGrbL3unlTe22+/HUcccUQMGDAg+vXrFwsXLowbbrjB98CQsF5dwr3zzjsxevToGDt2bIwZMybpOIl66qmnYsyYMbHrrrvGoYceGt/+9rcj4qMD6/2jt/Lcj3SaN29eLFiwIKqrq/3WVgo8+eSTcfzxx8fRRx8dp512Wmy44YZJRyL+8UO53//+93H22WfH7373u9hiiy2SjrVW8rUkfd54442YM2dODBgwILbeemvnLSTs5ZdfjtmzZ8e6664bO+ywgzP5UsDnrXTxvVb6LFy4MK644op49tln4+abb16lHKXy5s+fH++991707ds3ttlmG/9GTFhTU1P86U9/ihdffDE22WSTOPTQQ6Oqqso9SZCvJemyfPny+MMf/hB/+tOfYtiwYfGlL30ptt5666RjwVqv15ZwDQ0Nceyxx8YzzzwT3//+99f6Ei4ior6+Po4//vg44YQT4rjjjov1118/6UhrNfcj/fzWVvIeffTRuP766+POO++00iplfvnLX8Zll10WEydOjJ133jnpOGstX0uANY3PW+nie630WbRoUeTz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U6fGv/zLv8S4ceOiT5+Pohx//PHxjW98Iy6++OI48MADo7q6unVMLpeLK664IiZOnNhh3jfffDPGjh0bzz//fFf+egAAAEDKKRjSoaVc2G233RLNAQD0TnfeeWdcf/313R7fkxJu9uzZcc4556y28HvppZfi3nvvjW233bbLc3aphPvDH/4QG220URxzzDFtnv/KV74SV111VUydOjXy+Xxks9nW1+67776YOnVqfP7zn4/HH398lTl///vfR0TE2LFjWwu4iIjtttsuRo8eHb/4xS9ixowZ8dnPfjYiIp5//vmora2Nl156KfbZZ5948skn2806adKk+OlPfxrLli2LUaNGxVNPPdWVvyIAAACQYlZepYtSND1ailEfIwD0Bvvss0/cdddd0dTUFBERmUymtXtqaGjodHwmk+n2+/7LX/4S++yzT4wdO3aVXzjK5XJRW1sb3/3ud+Puu+/u8pydlnC5XC5OOumk6NOnT5uSrUV1dXWsWLEiVqxYEf369YuIiPnz58ePfvSj+NrXvhYjR45st4Q75JBDYvjw4TF8+PB254yINqvoHn300Xjttdfiu9/9bhx33HGx8847t5v3lltuiWHDhsVFF10Ur776qhIOAAAAegGlTzrYZg8AKKctt9wyxo0bF4VCIbLZbGsJl81m4z/+4z86Hf/GG29ELpeLqqqqot/3v//7v6/2tYkTJ8aGG24YX/3qV0tbwlVVVa2yAq7Fyy+/HK+88kpstdVWrQVcRMRFF10Uffv2je9973tx//33tzv2S1/6UnzpS19a5fmmpqZ47LHHIiJi++23b33+gAMOiG9+85sxZMiQDvNedNFFsffee0dVVVW8+uqrnfztAAAAgDWBVT7p4n6kj6I6PZTVAB376U9/Gr/85S/LMvdf/vKX+K//+q+47LLLulXEtWfOnDkxceLEuO+++4oe26XtKNuTz+fjBz/4QeTz+TjiiCNan3/ooYfiD3/4Q4wbNy422GCDoue9/vrr480334zPf/7zsdlmm7U+v8suu3Rp/H777Vf0+wQAAACg6xQ+6WE7SgDWNJ0ttuqJ5ubmeOGFF2LatGmx11579Xi+QqEQ5513XpxyyimxxRZbFD2+WyVcoVCICy64IOrr62OXXXZpXSn33nvvxQ9+8IM44IADYvTo0UXPe//998fVV18dAwcOjAsuuKA70brFNynp456kj3uSPu5Jurgf6eOepIv7kT7uSfq4J+nifkDHfIxA53ycpIv7Aelx1FFHxVFHHVWSuW655ZaYNGlSFAqF1ueWL18es2fPLkkJN2/evPjrX/8aL7zwQowfPz4iIpYtWxYzZsyIZ555Jm688cYOxxddwjU3N8f5558f//d//xdbbrll/OxnP2s9w+2SSy6J5cuXx4UXXlj0X+See+6J//mf/4nq6uq4+uqrY8sttyx6DgAAAAAAANYO3/72t+Pb3/522ebfZJNN4ve//32b584666z4zGc+EyeccEKn44sq4RobG+OMM86Ixx57LLbZZpu4+eabY5NNNomIiMmTJ8evf/3ruOCCC2LTTTctZtq46qqr4uqrr44BAwbENddcE6NGjSpqPAAAAAAAAJRSnz59Yuutt27zXL9+/WLQoEGt/VhHsl19R0uWLIljjjkmHnvssdh5553jjjvuiM0337z19YcffjgiIi6++OIYMWJE6+PSSy+NiIjvf//7MWLEiPjTn/7UOqZlW8urr746Nthgg5g0aVLsvffeXY0EAAAAAAAAqdSllXDLly+Pk046KZ555pnYc88949prr4311luvzTUHHXRQDBs2bJWx06dPj6lTp8aBBx4YO+20U5trfvSjH8Xdd98dm2yySdx0002x/fbb9/CvAwAAAAAAAN03c+bM1b525513dnmeLpVwV155ZTz99NOx++67xw033BD9+/df5ZqDDjooDjrooFWenzRpUkydOjUOOuigOOyww1qf/+Mf/xiTJk2KDTbYIG677bbYaqutuhwaAAAAAAAA0qzTEm7BggVx++23R0TEtttuGzfccEO715144onRr1+/Lr/jurq6iIgYOXJkPPDAA+1eM3r06Nhuu+26PCcAAAAAAACkQacl3DPPPBMrVqyIiIj77rtvtdcdc8wxXS7hPvjgg/j73/8eERFPPfVUPPXUU+1et9NOOynhAAAAAAAAWONkCoVCIekQAAAAAAAA0Jtkkw4AAAAAAAAAvY0SDgAAAAAAAEpMCQcAAAAAAAAlpoQDAAAAAACAElPCAQAAAAAAQIkp4QAAAAAAAKDElHAAAAAAAABQYko4AAAAAAAAKDElHAAAAAAAAJSYEg4AAAAAAABK7P8DdE9hk7oap1IAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot visualisation of the missing values for each feature of the raw DataFrame, df_tm_bio_raw\n", "msno.matrix(df_tm_bio_raw, figsize = (30, 7))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "day_of_birth 40\n", "month_of_birth 40\n", "year_of_birth 40\n", "pob 281\n", "cob 39\n", "dob 40\n", "position 39\n", "height 409\n", "foot 1646\n", "citizenship 8560\n", "second_citizenship 15690\n", "dtype: int64" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Counts of missing values\n", "tm_bio_null_value_stats = df_tm_bio_raw.isnull().sum(axis=0)\n", "tm_bio_null_value_stats[tm_bio_null_value_stats != 0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The visualisation shows us very quickly that there a few missing values in most of the columns, but the dataset is ready for us." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Status data" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
player_idcurrent_clubcurrent_club_countrymarket_valuejoinedcontract_expirescontract_optionon_loan_fromon_loan_from_countryloan_contract_expiryplayer_agentleague_codeseason
02963retiredNaN02017-07-01NaNNaNNaNNaNNaNJorge CyterszpilerES12016
15404retiredNaN02020-07-01NaNNaNNaNNaNNaNTeam Spirit Football Consult.ES12016
25856retiredNaN02019-07-01NaNNaNNaNNaNNaNTMP SOCCER srlES12016
37593retiredNaN02018-07-01NaNNaNNaNNaNNaNAC TalentES12016
47600vissel kobejapan23000002018-07-012024-01-31NaNNaNNaNNaNSports&LifeES12016
\n", "
" ], "text/plain": [ " player_id current_club current_club_country market_value joined \\\n", "0 2963 retired NaN 0 2017-07-01 \n", "1 5404 retired NaN 0 2020-07-01 \n", "2 5856 retired NaN 0 2019-07-01 \n", "3 7593 retired NaN 0 2018-07-01 \n", "4 7600 vissel kobe japan 2300000 2018-07-01 \n", "\n", " contract_expires contract_option on_loan_from on_loan_from_country \\\n", "0 NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN \n", "2 NaN NaN NaN NaN \n", "3 NaN NaN NaN NaN \n", "4 2024-01-31 NaN NaN NaN \n", "\n", " loan_contract_expiry player_agent league_code season \n", "0 NaN Jorge Cyterszpiler ES1 2016 \n", "1 NaN Team Spirit Football Consult. ES1 2016 \n", "2 NaN TMP SOCCER srl ES1 2016 \n", "3 NaN AC Talent ES1 2016 \n", "4 NaN Sports&Life ES1 2016 " ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Display the first five rows of the raw DataFrame, df_tm_status_raw\n", "df_tm_status_raw.head()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
player_idcurrent_clubcurrent_club_countrymarket_valuejoinedcontract_expirescontract_optionon_loan_fromon_loan_from_countryloan_contract_expiryplayer_agentleague_codeseason
24327898751los angeles fcunited states500002021-06-042022-12-31club option 2 yearsNaNNaNNaNNaNMLS12020
24328900440atlanta united fcunited states250002021-06-042022-12-31club option 3 yearsNaNNaNNaNNaNMLS12020
24329900569san jose earthquakesunited states250002021-01-212021-12-31club option 3 yearsNaNNaNNaNNaNMLS12020
24330905609fc cincinnatiunited states250002021-07-022023-12-31club option 2 yearsNaNNaNNaNRemington Ellis ManagementMLS12020
24331921655club de foot montréalcanada02021-08-132022-12-31club option 2 yearsNaNNaNNaNAxia Sports ManagementMLS12020
\n", "
" ], "text/plain": [ " player_id current_club current_club_country market_value \\\n", "24327 898751 los angeles fc united states 50000 \n", "24328 900440 atlanta united fc united states 25000 \n", "24329 900569 san jose earthquakes united states 25000 \n", "24330 905609 fc cincinnati united states 25000 \n", "24331 921655 club de foot montréal canada 0 \n", "\n", " joined contract_expires contract_option on_loan_from \\\n", "24327 2021-06-04 2022-12-31 club option 2 years NaN \n", "24328 2021-06-04 2022-12-31 club option 3 years NaN \n", "24329 2021-01-21 2021-12-31 club option 3 years NaN \n", "24330 2021-07-02 2023-12-31 club option 2 years NaN \n", "24331 2021-08-13 2022-12-31 club option 2 years NaN \n", "\n", " on_loan_from_country loan_contract_expiry player_agent \\\n", "24327 NaN NaN NaN \n", "24328 NaN NaN NaN \n", "24329 NaN NaN NaN \n", "24330 NaN NaN Remington Ellis Management \n", "24331 NaN NaN Axia Sports Management \n", "\n", " league_code season \n", "24327 MLS1 2020 \n", "24328 MLS1 2020 \n", "24329 MLS1 2020 \n", "24330 MLS1 2020 \n", "24331 MLS1 2020 " ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Display the last five rows of the raw DataFrame, df_tm_status_raw\n", "df_tm_status_raw.tail()" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(24332, 13)\n" ] } ], "source": [ "# Print the shape of the raw DataFrame, df_tm_status_raw\n", "print(df_tm_status_raw.shape)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index(['player_id', 'current_club', 'current_club_country', 'market_value',\n", " 'joined', 'contract_expires', 'contract_option', 'on_loan_from',\n", " 'on_loan_from_country', 'loan_contract_expiry', 'player_agent',\n", " 'league_code', 'season'],\n", " dtype='object')\n" ] } ], "source": [ "# Print the column names of the raw DataFrame, df_tm_status_raw\n", "print(df_tm_status_raw.columns)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The dataset has thirteen features (columns). Full details of these attributes can be found in the [Data Dictionary](section3.3.1)." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "player_id int64\n", "current_club object\n", "current_club_country object\n", "market_value int64\n", "joined object\n", "contract_expires object\n", "contract_option object\n", "on_loan_from object\n", "on_loan_from_country object\n", "loan_contract_expiry object\n", "player_agent object\n", "league_code object\n", "season int64\n", "dtype: object" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Data types of the features of the raw DataFrame, df_tm_status_raw\n", "df_tm_status_raw.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All thirteen of the columns have the object data type. Full details of these attributes and their data types can be found in the [Data Dictionary](section3.3.1)." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 24332 entries, 0 to 24331\n", "Data columns (total 13 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 player_id 24332 non-null int64 \n", " 1 current_club 24332 non-null object\n", " 2 current_club_country 21817 non-null object\n", " 3 market_value 24332 non-null int64 \n", " 4 joined 24324 non-null object\n", " 5 contract_expires 19675 non-null object\n", " 6 contract_option 2085 non-null object\n", " 7 on_loan_from 1851 non-null object\n", " 8 on_loan_from_country 1851 non-null object\n", " 9 loan_contract_expiry 1570 non-null object\n", " 10 player_agent 20805 non-null object\n", " 11 league_code 24332 non-null object\n", " 12 season 24332 non-null int64 \n", "dtypes: int64(3), object(10)\n", "memory usage: 2.4+ MB\n" ] } ], "source": [ "# Info for the raw DataFrame, df_tm_status_raw\n", "df_tm_status_raw.info()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
player_idmarket_valueseason
count24332.0000002.433200e+0424332.000000
mean248287.4457926.062581e+062018.352992
std178109.7958441.235660e+071.630859
min26.0000000.000000e+002016.000000
25%93704.0000003.250000e+052017.000000
50%218129.0000001.500000e+062018.000000
75%358148.5000005.000000e+062020.000000
max921655.0000001.600000e+082021.000000
\n", "
" ], "text/plain": [ " player_id market_value season\n", "count 24332.000000 2.433200e+04 24332.000000\n", "mean 248287.445792 6.062581e+06 2018.352992\n", "std 178109.795844 1.235660e+07 1.630859\n", "min 26.000000 0.000000e+00 2016.000000\n", "25% 93704.000000 3.250000e+05 2017.000000\n", "50% 218129.000000 1.500000e+06 2018.000000\n", "75% 358148.500000 5.000000e+06 2020.000000\n", "max 921655.000000 1.600000e+08 2021.000000" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Description of the raw DataFrame, df_tm_status_raw, showing some summary statistics for each numberical column in the DataFrame\n", "df_tm_status_raw.describe()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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adq0KcuWLeOtt94CJJ7W4MUBwnfeeYfk5GQOHz6M0Whk8uTJzJ07F+Cl1+Ybb7wBSCytSe6B4d69e/Ps2TPi4+Oxs7OjXLlyzJkzh5kzZ2IymSSmrwCJZ/5ijkNOTg7BwcGoVCoGDx7M119/zY4dO3j69CkhISF4e3v/4v78YuJm7ty5zJ49m3feecdSp/OvJ/HM/9LS0v7QmELjxo1p0aIFTZo0AeSea2kyRvTv8EeuTzc3N+rUqUO7du1ISEggOjqa8+fPExAQQGxsLKVLl7bwWYhx48Zx4cIFbt68SeHChSlTpsz/tXfncXbNdx/Av3cme0SeRBZENGKJJeQq0toaQTSWqqVVW60hdmOprbXEFkW5xFo0tpZHUXvtE0WJevSWIiRIUBEEQRLJJDnPH8x9kie52Uzm3Dnzfr9e85o759x75zO+7sm953t+v18MGzYsVlxxxZg2bVpMmDAhPv3004j4ZgT57NmzY4stttCIgzQk8K33338/2WWXXZLtttsuef7555O6urrk66+/Ti666KJk3LhxydNPP5306dMnefLJJ5MkSZL/+Z//Sfr06ZOsu+66yYknnpjMmTMnSZIkqa2tTQ477LDkzTffTPPPafbq6uqSJElKdan3n//8Jzn++OOTQYMGJSNGjChtP+2005J+/folv//975Np06Y1alYWTT2zpb6eM2fOTN59991k8uTJSZIkyYcffpi8/PLLyZQpU5LNN988ufXWW0uPOf7445Pf/OY3ye9+97vS40nfrFmzkiT5v9fm1KlTkyRJkk8//TQ5++yzk8033zw599xzS/f32mw6ZsyYkey3337JL3/5y2T06NHJ22+/ndx7773J4MGDk+233z6ZMGFCkiRq2lSoZ7bMmDEjGTduXDJ06NDktddeK22/4IILkq222io566yzkg8//DBJkv87Ps/9Hurmm29O1l577eSOO+5o3OAskHpmx+zZs+fb9tVXXy3WOYXjjz9+vs86pMs5omxZ0Ovzyy+/XOx61nv99deT8ePHJ5999lljRWchzjrrrORHP/pR8uCDDybPPfdc8thjjyX9+/dPfvKTnyQTJ05MxowZk2y33XbJOuusk2y33XZJ//79k9dffz3t2NBsacYxj4kTJyY77bRTst122yWjR49OkuSbf5yTJElOPfXU5NBDD02S5JuTj4888khyxBFHJK+//vp8/6jXn4wkXVOnTk2GDRuWFIvFebbXN3C22Wab5Oqrry5tP+qoo5J9993Xh6AKpZ7ZUF+PL7/8Mvn5z3+ebLnllkn//v2TBx98sHSfd999N9l8882Txx57LEmSJBk/fnyy2267zdOc05BLX30j7quvvkpOO+20ZO+990623nrr5Le//W0yZsyYZPr06ck555wzX0POa7NpeO2115LBgwcnf/vb30rbZs2albzxxhvJdtttl+yzzz6l7ccee6yaVjj1zIb6mhx22GFJnz59kq233jqZNGnSPPepb+AMGzas1MCpP14nicZNJVHPbKl/bzpjxoxk7Nixyd/+9rfkww8/TGbOnFmq9ZKcU6AyOEeUDXO/PseNG5f8/e9/T7744otk1qxZpWOq12fT8/HHHye77bZbMnLkyGTmzJlJkiTJuHHjknw+n5x33nnJ2LFjk+nTpydvvPFGcvXVVyfXXHNNMn78+JRTQ/Nmmkrmmd5jxRVXjOuuuy6GDBkSv/nNb+Lcc88tTW2Xy+Vi0qRJ8frrr0ebNm3i5ptvjg4dOsTaa68dEd9MI1FVVRW5XC7atWuX2t/T3M09ncc777wTf/rTn2LSpElx2GGHxfrrrx8RESuvvHLU1NTESSedFNdee21UVVXFoYceGiNGjIg5c+ZELpcruy4DjUs9syeXy8Xs2bPj+OOPj5YtW8YvfvGLePPNN+Okk06KKVOmxM9+9rNo1apVTJs2Le64447417/+FaNHj46WLVvGnnvuWXqeFi38E56G+ulFkySJ6urqmDZtWvziF7+I9u3bx5prrhlrrLFG3HXXXfHcc8/Fr371qzjhhBMiSZJ45JFHoqqqKk499VSvzQr1/6fD+vjjj+ODDz4ovaep37/66qvHYYcdFsOGDYtnn302Nt9887j00ktLtVTTyqCe2VJfr/pa/OY3v4m6urp45pln4qWXXoqtt946WrVqFRERJ598cuRyuXj00UdjypQp8etf/zo6d+4cEd+s6fnb3/42zj777Pj5z3+e2t/T3Kln9sw9HfCQIUNi4sSJMWnSpOjYsWNsvvnmcdxxx0XPnj0jSZJFnlMwNWX6nCPKlrlfnwcffHDpPVH37t1jq622ikMOOSRWWWWVxaqn12dlmTNnTrz77rsREdGyZcsYP3587LXXXjFw4MA4+OCD47zzzou11147jjjiiFhrrbW8r4UKULXou5Bls2bNKp1oiPjmQL7iiivG9ddfH61atYrTTz89XnrppYiI2HjjjeOjjz6Kgw46KA444ICYPn16jBgxIiKidFLSQT1ds2bNiurq6pgxY0aMHj06qqur4/TTT4/a2tq48sor49VXXy3dt2fPnjF06NCorq6OW265JW677baIiKiqqiqdJCZd6pkts2bNKt2urq6OFVdcMWpqauLII4+Miy66KH7xi1/EeeedF3fccUd07949CoVCvP766/Hkk09G586d45Zbbonq6uqYPXt2in9F8/Y///M/cdttt8XMmTNLr6kbbrghWrZsGRdffHGcffbZMWzYsLj44oujdevWcemll8YHH3wQRx11VGy33XZxyy23xE033RQRXpuVZu7j7Ysvvhi1tbUxc+bMmD17dvz73/+OiP9rpFdXV0ffvn3j66+/jqlTp5b2qWnlUM9smbuezzzzTNx5550xbty4OPPMM2OTTTaJiy66KP75z3/O8+/jSSedFJtuumnMnDkz/uu//isiIv7617/G+eefH2eeeabGTYrUM5uqqqpi5syZMXTo0Gjfvn2cfvrp8fjjj8duu+0WY8aMieOPPz4mT54cW221VUyaNGmh5xRIl3NE2VP/+hwyZEi0bds2Tj/99Bg1alTsvffe8cADD8RJJ50Uc+bMiU022cTrs4mYOXNmTJ48OVZYYYXo2LFjfPjhh/HWW2/FHnvsEZtttlmce+650bFjx5gwYUJMmDCh9DivR0ify+qbsdmzZ0eLFi1i6tSpcdVVV8WECRNihRVWiB/84Aexww47xPXXXx+HHHJI/OY3v4kLLrggdt111+jQoUNMmDAhcrlc7LffftGiRYuYNWuWERoVYO6rnfbbb7/46quv4t13341dd901Tj/99DjnnHNizpw5cfTRR5dGVH3wwQex0UYbxfbbb19aXDnimzdrpEs9s2Xu4+2IESPigw8+iNGjR8dOO+0UERGtWrWKX/3qV5HL5eL888+PXC4Xe++9d/z1r3+NOXPmRIcOHSKXyznepuzGG2+MlVZaqXS1fkTE22+/Hd26dStd7Z0kSWy55ZYxZ86c+NWvfhX33ntvHH/88XHQQQdFjx49Yt999y091muzMvz/4+3UqVNjwoQJseuuu8agQYPiwgsvjF69esWAAQNKj/n444+jV69e0aVLl3meS03Tp57ZMnc9991335g6dWp88MEH0bJly+jTp0+ceeaZcdZZZ8Wvf/3rOO+882LjjTcunSw855xzSleAz549O2bPnh1XXnllbLPNNin/Vc2XembHpEmToqqqKrp27Vra9tprr8WHH34Y559/fql2J598cqy++upxww03xO9+97s4//zzY86cOfHhhx9GkiTOKVQY54iyYUGvz7fffjs+/PDDOOuss2KLLbaIFi1axCqrrBLTp0+PPfbYI15//fXYZZddYrnlliuNtFLPyvTb3/42/vnPf8ann34aF198cRxyyCExbNiwuPHGG2PnnXeOs88+O9q0aRMff/xxtG7dOlZdddWICKPioEI4mjZT9Ve1TJ8+PX7+859HdXV1/Nd//Vf85z//if/+7/+Ol156KX7961+XpiM45ZRT4oILLohtt912nuepf7NG+qqqqqKuri6OPvro6NChQ5x11lnRoUOH+PTTT2OjjTaKVVddNYYMGRItWrSIHXfcMXr27BkPPvhgbLzxxrHLLrtEhGkHKol6Zsf/P95+8cUX0alTp5gyZUo8+uijsdpqq0XXrl2jTZs2ceKJJ0ZExPDhw2PatGmx//77R8uWLSPi/05gkZ76K0OnT58etbW18aMf/SjatGkT48aNK01fWT8dz4ABA2LQoEHx4IMPxmGHHRYrr7xyHHjggRHhtVlpyh1vv/zyy+jcuXNMnTo1Dj/88Dj55JOjT58+MX369Lj66qujS5cukc/n047P/6Oe2VJfz2OPPTaWX375OPPMM2OllVaKf//733HllVfGKaecEr/73e9i2LBh8etf/zrOP//82GijjUrH2LlHQNZfAEN61DMbvvrqqxg0aFDstddeMWTIkNIJ//Hjx8eHH34Yffv2jerq6pg5c2a0atUqfvazn8Wbb74Z9957b3z66aex/fbbz/N8zilUBueIsqHc6/PDDz+Mjz76KFZfffVo0aJF3HPPPXHKKafEscceG3379o0zzjgjjjnmGPWscMcdd1y8/PLLse2220abNm0iImK77baLDz74IK6//vr43ve+FxMnTowvv/wybrvttnj//fdLF2prxEGFaJyl6agk9Ysnz549O/nLX/6S7L777sm4ceOSJEmSDz/8MBk5cmSy3nrrJeedd16SJN8s2LvzzjsnG264YfLqq6+mlptFGzduXLLNNtskDz74YGnbnDlzSovtnnHGGckPf/jDJJ/PJ5tsskmyyy67lBZ5rf//gsqhnk3f3Mfb++67LznooIOS8ePHJ1OmTEkuvfTSpE+fPslVV12VTJ48ufSY6dOnJ7/61a+SffbZRx0ryNy1OP/885M+ffokt956a3LZZZclW265ZXLbbbclM2bMSJLkm3rPmjUrOeWUU5IDDjggrcgsgQUdb+v94x//SPbZZ59kvfXWS9Zff/1k4MCByS9/+cvS8daC9pVHPbPlrbfeSgYPHpw89thjpW2zZ89O3n333WTnnXdO9txzz+S9995LfvaznyXf//73fV6pcOqZDbW1tcm6666bXHLJJcmkSZOSJEmSl19+OVlvvfWSP/7xj6X71b83evvtt5M+ffokzz77bCp5WTjniLJl7tfnRx99lCTJN3XccMMNkxtuuCF58sknkz59+iTXXHNNkiRJ8uWXXyZ9+/ZNbrnlljRjswiPPfZYMmDAgOR//ud/StsmT56c3Hvvvcnll1+enHnmmcl6662XbLrppsnAgQOTwYMHJ6+//nqKiYEFcXlDM1R/ReE+++wTrVu3jhVWWCFWX331iIjo3r177LnnnjFnzpy46KKLon///rHtttvGlVdeGZdffnn06dMn5fQszNdffx2TJ0+e58qlXC4XdXV1cf/998dbb70VF1xwQdTV1cXMmTPjxz/+cVRXV5t2oEKpZ9NXf7zdd999o2XLlrHSSivF9773vYiIqKmpidmzZ8dll10WERG/+MUvonPnztGmTZs499xzo0WLFqX1GlzFlr65a3DqqafGf/7znxgxYkQcdthh0aFDh7j++utjzpw5seeee0ZVVVVMmDAh3njjjfj+97+fYmoW14KOt8m3046+//77ERFxxRVXRMuWLaNDhw7Rt2/fqKqqcrytUOqZLZ988km8//770b59+4iIUp169OgRRx55ZJx88snx9ttvR6FQiEKh4PNKhVPPbNhqq63i2muvjSFDhkRExL777hurrrpqbLjhhvGXv/wlevToEQMGDIhWrVrFnDlz4o033oiVV145VlpppZSTsyDOEWXL/3997r333tGlS5fYYYcd4tprr40pU6bEKaecEgcccEDp9dm1a9fS51Qq0+effx6tW7eOtdZaK8aOHRu1tbVxzTXXxOzZs2PGjBnx85//PO66666YOHFitG/fPlZbbbX5pmAH0mchhGaquro6DjvssBg9enSMHTs2Jk2aVNrXpk2b2GGHHWKNNdaI1157LSIiVllllbjwwgujurp6nsW0qSxdunSJ1q1bR21tbWlbkiTRqlWr6NevX7z44ovRoUOH2HbbbWOHHXYo1dOJp8qkntlQXV0dQ4cOjRdeeCHeeOONmDhxYmnfCSecEIccckiMGDEi/vznP8cnn3wSEd+sIVdVVRVz5szRiKswc+bMiYhvTuT369cvRo4cGbvvvnu0bds2rrnmmthxxx3j4IMPjkMPPTRmz54dp5xySkR889qlci3oeBvxzZRqffv2LR1vN99889hggw1Kr0/H28qkntmy0korRYsWLeL555+PiIgWLVqUpgReZ511YsaMGfHpp59Gjx494qKLLvJ5pcKpZ3ZsscUWcf3118e1114bt956a7Rr1y5OPPHEmDx5cowYMSL++Mc/xueffx6jR4+Om266KVZbbTUn+yuYc0TZMvfr809/+lPMnDkzDj744FhrrbWia9euUVdXF59//nk888wzcckll0S3bt1is802Szs2C7HWWmvFu+++G4ccckgMGTIkLr300thpp53ihhtuiJEjR8af//zn+Pzzz2OrrbaKTTbZRCMOKpRmXDO21VZbxU033RQffPBB/PWvf42pU6eW9q244orRpk2bmDx58nyPs85N5erevXuccMIJce+998bvf//7iPi/0Ryff/55rLHGGqWrUOupZ+VSz+zYaqut4sYbb4wxY8bErbfeGh999FFpX31D7tJLL42nn356nsdVVflnutLUn7SPiLj22mujT58+cdNNN8Xuu+8ee+yxR2y44Yax3HLLxQ477BB33XVXadFzTdXKtjjH2+WWW26ex3h9Vi71zJaePXvG/vvvH9dee2385S9/iYj/e7/z4YcfRs+ePWPFFVec5zHeD1Uu9cyWuU/4jxgxIvr16xeFQiHat28fw4cPjx/+8Idx0kknRUTENddcM8/7KCqPc0TZMvfr85prrokePXrEWWedFVtssUVcd911MWDAgDjrrLOiRYsWccstt2isVrgNNtggLr744pg1a1YMHDgwfve738XZZ58dG2+8cXTo0CF69OgR7dq1SzsmsAgu/2zmfvCDH8R1110Xhx9+eORyudhpp51ihRVWiDfffDOmTp0aq622WtoRWUI77bRTTJgwIQqFQrzzzjux5ZZbRkTEzTffHB07dow111wz5YQsCfXMjh/+8Idxww03xMEHHxwtWrSIffbZJ7p16xYR3yzEvOKKK5YWV6ay1Z9Iqqqqit///vcxdOjQuPrqq+OYY46JAw88MNq3b1+aXtRo1abD8TZb1DNb9ttvv3j33Xfj1FNPjbfffjs22WSTmDZtWvzhD3+Izp07R//+/dOOyBJQz2ypP+FfPyXe0UcfHSNGjIj3338/3nzzzVhllVViww03NJ1+E+EcUbb8/9fnYYcdFsOGDYujjz46xowZEyuttFL06dPHdN1NxI477hiDBg2KVq1axcyZMyMi4oMPPog777wzqqqq5ruYBag8ucS8SUTE008/HYccckisscYaseqqq8Ynn3wSdXV1cccdd0TLli3TjscSmj59etx///1x2WWXxfTp06NLly7Rs2fPuOaaa6Jly5alk8g0DeqZLc8880wMGTIkDjvssNhnn32ia9eu8+z3IajpmPu1d/jhh8ezzz4bJ598cuy6667Rrl076/01QY632aKe2fLZZ5/FLbfcEjfddFPMmDEjunXrFr169Yprr702WrZsGbNnzzY6owlRz+ypf487dOjQ2Hfffed7j6umTYtzRNky9+tz7733ju7du8+z33uipuXDDz+MPfbYI9q1axetW7eOyZMnx3XXXRfrrLNO2tGARWgWzbhJkybFDjvsEEcffXQccMABacepWM8//3wccMABscEGG8ROO+0U++23X0RE1NXVebPVRH300Ufx2WefRcuWLaNXr16udmri1DM7nn322RgyZEjss88+ceSRR0anTp3SjsRSmvuD61FHHRXPPfdc/Pa3v41tt91WM64Jc7zNFvXMlvfeey8mTZoUHTp0iDXXXFM9mzj1zBbvcbPFOaJs8frMjhkzZsTjjz8eo0ePjh49esTgwYOtyQlNROabcVOnTo0DDzww/vWvf8Wpp56qGbcIzz33XAwZMiQOOeSQOOigg2L55ZdPOxINyNVO2aKeTduTTz4Zv//97+O2227TsGni5n4tbr/99vG9730vrrnmmpRT0ZAcb7NFPbNFPbNFPZs+73GzxTmibPH6BEhXpptx//nPf+Loo4+OV199NSJCM24xPfPMM3HooYfGvvvuG4ceemh06dIl7UgAmVQ/csoIqqYvSZL45JNPoqamJiIifv/730f79u3TDQUAkALvcbPFOaJs8foESE9mLzm78cYb4yc/+UmMGTMmfvjDH6Ydp0nZYost4qqrroq7777bVYkAy5APQdmRy+Uil8tF27Zt48wzz9SIAwCaLe9xs8U5omzx+gRIT2ZHxm299dbRvn37GDZsWIwfPz5OPfVUI+OW0LRp06Jdu3ZpxwCAJmPmzJnRqlWrtGMAAECDco4IAL6bzK6KPGzYsNhss82iuro6xo8fn3acJsmbLABYMhpxAABkkXNEAPDdZLYZt+WWW6YdAQAAAAAAgGYus824JbXVVlulHYEGUigUIiKipqYm1Rw0DPXMHjXNFvXMFvXMlkKhEPl8Pu0YANDkFItF74cywvvbbFHPbBo1alTaEZqsadOmxYEHHhgfffRR2lEaxXLLLRf3339/2jGWmmYcAAAAAABAE9KuXbv47//+74XeZ+DAgY2UZvH07NkzIiJyuVzkcrl5bs/984Luc/DBB6eQuOFoxgEAAAAAALBMvffee0v92Pvvvz/69+/fgGkal2YcUPHy+bwh6xlSLBbTjgAshGMuAAAAUGmeeeaZuPTSS+cbSVdVVRW5XC5WX331+PGPf1zaXmk044CKZ77+bKmf4x0AAAAAWHa6du0aH3/8cdoxGsx999230P1t27aNAQMGNFKaJaMZBwBAiQsgsqNQKEQ+n087BgA0OWYKACArdtlll7juuuvSjtFo+vTpk3aEsjTjAAAAAOBbLk7KDjOzAM3do48+mnaERvX444/Hvvvum3aMBdKMAwAAaAKcHM6O+pPD6pkN6pktmjcAZMmECRPSjtCoNt9887QjlNUsmnG77bZb7LbbbmnHAAAAWGqmTcse9cwW9cyOYrGYdgQAaBA/+tGP4m9/+1vaMRrNV199lXaEsppFMw4AAJojI6myw8ibbFHPbFHPbDEyDoAsOfbYY2PNNdeMXC4XETHf9z//+c/x2WefpZavoc2ePTvtCGVpxgEVz1Xg2eIqU6hsjrnZo57Zop7Zop7Zop7Zop4AZMHuu++edgS+pRkHVDxX9WeLK02hsjnmZkehUIh8Pp92DABocrwfyg6fPwGyY7311ovLLrus9HOSJJEkSel2VVVVtGhRuS2vyk0G8C2jNLLFyDiobI65AAAAQKXp0KFDVFdXpx1jqWnGARXPVYnZ4spEqGyOudlhDaNsMdIRAABozp5//vm4+uqr5xkNN7fevXvH4MGDS+vhVRrNOAAAyCgjHQEAAJqv2trahe4fOHBgIyVpGHfcccdC93fs2DE222yzRkqzZDTjAAAgo4x0zA4jHbNFPbNFPbPFTB4ANCebbLJJ/OMf/0g7RoNp165d2hHK0owDAABoAox0zB71zBb1zA7rXAOQFZdddlncc889acdoNP/5z38qdnp/zTgAAMgozRsAAIDmqzk14iIiVl111bQjlFWVdgAAAAAAAAD4Lj7++OO0I5RlZBwAAAAAfMvIcgBomjp27Jh2hLI04wAAAADgW8ViMWpqatKOQQMoFAppRwCgEbVt2zbtCGVpxgEAAAAAAFDRzjrrrPm2JUkSERHdu3ePddZZp5ETLT7NOAAAAAAAgIzZfffd46677ko7RoNo2bJlDBgwIO0YS00zDgAAAAAAIGOOOuqoOOqoo8ruHzhwYCOm+W7q6uoWmXfkyJHRq1evxgm0hDTjAAAAmgBrGGVH/RpG6pkN6pkt1hgDIEveeuutuPXWWyMiIpfLlbbPfTtLZsyYkXaEsjTjAAAAmoB8Ph+jRo1KOwYNSD2zRT2zo1gsph0BABrEKaecEp988knaMRpNu3bt0o5QlmYcAABklJFU2VEoFCKfz6cdAwAAIDXLL7986XaSJPN833DDDaNbt26p5FocmnEAAJBRRlIBAAA0X6eeempcdtllC9yXJEm89957jZzou/niiy/K7nv66afjk08+iR49ejRiosWnGQcAAAAA33IxCwBZscYaa8T+++8/zyiy+tsREf/617/iwQcfTCteg3vooYfikEMOSTvGAmnGAQAAAMC3TPOcHYVCIe0IAKk6/PDD44MPPkg7RqPp27dv2hHK0owDAABoApwczo76k8PqmQ3qmS2aNwBkydlnnx233npr5HK5yOVype31Pz/++OMppmt406dPTztCWZpxAAAATYBp07JHPbNFPbOjWCymHQEAGsSQIUPSjtCoqqur045QlmYcAAAAAAAAFWv55ZePE088sez+bt26RZ8+fRox0ZLRjAMAAAAAAMiYJ554Iurq6ubZliRJ6fb222/f2JGW2hdffBFnnHFG2f1rrbVWXHHFFdGyZctGTLX4NOMAAAAAAAAypq6uLt55552y+7t06RKffPJJIyZadt588814+umnY+utt047ygJpxgEAAAAAAGTM0KFDY8KECWnHaDQf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LrmkEVOl6/nnn48BAwakHWOBNOMAACgxTSUAAAA0De3atYt27dqV3d+cGnERERtuuGHaEcrSjAMAoMQ0ldlhmkoAAACak5dffjm22GKLtGMsUFXaAQAAAAAAAGhYlbyG2rIwZsyYtCOUZWQcAABklJGO2WGkIwAAsKRefPHFtCM0qtra2hgyZEjaMRZIMw6oeNYvypZisZh2BGAhHHOzRz0BAADSdf/998eJJ544z7ZtttkmrrrqqpQSZdP222+fdoSyNOOAiueq/mwpFAppRwAAACjLxUkANLRx48bFoEGD4swzzyxta926dYqJsmmFFVZIO0JZmnEAAJS4ACI7TGsIAABQGd56663o06dPdO3aNe0omda9e/e0I5SlGQdUPFclZotpKqGyOeYCAM2di5Oyw8wsQKUYN25cDB48uMGeb/bs2fHCCy/E2LFjY80114z+/ftHdXV1gz1/Grp37x4tWrSIXC63wP1du3aNVq1azbOt/r65XC769OlT0RekasYBAAAAwLdcnARAQ5o5c2a89957UVtbG5dffnnMmTMnBg8eHMccc8x8zaXFMXv27DjppJPi9ddfj6+//jratGkT66yzTlx44YVNuiE3adKkhe5///33F7r/ueeei9133z2WW265hozVYDTjAAAAAOBbRsZlh5FxQCWYMGFCzJo1K9q1axeXX355vPvuu3HeeefF1KlT51lDbnG98MIL8frrr8f06dMjImL69Onx0ksvxbbbbtvQ0Zucl19+OTbbbLO0YyyQZhxQ8XwQyhYfhqCyOeZmhzXjAAAA0rfmmmvG888/H506dYqIiLXXXjuSJIkTTjghfv3rX0eLFkvWphk7dmx8/fXXyyJqk9e3b9+0I5SlGQdUPFOEZIs146CyOeYCAABAw6pvxNVbffXVo66uLj799NPo1q3bEj3XmmuuGW3atCmNjIuIaNOmTZxxxhmx6aabLtFzDRw4cInuX+leffXVJf5v0Fg044CKZ5RGthgZB5XNMTc7jIwDAABI36OPPhpnnXVWjBo1qrRG3GuvvRbLL798dO3adYmfr3///rHOOuvEa6+9FjNmzIjWrVvHuuuuG/3795/vvscee2y8/PLL3/lvaCo6dOiQdoSyNOMAAAAAAACWgU022SSSJIkzzjgjhg4dGhMmTIgLL7wwDj744Mjlckv8fNXV1XHhhRfG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AACgKXrqqadigw02SDvGAhkZBwAAAAAAQJN24IEHph2hLCPjAAAoKRaLUVNTk3YMGkChUIh8Pp92DAAAAFJyyCGHxHXXXZd2jAZTW1ubdoSlphkHAAAZpbmaHZqrAADAkmrdunXaEfiWZhwAAGSUNQABAACaryuuuCLtCHxLMw4AAKAJMNIxOwqFQkSEemaEemZLfT0BIAvOO++8+O1vfzvPtlwuV/r++eefp5CqedKMAwCgxEgqqFxen9mjntmintlRLBbTjgAADWKzzTaLe++9t+z+gQMHNmKa5k0zDgAAAAAAoJnZeeed47777ks7xmI74IAD5hnZN/f3DTbYII488sho0aIy216VmQoAAAAAAIBl5oknnkg7whKZMGFC2X1vv/12/PSnP41evXo1XqAloBkHAECJNamywxpG2VIoFCKfz6cdAwAAyJDNN988Hn300bRjLLY//OEPERGRJEnpe/3t5ZdfPrp165ZatkXRjAMAoMSaVNmjngAAACzIxIkT046wRA466KCF7r/hhhuid+/ejZRmyVSlHQAAAAAAAIDG9corr6QdoUG99957aUcoa7FHxn388ccxYsSIeOqpp2Ly5MnRsWPH2HTTTePYY4+Nnj17ln3crbfeGuecc04MHz48dtttt3n21dXVxZ/+9Ke4884747333ouOHTvGNttsE0cddVR07tx5nvsmSRL33ntv3HzzzfHOO+9E27ZtY4sttohjjjkmVllllfl+70MPPRQ333xzvPHGGzF79uzo3bt37LXXXvGLX/xicf9kAIBmxzSV2WGaymwxTSUAAEB56667bvTv3z/tGGUtVjPu448/jp///OcxceLE2HzzzWOHHXaId955Jx544IF4+umn47//+78XuCjef/7zn/jd735X9nlPPfXUuP/++6Nv376x1157xfvvvx9/+tOfYtSoUXHnnXfO05ArFApxzTXXRO/evWOPPfaITz/9NB566KGora2NO+64I1ZbbbXSfa+++uooFArRpUuX+MlPfhItWrSI2traOOOMM2Ls2LHxm9/8Zgn+EwEAQNNk2lEAAACag9deey2+/vrraNu2bYM958yZM2O33XaL0047LTbbbLOIiKitrY1LLrkkJkyYEKuttlocf/zxMWDAgEU+12I140aMGBETJ06MU045JQ488MDS9vvuuy9+9atfxQUXXBDXXHPNfI8744wzYtq0aQt8zmeeeSbuv//++PGPfxyXXXZZ5HK5iIi4/fbb48wzz4zrrrsuTj755IiIePvtt+Paa6+Nfv36xR//+Mdo2bJlRETsvPPOMWTIkLj00kvj8ssvj4hv5ji98sorY5VVVok777wzOnXqFBERJ5xwQuyzzz5xyy23xK677hrrrbfe4vzpAADNiuYNANDceT8EAE3T7NmzG+y5ZsyYESeccEKMHTu2tG3cuHFxzDHHxMknnxwDBgyIRx99NI488sj461//utAZJCMWc824xx9/PDp37hz777//PNt33nnnWHXVVeOZZ56JOXPmzLPvrrvuimeeeSZ+9KMfLfA5x40bF126dIlDDjmk1IiLiNhpp50i4pspkuqNGTMmVlxxxTjooINKjbiIiC233DI6duw4z32ffPLJqKuriwMPPLDUiIuIaN++famR+Le//W1x/mwAAAAAAAAqQG1t7UK/unTp0iC/Z9y4cbHHHnvEu+++O8/2iRMnxr777hv77rtv9OzZMw4++OBo167dPD2qchY5Mm727NkxdOjQaNGiRVRVzd+7a9WqVdTV1UVdXV20bt06IiI++uijuOCCC2LXXXeNtddee4HNrwMOOCAOOOCA+ba//fbbERHz/EfbYYcdYocddpjvvp988kl88cUX86wZ17dv3zj22GNj0003XWDWiCg7Wg8AAACA5s0autlRv4YuANkwZsyYBW6fM2dOjB8/Pj755JNYc801o3///lFdXb3Uv+fFF1+MzTffPI4++uh51u7ecsstY8stt4yIiLq6urjnnnti5syZi7W+9yKbcdXV1fONiKv31ltvxdtvvx2rrrpqqREXETFs2LBo2bJlnHLKKXHPPfcsMkRExFdffRUvvPBCnHfeedGyZct5psP8/6ZPnx4vv/xyXHDBBRERceihh5b29evXL/r167fAxz3++OMREbHGGmssViYAgObGyafsKBQKi/WBgKbD6zM76k8Oq2c2qGe2aN4AQOU6/PDDF3mftm3bxjrrrBMXXnjhUjfk9txzz4Xuf+utt+InP/lJzJ49O0444YRFTlEZsZhrxi3InDlz4pxzzok5c+bEHnvsUdr+0EMPxeOPPx6XXnpp/Nd//ddiPddzzz1XGiVXXV0dl1xySXz/+99f4H3ffffdGDRoUOnnU089NQYPHrzI3/H888/Hgw8+GJ07d57n8QAAkFWaN9lR31y1hlG2qGe2qGd2LM5UUwBAZZo+fXq89tpr8cILLyxwBsWG0LVr17jzzjvjpZdeigsuuCC+973vxY9//OOFPiaXJEmypL8oSZI4/fTT489//nP07ds3brvttmjVqlV89tlnscMOO0S/fv3immuuiYiIG2+8MYYPHx7Dhw+P3XbbbYHP9+KLL8ajjz4aX375ZTz66KPx9ddfxznnnLPA+7/99ttx6623xqxZs+LJJ5+MTz75JI4++ug48sgjy+YdM2ZM7LfffjFlypQYMWJEbLfddkv6JwMAAAAAAFBBbr755rjxxhtj7lZXLpeLAw88MH75y19+5+fv06dPjBw5MjbbbLMF7j/jjDPinXfeiVtuuWWhz7PEI+NmzZoVp59+etx9993Rs2fPuOqqq0prsZ177rkxY8aMOOuss5boOTfeeOPYeOONIyLiqKOOit133z3OOOOM2GyzzWLFFVec5769e/eOM844IyIijjvuuNhrr73i8ssvjy233DI22GCD+Z775ZdfjkMOOSSmTJkSJ5xwgkYcAAAAAABABuy3336x3377NcrvGjNmTEybNm2emR3XWGONeOmllxb52Kol+UXTp0+PI444Iu6+++7o1atX3HzzzdG9e/eIiKitrY0HHnggTjjhhPkaaEuiR48esf/++0ddXV08/fTTC71vp06d4ogjjoiIiCeeeGK+/aNGjYr99tsvPv/88zjhhBPmWVsOAAAAAAAAFsdf//rX+Qajvfrqq9G7d+9FPnaxm3FTpkyJ/fffP5566qlYd911409/+lOsvPLKpf2PPPJIREScffbZ0adPn9LX8OHDI+Kbtd369OkTo0ePjoiIV155JR544IEF/q765/3ss88iImLs2LFx//33x4wZMxZ533r33HNPHHnkkTFjxowYNmyYRhwAAAAAAABL5Wc/+1m8++67cemll8b48ePj5ptvjgcffDCGDh26yMcu1jSVM2bMiKFDh8a//vWv6N+/f1x99dWx3HLLzXOfbbfdNnr06DHfY4vFYjzzzDOxzTbbxDrrrFO6zyWXXBJ///vfY80114w+ffrM85gxY8ZERETPnj0jIuKmm26KP//5z3H11VfH1ltvPc9933jjjYiIWHXVVUvbHnvssTj11FOjuro6Lr300hg8ePDi/JkAAAAAAAAwn549e8b1118fw4cPj5EjR0bPnj3j8ssvj/XWW2+Rj80lc69qV8bw4cPjxhtvjA033DBuvPHGaNOmzWKHu/HGG2P48OExfPjw2G233Urb77jjjjj99NNjwIABcfXVV0d1dXVERPz73/+OffbZJ5Zbbrl47LHHol27dvHss8/GQQcdFOuss07cfvvtpd//3nvvxZ577hlffvllPProo7HiiivGhx9+GDvuuGNMnTo1RowYEYMGDVrsrAAAAAAAANCQFjky7uOPP44//vGPERHRu3fvuO666xZ4v0MPPTRat2692L949913j4cffjieeuqp2GWXXWKLLbaISZMmxaOPPhotWrSIiy++ONq1axcREZtvvnnstttucffdd8eOO+4YW2+9dakB9/XXX8cFF1xQWqfu+uuvj6+++ip69uwZY8aMKY2ym1u/fv3iRz/60WJnBQAAAAAAgKWxyGbcv/71r6irq4uIiLvuuqvs/fbff/8lasZVV1fHNddcE9dff33ce++9ccstt0T79u1jm222iaOOOirWXHPNee5//vnnR9++feP222+P2267Ldq0aRMbb7xxDB06NDbaaKPS/f7xj39ExDej5q644ooF/u799ttPMw4AAAAAAIBlbrGmqQQAAAAAAACWXFXaAQAAAAAAACCrNOMAAAAAAABgGdGMAwAAAAAAgGVEMw4AAAAAAACWEc04AAAAAAAAWEY04wAAAAAAAGAZ0YwDAAAAAACAZUQzDgAAAAAAAJYRzTgAAAAAAABYRjTjAAAAAAAAYBn5X036oO1FsHmpAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot visualisation of the missing values for each feature of the raw DataFrame, df_tm_status_raw\n", "msno.matrix(df_tm_status_raw, figsize = (30, 7))" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "current_club_country 2515\n", "joined 8\n", "contract_expires 4657\n", "contract_option 22247\n", "on_loan_from 22481\n", "on_loan_from_country 22481\n", "loan_contract_expiry 22762\n", "player_agent 3527\n", "dtype: int64" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Counts of missing values\n", "tm_status_null_value_stats = df_tm_status_raw.isnull().sum(axis=0)\n", "tm_status_null_value_stats[tm_status_null_value_stats != 0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The visualisation shows us very quickly that there a few missing values in most of the columns, but the dataset is ready for us." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Data Engineering\n", "Before we answer the questions in the brief through [Exploratory Data Analysis (EDA)](#section5), we'll first need to clean and wrangle the datasets to a form that meet our needs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.1. Bio and Status Datasets" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.1.1. Assign Raw DataFrames to New Engineered DataFrames" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "# Assign Raw DataFrames to new Engineered DataFrames\n", "df_tm_bio = df_tm_bio_raw.copy()\n", "df_tm_status = df_tm_status_raw.copy()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.1.2. Dedupe DataFrames\n", "A copy of each player is saved per season, causing duplication if not treated." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Bio data" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "df_tm_bio = (df_tm_bio\n", " .sort_values(['season', 'player_id'], ascending=[False, True])\n", " #.drop(columns=['league_code', 'season'])\n", " .drop_duplicates(subset=['player_id'], keep='first')\n", " )" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No. rows in Bio DataFrame BEFORE deduplication: 24211\n", "No. rows in DataFrame AFTER deduplication: 9429\n", "\n", "Variance in rows before and after deduplication: 14782\n", "\n", "----------\n" ] } ], "source": [ "print('No. rows in Bio DataFrame BEFORE deduplication: {}'.format(len(df_tm_bio_raw)))\n", "print('No. rows in DataFrame AFTER deduplication: {}\\n'.format(len(df_tm_bio)))\n", "print('Variance in rows before and after deduplication: {}\\n'.format(len(df_tm_bio_raw) - len(df_tm_bio)))\n", "print('-'*10)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9429" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_tm_bio['player_id'].nunique()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Status data" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "df_tm_status = (df_tm_status\n", " .sort_values(['season', 'player_id'], ascending=[False, True])\n", " .drop(columns=['league_code', 'season'])\n", " .drop_duplicates(subset=['player_id'], keep='first')\n", " )" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No. rows in Status DataFrame BEFORE deduplication: 24332\n", "No. rows in DataFrame AFTER deduplication: 9323\n", "\n", "Variance in rows before and after deduplication: 15009\n", "\n", "----------\n" ] } ], "source": [ "print('No. rows in Status DataFrame BEFORE deduplication: {}'.format(len(df_tm_status_raw)))\n", "print('No. rows in DataFrame AFTER deduplication: {}\\n'.format(len(df_tm_status)))\n", "print('Variance in rows before and after deduplication: {}\\n'.format(len(df_tm_status_raw) - len(df_tm_status)))\n", "print('-'*10)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9323" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_tm_status['player_id'].nunique()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.1.2. Join Bio and Status Datasets" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "# Join the Bio and Status DataFrames to form one, unified DataFrame\n", "df_tm_bio_status = pd.merge(df_tm_bio, df_tm_status, left_on='player_id', right_on='player_id', how='left')" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No. rows in Bio DataFrame BEFORE join to Status data: 9429\n", "No. rows in DataFrame AFTER join: 9429\n", "\n", "Variance in rows before and after join: 0\n", "\n", "----------\n" ] } ], "source": [ "print('No. rows in Bio DataFrame BEFORE join to Status data: {}'.format(len(df_tm_bio)))\n", "print('No. rows in DataFrame AFTER join: {}\\n'.format(len(df_tm_bio_status)))\n", "print('Variance in rows before and after join: {}\\n'.format(len(df_tm_bio_status) - len(df_tm_bio)))\n", "print('-'*10)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(9429, 25)" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_tm_bio_status.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.1.3. String Cleaning" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Name" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "# \n", "df_tm_bio_status['name_lower'] = (df_tm_bio_status['player_name']\n", " .str.normalize('NFKD')\n", " .str.encode('ascii', errors='ignore')\n", " .str.decode('utf-8')\n", " .str.lower()\n", " )\n", "\n", "# First Name Lower\n", "df_tm_bio_status['firstname_lower'] = df_tm_bio_status['name_lower'].str.rsplit(' ', 0).str[0]\n", "\n", "# Last Name Lower\n", "df_tm_bio_status['lastname_lower'] = df_tm_bio_status['name_lower'].str.rsplit(' ', 1).str[-1]\n", "\n", "# First Initial Lower\n", "df_tm_bio_status['firstinitial_lower'] = df_tm_bio_status['name_lower'].astype(str).str[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### League Country lower" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "# Remove accents and create lowercase name\n", "df_tm_bio_status['league_country_lower'] = (df_tm_bio_status['current_club_country']\n", " .str.normalize('NFKD')\n", " .str.encode('ascii', errors='ignore')\n", " .str.decode('utf-8')\n", " .str.lower()\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.1.4. Converting Data Types" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Date Time\n", "First we need to convert the `dob` column from the `object` data type to `datetime64[ns]`, again using the [.to_datetime()](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.to_datetime.html) method." ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "scrolled": true }, "outputs": [], "source": [ "# Convert birth_date from string to datetime64[ns]\n", "df_tm_bio_status['dob'] = pd.to_datetime(df_tm_bio_status['dob'])\n", "df_tm_bio_status['joined'] = pd.to_datetime(df_tm_bio_status['joined'])\n", "df_tm_bio_status['contract_expires'] = pd.to_datetime(df_tm_bio_status['contract_expires'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Numeric\n", "The `value` column needs to be converted from a string to an integer using to [to_numeric()](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.to_numeric.html) method." ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "# Convert string to integer\n", "df_tm_bio_status['market_value'] = pd.to_numeric(df_tm_bio_status['market_value'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.1.5. Create New Attributes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Position Codes" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array(['Goalkeeper', 'midfield - Central Midfield',\n", " 'attack - Centre-Forward', 'midfield - Defensive Midfield',\n", " 'attack - Right Winger', 'attack - Second Striker',\n", " 'Defender - Left-Back', 'Defender - Centre-Back',\n", " 'Defender - Right-Back', 'midfield - Attacking Midfield',\n", " 'midfield - Right Midfield', 'attack - Left Winger',\n", " 'midfield - Left Midfield', nan, 'midfield', 'attack', 'Defender'],\n", " dtype=object)" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_tm_bio_status['position'].unique()" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "dict_positions_codes = {'Goalkeeper': 'GK',\n", " 'Defender': 'DEF',\n", " 'Defender - Centre-Back': 'CB',\n", " 'Defender - Left-Back': 'LB',\n", " 'Defender - Right-Back': 'RB',\n", " 'midfield': 'MF',\n", " 'midfield - Central Midfield': 'CM',\n", " 'midfield - Defensive Midfield': 'CDM',\n", " 'midfield - Left Midfield': 'LM',\n", " 'midfield - Right Midfield': 'RM',\n", " 'midfield - Attacking Midfield': 'CAM',\n", " 'attack': 'FW',\n", " 'attack - Left Winger': 'LW',\n", " 'attack - Right Winger': 'RW',\n", " 'attack - Second Striker': 'SS',\n", " 'attack - Centre-Forward': 'ST'\n", " }" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "# Map grouped positions to DataFrame\n", "df_tm_bio_status['position_code'] = df_tm_bio_status['position'].map(dict_positions_codes)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Position Grouped" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "dict_positions_grouped = {'Goalkeeper': 'Goalkeeper',\n", " 'Defender': 'Defender',\n", " 'Defender - Centre-Back': 'Defender',\n", " 'Defender - Left-Back': 'Defender',\n", " 'Defender - Right-Back': 'Defender',\n", " 'midfield': 'Midfielder',\n", " 'midfield - Central Midfield': 'Midfielder',\n", " 'midfield - Defensive Midfield': 'Midfielder',\n", " 'midfield - Left Midfield': 'Midfielder',\n", " 'midfield - Right Midfield': 'Midfielder',\n", " 'midfield - Attacking Midfield': 'Midfielder',\n", " 'attack': 'Forward',\n", " 'attack - Left Winger': 'Forward',\n", " 'attack - Right Winger': 'Forward',\n", " 'attack - Second Striker': 'Forward',\n", " 'attack - Centre-Forward': 'Forward'\n", " }" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "# Map grouped positions to DataFrame\n", "df_tm_bio_status['position_grouped'] = df_tm_bio_status['position'].map(dict_positions_grouped)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Goalkeeper / Outfielder" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [], "source": [ "# Separate Goalkeeper and Outfielders\n", "df_tm_bio_status['outfielder_goalkeeper'] = np.where(df_tm_bio_status['position'].isnull(), np.nan, (np.where(df_tm_bio_status['position'] == 'Goalkeeper', 'Goalkeeper', 'Outfielder'))) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Current Age" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "now = pd.Timestamp('now')\n", "df_tm_bio_status['dob'] = pd.to_datetime(df_tm_bio_status['dob'], format='%m%d%y')\n", "df_tm_bio_status['dob'] = df_tm_bio_status['dob'].where(df_tm_bio_status['dob'] < now, df_tm_bio_status['dob'] - np.timedelta64(100, 'Y'))\n", "df_tm_bio_status['age'] = (now - df_tm_bio_status['dob']).astype('\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
player_idplayer_nameday_of_birthmonth_of_birthyear_of_birthpobcobdobpositionheightfootcitizenshipsecond_citizenshipleague_codeseasoncurrent_clubcurrent_club_countrymarket_valuejoinedcontract_expirescontract_optionon_loan_fromon_loan_from_countryloan_contract_expiryplayer_agentname_lowerfirstname_lowerlastname_lowerfirstinitial_lowerleague_country_lowerposition_codeposition_groupedoutfielder_goalkeeperageage_when_joiningyears_since_joiningyears_until_contract_expiry
02857eldin jakupovic2.010.01984.0KozaracJugoslawien (SFR)1984-10-02Goalkeeper191.0rightNaNBosnia-HerzegovinaGB12021leicester cityengland300000.02017-07-192021-06-30NaNNaNNaNNaNHSDeldin jakupoviceldinjakupoviceenglandGKGoalkeeperGoalkeeper36.032.04.0-1.0
13333james milner4.01.01986.0LeedsEngland1986-01-04midfield - Central Midfield175.0rightEnglandNaNGB12021liverpool fcengland3000000.02015-07-012022-06-30NaNNaNNaNNaNSamii Sport-Marketing Agenturjames milnerjamesmilnerjenglandCMMidfielderOutfielder35.029.06.00.0
23455zlatan ibrahimovic3.010.01981.0MalmöSweden1981-10-03attack - Centre-Forward195.0bothNaNBosnia-HerzegovinaIT12021ac milanitaly4000000.02020-01-022022-06-30NaNNaNNaNNaNMino Raiolazlatan ibrahimoviczlatanibrahimoviczitalySTForwardOutfielder39.038.01.00.0
35578nicolas penneteau28.02.01981.0MarseilleFrance1981-02-28Goalkeeper185.0leftFranceNaNFR12021stade reimsfrance200000.02021-07-012023-06-30NaNNaNNaNNaNUSM GROUPnicolas penneteaunicolaspenneteaunfranceGKGoalkeeperGoalkeeper40.040.00.01.0
46442antonio rosati26.06.01983.0TivoliItaly1983-06-26Goalkeeper195.0rightItalyNaNIT12021acf fiorentinaitaly100000.02021-02-01NaTNaNNaNNaNNaNAlessandro Lucci - WSAantonio rosatiantoniorosatiaitalyGKGoalkeeperGoalkeeper38.037.00.0NaN
57093francesco magnanelli12.011.01984.0UmbertideItaly1984-11-12midfield - Defensive Midfield181.0rightItalyNaNIT12021us sassuoloitaly400000.02005-07-012022-06-30NaNNaNNaNNaNTMP SOCCER srlfrancesco magnanellifrancescomagnanellifitalyCDMMidfielderOutfielder36.020.016.00.0
67161jonas hofmann14.07.01992.0HeidelbergGermany1992-07-14attack - Right Winger176.0rightGermanyNaNL12021borussia mönchengladbachgermany16000000.02016-01-012023-06-30NaNNaNNaNNaNDr. Gutfleischjonas hofmannjonashofmannjgermanyRWForwardOutfielder29.023.05.01.0
77663joaquín21.07.01981.0El Puerto de Santa MaríaSpain1981-07-21attack - Right Winger181.0rightSpainNaNES12021real betis balompiéspain1500000.02015-08-312022-06-30NaNNaNNaNNaNJuzzt FootballjoaquinjoaquinjoaquinjspainRWForwardOutfielder40.034.06.00.0
87825pepe reina31.08.01982.0MadridSpain1982-08-31Goalkeeper188.0rightSpainNaNIT12021ss lazioitaly800000.02020-09-012022-06-30NaNNaNNaNNaNManuel García Quilónpepe reinapepereinapitalyGKGoalkeeperGoalkeeper39.038.00.00.0
98176oier olazábal14.09.01989.0IrúnSpain1989-09-14Goalkeeper189.0leftSpainNaNES12021rcd espanyol barcelonaspain300000.02020-01-312022-06-30NaNNaNNaNNaNSport Agency 4Uoier olazabaloierolazabalospainGKGoalkeeperGoalkeeper31.030.01.00.0
108198cristiano ronaldo5.02.01985.0FunchalPortugal1985-02-05attack - Centre-Forward187.0rightPortugalNaNIT12021juventus fcitaly45000000.02018-07-102022-06-30NaNNaNNaNNaNGestifutecristiano ronaldocristianoronaldocitalySTForwardOutfielder36.033.03.00.0
118246philipp pentke1.05.01985.0FreibergDDR1985-05-01Goalkeeper191.0rightGermanyNaNL12021tsg 1899 hoffenheimgermany300000.02019-07-012022-06-30NaNNaNNaNNaNBigpointphilipp pentkephilipppentkepgermanyGKGoalkeeperGoalkeeper36.034.02.00.0
128806cesc fàbregas4.05.01987.0Arenys de MarSpain1987-05-04midfield - Central Midfield178.0rightSpainNaNFR12021as monacomonaco5000000.02019-01-112022-06-30NaNNaNNaNNaNDarren Deincesc fabregascescfabregascmonacoCMMidfielderOutfielder34.031.02.00.0
1312359niki mäenpää23.01.01985.0EspooFinland1985-01-23Goalkeeper191.0rightFinlandNaNIT12021venezia fcitaly200000.02021-02-152023-06-30NaNNaNNaNNaNICM Stellar Sportsniki maenpaanikimaenpaanitalyGKGoalkeeperGoalkeeper36.036.00.01.0
1412563goran pandev27.07.01983.0StrumicaJugoslawien (SFR)1983-07-27attack - Second Striker184.0leftNaNItalyIT12021genoa cfcitaly500000.02015-07-072022-06-30NaNNaNNaNNaNCarlo Pallavicinogoran pandevgoranpandevgitalySSForwardOutfielder38.031.06.00.0
1512907alessio cragno28.06.01994.0FiesoleItaly1994-06-28Goalkeeper184.0rightItalyNaNIT12021cagliari calcioitaly20000000.02014-07-122024-06-30NaNNaNNaNNaNPromoesportalessio cragnoalessiocragnoaitalyGKGoalkeeperGoalkeeper27.020.07.02.0
1613460lee grant27.01.01983.0Hemel HempsteadEngland1983-01-27Goalkeeper193.0rightEnglandNaNGB12021manchester unitedengland250000.02018-07-032022-06-30NaNNaNNaNNaNNaNlee grantleegrantlenglandGKGoalkeeperGoalkeeper38.035.03.00.0
1713572ben foster3.04.01983.0Leamington SpaEngland1983-04-03Goalkeeper193.0leftEnglandNaNGB12021watford fcengland300000.02018-07-052022-06-30NaNNaNNaNNaNNaNben fosterbenfosterbenglandGKGoalkeeperGoalkeeper38.035.03.00.0
1814044andy lonergan19.010.01983.0PrestonEngland1983-10-19Goalkeeper193.0leftEnglandNaNGB12021everton fcengland250000.02021-08-202022-06-30NaNNaNNaNNaNUK Sport Management BVandy lonerganandylonerganaenglandGKGoalkeeperGoalkeeper37.037.00.00.0
1914086ashley young9.07.01985.0StevenageEngland1985-07-09Defender - Left-Back175.0bothNaNJamaicaGB12021aston villaengland1000000.02021-07-012022-06-30NaNNaNNaNNaNCAA Base Ltdashley youngashleyyoungaenglandLBDefenderOutfielder36.036.00.00.0
2014555scott carson3.09.01985.0WhitehavenEngland1985-09-03Goalkeeper188.0rightEnglandNaNGB12021manchester cityengland300000.02021-07-202022-06-30NaNNaNNaNNaNWassermanscott carsonscottcarsonsenglandGKGoalkeeperGoalkeeper35.035.00.00.0
2115452raúl albiol4.09.01985.0VilamarxantSpain1985-09-04Defender - Centre-Back190.0rightSpainNaNES12021villarreal cfspain2500000.02019-07-042022-06-30NaNNaNNaNNaNFootball Capitalraul albiolraulalbiolrspainCBDefenderOutfielder35.033.02.00.0
2215773phil bardsley28.06.01985.0SalfordEngland1985-06-28Defender - Right-Back180.0rightNaNEnglandGB12021burnley fcengland300000.02017-07-252022-06-30NaNNaNNaNNaNNaNphil bardsleyphilbardsleypenglandRBDefenderOutfielder36.032.04.00.0
2315930david martin22.01.01986.0LondonEngland1986-01-22Goalkeeper188.0rightEnglandNaNGB12021west ham unitedengland250000.02019-07-012022-06-30NaNNaNNaNNaNMomentum Sports Managementdavid martindavidmartindenglandGKGoalkeeperGoalkeeper35.033.02.00.0
2415956jesús navas21.011.01985.0Los Palacios y VillafrancaSpain1985-11-21Defender - Right-Back172.0rightSpainNaNES12021sevilla fcspain3000000.02017-08-012024-06-30NaNNaNNaNNaNBahía Internacionaljesus navasjesusnavasjspainRBDefenderOutfielder35.031.04.02.0
2516136dante18.010.01983.0Salvador da BahiaBrazil1983-10-18Defender - Centre-Back189.0leftBrazilNaNFR12021ogc nicefrance1000000.02016-08-232022-06-30NaNNaNNaNNaNMarcus MarindantedantedantedfranceCBDefenderOutfielder37.032.05.00.0
2616306casemiro23.02.01992.0São José dos CamposBrazil1992-02-23midfield - Defensive Midfield185.0rightNaNSpainES12021real madridspain70000000.02013-07-012025-06-30NaNNaNNaNNaNBest of YoucasemirocasemirocasemirocspainCDMMidfielderOutfielder29.021.08.03.0
2716408orestis karnezis11.07.01985.0AthenGreece1985-07-11Goalkeeper190.0rightGreeceNaNFR12021losc lillefrance500000.02020-09-042023-06-30NaNNaNNaNNaNNaNorestis karnezisorestiskarnezisofranceGKGoalkeeperGoalkeeper36.035.00.01.0
2816633alex cordaz1.01.01983.0Vittorio VenetoItaly1983-01-01Goalkeeper188.0rightItalyNaNIT12021inter milanitaly500000.02021-07-012022-06-30NaNNaNNaNNaNQUAN SPORTS MANAGEMENT ITALIAalex cordazalexcordazaitalyGKGoalkeeperGoalkeeper38.038.00.00.0
2916911kasper schmeichel5.011.01986.0KopenhagenDenmark1986-11-05Goalkeeper189.0rightDenmarkNaNGB12021leicester cityengland6000000.02011-07-012023-06-30NaNNaNNaNNaNP&P Sport Management S.A.M.kasper schmeichelkasperschmeichelkenglandGKGoalkeeperGoalkeeper34.024.010.01.0
3016922kevin-prince boateng6.03.01987.0BerlinGermany1987-03-06midfield - Attacking Midfield186.0rightNaNGermanyL12021hertha bscgermany2000000.02021-07-012022-06-30NaNNaNNaNNaNExcellence Sportkevin-prince boatengkevin-princeboatengkgermanyCAMMidfielderOutfielder34.034.00.00.0
3117259manuel neuer27.03.01986.0GelsenkirchenGermany1986-03-27Goalkeeper193.0rightGermanyNaNL12021bayern munichgermany18000000.02011-07-012023-06-30NaNNaNNaNNaNPRO Profil GmbHmanuel neuermanuelneuermgermanyGKGoalkeeperGoalkeeper35.025.010.01.0
3217965hugo lloris26.012.01986.0NizzaFrance1986-12-26Goalkeeper188.0leftFranceNaNGB12021tottenham hotspurengland9000000.02012-08-312022-06-30NaNNaNNaNNaNNaNhugo llorishugollorishenglandGKGoalkeeperGoalkeeper34.025.08.00.0
3318644álvaro negredo20.08.01985.0MadridSpain1985-08-20attack - Centre-Forward186.0leftSpainNaNES12021cádiz cfspain1200000.02020-08-042022-06-30NaNNaNNaNNaNNiagara Sports Companyalvaro negredoalvaronegredoaspainSTForwardOutfielder36.034.01.00.0
3418909jimmy briand2.08.01985.0Vitry-sur-SeineFrance1985-08-02attack - Centre-Forward183.0rightNaNMartiniqueFR12021fc girondins bordeauxfrance1100000.02018-08-102022-06-30NaNNaNNaNNaNTTMAjimmy briandjimmybriandjfranceSTForwardOutfielder36.033.03.00.0
3518922karim benzema19.012.01987.0LyonFrance1987-12-19attack - Centre-Forward184.0bothNaNAlgeriaES12021real madridspain25000000.02009-07-092023-06-30NaNNaNNaNNaNNaNkarim benzemakarimbenzemakspainSTForwardOutfielder33.021.012.01.0
3618934thomas mangani29.04.01987.0CarpentrasFrance1987-04-29midfield - Central Midfield183.0leftNaNItalyFR12021sco angersfrance1000000.02015-07-012022-06-30NaNNaNNaNNaNKemarithomas manganithomasmanganitfranceCMMidfielderOutfielder34.028.06.00.0
3718944gerard piqué2.02.01987.0BarcelonaSpain1987-02-02Defender - Centre-Back194.0rightSpainNaNES12021fc barcelonaspain10000000.02008-07-012024-06-30NaNNaNNaNNaNAC Talentgerard piquegerardpiquegspainCBDefenderOutfielder34.021.013.02.0
3820005papu gómez15.02.01988.0Buenos AiresArgentina1988-02-15attack - Second Striker167.0rightNaNItalyES12021sevilla fcspain9000000.02021-01-262024-06-30NaNNaNNaNNaNGr Sportspapu gomezpapugomezpspainSSForwardOutfielder33.032.00.02.0
3920463corentin jean15.07.01995.0BloisFrance1995-07-15attack - Centre-Forward170.0rightFranceNaNFR12021rc lensfrance1600000.02020-07-012023-06-30NaNNaNNaNNaNfirsteleven ISMcorentin jeancorentinjeancfranceSTForwardOutfielder26.024.01.01.0
4020506andrés guardado28.09.01986.0GuadalajaraMexico1986-09-28midfield - Central Midfield169.0leftNaNSpainES12021real betis balompiéspain1500000.02017-07-072022-06-30NaNNaNNaNNaNNaNandres guardadoandresguardadoaspainCMMidfielderOutfielder34.030.04.00.0
4121726philipp tschauner3.011.01985.0SchwabachGermany1985-11-03Goalkeeper196.0rightGermanyNaNL12021rb leipziggermany300000.02019-07-302022-06-30NaNNaNNaNNaNNaNphilipp tschaunerphilipptschaunerpgermanyGKGoalkeeperGoalkeeper35.033.02.00.0
4221763federico peluso20.01.01984.0RomaItaly1984-01-20Defender - Centre-Back188.0leftItalyNaNIT12021us sassuoloitaly400000.02014-07-032022-06-30NaNNaNNaNNaNPLAYER MANAGEMENT SRLfederico pelusofedericopelusofitalyCBDefenderOutfielder37.030.07.00.0
4321872gianluca pegolo25.03.01981.0Bassano del GrappaItaly1981-03-25Goalkeeper183.0leftItalyNaNIT12021us sassuoloitaly100000.02013-09-022022-06-30NaNNaNNaNNaNP&P Sport Management S.A.M.gianluca pegologianlucapegologitalyGKGoalkeeperGoalkeeper40.032.07.00.0
4421905valon behrami19.04.01985.0MitrovicëJugoslawien (SFR)1985-04-19midfield - Defensive Midfield184.0rightNaNKosovoIT12021genoa cfcitaly400000.02020-01-022022-06-30NaNNaNNaNNaNQUAN SPORTS MANAGEMENT ITALIAvalon behramivalonbehramivitalyCDMMidfielderOutfielder36.034.01.00.0
4521972cristian molinaro30.07.01983.0Vallo della LucaniaItaly1983-07-30Defender - Left-Back182.0leftItalyNaNIT12021venezia fcitaly75000.02020-01-152024-06-30NaNNaNNaNNaNno agentcristian molinarocristianmolinarocitalyLBDefenderOutfielder38.036.01.02.0
4622318federico marchetti7.02.01983.0Bassano del GrappaItaly1983-02-07Goalkeeper188.0leftItalyNaNIT12021genoa cfcitaly200000.02018-07-012022-06-30NaNNaNNaNNaNAGB Sport Managementfederico marchettifedericomarchettifitalyGKGoalkeeperGoalkeeper38.035.03.00.0
4722328fabio quagliarella31.01.01983.0Castellammare di StabiaItaly1983-01-31attack - Centre-Forward180.0rightItalyNaNIT12021uc sampdoriaitaly1000000.02016-07-012022-06-30NaNNaNNaNNaNAGB Sport Managementfabio quagliarellafabioquagliarellafitalySTForwardOutfielder38.033.05.00.0
4822628benoît costil3.07.01987.0CaenFrance1987-07-03Goalkeeper188.0rightFranceNaNFR12021fc girondins bordeauxfrance2800000.02017-07-012022-06-30NaNNaNNaNNaNSVF FOOTbenoit costilbenoitcostilbfranceGKGoalkeeperGoalkeeper34.030.04.00.0
4923951steve mandanda28.03.01985.0KinshasaZaire1985-03-28Goalkeeper185.0rightNaNDR CongoFR12021olympique marseillefrance2000000.02017-07-112024-06-30NaNNaNNaNNaNS.C. Sports Managementsteve mandandastevemandandasfranceGKGoalkeeperGoalkeeper36.032.04.02.0
\n", "" ], "text/plain": [ " player_id player_name day_of_birth month_of_birth \\\n", "0 2857 eldin jakupovic 2.0 10.0 \n", "1 3333 james milner 4.0 1.0 \n", "2 3455 zlatan ibrahimovic 3.0 10.0 \n", "3 5578 nicolas penneteau 28.0 2.0 \n", "4 6442 antonio rosati 26.0 6.0 \n", "5 7093 francesco magnanelli 12.0 11.0 \n", "6 7161 jonas hofmann 14.0 7.0 \n", "7 7663 joaquín 21.0 7.0 \n", "8 7825 pepe reina 31.0 8.0 \n", "9 8176 oier olazábal 14.0 9.0 \n", "10 8198 cristiano ronaldo 5.0 2.0 \n", "11 8246 philipp pentke 1.0 5.0 \n", "12 8806 cesc fàbregas 4.0 5.0 \n", "13 12359 niki mäenpää 23.0 1.0 \n", "14 12563 goran pandev 27.0 7.0 \n", "15 12907 alessio cragno 28.0 6.0 \n", "16 13460 lee grant 27.0 1.0 \n", "17 13572 ben foster 3.0 4.0 \n", "18 14044 andy lonergan 19.0 10.0 \n", "19 14086 ashley young 9.0 7.0 \n", "20 14555 scott carson 3.0 9.0 \n", "21 15452 raúl albiol 4.0 9.0 \n", "22 15773 phil bardsley 28.0 6.0 \n", "23 15930 david martin 22.0 1.0 \n", "24 15956 jesús navas 21.0 11.0 \n", "25 16136 dante 18.0 10.0 \n", "26 16306 casemiro 23.0 2.0 \n", "27 16408 orestis karnezis 11.0 7.0 \n", "28 16633 alex cordaz 1.0 1.0 \n", "29 16911 kasper schmeichel 5.0 11.0 \n", "30 16922 kevin-prince boateng 6.0 3.0 \n", "31 17259 manuel neuer 27.0 3.0 \n", "32 17965 hugo lloris 26.0 12.0 \n", "33 18644 álvaro negredo 20.0 8.0 \n", "34 18909 jimmy briand 2.0 8.0 \n", "35 18922 karim benzema 19.0 12.0 \n", "36 18934 thomas mangani 29.0 4.0 \n", "37 18944 gerard piqué 2.0 2.0 \n", "38 20005 papu gómez 15.0 2.0 \n", "39 20463 corentin jean 15.0 7.0 \n", "40 20506 andrés guardado 28.0 9.0 \n", "41 21726 philipp tschauner 3.0 11.0 \n", "42 21763 federico peluso 20.0 1.0 \n", "43 21872 gianluca pegolo 25.0 3.0 \n", "44 21905 valon behrami 19.0 4.0 \n", "45 21972 cristian molinaro 30.0 7.0 \n", "46 22318 federico marchetti 7.0 2.0 \n", "47 22328 fabio quagliarella 31.0 1.0 \n", "48 22628 benoît costil 3.0 7.0 \n", "49 23951 steve mandanda 28.0 3.0 \n", "\n", " year_of_birth pob cob dob \\\n", "0 1984.0 Kozarac Jugoslawien (SFR) 1984-10-02 \n", "1 1986.0 Leeds England 1986-01-04 \n", "2 1981.0 Malmö Sweden 1981-10-03 \n", "3 1981.0 Marseille France 1981-02-28 \n", "4 1983.0 Tivoli Italy 1983-06-26 \n", "5 1984.0 Umbertide Italy 1984-11-12 \n", "6 1992.0 Heidelberg Germany 1992-07-14 \n", "7 1981.0 El Puerto de Santa María Spain 1981-07-21 \n", "8 1982.0 Madrid Spain 1982-08-31 \n", "9 1989.0 Irún Spain 1989-09-14 \n", "10 1985.0 Funchal Portugal 1985-02-05 \n", "11 1985.0 Freiberg DDR 1985-05-01 \n", "12 1987.0 Arenys de Mar Spain 1987-05-04 \n", "13 1985.0 Espoo Finland 1985-01-23 \n", "14 1983.0 Strumica Jugoslawien (SFR) 1983-07-27 \n", "15 1994.0 Fiesole Italy 1994-06-28 \n", "16 1983.0 Hemel Hempstead England 1983-01-27 \n", "17 1983.0 Leamington Spa England 1983-04-03 \n", "18 1983.0 Preston England 1983-10-19 \n", "19 1985.0 Stevenage England 1985-07-09 \n", "20 1985.0 Whitehaven England 1985-09-03 \n", "21 1985.0 Vilamarxant Spain 1985-09-04 \n", "22 1985.0 Salford England 1985-06-28 \n", "23 1986.0 London England 1986-01-22 \n", "24 1985.0 Los Palacios y Villafranca Spain 1985-11-21 \n", "25 1983.0 Salvador da Bahia Brazil 1983-10-18 \n", "26 1992.0 São José dos Campos Brazil 1992-02-23 \n", "27 1985.0 Athen Greece 1985-07-11 \n", "28 1983.0 Vittorio Veneto Italy 1983-01-01 \n", "29 1986.0 Kopenhagen Denmark 1986-11-05 \n", "30 1987.0 Berlin Germany 1987-03-06 \n", "31 1986.0 Gelsenkirchen Germany 1986-03-27 \n", "32 1986.0 Nizza France 1986-12-26 \n", "33 1985.0 Madrid Spain 1985-08-20 \n", "34 1985.0 Vitry-sur-Seine France 1985-08-02 \n", "35 1987.0 Lyon France 1987-12-19 \n", "36 1987.0 Carpentras France 1987-04-29 \n", "37 1987.0 Barcelona Spain 1987-02-02 \n", "38 1988.0 Buenos Aires Argentina 1988-02-15 \n", "39 1995.0 Blois France 1995-07-15 \n", "40 1986.0 Guadalajara Mexico 1986-09-28 \n", "41 1985.0 Schwabach Germany 1985-11-03 \n", "42 1984.0 Roma Italy 1984-01-20 \n", "43 1981.0 Bassano del Grappa Italy 1981-03-25 \n", "44 1985.0 Mitrovicë Jugoslawien (SFR) 1985-04-19 \n", "45 1983.0 Vallo della Lucania Italy 1983-07-30 \n", "46 1983.0 Bassano del Grappa Italy 1983-02-07 \n", "47 1983.0 Castellammare di Stabia Italy 1983-01-31 \n", "48 1987.0 Caen France 1987-07-03 \n", "49 1985.0 Kinshasa Zaire 1985-03-28 \n", "\n", " position height foot citizenship \\\n", "0 Goalkeeper 191.0 right NaN \n", "1 midfield - Central Midfield 175.0 right England \n", "2 attack - Centre-Forward 195.0 both NaN \n", "3 Goalkeeper 185.0 left France \n", "4 Goalkeeper 195.0 right Italy \n", "5 midfield - Defensive Midfield 181.0 right Italy \n", "6 attack - Right Winger 176.0 right Germany \n", "7 attack - Right Winger 181.0 right Spain \n", "8 Goalkeeper 188.0 right Spain \n", "9 Goalkeeper 189.0 left Spain \n", "10 attack - Centre-Forward 187.0 right Portugal \n", "11 Goalkeeper 191.0 right Germany \n", "12 midfield - Central Midfield 178.0 right Spain \n", "13 Goalkeeper 191.0 right Finland \n", "14 attack - Second Striker 184.0 left NaN \n", "15 Goalkeeper 184.0 right Italy \n", "16 Goalkeeper 193.0 right England \n", "17 Goalkeeper 193.0 left England \n", "18 Goalkeeper 193.0 left England \n", "19 Defender - Left-Back 175.0 both NaN \n", "20 Goalkeeper 188.0 right England \n", "21 Defender - Centre-Back 190.0 right Spain \n", "22 Defender - Right-Back 180.0 right NaN \n", "23 Goalkeeper 188.0 right England \n", "24 Defender - Right-Back 172.0 right Spain \n", "25 Defender - Centre-Back 189.0 left Brazil \n", "26 midfield - Defensive Midfield 185.0 right NaN \n", "27 Goalkeeper 190.0 right Greece \n", "28 Goalkeeper 188.0 right Italy \n", "29 Goalkeeper 189.0 right Denmark \n", "30 midfield - Attacking Midfield 186.0 right NaN \n", "31 Goalkeeper 193.0 right Germany \n", "32 Goalkeeper 188.0 left France \n", "33 attack - Centre-Forward 186.0 left Spain \n", "34 attack - Centre-Forward 183.0 right NaN \n", "35 attack - Centre-Forward 184.0 both NaN \n", "36 midfield - Central Midfield 183.0 left NaN \n", "37 Defender - Centre-Back 194.0 right Spain \n", "38 attack - Second Striker 167.0 right NaN \n", "39 attack - Centre-Forward 170.0 right France \n", "40 midfield - Central Midfield 169.0 left NaN \n", "41 Goalkeeper 196.0 right Germany \n", "42 Defender - Centre-Back 188.0 left Italy \n", "43 Goalkeeper 183.0 left Italy \n", "44 midfield - Defensive Midfield 184.0 right NaN \n", "45 Defender - Left-Back 182.0 left Italy \n", "46 Goalkeeper 188.0 left Italy \n", "47 attack - Centre-Forward 180.0 right Italy \n", "48 Goalkeeper 188.0 right France \n", "49 Goalkeeper 185.0 right NaN \n", "\n", " second_citizenship league_code season current_club \\\n", "0 Bosnia-Herzegovina GB1 2021 leicester city \n", "1 NaN GB1 2021 liverpool fc \n", "2 Bosnia-Herzegovina IT1 2021 ac milan \n", "3 NaN FR1 2021 stade reims \n", "4 NaN IT1 2021 acf fiorentina \n", "5 NaN IT1 2021 us sassuolo \n", "6 NaN L1 2021 borussia mönchengladbach \n", "7 NaN ES1 2021 real betis balompié \n", "8 NaN IT1 2021 ss lazio \n", "9 NaN ES1 2021 rcd espanyol barcelona \n", "10 NaN IT1 2021 juventus fc \n", "11 NaN L1 2021 tsg 1899 hoffenheim \n", "12 NaN FR1 2021 as monaco \n", "13 NaN IT1 2021 venezia fc \n", "14 Italy IT1 2021 genoa cfc \n", "15 NaN IT1 2021 cagliari calcio \n", "16 NaN GB1 2021 manchester united \n", "17 NaN GB1 2021 watford fc \n", "18 NaN GB1 2021 everton fc \n", "19 Jamaica GB1 2021 aston villa \n", "20 NaN GB1 2021 manchester city \n", "21 NaN ES1 2021 villarreal cf \n", "22 England GB1 2021 burnley fc \n", "23 NaN GB1 2021 west ham united \n", "24 NaN ES1 2021 sevilla fc \n", "25 NaN FR1 2021 ogc nice \n", "26 Spain ES1 2021 real madrid \n", "27 NaN FR1 2021 losc lille \n", "28 NaN IT1 2021 inter milan \n", "29 NaN GB1 2021 leicester city \n", "30 Germany L1 2021 hertha bsc \n", "31 NaN L1 2021 bayern munich \n", "32 NaN GB1 2021 tottenham hotspur \n", "33 NaN ES1 2021 cádiz cf \n", "34 Martinique FR1 2021 fc girondins bordeaux \n", "35 Algeria ES1 2021 real madrid \n", "36 Italy FR1 2021 sco angers \n", "37 NaN ES1 2021 fc barcelona \n", "38 Italy ES1 2021 sevilla fc \n", "39 NaN FR1 2021 rc lens \n", "40 Spain ES1 2021 real betis balompié \n", "41 NaN L1 2021 rb leipzig \n", "42 NaN IT1 2021 us sassuolo \n", "43 NaN IT1 2021 us sassuolo \n", "44 Kosovo IT1 2021 genoa cfc \n", "45 NaN IT1 2021 venezia fc \n", "46 NaN IT1 2021 genoa cfc \n", "47 NaN IT1 2021 uc sampdoria \n", "48 NaN FR1 2021 fc girondins bordeaux \n", "49 DR Congo FR1 2021 olympique marseille \n", "\n", " current_club_country market_value joined contract_expires \\\n", "0 england 300000.0 2017-07-19 2021-06-30 \n", "1 england 3000000.0 2015-07-01 2022-06-30 \n", "2 italy 4000000.0 2020-01-02 2022-06-30 \n", "3 france 200000.0 2021-07-01 2023-06-30 \n", "4 italy 100000.0 2021-02-01 NaT \n", "5 italy 400000.0 2005-07-01 2022-06-30 \n", "6 germany 16000000.0 2016-01-01 2023-06-30 \n", "7 spain 1500000.0 2015-08-31 2022-06-30 \n", "8 italy 800000.0 2020-09-01 2022-06-30 \n", "9 spain 300000.0 2020-01-31 2022-06-30 \n", "10 italy 45000000.0 2018-07-10 2022-06-30 \n", "11 germany 300000.0 2019-07-01 2022-06-30 \n", "12 monaco 5000000.0 2019-01-11 2022-06-30 \n", "13 italy 200000.0 2021-02-15 2023-06-30 \n", "14 italy 500000.0 2015-07-07 2022-06-30 \n", "15 italy 20000000.0 2014-07-12 2024-06-30 \n", "16 england 250000.0 2018-07-03 2022-06-30 \n", "17 england 300000.0 2018-07-05 2022-06-30 \n", "18 england 250000.0 2021-08-20 2022-06-30 \n", "19 england 1000000.0 2021-07-01 2022-06-30 \n", "20 england 300000.0 2021-07-20 2022-06-30 \n", "21 spain 2500000.0 2019-07-04 2022-06-30 \n", "22 england 300000.0 2017-07-25 2022-06-30 \n", "23 england 250000.0 2019-07-01 2022-06-30 \n", "24 spain 3000000.0 2017-08-01 2024-06-30 \n", "25 france 1000000.0 2016-08-23 2022-06-30 \n", "26 spain 70000000.0 2013-07-01 2025-06-30 \n", "27 france 500000.0 2020-09-04 2023-06-30 \n", "28 italy 500000.0 2021-07-01 2022-06-30 \n", "29 england 6000000.0 2011-07-01 2023-06-30 \n", "30 germany 2000000.0 2021-07-01 2022-06-30 \n", "31 germany 18000000.0 2011-07-01 2023-06-30 \n", "32 england 9000000.0 2012-08-31 2022-06-30 \n", "33 spain 1200000.0 2020-08-04 2022-06-30 \n", "34 france 1100000.0 2018-08-10 2022-06-30 \n", "35 spain 25000000.0 2009-07-09 2023-06-30 \n", "36 france 1000000.0 2015-07-01 2022-06-30 \n", "37 spain 10000000.0 2008-07-01 2024-06-30 \n", "38 spain 9000000.0 2021-01-26 2024-06-30 \n", "39 france 1600000.0 2020-07-01 2023-06-30 \n", "40 spain 1500000.0 2017-07-07 2022-06-30 \n", "41 germany 300000.0 2019-07-30 2022-06-30 \n", "42 italy 400000.0 2014-07-03 2022-06-30 \n", "43 italy 100000.0 2013-09-02 2022-06-30 \n", "44 italy 400000.0 2020-01-02 2022-06-30 \n", "45 italy 75000.0 2020-01-15 2024-06-30 \n", "46 italy 200000.0 2018-07-01 2022-06-30 \n", "47 italy 1000000.0 2016-07-01 2022-06-30 \n", "48 france 2800000.0 2017-07-01 2022-06-30 \n", "49 france 2000000.0 2017-07-11 2024-06-30 \n", "\n", " contract_option on_loan_from on_loan_from_country loan_contract_expiry \\\n", "0 NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN \n", "2 NaN NaN NaN NaN \n", "3 NaN NaN NaN NaN \n", "4 NaN NaN NaN NaN \n", "5 NaN NaN NaN NaN \n", "6 NaN NaN NaN NaN \n", "7 NaN NaN NaN NaN \n", "8 NaN NaN NaN NaN \n", "9 NaN NaN NaN NaN \n", "10 NaN NaN NaN NaN \n", "11 NaN NaN NaN NaN \n", "12 NaN NaN NaN NaN \n", "13 NaN NaN NaN NaN \n", "14 NaN NaN NaN NaN \n", "15 NaN NaN NaN NaN \n", "16 NaN NaN NaN NaN \n", "17 NaN NaN NaN NaN \n", "18 NaN NaN NaN NaN \n", "19 NaN NaN NaN NaN \n", "20 NaN NaN NaN NaN \n", "21 NaN NaN NaN NaN \n", "22 NaN NaN NaN NaN \n", "23 NaN NaN NaN NaN \n", "24 NaN NaN NaN NaN \n", "25 NaN NaN NaN NaN \n", "26 NaN NaN NaN NaN \n", "27 NaN NaN NaN NaN \n", "28 NaN NaN NaN NaN \n", "29 NaN NaN NaN NaN \n", "30 NaN NaN NaN NaN \n", "31 NaN NaN NaN NaN \n", "32 NaN NaN NaN NaN \n", "33 NaN NaN NaN NaN \n", "34 NaN NaN NaN NaN \n", "35 NaN NaN NaN NaN \n", "36 NaN NaN NaN NaN \n", "37 NaN NaN NaN NaN \n", "38 NaN NaN NaN NaN \n", "39 NaN NaN NaN NaN \n", "40 NaN NaN NaN NaN \n", "41 NaN NaN NaN NaN \n", "42 NaN NaN NaN NaN \n", "43 NaN NaN NaN NaN \n", "44 NaN NaN NaN NaN \n", "45 NaN NaN NaN NaN \n", "46 NaN NaN NaN NaN \n", "47 NaN NaN NaN NaN \n", "48 NaN NaN NaN NaN \n", "49 NaN NaN NaN NaN \n", "\n", " player_agent name_lower firstname_lower \\\n", "0 HSD eldin jakupovic eldin \n", "1 Samii Sport-Marketing Agentur james milner james \n", "2 Mino Raiola zlatan ibrahimovic zlatan \n", "3 USM GROUP nicolas penneteau nicolas \n", "4 Alessandro Lucci - WSA antonio rosati antonio \n", "5 TMP SOCCER srl francesco magnanelli francesco \n", "6 Dr. Gutfleisch jonas hofmann jonas \n", "7 Juzzt Football joaquin joaquin \n", "8 Manuel García Quilón pepe reina pepe \n", "9 Sport Agency 4U oier olazabal oier \n", "10 Gestifute cristiano ronaldo cristiano \n", "11 Bigpoint philipp pentke philipp \n", "12 Darren Dein cesc fabregas cesc \n", "13 ICM Stellar Sports niki maenpaa niki \n", "14 Carlo Pallavicino goran pandev goran \n", "15 Promoesport alessio cragno alessio \n", "16 NaN lee grant lee \n", "17 NaN ben foster ben \n", "18 UK Sport Management BV andy lonergan andy \n", "19 CAA Base Ltd ashley young ashley \n", "20 Wasserman scott carson scott \n", "21 Football Capital raul albiol raul \n", "22 NaN phil bardsley phil \n", "23 Momentum Sports Management david martin david \n", "24 Bahía Internacional jesus navas jesus \n", "25 Marcus Marin dante dante \n", "26 Best of You casemiro casemiro \n", "27 NaN orestis karnezis orestis \n", "28 QUAN SPORTS MANAGEMENT ITALIA alex cordaz alex \n", "29 P&P Sport Management S.A.M. kasper schmeichel kasper \n", "30 Excellence Sport kevin-prince boateng kevin-prince \n", "31 PRO Profil GmbH manuel neuer manuel \n", "32 NaN hugo lloris hugo \n", "33 Niagara Sports Company alvaro negredo alvaro \n", "34 TTMA jimmy briand jimmy \n", "35 NaN karim benzema karim \n", "36 Kemari thomas mangani thomas \n", "37 AC Talent gerard pique gerard \n", "38 Gr Sports papu gomez papu \n", "39 firsteleven ISM corentin jean corentin \n", "40 NaN andres guardado andres \n", "41 NaN philipp tschauner philipp \n", "42 PLAYER MANAGEMENT SRL federico peluso federico \n", "43 P&P Sport Management S.A.M. gianluca pegolo gianluca \n", "44 QUAN SPORTS MANAGEMENT ITALIA valon behrami valon \n", "45 no agent cristian molinaro cristian \n", "46 AGB Sport Management federico marchetti federico \n", "47 AGB Sport Management fabio quagliarella fabio \n", "48 SVF FOOT benoit costil benoit \n", "49 S.C. Sports Management steve mandanda steve \n", "\n", " lastname_lower firstinitial_lower league_country_lower position_code \\\n", "0 jakupovic e england GK \n", "1 milner j england CM \n", "2 ibrahimovic z italy ST \n", "3 penneteau n france GK \n", "4 rosati a italy GK \n", "5 magnanelli f italy CDM \n", "6 hofmann j germany RW \n", "7 joaquin j spain RW \n", "8 reina p italy GK \n", "9 olazabal o spain GK \n", "10 ronaldo c italy ST \n", "11 pentke p germany GK \n", "12 fabregas c monaco CM \n", "13 maenpaa n italy GK \n", "14 pandev g italy SS \n", "15 cragno a italy GK \n", "16 grant l england GK \n", "17 foster b england GK \n", "18 lonergan a england GK \n", "19 young a england LB \n", "20 carson s england GK \n", "21 albiol r spain CB \n", "22 bardsley p england RB \n", "23 martin d england GK \n", "24 navas j spain RB \n", "25 dante d france CB \n", "26 casemiro c spain CDM \n", "27 karnezis o france GK \n", "28 cordaz a italy GK \n", "29 schmeichel k england GK \n", "30 boateng k germany CAM \n", "31 neuer m germany GK \n", "32 lloris h england GK \n", "33 negredo a spain ST \n", "34 briand j france ST \n", "35 benzema k spain ST \n", "36 mangani t france CM \n", "37 pique g spain CB \n", "38 gomez p spain SS \n", "39 jean c france ST \n", "40 guardado a spain CM \n", "41 tschauner p germany GK \n", "42 peluso f italy CB \n", "43 pegolo g italy GK \n", "44 behrami v italy CDM \n", "45 molinaro c italy LB \n", "46 marchetti f italy GK \n", "47 quagliarella f italy ST \n", "48 costil b france GK \n", "49 mandanda s france GK \n", "\n", " position_grouped outfielder_goalkeeper age age_when_joining \\\n", "0 Goalkeeper Goalkeeper 36.0 32.0 \n", "1 Midfielder Outfielder 35.0 29.0 \n", "2 Forward Outfielder 39.0 38.0 \n", "3 Goalkeeper Goalkeeper 40.0 40.0 \n", "4 Goalkeeper Goalkeeper 38.0 37.0 \n", "5 Midfielder Outfielder 36.0 20.0 \n", "6 Forward Outfielder 29.0 23.0 \n", "7 Forward Outfielder 40.0 34.0 \n", "8 Goalkeeper Goalkeeper 39.0 38.0 \n", "9 Goalkeeper Goalkeeper 31.0 30.0 \n", "10 Forward Outfielder 36.0 33.0 \n", "11 Goalkeeper Goalkeeper 36.0 34.0 \n", "12 Midfielder Outfielder 34.0 31.0 \n", "13 Goalkeeper Goalkeeper 36.0 36.0 \n", "14 Forward Outfielder 38.0 31.0 \n", "15 Goalkeeper Goalkeeper 27.0 20.0 \n", "16 Goalkeeper Goalkeeper 38.0 35.0 \n", "17 Goalkeeper Goalkeeper 38.0 35.0 \n", "18 Goalkeeper Goalkeeper 37.0 37.0 \n", "19 Defender Outfielder 36.0 36.0 \n", "20 Goalkeeper Goalkeeper 35.0 35.0 \n", "21 Defender Outfielder 35.0 33.0 \n", "22 Defender Outfielder 36.0 32.0 \n", "23 Goalkeeper Goalkeeper 35.0 33.0 \n", "24 Defender Outfielder 35.0 31.0 \n", "25 Defender Outfielder 37.0 32.0 \n", "26 Midfielder Outfielder 29.0 21.0 \n", "27 Goalkeeper Goalkeeper 36.0 35.0 \n", "28 Goalkeeper Goalkeeper 38.0 38.0 \n", "29 Goalkeeper Goalkeeper 34.0 24.0 \n", "30 Midfielder Outfielder 34.0 34.0 \n", "31 Goalkeeper Goalkeeper 35.0 25.0 \n", "32 Goalkeeper Goalkeeper 34.0 25.0 \n", "33 Forward Outfielder 36.0 34.0 \n", "34 Forward Outfielder 36.0 33.0 \n", "35 Forward Outfielder 33.0 21.0 \n", "36 Midfielder Outfielder 34.0 28.0 \n", "37 Defender Outfielder 34.0 21.0 \n", "38 Forward Outfielder 33.0 32.0 \n", "39 Forward Outfielder 26.0 24.0 \n", "40 Midfielder Outfielder 34.0 30.0 \n", "41 Goalkeeper Goalkeeper 35.0 33.0 \n", "42 Defender Outfielder 37.0 30.0 \n", "43 Goalkeeper Goalkeeper 40.0 32.0 \n", "44 Midfielder Outfielder 36.0 34.0 \n", "45 Defender Outfielder 38.0 36.0 \n", "46 Goalkeeper Goalkeeper 38.0 35.0 \n", "47 Forward Outfielder 38.0 33.0 \n", "48 Goalkeeper Goalkeeper 34.0 30.0 \n", "49 Goalkeeper Goalkeeper 36.0 32.0 \n", "\n", " years_since_joining years_until_contract_expiry \n", "0 4.0 -1.0 \n", "1 6.0 0.0 \n", "2 1.0 0.0 \n", "3 0.0 1.0 \n", "4 0.0 NaN \n", "5 16.0 0.0 \n", "6 5.0 1.0 \n", "7 6.0 0.0 \n", "8 0.0 0.0 \n", "9 1.0 0.0 \n", "10 3.0 0.0 \n", "11 2.0 0.0 \n", "12 2.0 0.0 \n", "13 0.0 1.0 \n", "14 6.0 0.0 \n", "15 7.0 2.0 \n", "16 3.0 0.0 \n", "17 3.0 0.0 \n", "18 0.0 0.0 \n", "19 0.0 0.0 \n", "20 0.0 0.0 \n", "21 2.0 0.0 \n", "22 4.0 0.0 \n", "23 2.0 0.0 \n", "24 4.0 2.0 \n", "25 5.0 0.0 \n", "26 8.0 3.0 \n", "27 0.0 1.0 \n", "28 0.0 0.0 \n", "29 10.0 1.0 \n", "30 0.0 0.0 \n", "31 10.0 1.0 \n", "32 8.0 0.0 \n", "33 1.0 0.0 \n", "34 3.0 0.0 \n", "35 12.0 1.0 \n", "36 6.0 0.0 \n", "37 13.0 2.0 \n", "38 0.0 2.0 \n", "39 1.0 1.0 \n", "40 4.0 0.0 \n", "41 2.0 0.0 \n", "42 7.0 0.0 \n", "43 7.0 0.0 \n", "44 1.0 0.0 \n", "45 1.0 2.0 \n", "46 3.0 0.0 \n", "47 5.0 0.0 \n", "48 4.0 0.0 \n", "49 4.0 2.0 " ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_tm_bio_status.head(50)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.1.6. Convert Euros to Pounds" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.90053" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get EUR to GBP exchange rate\n", "\n", "## Get latest currency rates\n", "c = CurrencyConverter()\n", "\n", "## Get conversion rate from EUR to GBP\n", "rate_eur_gbp = (c.convert(1, 'EUR', 'GBP'))\n", "rate_eur_gbp" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Overwrite\n", "rate_eur_gbp = 0.90\n", "rate_eur_gbp" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "# Convert TM.com Euro value to Pounds\n", "df_tm_bio_status['market_value_gbp'] = df_tm_bio_status['market_value'] * rate_eur_gbp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.1.7. Rename Columns" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [], "source": [ "df_tm_bio_status = df_tm_bio_status.rename(columns={'player_id': 'tm_id',\n", " 'season_x': 'season',\n", " 'market_value': 'market_value_eur',\n", " 'day_of_birth': 'birth_day',\n", " 'month_of_birth': 'birth_month',\n", " 'year_of_birth': 'birth_year'\n", " }\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.1.8. Filter Players in 'Big 5' European Leagues" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "# Filter players in the 'Big 5' European Leagues and MLS\n", "df_tm_bio_status_big5_mls = df_tm_bio_status[df_tm_bio_status['league_code'].isin(lst_big5_mls_league_codes)]" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No. rows in DataFrame BEFORE filtration: 9429\n", "No. rows in DataFrame AFTER filtration: 9429\n", "\n", "Variance in rows before and after filtration: 0\n", "\n", "----------\n" ] } ], "source": [ "print('No. rows in DataFrame BEFORE filtration: {}'.format(len(df_tm_bio_status)))\n", "print('No. rows in DataFrame AFTER filtration: {}\\n'.format(len(df_tm_bio_status_big5_mls)))\n", "print('Variance in rows before and after filtration: {}\\n'.format(len(df_tm_bio_status_big5_mls) - len(df_tm_bio_status)))\n", "print('-'*10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.1.9. Exporting the Engineered DataFrames\n", "Export the two engineered [TransferMarkt](https://www.transfermarkt.co.uk/) DataFrames as CSV files." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### All players" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [], "source": [ "## Filename\n", "file_name = 'tm_player_bio_status_all'\n", "\n", "## Full season string\n", "full_season_string = '2016/2017 - 2021/2022'\n", "\n", "## Short season string\n", "short_season_string = '1617-2122'" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "# Export DataFrame as a CSV file\n", "\n", "## Export a copy to the 'archive' subfolder of the TM folder, including the date\n", "df_tm_bio_status.to_csv(data_dir_tm + f'/engineered/bio-status/archive/{file_name}_{short_season_string}_last_updated_{today}.csv', index=None, header=True)\n", "\n", "## Export another copy to the TM folder called 'latest' (can be overwritten)\n", "df_tm_bio_status.to_csv(data_dir_tm + f'/engineered/bio-status/{file_name}_{short_season_string}_latest.csv', index=None, header=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### 'Big 5' European and MLS Players" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "## Filename\n", "file_name = 'tm_player_bio_status_big5_mls'\n", "\n", "## Full season string\n", "full_season_string = '2016/2017-2021/2022'\n", "\n", "## Short season string\n", "short_season_string = '1617-2122'" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [], "source": [ "## 'Big 5' European Leagues and MLS\n", "\n", "### Export a copy to the 'archive' subfolder of the TM folder, including the date\n", "df_tm_bio_status_big5_mls.to_csv(data_dir_tm + f'/engineered/bio-status/archive/tm_bio_status_big5_mls_{short_season_string}_last_updated_{today}.csv', index=None, header=True)\n", "\n", "### Export another copy to the TM folder called 'latest' (can be overwritten)\n", "df_tm_bio_status_big5_mls.to_csv(data_dir_tm + f'/engineered/bio-status/tm_bio_status_big5_mls_{short_season_string}_latest.csv', index=None, header=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we have created three pandas DataFrames and wrangled the data to meet our needs, we'll next conduct and [Exploratory Data Analysis ](#section5)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5. Exploratory Data Analysis" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
tm_idplayer_namebirth_daybirth_monthbirth_yearpobcobdobpositionheightfootcitizenshipsecond_citizenshipleague_codeseasoncurrent_clubcurrent_club_countrymarket_value_eurosjoinedcontract_expirescontract_optionon_loan_fromon_loan_from_countryloan_contract_expiryplayer_agentname_lowerfirstname_lowerlastname_lowerfirstinitial_lowerleague_country_lowerposition_codeposition_groupedoutfielder_goalkeeperageage_when_joiningyears_since_joiningyears_until_contract_expirymarket_value_pounds
02857eldin jakupovic2.010.01984.0KozaracJugoslawien (SFR)1984-10-02Goalkeeper191.0rightNaNBosnia-HerzegovinaGB12021leicester cityengland300000.02017-07-192021-06-30NaNNaNNaNNaNHSDeldin jakupoviceldinjakupoviceenglandGKGoalkeeperGoalkeeper36.032.04.0-1.0270000.0
13333james milner4.01.01986.0LeedsEngland1986-01-04midfield - Central Midfield175.0rightEnglandNaNGB12021liverpool fcengland3000000.02015-07-012022-06-30NaNNaNNaNNaNSamii Sport-Marketing Agenturjames milnerjamesmilnerjenglandCMMidfielderOutfielder35.029.06.00.02700000.0
23455zlatan ibrahimovic3.010.01981.0MalmöSweden1981-10-03attack - Centre-Forward195.0bothNaNBosnia-HerzegovinaIT12021ac milanitaly4000000.02020-01-022022-06-30NaNNaNNaNNaNMino Raiolazlatan ibrahimoviczlatanibrahimoviczitalySTForwardOutfielder39.038.01.00.03600000.0
35578nicolas penneteau28.02.01981.0MarseilleFrance1981-02-28Goalkeeper185.0leftFranceNaNFR12021stade reimsfrance200000.02021-07-012023-06-30NaNNaNNaNNaNUSM GROUPnicolas penneteaunicolaspenneteaunfranceGKGoalkeeperGoalkeeper40.040.00.01.0180000.0
46442antonio rosati26.06.01983.0TivoliItaly1983-06-26Goalkeeper195.0rightItalyNaNIT12021acf fiorentinaitaly100000.02021-02-01NaTNaNNaNNaNNaNAlessandro Lucci - WSAantonio rosatiantoniorosatiaitalyGKGoalkeeperGoalkeeper38.037.00.0NaN90000.0
\n", "
" ], "text/plain": [ " tm_id player_name birth_day birth_month birth_year pob \\\n", "0 2857 eldin jakupovic 2.0 10.0 1984.0 Kozarac \n", "1 3333 james milner 4.0 1.0 1986.0 Leeds \n", "2 3455 zlatan ibrahimovic 3.0 10.0 1981.0 Malmö \n", "3 5578 nicolas penneteau 28.0 2.0 1981.0 Marseille \n", "4 6442 antonio rosati 26.0 6.0 1983.0 Tivoli \n", "\n", " cob dob position height foot \\\n", "0 Jugoslawien (SFR) 1984-10-02 Goalkeeper 191.0 right \n", "1 England 1986-01-04 midfield - Central Midfield 175.0 right \n", "2 Sweden 1981-10-03 attack - Centre-Forward 195.0 both \n", "3 France 1981-02-28 Goalkeeper 185.0 left \n", "4 Italy 1983-06-26 Goalkeeper 195.0 right \n", "\n", " citizenship second_citizenship league_code season current_club \\\n", "0 NaN Bosnia-Herzegovina GB1 2021 leicester city \n", "1 England NaN GB1 2021 liverpool fc \n", "2 NaN Bosnia-Herzegovina IT1 2021 ac milan \n", "3 France NaN FR1 2021 stade reims \n", "4 Italy NaN IT1 2021 acf fiorentina \n", "\n", " current_club_country market_value_euros joined contract_expires \\\n", "0 england 300000.0 2017-07-19 2021-06-30 \n", "1 england 3000000.0 2015-07-01 2022-06-30 \n", "2 italy 4000000.0 2020-01-02 2022-06-30 \n", "3 france 200000.0 2021-07-01 2023-06-30 \n", "4 italy 100000.0 2021-02-01 NaT \n", "\n", " contract_option on_loan_from on_loan_from_country loan_contract_expiry \\\n", "0 NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN \n", "2 NaN NaN NaN NaN \n", "3 NaN NaN NaN NaN \n", "4 NaN NaN NaN NaN \n", "\n", " player_agent name_lower firstname_lower \\\n", "0 HSD eldin jakupovic eldin \n", "1 Samii Sport-Marketing Agentur james milner james \n", "2 Mino Raiola zlatan ibrahimovic zlatan \n", "3 USM GROUP nicolas penneteau nicolas \n", "4 Alessandro Lucci - WSA antonio rosati antonio \n", "\n", " lastname_lower firstinitial_lower league_country_lower position_code \\\n", "0 jakupovic e england GK \n", "1 milner j england CM \n", "2 ibrahimovic z italy ST \n", "3 penneteau n france GK \n", "4 rosati a italy GK \n", "\n", " position_grouped outfielder_goalkeeper age age_when_joining \\\n", "0 Goalkeeper Goalkeeper 36.0 32.0 \n", "1 Midfielder Outfielder 35.0 29.0 \n", "2 Forward Outfielder 39.0 38.0 \n", "3 Goalkeeper Goalkeeper 40.0 40.0 \n", "4 Goalkeeper Goalkeeper 38.0 37.0 \n", "\n", " years_since_joining years_until_contract_expiry market_value_pounds \n", "0 4.0 -1.0 270000.0 \n", "1 6.0 0.0 2700000.0 \n", "2 1.0 0.0 3600000.0 \n", "3 0.0 1.0 180000.0 \n", "4 0.0 NaN 90000.0 " ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_tm_bio_status_big5_mls.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6. Summary\n", "This Jupyter notebook engineered scraped football data from [TransferMarkt](https://www.transfermarkt.co.uk/) using [pandas](http://pandas.pydata.org/) for data manipulation through DataFrames." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7. Next Steps\n", "The step is to use this data and match it to FBref, 21st Club, Opta, FIFA, and other TransferMarkt datasets, such as the Transfer History dataset." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 8. References\n", "\n", "#### Data and Web Scraping\n", "* [tyrone_mings GitHub repository](https://github.com/FCrSTATS/tyrone_mings) by [FCrSTATS](https://github.com/FCrSTATS)\n", "* [Python Package Index (PyPI) tyrone-mings library](https://pypi.org/project/tyrone-mings/)\n", "* [Beyond crowd judgments: Data-driven estimation of market value in association football](https://www.sciencedirect.com/science/article/pii/S0377221717304332) by Oliver Müllera, Alexander Simons, and Markus Weinmann.\n", "* [06/04/2020: BBC - Premier League squads 'drop £1.6bn in value'](https://www.bbc.co.uk/sport/football/52221463)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "***Visit my website [eddwebster.com](https://www.eddwebster.com) or my [GitHub Repository](https://github.com/eddwebster) for more projects. If you'd like to get in contact, my Twitter handle is [@eddwebster](http://www.twitter.com/eddwebster) and my email is: edd.j.webster@gmail.com.***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[Back to the top](#top)" ] } ], "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.7.6" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "oldHeight": 642, "position": { "height": "664px", "left": "1119px", "right": "20px", "top": "-7px", "width": "489px" }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "varInspector_section_display": "block", "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }