{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Evaluating Passes Assignemnt\n",
"\n",
"The chief scout of your club wants to find good passers of the ball. He is interested in pass success rate, but realises also that the pure success rate isn't a reliable stat for his purposes. If players always take the safest option then they will never create.\n",
"\n",
"What he really wants to find is players who are able to make difficult, but successful passes. To solve this problem start by creating a statistical model (logistic regression for example) that predicts pass success as a function of where on the pitch the pass is taken. In the first model use the only the start co-ordinates of the pass. to predict success. \n",
"\n",
"Improve your model as much as possible by including x^2 , y^2 , x*y, goal angle, end co-ordinates of the pass etc. You can also include whether the pass was a cross or another type of ball. \n",
"\n",
"When you feel you can't improve your model any more, then use it to rank players in the Wyscout free data. Which players are particularly good at making difficult passes?\n",
"\n",
"**Submission should consist of 2 parts.**\n",
"\n",
"1. A two page document containing: a non-technical description of how your method works\n",
"an explanation of the strengths and weaknesses of your approach.\n",
"choose one playing position (goalkeeper, full back, centre back, central midfielder, attacking midfielder or striker) and one of the leagues \n",
"2. A runnable, commented code as a (preferably) Python or R script that generates all the plots from the report and explains the method you have used. Important: this code should be a single file run immediately if placed with in the same directory as the Wyscout folder, which in turn contains Wyscout/events etc. i.e. exactly as is done in the expected goals tutorial. Do not use non-standard libraries and make sure there are no errors when run. \n",
"\n",
"This hand-in is graded on a mark 0-10. The total possible points for the course is 40. To pass with grade 3 requires 18 points, grade 4 requires 25 or higher, grade 5 is 32 or higher. This hand-in is also anonymously peer-reviewed, to help you improve, but the grade is decided by the teacher.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# standard imports\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from collections import Counter\n",
"import json\n",
"import os\n",
"\n",
"# stats packages\n",
"import statsmodels.api as sm\n",
"import statsmodels.formula.api as smf\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn import metrics\n",
"from sklearn.calibration import calibration_curve\n",
"\n",
"# pprint to make json easier to read\n",
"import pprint as pp\n",
"\n",
"# plotting\n",
"from mplsoccer.pitch import Pitch\n",
"\n",
"# to deal with the unicode characters of players names / team names in Wyscout\n",
"import codecs\n",
"\n",
"pd.set_option('display.max_rows', 500)\n",
"pd.set_option('display.max_columns', 100)\n",
"pd.options.mode.chained_assignment = None\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Helper Functions"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def show_event_breakdown(df_events, dic_tags):\n",
" \"\"\"\n",
" Produces a full breakdown of the events, subevents, and the tags for the Wyscout dataset\n",
" Use this to look at the various tags attributed to the event taxonomy\n",
" \"\"\"\n",
"\n",
" df_event_breakdown = df_events.groupby(['eventName','subEventName'])\\\n",
" .agg({'id':'nunique','tags':lambda x: list(x)})\\\n",
" .reset_index()\\\n",
" .rename(columns={'id':'numSubEvents','tags':'tagList'})\n",
"\n",
" # creating a histogram of the tags per sub event\n",
" df_event_breakdown['tagHist'] = df_event_breakdown.tagList.apply(lambda x: Counter([dic_tags[j] for i in x for j in i]))\n",
"\n",
" dic = {}\n",
"\n",
" for i, cols in df_event_breakdown.iterrows():\n",
" eventName, subEventName, numEvents, tagList, tagHist = cols\n",
"\n",
" for key in tagHist:\n",
"\n",
" dic[f'{i}-{key}'] = [eventName, subEventName, numEvents, key, tagHist[key]]\n",
"\n",
" df_event_breakdown = pd.DataFrame.from_dict(dic, orient='index', columns=['eventName','subEventName','numSubEvents','tagKey','tagFrequency'])\\\n",
" .sort_values(['eventName','numSubEvents','tagFrequency'], ascending=[True, False, False])\\\n",
" .reset_index(drop=True)\\\n",
"\n",
" return df_event_breakdown"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"def home_and_away(df):\n",
" \"\"\"\n",
" Picks out the home and away teamIds and their scores\n",
" \"\"\"\n",
" teamsData = df['teamsData']\n",
" \n",
" for team in teamsData:\n",
" teamData = teamsData[team]\n",
" if teamData.get('side') == 'home':\n",
" homeTeamId = team\n",
" homeScore = teamData.get('score')\n",
" homeFormation = teamData.get('hasFormation')\n",
" elif teamData.get('side') == 'away':\n",
" awayTeamId = team\n",
" awayScore = teamData.get('score')\n",
" \n",
" df['homeTeamId'], df['homeScore'] = homeTeamId, homeScore\n",
" df['awayTeamId'], df['awayScore'] = awayTeamId, awayScore\n",
" \n",
" return df"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def possession_indicator(df):\n",
" \"\"\"\n",
" Function that identifies which team is in possession of the ball\n",
" If the event is a found, interruption of offside, return a 0\n",
" Winner of a duel is deemed in possession of the ball\n",
" \"\"\"\n",
" \n",
" # team identifiers\n",
" teamId = df['teamId']\n",
" homeTeamId = df['homeTeamId']\n",
" awayTeamId = df['awayTeamId']\n",
" teams = set([homeTeamId, awayTeamId])\n",
" otherTeamId = list(teams - set([teamId]))[0]\n",
" \n",
" # eventName and subEventNames\n",
" eventName = df['eventName']\n",
" \n",
" # success flag\n",
" successFlag = df['successFlag']\n",
" \n",
" # assigning possession teamId\n",
" if eventName in ['Pass','Free Kick','Others on the ball','Shot','Save attempt','Goalkeeper leaving line']:\n",
" possessionTeamId = teamId\n",
" elif eventName == 'Duel':\n",
" possessionTeamId = teamId if successFlag == 1 else otherTeamId\n",
" else:\n",
" possessionTeamId = np.NaN\n",
" \n",
" return possessionTeamId\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def strong_foot_flag(df):\n",
" \"\"\"\n",
" Compare foot of pass with footedness of player\n",
" Provides flag = 1 if pass played with strong foot of the player\n",
" \"\"\"\n",
" tags = df['tags']\n",
" foot = df['foot']\n",
" \n",
" # tags\n",
" if 401 in tags:\n",
" passFoot = 'L'\n",
" elif 402 in tags:\n",
" passFoot = 'R'\n",
" elif 403 in tags:\n",
" passFoot = 'H'\n",
" else:\n",
" passFoot = 'N'\n",
" \n",
" # feature\n",
" if (passFoot == 'L') and (foot in ['L','B']):\n",
" strongFlag = 1\n",
" elif (passFoot == 'R') and (foot in ['R','B']):\n",
" strongFlag = 1\n",
" else:\n",
" strongFlag = 0\n",
" \n",
" return strongFlag\n",
"\n",
"\n",
"def weak_foot_flag(df):\n",
" \"\"\"\n",
" Compare foot of pass with footedness of player\n",
" Provides flag = 1 if pass played with weak foot of the player\n",
" \"\"\"\n",
" tags = df['tags']\n",
" foot = df['foot']\n",
" \n",
" # tags\n",
" if 401 in tags:\n",
" passFoot = 'L'\n",
" elif 402 in tags:\n",
" passFoot = 'R'\n",
" elif 403 in tags:\n",
" passFoot = 'H'\n",
" else:\n",
" passFoot = 'N'\n",
" \n",
" # feature\n",
" if (passFoot == 'L') and (foot == 'R'):\n",
" weakFlag = 1\n",
" elif (passFoot == 'R') and (foot == 'L'):\n",
" weakFlag = 1\n",
" else:\n",
" weakFlag = 0\n",
" \n",
" return weakFlag"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"# Data Loader Functions\n",
"\n",
"* Players\n",
"* Teams\n",
"* Tags\n",
"* Matches\n",
"* Formations\n",
"* Events"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def get_players(player_file):\n",
" \"\"\"\n",
" Returns dataframe of players\n",
" \"\"\"\n",
" \n",
" with open(player_file) as f:\n",
" players_data = json.load(f)\n",
"\n",
" player_cols = ['playerId','shortName','foot','height','weight','birthDate','birthCountry','role','roleCode']\n",
"\n",
" df_players = pd.DataFrame([[i.get('wyId'),codecs.unicode_escape_decode(i.get('shortName'))[0],i.get('foot'),i.get('height'),i.get('weight'),i.get('birthDate')\\\n",
" ,i.get('passportArea').get('name'),i.get('role').get('name'),i.get('role').get('code3')] for i in players_data], columns = player_cols)\n",
"\n",
" return df_players\n",
"\n",
"\n",
"\n",
"def get_teams(team_file):\n",
" \"\"\"\n",
" Returns dataframe of teams\n",
" \"\"\"\n",
" \n",
" with open(team_file) as f:\n",
" teams_data = json.load(f)\n",
"\n",
" team_cols = ['teamId','teamName','officialTeamName','teamType','teamArea']\n",
"\n",
" df_teams = pd.DataFrame([[i.get('wyId'),codecs.unicode_escape_decode(i.get('name'))[0],codecs.unicode_escape_decode(i.get('officialName'))[0],i.get('type')\\\n",
" ,i.get('area').get('name')] for i in teams_data], columns=team_cols)\n",
" \n",
" return df_teams\n",
"\n",
"\n",
"\n",
"dic_tags = {\n",
" 101: 'Goal',\n",
" 102: 'Own goal',\n",
" 301: 'Assist',\n",
" 302: 'Key pass',\n",
" 1901: 'Counter attack',\n",
" 401: 'Left foot',\n",
" 402: 'Right foot',\n",
" 403: 'Head/body',\n",
" 1101: 'Direct',\n",
" 1102: 'Indirect',\n",
" 2001: 'Dangerous ball lost',\n",
" 2101: 'Blocked',\n",
" 801: 'High',\n",
" 802: 'Low',\n",
" 1401: 'Interception',\n",
" 1501: 'Clearance',\n",
" 201: 'Opportunity',\n",
" 1301: 'Feint',\n",
" 1302: 'Missed ball',\n",
" 501: 'Free space right',\n",
" 502: 'Free space left',\n",
" 503: 'Take on left',\n",
" 504: 'Take on right',\n",
" 1601: 'Sliding tackle',\n",
" 601: 'Anticipated',\n",
" 602: 'Anticipation',\n",
" 1701: 'Red card',\n",
" 1702: 'Yellow card',\n",
" 1703: 'Second yellow card',\n",
" 1201: 'Position: Goal low center',\n",
" 1202: 'Position: Goal low right',\n",
" 1203: 'Position: Goal center',\n",
" 1204: 'Position: Goal center left',\n",
" 1205: 'Position: Goal low left',\n",
" 1206: 'Position: Goal center right',\n",
" 1207: 'Position: Goal high center',\n",
" 1208: 'Position: Goal high left',\n",
" 1209: 'Position: Goal high right',\n",
" 1210: 'Position: Out low right',\n",
" 1211: 'Position: Out center left',\n",
" 1212: 'Position: Out low left',\n",
" 1213: 'Position: Out center right',\n",
" 1214: 'Position: Out high center',\n",
" 1215: 'Position: Out high left',\n",
" 1216: 'Position: Out high right',\n",
" 1217: 'Position: Post low right',\n",
" 1218: 'Position: Post center left',\n",
" 1219: 'Position: Post low left',\n",
" 1220: 'Position: Post center right',\n",
" 1221: 'Position: Post high center',\n",
" 1222: 'Position: Post high left',\n",
" 1223: 'Position: Post high right',\n",
" 901: 'Through',\n",
" 1001: 'Fairplay',\n",
" 701: 'Lost',\n",
" 702: 'Neutral',\n",
" 703: 'Won',\n",
" 1801: 'Accurate',\n",
" 1802: 'Not accurate'\n",
"}\n",
"\n",
"\n",
"\n",
"def get_matches(match_repo):\n",
" \"\"\"\n",
" Return dataframe of matches\n",
" \"\"\"\n",
" \n",
" match_files = os.listdir(match_repo)\n",
"\n",
" lst_df_matches = []\n",
"\n",
" # note, this does not include groupName\n",
" match_cols = [\"status\",\"roundId\",\"gameweek\",\"teamsData\",\"seasonId\",\"dateutc\",\"winner\",\"venue\"\\\n",
" ,\"wyId\",\"label\",\"date\",\"referees\",\"duration\",\"competitionId\",\"source\"]\n",
"\n",
" for match_file in match_files:\n",
"\n",
" print (f'Processing {match_file}...')\n",
"\n",
" with open(f'matches/{match_file}') as f:\n",
" data = json.load(f)\n",
" df = pd.DataFrame(data)\n",
"\n",
" # adding some file source metadata\n",
" df['source'] = match_file.replace('matches_','').replace('.json','')\n",
"\n",
" # dealing with the groupName column that's only in the international competitions\n",
" df = df[match_cols]\n",
" lst_df_matches.append(df)\n",
"\n",
" # concatenating match files\n",
" df_matches = pd.concat(lst_df_matches, ignore_index=True)\n",
"\n",
" # applying home and away transformations using helper functions\n",
" df_matches = df_matches.apply(home_and_away, axis=1)\n",
"\n",
" # and changing the wyId to matchId\n",
" df_matches = df_matches.rename(columns={'wyId':'matchId'})\n",
"\n",
" # and filtering columns (may want to change this later)\n",
" match_cols_final = [\"source\",\"competitionId\",\"seasonId\",\"roundId\",\"gameweek\",\"matchId\",\"teamsData\",\"dateutc\",\"date\"\\\n",
" ,\"homeTeamId\",\"homeScore\",\"awayTeamId\",\"awayScore\",\"duration\",\"winner\",\"venue\",\"label\"]\n",
"\n",
" df_matches = df_matches[match_cols_final] \n",
" \n",
" return df_matches\n",
"\n",
"\n",
"\n",
"def get_formations(df_matches):\n",
" \"\"\"\n",
" Returns dataframe of formations within a match for all matches\n",
" Adapted from https://github.com/CleKraus/soccer_analytics\n",
" \"\"\"\n",
"\n",
" lst_formations = list()\n",
" \n",
" for idx, match in df_matches.iterrows():\n",
"\n",
" matchId = match['matchId']\n",
"\n",
" # loop through the two teams\n",
" for team in [0, 1]:\n",
" team = match['teamsData'][list(match['teamsData'])[team]]\n",
" teamId = team['teamId']\n",
"\n",
" # get all players that started on the bench\n",
" player_bench = [player['playerId'] for player in team['formation']['bench']]\n",
" df_bench = pd.DataFrame()\n",
" df_bench['playerId'] = player_bench\n",
" df_bench['lineup'] = 0\n",
"\n",
" # get all players that were in the lineup\n",
" player_lineup = [\n",
" player['playerId'] for player in team['formation']['lineup']\n",
" ]\n",
" df_lineup = pd.DataFrame()\n",
" df_lineup['playerId'] = player_lineup\n",
" df_lineup['lineup'] = 1\n",
"\n",
" # in case there were no substitutions in the match\n",
" if team['formation']['substitutions'] == 'null':\n",
" player_in = []\n",
" player_out = []\n",
" sub_minute = []\n",
" # if there were substitutions\n",
" else:\n",
" player_in = [\n",
" sub['playerIn'] for sub in team['formation']['substitutions']\n",
" ]\n",
" player_out = [\n",
" sub['playerOut'] for sub in team['formation']['substitutions']\n",
" ]\n",
" sub_minute = [\n",
" sub['minute'] for sub in team['formation']['substitutions']\n",
" ]\n",
"\n",
" # build a data frame who and when was substituted in\n",
" df_player_in = pd.DataFrame()\n",
" df_player_in['playerId'] = player_in\n",
" df_player_in['substituteIn'] = sub_minute\n",
"\n",
" # build a data frame who and when was substituted out\n",
" df_player_out = pd.DataFrame()\n",
" df_player_out['playerId'] = player_out\n",
" df_player_out['substituteOut'] = sub_minute\n",
"\n",
" # get the formation by concatenating lineup and bench players\n",
" df_formation = pd.concat([df_lineup, df_bench], axis=0)\n",
" df_formation['matchId'] = matchId\n",
" df_formation['teamId'] = teamId\n",
"\n",
" # add information about substitutions\n",
" df_formation = pd.merge(df_formation, df_player_in, how='left')\n",
" df_formation = pd.merge(df_formation, df_player_out, how='left')\n",
"\n",
" lst_formations.append(df_formation)\n",
"\n",
" df_formations = pd.concat(lst_formations)\n",
"\n",
" # get the minute the player started and the minute the player ended the match\n",
" df_formations['minuteStart'] = np.where(\n",
" df_formations['substituteIn'].isnull(), 0, df_formations['substituteIn']\n",
" )\n",
" df_formations['minuteEnd'] = np.where(\n",
" df_formations['substituteOut'].isnull(), 90, df_formations['substituteOut']\n",
" )\n",
"\n",
" # make sure the match always lasts 90 minutes\n",
" df_formations['minuteStart'] = np.minimum(df_formations['minuteStart'], 90)\n",
" df_formations['minuteEnd'] = np.minimum(df_formations['minuteEnd'], 90)\n",
"\n",
" # set minuteEnd to 0 in case the player was not in the lineup and did not get substituted in\n",
" df_formations['minuteEnd'] = np.where(\n",
" (df_formations['lineup'] == 0) & (df_formations['substituteIn'].isnull()),\n",
" 0,\n",
" df_formations['minuteEnd'],\n",
" )\n",
"\n",
" # compute the minutes played\n",
" df_formations['minutesPlayed'] = (\n",
" df_formations['minuteEnd'] - df_formations['minuteStart']\n",
" )\n",
"\n",
" # use a binary flag of substitution rather than a minute and NaNs\n",
" df_formations['substituteIn'] = 1 * (df_formations['substituteIn'].notnull())\n",
" df_formations['substituteOut'] = 1 * (df_formations['substituteOut'].notnull())\n",
"\n",
" return df_formations\n",
"\n",
"\n",
"\n",
"def get_events(event_repo, leagueSelectionFlag = 0, leagueSelection = 'England'):\n",
" \"\"\"\n",
" Returns dataframe of events\n",
" \"\"\"\n",
" \n",
" events_files = os.listdir(event_repo)\n",
" \n",
" lst_df_events = []\n",
"\n",
" if leagueSelectionFlag == 1:\n",
" events_files = [i for i in events_files if i == f'events_{leagueSelection}.json']\n",
"\n",
" event_cols = ['source','matchId','matchPeriod','eventSec','teamId','id','eventId','eventName','subEventId','subEventName','playerId','positions','tags']\n",
"\n",
" for events_file in events_files:\n",
"\n",
" print (f'Processing {events_file}...')\n",
"\n",
" with open(f'events/{events_file}') as f:\n",
" data = json.load(f)\n",
" df = pd.DataFrame(data)\n",
" df['source'] = events_file.replace('events_','').replace('.json','') \n",
" lst_df_events.append(df)\n",
"\n",
" df_events = pd.concat(lst_df_events, ignore_index=True)\n",
"\n",
" # applying column re-ordering\n",
" df_events = df_events[event_cols]\n",
" \n",
" return df_events"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"# Event Feature Engineering Function\n",
"\n",
"* Rejigs tags\n",
"* Applies `homeFlag`\n",
"* Applies event `successFlag`\n",
"* Applies `matchEventIndex` (an ordering of every event that occurs within a match from 1-n)\n",
"* Applies `possessionTeamId` (the teamId that's in possession of the ball)\n",
"* Applies `possessionSequenceIndex`\n",
"* Applies `goalDelta` (the game state)\n",
"* Applies `numReds` (the cumulative number of red cards a team has accrued throughout a match)\n",
"* Applies `weakFlag` and `strongFlag` (for footedness of player and foot used for pass)\n",
"* Unpacks `positions`\n",
"* Applies `possessionStartSec`\n",
"* Applies `playerPossessionTimeSec`\n",
"* Re-orders and filters `df_events`"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"def event_feature_engineering(df_events):\n",
" \"\"\"\n",
" Takes in raw df_events dataframe and returns an augmented df_events dataframe with features for xPass model feature engineering\n",
" \"\"\"\n",
" \n",
" # Re-jigging tags -> list of integers\n",
" print ('Rejigging tags...')\n",
" df_events['tags'] = df_events.tags.apply(lambda x: [i.get('id') for i in x])\n",
" \n",
" \n",
" # Applies homeFlag by 1) first merging on df_matches and then 2) applying helper function\n",
" print ('Applying homeFlag...')\n",
" ## 1)\n",
" df_events = df_events.merge(df_matches, on=['matchId','source'], how = 'inner')\n",
" ## 2)\n",
" df_events['homeFlag'] = df_events.apply(lambda x: 1 if int(x.teamId) == int(x.homeTeamId) else 0, axis=1)\n",
" \n",
" \n",
" # Applying success flag\n",
" print ('Applying successFlag...')\n",
" df_events['successFlag'] = df_events.tags.apply(lambda x: 1 if 1801 in x else 0)\n",
" \n",
" \n",
" # 1) Ordering of events so that they're in precisely chronological order, and then 2) resorting (as the merge with df_matches will cause df_events to become unsorted)\n",
" print ('Applying matchEventIndex...')\n",
" ## 1)\n",
" df_events['matchEventIndex'] = df_events.sort_values(['matchId','matchPeriod','eventSec'], ascending=[True, True, True])\\\n",
" .groupby('matchId')\\\n",
" .cumcount() + 1\n",
" ## 2)\n",
" df_events = df_events.sort_values(['matchId','matchEventIndex'], ascending=[True,True])\n",
" \n",
" \n",
" # 1) Applying possession team indicator and then 2) forward filling the NaNs with the existing team (until possession is explicitly transferred)\n",
" print ('Applying possessionTeamId...')\n",
" ## 1)\n",
" df_events['possessionTeamId'] = df_events.apply(possession_indicator, axis=1)\n",
" ## 2) Filling the nans\n",
" df_events['possessionTeamId'] = df_events.possessionTeamId.fillna(method='ffill')\n",
" \n",
" \n",
" # Sequencing the possessions (each possession will have it's own index per match)\n",
" print ('Applying possessionSequenceIndex...')\n",
" ## 1) initiate sequence at 0\n",
" df_events['possessionSequenceIndex'] = 0\n",
" ## 2) every time there's a change in sequence, you set a value of 1\n",
" df_events['possessionSequenceIndex'][((df_events['possessionTeamId'] != df_events['possessionTeamId'].shift(1))) \\\n",
" | ((df_events['matchPeriod'] != df_events['matchPeriod'].shift(1)))] = 1\n",
" ## 3) take a cumulative sum of the 1s per match\n",
" df_events['possessionSequenceIndex'] = df_events.groupby('matchId')['possessionSequenceIndex'].cumsum()\n",
" \n",
" \n",
" # Applying Game State\n",
" ## Note this method is only 95% accurate; suspect that's sufficiently fine for this feature for this application\n",
" print ('Applying gameState...')\n",
" ## 1) getting goals scored flag\n",
" df_events['goalScoredFlag'] = df_events.apply(lambda x: 1 if 101 in x.tags and x.eventName in ['Shot','Free Kick'] else 0, axis=1)\n",
" ## 2) getting goal conceded flag\n",
" df_events['goalsConcededFlag'] = df_events.apply(lambda x: 1 if 101 in x.tags and x.eventName == 'Save attempt' else 0, axis=1)\n",
" ## 3) Cumulatively summing the goals scored\n",
" df_events['goalsScored'] = df_events.sort_values(['matchId','matchPeriod','eventSec'], ascending=[True, True, True])\\\n",
" .groupby(['matchId','teamId'])\\\n",
" ['goalScoredFlag'].cumsum()\n",
" ## 4) Cumulatively summing the goals conceded\n",
" df_events['goalsConceded'] = df_events.sort_values(['matchId','matchPeriod','eventSec'], ascending=[True, True, True])\\\n",
" .groupby(['matchId','teamId'])\\\n",
" ['goalsConcededFlag'].cumsum()\n",
" ## 5) Calculating the goal delta\n",
" df_events['goalDelta'] = df_events['goalsScored'] - df_events['goalsConceded']\n",
" \n",
" \n",
" # Applying red cards to calculate the difference in the number of players on each team\n",
" print ('Applying numReds...')\n",
" ## 1) Applying red card flag\n",
" df_events['redCardFlag'] = df_events.tags.apply(lambda x: -1 if 1701 in x else 0)\n",
" \n",
" ## 2) Applying Excess Player flag to the other team\n",
" df_reds = df_events.loc[df_events['redCardFlag'] == -1, ['matchId','teamId','matchEventIndex','id']]\n",
"\n",
" lst_redOtherTeamFlag = []\n",
"\n",
" for idx, cols in df_reds.iterrows():\n",
" matchId, teamId, matchEventIndex, Id = cols\n",
" try:\n",
" redOtherTeamId = df_events.loc[(df_events['matchId'] == matchId) & (df_events['teamId'] != teamId) & (df_events['matchEventIndex'] > matchEventIndex)].sort_values('matchEventIndex', ascending=True)['id'].values[0]\n",
" lst_redOtherTeamFlag.append(redOtherTeamId)\n",
" except:\n",
" continue\n",
"\n",
" df_events.loc[df_events['id'].isin(lst_redOtherTeamFlag), 'redCardFlag'] = 1\n",
" \n",
" ## 3) Cumulatively summing the number of red cards on a team throughout a game\n",
" df_events['numReds'] = df_events.sort_values(['matchId','matchPeriod','eventSec'], ascending=[True, True, True])\\\n",
" .groupby(['matchId','teamId'])\\\n",
" ['redCardFlag'].cumsum()\n",
" \n",
" \n",
" # Applying strong and weak foot flags\n",
" print ('Applying weakFlag and strongFlag for footedness...')\n",
" ## 1) adding player metadata\n",
" df_events = df_events.merge(df_players, on='playerId', how='inner')\n",
" ## 2) Cleaning up the foot preference flags of the players\n",
" df_events['foot'] = df_events.foot.apply(lambda x: 'L' if x == 'left' else 'R' if x == 'right' else 'B' if x == 'both' else 'N')\n",
" ## 3) Applying weak foot flag (mainly impacts crosses)\n",
" df_events['weakFlag'] = df_events.apply(weak_foot_flag, axis=1)\n",
" ## 4) Applying strong foot flag (this isn't seen as significant in the logistic regression, but keeping it in for completeness)\n",
" df_events['strongFlag'] = df_events.apply(strong_foot_flag, axis=1)\n",
" \n",
" \n",
" # Unpacking positions: Found that this multi-lambda method is by far and away the quickest rather than a multi-stage apply when dealing with 3M events\n",
" print ('Unpacking positions...')\n",
" # (this takes about a minute for the full Wyscout dataset which is pretty good)\n",
" ## 1) counting the number of positions found in the position dic\n",
" df_events['numPositions'] = df_events.positions.apply(lambda x: len(x))\n",
" ## 2) Getting the starting x,y\n",
" df_events['startPositions'] = df_events.positions.apply(lambda x: x[0])\n",
" df_events['start_x'] = df_events.startPositions.apply(lambda x: x.get('x'))\n",
" df_events['start_y'] = df_events.startPositions.apply(lambda x: x.get('y'))\n",
" ## 3) Getting the ending x,y\n",
" df_events['endPositions'] = df_events.apply(lambda x: x.positions[1] if x.numPositions == 2 else {}, axis=1)\n",
" df_events['end_x'] = df_events.endPositions.apply(lambda x: x.get('x', None))\n",
" df_events['end_y'] = df_events.endPositions.apply(lambda x: x.get('y', None))\n",
" \n",
" \n",
" # Getting the time that the team has been in possession until the pass has been made (1) takes a while, but allows 2) to be vectorised)\n",
" print ('Applying possessionStartSec...')\n",
" ## 1) getting the time since the possession started\n",
" df_events['possessionStartSec'] = df_events.loc[df_events.groupby(['matchId','possessionSequenceIndex'])['eventSec'].transform('idxmin'), 'eventSec'].values\n",
" ## 2) calculating the time of the posession\n",
" df_events['possessionTimeSec'] = df_events['eventSec'] - df_events['possessionStartSec']\n",
" \n",
" \n",
" # Getting the time that the player has been in possession\n",
" print ('Applying playerPossessionTimeSec...')\n",
" ## 1) initialising at 0\n",
" df_events['playerPossessionTimeSec'] = 0\n",
" ## 2) checks that the previous event was part of the same possession sequence within the same match, and if it is, calculates possession time in seconds\n",
" df_events['playerPossessionTimeSec'][((df_events['matchId'] == df_events['matchId'].shift(1)) &\\\n",
" (df_events['possessionSequenceIndex'] == df_events['possessionSequenceIndex'].shift(1)))]\\\n",
" = df_events['eventSec'] - df_events['eventSec'].shift(1)\n",
" \n",
" \n",
" # Getting previous event\n",
" print ('Grabbing previous event...')\n",
" df_events['previousSubEventName'] = 'Match Start'\n",
" df_events['previousSubEventName'][df_events['matchId'] == df_events['matchId'].shift(1)] = df_events['subEventName'].shift(1)\n",
"\n",
" \n",
" # finally, tidying up columns\n",
" df_events = df_events[['source','matchId','matchPeriod','eventSec','possessionTimeSec','playerPossessionTimeSec','matchEventIndex','teamId','homeTeamId','homeScore','awayTeamId','awayScore','homeFlag','id'\\\n",
" ,'eventName','subEventName','previousSubEventName','possessionTeamId','possessionSequenceIndex','playerId','shortName','roleCode','strongFlag','weakFlag','goalDelta','numReds'\\\n",
" ,'start_x','start_y','end_x','end_y','tags','successFlag']].sort_values(['matchId','matchEventIndex'], ascending=[True,True])\n",
" \n",
" print ('Outputting df_events.')\n",
" return df_events"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"def pass_feature_engineering(df_events, pitchLength = 105, pitchWidth = 68, outputToCsvFlag = 0):\n",
" \"\"\"\n",
" Highly vectorised set of transformations\n",
" \n",
" Takes in the feature enriched df_events\n",
" Filters on the different pass types\n",
" Applies pass specific features\n",
" Outputs df_passes\n",
" \"\"\"\n",
" \n",
" dic_passes = {\n",
" 'Simple pass':['Pass','Simple pass'],\n",
" 'High pass':['Pass','High pass'],\n",
" 'Head pass':['Pass','Head pass'],\n",
" 'Cross':['Pass','Cross'],\n",
" 'Launch':['Pass','Launch'],\n",
" 'Smart pass':['Pass','Smart pass'],\n",
" 'Hand pass':['Pass','Hand pass'],\n",
" 'Free kick cross':['Free Kick','Free kick cross'],\n",
" 'Corner':['Free Kick','Corner'],\n",
" 'Free Kick':['Free Kick','Free Kick'],\n",
" 'Throw in':['Free Kick','Throw in']\n",
" }\n",
" \n",
" \n",
" # Filtering df_events on relevant pass events\n",
" ## 1) Applying filter\n",
" print ('Applying pass filter...')\n",
" df_passes = df_events.loc[df_events['subEventName'].isin(list(dic_passes.keys()))].copy()\n",
" ## 2) DQ step: getting rid of two passes that don't have and end co-ord\n",
" df_passes = df_passes.loc[pd.isna(df_passes['end_x']) == False].copy()\n",
" \n",
" \n",
" # Series of geometric transformations\n",
" print ('Applying geometric transformations...')\n",
" ## 1) splitting the pitch into thirds and capturing the transition between thirds\n",
" df_passes['startThird'] = df_passes.start_x.apply(lambda x: 1 if x < 34 else 2 if x < 67 else 3)\n",
" df_passes['endThird'] = df_passes.end_x.apply(lambda x: 1 if x < 34 else 2 if x < 67 else 3)\n",
" df_passes['thirdTransitionDelta'] = df_passes['endThird'] - df_passes['startThird']\n",
" \n",
" ## 2) transforming pitch dimensions from 100x100 grid to dimensions in meters\n",
" df_passes['startPassM_x'] = df_passes.start_x*pitchLength/100\n",
" df_passes['startPassM_y'] = df_passes.start_y*pitchWidth/100\n",
" df_passes['endPassM_x'] = df_passes.end_x*pitchLength/100\n",
" df_passes['endPassM_y'] = df_passes.end_y*pitchWidth/100\n",
"\n",
" ## 3) getting the squares of the x's\n",
" df_passes['startPassM_xSquared'] = df_passes['startPassM_x']**2\n",
" df_passes['endPassM_xSquared'] = df_passes['endPassM_x']**2\n",
"\n",
" ## 4) getting some central y stats and squared stats (same definitions as in David's code)\n",
" df_passes['start_c'] = abs(df_passes['start_y'] - 50)\n",
" df_passes['end_c'] = abs(df_passes['end_y'] - 50)\n",
" df_passes['startM_c'] = df_passes['start_c']*pitchWidth/100\n",
" df_passes['endM_c'] = df_passes['end_c']*pitchWidth/100\n",
" df_passes['start_cSquared'] = df_passes['start_c']**2\n",
" df_passes['end_cSquared'] = df_passes['end_c']**2\n",
" df_passes['startM_cSquared'] = df_passes['startM_c']**2\n",
" df_passes['endM_cSquared'] = df_passes['endM_c']**2\n",
"\n",
" ## 5) getting distance to ball\n",
" df_passes['vec_x'] = df_passes['endPassM_x'] - df_passes['startPassM_x']\n",
" df_passes['vec_y'] = df_passes['endPassM_y'] - df_passes['startPassM_y']\n",
" df_passes['D'] = np.sqrt(df_passes['vec_x']**2 + df_passes['vec_y']**2)\n",
" df_passes['Dsquared'] = df_passes.D**2\n",
" df_passes['Dcubed'] = df_passes.D**3\n",
"\n",
" ## 6) DQ step: getting rid of events where the vec_x = vec_y = 0 (look like data errors)\n",
" df_passes = df_passes.loc[~((df_passes['vec_x'] == 0) & (df_passes['vec_y'] == 0))].copy()\n",
"\n",
" ## 7) calculating passing angle in radians\n",
" df_passes['a'] = np.arctan(df_passes['vec_x'] / abs(df_passes['vec_y']))\n",
" #df_passes['aNew'] = np.arctan(df_passes['vec_x'] / (df_passes['endM_c'] - df_passes['startM_c']))\n",
" \n",
" ## 8) calculating shooting angle from initial position\n",
" df_passes['aShooting'] = np.arctan(7.32 * df_passes['startPassM_x'] / (df_passes['startPassM_x']**2 + df_passes['startM_c']**2 - (7.32/2)**2))\n",
" df_passes['aShooting'] = df_passes.aShooting.apply(lambda x: x+np.pi if x<0 else x)\n",
" \n",
" ## 9) calculating shooting angle from final position (i.e. )\n",
" df_passes['aShootingFinal'] = np.arctan(7.32 * df_passes['endPassM_x'] / (df_passes['endPassM_x']**2 + df_passes['endM_c']**2 - (7.32/2)**2))\n",
" df_passes['aShootingFinal'] = df_passes.aShootingFinal.apply(lambda x: x+np.pi if x<0 else x)\n",
" \n",
" ## 10) change in shooting angle caused by the pass\n",
" df_passes['aShootingChange'] = df_passes['aShootingFinal'] - df_passes['aShooting']\n",
" \n",
" ## 11) distance to goal\n",
" df_passes['DGoalStart'] = np.sqrt((pitchLength - df_passes['startPassM_x'])**2 + df_passes['startM_c']**2)\n",
" df_passes['DGoalEnd'] = np.sqrt((pitchLength - df_passes['endPassM_x'])**2 + df_passes['endM_c']**2)\n",
" df_passes['DGoalChange'] = df_passes['DGoalEnd'] - df_passes['DGoalStart']\n",
" \n",
" ## final) re-ordering cols\n",
" df_passes = df_passes.sort_values(['matchId','matchEventIndex'], ascending=[True,True])\n",
" \n",
" \n",
" \n",
" # Within each possession sequence, applies the pass index (so the first pass in a possession is 1, and the second is 2, etc.)\n",
" print ('Applying passIndexWithinSequence...')\n",
" ## 1) produces index\n",
" df_passes['passIndexWithinSequence'] = df_passes.sort_values(['matchId','possessionSequenceIndex','matchEventIndex'])\\\n",
" .groupby(['matchId','possessionSequenceIndex'])\\\n",
" .cumcount() + 1\n",
" ## 2) LOOKAHEAD BIAS: WILL NOT INCLUDE THIS IN FINAL MODEL\n",
" ## Calculating mean number of passes per possession per team\n",
" df_meanNumPasses = pd.DataFrame(df_passes.groupby(['teamId','possessionSequenceIndex'])\\\n",
" .agg({'passIndexWithinSequence':np.mean})\\\n",
" .groupby('teamId')\\\n",
" .passIndexWithinSequence.mean())\\\n",
" .reset_index()\\\n",
" .rename(columns={'passIndexWithinSequence':'meanNumPassesPerSequence'})\n",
" ## 3) Re-introducing this mean number of passes per possession via a join\n",
" df_passes = df_passes.merge(df_meanNumPasses, how='inner', on='teamId')\n",
" ## 4) getting the over under for the number of passes for that team\n",
" ## COULD POTENTIALLY USE THIS IF HAD MULTIPLE YEARS OF HISTORY, AS IT SHOWS A CHARACTERISTIC OF A TEAM\n",
" df_passes['numPassOverUnder'] = df_passes['passIndexWithinSequence'] - df_passes['meanNumPassesPerSequence']\n",
" \n",
" \n",
" \n",
" # Final set of flags (some are post-hoc so can't be used in the regression, but just adding for completeness)\n",
" print ('Applying final set of flags...')\n",
" ## 1) applying interception flag - this is of course highly correlated to an unsuccessful outcome, so won't be part of the regression\n",
" df_passes['interceptionFlag'] = df_passes.tags.apply(lambda x: 1 if 1401 in x else 0)\n",
" ## 2) applying dangerousBallLostFlag - this will also NOT be part of the regression\n",
" df_passes['dangerousBallLostFlag'] = df_passes.tags.apply(lambda x: 1 if 2001 in x else 0)\n",
" ## 3) counter attack flag\n",
" df_passes['counterAttackFlag'] = df_passes.tags.apply(lambda x: 1 if 1901 in x else 0)\n",
" ## 4) assist flag\n",
" df_passes['assistFlag'] = df_passes.tags.apply(lambda x: 1 if 301 in x else 0)\n",
" \n",
" \n",
" if outputToCsvFlag == 1:\n",
" print ('Outputting df_passes to CSV...')\n",
" df_passes.to_csv('df_passes.csv', index=None)\n",
" \n",
" print ('Outputting df_passes.')\n",
" return df_passes\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"# Model Application: Applying Four Models to Produce **xP** Variations to **Test** Data"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# applying basic, added, and advanced models to test data\n",
"def apply_xP_model_to_test(models):\n",
" \"\"\"\n",
" Applying the four different models to produce four xP values\n",
" \"\"\"\n",
" basic, added, adv_canonical, adv_probit = models\n",
" \n",
" print ('Applying models...')\n",
" df_passes_test['xP_basic'] = basic.predict(df_passes_test)\n",
" df_passes_test['xP_added'] = added.predict(df_passes_test)\n",
" df_passes_test['xP_logit'] = adv_canonical.predict(df_passes_test)\n",
" df_passes_test['xP'] = adv_probit.predict(df_passes_test)\n",
" print (f'Done applying {len(models)} models.')\n",
" \n",
" return df_passes_test"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"# Model Validation: Calibration Curves"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"def plot_calibration_curve(df_passes_test, show_advanced=1, save_output=0):\n",
"\n",
" fig = plt.figure(figsize=(10, 10))\n",
"\n",
" # Plotting perfect calibration (line y=x)\n",
" plt.plot([0, 1], [0, 1], 'k:', label='Perfectly Calibrated Model')\n",
"\n",
" alpha = 0.6\n",
" numBins = 25\n",
"\n",
" # FOUR calibration curves - Tricky to plot all four at a time, so just do a Simple Vs Advanced\n",
" if show_advanced == 0:\n",
" ## 1) Simple Model\n",
" fraction_of_positives, mean_predicted_value = calibration_curve(df_passes_test.successFlag, df_passes_test.xP_basic, n_bins=numBins)\n",
" plt.plot(mean_predicted_value, fraction_of_positives, \"s-\", label='Basic Model', alpha = alpha, color='red')\n",
"\n",
" ## 2) Added Model\n",
" fraction_of_positives, mean_predicted_value = calibration_curve(df_passes_test.successFlag, df_passes_test.xP_added, n_bins=numBins)\n",
" plt.plot(mean_predicted_value, fraction_of_positives, \"s-\", label='Added Features', alpha = alpha, color='blue')\n",
"\n",
" elif show_advanced == 1:\n",
" ## 3) Advanced Model: Canonical (Logit) Link function\n",
" fraction_of_positives, mean_predicted_value = calibration_curve(df_passes_test.successFlag, df_passes_test.xP_logit, n_bins=numBins)\n",
" plt.plot(mean_predicted_value, fraction_of_positives, \"s-\", label='Advanced Features: Logit Link', alpha = alpha, color='black')\n",
"\n",
" ## 4) Advanced Model: Probit Link function\n",
" fraction_of_positives, mean_predicted_value = calibration_curve(df_passes_test.successFlag, df_passes_test.xP, n_bins=numBins)\n",
" plt.plot(mean_predicted_value, fraction_of_positives, \"s-\", label='Advanced Features: Probit Link', alpha = alpha, color='orange')\n",
"\n",
" plt.ylabel('Fraction of Successful Passes', fontsize=18)\n",
" plt.xlabel('Mean xP', fontsize=18)\n",
"\n",
" plt.ylim([-0.05, 1.05])\n",
" plt.xlim([-0.05, 1.05])\n",
"\n",
" plt.legend(loc=\"lower right\", fontsize=18)\n",
" #plt.title('Calibration Plot', fontsize=24)\n",
"\n",
" plt.yticks(fontsize=14)\n",
" plt.xticks(fontsize=14)\n",
"\n",
" plt.tight_layout()\n",
" \n",
" if save_output == 1:\n",
" plt.savefig(f'calibration_{show_advanced}.pdf', dpi=300, format='pdf', bbox_inches='tight')\n",
" \n",
" return plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"# Model Validation: Metric Scores\n",
"\n",
"* Brier Score\n",
"* Precision, Recall, F1\n",
"* AUC\n",
"* Accuracy"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"def calculate_model_metrics(df_passes_test, xPtype='xP', log_reg_decision_threshold = 0.65):\n",
" '''\n",
" Applies Logistic Regression Decision Threshold (i.e. applying the model to attribute whether a pass would or would have not been successful)\n",
" And calculates a bunch of related metrics\n",
" '''\n",
" \n",
" df_passes_test['predictedSuccess'] = df_passes_test[xPtype].apply(lambda x: 1 if x > log_reg_decision_threshold else 0)\n",
"\n",
" brierScore = metrics.brier_score_loss(df_passes_test.successFlag, df_passes_test[xPtype])\n",
"\n",
" # precision = TRUE POSITIVE / (TRUE POSITIVE + FALSE POSITIVE)\n",
" # ratio of correctly positive observations / all predicted positive observations\n",
" precisionScore = metrics.precision_score(df_passes_test.successFlag, df_passes_test.predictedSuccess)\n",
"\n",
" # recall = TRUE POSITIVE / (TRUE POSITIVE + FALSE NEGATIVE)\n",
" # ratio of correctly positive observations / all true positive observations (that were either correctly picked TP or missed FN)\n",
" recallScore = metrics.recall_score(df_passes_test.successFlag, df_passes_test.predictedSuccess)\n",
"\n",
" # weighted average of precision and recall\n",
" f1Score = metrics.f1_score(df_passes_test.successFlag, df_passes_test.predictedSuccess)\n",
"\n",
" AUCScore = metrics.roc_auc_score(df_passes_test.successFlag, df_passes_test.predictedSuccess)\n",
"\n",
" # overall accuracy score: ratio of all correct over count of all observations\n",
" accuracyScore = metrics.accuracy_score(df_passes_test.successFlag, df_passes_test.predictedSuccess)\n",
"\n",
" return print (f'Brier Score: {brierScore}\\n\\nPrecision Score: {precisionScore}\\n\\nRecall Score: {recallScore}\\n\\nF1 Score: {f1Score}\\n\\nAUC Score: {AUCScore}\\n\\nAccuracyScore: {accuracyScore}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"**CODE STARTS HERE**\n",
"\n",
"---\n",
"\n",
"\n",
" \n",
"\n",
" \n",
"\n",
" \n",
"\n",
"# 1) Loading Data\n",
"\n",
"### Loading Players, Teams, Matches, Formations, Events"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Processing matches_World_Cup.json...\n",
"Processing matches_Italy.json...\n",
"Processing matches_Germany.json...\n",
"Processing matches_England.json...\n",
"Processing matches_France.json...\n",
"Processing matches_Spain.json...\n",
"Processing matches_European_Championship.json...\n",
"Processing events_France.json...\n",
"Processing events_Spain.json...\n",
"Processing events_Germany.json...\n",
"Processing events_European_Championship.json...\n",
"Processing events_World_Cup.json...\n",
"Processing events_Italy.json...\n",
"Processing events_England.json...\n",
"Done\n",
"CPU times: user 1min 30s, sys: 5.18 s, total: 1min 36s\n",
"Wall time: 1min 37s\n"
]
}
],
"source": [
"%%time\n",
"\n",
"df_players = get_players('players.json')\n",
"df_teams = get_teams('teams.json')\n",
"df_matches = get_matches('matches')\n",
"df_formations = get_formations(df_matches)\n",
"df_events = get_events('events', leagueSelectionFlag = 0, leagueSelection = 'England')\n",
"\n",
"print ('Done')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"# 2) Event Feature Engineering\n",
"\n",
"**Longest part of data preparation due to all of the nested feature extraction from the events data**:\n",
"\n",
"> Takes about 3 minutes if a single league is selected (`leagueSelectionFlag = 1` above).\n",
"\n",
"> Takes about 10 minutes if all leagues and international competitions are thrown into the mix."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Rejigging tags...\n",
"Applying homeFlag...\n",
"Applying successFlag...\n",
"Applying matchEventIndex...\n",
"Applying possessionTeamId...\n",
"Applying possessionSequenceIndex...\n",
"Applying gameState...\n",
"Applying numReds...\n",
"Applying weakFlag and strongFlag for footedness...\n",
"Unpacking positions...\n",
"Applying possessionStartSec...\n",
"Applying playerPossessionTimeSec...\n",
"Grabbing previous event...\n",
"Outputting df_events.\n",
"CPU times: user 9min 45s, sys: 44.4 s, total: 10min 29s\n",
"Wall time: 10min 43s\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" source | \n",
" matchId | \n",
" matchPeriod | \n",
" eventSec | \n",
" possessionTimeSec | \n",
" playerPossessionTimeSec | \n",
" matchEventIndex | \n",
" teamId | \n",
" homeTeamId | \n",
" homeScore | \n",
" awayTeamId | \n",
" awayScore | \n",
" homeFlag | \n",
" id | \n",
" eventName | \n",
" subEventName | \n",
" previousSubEventName | \n",
" possessionTeamId | \n",
" possessionSequenceIndex | \n",
" playerId | \n",
" shortName | \n",
" roleCode | \n",
" strongFlag | \n",
" weakFlag | \n",
" goalDelta | \n",
" numReds | \n",
" start_x | \n",
" start_y | \n",
" end_x | \n",
" end_y | \n",
" tags | \n",
" successFlag | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" European_Championship | \n",
" 1694390 | \n",
" 1H | \n",
" 1.255990 | \n",
" 0.000000 | \n",
" 0.0 | \n",
" 1 | \n",
" 4418 | \n",
" 4418 | \n",
" 2 | \n",
" 11944 | \n",
" 1 | \n",
" 1 | \n",
" 88178642 | \n",
" Pass | \n",
" Simple pass | \n",
" Match Start | \n",
" 4418 | \n",
" 1 | \n",
" 26010 | \n",
" O. Giroud | \n",
" FWD | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 50 | \n",
" 48 | \n",
" 47.0 | \n",
" 50.0 | \n",
" [1801] | \n",
" 1 | \n",
"
\n",
" \n",
" 1388 | \n",
" European_Championship | \n",
" 1694390 | \n",
" 1H | \n",
" 2.351908 | \n",
" 1.095918 | \n",
" 0.0 | \n",
" 2 | \n",
" 4418 | \n",
" 4418 | \n",
" 2 | \n",
" 11944 | \n",
" 1 | \n",
" 1 | \n",
" 88178643 | \n",
" Pass | \n",
" Simple pass | \n",
" Match Start | \n",
" 4418 | \n",
" 1 | \n",
" 3682 | \n",
" A. Griezmann | \n",
" FWD | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 47 | \n",
" 50 | \n",
" 41.0 | \n",
" 48.0 | \n",
" [1801] | \n",
" 1 | \n",
"
\n",
" \n",
" 3995 | \n",
" European_Championship | \n",
" 1694390 | \n",
" 1H | \n",
" 3.241028 | \n",
" 1.985038 | \n",
" 0.0 | \n",
" 3 | \n",
" 4418 | \n",
" 4418 | \n",
" 2 | \n",
" 11944 | \n",
" 1 | \n",
" 1 | \n",
" 88178644 | \n",
" Pass | \n",
" Simple pass | \n",
" Match Start | \n",
" 4418 | \n",
" 1 | \n",
" 31528 | \n",
" N. Kanté | \n",
" MID | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 41 | \n",
" 48 | \n",
" 32.0 | \n",
" 35.0 | \n",
" [1801] | \n",
" 1 | \n",
"
\n",
" \n",
" 7938 | \n",
" European_Championship | \n",
" 1694390 | \n",
" 1H | \n",
" 6.033681 | \n",
" 4.777691 | \n",
" 0.0 | \n",
" 4 | \n",
" 4418 | \n",
" 4418 | \n",
" 2 | \n",
" 11944 | \n",
" 1 | \n",
" 1 | \n",
" 88178645 | \n",
" Pass | \n",
" High pass | \n",
" Match Start | \n",
" 4418 | \n",
" 1 | \n",
" 7855 | \n",
" L. Koscielny | \n",
" DEF | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 32 | \n",
" 35 | \n",
" 89.0 | \n",
" 6.0 | \n",
" [1802] | \n",
" 0 | \n",
"
\n",
" \n",
" 10780 | \n",
" European_Championship | \n",
" 1694390 | \n",
" 1H | \n",
" 13.143591 | \n",
" 11.887601 | \n",
" 0.0 | \n",
" 5 | \n",
" 4418 | \n",
" 4418 | \n",
" 2 | \n",
" 11944 | \n",
" 1 | \n",
" 1 | \n",
" 88178646 | \n",
" Duel | \n",
" Ground defending duel | \n",
" Match Start | \n",
" 4418 | \n",
" 1 | \n",
" 25437 | \n",
" B. Matuidi | \n",
" MID | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 89 | \n",
" 6 | \n",
" 85.0 | \n",
" 0.0 | \n",
" [702, 1801] | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" source matchId matchPeriod eventSec \\\n",
"0 European_Championship 1694390 1H 1.255990 \n",
"1388 European_Championship 1694390 1H 2.351908 \n",
"3995 European_Championship 1694390 1H 3.241028 \n",
"7938 European_Championship 1694390 1H 6.033681 \n",
"10780 European_Championship 1694390 1H 13.143591 \n",
"\n",
" possessionTimeSec playerPossessionTimeSec matchEventIndex teamId \\\n",
"0 0.000000 0.0 1 4418 \n",
"1388 1.095918 0.0 2 4418 \n",
"3995 1.985038 0.0 3 4418 \n",
"7938 4.777691 0.0 4 4418 \n",
"10780 11.887601 0.0 5 4418 \n",
"\n",
" homeTeamId homeScore awayTeamId awayScore homeFlag id \\\n",
"0 4418 2 11944 1 1 88178642 \n",
"1388 4418 2 11944 1 1 88178643 \n",
"3995 4418 2 11944 1 1 88178644 \n",
"7938 4418 2 11944 1 1 88178645 \n",
"10780 4418 2 11944 1 1 88178646 \n",
"\n",
" eventName subEventName previousSubEventName possessionTeamId \\\n",
"0 Pass Simple pass Match Start 4418 \n",
"1388 Pass Simple pass Match Start 4418 \n",
"3995 Pass Simple pass Match Start 4418 \n",
"7938 Pass High pass Match Start 4418 \n",
"10780 Duel Ground defending duel Match Start 4418 \n",
"\n",
" possessionSequenceIndex playerId shortName roleCode strongFlag \\\n",
"0 1 26010 O. Giroud FWD 0 \n",
"1388 1 3682 A. Griezmann FWD 0 \n",
"3995 1 31528 N. Kanté MID 0 \n",
"7938 1 7855 L. Koscielny DEF 0 \n",
"10780 1 25437 B. Matuidi MID 0 \n",
"\n",
" weakFlag goalDelta numReds start_x start_y end_x end_y \\\n",
"0 0 0 0 50 48 47.0 50.0 \n",
"1388 0 0 0 47 50 41.0 48.0 \n",
"3995 0 0 0 41 48 32.0 35.0 \n",
"7938 0 0 0 32 35 89.0 6.0 \n",
"10780 0 0 0 89 6 85.0 0.0 \n",
"\n",
" tags successFlag \n",
"0 [1801] 1 \n",
"1388 [1801] 1 \n",
"3995 [1801] 1 \n",
"7938 [1802] 0 \n",
"10780 [702, 1801] 1 "
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"\n",
"df_events = event_feature_engineering(df_events)\n",
"df_events.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### For some bizarre reason, this code doesn't work if contained within the event feature engineering function, so adding it on here.\n",
"\n",
"(Doesn't effect modelling, only plotting.)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Applying recipient of an event...\n"
]
}
],
"source": [
"# Getting the recipient player of an action (need to do this pre-pass filter as the next action may well not be a pass, and it'd be \n",
"## highly suboptimal to clip dangerous passes that resulted in shots and goals)\n",
"print ('Applying recipient of an event...')\n",
"possessionEventNames = ['Pass','Others on the ball','Shot']\n",
"\n",
"df_events['passRecipientPlayerIdNext1'] = None\n",
"df_events['passRecipientPlayerIdNext2'] = None\n",
"df_events['passRecipientPlayerIdNext3'] = None\n",
"df_events['passRecipientPlayerIdNext4'] = None\n",
"\n",
"df_events['passRecipientPlayerIdNext1'][((df_events['matchId'] == df_events['matchId'].shift(-1)) &\\\n",
" (df_events['matchEventIndex'] == (df_events['matchEventIndex'].shift(-1) - 1)) &\\\n",
" (df_events['possessionSequenceIndex'] == df_events['possessionSequenceIndex'].shift(-1)) &\\\n",
" (df_events['eventName'].shift(-1).isin(possessionEventNames)) &\\\n",
" (df_events['end_x'] == df_events['start_x'].shift(-1)) &\\\n",
" (df_events['end_y'] == df_events['start_y'].shift(-1)) &\\\n",
" (df_events['successFlag'] == 1))]\\\n",
" = df_events['playerId'].shift(-1)\n",
"\n",
"df_events['passRecipientPlayerIdNext2'][((df_events['matchId'] == df_events['matchId'].shift(-2)) &\\\n",
" (df_events['matchEventIndex'] == (df_events['matchEventIndex'].shift(-2) - 2)) &\\\n",
" (df_events['possessionSequenceIndex'] == df_events['possessionSequenceIndex'].shift(-2)) &\\\n",
" (df_events['eventName'].shift(-2).isin(possessionEventNames)) &\\\n",
" (df_events['end_x'] == df_events['start_x'].shift(-2)) &\\\n",
" (df_events['end_y'] == df_events['start_y'].shift(-2)) &\\\n",
" (df_events['successFlag'] == 1))]\\\n",
" = df_events['playerId'].shift(-2)\n",
"\n",
"df_events['passRecipientPlayerIdNext3'][((df_events['matchId'] == df_events['matchId'].shift(-3)) &\\\n",
" (df_events['matchEventIndex'] == (df_events['matchEventIndex'].shift(-3) - 3)) &\\\n",
" (df_events['possessionSequenceIndex'] == df_events['possessionSequenceIndex'].shift(-3)) &\\\n",
" (df_events['eventName'].shift(-3).isin(possessionEventNames)) &\\\n",
" (df_events['end_x'] == df_events['start_x'].shift(-3)) &\\\n",
" (df_events['end_y'] == df_events['start_y'].shift(-3)) &\\\n",
" (df_events['successFlag'] == 1))]\\\n",
" = df_events['playerId'].shift(-3)\n",
"\n",
"df_events['passRecipientPlayerIdNext4'][((df_events['matchId'] == df_events['matchId'].shift(-4)) &\\\n",
" (df_events['matchEventIndex'] == (df_events['matchEventIndex'].shift(-4) - 4)) &\\\n",
" (df_events['possessionSequenceIndex'] == df_events['possessionSequenceIndex'].shift(-4)) &\\\n",
" (df_events['eventName'].shift(-4).isin(possessionEventNames)) &\\\n",
" (df_events['end_x'] == df_events['start_x'].shift(-4)) &\\\n",
" (df_events['end_y'] == df_events['start_y'].shift(-4)) &\\\n",
" (df_events['successFlag'] == 1))]\\\n",
" = df_events['playerId'].shift(-4)\n",
"\n",
"\n",
"df_events['passRecipientPlayerId'] = df_events.apply(lambda x: int(x.passRecipientPlayerIdNext1) if x.passRecipientPlayerIdNext1 != None else\\\n",
" int(x.passRecipientPlayerIdNext2) if x.passRecipientPlayerIdNext2 != None else\\\n",
" int(x.passRecipientPlayerIdNext3) if x.passRecipientPlayerIdNext3 != None else\\\n",
" int(x.passRecipientPlayerIdNext4) if x.passRecipientPlayerIdNext4 != None else None, axis=1) \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"# 3) Pass Specific Feature Engineering\n",
"\n",
"**Highly vectorised, so only takes a minute with all leagues loaded in**\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Applying pass filter...\n",
"Applying geometric transformations...\n",
"Applying passIndexWithinSequence...\n",
"Applying final set of flags...\n",
"Outputting df_passes.\n",
"CPU times: user 23.1 s, sys: 7.62 s, total: 30.7 s\n",
"Wall time: 31.5 s\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" source | \n",
" matchId | \n",
" matchPeriod | \n",
" eventSec | \n",
" possessionTimeSec | \n",
" playerPossessionTimeSec | \n",
" matchEventIndex | \n",
" teamId | \n",
" homeTeamId | \n",
" homeScore | \n",
" awayTeamId | \n",
" awayScore | \n",
" homeFlag | \n",
" id | \n",
" eventName | \n",
" subEventName | \n",
" previousSubEventName | \n",
" possessionTeamId | \n",
" possessionSequenceIndex | \n",
" playerId | \n",
" shortName | \n",
" roleCode | \n",
" strongFlag | \n",
" weakFlag | \n",
" goalDelta | \n",
" numReds | \n",
" start_x | \n",
" start_y | \n",
" end_x | \n",
" end_y | \n",
" tags | \n",
" successFlag | \n",
" passRecipientPlayerIdNext1 | \n",
" passRecipientPlayerIdNext2 | \n",
" passRecipientPlayerIdNext3 | \n",
" passRecipientPlayerIdNext4 | \n",
" passRecipientPlayerId | \n",
" startThird | \n",
" endThird | \n",
" thirdTransitionDelta | \n",
" startPassM_x | \n",
" startPassM_y | \n",
" endPassM_x | \n",
" endPassM_y | \n",
" startPassM_xSquared | \n",
" endPassM_xSquared | \n",
" start_c | \n",
" end_c | \n",
" startM_c | \n",
" endM_c | \n",
" start_cSquared | \n",
" end_cSquared | \n",
" startM_cSquared | \n",
" endM_cSquared | \n",
" vec_x | \n",
" vec_y | \n",
" D | \n",
" Dsquared | \n",
" Dcubed | \n",
" a | \n",
" aShooting | \n",
" aShootingFinal | \n",
" aShootingChange | \n",
" DGoalStart | \n",
" DGoalEnd | \n",
" DGoalChange | \n",
" passIndexWithinSequence | \n",
" meanNumPassesPerSequence | \n",
" numPassOverUnder | \n",
" interceptionFlag | \n",
" dangerousBallLostFlag | \n",
" counterAttackFlag | \n",
" assistFlag | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" European_Championship | \n",
" 1694390 | \n",
" 1H | \n",
" 1.255990 | \n",
" 0.000000 | \n",
" 0.0 | \n",
" 1 | \n",
" 4418 | \n",
" 4418 | \n",
" 2 | \n",
" 11944 | \n",
" 1 | \n",
" 1 | \n",
" 88178642 | \n",
" Pass | \n",
" Simple pass | \n",
" Match Start | \n",
" 4418 | \n",
" 1 | \n",
" 26010 | \n",
" O. Giroud | \n",
" FWD | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 50 | \n",
" 48 | \n",
" 47.0 | \n",
" 50.0 | \n",
" [1801] | \n",
" 1 | \n",
" 3682 | \n",
" None | \n",
" None | \n",
" None | \n",
" 3682.0 | \n",
" 2 | \n",
" 2 | \n",
" 0 | \n",
" 52.50 | \n",
" 32.64 | \n",
" 49.35 | \n",
" 34.00 | \n",
" 2756.2500 | \n",
" 2435.4225 | \n",
" 2 | \n",
" 0.0 | \n",
" 1.36 | \n",
" 0.00 | \n",
" 4 | \n",
" 0.0 | \n",
" 1.8496 | \n",
" 0.0000 | \n",
" -3.15 | \n",
" 1.36 | \n",
" 3.431049 | \n",
" 11.7721 | \n",
" 40.390657 | \n",
" -1.163226 | \n",
" 0.139111 | \n",
" 0.148057 | \n",
" 0.008946 | \n",
" 52.517612 | \n",
" 55.650000 | \n",
" 3.132388 | \n",
" 1 | \n",
" 2.699072 | \n",
" -1.699072 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" European_Championship | \n",
" 1694390 | \n",
" 1H | \n",
" 2.351908 | \n",
" 1.095918 | \n",
" 0.0 | \n",
" 2 | \n",
" 4418 | \n",
" 4418 | \n",
" 2 | \n",
" 11944 | \n",
" 1 | \n",
" 1 | \n",
" 88178643 | \n",
" Pass | \n",
" Simple pass | \n",
" Match Start | \n",
" 4418 | \n",
" 1 | \n",
" 3682 | \n",
" A. Griezmann | \n",
" FWD | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 47 | \n",
" 50 | \n",
" 41.0 | \n",
" 48.0 | \n",
" [1801] | \n",
" 1 | \n",
" 31528 | \n",
" None | \n",
" None | \n",
" None | \n",
" 31528.0 | \n",
" 2 | \n",
" 2 | \n",
" 0 | \n",
" 49.35 | \n",
" 34.00 | \n",
" 43.05 | \n",
" 32.64 | \n",
" 2435.4225 | \n",
" 1853.3025 | \n",
" 0 | \n",
" 2.0 | \n",
" 0.00 | \n",
" 1.36 | \n",
" 0 | \n",
" 4.0 | \n",
" 0.0000 | \n",
" 1.8496 | \n",
" -6.30 | \n",
" -1.36 | \n",
" 6.445122 | \n",
" 41.5396 | \n",
" 267.727798 | \n",
" -1.358186 | \n",
" 0.148057 | \n",
" 0.169460 | \n",
" 0.021403 | \n",
" 55.650000 | \n",
" 61.964926 | \n",
" 6.314926 | \n",
" 2 | \n",
" 2.699072 | \n",
" -0.699072 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 2 | \n",
" European_Championship | \n",
" 1694390 | \n",
" 1H | \n",
" 3.241028 | \n",
" 1.985038 | \n",
" 0.0 | \n",
" 3 | \n",
" 4418 | \n",
" 4418 | \n",
" 2 | \n",
" 11944 | \n",
" 1 | \n",
" 1 | \n",
" 88178644 | \n",
" Pass | \n",
" Simple pass | \n",
" Match Start | \n",
" 4418 | \n",
" 1 | \n",
" 31528 | \n",
" N. Kanté | \n",
" MID | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 41 | \n",
" 48 | \n",
" 32.0 | \n",
" 35.0 | \n",
" [1801] | \n",
" 1 | \n",
" 7855 | \n",
" None | \n",
" None | \n",
" None | \n",
" 7855.0 | \n",
" 2 | \n",
" 1 | \n",
" -1 | \n",
" 43.05 | \n",
" 32.64 | \n",
" 33.60 | \n",
" 23.80 | \n",
" 1853.3025 | \n",
" 1128.9600 | \n",
" 2 | \n",
" 15.0 | \n",
" 1.36 | \n",
" 10.20 | \n",
" 4 | \n",
" 225.0 | \n",
" 1.8496 | \n",
" 104.0400 | \n",
" -9.45 | \n",
" -8.84 | \n",
" 12.940174 | \n",
" 167.4481 | \n",
" 2166.807530 | \n",
" -0.818737 | \n",
" 0.169460 | \n",
" 0.198996 | \n",
" 0.029537 | \n",
" 61.964926 | \n",
" 72.124892 | \n",
" 10.159965 | \n",
" 3 | \n",
" 2.699072 | \n",
" 0.300928 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 3 | \n",
" European_Championship | \n",
" 1694390 | \n",
" 1H | \n",
" 6.033681 | \n",
" 4.777691 | \n",
" 0.0 | \n",
" 4 | \n",
" 4418 | \n",
" 4418 | \n",
" 2 | \n",
" 11944 | \n",
" 1 | \n",
" 1 | \n",
" 88178645 | \n",
" Pass | \n",
" High pass | \n",
" Match Start | \n",
" 4418 | \n",
" 1 | \n",
" 7855 | \n",
" L. Koscielny | \n",
" DEF | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 32 | \n",
" 35 | \n",
" 89.0 | \n",
" 6.0 | \n",
" [1802] | \n",
" 0 | \n",
" None | \n",
" None | \n",
" None | \n",
" None | \n",
" NaN | \n",
" 1 | \n",
" 3 | \n",
" 2 | \n",
" 33.60 | \n",
" 23.80 | \n",
" 93.45 | \n",
" 4.08 | \n",
" 1128.9600 | \n",
" 8732.9025 | \n",
" 15 | \n",
" 44.0 | \n",
" 10.20 | \n",
" 29.92 | \n",
" 225 | \n",
" 1936.0 | \n",
" 104.0400 | \n",
" 895.2064 | \n",
" 59.85 | \n",
" -19.72 | \n",
" 63.015085 | \n",
" 3970.9009 | \n",
" 250226.656557 | \n",
" 1.252508 | \n",
" 0.198996 | \n",
" 0.071027 | \n",
" -0.127969 | \n",
" 72.124892 | \n",
" 32.071933 | \n",
" -40.052958 | \n",
" 4 | \n",
" 2.699072 | \n",
" 1.300928 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 4 | \n",
" European_Championship | \n",
" 1694390 | \n",
" 1H | \n",
" 27.053006 | \n",
" 0.000000 | \n",
" 0.0 | \n",
" 7 | \n",
" 4418 | \n",
" 4418 | \n",
" 2 | \n",
" 11944 | \n",
" 1 | \n",
" 1 | \n",
" 88178648 | \n",
" Free Kick | \n",
" Throw in | \n",
" Match Start | \n",
" 4418 | \n",
" 3 | \n",
" 7915 | \n",
" P. Evra | \n",
" DEF | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 85 | \n",
" 0 | \n",
" 93.0 | \n",
" 16.0 | \n",
" [1802] | \n",
" 0 | \n",
" None | \n",
" None | \n",
" None | \n",
" None | \n",
" NaN | \n",
" 3 | \n",
" 3 | \n",
" 0 | \n",
" 89.25 | \n",
" 0.00 | \n",
" 97.65 | \n",
" 10.88 | \n",
" 7965.5625 | \n",
" 9535.5225 | \n",
" 50 | \n",
" 34.0 | \n",
" 34.00 | \n",
" 23.12 | \n",
" 2500 | \n",
" 1156.0 | \n",
" 1156.0000 | \n",
" 534.5344 | \n",
" 8.40 | \n",
" 10.88 | \n",
" 13.745341 | \n",
" 188.9344 | \n",
" 2596.967760 | \n",
" 0.657470 | \n",
" 0.071605 | \n",
" 0.070958 | \n",
" -0.000648 | \n",
" 37.470822 | \n",
" 24.260192 | \n",
" -13.210630 | \n",
" 1 | \n",
" 2.699072 | \n",
" -1.699072 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" source matchId matchPeriod eventSec possessionTimeSec \\\n",
"0 European_Championship 1694390 1H 1.255990 0.000000 \n",
"1 European_Championship 1694390 1H 2.351908 1.095918 \n",
"2 European_Championship 1694390 1H 3.241028 1.985038 \n",
"3 European_Championship 1694390 1H 6.033681 4.777691 \n",
"4 European_Championship 1694390 1H 27.053006 0.000000 \n",
"\n",
" playerPossessionTimeSec matchEventIndex teamId homeTeamId homeScore \\\n",
"0 0.0 1 4418 4418 2 \n",
"1 0.0 2 4418 4418 2 \n",
"2 0.0 3 4418 4418 2 \n",
"3 0.0 4 4418 4418 2 \n",
"4 0.0 7 4418 4418 2 \n",
"\n",
" awayTeamId awayScore homeFlag id eventName subEventName \\\n",
"0 11944 1 1 88178642 Pass Simple pass \n",
"1 11944 1 1 88178643 Pass Simple pass \n",
"2 11944 1 1 88178644 Pass Simple pass \n",
"3 11944 1 1 88178645 Pass High pass \n",
"4 11944 1 1 88178648 Free Kick Throw in \n",
"\n",
" previousSubEventName possessionTeamId possessionSequenceIndex playerId \\\n",
"0 Match Start 4418 1 26010 \n",
"1 Match Start 4418 1 3682 \n",
"2 Match Start 4418 1 31528 \n",
"3 Match Start 4418 1 7855 \n",
"4 Match Start 4418 3 7915 \n",
"\n",
" shortName roleCode strongFlag weakFlag goalDelta numReds start_x \\\n",
"0 O. Giroud FWD 0 0 0 0 50 \n",
"1 A. Griezmann FWD 0 0 0 0 47 \n",
"2 N. Kanté MID 0 0 0 0 41 \n",
"3 L. Koscielny DEF 0 0 0 0 32 \n",
"4 P. Evra DEF 0 0 0 0 85 \n",
"\n",
" start_y end_x end_y tags successFlag passRecipientPlayerIdNext1 \\\n",
"0 48 47.0 50.0 [1801] 1 3682 \n",
"1 50 41.0 48.0 [1801] 1 31528 \n",
"2 48 32.0 35.0 [1801] 1 7855 \n",
"3 35 89.0 6.0 [1802] 0 None \n",
"4 0 93.0 16.0 [1802] 0 None \n",
"\n",
" passRecipientPlayerIdNext2 passRecipientPlayerIdNext3 \\\n",
"0 None None \n",
"1 None None \n",
"2 None None \n",
"3 None None \n",
"4 None None \n",
"\n",
" passRecipientPlayerIdNext4 passRecipientPlayerId startThird endThird \\\n",
"0 None 3682.0 2 2 \n",
"1 None 31528.0 2 2 \n",
"2 None 7855.0 2 1 \n",
"3 None NaN 1 3 \n",
"4 None NaN 3 3 \n",
"\n",
" thirdTransitionDelta startPassM_x startPassM_y endPassM_x endPassM_y \\\n",
"0 0 52.50 32.64 49.35 34.00 \n",
"1 0 49.35 34.00 43.05 32.64 \n",
"2 -1 43.05 32.64 33.60 23.80 \n",
"3 2 33.60 23.80 93.45 4.08 \n",
"4 0 89.25 0.00 97.65 10.88 \n",
"\n",
" startPassM_xSquared endPassM_xSquared start_c end_c startM_c endM_c \\\n",
"0 2756.2500 2435.4225 2 0.0 1.36 0.00 \n",
"1 2435.4225 1853.3025 0 2.0 0.00 1.36 \n",
"2 1853.3025 1128.9600 2 15.0 1.36 10.20 \n",
"3 1128.9600 8732.9025 15 44.0 10.20 29.92 \n",
"4 7965.5625 9535.5225 50 34.0 34.00 23.12 \n",
"\n",
" start_cSquared end_cSquared startM_cSquared endM_cSquared vec_x vec_y \\\n",
"0 4 0.0 1.8496 0.0000 -3.15 1.36 \n",
"1 0 4.0 0.0000 1.8496 -6.30 -1.36 \n",
"2 4 225.0 1.8496 104.0400 -9.45 -8.84 \n",
"3 225 1936.0 104.0400 895.2064 59.85 -19.72 \n",
"4 2500 1156.0 1156.0000 534.5344 8.40 10.88 \n",
"\n",
" D Dsquared Dcubed a aShooting aShootingFinal \\\n",
"0 3.431049 11.7721 40.390657 -1.163226 0.139111 0.148057 \n",
"1 6.445122 41.5396 267.727798 -1.358186 0.148057 0.169460 \n",
"2 12.940174 167.4481 2166.807530 -0.818737 0.169460 0.198996 \n",
"3 63.015085 3970.9009 250226.656557 1.252508 0.198996 0.071027 \n",
"4 13.745341 188.9344 2596.967760 0.657470 0.071605 0.070958 \n",
"\n",
" aShootingChange DGoalStart DGoalEnd DGoalChange \\\n",
"0 0.008946 52.517612 55.650000 3.132388 \n",
"1 0.021403 55.650000 61.964926 6.314926 \n",
"2 0.029537 61.964926 72.124892 10.159965 \n",
"3 -0.127969 72.124892 32.071933 -40.052958 \n",
"4 -0.000648 37.470822 24.260192 -13.210630 \n",
"\n",
" passIndexWithinSequence meanNumPassesPerSequence numPassOverUnder \\\n",
"0 1 2.699072 -1.699072 \n",
"1 2 2.699072 -0.699072 \n",
"2 3 2.699072 0.300928 \n",
"3 4 2.699072 1.300928 \n",
"4 1 2.699072 -1.699072 \n",
"\n",
" interceptionFlag dangerousBallLostFlag counterAttackFlag assistFlag \n",
"0 0 0 0 0 \n",
"1 0 0 0 0 \n",
"2 0 0 0 0 \n",
"3 0 0 0 0 \n",
"4 0 0 0 0 "
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"\n",
"df_passes = pass_feature_engineering(df_events, outputToCsvFlag=0)\n",
"df_passes.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"# 4) Model Fitting\n",
"\n",
"### Splitting `df_passes` into training and test dataset, stratifying the dependent variable"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Stratified Pass Success Rates:\n",
"\n",
"Overall: 83.0%\n",
"Train: 83.0%\n",
"Test: 83.0%\n",
"\n"
]
}
],
"source": [
"# splitting into a dataframe for training and dataframe for testing\n",
"## stratifying the successFlag\n",
"df_passes_train, df_passes_test = train_test_split(df_passes, test_size=0.3, stratify=df_passes.successFlag, random_state=1, shuffle=True)\n",
"\n",
"print (f'Stratified Pass Success Rates:\\n\\nOverall: {100*np.round(df_passes.successFlag.mean(),3)}%\\nTrain: {100*np.round(df_passes_train.successFlag.mean(), 3)}%\\nTest: {100*np.round(df_passes_test.successFlag.mean(), 3)}%\\n')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Fitting basic model to **training** data:\n",
"* Starting X\n",
"* Starting Y"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 15.3 s, sys: 2.61 s, total: 17.9 s\n",
"Wall time: 4.35 s\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" Model: | GLM | AIC: | 1140927.9736 | \n",
"
\n",
"\n",
" Link Function: | logit | BIC: | -16674264.5204 | \n",
"
\n",
"\n",
" Dependent Variable: | successFlag | Log-Likelihood: | -5.7046e+05 | \n",
"
\n",
"\n",
" Date: | 2020-09-20 22:00 | LL-Null: | -5.7736e+05 | \n",
"
\n",
"\n",
" No. Observations: | 1267740 | Deviance: | 1.1409e+06 | \n",
"
\n",
"\n",
" Df Model: | 2 | Pearson chi2: | 1.28e+06 | \n",
"
\n",
"\n",
" Df Residuals: | 1267737 | Scale: | 1.0000 | \n",
"
\n",
"\n",
" Method: | IRLS | | | \n",
"
\n",
"
\n",
"\n",
"\n",
" | Coef. | Std.Err. | z | P>|z| | [0.025 | 0.975] | \n",
"
\n",
"\n",
" Intercept | 2.3204 | 0.0069 | 335.5973 | 0.0000 | 2.3069 | 2.3340 | \n",
"
\n",
"\n",
" startPassM_x | -0.0090 | 0.0001 | -85.7712 | 0.0000 | -0.0092 | -0.0088 | \n",
"
\n",
"\n",
" startM_c | -0.0136 | 0.0003 | -54.0379 | 0.0000 | -0.0141 | -0.0131 | \n",
"
\n",
"
"
],
"text/plain": [
"\n",
"\"\"\"\n",
" Results: Generalized linear model\n",
"===================================================================\n",
"Model: GLM AIC: 1140927.9736 \n",
"Link Function: logit BIC: -16674264.5204\n",
"Dependent Variable: successFlag Log-Likelihood: -5.7046e+05 \n",
"Date: 2020-09-20 22:00 LL-Null: -5.7736e+05 \n",
"No. Observations: 1267740 Deviance: 1.1409e+06 \n",
"Df Model: 2 Pearson chi2: 1.28e+06 \n",
"Df Residuals: 1267737 Scale: 1.0000 \n",
"Method: IRLS \n",
"--------------------------------------------------------------------\n",
" Coef. Std.Err. z P>|z| [0.025 0.975]\n",
"--------------------------------------------------------------------\n",
"Intercept 2.3204 0.0069 335.5973 0.0000 2.3069 2.3340\n",
"startPassM_x -0.0090 0.0001 -85.7712 0.0000 -0.0092 -0.0088\n",
"startM_c -0.0136 0.0003 -54.0379 0.0000 -0.0141 -0.0131\n",
"===================================================================\n",
"\n",
"\"\"\""
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"\n",
"pass_model_basic = smf.glm(formula=\"successFlag ~ startPassM_x + startM_c\", data=df_passes_train\\\n",
" ,family=sm.families.Binomial()).fit()\n",
"\n",
"pass_model_basic.summary2()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Fitting addititional features:\n",
"* Starting X\n",
"* Starting Y\n",
"* X\\*Y (Interaction Term)\n",
"* End X\n",
"* End Y\n",
"* Shooting Angle (Initial)\n",
"* Sub Event Type"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 45.3 s, sys: 6.05 s, total: 51.4 s\n",
"Wall time: 18.1 s\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" Model: | GLM | AIC: | 926516.8995 | \n",
"
\n",
"\n",
" Link Function: | logit | BIC: | -16888482.7506 | \n",
"
\n",
"\n",
" Dependent Variable: | successFlag | Log-Likelihood: | -4.6324e+05 | \n",
"
\n",
"\n",
" Date: | 2020-09-20 22:00 | LL-Null: | -5.7736e+05 | \n",
"
\n",
"\n",
" No. Observations: | 1267740 | Deviance: | 9.2648e+05 | \n",
"
\n",
"\n",
" Df Model: | 18 | Pearson chi2: | 1.22e+06 | \n",
"
\n",
"\n",
" Df Residuals: | 1267721 | Scale: | 1.0000 | \n",
"
\n",
"\n",
" Method: | IRLS | | | \n",
"
\n",
"
\n",
"\n",
"\n",
" | Coef. | Std.Err. | z | P>|z| | [0.025 | 0.975] | \n",
"
\n",
"\n",
" Intercept | 2.2667 | 0.0328 | 69.0961 | 0.0000 | 2.2024 | 2.3310 | \n",
"
\n",
"\n",
" C(subEventName)[T.Cross] | -1.5938 | 0.0245 | -65.0123 | 0.0000 | -1.6418 | -1.5457 | \n",
"
\n",
"\n",
" C(subEventName)[T.Free Kick] | 1.0961 | 0.0336 | 32.5966 | 0.0000 | 1.0302 | 1.1620 | \n",
"
\n",
"\n",
" C(subEventName)[T.Free kick cross] | -0.9004 | 0.0358 | -25.1346 | 0.0000 | -0.9706 | -0.8302 | \n",
"
\n",
"\n",
" C(subEventName)[T.Hand pass] | 1.9723 | 0.0643 | 30.6929 | 0.0000 | 1.8464 | 2.0982 | \n",
"
\n",
"\n",
" C(subEventName)[T.Head pass] | -0.6328 | 0.0279 | -22.6792 | 0.0000 | -0.6875 | -0.5781 | \n",
"
\n",
"\n",
" C(subEventName)[T.High pass] | -0.5167 | 0.0280 | -18.4845 | 0.0000 | -0.5715 | -0.4619 | \n",
"
\n",
"\n",
" C(subEventName)[T.Launch] | -0.7976 | 0.0292 | -27.2993 | 0.0000 | -0.8548 | -0.7403 | \n",
"
\n",
"\n",
" C(subEventName)[T.Simple pass] | 1.2257 | 0.0266 | 46.0856 | 0.0000 | 1.1736 | 1.2779 | \n",
"
\n",
"\n",
" C(subEventName)[T.Smart pass] | -1.1578 | 0.0296 | -39.0535 | 0.0000 | -1.2159 | -1.0997 | \n",
"
\n",
"\n",
" C(subEventName)[T.Throw in] | 1.6786 | 0.0284 | 59.1520 | 0.0000 | 1.6230 | 1.7342 | \n",
"
\n",
"\n",
" startPassM_x | 0.0190 | 0.0007 | 26.8825 | 0.0000 | 0.0176 | 0.0203 | \n",
"
\n",
"\n",
" startM_c | -0.0253 | 0.0015 | -16.8990 | 0.0000 | -0.0282 | -0.0223 | \n",
"
\n",
"\n",
" startPassM_x:startM_c | 0.0009 | 0.0000 | 56.2755 | 0.0000 | 0.0008 | 0.0009 | \n",
"
\n",
"\n",
" endPassM_x | -0.0162 | 0.0002 | -97.0289 | 0.0000 | -0.0165 | -0.0158 | \n",
"
\n",
"\n",
" endM_c | -0.0159 | 0.0003 | -54.5851 | 0.0000 | -0.0165 | -0.0153 | \n",
"
\n",
"\n",
" aShooting | -0.0319 | 0.0453 | -0.7047 | 0.4810 | -0.1207 | 0.0569 | \n",
"
\n",
"\n",
" startPassM_xSquared | -0.0003 | 0.0000 | -51.8340 | 0.0000 | -0.0003 | -0.0003 | \n",
"
\n",
"\n",
" startM_cSquared | -0.0011 | 0.0000 | -30.3210 | 0.0000 | -0.0011 | -0.0010 | \n",
"
\n",
"
"
],
"text/plain": [
"\n",
"\"\"\"\n",
" Results: Generalized linear model\n",
"===================================================================================\n",
"Model: GLM AIC: 926516.8995 \n",
"Link Function: logit BIC: -16888482.7506\n",
"Dependent Variable: successFlag Log-Likelihood: -4.6324e+05 \n",
"Date: 2020-09-20 22:00 LL-Null: -5.7736e+05 \n",
"No. Observations: 1267740 Deviance: 9.2648e+05 \n",
"Df Model: 18 Pearson chi2: 1.22e+06 \n",
"Df Residuals: 1267721 Scale: 1.0000 \n",
"Method: IRLS \n",
"-----------------------------------------------------------------------------------\n",
" Coef. Std.Err. z P>|z| [0.025 0.975]\n",
"-----------------------------------------------------------------------------------\n",
"Intercept 2.2667 0.0328 69.0961 0.0000 2.2024 2.3310\n",
"C(subEventName)[T.Cross] -1.5938 0.0245 -65.0123 0.0000 -1.6418 -1.5457\n",
"C(subEventName)[T.Free Kick] 1.0961 0.0336 32.5966 0.0000 1.0302 1.1620\n",
"C(subEventName)[T.Free kick cross] -0.9004 0.0358 -25.1346 0.0000 -0.9706 -0.8302\n",
"C(subEventName)[T.Hand pass] 1.9723 0.0643 30.6929 0.0000 1.8464 2.0982\n",
"C(subEventName)[T.Head pass] -0.6328 0.0279 -22.6792 0.0000 -0.6875 -0.5781\n",
"C(subEventName)[T.High pass] -0.5167 0.0280 -18.4845 0.0000 -0.5715 -0.4619\n",
"C(subEventName)[T.Launch] -0.7976 0.0292 -27.2993 0.0000 -0.8548 -0.7403\n",
"C(subEventName)[T.Simple pass] 1.2257 0.0266 46.0856 0.0000 1.1736 1.2779\n",
"C(subEventName)[T.Smart pass] -1.1578 0.0296 -39.0535 0.0000 -1.2159 -1.0997\n",
"C(subEventName)[T.Throw in] 1.6786 0.0284 59.1520 0.0000 1.6230 1.7342\n",
"startPassM_x 0.0190 0.0007 26.8825 0.0000 0.0176 0.0203\n",
"startM_c -0.0253 0.0015 -16.8990 0.0000 -0.0282 -0.0223\n",
"startPassM_x:startM_c 0.0009 0.0000 56.2755 0.0000 0.0008 0.0009\n",
"endPassM_x -0.0162 0.0002 -97.0289 0.0000 -0.0165 -0.0158\n",
"endM_c -0.0159 0.0003 -54.5851 0.0000 -0.0165 -0.0153\n",
"aShooting -0.0319 0.0453 -0.7047 0.4810 -0.1207 0.0569\n",
"startPassM_xSquared -0.0003 0.0000 -51.8340 0.0000 -0.0003 -0.0003\n",
"startM_cSquared -0.0011 0.0000 -30.3210 0.0000 -0.0011 -0.0010\n",
"===================================================================================\n",
"\n",
"\"\"\""
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"\n",
"pass_model_added = smf.glm(formula=\"successFlag ~ C(subEventName) + startPassM_x*startM_c + endPassM_x + endM_c + aShooting +\\\n",
" startPassM_xSquared + startM_cSquared\", data=df_passes_train\\\n",
" ,family=sm.families.Binomial()).fit()\n",
"\n",
"pass_model_added.summary2()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Fitting model to **training** data with advanced features, using two different link functions:\n",
"\n",
"#### Features:\n",
"\n",
"* Sub Event Name\n",
"* Starting X\n",
"* Starting Y\n",
"* Starting X\\*Y (Interaction Term)\n",
"* End X\n",
"* End Y\n",
"* End X\\*Y (Interaction Term)\n",
"* Start Y^2\n",
"* End Y^2\n",
"* Start Y^2 \\* End Y^2 (Interaction Term)\n",
"* Start X^2\n",
"* End X^2\n",
"* Start X^2 \\* End X^2 (Interaction Term)\n",
"* Distance to Goal (Initial)\n",
"* Passing Distance\n",
"* Passing Distance^2\n",
"* Passing Distance^3\n",
"* Passing Angle\n",
"* Shooting Angle (Initial)\n",
"* Shooting Angle (Change Before and After Pass)\n",
"* Transition Through Thirds (1->2, 2->3, etc.)\n",
"* Home / Away Flag\n",
"* Counter Attack Flag\n",
"* Number of Red Cards\n",
"* Game State (Delta Between Teams for Number of Goals Scored)\n",
"* Time of Current Possession Sequence\n",
"* Time of Passing Player Possession\n",
"* Passing Index Within Possession Sequence\n",
"\n",
"\n",
"\n",
"#### Link Functions:\n",
"* Logit (Canonical link function for Binomial family of distributions)\n",
"* Probit\n"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/christian/anaconda2/envs/py37_football/lib/python3.7/site-packages/ipykernel_launcher.py:14: DeprecationWarning: Calling Family(..) with a link class as argument is deprecated.\n",
"Use an instance of a link class instead.\n",
" \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 2min 10s, sys: 12.9 s, total: 2min 23s\n",
"Wall time: 55.9 s\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" Model: | GLM | AIC: | 878059.9874 | \n",
"
\n",
"\n",
" Link Function: | logit | BIC: | -16936722.7132 | \n",
"
\n",
"\n",
" Dependent Variable: | successFlag | Log-Likelihood: | -4.3899e+05 | \n",
"
\n",
"\n",
" Date: | 2020-09-20 22:01 | LL-Null: | -5.7736e+05 | \n",
"
\n",
"\n",
" No. Observations: | 1267740 | Deviance: | 8.7799e+05 | \n",
"
\n",
"\n",
" Df Model: | 36 | Pearson chi2: | 1.48e+06 | \n",
"
\n",
"\n",
" Df Residuals: | 1267703 | Scale: | 1.0000 | \n",
"
\n",
"\n",
" Method: | IRLS | | | \n",
"
\n",
"
\n",
"\n",
"\n",
" | Coef. | Std.Err. | z | P>|z| | [0.025 | 0.975] | \n",
"
\n",
"\n",
" Intercept | 4.6394 | 0.4439 | 10.4523 | 0.0000 | 3.7695 | 5.5094 | \n",
"
\n",
"\n",
" C(eventName)[T.Pass] | -0.5497 | 0.0334 | -16.4579 | 0.0000 | -0.6152 | -0.4842 | \n",
"
\n",
"\n",
" C(subEventName)[T.Cross] | -1.0629 | 0.0153 | -69.4302 | 0.0000 | -1.0929 | -1.0329 | \n",
"
\n",
"\n",
" C(subEventName)[T.Free Kick] | 0.8217 | 0.0438 | 18.7819 | 0.0000 | 0.7360 | 0.9075 | \n",
"
\n",
"\n",
" C(subEventName)[T.Free kick cross] | -0.7933 | 0.0450 | -17.6457 | 0.0000 | -0.8814 | -0.7052 | \n",
"
\n",
"\n",
" C(subEventName)[T.Hand pass] | 1.8936 | 0.0535 | 35.3916 | 0.0000 | 1.7887 | 1.9985 | \n",
"
\n",
"\n",
" C(subEventName)[T.Head pass] | -0.4716 | 0.0130 | -36.2374 | 0.0000 | -0.4971 | -0.4461 | \n",
"
\n",
"\n",
" C(subEventName)[T.High pass] | -0.4830 | 0.0122 | -39.4346 | 0.0000 | -0.5070 | -0.4590 | \n",
"
\n",
"\n",
" C(subEventName)[T.Launch] | -0.6207 | 0.0160 | -38.8133 | 0.0000 | -0.6521 | -0.5894 | \n",
"
\n",
"\n",
" C(subEventName)[T.Simple pass] | 1.1445 | 0.0112 | 101.7804 | 0.0000 | 1.1225 | 1.1666 | \n",
"
\n",
"\n",
" C(subEventName)[T.Smart pass] | -0.9496 | 0.0165 | -57.3987 | 0.0000 | -0.9820 | -0.9171 | \n",
"
\n",
"\n",
" C(subEventName)[T.Throw in] | 1.1878 | 0.0393 | 30.2234 | 0.0000 | 1.1107 | 1.2648 | \n",
"
\n",
"\n",
" C(homeFlag)[T.1] | 0.0939 | 0.0055 | 16.9337 | 0.0000 | 0.0830 | 0.1047 | \n",
"
\n",
"\n",
" C(counterAttackFlag)[T.1] | 0.4868 | 0.0232 | 20.9958 | 0.0000 | 0.4414 | 0.5323 | \n",
"
\n",
"\n",
" startPassM_x | -0.0481 | 0.0046 | -10.5313 | 0.0000 | -0.0571 | -0.0392 | \n",
"
\n",
"\n",
" startM_c | -0.0264 | 0.0020 | -13.0491 | 0.0000 | -0.0303 | -0.0224 | \n",
"
\n",
"\n",
" startPassM_x:startM_c | 0.0008 | 0.0000 | 24.3176 | 0.0000 | 0.0007 | 0.0008 | \n",
"
\n",
"\n",
" endPassM_x | 0.0257 | 0.0010 | 24.9444 | 0.0000 | 0.0237 | 0.0278 | \n",
"
\n",
"\n",
" endM_c | 0.0548 | 0.0018 | 30.9418 | 0.0000 | 0.0513 | 0.0582 | \n",
"
\n",
"\n",
" endPassM_x:endM_c | 0.0004 | 0.0000 | 24.0117 | 0.0000 | 0.0004 | 0.0004 | \n",
"
\n",
"\n",
" start_cSquared | -0.0002 | 0.0000 | -8.0138 | 0.0000 | -0.0002 | -0.0001 | \n",
"
\n",
"\n",
" end_cSquared | -0.0010 | 0.0000 | -53.9567 | 0.0000 | -0.0010 | -0.0009 | \n",
"
\n",
"\n",
" start_cSquared:end_cSquared | -0.0000 | 0.0000 | -5.8665 | 0.0000 | -0.0000 | -0.0000 | \n",
"
\n",
"\n",
" startPassM_xSquared | -0.0000 | 0.0000 | -3.5110 | 0.0004 | -0.0001 | -0.0000 | \n",
"
\n",
"\n",
" endPassM_xSquared | -0.0004 | 0.0000 | -42.7420 | 0.0000 | -0.0004 | -0.0004 | \n",
"
\n",
"\n",
" startPassM_xSquared:endPassM_xSquared | 0.0000 | 0.0000 | 8.1066 | 0.0000 | 0.0000 | 0.0000 | \n",
"
\n",
"\n",
" D | 0.0790 | 0.0011 | 69.7190 | 0.0000 | 0.0767 | 0.0812 | \n",
"
\n",
"\n",
" DGoalStart | -0.0435 | 0.0037 | -11.7103 | 0.0000 | -0.0508 | -0.0362 | \n",
"
\n",
"\n",
" Dsquared | -0.0015 | 0.0000 | -46.3579 | 0.0000 | -0.0016 | -0.0014 | \n",
"
\n",
"\n",
" Dcubed | 0.0000 | 0.0000 | 22.6732 | 0.0000 | 0.0000 | 0.0000 | \n",
"
\n",
"\n",
" a | -0.3321 | 0.0062 | -53.9585 | 0.0000 | -0.3441 | -0.3200 | \n",
"
\n",
"\n",
" aShooting | 4.6372 | 0.1464 | 31.6803 | 0.0000 | 4.3503 | 4.9240 | \n",
"
\n",
"\n",
" aShootingChange | 4.8917 | 0.1391 | 35.1681 | 0.0000 | 4.6191 | 5.1643 | \n",
"
\n",
"\n",
" thirdTransitionDelta | -0.1285 | 0.0068 | -18.7578 | 0.0000 | -0.1419 | -0.1151 | \n",
"
\n",
"\n",
" numReds | 0.2331 | 0.0163 | 14.2799 | 0.0000 | 0.2011 | 0.2651 | \n",
"
\n",
"\n",
" goalDelta | -0.0169 | 0.0024 | -7.0626 | 0.0000 | -0.0217 | -0.0122 | \n",
"
\n",
"\n",
" possessionTimeSec | 0.0064 | 0.0003 | 19.6586 | 0.0000 | 0.0058 | 0.0071 | \n",
"
\n",
"\n",
" playerPossessionTimeSec | 0.0045 | 0.0007 | 6.8592 | 0.0000 | 0.0032 | 0.0058 | \n",
"
\n",
"\n",
" passIndexWithinSequence | 0.0429 | 0.0014 | 30.0619 | 0.0000 | 0.0401 | 0.0457 | \n",
"
\n",
"
"
],
"text/plain": [
"\n",
"\"\"\"\n",
" Results: Generalized linear model\n",
"======================================================================================\n",
"Model: GLM AIC: 878059.9874 \n",
"Link Function: logit BIC: -16936722.7132\n",
"Dependent Variable: successFlag Log-Likelihood: -4.3899e+05 \n",
"Date: 2020-09-20 22:01 LL-Null: -5.7736e+05 \n",
"No. Observations: 1267740 Deviance: 8.7799e+05 \n",
"Df Model: 36 Pearson chi2: 1.48e+06 \n",
"Df Residuals: 1267703 Scale: 1.0000 \n",
"Method: IRLS \n",
"--------------------------------------------------------------------------------------\n",
" Coef. Std.Err. z P>|z| [0.025 0.975]\n",
"--------------------------------------------------------------------------------------\n",
"Intercept 4.6394 0.4439 10.4523 0.0000 3.7695 5.5094\n",
"C(eventName)[T.Pass] -0.5497 0.0334 -16.4579 0.0000 -0.6152 -0.4842\n",
"C(subEventName)[T.Cross] -1.0629 0.0153 -69.4302 0.0000 -1.0929 -1.0329\n",
"C(subEventName)[T.Free Kick] 0.8217 0.0438 18.7819 0.0000 0.7360 0.9075\n",
"C(subEventName)[T.Free kick cross] -0.7933 0.0450 -17.6457 0.0000 -0.8814 -0.7052\n",
"C(subEventName)[T.Hand pass] 1.8936 0.0535 35.3916 0.0000 1.7887 1.9985\n",
"C(subEventName)[T.Head pass] -0.4716 0.0130 -36.2374 0.0000 -0.4971 -0.4461\n",
"C(subEventName)[T.High pass] -0.4830 0.0122 -39.4346 0.0000 -0.5070 -0.4590\n",
"C(subEventName)[T.Launch] -0.6207 0.0160 -38.8133 0.0000 -0.6521 -0.5894\n",
"C(subEventName)[T.Simple pass] 1.1445 0.0112 101.7804 0.0000 1.1225 1.1666\n",
"C(subEventName)[T.Smart pass] -0.9496 0.0165 -57.3987 0.0000 -0.9820 -0.9171\n",
"C(subEventName)[T.Throw in] 1.1878 0.0393 30.2234 0.0000 1.1107 1.2648\n",
"C(homeFlag)[T.1] 0.0939 0.0055 16.9337 0.0000 0.0830 0.1047\n",
"C(counterAttackFlag)[T.1] 0.4868 0.0232 20.9958 0.0000 0.4414 0.5323\n",
"startPassM_x -0.0481 0.0046 -10.5313 0.0000 -0.0571 -0.0392\n",
"startM_c -0.0264 0.0020 -13.0491 0.0000 -0.0303 -0.0224\n",
"startPassM_x:startM_c 0.0008 0.0000 24.3176 0.0000 0.0007 0.0008\n",
"endPassM_x 0.0257 0.0010 24.9444 0.0000 0.0237 0.0278\n",
"endM_c 0.0548 0.0018 30.9418 0.0000 0.0513 0.0582\n",
"endPassM_x:endM_c 0.0004 0.0000 24.0117 0.0000 0.0004 0.0004\n",
"start_cSquared -0.0002 0.0000 -8.0138 0.0000 -0.0002 -0.0001\n",
"end_cSquared -0.0010 0.0000 -53.9567 0.0000 -0.0010 -0.0009\n",
"start_cSquared:end_cSquared -0.0000 0.0000 -5.8665 0.0000 -0.0000 -0.0000\n",
"startPassM_xSquared -0.0000 0.0000 -3.5110 0.0004 -0.0001 -0.0000\n",
"endPassM_xSquared -0.0004 0.0000 -42.7420 0.0000 -0.0004 -0.0004\n",
"startPassM_xSquared:endPassM_xSquared 0.0000 0.0000 8.1066 0.0000 0.0000 0.0000\n",
"D 0.0790 0.0011 69.7190 0.0000 0.0767 0.0812\n",
"DGoalStart -0.0435 0.0037 -11.7103 0.0000 -0.0508 -0.0362\n",
"Dsquared -0.0015 0.0000 -46.3579 0.0000 -0.0016 -0.0014\n",
"Dcubed 0.0000 0.0000 22.6732 0.0000 0.0000 0.0000\n",
"a -0.3321 0.0062 -53.9585 0.0000 -0.3441 -0.3200\n",
"aShooting 4.6372 0.1464 31.6803 0.0000 4.3503 4.9240\n",
"aShootingChange 4.8917 0.1391 35.1681 0.0000 4.6191 5.1643\n",
"thirdTransitionDelta -0.1285 0.0068 -18.7578 0.0000 -0.1419 -0.1151\n",
"numReds 0.2331 0.0163 14.2799 0.0000 0.2011 0.2651\n",
"goalDelta -0.0169 0.0024 -7.0626 0.0000 -0.0217 -0.0122\n",
"possessionTimeSec 0.0064 0.0003 19.6586 0.0000 0.0058 0.0071\n",
"playerPossessionTimeSec 0.0045 0.0007 6.8592 0.0000 0.0032 0.0058\n",
"passIndexWithinSequence 0.0429 0.0014 30.0619 0.0000 0.0401 0.0457\n",
"======================================================================================\n",
"\n",
"\"\"\""
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"\n",
"# logit = canonical link\n",
"# probit\n",
"# cloglog\n",
"\n",
"pass_model_advanced_canonical = smf.glm(formula=\"successFlag ~ C(eventName) + C(subEventName) +\\\n",
" startPassM_x*startM_c + endPassM_x*endM_c + start_cSquared*end_cSquared +\\\n",
" startPassM_xSquared*endPassM_xSquared +\\\n",
" D + DGoalStart + Dsquared + Dcubed +\\\n",
" a + aShooting + aShootingChange +\\\n",
" thirdTransitionDelta +\\\n",
" C(homeFlag) + C(counterAttackFlag) +\\\n",
" numReds + goalDelta +\\\n",
" possessionTimeSec + playerPossessionTimeSec + passIndexWithinSequence\", data=df_passes_train\\\n",
" ,family=sm.families.Binomial(link=sm.families.links.logit)).fit()\n",
"\n",
"pass_model_advanced_canonical.summary2()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/christian/anaconda2/envs/py37_football/lib/python3.7/site-packages/ipykernel_launcher.py:14: DeprecationWarning: Calling Family(..) with a link class as argument is deprecated.\n",
"Use an instance of a link class instead.\n",
" \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 2min 49s, sys: 15.2 s, total: 3min 4s\n",
"Wall time: 1min 9s\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" Model: | GLM | AIC: | 875453.9179 | \n",
"
\n",
"\n",
" Link Function: | probit | BIC: | -16939328.7828 | \n",
"
\n",
"\n",
" Dependent Variable: | successFlag | Log-Likelihood: | -4.3769e+05 | \n",
"
\n",
"\n",
" Date: | 2020-09-20 22:02 | LL-Null: | -5.7736e+05 | \n",
"
\n",
"\n",
" No. Observations: | 1267740 | Deviance: | 8.7538e+05 | \n",
"
\n",
"\n",
" Df Model: | 36 | Pearson chi2: | 3.55e+07 | \n",
"
\n",
"\n",
" Df Residuals: | 1267703 | Scale: | 1.0000 | \n",
"
\n",
"\n",
" Method: | IRLS | | | \n",
"
\n",
"
\n",
"\n",
"\n",
" | Coef. | Std.Err. | z | P>|z| | [0.025 | 0.975] | \n",
"
\n",
"\n",
" Intercept | 2.6608 | 0.2509 | 10.6031 | 0.0000 | 2.1690 | 3.1526 | \n",
"
\n",
"\n",
" C(eventName)[T.Pass] | -0.3362 | 0.0190 | -17.6570 | 0.0000 | -0.3736 | -0.2989 | \n",
"
\n",
"\n",
" C(subEventName)[T.Cross] | -0.6321 | 0.0086 | -73.6553 | 0.0000 | -0.6489 | -0.6153 | \n",
"
\n",
"\n",
" C(subEventName)[T.Free Kick] | 0.4951 | 0.0248 | 19.9859 | 0.0000 | 0.4465 | 0.5436 | \n",
"
\n",
"\n",
" C(subEventName)[T.Free kick cross] | -0.4661 | 0.0266 | -17.5292 | 0.0000 | -0.5182 | -0.4139 | \n",
"
\n",
"\n",
" C(subEventName)[T.Hand pass] | 1.0295 | 0.0243 | 42.3806 | 0.0000 | 0.9819 | 1.0771 | \n",
"
\n",
"\n",
" C(subEventName)[T.Head pass] | -0.2535 | 0.0071 | -35.7649 | 0.0000 | -0.2674 | -0.2396 | \n",
"
\n",
"\n",
" C(subEventName)[T.High pass] | -0.2514 | 0.0066 | -37.8607 | 0.0000 | -0.2645 | -0.2384 | \n",
"
\n",
"\n",
" C(subEventName)[T.Launch] | -0.3298 | 0.0091 | -36.4452 | 0.0000 | -0.3476 | -0.3121 | \n",
"
\n",
"\n",
" C(subEventName)[T.Simple pass] | 0.6608 | 0.0058 | 113.7434 | 0.0000 | 0.6494 | 0.6722 | \n",
"
\n",
"\n",
" C(subEventName)[T.Smart pass] | -0.5597 | 0.0095 | -58.8821 | 0.0000 | -0.5783 | -0.5410 | \n",
"
\n",
"\n",
" C(subEventName)[T.Throw in] | 0.6663 | 0.0224 | 29.7952 | 0.0000 | 0.6225 | 0.7102 | \n",
"
\n",
"\n",
" C(homeFlag)[T.1] | 0.0514 | 0.0031 | 16.8498 | 0.0000 | 0.0454 | 0.0574 | \n",
"
\n",
"\n",
" C(counterAttackFlag)[T.1] | 0.2704 | 0.0128 | 21.1762 | 0.0000 | 0.2454 | 0.2955 | \n",
"
\n",
"\n",
" startPassM_x | -0.0241 | 0.0026 | -9.3021 | 0.0000 | -0.0291 | -0.0190 | \n",
"
\n",
"\n",
" startM_c | -0.0133 | 0.0011 | -11.9171 | 0.0000 | -0.0155 | -0.0111 | \n",
"
\n",
"\n",
" startPassM_x:startM_c | 0.0004 | 0.0000 | 23.4883 | 0.0000 | 0.0004 | 0.0004 | \n",
"
\n",
"\n",
" endPassM_x | 0.0132 | 0.0006 | 22.9958 | 0.0000 | 0.0121 | 0.0143 | \n",
"
\n",
"\n",
" endM_c | 0.0256 | 0.0010 | 26.8241 | 0.0000 | 0.0237 | 0.0274 | \n",
"
\n",
"\n",
" endPassM_x:endM_c | 0.0003 | 0.0000 | 30.8649 | 0.0000 | 0.0003 | 0.0003 | \n",
"
\n",
"\n",
" start_cSquared | -0.0001 | 0.0000 | -8.3969 | 0.0000 | -0.0001 | -0.0001 | \n",
"
\n",
"\n",
" end_cSquared | -0.0005 | 0.0000 | -52.6469 | 0.0000 | -0.0005 | -0.0005 | \n",
"
\n",
"\n",
" start_cSquared:end_cSquared | -0.0000 | 0.0000 | -8.3416 | 0.0000 | -0.0000 | -0.0000 | \n",
"
\n",
"\n",
" startPassM_xSquared | -0.0000 | 0.0000 | -6.0799 | 0.0000 | -0.0001 | -0.0000 | \n",
"
\n",
"\n",
" endPassM_xSquared | -0.0002 | 0.0000 | -45.3239 | 0.0000 | -0.0002 | -0.0002 | \n",
"
\n",
"\n",
" startPassM_xSquared:endPassM_xSquared | 0.0000 | 0.0000 | 10.7485 | 0.0000 | 0.0000 | 0.0000 | \n",
"
\n",
"\n",
" D | 0.0452 | 0.0006 | 73.3264 | 0.0000 | 0.0440 | 0.0464 | \n",
"
\n",
"\n",
" DGoalStart | -0.0230 | 0.0021 | -10.9519 | 0.0000 | -0.0271 | -0.0189 | \n",
"
\n",
"\n",
" Dsquared | -0.0009 | 0.0000 | -51.0188 | 0.0000 | -0.0009 | -0.0009 | \n",
"
\n",
"\n",
" Dcubed | 0.0000 | 0.0000 | 26.8450 | 0.0000 | 0.0000 | 0.0000 | \n",
"
\n",
"\n",
" a | -0.1743 | 0.0033 | -52.4998 | 0.0000 | -0.1808 | -0.1678 | \n",
"
\n",
"\n",
" aShooting | 1.8915 | 0.0711 | 26.5953 | 0.0000 | 1.7521 | 2.0309 | \n",
"
\n",
"\n",
" aShootingChange | 1.9902 | 0.0660 | 30.1367 | 0.0000 | 1.8608 | 2.1197 | \n",
"
\n",
"\n",
" thirdTransitionDelta | -0.0662 | 0.0037 | -17.7817 | 0.0000 | -0.0735 | -0.0589 | \n",
"
\n",
"\n",
" numReds | 0.1339 | 0.0089 | 14.9810 | 0.0000 | 0.1164 | 0.1514 | \n",
"
\n",
"\n",
" goalDelta | -0.0091 | 0.0013 | -6.9512 | 0.0000 | -0.0117 | -0.0065 | \n",
"
\n",
"\n",
" possessionTimeSec | 0.0036 | 0.0002 | 20.4972 | 0.0000 | 0.0033 | 0.0040 | \n",
"
\n",
"\n",
" playerPossessionTimeSec | 0.0023 | 0.0004 | 6.5261 | 0.0000 | 0.0016 | 0.0030 | \n",
"
\n",
"\n",
" passIndexWithinSequence | 0.0239 | 0.0008 | 31.1508 | 0.0000 | 0.0224 | 0.0254 | \n",
"
\n",
"
"
],
"text/plain": [
"\n",
"\"\"\"\n",
" Results: Generalized linear model\n",
"======================================================================================\n",
"Model: GLM AIC: 875453.9179 \n",
"Link Function: probit BIC: -16939328.7828\n",
"Dependent Variable: successFlag Log-Likelihood: -4.3769e+05 \n",
"Date: 2020-09-20 22:02 LL-Null: -5.7736e+05 \n",
"No. Observations: 1267740 Deviance: 8.7538e+05 \n",
"Df Model: 36 Pearson chi2: 3.55e+07 \n",
"Df Residuals: 1267703 Scale: 1.0000 \n",
"Method: IRLS \n",
"--------------------------------------------------------------------------------------\n",
" Coef. Std.Err. z P>|z| [0.025 0.975]\n",
"--------------------------------------------------------------------------------------\n",
"Intercept 2.6608 0.2509 10.6031 0.0000 2.1690 3.1526\n",
"C(eventName)[T.Pass] -0.3362 0.0190 -17.6570 0.0000 -0.3736 -0.2989\n",
"C(subEventName)[T.Cross] -0.6321 0.0086 -73.6553 0.0000 -0.6489 -0.6153\n",
"C(subEventName)[T.Free Kick] 0.4951 0.0248 19.9859 0.0000 0.4465 0.5436\n",
"C(subEventName)[T.Free kick cross] -0.4661 0.0266 -17.5292 0.0000 -0.5182 -0.4139\n",
"C(subEventName)[T.Hand pass] 1.0295 0.0243 42.3806 0.0000 0.9819 1.0771\n",
"C(subEventName)[T.Head pass] -0.2535 0.0071 -35.7649 0.0000 -0.2674 -0.2396\n",
"C(subEventName)[T.High pass] -0.2514 0.0066 -37.8607 0.0000 -0.2645 -0.2384\n",
"C(subEventName)[T.Launch] -0.3298 0.0091 -36.4452 0.0000 -0.3476 -0.3121\n",
"C(subEventName)[T.Simple pass] 0.6608 0.0058 113.7434 0.0000 0.6494 0.6722\n",
"C(subEventName)[T.Smart pass] -0.5597 0.0095 -58.8821 0.0000 -0.5783 -0.5410\n",
"C(subEventName)[T.Throw in] 0.6663 0.0224 29.7952 0.0000 0.6225 0.7102\n",
"C(homeFlag)[T.1] 0.0514 0.0031 16.8498 0.0000 0.0454 0.0574\n",
"C(counterAttackFlag)[T.1] 0.2704 0.0128 21.1762 0.0000 0.2454 0.2955\n",
"startPassM_x -0.0241 0.0026 -9.3021 0.0000 -0.0291 -0.0190\n",
"startM_c -0.0133 0.0011 -11.9171 0.0000 -0.0155 -0.0111\n",
"startPassM_x:startM_c 0.0004 0.0000 23.4883 0.0000 0.0004 0.0004\n",
"endPassM_x 0.0132 0.0006 22.9958 0.0000 0.0121 0.0143\n",
"endM_c 0.0256 0.0010 26.8241 0.0000 0.0237 0.0274\n",
"endPassM_x:endM_c 0.0003 0.0000 30.8649 0.0000 0.0003 0.0003\n",
"start_cSquared -0.0001 0.0000 -8.3969 0.0000 -0.0001 -0.0001\n",
"end_cSquared -0.0005 0.0000 -52.6469 0.0000 -0.0005 -0.0005\n",
"start_cSquared:end_cSquared -0.0000 0.0000 -8.3416 0.0000 -0.0000 -0.0000\n",
"startPassM_xSquared -0.0000 0.0000 -6.0799 0.0000 -0.0001 -0.0000\n",
"endPassM_xSquared -0.0002 0.0000 -45.3239 0.0000 -0.0002 -0.0002\n",
"startPassM_xSquared:endPassM_xSquared 0.0000 0.0000 10.7485 0.0000 0.0000 0.0000\n",
"D 0.0452 0.0006 73.3264 0.0000 0.0440 0.0464\n",
"DGoalStart -0.0230 0.0021 -10.9519 0.0000 -0.0271 -0.0189\n",
"Dsquared -0.0009 0.0000 -51.0188 0.0000 -0.0009 -0.0009\n",
"Dcubed 0.0000 0.0000 26.8450 0.0000 0.0000 0.0000\n",
"a -0.1743 0.0033 -52.4998 0.0000 -0.1808 -0.1678\n",
"aShooting 1.8915 0.0711 26.5953 0.0000 1.7521 2.0309\n",
"aShootingChange 1.9902 0.0660 30.1367 0.0000 1.8608 2.1197\n",
"thirdTransitionDelta -0.0662 0.0037 -17.7817 0.0000 -0.0735 -0.0589\n",
"numReds 0.1339 0.0089 14.9810 0.0000 0.1164 0.1514\n",
"goalDelta -0.0091 0.0013 -6.9512 0.0000 -0.0117 -0.0065\n",
"possessionTimeSec 0.0036 0.0002 20.4972 0.0000 0.0033 0.0040\n",
"playerPossessionTimeSec 0.0023 0.0004 6.5261 0.0000 0.0016 0.0030\n",
"passIndexWithinSequence 0.0239 0.0008 31.1508 0.0000 0.0224 0.0254\n",
"======================================================================================\n",
"\n",
"\"\"\""
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"\n",
"# logit = canonical link\n",
"# probit\n",
"# cloglog\n",
"\n",
"pass_model_advanced_probit = smf.glm(formula=\"successFlag ~ C(eventName) + C(subEventName) +\\\n",
" startPassM_x*startM_c + endPassM_x*endM_c + start_cSquared*end_cSquared +\\\n",
" startPassM_xSquared*endPassM_xSquared +\\\n",
" D + DGoalStart + Dsquared + Dcubed +\\\n",
" a + aShooting + aShootingChange +\\\n",
" thirdTransitionDelta +\\\n",
" C(homeFlag) + C(counterAttackFlag) +\\\n",
" numReds + goalDelta +\\\n",
" possessionTimeSec + playerPossessionTimeSec + passIndexWithinSequence\", data=df_passes_train\\\n",
" ,family=sm.families.Binomial(link=sm.families.links.probit)).fit()\n",
"\n",
"pass_model_advanced_probit.summary2()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"# 5) Applying models to **test** data\n",
"\n",
"1. Basic model: just starting position features;\n",
"2. Added model: including features outlined in the problem statement;\n",
"3. Advanced model: Logit link - added extra **x** features\n",
"4. Advabced model: Probit link (same features as above)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Applying models...\n",
"Done applying 4 models.\n"
]
}
],
"source": [
"df_passes_test = apply_xP_model_to_test([pass_model_basic, pass_model_added, pass_model_advanced_canonical, pass_model_advanced_probit])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"\n",
"# 6) Model Validation: Calibration Curves of Models Fit to **Test** Data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calibration Curve: Basic Vs Added Models"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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fvrp5R+UnyUnq71CKq709HR27txJ48aNqVKlSsj+JEhEwpu1lszMTPbv38+mTZto0qRJqZNk1cOkzI5PkB9//HF+/fVXAM4444yQ2CWvONZqBrJUbCkpKdSpU4eYmBglxyIStIwxVKpUidq1a1OjRg12795d6nuFduYiQSHvIr0DBw7w0ksvMXXqVFdj8qcDByA9HerVczsSEXekp6dTtWpVt8MQESmxatWqceDAgVJfrxYLKbPISDDG6UGOi4vj559/DqlNQE4kJcX5qAqyVFRZWVlERenLhYiEDo/HQ3Z2dqmvVwVZyswY+P33pUyZ8hbWWurWrUtkZKTbYfnNzp3OR/UgS0Wm1goRCSVl/T9LJQEpM2stBw7sIisrFa/XG1bJMTgVZI14ExERqTiUIEuZZGRkULlyZQYPHkCHDv3CLjkGZ4JFrVpOK4mIiIiEP7VYSKm98sordO/endTUVDweg9cbnhmkRryJSCAtXbqUgQMHUqNGDYwx3H///eUeQ1JSkmvvXRbGGEaOHJnvWEJCAv369TvhsXAQan9u999/P8YYkpKSSnX91KlTMcbwww8/+DWuwihBllJr1aoVJ598MtWqVcPjKX6r6VBlrRJkkYrihx9+wBiT71G1alW6du3KM888U6YFP0XJyspi+PDhrFmzhgcffJA333yTiy66yO/vA04ydf/997N06dKA3L84q1evZty4cbRt25bY2FiqVKlC69atGTNmDAsXLiz3eMrL1KlTefrpp90OAziWXBpjePzxxwt9zdKlS4++5vhvPCoatViIz7Zs2ULjxo0ZMGAAAwYMAAjbBPngQWfEmyZYiFQcV1xxBUOGDMFay7Zt25g6dSp//etf+eOPP5g4caJf32v9+vWsX7+eJ554gptvvtmv9z5eUlISDzzwAAkJCZx66qkBfa+8Jk2axE033UR0dDRXXHEFp556KlFRUaxevZqPPvqIV199lT/++IP27dv75f3+/PPPoFlUOnXqVJKSkvjrX//qdihHRUdHM2XKFP72t78VODdp0iSio6NJT093IbLgogqy+OSTTz6hZcuWzJ07N9/xcE2Qk5Odj5qBLFJxdOnShauvvpprrrmGu+++mwULFtCwYUNee+01duaOtSmj3PmsO3bsAKBmzZp+uW+w+fbbbxkzZgxt2rRh1apVvPLKK9x0002MHj2axx57jNWrV/Pkk0/69T0rV65MpUqV/HrP7OxsDh065Nd7uuXCCy8kMTHx6IZeuTIyMnjnnXcC9hOMUKMEWXzSr18/brnlFrp3757veFSUMwc53GgGsohUq1aNnj17Yq1l/fr1R49PmzaNM888k7i4OGJiYujRowcffvhhgetzf1z93XffceaZZ1K1alXOP/98+vXrR9++fQG47rrrjv5oO7c/01rLSy+9RNeuXYmJiSEuLo7+/fsze/bsQuP86KOP6N+/P9WrVycmJoY2bdowYcIEjhw5wtSpU+nfv3+B9yqqL3fnzp1UqlSJq6++utDz48aNIyIigo0bNxb7e3f33XdjrWXatGk0bNiwwPmoqChuu+22o9Vjr9fL//73P/r06UP9+vWpVKkSTZo04aabbmLXrl3Fvleu4vqNf/vtNwYMGEDVqlWpWbMmI0aMIDm3EpIjtxXh22+/5cEHH6RFixZER0fz/vvvAzBr1iwuu+wymjdvTpUqVahevTqDBw9mzpw5BeKYM2cOGzduzNe2k7d/ds2aNVxzzTU0aNCASpUqkZCQwJ133klaWlqB2OfNm0evXr2oUqUK9erV4+abb+bgwYMl+j3J6/zzz6dOnTpMmTIl3/FPPvmE3bt3c9111xV57WuvvUaXLl2oUqUK8fHxDB48mHnz5hV4ndfr5eGHH6ZZs2ZER0fTsWNH3n777SLvu337dm666SaaNGlCpUqVaNiwIWPGjCnwZ1Oe1GIhJTJ37lx69uxJfHw8jz32WIHzHg8U8u855O3cqRFvIhWdtZa1a9cCULt2bQD++c9/8r///Y9zzjmHBx98kIiICGbMmMEll1zC888/z/jx4/PdY9GiRXz00UeMHj2aESNGAE4C1atXLx566CHGjBlD7969AaiT8x35Nddcw7vvvsvFF1/MddddR0ZGBm+//TZnnXUW06dPZ+jQoUfvf++99/LQQw/Rvn17brvtNho0aMC6dev46KOP+M9//kOfPn34xz/+UeC96hXx47F69eoxdOhQPvroI55//nmqV69+9Fx6ejrvvvsugwYNomnTpkX+vm3YsIHffvuN3r17l7h94siRIzz22GMMHz6cYcOGERsby8KFC5k0aRLz5s1j8eLFpa4Ob9myhYEDBzJ8+HAuvvhifvvtNyZPnsyiRYtYuHAhMTEx+V7/t7/9jczMTEaPHk21atVo06YN4CTQu3fv5tprr6Vx48Zs3bqV1157jYEDBzJ79uyjv7dPP/00f//730lNTeWpp546et927doBsHjxYgYMGED16tW58cYbadSoEcuWLePZZ5/lp59+Ys6cOXg8HgAWLFjAoEGDiIuL4+6776Z69eq89957XHvttT7/Png8Hq666iqmTJnCk08+SZUqVQCYPHkynTt3LrL95u677+bRRx/ltNNO46GHHuLAgQNMnDiR/v3788knnzBkyJCjr7399tt55pln6NOnD7fddhvJycmMHz+e5s2bF7jvpk2b6NmzJ0eOHOH666+nRYsWrF27lpdeeonZs2ezaNEi4uPjff48y8xaWyEeXbt2tVI6iYmJNiIiwj700ENFvubFF6194IFyDKqcvPqqtf/4h9tRiLgrMTGxyHN9+/a1U6ZMsdZae+TIEdu3b1/75ptvWmutTUtLs3379rXvvfeetdbavXv32r59+9qPPvrIWmttSkqK7du3r/3000+ttdZu377d9u3b13755ZfWWms3bdpk+/bta7/55htrrbXr1q2zffv2tT/88IO11tpVq1bZvn372p9++slaa+2KFSvK9HnOnj3bAvaBBx6wKSkpNjk52S5btszecMMNFrCnn366tdbaxYsXW8D+/e9/L3CPYcOG2bi4OLt///6jxwALHP08CnvP3N/DXNOnT7eAfeWVV/Idz8zMtF27drUJCQnW6/Vaa61dsGCBBWz//v3t4cOH873e6/UefV1R72WttRs2bLCA/fe//3302Ndff20B+8ILL+R77VtvvWUBO23atAL3yevTTz+1gL3llluKfd3x8R46dKjA8ddee63Q9wTsiBEj8h1r2rSp7du3b4FjgH3qqafyHX/yySctYB9++OGjx6ZMmWIB27p1a5uWllYgloMHDxY4tmPHDlurVi37l7/8Jd/xvn372qZNmxbymVrbqVMn26ZNm3x/V6w99mef98+pZ8+e1uPx2D///PPosYyMDNu9e/cCf25Fyf28PvjgA7t8+XIL2Lfffttaa+3mzZttRESEfe6552xKSkqB39dVq1ZZY4zt1auXzcjIOHp869atNj4+3jZt2tRmZWXle+2AAQOOHrPW+XdjjLGA3bBhw9HjQ4cOtXXq1LGbN2/OF+/ChQttZGRkvs8t93OYPXv2CT9fa4v/vysXsMgWkjeqxUJOqF27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NGkSc+fOpWnTpvTv358KFSoQFRXFF198wS+//IK3tzd169bF09OTJUuW4Obmhre3N+XKlTNdAJeexx9/HD8/P9atW4e7uzsDBgzI8nl07dqV5cuXM3LkSAIDAy3upHf27Fm+/PJLIiMjOX78uOm8v/zySzp37kxISAj3799ny5YtuXKTjho1ajBz5kyOHz9O06ZNOXToECtXrqR27doZXoRurl27dlSoUIGJEydy/vx5KleuzG+//cbatWtp0KABx44ds2jfqlUrvvnmG8aMGUObNm1wcHCgc+fOlCtXjrVr19K5c2caNmzI0KFDqVevHvfu3ePs2bNs2rSJOXPmmG73PH/+fDp27Ejbtm0ZPXq0qczbg4ccmWrYsCENGzbMtF1gYCCvvfYa8+bNo3379vTv399U5i0+Pp5PP/3U9OGhdu3ajB49msWLF9O5c2f69u1LdHQ0ixcvplGjRlZTbpYuXUq7du1o3749ISEhNGnShJSUFM6dO8fWrVsJCQlhxowZD3WeOWKrtEVRXKTMW8aMZYCSkpJ0XFxctrfftk3rESO0TkrK5cDsSEq8CWGQlVJJRYGxDNq7776bpfbffPON7tatmy5durR2cnLSlStX1kFBQXrJkiUW7bBRiiztMW2VXtNa6zVr1uh27dppT09P7ezsrP38/PTTTz9tKp1nbv369bpNmzbaw8NDu7m56cDAQP3yyy9blOX69ttvdZMmTbSzs7MGTOXQbJV5M/fWW29pQA8dOjTT18WW33//XYeGhuqAgADt6uqqnZ2dda1atfSIESP04cOHLdouX75c16lTRzs7O+sKFSro4cOH6+vXr9t8HW2tS6/MW4cOHfShQ4d0p06dtJubm/b29tbBwcH66tWrFm0zKyX23//+Vz/++OPa29tbe3h46A4dOujvv/9eDxkyRBvSqr/Fx8froUOH6nLlyukSJUpY7ff8+fP6pZde0n5+frpkyZK6TJky+pFHHtFvvPGG/vPPPy32tX//ft26dWvt7OysfX199ahRo/SxY8dyVOYtI7bKvBktX75cN27cWDs7O2tPT0/dpUsX/f3331u1S05O1rNmzdJVq1bVTk5Oul69enrdunU6LCzMqsyb8ZivvvqqDggI0M7OztrLy0vXr19fjxs3Tp84ccLqHPKjzJvSDzHBuzBp1qyZPnjwoL3DKJB2797Ne++9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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_calibration_curve(df_passes_test, show_advanced=0, save_output=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calibration Curve - Advanced Models: Logit Vs Probit"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_calibration_curve(df_passes_test, show_advanced=1, save_output=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
" \n",
"\n",
" \n",
"\n",
" \n",
"\n",
"# 7) Applying Logistic Regression Classifier and Calculating Model Fit Metrics"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Brier Score: 0.10642146614710772\n",
"\n",
"Precision Score: 0.9005178325572422\n",
"\n",
"Recall Score: 0.9105388462288744\n",
"\n",
"F1 Score: 0.9055006150495346\n",
"\n",
"AUC Score: 0.7092062601966227\n",
"\n",
"AccuracyScore: 0.8422029087937452\n"
]
}
],
"source": [
"calculate_model_metrics(df_passes_test, 'xP')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"# 8) Applying advanced model to `df_passes` (**test + training** data) and **summarising best forwards at \"risky\" passes in England**"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"leagues = ['England'] #['England','Spain','Italy','Germany','France']\n",
"positions = ['FWD']\n",
"xPthreshold = 0.5\n",
"minMatches = 10\n",
"minPasses = 50"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" playerId | \n",
" shortName | \n",
" roleCode | \n",
" overxP | \n",
" overxPper90mins | \n",
" overxPper100attempts | \n",
" totSuccessful | \n",
" totAttempted | \n",
" pcCompleted | \n",
" minutesPlayed | \n",
" totMatches | \n",
" pcTrickyBall | \n",
" overallPcCompleted | \n",
" vec_x | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 25707 | \n",
" E. Hazard | \n",
" FWD | \n",
" 17.1 | \n",
" 0.6 | \n",
" 13.9 | \n",
" 59 | \n",
" 123 | \n",
" 48.0 | \n",
" 2432 | \n",
" 34 | \n",
" 8.8 | \n",
" 85.0 | \n",
" 748.65 | \n",
"
\n",
" \n",
" 2 | \n",
" 7944 | \n",
" W. Rooney | \n",
" FWD | \n",
" 9.0 | \n",
" 0.4 | \n",
" 8.4 | \n",
" 50 | \n",
" 108 | \n",
" 46.3 | \n",
" 2238 | \n",
" 30 | \n",
" 9.0 | \n",
" 80.0 | \n",
" 2674.35 | \n",
"
\n",
" \n",
" 6 | \n",
" 8325 | \n",
" S. Agüero | \n",
" FWD | \n",
" 4.2 | \n",
" 0.2 | \n",
" 8.1 | \n",
" 21 | \n",
" 52 | \n",
" 40.4 | \n",
" 1739 | \n",
" 22 | \n",
" 8.5 | \n",
" 84.7 | \n",
" 22.05 | \n",
"
\n",
" \n",
" 4 | \n",
" 25747 | \n",
" S. Mané | \n",
" FWD | \n",
" 6.8 | \n",
" 0.3 | \n",
" 6.5 | \n",
" 40 | \n",
" 104 | \n",
" 38.5 | \n",
" 2184 | \n",
" 27 | \n",
" 11.0 | \n",
" 82.4 | \n",
" -30.45 | \n",
"
\n",
" \n",
" 5 | \n",
" 9637 | \n",
" J. King | \n",
" FWD | \n",
" 6.3 | \n",
" 0.3 | \n",
" 6.1 | \n",
" 40 | \n",
" 104 | \n",
" 38.5 | \n",
" 2160 | \n",
" 28 | \n",
" 16.2 | \n",
" 75.3 | \n",
" 489.30 | \n",
"
\n",
" \n",
" 1 | \n",
" 3361 | \n",
" A. Sánchez | \n",
" FWD | \n",
" 14.3 | \n",
" 0.5 | \n",
" 6.0 | \n",
" 99 | \n",
" 236 | \n",
" 41.9 | \n",
" 2553 | \n",
" 31 | \n",
" 15.7 | \n",
" 74.0 | \n",
" 2404.50 | \n",
"
\n",
" \n",
" 12 | \n",
" 7879 | \n",
" T. Walcott | \n",
" FWD | \n",
" 3.1 | \n",
" 0.2 | \n",
" 4.5 | \n",
" 26 | \n",
" 69 | \n",
" 37.7 | \n",
" 1188 | \n",
" 17 | \n",
" 19.4 | \n",
" 74.4 | \n",
" 359.10 | \n",
"
\n",
" \n",
" 18 | \n",
" 25413 | \n",
" A. Lacazette | \n",
" FWD | \n",
" 2.1 | \n",
" 0.1 | \n",
" 3.6 | \n",
" 21 | \n",
" 57 | \n",
" 36.8 | \n",
" 1832 | \n",
" 25 | \n",
" 8.7 | \n",
" 79.1 | \n",
" 130.20 | \n",
"
\n",
" \n",
" 20 | \n",
" 9123 | \n",
" A. Barnes | \n",
" FWD | \n",
" 1.9 | \n",
" 0.1 | \n",
" 3.4 | \n",
" 21 | \n",
" 55 | \n",
" 38.2 | \n",
" 1779 | \n",
" 26 | \n",
" 13.4 | \n",
" 67.9 | \n",
" -106.05 | \n",
"
\n",
" \n",
" 11 | \n",
" 134513 | \n",
" A. Martial | \n",
" FWD | \n",
" 3.2 | \n",
" 0.2 | \n",
" 3.2 | \n",
" 34 | \n",
" 99 | \n",
" 34.3 | \n",
" 1551 | \n",
" 27 | \n",
" 12.9 | \n",
" 80.8 | \n",
" -371.70 | \n",
"
\n",
" \n",
" 10 | \n",
" 14703 | \n",
" M. Arnautović | \n",
" FWD | \n",
" 3.2 | \n",
" 0.1 | \n",
" 2.9 | \n",
" 39 | \n",
" 111 | \n",
" 35.1 | \n",
" 2249 | \n",
" 29 | \n",
" 15.6 | \n",
" 71.5 | \n",
" -255.15 | \n",
"
\n",
" \n",
" 9 | \n",
" 120353 | \n",
" Mohamed Salah | \n",
" FWD | \n",
" 3.4 | \n",
" 0.1 | \n",
" 2.7 | \n",
" 45 | \n",
" 123 | \n",
" 36.6 | \n",
" 2748 | \n",
" 34 | \n",
" 12.3 | \n",
" 77.0 | \n",
" 316.05 | \n",
"
\n",
" \n",
" 13 | \n",
" 11066 | \n",
" R. Sterling | \n",
" FWD | \n",
" 2.8 | \n",
" 0.1 | \n",
" 2.5 | \n",
" 37 | \n",
" 111 | \n",
" 33.3 | \n",
" 2580 | \n",
" 32 | \n",
" 9.3 | \n",
" 85.5 | \n",
" -888.30 | \n",
"
\n",
" \n",
" 15 | \n",
" 8717 | \n",
" H. Kane | \n",
" FWD | \n",
" 2.4 | \n",
" 0.1 | \n",
" 2.5 | \n",
" 36 | \n",
" 96 | \n",
" 37.5 | \n",
" 2794 | \n",
" 33 | \n",
" 15.9 | \n",
" 74.0 | \n",
" 855.75 | \n",
"
\n",
" \n",
" 33 | \n",
" 8958 | \n",
" J. Rodriguez | \n",
" FWD | \n",
" 0.7 | \n",
" 0.0 | \n",
" 0.9 | \n",
" 27 | \n",
" 74 | \n",
" 36.5 | \n",
" 2593 | \n",
" 34 | \n",
" 11.7 | \n",
" 74.8 | \n",
" 701.40 | \n",
"
\n",
" \n",
" 37 | \n",
" 12829 | \n",
" J. Vardy | \n",
" FWD | \n",
" 0.6 | \n",
" 0.0 | \n",
" 0.8 | \n",
" 25 | \n",
" 80 | \n",
" 31.2 | \n",
" 3074 | \n",
" 35 | \n",
" 19.5 | \n",
" 66.7 | \n",
" -581.70 | \n",
"
\n",
" \n",
" 31 | \n",
" 3802 | \n",
" Philippe Coutinho | \n",
" FWD | \n",
" 0.8 | \n",
" 0.1 | \n",
" 0.8 | \n",
" 37 | \n",
" 103 | \n",
" 35.9 | \n",
" 1115 | \n",
" 14 | \n",
" 13.9 | \n",
" 78.8 | \n",
" 1159.20 | \n",
"
\n",
" \n",
" 36 | \n",
" 7905 | \n",
" R. Lukaku | \n",
" FWD | \n",
" 0.6 | \n",
" 0.0 | \n",
" 0.6 | \n",
" 36 | \n",
" 107 | \n",
" 33.6 | \n",
" 2585 | \n",
" 30 | \n",
" 17.3 | \n",
" 72.1 | \n",
" 534.45 | \n",
"
\n",
" \n",
" 40 | \n",
" 230883 | \n",
" Ayoze Pérez | \n",
" FWD | \n",
" 0.4 | \n",
" 0.0 | \n",
" 0.4 | \n",
" 30 | \n",
" 88 | \n",
" 34.1 | \n",
" 2381 | \n",
" 32 | \n",
" 13.0 | \n",
" 75.0 | \n",
" 270.90 | \n",
"
\n",
" \n",
" 51 | \n",
" 8903 | \n",
" T. Deeney | \n",
" FWD | \n",
" -0.3 | \n",
" -0.0 | \n",
" -0.4 | \n",
" 25 | \n",
" 64 | \n",
" 39.1 | \n",
" 1684 | \n",
" 21 | \n",
" 15.9 | \n",
" 67.2 | \n",
" 622.65 | \n",
"
\n",
" \n",
" 59 | \n",
" 14911 | \n",
" Son Heung-Min | \n",
" FWD | \n",
" -0.5 | \n",
" -0.0 | \n",
" -0.5 | \n",
" 32 | \n",
" 103 | \n",
" 31.1 | \n",
" 1908 | \n",
" 27 | \n",
" 10.8 | \n",
" 83.0 | \n",
" -317.10 | \n",
"
\n",
" \n",
" 53 | \n",
" 3324 | \n",
" Álvaro Morata | \n",
" FWD | \n",
" -0.3 | \n",
" -0.0 | \n",
" -0.6 | \n",
" 15 | \n",
" 52 | \n",
" 28.8 | \n",
" 1776 | \n",
" 24 | \n",
" 10.4 | \n",
" 76.8 | \n",
" -443.10 | \n",
"
\n",
" \n",
" 67 | \n",
" 397178 | \n",
" M. Rashford | \n",
" FWD | \n",
" -1.2 | \n",
" -0.1 | \n",
" -1.2 | \n",
" 30 | \n",
" 103 | \n",
" 29.1 | \n",
" 1582 | \n",
" 25 | \n",
" 16.0 | \n",
" 75.0 | \n",
" -208.95 | \n",
"
\n",
" \n",
" 72 | \n",
" 15808 | \n",
" Roberto Firmino | \n",
" FWD | \n",
" -1.6 | \n",
" -0.1 | \n",
" -1.2 | \n",
" 44 | \n",
" 139 | \n",
" 31.7 | \n",
" 2739 | \n",
" 35 | \n",
" 12.4 | \n",
" 75.7 | \n",
" 517.65 | \n",
"
\n",
" \n",
" 68 | \n",
" 8677 | \n",
" M. Antonio | \n",
" FWD | \n",
" -1.4 | \n",
" -0.1 | \n",
" -1.5 | \n",
" 30 | \n",
" 93 | \n",
" 32.3 | \n",
" 1354 | \n",
" 21 | \n",
" 21.1 | \n",
" 66.4 | \n",
" 330.75 | \n",
"
\n",
" \n",
" 78 | \n",
" 15054 | \n",
" M. Diouf | \n",
" FWD | \n",
" -2.0 | \n",
" -0.1 | \n",
" -2.3 | \n",
" 26 | \n",
" 87 | \n",
" 29.9 | \n",
" 2273 | \n",
" 28 | \n",
" 16.9 | \n",
" 64.6 | \n",
" -30.45 | \n",
"
\n",
" \n",
" 79 | \n",
" 15198 | \n",
" E. Choupo-Moting | \n",
" FWD | \n",
" -2.0 | \n",
" -0.1 | \n",
" -2.4 | \n",
" 25 | \n",
" 84 | \n",
" 29.8 | \n",
" 2134 | \n",
" 26 | \n",
" 13.4 | \n",
" 76.5 | \n",
" -237.30 | \n",
"
\n",
" \n",
" 89 | \n",
" 25571 | \n",
" J. Ayew | \n",
" FWD | \n",
" -2.8 | \n",
" -0.1 | \n",
" -3.5 | \n",
" 22 | \n",
" 80 | \n",
" 27.5 | \n",
" 2355 | \n",
" 28 | \n",
" 10.0 | \n",
" 83.3 | \n",
" 121.80 | \n",
"
\n",
" \n",
" 93 | \n",
" 3577 | \n",
" S. Rondón | \n",
" FWD | \n",
" -3.4 | \n",
" -0.1 | \n",
" -3.7 | \n",
" 28 | \n",
" 92 | \n",
" 30.4 | \n",
" 2457 | \n",
" 29 | \n",
" 13.5 | \n",
" 72.7 | \n",
" 136.50 | \n",
"
\n",
" \n",
" 95 | \n",
" 377071 | \n",
" Richarlison | \n",
" FWD | \n",
" -5.0 | \n",
" -0.2 | \n",
" -4.3 | \n",
" 30 | \n",
" 116 | \n",
" 25.9 | \n",
" 2635 | \n",
" 35 | \n",
" 15.4 | \n",
" 69.7 | \n",
" -127.05 | \n",
"
\n",
" \n",
" 90 | \n",
" 293687 | \n",
" D. Calvert-Lewin | \n",
" FWD | \n",
" -2.8 | \n",
" -0.2 | \n",
" -5.0 | \n",
" 19 | \n",
" 57 | \n",
" 33.3 | \n",
" 1639 | \n",
" 23 | \n",
" 15.6 | \n",
" 71.2 | \n",
" 426.30 | \n",
"
\n",
" \n",
" 96 | \n",
" 3360 | \n",
" Pedro | \n",
" FWD | \n",
" -5.4 | \n",
" -0.4 | \n",
" -8.0 | \n",
" 17 | \n",
" 67 | \n",
" 25.4 | \n",
" 1307 | \n",
" 23 | \n",
" 9.8 | \n",
" 80.9 | \n",
" 241.50 | \n",
"
\n",
" \n",
" 97 | \n",
" 8416 | \n",
" G. Murray | \n",
" FWD | \n",
" -9.0 | \n",
" -0.4 | \n",
" -11.5 | \n",
" 21 | \n",
" 78 | \n",
" 26.9 | \n",
" 2050 | \n",
" 28 | \n",
" 14.7 | \n",
" 66.8 | \n",
" 428.40 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" playerId shortName roleCode overxP overxPper90mins \\\n",
"0 25707 E. Hazard FWD 17.1 0.6 \n",
"2 7944 W. Rooney FWD 9.0 0.4 \n",
"6 8325 S. Agüero FWD 4.2 0.2 \n",
"4 25747 S. Mané FWD 6.8 0.3 \n",
"5 9637 J. King FWD 6.3 0.3 \n",
"1 3361 A. Sánchez FWD 14.3 0.5 \n",
"12 7879 T. Walcott FWD 3.1 0.2 \n",
"18 25413 A. Lacazette FWD 2.1 0.1 \n",
"20 9123 A. Barnes FWD 1.9 0.1 \n",
"11 134513 A. Martial FWD 3.2 0.2 \n",
"10 14703 M. Arnautović FWD 3.2 0.1 \n",
"9 120353 Mohamed Salah FWD 3.4 0.1 \n",
"13 11066 R. Sterling FWD 2.8 0.1 \n",
"15 8717 H. Kane FWD 2.4 0.1 \n",
"33 8958 J. Rodriguez FWD 0.7 0.0 \n",
"37 12829 J. Vardy FWD 0.6 0.0 \n",
"31 3802 Philippe Coutinho FWD 0.8 0.1 \n",
"36 7905 R. Lukaku FWD 0.6 0.0 \n",
"40 230883 Ayoze Pérez FWD 0.4 0.0 \n",
"51 8903 T. Deeney FWD -0.3 -0.0 \n",
"59 14911 Son Heung-Min FWD -0.5 -0.0 \n",
"53 3324 Álvaro Morata FWD -0.3 -0.0 \n",
"67 397178 M. Rashford FWD -1.2 -0.1 \n",
"72 15808 Roberto Firmino FWD -1.6 -0.1 \n",
"68 8677 M. Antonio FWD -1.4 -0.1 \n",
"78 15054 M. Diouf FWD -2.0 -0.1 \n",
"79 15198 E. Choupo-Moting FWD -2.0 -0.1 \n",
"89 25571 J. Ayew FWD -2.8 -0.1 \n",
"93 3577 S. Rondón FWD -3.4 -0.1 \n",
"95 377071 Richarlison FWD -5.0 -0.2 \n",
"90 293687 D. Calvert-Lewin FWD -2.8 -0.2 \n",
"96 3360 Pedro FWD -5.4 -0.4 \n",
"97 8416 G. Murray FWD -9.0 -0.4 \n",
"\n",
" overxPper100attempts totSuccessful totAttempted pcCompleted \\\n",
"0 13.9 59 123 48.0 \n",
"2 8.4 50 108 46.3 \n",
"6 8.1 21 52 40.4 \n",
"4 6.5 40 104 38.5 \n",
"5 6.1 40 104 38.5 \n",
"1 6.0 99 236 41.9 \n",
"12 4.5 26 69 37.7 \n",
"18 3.6 21 57 36.8 \n",
"20 3.4 21 55 38.2 \n",
"11 3.2 34 99 34.3 \n",
"10 2.9 39 111 35.1 \n",
"9 2.7 45 123 36.6 \n",
"13 2.5 37 111 33.3 \n",
"15 2.5 36 96 37.5 \n",
"33 0.9 27 74 36.5 \n",
"37 0.8 25 80 31.2 \n",
"31 0.8 37 103 35.9 \n",
"36 0.6 36 107 33.6 \n",
"40 0.4 30 88 34.1 \n",
"51 -0.4 25 64 39.1 \n",
"59 -0.5 32 103 31.1 \n",
"53 -0.6 15 52 28.8 \n",
"67 -1.2 30 103 29.1 \n",
"72 -1.2 44 139 31.7 \n",
"68 -1.5 30 93 32.3 \n",
"78 -2.3 26 87 29.9 \n",
"79 -2.4 25 84 29.8 \n",
"89 -3.5 22 80 27.5 \n",
"93 -3.7 28 92 30.4 \n",
"95 -4.3 30 116 25.9 \n",
"90 -5.0 19 57 33.3 \n",
"96 -8.0 17 67 25.4 \n",
"97 -11.5 21 78 26.9 \n",
"\n",
" minutesPlayed totMatches pcTrickyBall overallPcCompleted vec_x \n",
"0 2432 34 8.8 85.0 748.65 \n",
"2 2238 30 9.0 80.0 2674.35 \n",
"6 1739 22 8.5 84.7 22.05 \n",
"4 2184 27 11.0 82.4 -30.45 \n",
"5 2160 28 16.2 75.3 489.30 \n",
"1 2553 31 15.7 74.0 2404.50 \n",
"12 1188 17 19.4 74.4 359.10 \n",
"18 1832 25 8.7 79.1 130.20 \n",
"20 1779 26 13.4 67.9 -106.05 \n",
"11 1551 27 12.9 80.8 -371.70 \n",
"10 2249 29 15.6 71.5 -255.15 \n",
"9 2748 34 12.3 77.0 316.05 \n",
"13 2580 32 9.3 85.5 -888.30 \n",
"15 2794 33 15.9 74.0 855.75 \n",
"33 2593 34 11.7 74.8 701.40 \n",
"37 3074 35 19.5 66.7 -581.70 \n",
"31 1115 14 13.9 78.8 1159.20 \n",
"36 2585 30 17.3 72.1 534.45 \n",
"40 2381 32 13.0 75.0 270.90 \n",
"51 1684 21 15.9 67.2 622.65 \n",
"59 1908 27 10.8 83.0 -317.10 \n",
"53 1776 24 10.4 76.8 -443.10 \n",
"67 1582 25 16.0 75.0 -208.95 \n",
"72 2739 35 12.4 75.7 517.65 \n",
"68 1354 21 21.1 66.4 330.75 \n",
"78 2273 28 16.9 64.6 -30.45 \n",
"79 2134 26 13.4 76.5 -237.30 \n",
"89 2355 28 10.0 83.3 121.80 \n",
"93 2457 29 13.5 72.7 136.50 \n",
"95 2635 35 15.4 69.7 -127.05 \n",
"90 1639 23 15.6 71.2 426.30 \n",
"96 1307 23 9.8 80.9 241.50 \n",
"97 2050 28 14.7 66.8 428.40 "
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# applying advanced model to predict xP\n",
"df_passes['xP'] = pass_model_advanced_probit.predict(df_passes)\n",
"# calculating \"overxP\"\n",
"df_passes['overxP'] = df_passes['successFlag'] - df_passes['xP']\n",
"\n",
"## get average distance and average y distance metrics, too\n",
"\n",
"df_overall_pcSuccess = df_passes.loc[df_passes['source'].isin(leagues)]\\\n",
" .groupby(['playerId','shortName'])\\\n",
" .agg({'successFlag':np.sum,'id':'nunique'})\\\n",
" .rename(columns={'successFlag':'overallSuccessful','id':'overallAttempted'})\n",
"\n",
"df_overall_pcSuccess['overallPcCompleted'] = np.round(100*df_overall_pcSuccess['overallSuccessful'] / df_overall_pcSuccess['overallAttempted'], 1)\n",
"\n",
"# producing summary, adding in formations data to calculate the excess xP per 90 minutes\n",
"df_summary_passer = df_passes.loc[(df_passes['roleCode'].isin(positions))\\\n",
" & (df_passes['source'].isin(leagues))\\\n",
" & (df_passes['xP'] < xPthreshold)]\\\n",
" .merge(df_formations, on=['matchId','teamId','playerId'], how='inner')\\\n",
" .groupby(['matchId','playerId','roleCode','minutesPlayed','shortName'])\\\n",
" .agg({'overxP':np.sum,'id':'nunique','successFlag':np.sum,'vec_x':np.sum})\\\n",
" .reset_index()\\\n",
" .rename(columns={'id':'totAttemptedPerMatch','successFlag':'totSuccessfulPerMatch'})\\\n",
" .groupby(['playerId','shortName','roleCode'])\\\n",
" .agg({'overxP':np.sum,'totAttemptedPerMatch':np.sum,'totSuccessfulPerMatch':np.sum,'minutesPlayed':np.sum,'matchId':'nunique','vec_x':np.sum})\\\n",
" .rename(columns={'totAttemptedPerMatch':'totAttempted','totSuccessfulPerMatch':'totSuccessful','matchId':'totMatches'})\\\n",
" .sort_values('overxP', ascending=False)\\\n",
" .reset_index()\n",
"\n",
"# getting the overall fraction of completed passes\n",
"df_summary_passer['pcCompleted'] = np.round(100*df_summary_passer['totSuccessful'] / df_summary_passer['totAttempted'], 1)\n",
"# getting a normalised metric per 90 minutes of play\n",
"df_summary_passer['overxPper90mins'] = np.round(90*(df_summary_passer['overxP'] / df_summary_passer['minutesPlayed']), 1)\n",
"# getting a normalised metric per 100 attempts\n",
"df_summary_passer['overxPper100attempts'] = np.round(100*(df_summary_passer['overxP'] / df_summary_passer['totAttempted']), 1)\n",
"# explicitly making mins played an integer\n",
"df_summary_passer['minutesPlayed'] = df_summary_passer.minutesPlayed.apply(lambda x: int(x))\n",
"# rounding overxP score\n",
"df_summary_passer['overxP'] = np.round(df_summary_passer['overxP'], 1)\n",
"\n",
"# joining difficult pass table to overall pc completed table\n",
"df_summary_passer = df_summary_passer.merge(df_overall_pcSuccess, on=['playerId','shortName'], how='inner')\n",
"df_summary_passer['pcTrickyBall'] = np.round(100*df_summary_passer['totAttempted'] / df_summary_passer['overallAttempted'], 1)\n",
"\n",
"# filtering using minimum criteria\n",
"df_summary_passer = df_summary_passer.loc[(df_summary_passer['totMatches'] >= minMatches) & (df_summary_passer['totAttempted'] >= minPasses)]\n",
"\n",
"df_summary_passer = df_summary_passer[['playerId','shortName','roleCode','overxP','overxPper90mins','overxPper100attempts','totSuccessful','totAttempted','pcCompleted','minutesPlayed','totMatches','pcTrickyBall','overallPcCompleted','vec_x']]\n",
"\n",
"df_summary_passer.sort_values('overxPper100attempts', ascending=False).head(40)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Latex Table of Results"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\\begin{tabular}{lrrr}\n",
"\\toprule\n",
" shortName & overxPper100attempts & totAttempted & pcTrickyBall \\\\\n",
"\\midrule\n",
" E. Hazard & 13.9 & 123 & 8.8 \\\\\n",
" W. Rooney & 8.4 & 108 & 9.0 \\\\\n",
" S. Agüero & 8.1 & 52 & 8.5 \\\\\n",
" S. Mané & 6.5 & 104 & 11.0 \\\\\n",
" J. King & 6.1 & 104 & 16.2 \\\\\n",
" A. Sánchez & 6.0 & 236 & 15.7 \\\\\n",
" T. Walcott & 4.5 & 69 & 19.4 \\\\\n",
" A. Lacazette & 3.6 & 57 & 8.7 \\\\\n",
" A. Barnes & 3.4 & 55 & 13.4 \\\\\n",
" A. Martial & 3.2 & 99 & 12.9 \\\\\n",
"\\bottomrule\n",
"\\end{tabular}\n",
"\n"
]
}
],
"source": [
"print(df_summary_passer.sort_values('overxPper100attempts', ascending=False).head(10).to_latex(index_names=False, index=None\\\n",
" ,columns=['shortName','overxPper100attempts'\\\n",
" ,'totAttempted','pcTrickyBall']))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Hazard distribution visualisation"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"df_hazard = df_passes.loc[(df_passes['playerId'] == 25707) & (df_passes['source'] == 'England')\\\n",
" & (df_passes['xP'] < 0.5)]\n",
"\n",
"df_hazard = df_hazard.merge(df_players.rename(columns={'playerId':'passRecipientPlayerId'}), on='passRecipientPlayerId', how='inner', suffixes=(['_hazard','_receiver']))\n",
"\n",
"hazard_main_receivers = ['Álvaro Morata','Willian','Pedro','Fàbregas','V. Moses','O. Giroud']\n",
"\n",
"df_hazard_main_receivers = df_hazard.loc[df_hazard['shortName_receiver'].isin(hazard_main_receivers)][['source','matchId','eventSec','subEventName','previousSubEventName','shortName_hazard','shortName_receiver','xP','overxP','startPassM_x','startPassM_y','endPassM_x','endPassM_y']]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plotting Hazard Passes by Receiver"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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KVARkcyTmwv9+5s2xs3NClZERKT79OtnvlwXqqrSPZo+TYGKiGQm24acHJNlERER6U6lpSarUlmZ7pH0aQpURCSz2bZJxYuIiHSX3FyzZrKpSZsSp5ECFRERERGRbZWUmBJklX+ljQIVEREREZFtxWImq9LYaBq8SLdToCIiIiIisiPFxWZflYaGdI+kT1KgIiIiIiKyI6GQ2a2+uTndI+mTFKiIiIiIiOxMXp5p6hKPp3skfY4CFRERERGRnbFtyM6GRCLdI+lzFKiIiIiIiOxKNGqyKtqAuFspUBERERER2RXLMq2KFah0KwUqIiIiIiK74zjagLibKVAREREREdkTClS6lQIVERERERHJOApUREREREQk4yhQERERERGRjKNARUREREREMo4CFRERERERyTgKVEREREREJOMoUBERERERkYyjQEVERERERDKOAhUREREREck4ClRERERERCTjKFAREREREZGMo0BFREREREQyjgIVERERERHJOApUREREREQk4yhQERERERGRjKNARUREREREMo4CFRERERERyTgKVEREREREJOMoUBERERERkYyjQEVERERERDKOAhUREREREck4ClRERERERCTjKFAREREREZGMo0BFREREREQyjgIVERERERHJOApUREREREQk4yhQERERERGRjBPq6C/W1NSwefNm4vH4Tu9TWloKwOLFizv6NCLShXJycigtLcW2dc5CREREMkuHApWamho2bdrE0KFDycrKwrKsHd6vqqoKgMLCwo6OT0S6iOd5rF+/nvLycgYOHJju4YiIiIi006FAZfPmzQwdOpTs7OzOHo+IdBPbthk0aBCrV69WoCJ9WjweZ926dTQ1Ne30PqoQkL4mFotRWlpKOBxO91CkD+tQoBKPx8nKyurssYhINwuHwyQSiXQPQySt1q1bR15eHiNHjlSFgAjg+z4VFRWsW7eOUaNGpXs40od1uDB9ZwdzEek59HcsAk1NTRQXF+vvQaSVZVkUFxfvMsso0h20glZERPo8BSki7elvQjKBAhUREREREck4ClRERERERCTjKFAREREREZGMo0BFREREREQyjgIVERERERHJOApUREREREQk4yhQkYzS3NzMj3/8YxoaGtI9FBERERFJIwUqklG+8pWvMGjQILKzs9M9FBERERFJo54dqPg+LFsGtbXpHol0krvuuovPfOYz210/cuRI/vvf/6ZhRJJR5s6Fyy6DsWPhe99L92hEOld5OaxZk+5RSDf6wQ9+wBVXXAHAqlWrsCyLRCIBwDHHHMMf//hHAB588EFOOumktI1TJF16TqASj8OSJfCvf8Hvfw833QSf+Qx885uwdOkeP8wrr7zCjBkzKCgooKioiCOPPJI333yzCweesu1BqDexLItly5bt02PU19eTm5vLJz/5yU4aVeezLItBgwa1+zdMJBIMHDiwS3fx7Yz3t0dauhS++lWYNAlyc+H44+HRR2H1anjjjXSPTqRjfB/Kykzgfe+9cPvtcNVV8MUvwt//vscPo/msa+zL8fbkk0/mxz/+cfLn9evXY1nWDq/buHEjN910UzIY2ZVLLrmE559/vkNjEunJQukewA41NsKGDbB+vTm7VFYGmzZBS0vqK5EwwcteqKmp4dRTT+V3v/sd559/Pi0tLcybN49oNNpFLySlNx7MO9vf/vY3otEozz//PBs2bGDw4MFd+nyJRIJQaO//BAoLC3nuuec47bTTAPjnP/9Jv3792LJlS7eOo9eaPx9uuAE+/hiqqyEcNn/zkYi53XHM377OPEtP4LqwebOZx1atMpcbNkBDAzQ3m//bnmcu94Lms8x09NFHM2fOHL7xjW8AMHfuXMaPH7/ddWPHjqWkpCSdQxXpEdKfUWlqMgHJe+/BCy/Agw/CPffAk0/CvHnmw0p5uTmQ76MlS5YAcNFFF+E4DllZWZx00klMmjQJgHvvvZcjjzySr3zlKxQWFrLffvvx2muvce+99zJs2DAGDhzIfffdl3y8Z599lsmTJ5Ofn8+wYcO49dZbk7cFZ5v+9Kc/MXz4cI477jiOPvpowHzQzc3N5fXXX99ujLfeeivnnnsuF1xwAXl5eUyZMoV33303efsdd9zB6NGjycvLY8KECTz55JPJ25YtW8asWbMoKCigf//+XHDBBQD4vs9XvvIVBg4cSEFBAZMmTeKDDz4AzOL1r33tawwfPpxBgwZx9dVX09jYCEB5eTmnnnoqhYWFFBUVMXPmTLwd/DsEr+vggw8mNzeXRx99FIB77rmHMWPGUFRUxOmnn05ZWdku/33uu+8+rr76aiZNmsSDDz64w/uUlZWRlZVFZWVl8rp33nmH/v37E4/HWb58OccddxzFxcX079+fiy66iC1bthCPx2lpaWHkyJH84Ac/YNKkSeTk5BCPx3nqqac48MADKSws5JhjjmHx4sW7HOenP/1p7r///uTP999/P5dddtl24zz99NMpKipizJgx3HPPPcnbgn/jSy+9lPz8fO69914WLFjA9OnTKSwsZPDgwVxzzTW0tH5w2dH7u3XrVk499VQGDBhAv379OPXUU1m3bt0ux91jOA4sWGBOWABYFti2+Qp+tiyoqEjfGEV2JJGALVvgo4/M/PX3v8Pdd8PDD8N//gMffAAbN+51ULIjms8ycz47+uijefXVV5OPPW/ePK6//nreeuutdtcFz3Prrbdy6aWX7vCxAr7v8+c//5kjjzySeDxOPB7nmmuuYdiwYeTn5zNlyhTmzJmD7/vJxzz//PO57LLLyMvL48ADD+Stt97a5XOIZKruDVQSCbOepKwMFi+GV1+FOXPgzTfNz+vWQX29SYt3gf333x/HcfjMZz7Dc889x9atW7e7zxtvvMGkSZOoqKjg4osv5sILL+TNN99k2bJlPPDAA1xzzTXU1dUBkJOTw/33309VVRXPPvssv/vd7/jHP/7R7vHmzJnD4sWL+fe//83cuXMBqKqqoq6ujunTp+9wnLNnz+a8886jsrKSiy++mDPPPJN4a/Zo9OjRzJs3j+rqar773e9y6aWXsmHDBgC+853vcNJJJ7F161bWrVvHtddeC8Dzzz/P3LlzWbJkCVVVVTz66KMUFxcD8M1vfpMlS5awcOFCli1bxvr167ntttsAuPPOOyktLWXLli1s2rSJH/zgBzssbwpe17vvvktdXR0XXHABL774IjfeeCOPPfYYGzZsYMSIEVx44YU7/bdZs2YNL7/8MpdccgmXXHJJu0CgrSFDhjB9+nT+3loe4fs+DzzwAGeddRbxeJza2lq+/OUv8+GHHzJ//nxWr17NLbfcQn19PQ0NDXiex8MPP8xDDz3EqlWrePfdd7nooou44447WLt2LSeffDKnnXZaMkjYkTPPPJO5c+dSVVVFVVUV8+bN44wzzmh3n4suuojS0lLKysr429/+xk033cQLL7zQ7t/43HPPpaqqiksuuQTHcfj5z39OeXk5r7/+Oi+88AJ33XXXTt9fz/P4v//7P1avXs2aNWvIysrimmuu2emYe5TDD4cRI8z3tp0KVCzLBDFB0NLQYD70iaSD55n/g1u2wPLlZh6bMwde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HHTQQYCZnEeNGtXh9r6u62bEGhrHcbBtO1n+FexcL3to5kxYsMAELbZtun41NJiF9iIZwHU9ttQ1sbG6iU1VzWyobWJzbTMNLQniwXzmeiS8vT9RofnMOProo5kzZw7nn38+AHPnzmX8+PHbXTdjxow9fv3BfKZj8t4pKSmhurqajRs3MmjQoHQPR3qBtGdUmpoTbKhq4MOyal5ZsoUn31nHI2+t5d+LNvHWqkpWlDdQ2djSKWebq6urueWWW/jtb3/L2WefTU5ODuFwmNNOO42f/OQnANx6662ce+65XHrppeTn53PvvfdSVlbG6aefTlFREWPGjOGee+5JPuaCBQs47LDDyM/PZ9CgQdxwww3mdTU1cemll1JcXExhYSGHH344mzZtSo7jc5/7HIMHD2bo0KF8+9vfTqZJly1bxqxZsygoKKB///5ccMEFO3wtRx99NACFhYXk5uby+uuv43ke3//+9xkxYgQDBw7ksssuo7q6epfvyf3338/3v/99wuEwTz/99A7vM3/+fEpKStqlcp988kkmTZqUfA+mT5/O8OHDGT9+PNddd127UibLsvjtb3/L2LFjGTt2LAD33HMPY8aMoaioiNNPP52y3WzW9+lPf5r77ruv3bgvu+yydvdZvHgxxxxzDIWFhRx44IE89dRTydsuv/xyvvCFL/DJT36SnJwcXnrpJZ599lkmT55Mfn4+w4YN49Zbb03ef0fv7/LlyznuuOMoLi6mf//+XHLJJVR1whn8YCJU968OKC2FYcNSWZVwGNavT/eopI9KJFzKa5pYvqmWBSvKefa9DTz0xiqeeXcDry2v5MNNNWyubaYlse9lMZrP2v/+3Llzkz/PmzePb37zm9tdFzzP5Zdfzre//e2dvrfBibc77riDz33uc8nrzzvvPEpKSigoKODoo49m0aJFydsuv/xyvvSlL/GpT32KvLw8pk6dyvI+2IWwpKQEgI0bN6pKQDpFtwYqiUSC2oYWNlY1smRTDW+trOCN1RW8v66aFVvq2FjTSENz19U1vv766zQ1NXHWWWft8n6zZ8/m3HPPpaqqiksuuYSLLrqI0tJSysrK+Nvf/sZNN93ECy+8AMB1113HddddR01NDcuXL0+evbnvvvuorq5m7dq1VFRU8Pvf/z65o+1nPvMZQqEQy5Yt45133uH555/nj3/8IwDf+c53OOmkk9i6dSvr1q3j2muv3eEYgwNwVVUVdXV1TJ8+nXvvvZd7772Xl156iRUrVlBXV8c111yz09c5b9481q1bx4UXXsj555/P/fffv8P7TZs2jZycHF588cXkdQ899BAXX3wxYLICP/rRj1i+fDkvvfQSL774InfddVe7x/jHP/7BG2+8wYcffsiLL77IjTfeyGOPPcaGDRsYMWIEF1544S7/TS699FIeeeQRXNdl8eLF1NbWMnXq1OTt8Xic0047jZNOOonNmzfz61//mksuuYSPP/643ZhvvvlmamtrOeqoo8jJyeH++++nqqqKZ599lt/97nf84x//2On76/s+N954I2VlZSxevJi1a9e2C246KghUtKC+g6ZMMWVfsZhZr7JlS7pHJH2A53k0NMbZUtPIqvJa3l2zlTdWVPLOuq18tKmG9VVN1Da34HbRZzXNZymzZs1i0aJFVFZW4nkeb731FhdccAFVVVXJ61577bVkoLI7nuclP2S3XUR/yimnsHTpUjZv3syUKVO45JJL2v3eww8/zHe/+122bt3KmDFjuPnmm/fo+XqTgoICYrEYTU1N6v4lnaJbApV4PEFNQzPltXEq6pupamihrsmlpZs3uquoqKB///67Tf1Onz6dM888E9u2KS8v55VXXuFHP/oRsViMQw45hCuuuIK//vWvgPmQuWzZMsrLy8nNzWXatGnJ6ysqKli2bBmO43DooYeSn5/Ppk2beO655/jFL35BTk4OAwcO5Ctf+QqPPPJI8vdWr15NWVkZsVhsh+n7nXnwwQe54YYb2G+//cjNzeWHP/whjzzyyE4/AN93332ccsop9OvXj4svvpjnnnuOzZs37/C+F110EQ8//DAAtbW1/POf/+Siiy4C4NBDD+XQQw8lFAoxevRorrrqKubMmdPu92+88UaKiorIysriwQcf5LOf/SxTpkwhGo3ywx/+kNdff32XnUJKS0sZN24c//3vf7nvvvu2y6bMnz+furo6vvWtbxGJRDjuuOM49dRTk2MGOOOMMzjyyCOxbZtYLMYxxxzDxIkTsW2bSZMmcdFFF2037rbGjBnDiSeeSDQaZcCAAdxwww27vP+eCkrQPM/T5o8dceihkJVlsimxGGzdmu4RSS/meR51DS1U1DWzpaGJrQ1xahoTNCVc6MYTyJrPUoYPH87w4cOZN28e7777LmPHjiUr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JY/DrvZj6pDq6moAcnNzVcos+0yfimSftU2VK1DpmGBCDII+ERFJj1DIVMUrUOmYoIOlOuRJZ+hwoKIyHwlYlpU8sGfqzu+ZzPf95IQYvI/d+dwior8FSQlOGPX1+ayjfxNBRkWBinSGDgUqOTk5rF+/npaWFh3cBWhf/iV7x/M8fN/v9o5fvu9TUVGhxY7S58ViMSoqKjSfCaD5DPZtfqisrAQUqEjn6NDp29LSUsrLy1m9evUuzzg0NDQAZsMg6d1c16W5uRnbtvXBdy/F43Hi8TihUKjbe87HYjFKS0u79TlFMk1paSnr1q1jy5YtO72P5rO+w/d9mpqa8H2fWCzWZ9cOdmR+qK+vp66ujlAopEBFOkWHAhXbthk4cCADBw7c5f2C3Sp71a7XskOe5/Hcc8+RSCQ44YQTMnpH30zzyiuvUFFRwWGHHcbQoUPTPRyRPiccDjNq1Khd3kfzWd/y9ttvs27dOg488EDGjBmT7uH0GBs3bgRg0KBBfTbAk86l/0XSKYLgFVIHKtm95uZmKioqsCxrt4G/iIh0j5KSEkDz2d4K3q/g/RPZVwpUpNMMHjwYgHXr1qV5JD1HWVkZAP379yccDqd5NCIiAjBw4EBs26aioiJZ9ie71tjYSHl5uU68SadSoCKdpqSkhHA4TFVVVbI9oeyc7/usXLkSgBEjRqR5NCIiEgiHwwwZMgSA1atXp3k0PcOqVasAGDJkSLevt5TeS4GKdJpQKMTw4cMBkh/AZecqKiqora0lGo0ms1EiIpIZRo4cCZhApS93ANsTnuclA7rgfRPpDJbaMYqIiIiISKZRRkVERERERDKOAhUREREREck4ClRERERERCTjKFAREREREZGMo0BFREREREQyjgIVERERERHJOApUREREREQk4yhQERERERGRjKNARUREREREMo4CFRERERERyTgKVEREREREJOOEdnO73y2jEBGRvWWlewA9kOY0EZHMs9P5TBkVERERERHJOApUREREREQk4yhQERERERGRjKNARUREREREMo4CFRERERERyTgKVEREREREJOMoUBERERERkYyjQEVERERERDKOAhUREREREck4ClRERERERCTjKFAREREREZGMo0BFREREREQyjgIVERERERHJOKF0D0Bkd2bPnp3uIWznjDPOSPcQRESkh9F8JrJ3LN/3d3X7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/OQnP4GqqtA0DY8//jjmz5+Pm2++ObQva21txS233BJ6r9dddx06OjqgdY09eOCBB5Cbm4u8vDz84x//6FYlOtr/a6/XiyuuuAIZGRlwu92YNWsWampqjuu9EkXT4AYVv18EkwMHgK1bgXXrgI0bgS+/FGGlvn5AV8wcO3YsDAYDrrrqKrz11lto6mFsy8aNGzFlyhQ0NDTg8ssvx6WXXorNmzejtLQUTz/9NJYvX472ruDkcDiwatUqNDc344033sDf//53vPbaa92eb+3atdi5cyfeeecdrFu3DoA409Le3o558+b12M7Vq1fjkksuQWNjIy6//HJccMEFCAQCAIBRo0Zh/fr1aGlpwb333osrrrgCVVVVAIB77rkHS5YsQVNTEyoqKvDDH/4QAPDuu+9i3bp1KCkpQXNzM1544QVkZGQAAG6//XaUlJRgy5YtKC0txcGDB3HfffcBAB588EEUFBSgrq4ONTU1+M1vfgOphxSuv6+tW7eivb0dy5Ytw3vvvYc77rgDL774IqqqqlBUVIRLL730mP+PNE3DRx99hO3bt2PatGl47bXX8Jvf/AavvPIK6urqcPLJJ+Oyyy4DIHY8F110EVasWIGKigoUFhbio48+QmdnJ1pbW+Hz+bBp0yYUFBSgpKQEN998M2666SY0Njbi888/x7///W889dRTePjhh9He3o7Ozk74/X4GFyI6tmBQnESrqhLjSj76SISRzz8HSkpEr4COjgF7ee7P4n9/FslgMOCPf/wj6uvrsWHDBqxZswZ/+9vfut3n1VdfxSeffIINGzbgtddew9/+9je0tLTA6/Vi06ZNyM/PD+3Lbr/9duzatQtr167Fp59+irKyMtx9991oaWnBK6+8ggcffBBvvvlm6D6Rjvb/+qmnnkJLSwvKy8vR0NCARx55BDab7bjeK1E0DU5QCQSAlhYRROrrxXgTr3dQXjqSy+XChx9+CEmScO211yIrKwvnnXdet7MFI0eOxNVXXw2DwYBly5ahvLwcP//5z2GxWLBkyRKYzebQWYnFixdj8uTJkGUZU6ZMwWWXXXbYBmHFihVwOBzH9UWfMWMGLr74YphMJtx6663wer345JNPAACXXHIJ8vLyIMsyli1bhjFjxmDTpk0AAJPJhLKyMlRWVsJqteKkk04K3d7W1oZdu3ZB0zRMmDABubm50DQNK1eu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4gns3LkTnZ2d+M1vfgNAVIKcTifa29uRlpYGk8mE9evX49lnnw0N3H///ffx1VdfQVEUuFwumEymI35ORIMhvtZRcTrFBn3hQuDii4GbbgJuvx248krgtNPEGausLFF679PTO7Fx40bMmTMHDocDc+fOxQknnIAHH3ywT8/3t7/9DT//+c/hdDpx3333YenSpUe9v91ux1133YUFCxbA7XaH+uke6vzzz8cLL7yAtLQ0/POf/8Qrr7wCk8mEiRMn4sc//jHmzZuHnJwcfPXVV1iwYEHocZs3b8acOXOQkpKC8847D3/+858xcuRItLa24tprr0VaWhqKioqQkZGB2267DQDwu9/9DqNHj8bcuXPhcrlw2mmn4euuBcd2796N0047DSkpKZg3bx5uuOEGLF68uMc2r1ixAldddRXcbjdefPFFfOMb38Avf/lLXHTRRcjNzcWePXtCfYWPRtM0+P1+tLa2wuv14pxzzsEtt9yCa6+9FgUFBZg5c2ZoY5yZmYmXXnoJP/vZz5CRkYHdu3d3+zx68tBDD8HhcKC4uBgnnXQSLr/8clxzzTVHvL8eWvQNvNlsBiCmh1yzZg2++uorlsWJ6HAWi+gxMHs2cO65wPe/D9x5J/C974kgM20akJ8vQk4fcH8W//szQHQj7ujowIoVK/DSSy+hsLAQt9xyCy699FLIstwtBJx//vmYMWMGpk6dirPPPhvf/e53j/i8R3uvZ511Fm666SaccsopGD16dGiiA4vFAoPBgL///e+4//77UVhYiN///ve44IILEAwG0dHRgcrKSlx88cVwuVyYMGECFi1adNjJPKLBJB1joHCPf9y5cycmTJhwzCdvbm4GIKYvjCq/X8yyUlIC7NkDXHQRMGpUdF8jRlasWBGakWWoUVUVHo8n1LVKlmXYbDYYjcZedzMYDIqiYNu2baGBlDabDVOnTkV2dnZsG0YJY/Xq1QDEgUk/xM+XInH0eZ82YPszTQPKysT+bPduIC8PuPDC6L5GjAzl/ZmmafD5fPB2TRwkSRIsFgssFsug78927tyJE044AT6f77D1V/R2+ny+UPcvq9Xa73b29jiREt9A788Sc8Ugs1mMcZk8OdYtoSjx+/3o7OwMbShtNltojEi80QfvL168GF988QVaWlqwYcMGFBUVYdKkSTCZTLFuIhElCkkSY1tGjACWLIl1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/7YexLqSemyvbMHBJi86/NH5B9/S0oKf//znePjhh/Gtb30LDocDJpMJ5557Ln7/+98DAFasWIGLL74YV1xxBVwuF5588klUVlbivPPOQ3p6OkaPHo2VK1eGnnPTpk2YOXMmXC4XcnJycOuttwIQU/ReccUVyMjIgNvtxqxZs1BTUxNqx3e/+13k5uYiPz8fd999d+hLXVpaikWLFiE1NRWZmZlYtmxZj+9l4cKFAAC3242UlBRs2LABqqriV7/6FYqKipCdnY0rr7yyV2eRJEnCBRdcgLS0NOzYsQOqquL+++/HqFGjkJGRgaVLl6KxsTF0/3/+858oKipCRkYGfv3rXwMQ/y81TcPvfvc7LFu2rNefHyEUTqqrq2PcEiLqj45OPyqbPNhxsAXrd9di9RflePHTA/jvzhp8XtaCfQ0daOkMQtH6f7aZ+7Nje+ONNzBt2jR885vfxCWXXIIVK1Ycdp/HH38ceXl5yM3NxYMPPghAnHi77777cNVVV+Gaa64JfXZHe6+KouDHP/4xMjMzMXLkSPz1r3/tViV64oknMGHCBDidThQXF+PRRx8NtaG+vh7nnHMO3G430tPTcfLJJydsRUIPdoqisPsXRcWgnh7w+4PwBILo8Cto9QTR7PXDr6jw+VX4FRXegILAAIbwDRs2wOv14sILLzzq/VavXo2XXnoJq1atgs/nw5lnnolJkyahsrISu3btwumnn47i4mJ84xvfwM0334ybb74Z3/nOd9De3o5t27YBAJ566im0tLSgvLwcFosFW7Zsgc1mAwBcddVVyMnJQWlpKTo6OnDOOeegsLAQ1113He655x4sWbIE77//Pvx+Pz799NMe27hu3TqMHDkSzc3NobM8jz/+OJ588km8//77oQ378uXL8c9//vOo71dVVaxevRrNzc2YPHky/vKXv+C1117D2rVrkZWVhZtuugk33ngjnnvuOezYsQM/+MEP8Oabb2LOnDm44447UFFREdoYy7J8XJ8fiUH1u3bt4oB6ogQSDAbh9ato9yvweINo9Prh86nwKEH4gyr8QQ0+ZeAONrk/OzaHw4FVq1Zh0qRJ2LZtG04//XRMnToVF1xwQeg+77//Pnbv3o29e/fi1FNPxYknnojFixcDAN588028+OKLePrpp+Hz+XDZZZcd8b2uXLkSb731FrZs2QKHw4FLLrmkW1uy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7JIkobS09Lgf5/V64Xa78d577x32t1tuuQUXX3zxUR+/ePFiSJKErVu3drv9ggsugCRJ+OCDD467TUREA6qhAfj0U+D554H//V/g5puBG24QP69d2+un4f5sYPR1f6bz+Xy44447MHz4cNhsNowZMwa///3voWlar5/j008/xTnnnIO0tDS43W5MnDgRd911F5qamgAA3/72t/Huu+/2uY1EicIY6wYcJhAAqqqA6mpRMamsFL97PEAwCPj94tKHjWNrayvOOecc/P3vf8fSpUvh9/uxfv16WCyWAXgj3SXjxjwarFYrli1bhlWrVuHUU08N3a4oCp577jmsXLnymM8xduxYrFq1Cg8++CAAoKGhAZ988gmysrIGrN1ERMekaSKUHDwo9mP6Pq2lRezDfD6xP1PV435q7s/i1yWXXILq6mq8+eabGD9+PD799FN85zvfQXl5Of7yl78c8/Eff/wxlixZgrvuuguPPfYYcnJycODAATz22GPYunUrFi9efNTHB4NBGI3xd3hH1Bexraj4/aLb1s6dwEcfAa+8AjzxBPDqq8D69eL2mhoRXqKgpKQEAHDZZZfBYDDAZrNhyZIlmDJlCgDgySefxIIFC3DLLbfA7XajuLgYH3/8MZ588kkUFhYiOzsbTz31VOj53njjDUybNg0ulwuFhYVYsWJF6G/62abHHnsMw4cPx6mnnoqFCxcCANxuN1JSUrBhw4bD2rhixQpcfPHFWLZsGZxOJ6ZPn96tWnD//fdj1KhRcDqdmDhxIl599dXQ30pLS7Fo0SKkpqYiMzMTy5YtAwBomoZbbrkF2dnZSE1NxZQpU7Bt2zYA4szPbbfdhuHDhyMnJwfXX389Ojs7AQD19fU455xz4Ha7kZ6ejpNPPhlqDztU/X2deOKJSElJwQsvvAAAWLlyJUaPHo309HScd955qKys7PH/y1VXXYV//etf8Hg8odveeecdqKqKs846q8fHRPr2t7+NF154AYqiQNM0PPvsszj//PNhNpvh9/vh9XrR0tKC5cuXIzc3F3l5efjhD3+Ijo4OKIqCurq6I77PyspKXHTRRcjKysLIkSO77WQ2bdqEmTNnwuVyIScnB7feeusx20pESUpRRAApLRVduF5/HXjqKeC550QX5S1bgIoKwOuNystxfxaf+7M1a9bg3Xffxb/+9S+ccMIJMBqNmDt3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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pitch = Pitch(layout=(3, 2), tight_layout=False, constrained_layout=True, view='half', orientation='vertical', figsize=(12,12))\n",
"\n",
"fig, axs = pitch.draw()\n",
"\n",
"for ax, receiver in zip(axs.flat, hazard_main_receivers):\n",
" \n",
" df_receiver = df_hazard_main_receivers.loc[df_hazard_main_receivers['shortName_receiver'] == receiver]\n",
" \n",
" # smart passes\n",
" pitch.lines(df_receiver.loc[df_receiver['subEventName'] == 'Smart pass'].startPassM_x*120/105, df_receiver.loc[df_receiver['subEventName'] == 'Smart pass'].startPassM_y*80/68,\\\n",
" df_receiver.loc[df_receiver['subEventName'] == 'Smart pass'].endPassM_x*120/105, df_receiver.loc[df_receiver['subEventName'] == 'Smart pass'].endPassM_y*80/68,\n",
" lw=10, transparent=True, comet=True,\n",
" label=f'Smart passes to {receiver}', color='red', ax=ax, alpha_start=0.01, alpha_end=1)\n",
" \n",
" # crosses\n",
" pitch.lines(df_receiver.loc[df_receiver['subEventName'] == 'Cross'].startPassM_x*120/105, df_receiver.loc[df_receiver['subEventName'] == 'Cross'].startPassM_y*80/68,\\\n",
" df_receiver.loc[df_receiver['subEventName'] == 'Cross'].endPassM_x*120/105, df_receiver.loc[df_receiver['subEventName'] == 'Cross'].endPassM_y*80/68,\n",
" lw=10, transparent=True, comet=True,\n",
" label=f'Crosses to {receiver}', ax=ax, alpha_start=0.01, alpha_end=1)\n",
"\n",
" leg = ax.legend(borderpad=1, markerscale=1.5, labelspacing=1.5, loc='lower left', fontsize=12)\n",
"\n",
"fig.savefig('Hazard.pdf', format='pdf',dpi=300,pad_inches=0,bbox_inches='tight', transparent=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Looking at Receivers"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" playerId | \n",
" shortName | \n",
" overxP | \n",
" totAttempted | \n",
" totCompleted | \n",
" minutesPlayed | \n",
" totMatches | \n",
" fracCompleted | \n",
" overxPper90received | \n",
"
\n",
" \n",
" \n",
" \n",
" 26 | \n",
" 26010.0 | \n",
" O. Giroud | \n",
" 23.778349 | \n",
" 37 | \n",
" 37 | \n",
" 728.0 | \n",
" 17 | \n",
" 1.0 | \n",
" 2.939631 | \n",
"
\n",
" \n",
" 15 | \n",
" 11669.0 | \n",
" C. Wilson | \n",
" 28.063730 | \n",
" 44 | \n",
" 44 | \n",
" 1238.0 | \n",
" 18 | \n",
" 1.0 | \n",
" 2.040174 | \n",
"
\n",
" \n",
" 22 | \n",
" 10663.0 | \n",
" A. Gray | \n",
" 24.590565 | \n",
" 40 | \n",
" 40 | \n",
" 1120.0 | \n",
" 18 | \n",
" 1.0 | \n",
" 1.976028 | \n",
"
\n",
" \n",
" 9 | \n",
" 8384.0 | \n",
" S. Long | \n",
" 31.249384 | \n",
" 50 | \n",
" 50 | \n",
" 1453.0 | \n",
" 22 | \n",
" 1.0 | \n",
" 1.935612 | \n",
"
\n",
" \n",
" 5 | \n",
" 9123.0 | \n",
" A. Barnes | \n",
" 35.533073 | \n",
" 57 | \n",
" 57 | \n",
" 1665.0 | \n",
" 21 | \n",
" 1.0 | \n",
" 1.920707 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" playerId shortName overxP totAttempted totCompleted minutesPlayed \\\n",
"26 26010.0 O. Giroud 23.778349 37 37 728.0 \n",
"15 11669.0 C. Wilson 28.063730 44 44 1238.0 \n",
"22 10663.0 A. Gray 24.590565 40 40 1120.0 \n",
"9 8384.0 S. Long 31.249384 50 50 1453.0 \n",
"5 9123.0 A. Barnes 35.533073 57 57 1665.0 \n",
"\n",
" totMatches fracCompleted overxPper90received \n",
"26 17 1.0 2.939631 \n",
"15 18 1.0 2.040174 \n",
"22 18 1.0 1.976028 \n",
"9 22 1.0 1.935612 \n",
"5 21 1.0 1.920707 "
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# producing summary, adding in formations data to calculate the excess xP per 90 minutes\n",
"\n",
"df_passes_receiver = df_passes.copy()\n",
"df_passes_receiver = df_passes_receiver.drop(columns=['playerId','shortName','roleCode'])\n",
"df_passes_receiver = df_passes_receiver.rename(columns={'passRecipientPlayerId':'playerId'})\n",
"df_passes_receiver = df_passes_receiver.loc[pd.isna(df_passes_receiver['playerId']) == False]\n",
"\n",
"df_passes_receiver = df_passes_receiver.merge(df_players, on=['playerId'], how='inner')\n",
"\n",
"df_summary_receiver = df_passes_receiver.loc[(df_passes_receiver['roleCode'].isin(positions))\\\n",
" & (df_passes_receiver['source'].isin(leagues))\\\n",
" & (df_passes_receiver['xP'] < xPthreshold)]\\\n",
" .merge(df_formations, on=['matchId','teamId','playerId'], how='inner')\\\n",
" .groupby(['matchId','playerId','minutesPlayed','shortName'])\\\n",
" .agg({'overxP':np.sum,'id':'nunique','successFlag':np.sum})\\\n",
" .reset_index()\\\n",
" .rename(columns={'id':'totAttemptedPerMatch','successFlag':'totCompletedPerMatch'})\\\n",
" .groupby(['playerId','shortName'])\\\n",
" .agg({'overxP':np.sum,'totAttemptedPerMatch':np.sum,'totCompletedPerMatch':np.sum,'minutesPlayed':np.sum,'matchId':'nunique'})\\\n",
" .rename(columns={'totAttemptedPerMatch':'totAttempted','totCompletedPerMatch':'totCompleted','matchId':'totMatches'})\\\n",
" .sort_values('overxP', ascending=False)\\\n",
" .reset_index()\n",
"\n",
"df_summary_receiver['fracCompleted'] = df_summary_receiver['totCompleted'] / df_summary_receiver['totAttempted']\n",
"df_summary_receiver['overxPper90received'] = 90*(df_summary_receiver['overxP'] / df_summary_receiver['minutesPlayed'])\n",
"df_summary_receiver = df_summary_receiver.loc[df_summary_receiver['totMatches'] >= 10]\n",
"\n",
"df_summary_receiver.sort_values('overxPper90received', ascending=False).head()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "py37_football",
"language": "python",
"name": "py37_football"
},
"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.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}