{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "#edit only this tab\n", "#give the folder path of the match\n", "path = \"\"\"C:\\\\Users\\\\koushik.r\\\\Documents\\\\open-data-master\\\\data\\\\events\\\\\"\"\"\n", "home_team = 'Espanyol'\n", "away_team = 'Barcelona'" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "done\n" ] } ], "source": [ "import json\n", "import os\n", "import codecs\n", "from pandas.io.json import json_normalize\n", "import numpy as np\n", "#import seaborn as sns\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from matplotlib.patches import Arc, Rectangle, ConnectionPatch\n", "from matplotlib.offsetbox import OffsetImage\n", "#import squarify\n", "from functools import reduce\n", "\n", "Xg_req = pd.DataFrame(data=None)\n", "for filename in (os.listdir(path)):\n", " #print(filename)\n", "#filename = '69275.json' # remove the comment line to work for this match\n", "with codecs.open(\"%s\" % path + filename,encoding='utf-8') as data_file: \n", " data = json.load(data_file)\n", " df = pd.DataFrame(data=None)\n", " \n", " df = json_normalize(data, sep = \"_\")\n", " \n", " #df = df[(df['type_name'] == \"Shot\")]\n", " #df = df.loc[:,['location','shot_body_part_id','shot_end_location','shot_one_on_one','shot_technique_id','shot_type_id','under_pressure','shot_outcome_id']]\n", " #print(df.shape)\n", "Xg_req = Xg_req.append(df,ignore_index=True,sort=False)\n", " #df.drop(df.index, inplace=True)\n", " \n", "print(\"done\")\n", "df = Xg_req" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "#type_id=30 is pass event AND type_id=19 is substitution event\n", "\n", "pass_m = df.query('type_id == 30')\n", "substitution = df.query('type_id == 19')\n", "#pass_m = df.query('type_name == pass')\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Javier Alejandro Mascherano' 'Seydou Kéita' 'Bojan Krkíc Pérez']\n", "['Jesús Alberto Dátolo' 'Jordi Amat Maas' 'David García De La Cruz']\n" ] } ], "source": [ "#this cell is WIP\n", "substitution_home = set()\n", "substitution_home = substitution[substitution.team_name == home_team]\n", "substitution_home = substitution_home['substitution_replacement_name'].unique()\n", "substitution_away = set()\n", "substitution_away = substitution[substitution.team_name == away_team]\n", "substitution_away = substitution_away['substitution_replacement_name'].unique()\n", "print(substitution_away)\n", "print(substitution_home)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# to get \n", "\n", "home_player = pass_m[(pass_m.team_name == home_team)] \n", "home_team_list = set()\n", "home_team_list = home_player['player_name'].unique()\n", "#print(substitution_belgium)\n", "#belgium_list = [player for player in belgium_list if player not in substitution_belgium]\n", "#belgium_list.remove([x for x in substitution_belgium])#belgium_list - substitution_belgium\n", "home_player =pass_m['player_name'].isin(home_team_list)\n", "pass_home = pass_m[home_player] #contains 11 players of home team\n", "\n", "away_player = pass_m[(pass_m.team_name == away_team)] \n", "away_list = away_player['player_name'].unique()\n", "#away_list = away_list - substitution_brazil\n", "away_player = pass_m['player_name'].isin(away_list)\n", "pass_away = pass_m[away_player]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
50_50_outcome_id50_50_outcome_namebad_behaviour_card_idbad_behaviour_card_nameball_receipt_outcome_idball_receipt_outcome_nameball_recovery_recovery_failureblock_deflectionblock_offensivecarry_end_location...substitution_replacement_idsubstitution_replacement_nametactics_formationtactics_lineupteam_idteam_nametimestamptype_idtype_nameunder_pressure
4NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN214Espanyol00:00:00.73830PassNaN
8NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN214Espanyol00:00:02.51130PassNaN
16NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN214Espanyol00:00:09.58130PassTrue
20NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN214Espanyol00:00:18.78430PassNaN
24NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN214Espanyol00:00:20.12230PassTrue
\n", "

5 rows × 122 columns

\n", "
" ], "text/plain": [ " 50_50_outcome_id 50_50_outcome_name bad_behaviour_card_id \\\n", "4 NaN NaN NaN \n", "8 NaN NaN NaN \n", "16 NaN NaN NaN \n", "20 NaN NaN NaN \n", "24 NaN NaN NaN \n", "\n", " bad_behaviour_card_name ball_receipt_outcome_id ball_receipt_outcome_name \\\n", "4 NaN NaN NaN \n", "8 NaN NaN NaN \n", "16 NaN NaN NaN \n", "20 NaN NaN NaN \n", "24 NaN NaN NaN \n", "\n", " ball_recovery_recovery_failure block_deflection block_offensive \\\n", "4 NaN NaN NaN \n", "8 NaN NaN NaN \n", "16 NaN NaN NaN \n", "20 NaN NaN NaN \n", "24 NaN NaN NaN \n", "\n", " carry_end_location ... substitution_replacement_id \\\n", "4 NaN ... NaN \n", "8 NaN ... NaN \n", "16 NaN ... NaN \n", "20 NaN ... NaN \n", "24 NaN ... NaN \n", "\n", " substitution_replacement_name tactics_formation tactics_lineup team_id \\\n", "4 NaN NaN NaN 214 \n", "8 NaN NaN NaN 214 \n", "16 NaN NaN NaN 214 \n", "20 NaN NaN NaN 214 \n", "24 NaN NaN NaN 214 \n", "\n", " team_name timestamp type_id type_name under_pressure \n", "4 Espanyol 00:00:00.738 30 Pass NaN \n", "8 Espanyol 00:00:02.511 30 Pass NaN \n", "16 Espanyol 00:00:09.581 30 Pass True \n", "20 Espanyol 00:00:18.784 30 Pass NaN \n", "24 Espanyol 00:00:20.122 30 Pass True \n", "\n", "[5 rows x 122 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pass_home.head()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def draw_pitch(ax):\n", " # focus on only half of the pitch\n", " #Pitch Outline & Centre Line\n", " Pitch = Rectangle([0,0], width = 120, height = 80, fill = False)\n", " #Left, Right Penalty Area and midline\n", " LeftPenalty = Rectangle([0,22.3], width = 14.6, height = 35.3, fill = False)\n", " RightPenalty = Rectangle([105.4,22.3], width = 14.6, height = 35.3, fill = False)\n", " midline = ConnectionPatch([60,0], [60,80], \"data\", \"data\")\n", "\n", " #Left, Right 6-yard Box\n", " LeftSixYard = Rectangle([0,32], width = 4.9, height = 16, fill = False)\n", " RightSixYard = Rectangle([115.1,32], width = 4.9, height = 16, fill = False)\n", "\n", "\n", " #Prepare Circles\n", " centreCircle = plt.Circle((60,40),8.1,color=\"white\", fill = False)\n", " centreSpot = plt.Circle((60,40),0.71,color=\"white\")\n", " #Penalty spots and Arcs around penalty boxes\n", " leftPenSpot = plt.Circle((9.7,40),0.71,color=\"white\")\n", " rightPenSpot = plt.Circle((110.3,40),0.71,color=\"white\")\n", " leftArc = Arc((9.7,40),height=16.2,width=16.2,angle=0,theta1=310,theta2=50,color=\"white\")\n", " rightArc = Arc((110.3,40),height=16.2,width=16.2,angle=0,theta1=130,theta2=230,color=\"white\")\n", " \n", " element = [Pitch, LeftPenalty, RightPenalty, midline, LeftSixYard, RightSixYard, centreCircle, \n", " centreSpot, rightPenSpot, leftPenSpot, leftArc, rightArc]\n", " for i in element:\n", " ax.add_patch(i)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "players = home_team_list\n", "#['Thibaut Courtois','Jan Vertonghen','Vincent Kompany','Toby Albertine Maurits Alderweireld','Thomas Meunier','Nacer Chadli','Axel Witsel','Marouane Fellaini-Bakkioui','Eden Hazard','Kevin De Bruyne','Romelu Lukaku Menama']\n", "fig=plt.figure() #set up the figures\n", "from matplotlib import rcParams\n", "plt.style.use('dark_background')\n", "fig.set_size_inches(16, 9)\n", "ax=fig.add_subplot(1,1,1)\n", "draw_pitch(ax) #overlay our different objects on the pitch\n", "plt.ylim(-2, 82)\n", "plt.xlim(-2, 122)\n", "plt.axis('off')\n", "for player in players:\n", " x_avg = 0\n", " y_avg = 0\n", " touches = 0\n", " if player not in substitution_home: \n", " play_temp = pass_home[(pass_home.player_name == player)]\n", " #print(play_temp.location, players[player])\n", " for i in range(len(play_temp)):\n", " touches+=1\n", " y_loc = -2*(play_temp.iloc[i]['location'][1] - 40) + play_temp.iloc[i]['location'][1] # y - y' = -2(y' +c) reflection of a point\n", " #https://math.stackexchange.com/questions/1013230/how-to-find-coordinates-of-reflected-point\n", " x_avg = x_avg + play_temp.iloc[i]['location'][0]\n", " y_avg = y_avg + y_loc\n", " x_avg = x_avg/len(play_temp)\n", " y_avg = y_avg/len(play_temp)\n", " #print(x_avg,y_avg,players[player])\n", " ax.scatter(x_avg, y_avg, s= (3 * touches)) \n", " ax.annotate(player, (x_avg, y_avg))\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "players = away_list #['Alisson Ramsés Becker','Fágner Conserva Lemos','Fernando Luiz Rosa','Gabriel Fernando de Jesus','João Miranda de Souza Filho','José Paulo Bezzera Maciel Júnior','Marcelo Vieira da Silva Júnior','Neymar da Silva Santos Junior','Philippe Coutinho Correia','Thiago Emiliano da Silva','Willian Borges da Silva']\n", "fig=plt.figure() #set up the figures\n", "from matplotlib import rcParams\n", "plt.style.use('dark_background')\n", "fig.set_size_inches(16,9)\n", "ax=fig.add_subplot(1,1,1)\n", "draw_pitch(ax) #overlay our different objects on the pitch\n", "plt.ylim(-2, 82)\n", "plt.xlim(-2, 122)\n", "plt.axis('off')\n", "y_loc =0\n", "for player in players:\n", " x_avg = 0\n", " y_avg = 0\n", " touches = 0\n", " if player not in substitution_away:\n", " #print(players[player])\n", " play_temp = pass_away[(pass_away.player_name == player)]\n", " #print(play_temp.location, players[player])\n", " for i in range(len(play_temp)):\n", " touches+=1\n", " #y_loc = (play_temp.iloc[i]['location'][1] + 40 ) %80\n", " y_loc = -2*(play_temp.iloc[i]['location'][1] - 40) + play_temp.iloc[i]['location'][1] \n", " x_avg = x_avg + play_temp.iloc[i]['location'][0]\n", " y_avg = y_avg + y_loc\n", " x_avg = x_avg/len(play_temp)\n", " y_avg = y_avg/len(play_temp)\n", " #print(x_avg,y_avg,players[player])\n", " ax.scatter(x_avg, y_avg, s= (3 *touches )) \n", " ax.annotate(player, (x_avg, y_avg))\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.0" } }, "nbformat": 4, "nbformat_minor": 2 }