{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Importing the necessary modules\n", "\n", "We're using Matplotlib to plot each frame and moviepy to handle the animation. Matplotlib has animation capabilities, but I find moviepy much more simple and clear to use." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "from matplotlib import pyplot as plt\n", "from matplotlib.patches import Ellipse\n", "from moviepy.editor import VideoClip\n", "from moviepy.video.io.bindings import mplfig_to_npimage\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Loading data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We are using James' goal for Real versus Barcelona in April 2017. It is a great example of off the ball movement being important in football - an aspect which is mostly ignored by traditional stats, which focus on events, not positioning.\n", "\n", "I collected the data myself from watchng the video replay again and again. Don't assume professional level accuracy. This is just for educational/entertainment purposes." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "df = pd.read_csv('../datasets/james-vs-barcelona-positonal-data.csv', index_col=(0,1))\n", "dfPlayers = pd.read_csv('../datasets/james-vs-barcelona-player-data.csv', index_col=0)\n", "\n", "colors = {'attack': 'gray',\n", " 'defense': '#00529F'}\n", "\n", "fps = 20\n", "length = 10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Drawing the football field" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "(
,\n", " )" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X_SIZE = 105.0\n", "Y_SIZE = 68.0\n", "\n", "BOX_HEIGHT = (16.5*2 + 7.32)/Y_SIZE*100\n", "BOX_WIDTH = 16.5/X_SIZE*100\n", "\n", "GOAL = 7.32/Y_SIZE*100\n", "\n", "GOAL_AREA_HEIGHT = 5.4864*2/Y_SIZE*100 + GOAL\n", "GOAL_AREA_WIDTH = 5.4864/X_SIZE*100\n", "\n", "\n", "def draw_pitch():\n", " \"\"\"Sets up field\n", " Returns matplotlib fig and axes objects.\n", " \"\"\"\n", " \n", " fig = plt.figure(figsize=(X_SIZE/15, Y_SIZE/15))\n", " fig.patch.set_facecolor('#a8bc95')\n", "\n", " axes = fig.add_subplot(1, 1, 1, facecolor='#a8bc95')\n", "\n", " axes.xaxis.set_visible(False)\n", " axes.yaxis.set_visible(False)\n", "\n", " axes.set_xlim(0,100)\n", " axes.set_ylim(0,100) \n", "\n", " axes = draw_patches(axes)\n", " \n", " return fig, axes\n", "\n", "def draw_patches(axes):\n", " plt.xlim([-5,105])\n", " plt.ylim([-5,105])\n", "\n", " #pitch\n", " axes.add_patch(plt.Rectangle((0, 0), 100, 100,\n", " edgecolor=\"white\", facecolor=\"none\", alpha=1))\n", "\n", " #half-way line\n", " axes.add_line(plt.Line2D([50, 50], [100, 0],\n", " c='w'))\n", " \n", " #penalty areas\n", " axes.add_patch(plt.Rectangle((100-BOX_WIDTH, (100-BOX_HEIGHT)/2), BOX_WIDTH, BOX_HEIGHT,\n", " ec='w', fc='none'))\n", " axes.add_patch(plt.Rectangle((0, (100-BOX_HEIGHT)/2), BOX_WIDTH, BOX_HEIGHT,\n", " ec='w', fc='none')) \n", " \n", " #goal areas\n", " axes.add_patch(plt.Rectangle((100-GOAL_AREA_WIDTH, (100-GOAL_AREA_HEIGHT)/2), GOAL_AREA_WIDTH, GOAL_AREA_HEIGHT,\n", " ec='w', fc='none'))\n", " axes.add_patch(plt.Rectangle((0, (100-GOAL_AREA_HEIGHT)/2), GOAL_AREA_WIDTH, GOAL_AREA_HEIGHT,\n", " ec='w', fc='none')) \n", "\n", " #goals\n", " axes.add_patch(plt.Rectangle((100, (100-GOAL)/2), 1, GOAL,\n", " ec='w', fc='none'))\n", " axes.add_patch(plt.Rectangle((0, (100-GOAL)/2), -1, GOAL,\n", " ec='w', fc='none')) \n", " \n", " \n", " #halfway circle\n", " axes.add_patch(Ellipse((50, 50), 2*9.15/X_SIZE*100, 2*9.15/Y_SIZE*100,\n", " ec='w', fc='none'))\n", "\n", " return axes\n", " \n", "draw_pitch()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Basic Animation\n", "\n", "This code will output the basic animation, with the pitch, players and ball plotted. Each frame will then be enhanced with additional metrics in the next versions." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "attackers = dfPlayers[dfPlayers.team=='attack'].index\n", "defenders = dfPlayers[dfPlayers.team=='defense'].index\n", "\n", "def draw_frame(t, display_num=False):\n", " f = int(t*fps)\n", "\n", " fig, ax = draw_pitch()\n", " \n", " dfFrame = df.loc[f]\n", " \n", " for pid in dfFrame.index:\n", " if pid==0:\n", " size = 0.6\n", " color='black'\n", " edge='black'\n", " else:\n", " size = 3\n", " color='white'\n", " if dfPlayers.loc[pid]['team'] == 'defense':\n", " edge=colors['defense'] \n", " else:\n", " edge=colors['attack']\n", " \n", " ax.add_artist(Ellipse((dfFrame.loc[pid]['x'],\n", " dfFrame.loc[pid]['y']),\n", " size/X_SIZE*100, size/Y_SIZE*100,\n", " edgecolor=edge,\n", " linewidth=2,\n", " facecolor=color,\n", " alpha=1,\n", " zorder=20))\n", " if display_num:\n", " plt.text(dfFrame.loc[pid]['x']-1,dfFrame.loc[pid]['y']-1.3,str(pid),fontsize=8, color='black', zorder=30)\n", " \n", " return fig, ax, dfFrame\n", "\n", "anim = VideoClip(lambda x: mplfig_to_npimage(draw_frame(x)[0]), duration=length)\n", "\n", "#to save the animation to a file, uncomment the next line \n", "#anim.to_videofile('working with positional data - version 1.mp4', fps=fps)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Numerical Superiority\n", "\n", "As a first approach, let’s define the active zone as the smallest possible area between the goal line and a parallel line that includes the ball and maximizes the attacking superiority. The superiority metric will be the difference between attackers and defenders in the active zone." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def count_players(dfFrame, pid):\n", " count = dfFrame.join(dfPlayers.team)[dfFrame['x']<=dfFrame.loc[pid]['x']].groupby('team').agg('count').max(axis=1)\n", " try:\n", " num_attack = count['attack']\n", " except KeyError:\n", " num_attack = 0\n", " try:\n", " num_defense = count['defense']\n", " except KeyError:\n", " num_defense = 0\n", " return (num_attack-num_defense)\n", "\n", "def draw_area(t):\n", " fig, ax, dfFrame = draw_frame(t)\n", "\n", " \n", " maxX = dfFrame.loc[0]['x']\n", " superiority = count_players(dfFrame, 0)\n", "\n", " dfAttackers = dfFrame[(dfFrame.index.get_level_values(0).isin(attackers)) & (dfFrame['x']>maxX)]\n", " \n", " for pid, player in dfAttackers.iterrows():\n", " count = count_players(dfFrame, pid)\n", " if count>superiority:\n", " maxX = dfFrame.loc[pid]['x']\n", " superiority = count\n", " \n", " if superiority<0:\n", " color='red'\n", " else:\n", " color='black'\n", " \n", " plt.text(-5,110,str(superiority),fontsize=25, color=color)\n", " \n", "\n", " ax.add_patch(plt.Rectangle((0, 0), maxX, 100,\n", " edgecolor=\"none\", facecolor=\"yellow\", alpha=0.1))\n", "\n", " return fig, ax\n", "\n", "\n", "anim = VideoClip(lambda x: mplfig_to_npimage(draw_area(x)[0]), duration=length)\n", "\n", "#to save the animation to a file, uncomment the next line \n", "#anim.to_videofile('working with positional data - version 2.mp4', fps=fps)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Marking\n", "\n", "We start by identifying, for each defender, who the closest but farther from the goal attacker is. If the distance to that attacker is less than a certain marking distance (a few meters), we consider that the defender is marking the attacker. If no attacker is closer than that distance, then we assume the defender is marking a zone (a circle with the radius equal to the marking distance)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def closest_player(node, nodes):\n", " nodes = np.asarray(nodes)\n", " deltas = nodes - node\n", " dist = np.einsum('ij,ij->i', deltas, deltas)\n", " return dist.argsort()[0], dist[dist.argsort()[0]]\n", "\n", "def draw_marking(t):\n", " fig, ax, dfFrame = draw_frame(t)\n", "\n", " dfAttackers = dfFrame[dfFrame.index.get_level_values(0).isin(attackers)]\n", "\n", " for pid in defenders:\n", " circle = False\n", " dfMarking = dfAttackers[dfAttackers['x']>(dfFrame.loc[pid]['x'])]\n", "\n", " \n", " if dfMarking.shape[0]>0:\n", " closest, closest_dist = closest_player(dfFrame.loc[pid].values,\n", " dfMarking.values)\n", "\n", " if closest_dist<75:\n", " ax.add_line(plt.Line2D([dfFrame.loc[pid]['x'], dfMarking.iloc[closest]['x']],\n", " [dfFrame.loc[pid]['y'], dfMarking.iloc[closest]['y']],\n", " c='red', zorder=30))\n", " else:\n", " circle = True\n", "\n", "\n", " else:\n", " circle = True\n", " \n", " if circle:\n", " ax.add_artist(Ellipse((dfFrame.loc[pid]['x'],\n", " dfFrame.loc[pid]['y']),\n", " 10/X_SIZE*100, 10/Y_SIZE*100,\n", " edgecolor='gray',\n", " linewidth=0,\n", " facecolor='gray',\n", " alpha=0.2,\n", " zorder=20))\n", " \n", " return fig, ax\n", "\n", "anim = VideoClip(lambda x: mplfig_to_npimage(draw_marking(x)[0]), duration=length)\n", "\n", "#to save the animation to a file, uncomment the next line \n", "#anim.to_videofile('working with positional data - version 3.mp4', fps=fps)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Runs & Passing Options\n", "\n", "We start by identifying whether each attacker is marked or not. In this case, we are using the expected future attacker position to establish marking — that way, we enable forward runs to open passing options. We also use a different function for the distance (numpy based, so it should be more efficient). Also, for the OCD of you: yes, I know there's a bug in the distance calculation. \n", "\n", "We then plot lines between the player who has possession of the ball and all unmarked attackers." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dfFuture = (df.unstack()+df.unstack().diff()*fps).stack()\n", "\n", "def draw_passing(t):\n", " fig, ax, dfFrame = draw_frame(t)\n", "\n", " if ((dfFrame==dfFrame.loc[0]).sum(axis=1)>1).sum()>1:\n", " f = int(t*fps)\n", " try:\n", " dfFutureFrame = dfFuture.loc[f].join(dfPlayers.team) if len(dfFuture.loc[f])>0 else dfFrame.join(dfPlayers.team)\n", " except:\n", " dfFutureFrame = dfFrame.join(dfPlayers.team)\n", "\n", " marked_players = []\n", "\n", " for pid in defenders:\n", " dists = dfFutureFrame[(dfFutureFrame.team=='attack') & (dfFutureFrame.x>=dfFrame.loc[pid].x)\n", " ].apply(lambda x: np.linalg.norm(x[['x', 'y']]-dfFutureFrame.loc[pid][['x', 'y']]), axis=1)\n", "\n", " if len(dists)>0:\n", " if dists.min()<12:\n", " marked_players.append(dists.idxmin())\n", " \n", " for pid in attackers:\n", " if pid not in marked_players:\n", " ax.add_line(plt.Line2D([dfFrame.loc[0]['x'], dfFutureFrame.loc[pid]['x']],\n", " [dfFrame.loc[0]['y'], dfFutureFrame.loc[pid]['y']],\n", " c='black', zorder=30))\n", " return fig, ax\n", "\n", "anim = VideoClip(lambda x: mplfig_to_npimage(draw_passing(x)[0]), duration=length)\n", "\n", "#to save the animation to a file, uncomment the next line \n", "#anim.to_videofile('working with positional data - version 4.mp4', fps=fps)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Passing Quality\n", "\n", "For this metric, we show the actual pass over the passing options (reused from the last metric) at the moment the pass was made." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dfX = df.unstack()['x']\n", "\n", "dfChange = df.unstack()[np.sum((dfX.apply(lambda x: x/dfX[0])==1) !=\n", " (dfX.shift(-1).apply(lambda x: x/dfX.shift(-1)[0])==1)\n", " ,axis=1)>0]\n", "\n", "for i in range(1,dfChange.shape[0]-2, 2):\n", " f = dfChange.index[i]\n", " f2 = dfChange.index[i+1]\n", " fig, ax = draw_passing(f/fps)\n", " ax.add_line(plt.Line2D([dfChange.loc[f,('x', 0)], dfChange.loc[f2,('x', 0)]],\n", " [dfChange.loc[f,('y', 0)], dfChange.loc[f2,('y', 0)]],\n", " c='red', zorder=30))\n", " \n", " fig.set_size_inches(X_SIZE/15/2, Y_SIZE/15)\n", " ax.set_xlim(-5,50)\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }