{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Physical Data Engineering\n",
"##### Notebook to engineer physical data data using [pandas](http://pandas.pydata.org/).\n",
"\n",
"### By [Edd Webster](https://www.twitter.com/eddwebster)\n",
"Notebook first written: 20/01/2022
\n",
"Notebook last updated: 01/02/2022\n",
"\n",
"![Watford F.C.](../../img/club_badges/premier_league/watford_fc_logo_small.png)\n",
"\n",
"Click [here](#section4) to jump straight into the Data Engineering section and skip the [Notebook Brief](#section2) and [Data Sources](#section3) sections."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"___\n",
"\n",
"\n",
"## Introduction\n",
"This notebook engineers a an anonymised dataset of physical data provided by [Watford F.C](https://www.watfordfc.com/), using [pandas](http://pandas.pydata.org/) for data manipulation through DataFrames.\n",
"\n",
"For more information about this notebook and the author, I am 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/); and\n",
"* [public.tableau.com/profile/edd.webster](https://public.tableau.com/profile/edd.webster).\n",
"\n",
"A static version of this notebook can be found [here](https://nbviewer.org/github/eddwebster/watford/blob/main/notebooks/2_data_engineering/Opta%20Data%20Engineering.ipynb). This notebook has an accompanying [`watford`](https://github.com/eddwebster/watford) GitHub repository and for my full repository of football analysis, see my [`football_analysis`](https://github.com/eddwebster/football_analytics) GitHub repository."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"___\n",
"\n",
"## Notebook Contents\n",
"1. [Notebook Dependencies](#section1)
\n",
"2. [Notebook Brief](#section2)
\n",
"3. [Data Sources](#section3)
\n",
" 1. [Introduction](#section3.1)
\n",
" 2. [Read in the Datasets](#section3.2)
\n",
" 3. [Initial Data Handling](#section3.3)
\n",
"4. [Data Engineering](#section4)
\n",
" 1. [Assign Raw DataFrame to Engineered DataFrame](#section4.1)
\n",
"5. [Summary](#section5)
\n",
"6. [Next Steps](#section6)
\n",
"7. [References](#section7)
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"___\n",
"\n",
"\n",
"\n",
"## 1. Notebook Dependencies\n",
"\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; and\n",
"* [`pandas`](http://pandas.pydata.org/) for data analysis and manipulation.\n",
"\n",
"All packages used for this notebook 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": 2,
"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",
"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 pandas_profiling as pp\n",
"import os\n",
"import re\n",
"import chardet\n",
"import random\n",
"from io import BytesIO\n",
"from pathlib import Path\n",
"\n",
"# Reading Directories\n",
"import glob\n",
"import os\n",
"\n",
"# Working with JSON\n",
"import json\n",
"from pandas import json_normalize\n",
"\n",
"# Data Visualisation\n",
"import matplotlib as mpl\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import missingno as msno\n",
"\n",
"# Requests and downloads\n",
"import tqdm\n",
"import requests\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 message\n",
"print(\"Setup Complete\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Python: 3.7.6\n",
"NumPy: 1.19.1\n",
"pandas: 1.1.3\n",
"matplotlib: 3.3.1\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": 4,
"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_physical = os.path.join(base_dir, 'data', 'physical')\n",
"scripts_dir = os.path.join(base_dir, 'scripts')\n",
"models_dir = os.path.join(base_dir, 'models')\n",
"img_dir = os.path.join(base_dir, 'img')\n",
"fig_dir = os.path.join(base_dir, 'img', 'fig')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Notebook Settings"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"# Display all columns of displayed pandas DataFrames\n",
"pd.set_option('display.max_columns', None)\n",
"#pd.set_option('display.max_rows', None)\n",
"pd.options.mode.chained_assignment = None"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"\n",
"\n",
"## 2. Notebook Brief\n",
"This notebook parses and engineers [Opta data](https://www.statsperform.com/opta/) by [Stats Perform](https://www.statsperform.com/) ... using [pandas](http://pandas.pydata.org/).\n",
"\n",
"\n",
"**Notebook Conventions**:
\n",
"* Variables that refer a `DataFrame` object are prefixed with `df_`.\n",
"* Variables that refer to a collection of `DataFrame` objects (e.g., a list, a set or a dict) are prefixed with `dfs_`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"\n",
"\n",
"## 3. Data Sources"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"### 3.1. Introduction\n",
"The physical data..."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"### 3.2. Import Data\n",
"These `CSV` file provided is read in as [pandas](https://pandas.pydata.org/) DataFrames."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[]\n"
]
}
],
"source": [
"# Show files in directory\n",
"print(glob.glob(os.path.join(data_dir_physical, 'raw', 'F7/*.csv')))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# Import CSV file as a pandas DataFrame\n",
"df_physical_raw = pd.read_csv(os.path.join(data_dir_physical, 'raw', 'Physical Output.csv'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"### 3.3. Initial Data Handling\n",
"First check the 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": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Match Date | \n",
" Match | \n",
" Home/Away | \n",
" Team | \n",
" Player Name | \n",
" Minutes Played | \n",
" Ball In Play Time | \n",
" Time In Possession | \n",
" Time Opponent In Possession | \n",
" Time In Uncontrolled Possession | \n",
" Time In Established Possession | \n",
" Total Distance | \n",
" Total Low Intensity Distance | \n",
" Total High Intensity Distance | \n",
" Stand Distance | \n",
" Walk Distance | \n",
" Jog Distance | \n",
" Run Distance | \n",
" High Speed Run Distance | \n",
" High Speed Distance - Player Average | \n",
" Sprint Distance | \n",
" Ball In Play Total Distance | \n",
" In Possession Total Distance | \n",
" Opponent In Possession Total Distance | \n",
" Uncontrolled Possession Total Distance | \n",
" Ball Out Of Play Total Distance | \n",
" Total Distance (m/min) | \n",
" Total Distance In Possession (m/min) | \n",
" Total Distance Opponent In Possession (m/min) | \n",
" Total Distance Uncontrolled Possession (m/min) | \n",
" Ball In Play HI Distance | \n",
" In Possession HI Distance | \n",
" Opponent In Possession HI Distance | \n",
" Uncontrolled Possession HI Distance | \n",
" Ball Out Of Play HI Distance | \n",
" HI Distance (m/min) | \n",
" HI Distance In Possession (m/min) | \n",
" HI Distance Opponent In Possession (m/min) | \n",
" HI Distance Uncontrolled Possession (m/min) | \n",
" Ball In Play Sprint Distance | \n",
" In Possession Sprint Distance | \n",
" Opponent In Possession Sprint Distance | \n",
" Uncontrolled Possession Sprint Distance | \n",
" Ball Out Of Play Sprint Distance | \n",
" Sprint Distance (m/min) | \n",
" Sprint Distance In Possession (m/min) | \n",
" Sprint Distance Opponent In Possession (m/min) | \n",
" Sprint Distance Uncontrolled Possession (m/min) | \n",
" HI Events | \n",
" Sprint Events | \n",
" HS Run Events | \n",
" Maximum Speed (km/h) | \n",
" Deceleration Very High Events | \n",
" Deceleration High Events | \n",
" Deceleration Medium Events | \n",
" Deceleration Low Events | \n",
" Acceleration Low Events | \n",
" Acceleration Medium Events | \n",
" Acceleration High Events | \n",
" Acceleration Very High Events | \n",
" 1-5TD | \n",
" 6-10TD | \n",
" 11-15TD | \n",
" 16-20TD | \n",
" 21-25TD | \n",
" 26-30TD | \n",
" 31-35TD | \n",
" 36-40TD | \n",
" 41-45TD | \n",
" 45+TD | \n",
" 46-50TD | \n",
" 51-55TD | \n",
" 56-60TD | \n",
" 61-65TD | \n",
" 66-70TD | \n",
" 71-75TD | \n",
" 76-80TD | \n",
" 81-85TD | \n",
" 86-90TD | \n",
" 90+TD | \n",
" 1-5HID | \n",
" 6-10HID | \n",
" 11-15HID | \n",
" 16-20HID | \n",
" 21-25HID | \n",
" 26-30HID | \n",
" 31-35HID | \n",
" 36-40HID | \n",
" 41-45HID | \n",
" 45+HID | \n",
" 46-50HID | \n",
" 51-55HID | \n",
" 56-60HID | \n",
" 61-65HID | \n",
" 66-70HID | \n",
" 71-75HID | \n",
" 76-80HID | \n",
" 81-85HID | \n",
" 86-90HID | \n",
" 90+HID | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 11/09/2017 | \n",
" Team A v Team Q | \n",
" home | \n",
" Team A | \n",
" Player 11 | \n",
" 97 | \n",
" 44.4 | \n",
" 21.2 | \n",
" 21.1 | \n",
" 2.1 | \n",
" 7.7 | \n",
" 10274.7 | \n",
" 9537.4 | \n",
" 737.3 | \n",
" 55.7 | \n",
" 3852.9 | \n",
" 3818.9 | \n",
" 1809.8 | \n",
" 639.4 | \n",
" 550.388462 | \n",
" 97.9 | \n",
" 6499.6 | \n",
" 2863.4 | \n",
" 3374.8 | \n",
" 261.4 | \n",
" 3775.1 | \n",
" 105.9 | \n",
" 135.1 | \n",
" 159.9 | \n",
" 124.5 | \n",
" 705.3 | \n",
" 292.0 | \n",
" 410.6 | \n",
" 2.7 | \n",
" 32.0 | \n",
" 7.6 | \n",
" 13.8 | \n",
" 19.5 | \n",
" 1.3 | \n",
" 88.3 | \n",
" 47.4 | \n",
" 40.9 | \n",
" 0.0 | \n",
" 9.7 | \n",
" 1.0 | \n",
" 2.2 | \n",
" 1.9 | \n",
" NaN | \n",
" 40 | \n",
" 7 | \n",
" 41 | \n",
" 29.7 | \n",
" 2 | \n",
" 19 | \n",
" 70 | \n",
" 220 | \n",
" 236 | \n",
" 69 | \n",
" 9 | \n",
" 0 | \n",
" 598.8 | \n",
" 542.0 | \n",
" 633.3 | \n",
" 581.5 | \n",
" 605.0 | \n",
" 546.2 | \n",
" 420.3 | \n",
" 486.3 | \n",
" 501.1 | \n",
" 173.3 | \n",
" 600.7 | \n",
" 604.2 | \n",
" 553.1 | \n",
" 393.7 | \n",
" 514.5 | \n",
" 474.5 | \n",
" 475.1 | \n",
" 539.8 | \n",
" 505.5 | \n",
" 525.8 | \n",
" 32.5 | \n",
" 54.3 | \n",
" 57.2 | \n",
" 19.5 | \n",
" 49.3 | \n",
" 31.5 | \n",
" 57.1 | \n",
" 40.4 | \n",
" 35.2 | \n",
" 7.7 | \n",
" 47.2 | \n",
" 81.7 | \n",
" 82.6 | \n",
" 2.9 | \n",
" 13.2 | \n",
" 20.2 | \n",
" 12.9 | \n",
" 32.5 | \n",
" 8.0 | \n",
" 51.6 | \n",
"
\n",
" \n",
" 1 | \n",
" 11/09/2017 | \n",
" Team A v Team Q | \n",
" home | \n",
" Team A | \n",
" Player 23 | \n",
" 97 | \n",
" 44.4 | \n",
" 21.2 | \n",
" 21.1 | \n",
" 2.1 | \n",
" 7.7 | \n",
" 9847.5 | \n",
" 9317.7 | \n",
" 529.8 | \n",
" 51.0 | \n",
" 3890.7 | \n",
" 3742.7 | \n",
" 1633.3 | \n",
" 420.0 | \n",
" 295.738462 | \n",
" 109.8 | \n",
" 6380.2 | \n",
" 2789.5 | \n",
" 3306.3 | \n",
" 284.4 | \n",
" 3467.3 | \n",
" 101.5 | \n",
" 131.6 | \n",
" 156.7 | \n",
" 135.4 | \n",
" 497.7 | \n",
" 100.3 | \n",
" 392.2 | \n",
" 5.2 | \n",
" 32.1 | \n",
" 5.5 | \n",
" 4.7 | \n",
" 18.6 | \n",
" 2.5 | \n",
" 109.8 | \n",
" 9.3 | \n",
" 100.5 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1.1 | \n",
" 0.4 | \n",
" 4.8 | \n",
" NaN | \n",
" 25 | \n",
" 6 | \n",
" 26 | \n",
" 29.7 | \n",
" 2 | \n",
" 16 | \n",
" 81 | \n",
" 279 | \n",
" 312 | \n",
" 99 | \n",
" 16 | \n",
" 2 | \n",
" 453.7 | \n",
" 568.7 | \n",
" 675.7 | \n",
" 570.0 | \n",
" 598.5 | \n",
" 560.6 | \n",
" 451.5 | \n",
" 455.7 | \n",
" 508.2 | \n",
" 203.8 | \n",
" 473.7 | \n",
" 548.9 | \n",
" 564.4 | \n",
" 387.2 | \n",
" 434.7 | \n",
" 468.7 | \n",
" 465.5 | \n",
" 578.9 | \n",
" 450.1 | \n",
" 429.0 | \n",
" 13.7 | \n",
" 45.0 | \n",
" 72.5 | \n",
" 36.8 | \n",
" 9.7 | \n",
" 30.7 | \n",
" 23.5 | \n",
" 61.9 | \n",
" 54.0 | \n",
" 15.7 | \n",
" 5.1 | \n",
" 38.7 | \n",
" 25.1 | \n",
" 5.9 | \n",
" 5.5 | \n",
" 0.0 | \n",
" 8.0 | \n",
" 45.6 | \n",
" 13.3 | \n",
" 18.9 | \n",
"
\n",
" \n",
" 2 | \n",
" 11/09/2017 | \n",
" Team A v Team Q | \n",
" home | \n",
" Team A | \n",
" Player 13 | \n",
" 97 | \n",
" 44.4 | \n",
" 21.2 | \n",
" 21.1 | \n",
" 2.1 | \n",
" 7.7 | \n",
" 10587.6 | \n",
" 9614.4 | \n",
" 973.2 | \n",
" 40.1 | \n",
" 3771.9 | \n",
" 3904.7 | \n",
" 1897.7 | \n",
" 744.1 | \n",
" 752.552941 | \n",
" 229.1 | \n",
" 7225.3 | \n",
" 3196.8 | \n",
" 3710.0 | \n",
" 318.5 | \n",
" 3362.3 | \n",
" 109.2 | \n",
" 150.8 | \n",
" 175.8 | \n",
" 151.7 | \n",
" 945.4 | \n",
" 421.0 | \n",
" 515.8 | \n",
" 8.6 | \n",
" 27.8 | \n",
" 10.0 | \n",
" 19.9 | \n",
" 24.4 | \n",
" 4.1 | \n",
" 224.9 | \n",
" 115.8 | \n",
" 109.1 | \n",
" 0.0 | \n",
" 4.2 | \n",
" 2.4 | \n",
" 5.5 | \n",
" 5.2 | \n",
" NaN | \n",
" 48 | \n",
" 12 | \n",
" 36 | \n",
" 31.9 | \n",
" 4 | \n",
" 18 | \n",
" 72 | \n",
" 272 | \n",
" 299 | \n",
" 75 | \n",
" 8 | \n",
" 1 | \n",
" 562.2 | \n",
" 509.0 | \n",
" 660.1 | \n",
" 579.8 | \n",
" 650.2 | \n",
" 536.3 | \n",
" 511.8 | \n",
" 482.3 | \n",
" 502.6 | \n",
" 175.2 | \n",
" 578.5 | \n",
" 641.4 | \n",
" 592.5 | \n",
" 395.1 | \n",
" 521.6 | \n",
" 499.3 | \n",
" 567.0 | \n",
" 556.8 | \n",
" 541.1 | \n",
" 524.8 | \n",
" 50.5 | \n",
" 36.1 | \n",
" 124.5 | \n",
" 47.9 | \n",
" 38.6 | \n",
" 58.7 | \n",
" 56.9 | \n",
" 42.9 | \n",
" 50.2 | \n",
" 12.3 | \n",
" 47.9 | \n",
" 103.6 | \n",
" 54.8 | \n",
" 12.6 | \n",
" 9.2 | \n",
" 15.1 | \n",
" 33.5 | \n",
" 60.8 | \n",
" 51.9 | \n",
" 65.2 | \n",
"
\n",
" \n",
" 3 | \n",
" 11/09/2017 | \n",
" Team A v Team Q | \n",
" home | \n",
" Team A | \n",
" Player 1 | \n",
" 97 | \n",
" 44.4 | \n",
" 21.2 | \n",
" 21.1 | \n",
" 2.1 | \n",
" 7.7 | \n",
" 9799.4 | \n",
" 8918.8 | \n",
" 880.5 | \n",
" 42.4 | \n",
" 4219.4 | \n",
" 3293.4 | \n",
" 1363.6 | \n",
" 639.7 | \n",
" 641.346154 | \n",
" 240.8 | \n",
" 6423.5 | \n",
" 3355.7 | \n",
" 2803.4 | \n",
" 264.4 | \n",
" 3375.9 | \n",
" 101.0 | \n",
" 158.3 | \n",
" 132.9 | \n",
" 125.9 | \n",
" 861.8 | \n",
" 624.8 | \n",
" 217.5 | \n",
" 19.5 | \n",
" 18.7 | \n",
" 9.1 | \n",
" 29.5 | \n",
" 10.3 | \n",
" 9.3 | \n",
" 240.8 | \n",
" 198.0 | \n",
" 42.8 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 2.5 | \n",
" 9.3 | \n",
" 2.0 | \n",
" NaN | \n",
" 46 | \n",
" 9 | \n",
" 43 | \n",
" 37.8 | \n",
" 5 | \n",
" 13 | \n",
" 59 | \n",
" 213 | \n",
" 203 | \n",
" 76 | \n",
" 19 | \n",
" 0 | \n",
" 548.0 | \n",
" 479.9 | \n",
" 605.1 | \n",
" 531.7 | \n",
" 608.1 | \n",
" 543.5 | \n",
" 400.4 | \n",
" 518.9 | \n",
" 462.1 | \n",
" 190.3 | \n",
" 564.0 | \n",
" 559.9 | \n",
" 488.7 | \n",
" 301.3 | \n",
" 475.0 | \n",
" 534.6 | \n",
" 517.9 | \n",
" 517.4 | \n",
" 446.3 | \n",
" 506.4 | \n",
" 125.0 | \n",
" 16.4 | \n",
" 75.2 | \n",
" 79.6 | \n",
" 71.8 | \n",
" 62.7 | \n",
" 15.0 | \n",
" 87.2 | \n",
" 3.9 | \n",
" 4.5 | \n",
" 65.8 | \n",
" 17.1 | \n",
" 43.9 | \n",
" 15.6 | \n",
" 35.8 | \n",
" 45.2 | \n",
" 4.9 | \n",
" 16.6 | \n",
" 65.0 | \n",
" 29.4 | \n",
"
\n",
" \n",
" 4 | \n",
" 11/09/2017 | \n",
" Team A v Team Q | \n",
" home | \n",
" Team A | \n",
" Player 14 | \n",
" 67 | \n",
" 31.8 | \n",
" 16.4 | \n",
" 14.5 | \n",
" 0.9 | \n",
" 7.4 | \n",
" 7460.8 | \n",
" 6797.3 | \n",
" 663.5 | \n",
" 28.2 | \n",
" 2807.5 | \n",
" 2817.7 | \n",
" 1143.9 | \n",
" 501.2 | \n",
" 564.011905 | \n",
" 162.3 | \n",
" 4956.5 | \n",
" 2629.0 | \n",
" 2195.0 | \n",
" 132.4 | \n",
" 2504.4 | \n",
" 111.4 | \n",
" 160.3 | \n",
" 151.4 | \n",
" 147.1 | \n",
" 641.6 | \n",
" 458.6 | \n",
" 183.0 | \n",
" 0.0 | \n",
" 22.0 | \n",
" 9.9 | \n",
" 28.0 | \n",
" 12.6 | \n",
" NaN | \n",
" 158.0 | \n",
" 123.0 | \n",
" 35.1 | \n",
" 0.0 | \n",
" 4.3 | \n",
" 2.4 | \n",
" 7.5 | \n",
" 2.4 | \n",
" NaN | \n",
" 29 | \n",
" 7 | \n",
" 29 | \n",
" 32.1 | \n",
" 0 | \n",
" 15 | \n",
" 57 | \n",
" 153 | \n",
" 197 | \n",
" 49 | \n",
" 6 | \n",
" 2 | \n",
" 546.2 | \n",
" 633.9 | \n",
" 691.5 | \n",
" 543.7 | \n",
" 666.0 | \n",
" 554.7 | \n",
" 476.4 | \n",
" 502.2 | \n",
" 516.4 | \n",
" 202.8 | \n",
" 563.1 | \n",
" 654.0 | \n",
" 542.9 | \n",
" 366.9 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 75.0 | \n",
" 52.3 | \n",
" 39.6 | \n",
" 16.0 | \n",
" 83.2 | \n",
" 23.1 | \n",
" 43.1 | \n",
" 55.8 | \n",
" 33.1 | \n",
" 22.6 | \n",
" 42.2 | \n",
" 88.6 | \n",
" 54.1 | \n",
" 34.8 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Match Date Match Home/Away Team Player Name Minutes Played \\\n",
"0 11/09/2017 Team A v Team Q home Team A Player 11 97 \n",
"1 11/09/2017 Team A v Team Q home Team A Player 23 97 \n",
"2 11/09/2017 Team A v Team Q home Team A Player 13 97 \n",
"3 11/09/2017 Team A v Team Q home Team A Player 1 97 \n",
"4 11/09/2017 Team A v Team Q home Team A Player 14 67 \n",
"\n",
" Ball In Play Time Time In Possession Time Opponent In Possession \\\n",
"0 44.4 21.2 21.1 \n",
"1 44.4 21.2 21.1 \n",
"2 44.4 21.2 21.1 \n",
"3 44.4 21.2 21.1 \n",
"4 31.8 16.4 14.5 \n",
"\n",
" Time In Uncontrolled Possession Time In Established Possession \\\n",
"0 2.1 7.7 \n",
"1 2.1 7.7 \n",
"2 2.1 7.7 \n",
"3 2.1 7.7 \n",
"4 0.9 7.4 \n",
"\n",
" Total Distance Total Low Intensity Distance \\\n",
"0 10274.7 9537.4 \n",
"1 9847.5 9317.7 \n",
"2 10587.6 9614.4 \n",
"3 9799.4 8918.8 \n",
"4 7460.8 6797.3 \n",
"\n",
" Total High Intensity Distance Stand Distance Walk Distance Jog Distance \\\n",
"0 737.3 55.7 3852.9 3818.9 \n",
"1 529.8 51.0 3890.7 3742.7 \n",
"2 973.2 40.1 3771.9 3904.7 \n",
"3 880.5 42.4 4219.4 3293.4 \n",
"4 663.5 28.2 2807.5 2817.7 \n",
"\n",
" Run Distance High Speed Run Distance \\\n",
"0 1809.8 639.4 \n",
"1 1633.3 420.0 \n",
"2 1897.7 744.1 \n",
"3 1363.6 639.7 \n",
"4 1143.9 501.2 \n",
"\n",
" High Speed Distance - Player Average Sprint Distance \\\n",
"0 550.388462 97.9 \n",
"1 295.738462 109.8 \n",
"2 752.552941 229.1 \n",
"3 641.346154 240.8 \n",
"4 564.011905 162.3 \n",
"\n",
" Ball In Play Total Distance In Possession Total Distance \\\n",
"0 6499.6 2863.4 \n",
"1 6380.2 2789.5 \n",
"2 7225.3 3196.8 \n",
"3 6423.5 3355.7 \n",
"4 4956.5 2629.0 \n",
"\n",
" Opponent In Possession Total Distance \\\n",
"0 3374.8 \n",
"1 3306.3 \n",
"2 3710.0 \n",
"3 2803.4 \n",
"4 2195.0 \n",
"\n",
" Uncontrolled Possession Total Distance Ball Out Of Play Total Distance \\\n",
"0 261.4 3775.1 \n",
"1 284.4 3467.3 \n",
"2 318.5 3362.3 \n",
"3 264.4 3375.9 \n",
"4 132.4 2504.4 \n",
"\n",
" Total Distance (m/min) Total Distance In Possession (m/min) \\\n",
"0 105.9 135.1 \n",
"1 101.5 131.6 \n",
"2 109.2 150.8 \n",
"3 101.0 158.3 \n",
"4 111.4 160.3 \n",
"\n",
" Total Distance Opponent In Possession (m/min) \\\n",
"0 159.9 \n",
"1 156.7 \n",
"2 175.8 \n",
"3 132.9 \n",
"4 151.4 \n",
"\n",
" Total Distance Uncontrolled Possession (m/min) Ball In Play HI Distance \\\n",
"0 124.5 705.3 \n",
"1 135.4 497.7 \n",
"2 151.7 945.4 \n",
"3 125.9 861.8 \n",
"4 147.1 641.6 \n",
"\n",
" In Possession HI Distance Opponent In Possession HI Distance \\\n",
"0 292.0 410.6 \n",
"1 100.3 392.2 \n",
"2 421.0 515.8 \n",
"3 624.8 217.5 \n",
"4 458.6 183.0 \n",
"\n",
" Uncontrolled Possession HI Distance Ball Out Of Play HI Distance \\\n",
"0 2.7 32.0 \n",
"1 5.2 32.1 \n",
"2 8.6 27.8 \n",
"3 19.5 18.7 \n",
"4 0.0 22.0 \n",
"\n",
" HI Distance (m/min) HI Distance In Possession (m/min) \\\n",
"0 7.6 13.8 \n",
"1 5.5 4.7 \n",
"2 10.0 19.9 \n",
"3 9.1 29.5 \n",
"4 9.9 28.0 \n",
"\n",
" HI Distance Opponent In Possession (m/min) \\\n",
"0 19.5 \n",
"1 18.6 \n",
"2 24.4 \n",
"3 10.3 \n",
"4 12.6 \n",
"\n",
" HI Distance Uncontrolled Possession (m/min) Ball In Play Sprint Distance \\\n",
"0 1.3 88.3 \n",
"1 2.5 109.8 \n",
"2 4.1 224.9 \n",
"3 9.3 240.8 \n",
"4 NaN 158.0 \n",
"\n",
" In Possession Sprint Distance Opponent In Possession Sprint Distance \\\n",
"0 47.4 40.9 \n",
"1 9.3 100.5 \n",
"2 115.8 109.1 \n",
"3 198.0 42.8 \n",
"4 123.0 35.1 \n",
"\n",
" Uncontrolled Possession Sprint Distance Ball Out Of Play Sprint Distance \\\n",
"0 0.0 9.7 \n",
"1 0.0 0.0 \n",
"2 0.0 4.2 \n",
"3 0.0 0.0 \n",
"4 0.0 4.3 \n",
"\n",
" Sprint Distance (m/min) Sprint Distance In Possession (m/min) \\\n",
"0 1.0 2.2 \n",
"1 1.1 0.4 \n",
"2 2.4 5.5 \n",
"3 2.5 9.3 \n",
"4 2.4 7.5 \n",
"\n",
" Sprint Distance Opponent In Possession (m/min) \\\n",
"0 1.9 \n",
"1 4.8 \n",
"2 5.2 \n",
"3 2.0 \n",
"4 2.4 \n",
"\n",
" Sprint Distance Uncontrolled Possession (m/min) HI Events Sprint Events \\\n",
"0 NaN 40 7 \n",
"1 NaN 25 6 \n",
"2 NaN 48 12 \n",
"3 NaN 46 9 \n",
"4 NaN 29 7 \n",
"\n",
" HS Run Events Maximum Speed (km/h) Deceleration Very High Events \\\n",
"0 41 29.7 2 \n",
"1 26 29.7 2 \n",
"2 36 31.9 4 \n",
"3 43 37.8 5 \n",
"4 29 32.1 0 \n",
"\n",
" Deceleration High Events Deceleration Medium Events \\\n",
"0 19 70 \n",
"1 16 81 \n",
"2 18 72 \n",
"3 13 59 \n",
"4 15 57 \n",
"\n",
" Deceleration Low Events Acceleration Low Events \\\n",
"0 220 236 \n",
"1 279 312 \n",
"2 272 299 \n",
"3 213 203 \n",
"4 153 197 \n",
"\n",
" Acceleration Medium Events Acceleration High Events \\\n",
"0 69 9 \n",
"1 99 16 \n",
"2 75 8 \n",
"3 76 19 \n",
"4 49 6 \n",
"\n",
" Acceleration Very High Events 1-5TD 6-10TD 11-15TD 16-20TD 21-25TD \\\n",
"0 0 598.8 542.0 633.3 581.5 605.0 \n",
"1 2 453.7 568.7 675.7 570.0 598.5 \n",
"2 1 562.2 509.0 660.1 579.8 650.2 \n",
"3 0 548.0 479.9 605.1 531.7 608.1 \n",
"4 2 546.2 633.9 691.5 543.7 666.0 \n",
"\n",
" 26-30TD 31-35TD 36-40TD 41-45TD 45+TD 46-50TD 51-55TD 56-60TD \\\n",
"0 546.2 420.3 486.3 501.1 173.3 600.7 604.2 553.1 \n",
"1 560.6 451.5 455.7 508.2 203.8 473.7 548.9 564.4 \n",
"2 536.3 511.8 482.3 502.6 175.2 578.5 641.4 592.5 \n",
"3 543.5 400.4 518.9 462.1 190.3 564.0 559.9 488.7 \n",
"4 554.7 476.4 502.2 516.4 202.8 563.1 654.0 542.9 \n",
"\n",
" 61-65TD 66-70TD 71-75TD 76-80TD 81-85TD 86-90TD 90+TD 1-5HID \\\n",
"0 393.7 514.5 474.5 475.1 539.8 505.5 525.8 32.5 \n",
"1 387.2 434.7 468.7 465.5 578.9 450.1 429.0 13.7 \n",
"2 395.1 521.6 499.3 567.0 556.8 541.1 524.8 50.5 \n",
"3 301.3 475.0 534.6 517.9 517.4 446.3 506.4 125.0 \n",
"4 366.9 0.0 0.0 0.0 0.0 0.0 0.0 75.0 \n",
"\n",
" 6-10HID 11-15HID 16-20HID 21-25HID 26-30HID 31-35HID 36-40HID \\\n",
"0 54.3 57.2 19.5 49.3 31.5 57.1 40.4 \n",
"1 45.0 72.5 36.8 9.7 30.7 23.5 61.9 \n",
"2 36.1 124.5 47.9 38.6 58.7 56.9 42.9 \n",
"3 16.4 75.2 79.6 71.8 62.7 15.0 87.2 \n",
"4 52.3 39.6 16.0 83.2 23.1 43.1 55.8 \n",
"\n",
" 41-45HID 45+HID 46-50HID 51-55HID 56-60HID 61-65HID 66-70HID \\\n",
"0 35.2 7.7 47.2 81.7 82.6 2.9 13.2 \n",
"1 54.0 15.7 5.1 38.7 25.1 5.9 5.5 \n",
"2 50.2 12.3 47.9 103.6 54.8 12.6 9.2 \n",
"3 3.9 4.5 65.8 17.1 43.9 15.6 35.8 \n",
"4 33.1 22.6 42.2 88.6 54.1 34.8 0.0 \n",
"\n",
" 71-75HID 76-80HID 81-85HID 86-90HID 90+HID \n",
"0 20.2 12.9 32.5 8.0 51.6 \n",
"1 0.0 8.0 45.6 13.3 18.9 \n",
"2 15.1 33.5 60.8 51.9 65.2 \n",
"3 45.2 4.9 16.6 65.0 29.4 \n",
"4 0.0 0.0 0.0 0.0 0.0 "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Display the first five rows of the DataFrame, df_physical_raw\n",
"df_physical_raw.head()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Match Date | \n",
" Match | \n",
" Home/Away | \n",
" Team | \n",
" Player Name | \n",
" Minutes Played | \n",
" Ball In Play Time | \n",
" Time In Possession | \n",
" Time Opponent In Possession | \n",
" Time In Uncontrolled Possession | \n",
" Time In Established Possession | \n",
" Total Distance | \n",
" Total Low Intensity Distance | \n",
" Total High Intensity Distance | \n",
" Stand Distance | \n",
" Walk Distance | \n",
" Jog Distance | \n",
" Run Distance | \n",
" High Speed Run Distance | \n",
" High Speed Distance - Player Average | \n",
" Sprint Distance | \n",
" Ball In Play Total Distance | \n",
" In Possession Total Distance | \n",
" Opponent In Possession Total Distance | \n",
" Uncontrolled Possession Total Distance | \n",
" Ball Out Of Play Total Distance | \n",
" Total Distance (m/min) | \n",
" Total Distance In Possession (m/min) | \n",
" Total Distance Opponent In Possession (m/min) | \n",
" Total Distance Uncontrolled Possession (m/min) | \n",
" Ball In Play HI Distance | \n",
" In Possession HI Distance | \n",
" Opponent In Possession HI Distance | \n",
" Uncontrolled Possession HI Distance | \n",
" Ball Out Of Play HI Distance | \n",
" HI Distance (m/min) | \n",
" HI Distance In Possession (m/min) | \n",
" HI Distance Opponent In Possession (m/min) | \n",
" HI Distance Uncontrolled Possession (m/min) | \n",
" Ball In Play Sprint Distance | \n",
" In Possession Sprint Distance | \n",
" Opponent In Possession Sprint Distance | \n",
" Uncontrolled Possession Sprint Distance | \n",
" Ball Out Of Play Sprint Distance | \n",
" Sprint Distance (m/min) | \n",
" Sprint Distance In Possession (m/min) | \n",
" Sprint Distance Opponent In Possession (m/min) | \n",
" Sprint Distance Uncontrolled Possession (m/min) | \n",
" HI Events | \n",
" Sprint Events | \n",
" HS Run Events | \n",
" Maximum Speed (km/h) | \n",
" Deceleration Very High Events | \n",
" Deceleration High Events | \n",
" Deceleration Medium Events | \n",
" Deceleration Low Events | \n",
" Acceleration Low Events | \n",
" Acceleration Medium Events | \n",
" Acceleration High Events | \n",
" Acceleration Very High Events | \n",
" 1-5TD | \n",
" 6-10TD | \n",
" 11-15TD | \n",
" 16-20TD | \n",
" 21-25TD | \n",
" 26-30TD | \n",
" 31-35TD | \n",
" 36-40TD | \n",
" 41-45TD | \n",
" 45+TD | \n",
" 46-50TD | \n",
" 51-55TD | \n",
" 56-60TD | \n",
" 61-65TD | \n",
" 66-70TD | \n",
" 71-75TD | \n",
" 76-80TD | \n",
" 81-85TD | \n",
" 86-90TD | \n",
" 90+TD | \n",
" 1-5HID | \n",
" 6-10HID | \n",
" 11-15HID | \n",
" 16-20HID | \n",
" 21-25HID | \n",
" 26-30HID | \n",
" 31-35HID | \n",
" 36-40HID | \n",
" 41-45HID | \n",
" 45+HID | \n",
" 46-50HID | \n",
" 51-55HID | \n",
" 56-60HID | \n",
" 61-65HID | \n",
" 66-70HID | \n",
" 71-75HID | \n",
" 76-80HID | \n",
" 81-85HID | \n",
" 86-90HID | \n",
" 90+HID | \n",
"
\n",
" \n",
" \n",
" \n",
" 415 | \n",
" 08/05/2018 | \n",
" Team A v Team H | \n",
" home | \n",
" Team A | \n",
" Player 15 | \n",
" 28 | \n",
" 16.2 | \n",
" 8.5 | \n",
" 7.4 | \n",
" 0.3 | \n",
" 5.0 | \n",
" 3648.5 | \n",
" 3362.5 | \n",
" 286.0 | \n",
" 8.8 | \n",
" 951.3 | \n",
" 1529.9 | \n",
" 872.5 | \n",
" 255.5 | \n",
" 589.753125 | \n",
" 30.5 | \n",
" 2814.6 | \n",
" 1335.0 | \n",
" 1434.1 | \n",
" 45.5 | \n",
" 833.9 | \n",
" 130.3 | \n",
" 157.1 | \n",
" 193.8 | \n",
" 151.7 | \n",
" 286.0 | \n",
" 42.3 | \n",
" 243.8 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 10.2 | \n",
" 5.0 | \n",
" 32.9 | \n",
" NaN | \n",
" 30.5 | \n",
" 0.0 | \n",
" 30.5 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1.1 | \n",
" NaN | \n",
" 4.1 | \n",
" NaN | \n",
" 15 | \n",
" 1 | \n",
" 15 | \n",
" 29.7 | \n",
" 2 | \n",
" 3 | \n",
" 28 | \n",
" 102 | \n",
" 101 | \n",
" 29 | \n",
" 4 | \n",
" 0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 682.2 | \n",
" 735.4 | \n",
" 684.6 | \n",
" 559.2 | \n",
" 673.9 | \n",
" 313.2 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 32.5 | \n",
" 51.5 | \n",
" 62.9 | \n",
" 17.5 | \n",
" 38.5 | \n",
" 83.2 | \n",
"
\n",
" \n",
" 416 | \n",
" 08/05/2018 | \n",
" Team A v Team H | \n",
" home | \n",
" Team A | \n",
" Player 27 | \n",
" 94 | \n",
" 57.9 | \n",
" 28.5 | \n",
" 28.6 | \n",
" 0.8 | \n",
" 17.0 | \n",
" 10396.2 | \n",
" 9207.7 | \n",
" 1188.5 | \n",
" 35.6 | \n",
" 3804.6 | \n",
" 3632.7 | \n",
" 1734.9 | \n",
" 953.8 | \n",
" 307.780000 | \n",
" 234.7 | \n",
" 8073.1 | \n",
" 3797.8 | \n",
" 4165.2 | \n",
" 110.0 | \n",
" 2323.2 | \n",
" 110.6 | \n",
" 133.3 | \n",
" 145.6 | \n",
" 137.5 | \n",
" 1170.2 | \n",
" 599.8 | \n",
" 558.3 | \n",
" 12.1 | \n",
" 18.3 | \n",
" 12.6 | \n",
" 21.0 | \n",
" 19.5 | \n",
" 15.1 | \n",
" 226.5 | \n",
" 135.6 | \n",
" 90.8 | \n",
" 0.0 | \n",
" 8.2 | \n",
" 2.5 | \n",
" 4.8 | \n",
" 3.2 | \n",
" NaN | \n",
" 58 | \n",
" 14 | \n",
" 55 | \n",
" 32.2 | \n",
" 0 | \n",
" 16 | \n",
" 88 | \n",
" 233 | \n",
" 269 | \n",
" 89 | \n",
" 15 | \n",
" 1 | \n",
" 619.5 | \n",
" 526.6 | \n",
" 480.5 | \n",
" 549.8 | \n",
" 502.0 | \n",
" 625.3 | \n",
" 390.6 | \n",
" 516.5 | \n",
" 597.9 | \n",
" 112.9 | \n",
" 706.2 | \n",
" 634.6 | \n",
" 604.4 | \n",
" 445.3 | \n",
" 522.7 | \n",
" 692.7 | \n",
" 545.1 | \n",
" 482.1 | \n",
" 629.4 | \n",
" 212.0 | \n",
" 86.5 | \n",
" 37.5 | \n",
" 8.8 | \n",
" 45.6 | \n",
" 28.0 | \n",
" 104.6 | \n",
" 31.9 | \n",
" 69.2 | \n",
" 61.4 | \n",
" 12.5 | \n",
" 115.2 | \n",
" 109.3 | \n",
" 59.9 | \n",
" 47.8 | \n",
" 42.2 | \n",
" 139.1 | \n",
" 42.4 | \n",
" 44.9 | \n",
" 88.8 | \n",
" 12.8 | \n",
"
\n",
" \n",
" 417 | \n",
" 08/05/2018 | \n",
" Team A v Team H | \n",
" home | \n",
" Team A | \n",
" Player 3 | \n",
" 94 | \n",
" 57.9 | \n",
" 28.5 | \n",
" 28.6 | \n",
" 0.8 | \n",
" 17.0 | \n",
" 9752.5 | \n",
" 8885.9 | \n",
" 866.6 | \n",
" 53.4 | \n",
" 3514.1 | \n",
" 3884.0 | \n",
" 1434.5 | \n",
" 657.4 | \n",
" 417.075000 | \n",
" 209.2 | \n",
" 7768.4 | \n",
" 3265.2 | \n",
" 4365.0 | \n",
" 138.2 | \n",
" 1984.1 | \n",
" 103.8 | \n",
" 114.6 | \n",
" 152.6 | \n",
" 172.7 | \n",
" 845.7 | \n",
" 108.4 | \n",
" 697.7 | \n",
" 39.6 | \n",
" 20.9 | \n",
" 9.2 | \n",
" 3.8 | \n",
" 24.4 | \n",
" 49.5 | \n",
" 209.2 | \n",
" 27.6 | \n",
" 158.2 | \n",
" 23.3 | \n",
" 0.0 | \n",
" 2.2 | \n",
" 1.0 | \n",
" 5.5 | \n",
" 29.1 | \n",
" 45 | \n",
" 11 | \n",
" 37 | \n",
" 32.8 | \n",
" 4 | \n",
" 16 | \n",
" 74 | \n",
" 245 | \n",
" 256 | \n",
" 82 | \n",
" 21 | \n",
" 0 | \n",
" 568.7 | \n",
" 592.9 | \n",
" 552.0 | \n",
" 527.8 | \n",
" 516.4 | \n",
" 623.2 | \n",
" 420.1 | \n",
" 554.9 | \n",
" 548.0 | \n",
" 70.2 | \n",
" 639.5 | \n",
" 575.0 | \n",
" 591.6 | \n",
" 409.7 | \n",
" 450.3 | \n",
" 493.2 | \n",
" 442.3 | \n",
" 441.8 | \n",
" 457.0 | \n",
" 278.1 | \n",
" 38.5 | \n",
" 83.7 | \n",
" 31.2 | \n",
" 82.4 | \n",
" 23.6 | \n",
" 59.8 | \n",
" 10.2 | \n",
" 94.8 | \n",
" 55.4 | \n",
" 10.2 | \n",
" 54.8 | \n",
" 45.1 | \n",
" 80.1 | \n",
" 5.6 | \n",
" 51.7 | \n",
" 22.0 | \n",
" 13.5 | \n",
" 5.4 | \n",
" 35.4 | \n",
" 63.2 | \n",
"
\n",
" \n",
" 418 | \n",
" 08/05/2018 | \n",
" Team A v Team H | \n",
" home | \n",
" Team A | \n",
" Player 31 | \n",
" 65 | \n",
" 41.7 | \n",
" 19.9 | \n",
" 21.3 | \n",
" 0.5 | \n",
" 12.0 | \n",
" 7809.6 | \n",
" 7430.5 | \n",
" 379.1 | \n",
" 19.9 | \n",
" 2308.7 | \n",
" 3700.3 | \n",
" 1401.6 | \n",
" 379.1 | \n",
" 208.133333 | \n",
" 0.0 | \n",
" 6385.4 | \n",
" 2757.5 | \n",
" 3544.9 | \n",
" 83.1 | \n",
" 1424.1 | \n",
" 120.1 | \n",
" 138.6 | \n",
" 166.4 | \n",
" 166.2 | \n",
" 375.9 | \n",
" 8.2 | \n",
" 364.9 | \n",
" 2.9 | \n",
" 3.2 | \n",
" 5.8 | \n",
" 0.4 | \n",
" 17.1 | \n",
" 5.8 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 17 | \n",
" 0 | \n",
" 17 | \n",
" 24.9 | \n",
" 0 | \n",
" 7 | \n",
" 49 | \n",
" 193 | \n",
" 226 | \n",
" 45 | \n",
" 2 | \n",
" 2 | \n",
" 700.3 | \n",
" 581.3 | \n",
" 590.6 | \n",
" 601.4 | \n",
" 533.3 | \n",
" 599.8 | \n",
" 470.8 | \n",
" 623.5 | \n",
" 603.5 | \n",
" 64.6 | \n",
" 762.7 | \n",
" 611.3 | \n",
" 606.0 | \n",
" 460.5 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 26.2 | \n",
" 14.2 | \n",
" 33.2 | \n",
" 39.1 | \n",
" 6.5 | \n",
" 6.0 | \n",
" 17.5 | \n",
" 27.3 | \n",
" 10.6 | \n",
" 0.0 | \n",
" 93.1 | \n",
" 52.4 | \n",
" 25.6 | \n",
" 27.4 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 419 | \n",
" 08/05/2018 | \n",
" Team A v Team H | \n",
" home | \n",
" Team A | \n",
" Player 22 | \n",
" 94 | \n",
" 57.9 | \n",
" 28.5 | \n",
" 28.6 | \n",
" 0.8 | \n",
" 17.0 | \n",
" 11289.7 | \n",
" 10122.8 | \n",
" 1167.0 | \n",
" 22.7 | \n",
" 3781.0 | \n",
" 4501.2 | \n",
" 1817.9 | \n",
" 927.1 | \n",
" 394.375000 | \n",
" 239.8 | \n",
" 8671.3 | \n",
" 3759.6 | \n",
" 4785.2 | \n",
" 126.5 | \n",
" 2618.5 | \n",
" 120.1 | \n",
" 131.9 | \n",
" 167.3 | \n",
" 158.1 | \n",
" 1145.3 | \n",
" 256.4 | \n",
" 883.4 | \n",
" 5.5 | \n",
" 21.7 | \n",
" 12.4 | \n",
" 9.0 | \n",
" 30.9 | \n",
" 6.9 | \n",
" 239.8 | \n",
" 82.3 | \n",
" 157.5 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 2.6 | \n",
" 2.9 | \n",
" 5.5 | \n",
" NaN | \n",
" 60 | \n",
" 11 | \n",
" 53 | \n",
" 29.8 | \n",
" 5 | \n",
" 14 | \n",
" 101 | \n",
" 290 | \n",
" 304 | \n",
" 92 | \n",
" 24 | \n",
" 1 | \n",
" 626.4 | \n",
" 625.3 | \n",
" 568.9 | \n",
" 634.3 | \n",
" 621.1 | \n",
" 674.1 | \n",
" 417.1 | \n",
" 621.7 | \n",
" 595.0 | \n",
" 135.5 | \n",
" 773.4 | \n",
" 668.1 | \n",
" 582.7 | \n",
" 501.4 | \n",
" 542.4 | \n",
" 690.0 | \n",
" 571.9 | \n",
" 530.2 | \n",
" 601.4 | \n",
" 309.0 | \n",
" 49.7 | \n",
" 60.4 | \n",
" 101.0 | \n",
" 90.2 | \n",
" 50.5 | \n",
" 70.6 | \n",
" 19.8 | \n",
" 65.8 | \n",
" 21.3 | \n",
" 38.6 | \n",
" 129.3 | \n",
" 60.1 | \n",
" 23.3 | \n",
" 84.4 | \n",
" 41.5 | \n",
" 85.4 | \n",
" 27.9 | \n",
" 35.5 | \n",
" 43.7 | \n",
" 67.9 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Match Date Match Home/Away Team Player Name \\\n",
"415 08/05/2018 Team A v Team H home Team A Player 15 \n",
"416 08/05/2018 Team A v Team H home Team A Player 27 \n",
"417 08/05/2018 Team A v Team H home Team A Player 3 \n",
"418 08/05/2018 Team A v Team H home Team A Player 31 \n",
"419 08/05/2018 Team A v Team H home Team A Player 22 \n",
"\n",
" Minutes Played Ball In Play Time Time In Possession \\\n",
"415 28 16.2 8.5 \n",
"416 94 57.9 28.5 \n",
"417 94 57.9 28.5 \n",
"418 65 41.7 19.9 \n",
"419 94 57.9 28.5 \n",
"\n",
" Time Opponent In Possession Time In Uncontrolled Possession \\\n",
"415 7.4 0.3 \n",
"416 28.6 0.8 \n",
"417 28.6 0.8 \n",
"418 21.3 0.5 \n",
"419 28.6 0.8 \n",
"\n",
" Time In Established Possession Total Distance \\\n",
"415 5.0 3648.5 \n",
"416 17.0 10396.2 \n",
"417 17.0 9752.5 \n",
"418 12.0 7809.6 \n",
"419 17.0 11289.7 \n",
"\n",
" Total Low Intensity Distance Total High Intensity Distance \\\n",
"415 3362.5 286.0 \n",
"416 9207.7 1188.5 \n",
"417 8885.9 866.6 \n",
"418 7430.5 379.1 \n",
"419 10122.8 1167.0 \n",
"\n",
" Stand Distance Walk Distance Jog Distance Run Distance \\\n",
"415 8.8 951.3 1529.9 872.5 \n",
"416 35.6 3804.6 3632.7 1734.9 \n",
"417 53.4 3514.1 3884.0 1434.5 \n",
"418 19.9 2308.7 3700.3 1401.6 \n",
"419 22.7 3781.0 4501.2 1817.9 \n",
"\n",
" High Speed Run Distance High Speed Distance - Player Average \\\n",
"415 255.5 589.753125 \n",
"416 953.8 307.780000 \n",
"417 657.4 417.075000 \n",
"418 379.1 208.133333 \n",
"419 927.1 394.375000 \n",
"\n",
" Sprint Distance Ball In Play Total Distance \\\n",
"415 30.5 2814.6 \n",
"416 234.7 8073.1 \n",
"417 209.2 7768.4 \n",
"418 0.0 6385.4 \n",
"419 239.8 8671.3 \n",
"\n",
" In Possession Total Distance Opponent In Possession Total Distance \\\n",
"415 1335.0 1434.1 \n",
"416 3797.8 4165.2 \n",
"417 3265.2 4365.0 \n",
"418 2757.5 3544.9 \n",
"419 3759.6 4785.2 \n",
"\n",
" Uncontrolled Possession Total Distance Ball Out Of Play Total Distance \\\n",
"415 45.5 833.9 \n",
"416 110.0 2323.2 \n",
"417 138.2 1984.1 \n",
"418 83.1 1424.1 \n",
"419 126.5 2618.5 \n",
"\n",
" Total Distance (m/min) Total Distance In Possession (m/min) \\\n",
"415 130.3 157.1 \n",
"416 110.6 133.3 \n",
"417 103.8 114.6 \n",
"418 120.1 138.6 \n",
"419 120.1 131.9 \n",
"\n",
" Total Distance Opponent In Possession (m/min) \\\n",
"415 193.8 \n",
"416 145.6 \n",
"417 152.6 \n",
"418 166.4 \n",
"419 167.3 \n",
"\n",
" Total Distance Uncontrolled Possession (m/min) Ball In Play HI Distance \\\n",
"415 151.7 286.0 \n",
"416 137.5 1170.2 \n",
"417 172.7 845.7 \n",
"418 166.2 375.9 \n",
"419 158.1 1145.3 \n",
"\n",
" In Possession HI Distance Opponent In Possession HI Distance \\\n",
"415 42.3 243.8 \n",
"416 599.8 558.3 \n",
"417 108.4 697.7 \n",
"418 8.2 364.9 \n",
"419 256.4 883.4 \n",
"\n",
" Uncontrolled Possession HI Distance Ball Out Of Play HI Distance \\\n",
"415 0.0 0.0 \n",
"416 12.1 18.3 \n",
"417 39.6 20.9 \n",
"418 2.9 3.2 \n",
"419 5.5 21.7 \n",
"\n",
" HI Distance (m/min) HI Distance In Possession (m/min) \\\n",
"415 10.2 5.0 \n",
"416 12.6 21.0 \n",
"417 9.2 3.8 \n",
"418 5.8 0.4 \n",
"419 12.4 9.0 \n",
"\n",
" HI Distance Opponent In Possession (m/min) \\\n",
"415 32.9 \n",
"416 19.5 \n",
"417 24.4 \n",
"418 17.1 \n",
"419 30.9 \n",
"\n",
" HI Distance Uncontrolled Possession (m/min) \\\n",
"415 NaN \n",
"416 15.1 \n",
"417 49.5 \n",
"418 5.8 \n",
"419 6.9 \n",
"\n",
" Ball In Play Sprint Distance In Possession Sprint Distance \\\n",
"415 30.5 0.0 \n",
"416 226.5 135.6 \n",
"417 209.2 27.6 \n",
"418 0.0 0.0 \n",
"419 239.8 82.3 \n",
"\n",
" Opponent In Possession Sprint Distance \\\n",
"415 30.5 \n",
"416 90.8 \n",
"417 158.2 \n",
"418 0.0 \n",
"419 157.5 \n",
"\n",
" Uncontrolled Possession Sprint Distance \\\n",
"415 0.0 \n",
"416 0.0 \n",
"417 23.3 \n",
"418 0.0 \n",
"419 0.0 \n",
"\n",
" Ball Out Of Play Sprint Distance Sprint Distance (m/min) \\\n",
"415 0.0 1.1 \n",
"416 8.2 2.5 \n",
"417 0.0 2.2 \n",
"418 0.0 NaN \n",
"419 0.0 2.6 \n",
"\n",
" Sprint Distance In Possession (m/min) \\\n",
"415 NaN \n",
"416 4.8 \n",
"417 1.0 \n",
"418 NaN \n",
"419 2.9 \n",
"\n",
" Sprint Distance Opponent In Possession (m/min) \\\n",
"415 4.1 \n",
"416 3.2 \n",
"417 5.5 \n",
"418 NaN \n",
"419 5.5 \n",
"\n",
" Sprint Distance Uncontrolled Possession (m/min) HI Events \\\n",
"415 NaN 15 \n",
"416 NaN 58 \n",
"417 29.1 45 \n",
"418 NaN 17 \n",
"419 NaN 60 \n",
"\n",
" Sprint Events HS Run Events Maximum Speed (km/h) \\\n",
"415 1 15 29.7 \n",
"416 14 55 32.2 \n",
"417 11 37 32.8 \n",
"418 0 17 24.9 \n",
"419 11 53 29.8 \n",
"\n",
" Deceleration Very High Events Deceleration High Events \\\n",
"415 2 3 \n",
"416 0 16 \n",
"417 4 16 \n",
"418 0 7 \n",
"419 5 14 \n",
"\n",
" Deceleration Medium Events Deceleration Low Events \\\n",
"415 28 102 \n",
"416 88 233 \n",
"417 74 245 \n",
"418 49 193 \n",
"419 101 290 \n",
"\n",
" Acceleration Low Events Acceleration Medium Events \\\n",
"415 101 29 \n",
"416 269 89 \n",
"417 256 82 \n",
"418 226 45 \n",
"419 304 92 \n",
"\n",
" Acceleration High Events Acceleration Very High Events 1-5TD 6-10TD \\\n",
"415 4 0 0.0 0.0 \n",
"416 15 1 619.5 526.6 \n",
"417 21 0 568.7 592.9 \n",
"418 2 2 700.3 581.3 \n",
"419 24 1 626.4 625.3 \n",
"\n",
" 11-15TD 16-20TD 21-25TD 26-30TD 31-35TD 36-40TD 41-45TD 45+TD \\\n",
"415 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"416 480.5 549.8 502.0 625.3 390.6 516.5 597.9 112.9 \n",
"417 552.0 527.8 516.4 623.2 420.1 554.9 548.0 70.2 \n",
"418 590.6 601.4 533.3 599.8 470.8 623.5 603.5 64.6 \n",
"419 568.9 634.3 621.1 674.1 417.1 621.7 595.0 135.5 \n",
"\n",
" 46-50TD 51-55TD 56-60TD 61-65TD 66-70TD 71-75TD 76-80TD 81-85TD \\\n",
"415 0.0 0.0 0.0 0.0 682.2 735.4 684.6 559.2 \n",
"416 706.2 634.6 604.4 445.3 522.7 692.7 545.1 482.1 \n",
"417 639.5 575.0 591.6 409.7 450.3 493.2 442.3 441.8 \n",
"418 762.7 611.3 606.0 460.5 0.0 0.0 0.0 0.0 \n",
"419 773.4 668.1 582.7 501.4 542.4 690.0 571.9 530.2 \n",
"\n",
" 86-90TD 90+TD 1-5HID 6-10HID 11-15HID 16-20HID 21-25HID 26-30HID \\\n",
"415 673.9 313.2 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"416 629.4 212.0 86.5 37.5 8.8 45.6 28.0 104.6 \n",
"417 457.0 278.1 38.5 83.7 31.2 82.4 23.6 59.8 \n",
"418 0.0 0.0 26.2 14.2 33.2 39.1 6.5 6.0 \n",
"419 601.4 309.0 49.7 60.4 101.0 90.2 50.5 70.6 \n",
"\n",
" 31-35HID 36-40HID 41-45HID 45+HID 46-50HID 51-55HID 56-60HID \\\n",
"415 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"416 31.9 69.2 61.4 12.5 115.2 109.3 59.9 \n",
"417 10.2 94.8 55.4 10.2 54.8 45.1 80.1 \n",
"418 17.5 27.3 10.6 0.0 93.1 52.4 25.6 \n",
"419 19.8 65.8 21.3 38.6 129.3 60.1 23.3 \n",
"\n",
" 61-65HID 66-70HID 71-75HID 76-80HID 81-85HID 86-90HID 90+HID \n",
"415 0.0 32.5 51.5 62.9 17.5 38.5 83.2 \n",
"416 47.8 42.2 139.1 42.4 44.9 88.8 12.8 \n",
"417 5.6 51.7 22.0 13.5 5.4 35.4 63.2 \n",
"418 27.4 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"419 84.4 41.5 85.4 27.9 35.5 43.7 67.9 "
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Display the last five rows of the DataFrame, df_physical_raw\n",
"df_physical_raw.tail()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(420, 100)\n"
]
}
],
"source": [
"# Print the shape of the DataFrame, df_physical_raw\n",
"print(df_physical_raw.shape)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['Match Date', 'Match', 'Home/Away', 'Team', 'Player Name',\n",
" 'Minutes Played', 'Ball In Play Time', 'Time In Possession',\n",
" 'Time Opponent In Possession', 'Time In Uncontrolled Possession',\n",
" 'Time In Established Possession', 'Total Distance',\n",
" 'Total Low Intensity Distance', 'Total High Intensity Distance',\n",
" 'Stand Distance', 'Walk Distance', 'Jog Distance', 'Run Distance',\n",
" 'High Speed Run Distance', 'High Speed Distance - Player Average',\n",
" 'Sprint Distance', 'Ball In Play Total Distance',\n",
" 'In Possession Total Distance', 'Opponent In Possession Total Distance',\n",
" 'Uncontrolled Possession Total Distance',\n",
" 'Ball Out Of Play Total Distance', 'Total Distance (m/min)',\n",
" 'Total Distance In Possession (m/min)',\n",
" 'Total Distance Opponent In Possession (m/min)',\n",
" 'Total Distance Uncontrolled Possession (m/min)',\n",
" 'Ball In Play HI Distance', 'In Possession HI Distance',\n",
" 'Opponent In Possession HI Distance',\n",
" 'Uncontrolled Possession HI Distance', 'Ball Out Of Play HI Distance',\n",
" 'HI Distance (m/min)', 'HI Distance In Possession (m/min)',\n",
" 'HI Distance Opponent In Possession (m/min)',\n",
" 'HI Distance Uncontrolled Possession (m/min)',\n",
" 'Ball In Play Sprint Distance', 'In Possession Sprint Distance',\n",
" 'Opponent In Possession Sprint Distance',\n",
" 'Uncontrolled Possession Sprint Distance',\n",
" 'Ball Out Of Play Sprint Distance', 'Sprint Distance (m/min)',\n",
" 'Sprint Distance In Possession (m/min)',\n",
" 'Sprint Distance Opponent In Possession (m/min)',\n",
" 'Sprint Distance Uncontrolled Possession (m/min)', 'HI Events',\n",
" 'Sprint Events', 'HS Run Events', 'Maximum Speed (km/h)',\n",
" 'Deceleration Very High Events', 'Deceleration High Events',\n",
" 'Deceleration Medium Events', 'Deceleration Low Events',\n",
" 'Acceleration Low Events', 'Acceleration Medium Events',\n",
" 'Acceleration High Events', 'Acceleration Very High Events', '1-5TD',\n",
" '6-10TD', '11-15TD', '16-20TD', '21-25TD', '26-30TD', '31-35TD',\n",
" '36-40TD', '41-45TD', '45+TD', '46-50TD', '51-55TD', '56-60TD',\n",
" '61-65TD', '66-70TD', '71-75TD', '76-80TD', '81-85TD', '86-90TD',\n",
" '90+TD', '1-5HID', '6-10HID', '11-15HID', '16-20HID', '21-25HID',\n",
" '26-30HID', '31-35HID', '36-40HID', '41-45HID', '45+HID', '46-50HID',\n",
" '51-55HID', '56-60HID', '61-65HID', '66-70HID', '71-75HID', '76-80HID',\n",
" '81-85HID', '86-90HID', '90+HID'],\n",
" dtype='object')\n"
]
}
],
"source": [
"# Print the column names of the DataFrame, df_physical_raw\n",
"print(df_physical_raw.columns)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Match Date object\n",
"Match object\n",
"Home/Away object\n",
"Team object\n",
"Player Name object\n",
" ... \n",
"71-75HID float64\n",
"76-80HID float64\n",
"81-85HID float64\n",
"86-90HID float64\n",
"90+HID float64\n",
"Length: 100, dtype: object"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Data types of the features of the raw DataFrame, df_physical_raw\n",
"df_physical_raw.dtypes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Full details of these attributes and their data types is discussed further in the [Data Dictionary](section3.2.2)."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Match Date object\n",
"Match object\n",
"Home/Away object\n",
"Team object\n",
"Player Name object\n",
"Minutes Played int64\n",
"Ball In Play Time float64\n",
"Time In Possession float64\n",
"Time Opponent In Possession float64\n",
"Time In Uncontrolled Possession float64\n",
"Time In Established Possession float64\n",
"Total Distance float64\n",
"Total Low Intensity Distance float64\n",
"Total High Intensity Distance float64\n",
"Stand Distance float64\n",
"Walk Distance float64\n",
"Jog Distance float64\n",
"Run Distance float64\n",
"High Speed Run Distance float64\n",
"High Speed Distance - Player Average float64\n",
"Sprint Distance float64\n",
"Ball In Play Total Distance float64\n",
"In Possession Total Distance float64\n",
"Opponent In Possession Total Distance float64\n",
"Uncontrolled Possession Total Distance float64\n",
"Ball Out Of Play Total Distance float64\n",
"Total Distance (m/min) float64\n",
"Total Distance In Possession (m/min) float64\n",
"Total Distance Opponent In Possession (m/min) float64\n",
"Total Distance Uncontrolled Possession (m/min) float64\n",
"Ball In Play HI Distance float64\n",
"In Possession HI Distance float64\n",
"Opponent In Possession HI Distance float64\n",
"Uncontrolled Possession HI Distance float64\n",
"Ball Out Of Play HI Distance float64\n",
"HI Distance (m/min) float64\n",
"HI Distance In Possession (m/min) float64\n",
"HI Distance Opponent In Possession (m/min) float64\n",
"HI Distance Uncontrolled Possession (m/min) float64\n",
"Ball In Play Sprint Distance float64\n",
"In Possession Sprint Distance float64\n",
"Opponent In Possession Sprint Distance float64\n",
"Uncontrolled Possession Sprint Distance float64\n",
"Ball Out Of Play Sprint Distance float64\n",
"Sprint Distance (m/min) float64\n",
"Sprint Distance In Possession (m/min) float64\n",
"Sprint Distance Opponent In Possession (m/min) float64\n",
"Sprint Distance Uncontrolled Possession (m/min) float64\n",
"HI Events int64\n",
"Sprint Events int64\n",
"HS Run Events int64\n",
"Maximum Speed (km/h) float64\n",
"Deceleration Very High Events int64\n",
"Deceleration High Events int64\n",
"Deceleration Medium Events int64\n",
"Deceleration Low Events int64\n",
"Acceleration Low Events int64\n",
"Acceleration Medium Events int64\n",
"Acceleration High Events int64\n",
"Acceleration Very High Events int64\n",
"1-5TD float64\n",
"6-10TD float64\n",
"11-15TD float64\n",
"16-20TD float64\n",
"21-25TD float64\n",
"26-30TD float64\n",
"31-35TD float64\n",
"36-40TD float64\n",
"41-45TD float64\n",
"45+TD float64\n",
"46-50TD float64\n",
"51-55TD float64\n",
"56-60TD float64\n",
"61-65TD float64\n",
"66-70TD float64\n",
"71-75TD float64\n",
"76-80TD float64\n",
"81-85TD float64\n",
"86-90TD float64\n",
"90+TD float64\n",
"1-5HID float64\n",
"6-10HID float64\n",
"11-15HID float64\n",
"16-20HID float64\n",
"21-25HID float64\n",
"26-30HID float64\n",
"31-35HID float64\n",
"36-40HID float64\n",
"41-45HID float64\n",
"45+HID float64\n",
"46-50HID float64\n",
"51-55HID float64\n",
"56-60HID float64\n",
"61-65HID float64\n",
"66-70HID float64\n",
"71-75HID float64\n",
"76-80HID float64\n",
"81-85HID float64\n",
"86-90HID float64\n",
"90+HID float64\n",
"dtype: object\n"
]
}
],
"source": [
"# Displays all columns\n",
"with pd.option_context('display.max_rows', None, 'display.max_columns', None):\n",
" print(df_physical_raw.dtypes)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"RangeIndex: 420 entries, 0 to 419\n",
"Data columns (total 100 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Match Date 420 non-null object \n",
" 1 Match 420 non-null object \n",
" 2 Home/Away 420 non-null object \n",
" 3 Team 420 non-null object \n",
" 4 Player Name 420 non-null object \n",
" 5 Minutes Played 420 non-null int64 \n",
" 6 Ball In Play Time 420 non-null float64\n",
" 7 Time In Possession 420 non-null float64\n",
" 8 Time Opponent In Possession 420 non-null float64\n",
" 9 Time In Uncontrolled Possession 420 non-null float64\n",
" 10 Time In Established Possession 420 non-null float64\n",
" 11 Total Distance 420 non-null float64\n",
" 12 Total Low Intensity Distance 420 non-null float64\n",
" 13 Total High Intensity Distance 420 non-null float64\n",
" 14 Stand Distance 420 non-null float64\n",
" 15 Walk Distance 420 non-null float64\n",
" 16 Jog Distance 420 non-null float64\n",
" 17 Run Distance 420 non-null float64\n",
" 18 High Speed Run Distance 420 non-null float64\n",
" 19 High Speed Distance - Player Average 420 non-null float64\n",
" 20 Sprint Distance 420 non-null float64\n",
" 21 Ball In Play Total Distance 420 non-null float64\n",
" 22 In Possession Total Distance 420 non-null float64\n",
" 23 Opponent In Possession Total Distance 420 non-null float64\n",
" 24 Uncontrolled Possession Total Distance 420 non-null float64\n",
" 25 Ball Out Of Play Total Distance 420 non-null float64\n",
" 26 Total Distance (m/min) 420 non-null float64\n",
" 27 Total Distance In Possession (m/min) 420 non-null float64\n",
" 28 Total Distance Opponent In Possession (m/min) 420 non-null float64\n",
" 29 Total Distance Uncontrolled Possession (m/min) 420 non-null float64\n",
" 30 Ball In Play HI Distance 420 non-null float64\n",
" 31 In Possession HI Distance 420 non-null float64\n",
" 32 Opponent In Possession HI Distance 420 non-null float64\n",
" 33 Uncontrolled Possession HI Distance 420 non-null float64\n",
" 34 Ball Out Of Play HI Distance 420 non-null float64\n",
" 35 HI Distance (m/min) 420 non-null float64\n",
" 36 HI Distance In Possession (m/min) 418 non-null float64\n",
" 37 HI Distance Opponent In Possession (m/min) 416 non-null float64\n",
" 38 HI Distance Uncontrolled Possession (m/min) 360 non-null float64\n",
" 39 Ball In Play Sprint Distance 420 non-null float64\n",
" 40 In Possession Sprint Distance 420 non-null float64\n",
" 41 Opponent In Possession Sprint Distance 420 non-null float64\n",
" 42 Uncontrolled Possession Sprint Distance 420 non-null float64\n",
" 43 Ball Out Of Play Sprint Distance 420 non-null float64\n",
" 44 Sprint Distance (m/min) 410 non-null float64\n",
" 45 Sprint Distance In Possession (m/min) 380 non-null float64\n",
" 46 Sprint Distance Opponent In Possession (m/min) 394 non-null float64\n",
" 47 Sprint Distance Uncontrolled Possession (m/min) 180 non-null float64\n",
" 48 HI Events 420 non-null int64 \n",
" 49 Sprint Events 420 non-null int64 \n",
" 50 HS Run Events 420 non-null int64 \n",
" 51 Maximum Speed (km/h) 420 non-null float64\n",
" 52 Deceleration Very High Events 420 non-null int64 \n",
" 53 Deceleration High Events 420 non-null int64 \n",
" 54 Deceleration Medium Events 420 non-null int64 \n",
" 55 Deceleration Low Events 420 non-null int64 \n",
" 56 Acceleration Low Events 420 non-null int64 \n",
" 57 Acceleration Medium Events 420 non-null int64 \n",
" 58 Acceleration High Events 420 non-null int64 \n",
" 59 Acceleration Very High Events 420 non-null int64 \n",
" 60 1-5TD 420 non-null float64\n",
" 61 6-10TD 420 non-null float64\n",
" 62 11-15TD 420 non-null float64\n",
" 63 16-20TD 420 non-null float64\n",
" 64 21-25TD 420 non-null float64\n",
" 65 26-30TD 420 non-null float64\n",
" 66 31-35TD 420 non-null float64\n",
" 67 36-40TD 420 non-null float64\n",
" 68 41-45TD 420 non-null float64\n",
" 69 45+TD 420 non-null float64\n",
" 70 46-50TD 420 non-null float64\n",
" 71 51-55TD 420 non-null float64\n",
" 72 56-60TD 420 non-null float64\n",
" 73 61-65TD 420 non-null float64\n",
" 74 66-70TD 420 non-null float64\n",
" 75 71-75TD 420 non-null float64\n",
" 76 76-80TD 420 non-null float64\n",
" 77 81-85TD 420 non-null float64\n",
" 78 86-90TD 420 non-null float64\n",
" 79 90+TD 420 non-null float64\n",
" 80 1-5HID 420 non-null float64\n",
" 81 6-10HID 420 non-null float64\n",
" 82 11-15HID 420 non-null float64\n",
" 83 16-20HID 420 non-null float64\n",
" 84 21-25HID 420 non-null float64\n",
" 85 26-30HID 420 non-null float64\n",
" 86 31-35HID 420 non-null float64\n",
" 87 36-40HID 420 non-null float64\n",
" 88 41-45HID 420 non-null float64\n",
" 89 45+HID 420 non-null float64\n",
" 90 46-50HID 420 non-null float64\n",
" 91 51-55HID 420 non-null float64\n",
" 92 56-60HID 420 non-null float64\n",
" 93 61-65HID 420 non-null float64\n",
" 94 66-70HID 420 non-null float64\n",
" 95 71-75HID 420 non-null float64\n",
" 96 76-80HID 420 non-null float64\n",
" 97 81-85HID 420 non-null float64\n",
" 98 86-90HID 420 non-null float64\n",
" 99 90+HID 420 non-null float64\n",
"dtypes: float64(83), int64(12), object(5)\n",
"memory usage: 328.2+ KB\n"
]
}
],
"source": [
"# Info for the raw DataFrame, df_physical_raw\n",
"df_physical_raw.info()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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kYyNjaWnpyd9fX3p6OhocqWtJ4ADAAAAAADgpLZv357bb7/9CZ3T09OTnp6elEqlY+4vvvjihSm2xQRwAABnKGt8LX2Dg4NJohMNAACAtvDQQw+d8PPe3t4MDAykXC7PbsuXLz8idDs6gDvvvPMWqfrFJYADAIAFMhOgtSIoFdACAADQbC9/+cuzefPmVCqVJMnk5GSmp6dnPx8ZGcnIyEh27tw572suX748n/nMZ5pea6sJ4AAAzlDW+OJE/D4AAABotq997WvZtWvXvMc/7WlPmzPt5NEdcBdddNECVtw6AjgAgDOUDicAAABgMV1//fWp1+vZu3dvarVaarVaxsbGMjo6muHh4VSr1VSr1dTr9XR2duaP//iP09HR0eqyW0IABwAAAAAAwEl1dHTk1a9+9QnH1Ov1vOc978n73//+NBqNRaps6Sm2ugAAAAAAAADaQ7FYTHd3d6vLaDkdcAAAsEAGBweTpCVrsZmiFAAAgFb73//7f2dgYCDlcnl2P7P19/enUCi0usQFI4ADAIAFMhOgtSIIGxwcbEnwBwAAAFdffXUuv/zy3HnnnalWq5menp4zpqOjI+VyORs3bswf/dEftd1acQI4AABoQzrgAAAAaJWnPOUp+fM///MMDw+nUqnkgQceyLZt27J9+/Zs27ZtNpTbu3dv9u7dm0OHDmXlypWtLrupBHAAANCGdMABAADQKt/4xjfy5je/OfV6/YTjVq9enec+97np7+9fpMoWjwAOAADakA44AAAAmq1er2f79u0ZGRlJrVbL2NjYMfe7du06afiWJPv27csnPvGJ/Of//J8XofrFJYADADhD6XDiRPw+AAAAaLZbbrml6f+4+TM/8zNNvd5SIYADADhD6XDiRPw+AAAAONzk5OScTrXDt/Hx8UxOTmZiYiITExNHvJ7ZDh48mGKxOK/utvn69Kc/nV/5lV9p2vWWCgEcAMAZSofT0jc4OJgkLfme/D4AAADa13333Zff+I3fSK1Wy9TUVKamphbkPp2dnenu7p7durq6smHDhiPeH+v1yT47fFu7du2C1N5qAjgAADiB0wmyzuR7AwAAsHTddtttqVarC3b97u7uLF++PN3d3ens7Jzdurq65rzu6upKR0dHisVikqTRaGR6ejqdnZ0plUoZGBhIuVye3ff398+ObWcCOACAM5QpBhfHqf6dk3/5W5/O93Sq58503wEAANB+3vSmN+W1r31tkmRqaiqTk5OznXCHvz/8+OHHpqenjznmROccPWZ0dPSE1xobGztmZ16xWMyqVatSLpdTLpdz+eWX501vetNi/wkXnAAOAADakIAWAACgfRUKhaxcubLVZRzX1q1bc/PNN+f+++/P8PDwEZ/V6/VUKpVUKpX09vZmenq6NUUuMAEcAAC0IWvAAQAA0CrT09MZHx+fXf9tcnJyzphCoZDu7u50dHRkeno6HR0dLah04QjgAACgDemAAwAAoFWuuOKK/Omf/mmq1WoqlUoefPDBbN++Pdu2bcv27dtTqVTSaDRSrVZz55135tChQ0u6o+9UCOAAAKAN6YADAACgVW699da89a1vPeZnfX19ufDCC2fXgNu0aVP6+/sXucKFJ4ADAAAAAADgpOr1ejZv3px9+/alVqvNbtVqdXarVCqp1WpJkt/4jd/I6tWrMzAwkHK5nFWrVqW7u7vFT7E4BHAAAGcoHU4AAADAYvrUpz6Vm266ad7jb7/99vT09KRUKs3uD3/d09OTCy64IJdddtkCVt0aAjgAgDOUNb44Eb8PAAAAmu2lL31pKpVKRkdHUyqVsmzZskxOTmZsbCy1Wm3OfteuXTl48GCq1WqmpqaOe93PfOYzWb58+SI+ycITwAEAAAAAAHBSBw8ezDe/+c3s27dvtputVCqlq6sr4+PjxwzhpqenT3rdYrG4CNUvLgEcAAAsUaczzWgSU5QCAADQVN/5znfywx/+cF5ju7q68trXvnbO9JNHT0G5evXq9PT0LHDli08ABwAAS9TpTCM5ODjY9HoAAAA4u11yySXzHtvZ2ZmXvvSls0FbT09POjo6FrC6pUUABwBwhjqd7igdTgAAAMATVa1W5z22Vqvl9a9//UnHbdy4Me9617tOp6wlSQAHAHCGOp3uKNqf3wcAAADN9vSnPz2bN2+efV+v1zM+Pj673tvM2m933nln3vOe98zrmuPj4wtUbWsJ4AAAAAAAAHjCisXi7Lpu5XJ59nhfX1/++Z//OVu3bs3w8PBxzy8UCimVSotQ6eITwAEAQBsyRSkAAAD1ej2PPvpoJiYmjtgmJyeP+/54r4/1/kRjjqe/vz/lcjkDAwMpl8u57LLLFvEvsngEcAAAcAKnE2TNOJ3zT/feAAAAnL3e+9735n3ve9+C36erqyt9fX0ZGBhIb29vent7s2rVqmzcuDGXXHJJ1qxZk3K5nFWrVqWz8+yIps6OpwQAgFN0qmupJf+yntrprMV2qucODg4+4fMAAABoLy9/+cuzevXqJ9TZdrLXk5OTc+4zOTmZarWaarV6xPF/+qd/SqFQyMqVK1Mul4/YZjrgLr744lx55ZWL9SdZNAI4AABoQ6caHM4EfwAAAJz51qxZk+uvv76p16zX65mcnDzmdJSHB3Wjo6MZHh5OpVKZDeeq1WruvvvuVKvVjI2NJXlsHblbbrkly5cvb2qdrSaAAwAAAAAAYF6KxWKWLVuWZcuWJUkajcZxw7hzzz33uJ12Bw4cyB133JHvfve7x+yqO9MJ4AAAAAAAAM5i9913X2655ZaMj4+fdCrKY312OsrlckqlUpOeZOkQwAEAnKEGBwezZcuWUzp3aGioqbWwME7nO07i9wEAAMC8bN26Nf/3//7f1Gq1NBqNplxzw4YN+eVf/uV0d3enu7s7XV1ds6+P3jo6Oppyz6VEAAcAcIayxlf7O53veHBwsOn1AAAA0J5e/OIX58UvfnEajUYmJiZSq9VSq9UyNjY2+/ro9/v27cvDDz+chx56KA8//HBqtdoR19yxY0ee9rSnpbPz7Iyizs6nBgAAAAAA4AiFQmF2fbdVq1bN+fzOO+/Mu9/97uzbty8TExPHvEaxWMyFF16YJz/5yW3Z2TZfAjgAAAAAAABOatWqVbn00kszMDCQSqWSarWasbGxI8bU6/Xs2LEj1Wo13//+9zMwMJByuTy7P3ybOdaOXXLt90QAAIApSgEAAGi6Sy+9NH/4h394xLFarTYbxs1slUol3//+97N169bs2LHjhNdcs2ZNPvaxjy1k2S0hgAMAgDY0ODiYLVu2nNK5Q0NDTa0FAACA9lUqlbJu3bqsW7du9tinP/3p3HnnnUeMKxQKWbVq1ZwuuMsuu2yxS14UAjgAAAAAAACaZnh4OEnyS7/0S7n00kuzcePGrF69+qxaE04ABwAAAAAAQNP09vYmSd71rnfNHuvv75/T/VYul3P55Zfn2muvbVWpC0YABwAAbcgacAAAAJyO6enpTExMzG6Tk5PHfX/0Z2NjY3na056WrVu3znbDHThwIAcOHJizJtyKFSvyqU99qgVPuLAEcAAA0IasAQcAAMAPfvCDfO5znztpYHb0+4mJidTr9dO6d7FYzMqVK7Np06bZbreBgYE5HXBr165t0tMuLQI4AIDT1KqgQ8Cy9A0ODiaJ7wkAAICWuPfee7Nly5ZMTk5meno6k5OTi3LfUqmU5cuXp6urKxMTE9m7d2/279+fBx98MJ2dnens7ExXV1c6Oztz4YUX5pd/+ZcXpa7FJIADADhNrZrqzxSDS99MgOb3AQAAQCsMDAzkoosuyuTkZKampjI5OZnx8fHUarWMjY0tWCBXq9VSq9Vm33d0dKSrq2t2f3gA167a98kAAOAspkMSAACAYrGYzs7O1Ov11Ov1FAqFFIvFdHd3z34+MTGRRqPR1PuWSqWsWLEia9asyTnnnJPVq1cfdxrKmVrajQAOAADakA44AAAAnvWsZ+VZz3rWCcc0Go1MT0+fcD24k60bd6zXe/bsybZt23L33Xef8P4XX3xx/vZv/7aZj70kCOAAAKAN6YADAABgPgqFwuy6bMuXL2/KNW+77bb80R/90ZzjxWIxq1atOqID7rLLLmvKPZcaARwAACyQwcHBJGlJEKYDDgAAgMUyPT2dsbGxjI2NpVar5Qc/+EGS5L//9/+eNWvWzE492d/fn2Kx2OJqF4cADgAAFshMgNaKIEwHHAAAAPM1Ojqab37zmxkdHZ0N0Wb2M9vh748eMzExMeea3d3dedGLXpSOjo4WPFHrCeAAAM5QApb2dzrfMQAAAMzX3//93+ed73xnU69ZLpfzB3/wB+nu7k53d3e6urrS3d2diYmJHDp0KCMjIzl06FBe+tKX5mUve1lT770UCOAAAM5Qphhsf6f7Hft9AAAAMB8/+7M/m6c//emZmJiY3SYnJ0/6+njjd+/enV27dmX37t0nvff3v/99ARwAAHBm0CEJAADAfHV0dOTyyy9v2vW+8Y1v5M1vfnPq9foJx5XL5bzwhS9s2n2XEgEcAAC0IR2SAAAALKR6vZ6DBw+mUqmkWq0esVUqlVx99dW57777Mjw8fNxr7N+/P9/73vcWr+hFJIADAIA2pAMOAABgfgqFwookb0nyyiTnJvlOkl9rNBrfPMbYdyR5U5L/1mg0/teiFroE3HXXXbn55ptnQ7fp6ekTju/q6sqFF16YCy644Iht7dq1GRgYSH9/f4rF4iJVv7gEcAAA0IZ0wAEAAMzbO5P8eJJfSPJgkn+X5POFQuGqRqPx0MygQqHwM0menmRXS6pcAjo7O9PX15disZje3t6MjY2lVqtlbGwsExMTc8ZPTk5m586d2blz5xHHC4VCenp6smzZslx44YV5+9vfns7O9oqs2utpAAAAAAAA5qlQKJSSvDrJqxuNxpbHD/9+oVB4eZL/N8lvPz5uQ5KbkrwoyedaUOqScNVVV+V//+//fczPpqenZ8O4Wq2WPXv25KGHHsquXbuO2EZHR9NoNFKr1VKr1TI8PJzR0dH09/cv8tMsLAEcAAC0IVNQAgAAzEtnko4kY0cdryV5dpIUCoXOJB9O8j8ajcYPCoXCghQyPT2dO+64I/fee28uu+yyXHvtteno6FiQey2Ejo6O9PX1pa+vL1/5ylfyO7/zOyc9p6urK9dff33bhW+JAA4AANqSKSgBAABOrtFoHCwUCl9P8tuFQuGfkzyS5HVJrkuy9fFhf5BkX6PR+MuFqmN6ejq/+Zu/mbvvvjtjY2Pp7u7ORRddlDe+8Y1pNBqZnp4+YqvX63OOzeezUz3niX5+rOkoj2VycjIf//jH85/+039aqD9tywjgAABa6HS6lJLocFoEp/sdJaf+PbXqXL8PAADgLPP6JO/OY+u/TSf5dh7rePuJQqHw3CS/mGRwIQu444478oMf/CBjY4814k1MTGTr1q35rd/6rYW8bdMUCoV0d3enu7s7vb296e7uTqlUypo1a2a35cuXp6OjI41GIwcPHsz+/ftz4MCBPPe5z211+QtCAAcA0EKn26Wkw2nhnep3lDTnezrVcwcHB5/weQAAAGejRqOxLclzC4VCb5L+RqPxcKFQ+EiS+5I8P8n5SR4+bOrJjiRvLRQKNzQajfXNqOHee++dDd8O9/znPz/PetazMj09nampqdkOs5nXRx873vETHTv8+HyPHeNvmPHx8YyPj+fgwYOzx7dt2zb7ulQqZWBgIOVyeXbbsGFDurq6mvEnXHIEcAAA0IZMQQkAAPDENBqNkSQjhUKhnOQlSX4zyT8k+T9HDf2/eaxD7m+ade/LLrssPT09qdVqs8d6enry4he/ONddd12zbtMUh0+Jebxw75FHHslHPvKRbN26NcPDw0mSWq2Whx56KA899NAR1+vv788nP/nJFjzJwhLAAQDAApnpQjMVJAAAwNJVKBRekqSY5IdJLk3yJ0nuSfK3jUZjMsmjR42fTPJIo9G4p1k1XHvttXnSk56Uu+++O+Pj41m2bFmuuuqqXHvttc26RdMUCoV0dnbObgcOHMjw8HCq1WoqlUqq1Wre9773ZWRkJKtXr84VV1xxRNdbuVw+ohPuvPPOa/UjLQgBHAAALJCZAK0VnWins3ad4A8AADjLrEzy/0uyPkklyceTvPnx8G1RdHR05G1ve1vuuOOObN26NZdeemmuvfbadHR0LFYJ83LPPffk3e9+d/bt25dKpZL9+/enXq/PGVcsFvOUpzwlN910Uw6buvOsIoADADhDCVgAAADg9DUajY8m+egTGH/xQtTR0dGR6667bslNOXm40dHR7N69O9VqNQcOHDjmmGKxmLVr16Zer+f3fu/35nS8Hd4FVyqVFvkJFo8ADgDgDGWNL07E7wMAAIBme+pTn5r3vOc9SZLJyckMDw/PTjt5+FapVLJv375873vfm10D7lh6enpy+eWX56abblqcB1hEAjgAAGhDOiQBAABYSF1dXTnnnHNyzjnnzPnsS1/6Ut7ylrdkamrqmOcd3gl32WWXLUa5i04ABwAAAAAAQFNMT0/n3nvvzdTUVH7lV34lq1evnp1ycmBgIL29vWfFunACOAAAAAAAAE5qYmIid911VyqVypypJ2fe79+/P/V6PZ2dnXnlK1+Zjo6OVpfdEgI4AIAzlCkGAQAAgMX04Q9/eHYNuCTp7u6enUpy7dq1edKTnpSBgYGUy+VceumlZ234lgjgAADOWENDQ7nhhhue8Hk33nhj02vh2AYHB5NEUAoAAEBbqNVqKRaLedOb3pRNmzZl3bp1KZfLKZVKrS5tyRHAAQCcoXTALX0zf2dBKQAAAO3gnHPOSb1ez1//9V8fcbynp2e28+3w7fBjM69LpZI14AAAWLp0wAEAAACL6dWvfnWe97znza73dvS+Wq3moYceyj//8z9n//79aTQac66xbNmyI0K6TZs25Q1veEPbhXICOAAAaEMCWgAAABbC6tWrs3r16pOOm56ezv79+7Nnz57cf//92b59e7Zv355t27blkUceySOPPJIk+drXvpZXv/rVWbly5UKXvqgEcAAAAAAAADTN9773vdx0002pVCrZv39/6vX6nDFdXV0ZGBjIxo0b09fX14IqF5YADgAA2pA1AgEAAFgI09PTGR4ePub0kzPbt771rSTJS1/60qxZs2bOenDlcjm9vb1tN+3k4QRwAACwQAYHB5NEEAYA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U0kevj/WWm9TU1NpNBpZtmxZyuXyMbeLLrqoBU+y8ARwAADQhoS7AAAANNuaNWvyC7/wC8f87PC13o613lu1Ws0999yTarWa0dHR2fM6Ojpyyy23pFQqLdZjLAoBHAAAAAAAAKelVCqlVCrlggsuOO6YRqORkZGRPPLII7nvvvvy+c9/PnfccUcmJiYEcAAAAAAAAHA8lUoln/zkJ7Nv37453XATExNHjC2VSlm2bFmLKl04AjgAAGhD1oADAACgVe655568//3vT6PROO6YYrGY9evX57rrrhPAAQAAZwZrwAEAANAq1113XT772c/Odr3t3Lkz27dvz/bt27Nt27ZUq9XU6/U88MADeeCBB/K6170uK1eubHXZTSWAAwCANqQDDgAAgIXSaDRy8ODB2YDt8CkmD99mjk9OTs65RrFYTH9/fzZt2pS+vr4WPMXCEsABAJyhBCwAAADAYvrKV76SP/uzP8vw8PBxQ7VVq1alXC6nXC7nwgsvzMDAQAYGBmaPzWwrV65MR0dHC55icQjgAAAAAAAAOKnvf//72bNnzxHHNm7cOLtt2LAhq1evng3Zurq6WlRp6wngAADOUNb4AgAAABbTS1/60oyNjaVSqcxOL/nII49k+/btxxzf19c3p/vt6PcXXHBB263/lgjgAACgLQloAQAAaLaLLroov/Zrvzbn+Pj4+DHXgjv8/bZt27Jv376Mjo7OOf9zn/tcenp6FuMRFo0ADgAAAAAAgJMaGxvL+9///oyOjqZUKqWnpydTU1Op1Wqp1WoZGxs74X58fPyY163X64v8JAtPAAcAcIYaHBzMli1bTuncoaGhptbC0uP3AQAAQLPdeuut+dCHPjTv8c95znPS09OTUql0xDZzrKenJ+eff36WL1++gFW3hgAOAOAMZYpBAAAAYDFdf/316e/vT6VSme1qO3ToUHbu3Jnt27dn//79R4z/vd/7vXR0dLSo2tYSwAEAAAAAAHBSDz74YO68885UKpUj1nebnp6eM/a8885LoVBoQZVLgwAOAAAAAACAk3rwwQfz5S9/OYcOHTrumGKxmIsuuigXXXRR/vzP/zzlcjkDAwMpl8tHvF62bNkiVr74BHAAANCGTFEKAABAsz3rWc/KLbfckomJiVQqlezduzcPP/xwdu3alYceemj29f3335/777//hNdavnx5yuVyrrji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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plot visualisation of the missing values for each feature of the raw DataFrame, df_physical_raw\n",
"msno.matrix(df_physical_raw, figsize = (30, 7))"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"HI Distance In Possession (m/min) 2\n",
"HI Distance Opponent In Possession (m/min) 4\n",
"HI Distance Uncontrolled Possession (m/min) 60\n",
"Sprint Distance (m/min) 10\n",
"Sprint Distance In Possession (m/min) 40\n",
"Sprint Distance Opponent In Possession (m/min) 26\n",
"Sprint Distance Uncontrolled Possession (m/min) 240\n",
"dtype: int64"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Counts of missing values\n",
"null_value_stats = df_physical_raw.isnull().sum(axis=0)\n",
"null_value_stats[null_value_stats != 0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"\n",
"\n",
"## 4. Data Engineering\n",
"The next step is to wrangle the dataset to into a format that’s suitable for analysis.\n",
"\n",
"This section is broken down into the following subsections:\n",
"\n",
"4.1. [Assign Raw DataFrame to Engineered DataFrame](#section4.1)
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"### 4.1. Assign Raw DataFrames to Engineered DataFrames"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"# Assign Raw DataFrame to Engineered DataFrame\n",
"df_physical = df_physical_raw.copy()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Match Date | \n",
" Match | \n",
" Home/Away | \n",
" Team | \n",
" Player Name | \n",
" Minutes Played | \n",
" Ball In Play Time | \n",
" Time In Possession | \n",
" Time Opponent In Possession | \n",
" Time In Uncontrolled Possession | \n",
" Time In Established Possession | \n",
" Total Distance | \n",
" Total Low Intensity Distance | \n",
" Total High Intensity Distance | \n",
" Stand Distance | \n",
" Walk Distance | \n",
" Jog Distance | \n",
" Run Distance | \n",
" High Speed Run Distance | \n",
" High Speed Distance - Player Average | \n",
" Sprint Distance | \n",
" Ball In Play Total Distance | \n",
" In Possession Total Distance | \n",
" Opponent In Possession Total Distance | \n",
" Uncontrolled Possession Total Distance | \n",
" Ball Out Of Play Total Distance | \n",
" Total Distance (m/min) | \n",
" Total Distance In Possession (m/min) | \n",
" Total Distance Opponent In Possession (m/min) | \n",
" Total Distance Uncontrolled Possession (m/min) | \n",
" Ball In Play HI Distance | \n",
" In Possession HI Distance | \n",
" Opponent In Possession HI Distance | \n",
" Uncontrolled Possession HI Distance | \n",
" Ball Out Of Play HI Distance | \n",
" HI Distance (m/min) | \n",
" HI Distance In Possession (m/min) | \n",
" HI Distance Opponent In Possession (m/min) | \n",
" HI Distance Uncontrolled Possession (m/min) | \n",
" Ball In Play Sprint Distance | \n",
" In Possession Sprint Distance | \n",
" Opponent In Possession Sprint Distance | \n",
" Uncontrolled Possession Sprint Distance | \n",
" Ball Out Of Play Sprint Distance | \n",
" Sprint Distance (m/min) | \n",
" Sprint Distance In Possession (m/min) | \n",
" Sprint Distance Opponent In Possession (m/min) | \n",
" Sprint Distance Uncontrolled Possession (m/min) | \n",
" HI Events | \n",
" Sprint Events | \n",
" HS Run Events | \n",
" Maximum Speed (km/h) | \n",
" Deceleration Very High Events | \n",
" Deceleration High Events | \n",
" Deceleration Medium Events | \n",
" Deceleration Low Events | \n",
" Acceleration Low Events | \n",
" Acceleration Medium Events | \n",
" Acceleration High Events | \n",
" Acceleration Very High Events | \n",
" 1-5TD | \n",
" 6-10TD | \n",
" 11-15TD | \n",
" 16-20TD | \n",
" 21-25TD | \n",
" 26-30TD | \n",
" 31-35TD | \n",
" 36-40TD | \n",
" 41-45TD | \n",
" 45+TD | \n",
" 46-50TD | \n",
" 51-55TD | \n",
" 56-60TD | \n",
" 61-65TD | \n",
" 66-70TD | \n",
" 71-75TD | \n",
" 76-80TD | \n",
" 81-85TD | \n",
" 86-90TD | \n",
" 90+TD | \n",
" 1-5HID | \n",
" 6-10HID | \n",
" 11-15HID | \n",
" 16-20HID | \n",
" 21-25HID | \n",
" 26-30HID | \n",
" 31-35HID | \n",
" 36-40HID | \n",
" 41-45HID | \n",
" 45+HID | \n",
" 46-50HID | \n",
" 51-55HID | \n",
" 56-60HID | \n",
" 61-65HID | \n",
" 66-70HID | \n",
" 71-75HID | \n",
" 76-80HID | \n",
" 81-85HID | \n",
" 86-90HID | \n",
" 90+HID | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 11/09/2017 | \n",
" Team A v Team Q | \n",
" home | \n",
" Team A | \n",
" Player 11 | \n",
" 97 | \n",
" 44.4 | \n",
" 21.2 | \n",
" 21.1 | \n",
" 2.1 | \n",
" 7.7 | \n",
" 10274.7 | \n",
" 9537.4 | \n",
" 737.3 | \n",
" 55.7 | \n",
" 3852.9 | \n",
" 3818.9 | \n",
" 1809.8 | \n",
" 639.4 | \n",
" 550.388462 | \n",
" 97.9 | \n",
" 6499.6 | \n",
" 2863.4 | \n",
" 3374.8 | \n",
" 261.4 | \n",
" 3775.1 | \n",
" 105.9 | \n",
" 135.1 | \n",
" 159.9 | \n",
" 124.5 | \n",
" 705.3 | \n",
" 292.0 | \n",
" 410.6 | \n",
" 2.7 | \n",
" 32.0 | \n",
" 7.6 | \n",
" 13.8 | \n",
" 19.5 | \n",
" 1.3 | \n",
" 88.3 | \n",
" 47.4 | \n",
" 40.9 | \n",
" 0.0 | \n",
" 9.7 | \n",
" 1.0 | \n",
" 2.2 | \n",
" 1.9 | \n",
" NaN | \n",
" 40 | \n",
" 7 | \n",
" 41 | \n",
" 29.7 | \n",
" 2 | \n",
" 19 | \n",
" 70 | \n",
" 220 | \n",
" 236 | \n",
" 69 | \n",
" 9 | \n",
" 0 | \n",
" 598.8 | \n",
" 542.0 | \n",
" 633.3 | \n",
" 581.5 | \n",
" 605.0 | \n",
" 546.2 | \n",
" 420.3 | \n",
" 486.3 | \n",
" 501.1 | \n",
" 173.3 | \n",
" 600.7 | \n",
" 604.2 | \n",
" 553.1 | \n",
" 393.7 | \n",
" 514.5 | \n",
" 474.5 | \n",
" 475.1 | \n",
" 539.8 | \n",
" 505.5 | \n",
" 525.8 | \n",
" 32.5 | \n",
" 54.3 | \n",
" 57.2 | \n",
" 19.5 | \n",
" 49.3 | \n",
" 31.5 | \n",
" 57.1 | \n",
" 40.4 | \n",
" 35.2 | \n",
" 7.7 | \n",
" 47.2 | \n",
" 81.7 | \n",
" 82.6 | \n",
" 2.9 | \n",
" 13.2 | \n",
" 20.2 | \n",
" 12.9 | \n",
" 32.5 | \n",
" 8.0 | \n",
" 51.6 | \n",
"
\n",
" \n",
" 1 | \n",
" 11/09/2017 | \n",
" Team A v Team Q | \n",
" home | \n",
" Team A | \n",
" Player 23 | \n",
" 97 | \n",
" 44.4 | \n",
" 21.2 | \n",
" 21.1 | \n",
" 2.1 | \n",
" 7.7 | \n",
" 9847.5 | \n",
" 9317.7 | \n",
" 529.8 | \n",
" 51.0 | \n",
" 3890.7 | \n",
" 3742.7 | \n",
" 1633.3 | \n",
" 420.0 | \n",
" 295.738462 | \n",
" 109.8 | \n",
" 6380.2 | \n",
" 2789.5 | \n",
" 3306.3 | \n",
" 284.4 | \n",
" 3467.3 | \n",
" 101.5 | \n",
" 131.6 | \n",
" 156.7 | \n",
" 135.4 | \n",
" 497.7 | \n",
" 100.3 | \n",
" 392.2 | \n",
" 5.2 | \n",
" 32.1 | \n",
" 5.5 | \n",
" 4.7 | \n",
" 18.6 | \n",
" 2.5 | \n",
" 109.8 | \n",
" 9.3 | \n",
" 100.5 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1.1 | \n",
" 0.4 | \n",
" 4.8 | \n",
" NaN | \n",
" 25 | \n",
" 6 | \n",
" 26 | \n",
" 29.7 | \n",
" 2 | \n",
" 16 | \n",
" 81 | \n",
" 279 | \n",
" 312 | \n",
" 99 | \n",
" 16 | \n",
" 2 | \n",
" 453.7 | \n",
" 568.7 | \n",
" 675.7 | \n",
" 570.0 | \n",
" 598.5 | \n",
" 560.6 | \n",
" 451.5 | \n",
" 455.7 | \n",
" 508.2 | \n",
" 203.8 | \n",
" 473.7 | \n",
" 548.9 | \n",
" 564.4 | \n",
" 387.2 | \n",
" 434.7 | \n",
" 468.7 | \n",
" 465.5 | \n",
" 578.9 | \n",
" 450.1 | \n",
" 429.0 | \n",
" 13.7 | \n",
" 45.0 | \n",
" 72.5 | \n",
" 36.8 | \n",
" 9.7 | \n",
" 30.7 | \n",
" 23.5 | \n",
" 61.9 | \n",
" 54.0 | \n",
" 15.7 | \n",
" 5.1 | \n",
" 38.7 | \n",
" 25.1 | \n",
" 5.9 | \n",
" 5.5 | \n",
" 0.0 | \n",
" 8.0 | \n",
" 45.6 | \n",
" 13.3 | \n",
" 18.9 | \n",
"
\n",
" \n",
" 2 | \n",
" 11/09/2017 | \n",
" Team A v Team Q | \n",
" home | \n",
" Team A | \n",
" Player 13 | \n",
" 97 | \n",
" 44.4 | \n",
" 21.2 | \n",
" 21.1 | \n",
" 2.1 | \n",
" 7.7 | \n",
" 10587.6 | \n",
" 9614.4 | \n",
" 973.2 | \n",
" 40.1 | \n",
" 3771.9 | \n",
" 3904.7 | \n",
" 1897.7 | \n",
" 744.1 | \n",
" 752.552941 | \n",
" 229.1 | \n",
" 7225.3 | \n",
" 3196.8 | \n",
" 3710.0 | \n",
" 318.5 | \n",
" 3362.3 | \n",
" 109.2 | \n",
" 150.8 | \n",
" 175.8 | \n",
" 151.7 | \n",
" 945.4 | \n",
" 421.0 | \n",
" 515.8 | \n",
" 8.6 | \n",
" 27.8 | \n",
" 10.0 | \n",
" 19.9 | \n",
" 24.4 | \n",
" 4.1 | \n",
" 224.9 | \n",
" 115.8 | \n",
" 109.1 | \n",
" 0.0 | \n",
" 4.2 | \n",
" 2.4 | \n",
" 5.5 | \n",
" 5.2 | \n",
" NaN | \n",
" 48 | \n",
" 12 | \n",
" 36 | \n",
" 31.9 | \n",
" 4 | \n",
" 18 | \n",
" 72 | \n",
" 272 | \n",
" 299 | \n",
" 75 | \n",
" 8 | \n",
" 1 | \n",
" 562.2 | \n",
" 509.0 | \n",
" 660.1 | \n",
" 579.8 | \n",
" 650.2 | \n",
" 536.3 | \n",
" 511.8 | \n",
" 482.3 | \n",
" 502.6 | \n",
" 175.2 | \n",
" 578.5 | \n",
" 641.4 | \n",
" 592.5 | \n",
" 395.1 | \n",
" 521.6 | \n",
" 499.3 | \n",
" 567.0 | \n",
" 556.8 | \n",
" 541.1 | \n",
" 524.8 | \n",
" 50.5 | \n",
" 36.1 | \n",
" 124.5 | \n",
" 47.9 | \n",
" 38.6 | \n",
" 58.7 | \n",
" 56.9 | \n",
" 42.9 | \n",
" 50.2 | \n",
" 12.3 | \n",
" 47.9 | \n",
" 103.6 | \n",
" 54.8 | \n",
" 12.6 | \n",
" 9.2 | \n",
" 15.1 | \n",
" 33.5 | \n",
" 60.8 | \n",
" 51.9 | \n",
" 65.2 | \n",
"
\n",
" \n",
" 3 | \n",
" 11/09/2017 | \n",
" Team A v Team Q | \n",
" home | \n",
" Team A | \n",
" Player 1 | \n",
" 97 | \n",
" 44.4 | \n",
" 21.2 | \n",
" 21.1 | \n",
" 2.1 | \n",
" 7.7 | \n",
" 9799.4 | \n",
" 8918.8 | \n",
" 880.5 | \n",
" 42.4 | \n",
" 4219.4 | \n",
" 3293.4 | \n",
" 1363.6 | \n",
" 639.7 | \n",
" 641.346154 | \n",
" 240.8 | \n",
" 6423.5 | \n",
" 3355.7 | \n",
" 2803.4 | \n",
" 264.4 | \n",
" 3375.9 | \n",
" 101.0 | \n",
" 158.3 | \n",
" 132.9 | \n",
" 125.9 | \n",
" 861.8 | \n",
" 624.8 | \n",
" 217.5 | \n",
" 19.5 | \n",
" 18.7 | \n",
" 9.1 | \n",
" 29.5 | \n",
" 10.3 | \n",
" 9.3 | \n",
" 240.8 | \n",
" 198.0 | \n",
" 42.8 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 2.5 | \n",
" 9.3 | \n",
" 2.0 | \n",
" NaN | \n",
" 46 | \n",
" 9 | \n",
" 43 | \n",
" 37.8 | \n",
" 5 | \n",
" 13 | \n",
" 59 | \n",
" 213 | \n",
" 203 | \n",
" 76 | \n",
" 19 | \n",
" 0 | \n",
" 548.0 | \n",
" 479.9 | \n",
" 605.1 | \n",
" 531.7 | \n",
" 608.1 | \n",
" 543.5 | \n",
" 400.4 | \n",
" 518.9 | \n",
" 462.1 | \n",
" 190.3 | \n",
" 564.0 | \n",
" 559.9 | \n",
" 488.7 | \n",
" 301.3 | \n",
" 475.0 | \n",
" 534.6 | \n",
" 517.9 | \n",
" 517.4 | \n",
" 446.3 | \n",
" 506.4 | \n",
" 125.0 | \n",
" 16.4 | \n",
" 75.2 | \n",
" 79.6 | \n",
" 71.8 | \n",
" 62.7 | \n",
" 15.0 | \n",
" 87.2 | \n",
" 3.9 | \n",
" 4.5 | \n",
" 65.8 | \n",
" 17.1 | \n",
" 43.9 | \n",
" 15.6 | \n",
" 35.8 | \n",
" 45.2 | \n",
" 4.9 | \n",
" 16.6 | \n",
" 65.0 | \n",
" 29.4 | \n",
"
\n",
" \n",
" 4 | \n",
" 11/09/2017 | \n",
" Team A v Team Q | \n",
" home | \n",
" Team A | \n",
" Player 14 | \n",
" 67 | \n",
" 31.8 | \n",
" 16.4 | \n",
" 14.5 | \n",
" 0.9 | \n",
" 7.4 | \n",
" 7460.8 | \n",
" 6797.3 | \n",
" 663.5 | \n",
" 28.2 | \n",
" 2807.5 | \n",
" 2817.7 | \n",
" 1143.9 | \n",
" 501.2 | \n",
" 564.011905 | \n",
" 162.3 | \n",
" 4956.5 | \n",
" 2629.0 | \n",
" 2195.0 | \n",
" 132.4 | \n",
" 2504.4 | \n",
" 111.4 | \n",
" 160.3 | \n",
" 151.4 | \n",
" 147.1 | \n",
" 641.6 | \n",
" 458.6 | \n",
" 183.0 | \n",
" 0.0 | \n",
" 22.0 | \n",
" 9.9 | \n",
" 28.0 | \n",
" 12.6 | \n",
" NaN | \n",
" 158.0 | \n",
" 123.0 | \n",
" 35.1 | \n",
" 0.0 | \n",
" 4.3 | \n",
" 2.4 | \n",
" 7.5 | \n",
" 2.4 | \n",
" NaN | \n",
" 29 | \n",
" 7 | \n",
" 29 | \n",
" 32.1 | \n",
" 0 | \n",
" 15 | \n",
" 57 | \n",
" 153 | \n",
" 197 | \n",
" 49 | \n",
" 6 | \n",
" 2 | \n",
" 546.2 | \n",
" 633.9 | \n",
" 691.5 | \n",
" 543.7 | \n",
" 666.0 | \n",
" 554.7 | \n",
" 476.4 | \n",
" 502.2 | \n",
" 516.4 | \n",
" 202.8 | \n",
" 563.1 | \n",
" 654.0 | \n",
" 542.9 | \n",
" 366.9 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 75.0 | \n",
" 52.3 | \n",
" 39.6 | \n",
" 16.0 | \n",
" 83.2 | \n",
" 23.1 | \n",
" 43.1 | \n",
" 55.8 | \n",
" 33.1 | \n",
" 22.6 | \n",
" 42.2 | \n",
" 88.6 | \n",
" 54.1 | \n",
" 34.8 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Match Date Match Home/Away Team Player Name Minutes Played \\\n",
"0 11/09/2017 Team A v Team Q home Team A Player 11 97 \n",
"1 11/09/2017 Team A v Team Q home Team A Player 23 97 \n",
"2 11/09/2017 Team A v Team Q home Team A Player 13 97 \n",
"3 11/09/2017 Team A v Team Q home Team A Player 1 97 \n",
"4 11/09/2017 Team A v Team Q home Team A Player 14 67 \n",
"\n",
" Ball In Play Time Time In Possession Time Opponent In Possession \\\n",
"0 44.4 21.2 21.1 \n",
"1 44.4 21.2 21.1 \n",
"2 44.4 21.2 21.1 \n",
"3 44.4 21.2 21.1 \n",
"4 31.8 16.4 14.5 \n",
"\n",
" Time In Uncontrolled Possession Time In Established Possession \\\n",
"0 2.1 7.7 \n",
"1 2.1 7.7 \n",
"2 2.1 7.7 \n",
"3 2.1 7.7 \n",
"4 0.9 7.4 \n",
"\n",
" Total Distance Total Low Intensity Distance \\\n",
"0 10274.7 9537.4 \n",
"1 9847.5 9317.7 \n",
"2 10587.6 9614.4 \n",
"3 9799.4 8918.8 \n",
"4 7460.8 6797.3 \n",
"\n",
" Total High Intensity Distance Stand Distance Walk Distance Jog Distance \\\n",
"0 737.3 55.7 3852.9 3818.9 \n",
"1 529.8 51.0 3890.7 3742.7 \n",
"2 973.2 40.1 3771.9 3904.7 \n",
"3 880.5 42.4 4219.4 3293.4 \n",
"4 663.5 28.2 2807.5 2817.7 \n",
"\n",
" Run Distance High Speed Run Distance \\\n",
"0 1809.8 639.4 \n",
"1 1633.3 420.0 \n",
"2 1897.7 744.1 \n",
"3 1363.6 639.7 \n",
"4 1143.9 501.2 \n",
"\n",
" High Speed Distance - Player Average Sprint Distance \\\n",
"0 550.388462 97.9 \n",
"1 295.738462 109.8 \n",
"2 752.552941 229.1 \n",
"3 641.346154 240.8 \n",
"4 564.011905 162.3 \n",
"\n",
" Ball In Play Total Distance In Possession Total Distance \\\n",
"0 6499.6 2863.4 \n",
"1 6380.2 2789.5 \n",
"2 7225.3 3196.8 \n",
"3 6423.5 3355.7 \n",
"4 4956.5 2629.0 \n",
"\n",
" Opponent In Possession Total Distance \\\n",
"0 3374.8 \n",
"1 3306.3 \n",
"2 3710.0 \n",
"3 2803.4 \n",
"4 2195.0 \n",
"\n",
" Uncontrolled Possession Total Distance Ball Out Of Play Total Distance \\\n",
"0 261.4 3775.1 \n",
"1 284.4 3467.3 \n",
"2 318.5 3362.3 \n",
"3 264.4 3375.9 \n",
"4 132.4 2504.4 \n",
"\n",
" Total Distance (m/min) Total Distance In Possession (m/min) \\\n",
"0 105.9 135.1 \n",
"1 101.5 131.6 \n",
"2 109.2 150.8 \n",
"3 101.0 158.3 \n",
"4 111.4 160.3 \n",
"\n",
" Total Distance Opponent In Possession (m/min) \\\n",
"0 159.9 \n",
"1 156.7 \n",
"2 175.8 \n",
"3 132.9 \n",
"4 151.4 \n",
"\n",
" Total Distance Uncontrolled Possession (m/min) Ball In Play HI Distance \\\n",
"0 124.5 705.3 \n",
"1 135.4 497.7 \n",
"2 151.7 945.4 \n",
"3 125.9 861.8 \n",
"4 147.1 641.6 \n",
"\n",
" In Possession HI Distance Opponent In Possession HI Distance \\\n",
"0 292.0 410.6 \n",
"1 100.3 392.2 \n",
"2 421.0 515.8 \n",
"3 624.8 217.5 \n",
"4 458.6 183.0 \n",
"\n",
" Uncontrolled Possession HI Distance Ball Out Of Play HI Distance \\\n",
"0 2.7 32.0 \n",
"1 5.2 32.1 \n",
"2 8.6 27.8 \n",
"3 19.5 18.7 \n",
"4 0.0 22.0 \n",
"\n",
" HI Distance (m/min) HI Distance In Possession (m/min) \\\n",
"0 7.6 13.8 \n",
"1 5.5 4.7 \n",
"2 10.0 19.9 \n",
"3 9.1 29.5 \n",
"4 9.9 28.0 \n",
"\n",
" HI Distance Opponent In Possession (m/min) \\\n",
"0 19.5 \n",
"1 18.6 \n",
"2 24.4 \n",
"3 10.3 \n",
"4 12.6 \n",
"\n",
" HI Distance Uncontrolled Possession (m/min) Ball In Play Sprint Distance \\\n",
"0 1.3 88.3 \n",
"1 2.5 109.8 \n",
"2 4.1 224.9 \n",
"3 9.3 240.8 \n",
"4 NaN 158.0 \n",
"\n",
" In Possession Sprint Distance Opponent In Possession Sprint Distance \\\n",
"0 47.4 40.9 \n",
"1 9.3 100.5 \n",
"2 115.8 109.1 \n",
"3 198.0 42.8 \n",
"4 123.0 35.1 \n",
"\n",
" Uncontrolled Possession Sprint Distance Ball Out Of Play Sprint Distance \\\n",
"0 0.0 9.7 \n",
"1 0.0 0.0 \n",
"2 0.0 4.2 \n",
"3 0.0 0.0 \n",
"4 0.0 4.3 \n",
"\n",
" Sprint Distance (m/min) Sprint Distance In Possession (m/min) \\\n",
"0 1.0 2.2 \n",
"1 1.1 0.4 \n",
"2 2.4 5.5 \n",
"3 2.5 9.3 \n",
"4 2.4 7.5 \n",
"\n",
" Sprint Distance Opponent In Possession (m/min) \\\n",
"0 1.9 \n",
"1 4.8 \n",
"2 5.2 \n",
"3 2.0 \n",
"4 2.4 \n",
"\n",
" Sprint Distance Uncontrolled Possession (m/min) HI Events Sprint Events \\\n",
"0 NaN 40 7 \n",
"1 NaN 25 6 \n",
"2 NaN 48 12 \n",
"3 NaN 46 9 \n",
"4 NaN 29 7 \n",
"\n",
" HS Run Events Maximum Speed (km/h) Deceleration Very High Events \\\n",
"0 41 29.7 2 \n",
"1 26 29.7 2 \n",
"2 36 31.9 4 \n",
"3 43 37.8 5 \n",
"4 29 32.1 0 \n",
"\n",
" Deceleration High Events Deceleration Medium Events \\\n",
"0 19 70 \n",
"1 16 81 \n",
"2 18 72 \n",
"3 13 59 \n",
"4 15 57 \n",
"\n",
" Deceleration Low Events Acceleration Low Events \\\n",
"0 220 236 \n",
"1 279 312 \n",
"2 272 299 \n",
"3 213 203 \n",
"4 153 197 \n",
"\n",
" Acceleration Medium Events Acceleration High Events \\\n",
"0 69 9 \n",
"1 99 16 \n",
"2 75 8 \n",
"3 76 19 \n",
"4 49 6 \n",
"\n",
" Acceleration Very High Events 1-5TD 6-10TD 11-15TD 16-20TD 21-25TD \\\n",
"0 0 598.8 542.0 633.3 581.5 605.0 \n",
"1 2 453.7 568.7 675.7 570.0 598.5 \n",
"2 1 562.2 509.0 660.1 579.8 650.2 \n",
"3 0 548.0 479.9 605.1 531.7 608.1 \n",
"4 2 546.2 633.9 691.5 543.7 666.0 \n",
"\n",
" 26-30TD 31-35TD 36-40TD 41-45TD 45+TD 46-50TD 51-55TD 56-60TD \\\n",
"0 546.2 420.3 486.3 501.1 173.3 600.7 604.2 553.1 \n",
"1 560.6 451.5 455.7 508.2 203.8 473.7 548.9 564.4 \n",
"2 536.3 511.8 482.3 502.6 175.2 578.5 641.4 592.5 \n",
"3 543.5 400.4 518.9 462.1 190.3 564.0 559.9 488.7 \n",
"4 554.7 476.4 502.2 516.4 202.8 563.1 654.0 542.9 \n",
"\n",
" 61-65TD 66-70TD 71-75TD 76-80TD 81-85TD 86-90TD 90+TD 1-5HID \\\n",
"0 393.7 514.5 474.5 475.1 539.8 505.5 525.8 32.5 \n",
"1 387.2 434.7 468.7 465.5 578.9 450.1 429.0 13.7 \n",
"2 395.1 521.6 499.3 567.0 556.8 541.1 524.8 50.5 \n",
"3 301.3 475.0 534.6 517.9 517.4 446.3 506.4 125.0 \n",
"4 366.9 0.0 0.0 0.0 0.0 0.0 0.0 75.0 \n",
"\n",
" 6-10HID 11-15HID 16-20HID 21-25HID 26-30HID 31-35HID 36-40HID \\\n",
"0 54.3 57.2 19.5 49.3 31.5 57.1 40.4 \n",
"1 45.0 72.5 36.8 9.7 30.7 23.5 61.9 \n",
"2 36.1 124.5 47.9 38.6 58.7 56.9 42.9 \n",
"3 16.4 75.2 79.6 71.8 62.7 15.0 87.2 \n",
"4 52.3 39.6 16.0 83.2 23.1 43.1 55.8 \n",
"\n",
" 41-45HID 45+HID 46-50HID 51-55HID 56-60HID 61-65HID 66-70HID \\\n",
"0 35.2 7.7 47.2 81.7 82.6 2.9 13.2 \n",
"1 54.0 15.7 5.1 38.7 25.1 5.9 5.5 \n",
"2 50.2 12.3 47.9 103.6 54.8 12.6 9.2 \n",
"3 3.9 4.5 65.8 17.1 43.9 15.6 35.8 \n",
"4 33.1 22.6 42.2 88.6 54.1 34.8 0.0 \n",
"\n",
" 71-75HID 76-80HID 81-85HID 86-90HID 90+HID \n",
"0 20.2 12.9 32.5 8.0 51.6 \n",
"1 0.0 8.0 45.6 13.3 18.9 \n",
"2 15.1 33.5 60.8 51.9 65.2 \n",
"3 45.2 4.9 16.6 65.0 29.4 \n",
"4 0.0 0.0 0.0 0.0 0.0 "
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_physical.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"### 4.2. Create Columns for 'Non-High Intensity Distance' per 5 mins"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [],
"source": [
"# Rewrite with a loop\n",
"df_physical['1-5NHID'] = df_physical['1-5TD'] - df_physical['1-5HID']\n",
"df_physical['6-10NHID'] = df_physical['6-10TD'] - df_physical['6-10HID']\n",
"df_physical['11-15NHID'] = df_physical['11-15TD'] - df_physical['11-15HID']\n",
"df_physical['16-20NHID'] = df_physical['16-20TD'] - df_physical['16-20HID']\n",
"df_physical['21-25NHID'] = df_physical['21-25TD'] - df_physical['21-25HID']\n",
"df_physical['26-30NHID'] = df_physical['26-30TD'] - df_physical['26-30HID']\n",
"df_physical['31-35NHID'] = df_physical['31-35TD'] - df_physical['31-35HID']\n",
"df_physical['36-40NHID'] = df_physical['36-40TD'] - df_physical['36-40HID']\n",
"df_physical['41-45NHID'] = df_physical['41-45TD'] - df_physical['41-45HID']\n",
"df_physical['45+NHID'] = df_physical['45+TD'] - df_physical['45+HID']\n",
"df_physical['46-50NHID'] = df_physical['46-50TD'] - df_physical['46-50HID']\n",
"df_physical['51-55NHID'] = df_physical['51-55TD'] - df_physical['51-55HID']\n",
"df_physical['56-60NHID'] = df_physical['56-60TD'] - df_physical['56-60HID']\n",
"df_physical['61-65NHID'] = df_physical['61-65TD'] - df_physical['61-65HID']\n",
"df_physical['66-70NHID'] = df_physical['66-70TD'] - df_physical['66-70HID']\n",
"df_physical['71-75NHID'] = df_physical['71-75TD'] - df_physical['71-75HID']\n",
"df_physical['76-80NHID'] = df_physical['76-80TD'] - df_physical['76-80HID']\n",
"df_physical['81-85NHID'] = df_physical['81-85TD'] - df_physical['81-85HID']\n",
"df_physical['86-90NHID'] = df_physical['86-90TD'] - df_physical['86-90HID']\n",
"df_physical['90+NHID'] = df_physical['90+TD'] - df_physical['90+HID']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"### 4.3. Pivot Data"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [],
"source": [
"# Select columns of interest\n",
"\n",
"## Define the columns as a list\n",
"lst_cols = ['Match Date',\n",
" 'Match',\n",
" 'Home/Away',\n",
" 'Team',\n",
" 'Player Name',\n",
" 'Minutes Played',\n",
" '1-5TD',\n",
" '6-10TD',\n",
" '11-15TD',\n",
" '16-20TD',\n",
" '21-25TD',\n",
" '26-30TD',\n",
" '31-35TD',\n",
" '36-40TD',\n",
" '41-45TD',\n",
" '45+TD',\n",
" '46-50TD',\n",
" '51-55TD',\n",
" '56-60TD',\n",
" '61-65TD',\n",
" '66-70TD',\n",
" '71-75TD',\n",
" '76-80TD',\n",
" '81-85TD',\n",
" '86-90TD',\n",
" '90+TD',\n",
" '1-5HID',\n",
" '6-10HID',\n",
" '11-15HID',\n",
" '16-20HID',\n",
" '21-25HID',\n",
" '26-30HID',\n",
" '31-35HID',\n",
" '36-40HID',\n",
" '41-45HID',\n",
" '45+HID',\n",
" '46-50HID',\n",
" '51-55HID',\n",
" '56-60HID',\n",
" '61-65HID',\n",
" '66-70HID',\n",
" '71-75HID',\n",
" '76-80HID',\n",
" '81-85HID',\n",
" '86-90HID',\n",
" '90+HID',\n",
" '1-5NHID',\n",
" '6-10NHID',\n",
" '11-15NHID',\n",
" '16-20NHID',\n",
" '21-25NHID',\n",
" '26-30NHID',\n",
" '31-35NHID',\n",
" '36-40NHID',\n",
" '41-45NHID',\n",
" '45+NHID',\n",
" '46-50NHID',\n",
" '51-55NHID',\n",
" '56-60NHID',\n",
" '61-65NHID',\n",
" '66-70NHID',\n",
" '71-75NHID',\n",
" '76-80NHID',\n",
" '81-85NHID',\n",
" '86-90NHID',\n",
" '90+NHID'\n",
" ] \n",
"\n",
"## Filter DataFrame for just the columns of interest\n",
"df_physical_select = df_physical[lst_cols]"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
"# Pivot the DataFrame\n",
"df_physical_pvt = pd.melt(df_physical_select, id_vars=['Match Date',\n",
" 'Match',\n",
" 'Home/Away',\n",
" 'Team',\n",
" 'Player Name',\n",
" 'Minutes Played'\n",
" ], var_name='Time Period'\n",
" , value_name='Total Distance'\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Match Date | \n",
" Match | \n",
" Home/Away | \n",
" Team | \n",
" Player Name | \n",
" Minutes Played | \n",
" Time Period | \n",
" Total Distance | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 11/09/2017 | \n",
" Team A v Team Q | \n",
" home | \n",
" Team A | \n",
" Player 11 | \n",
" 97 | \n",
" 1-5TD | \n",
" 598.8 | \n",
"
\n",
" \n",
" 1 | \n",
" 11/09/2017 | \n",
" Team A v Team Q | \n",
" home | \n",
" Team A | \n",
" Player 23 | \n",
" 97 | \n",
" 1-5TD | \n",
" 453.7 | \n",
"
\n",
" \n",
" 2 | \n",
" 11/09/2017 | \n",
" Team A v Team Q | \n",
" home | \n",
" Team A | \n",
" Player 13 | \n",
" 97 | \n",
" 1-5TD | \n",
" 562.2 | \n",
"
\n",
" \n",
" 3 | \n",
" 11/09/2017 | \n",
" Team A v Team Q | \n",
" home | \n",
" Team A | \n",
" Player 1 | \n",
" 97 | \n",
" 1-5TD | \n",
" 548.0 | \n",
"
\n",
" \n",
" 4 | \n",
" 11/09/2017 | \n",
" Team A v Team Q | \n",
" home | \n",
" Team A | \n",
" Player 14 | \n",
" 67 | \n",
" 1-5TD | \n",
" 546.2 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Match Date Match Home/Away Team Player Name Minutes Played \\\n",
"0 11/09/2017 Team A v Team Q home Team A Player 11 97 \n",
"1 11/09/2017 Team A v Team Q home Team A Player 23 97 \n",
"2 11/09/2017 Team A v Team Q home Team A Player 13 97 \n",
"3 11/09/2017 Team A v Team Q home Team A Player 1 97 \n",
"4 11/09/2017 Team A v Team Q home Team A Player 14 67 \n",
"\n",
" Time Period Total Distance \n",
"0 1-5TD 598.8 \n",
"1 1-5TD 453.7 \n",
"2 1-5TD 562.2 \n",
"3 1-5TD 548.0 \n",
"4 1-5TD 546.2 "
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Display DataFrame\n",
"df_physical_pvt.head()"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(16800, 8)"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# DataFrame shape\n",
"df_physical_pvt.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"### 4.4. ..."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"\n",
"\n",
"## 5. Export Final DataFrames"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [],
"source": [
"# Export DataFrames\n",
"#df_physical.to_csv(os.path.join(data_dir_physical, 'engineered', 'Physical Output.csv'), index=None, header=True)\n",
"#df_physical_pvt.to_csv(os.path.join(data_dir_physical, 'engineered', 'Physical Output Pivoted.csv'), index=None, header=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"\n",
"\n",
"## 6. Summary\n",
"This notebook engineer physical data using [pandas](http://pandas.pydata.org/)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"\n",
"\n",
"## 7. Next Steps\n",
"The next stage is to visualise this data in Tableau and analyse the findings, to be presented in a deck."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"\n",
"\n",
"## 8. References\n",
"* ...\n",
"* ...\n",
"* ..."
]
},
{
"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",
"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": "40px",
"left": "1118px",
"right": "20px",
"top": "-7px",
"width": "489px"
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"varInspector_section_display": "none",
"window_display": true
}
},
"nbformat": 4,
"nbformat_minor": 2
}