analiza-danych-sportowych-s.../script.ipynb

232 lines
43 KiB
Plaintext
Raw Permalink Normal View History

2021-12-20 00:52:17 +01:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"id": "a4045b0f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2021-12-20 00:59:44 +01:00
"Requirement already satisfied: pandas in c:\\users\\piotr\\anaconda3\\lib\\site-packages (1.3.5)\n",
2021-12-20 00:52:17 +01:00
"Requirement already satisfied: python-dateutil>=2.7.3 in c:\\users\\piotr\\anaconda3\\lib\\site-packages (from pandas) (2.8.2)\n",
"Requirement already satisfied: pytz>=2017.3 in c:\\users\\piotr\\anaconda3\\lib\\site-packages (from pandas) (2021.3)\n",
2021-12-20 00:59:44 +01:00
"Requirement already satisfied: numpy>=1.17.3 in c:\\users\\piotr\\appdata\\roaming\\python\\python38\\site-packages (from pandas) (1.21.4)\n",
2021-12-20 00:52:17 +01:00
"Requirement already satisfied: six>=1.5 in c:\\users\\piotr\\anaconda3\\lib\\site-packages (from python-dateutil>=2.7.3->pandas) (1.16.0)\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"pip install pandas"
]
},
{
"cell_type": "code",
2021-12-20 00:59:44 +01:00
"execution_count": 5,
2021-12-20 00:52:17 +01:00
"id": "12138336",
"metadata": {},
"outputs": [],
"source": [
2021-12-20 00:59:44 +01:00
"import pandas as pd\n",
"import json"
2021-12-20 00:52:17 +01:00
]
},
{
"cell_type": "code",
2021-12-20 00:59:44 +01:00
"execution_count": 6,
2021-12-20 00:52:17 +01:00
"id": "571c44cc",
"metadata": {},
"outputs": [],
"source": [
2021-12-20 00:59:44 +01:00
"with open('../open-data/data/events/3749068.json') as f:\n",
2021-12-20 00:52:17 +01:00
" match = json.load(f)\n",
"\n",
"df = pd.json_normalize(match, sep='_').assign(match_id=\"7567\")\n",
"shots = df[df.type_name == 'Shot'].set_index('id')"
]
},
{
"cell_type": "code",
2021-12-20 00:59:44 +01:00
"execution_count": 7,
2021-12-20 00:52:17 +01:00
"id": "e96953e8",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1MAAAJ0CAYAAAD3ZnmmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8/fFQqAAAACXBIWXMAAAsTAAALEwEAmpwYAABvB0lEQVR4nO3dZ5hkR3m38fvZnJQRklZCEiCDACEtImOCAGMTLdlggslgbAQGgw02waZUrw0Gg8lBGAzIRIPJIicRRJBAiQwCZWmV00ZtqPdDndH2jmZmZ87M9OmeuX/X1dfOdJ8+Xd3T3Xv+p6qeilIKkiRJkqSpWdB1AyRJkiRpGBmmJEmSJKkFw5QkSZIktWCYkiRJkqQWDFOSJEmS1IJhSpIkSZJaMExJ6ouIOCUi/qrrdvRbRJSIOKzrdsxVEfGMiPhe1+0YT0ScGBH/MsHtJ0TEh/rZpkESEedHxB/1+TGPiYiLZ3B/D4iIX8/U/iQNF8OUNEc0YeXaiFjadVv6rTmYWddc1jcBZl3P5eBx7neLA9m5EvrGO2CcyvOb60GwH0GmlPLcUsq/No83owfxXZtrz6etUsp3Syl37LodkrphmJLmgIg4FHgAUIA/3cW2C/vRpn5qDmZWlVJWAXdprt5z5LpSyoVdtk9TMxffo5KkuckwJc0NTwN+CHwAeHrvDRHxgYh4V0R8MSLWAw+OiEdGxC8i4saIuCQiXtKz/aMj4qyIuC4ivh8RR/bcdn5EvCQizomI6yPifyNiWXPbXhFxckRc2fSQnRwRB+2q4RGxOiI2RsTePdfdLSKuiojFEXFYRHy7ebyrIuJ/p/LCNPv/XERcExHnRsRzmusfDrwCeELTe3V2RLyaGkrf3lz39mbbwyPia80+fh0Rjx/1+r4jIr7QvJ4/iojbj2rGH0XEb5vX9B0REc19bx8R34yIq5vn9uGI2HPU6/3S5vVeHxH/HRH7RcSXmsf6ekTsNZXXY4zX5znN63JN8zqtbq7/TrPJ2c1r8YSIuFXzd72u2f67EbGgp60vb95X10bE+3veG7cYitfb6zXWe3SMdj4jIn7fPO/zIuLJo25/Q/O450XEI3qun/TffzKP02yzrHnP3qr5/ZURsTUidm9+/9eIeHPPc/u3iFgJfAlYHTt6TFc3u1wSEf/TPObPI+IeE/y9xnwvNu+layLi6J7nfWVEHNP8fkpE/HtEnBYRN0TEZ2Pnz9x9on7er2s+C8f03LZ38/e8tHmNPzPe84mIBRHxsoj4XfO+/viox3lqRFzQ3PbK8Z5ns+0+EfH5pr2nN6/j93puv19z/fXNv/frue2ZEfHL5jX9fUT8zQSP809RvwdvbF7Th46z3Zjfm9HTQxf1c9LbK745Ik5pblvavE8vjIjLow4BXT7RayBpCJRSvHjxMuQX4FzgecDdgS3Afj23fQC4HvhD6gmUZcBlwAOa2/cCjm5+vhtwBXBvYCE1mJ0PLG1uPx84DVgN7A38Enhuc9s+wGOBFcBuwCeAz/S04xTgr8Zp/zeB5/T8/nrgxObnjwKv7Gn7/XfxWhxK7aFb1Pz+HeCdzX3XAFcCD2luOwH40Kj779ROYCVwEfBMYFHzGl0F3Lnn9b0auFdz+4eBj/XcvwAnA3sCBzeP//DmtsOAhwFLgX2btr65577nU0PyfsCBzd/mjKYNy5rXLY3zOhwDXDzG9Tc/P+AhzXM5umnD24DvjGr7YT2//ztwIrC4uTwAiJ62/gy4TfPeOBX4t+a2ZwDfG9WOm/fNGO/RUduuBG4A7tj8fgBwl559bwGeQ33PHg9c2tOuSf/9J3qcMV7H7wCPbX7+KvA74BE9t/1Zz3MbeR1u8Tdp2rAJeGTT/n8HfjjOY+7qvfgc4BfUz+BXgDeM+rtfAhzR7OeTI8+d+t66umnDAup78mpg3+b2LwD/S/2uWAw8aILn83fU9+xB1PfUu4GPNrfdGVgHPLC57Y3AVuCPxnm+H2suK5r7XkTzPqK+x64Fntq8Fk9qft+nuf1RwO2BAB4EbGDH99zN7Qbu2Ox3dc/3x+3Hac9435u3eB2a63enfkf+TfP7m4DPNW3fDfg88O9T+a734sXL4F3smZKGXETcHzgE+Hgp5SfUg7q/HLXZZ0spp5ZStpdSNlEPPu8cEbuXUq4tpZzRbPfXwLtLKT8qpWwrpZwEbAbu07Ovt5ZSLi2lXEM9GFgDUEq5upTyyVLKhlLKjcCrqQcxk/ER6sEQERHAE5vraNp6CPVgZ1MpZdLFBiLiNtQD9H9q7nsW8F5qT95kPRo4v5Ty/lLK1lLKmdQD0b/o2ebTpZTTSilbqWFqzah9vLaUcl2pww2/xY7X7NxSytdKKZtLKVdSDy5Hv2ZvK6VcXkq5BPgu8KNSypnN3/HT1APq8axuehpuvgD377n9ycD7SilnlFI2Ay8H7ht12OhYtlADxiGllC2lDq8sPbe/vZRyUfPeeDXN33SSRr9HR9sOHBERy0spl5VSft5z2wWllPeUUrYBJzVt3K/l33+ix+n1beBBEbEIOBJ4a/P7MuCe1EA1Wd8rpXyxaf8HgaPG2W7C92Ip5T3UEys/or4Go3t+PlhK+VkpZT3wL8Djow6pfArwxaYN20spXwN+DDwyIg4AHkE9aXJt83f/9gTP5bnAK0spFzfvqROAxzWv0+OAk0sp32lu+xfq630LTbseSz1ZsKGU8gvq33bEo4DfllI+2LwWHwV+BTymeS2+UEr5Xam+TQ28DxjjobZRg92dI2JxKeX8Usrvxnlu431vjtX+BdTvsFNKKe9uvtf+GnhxKeWa5jvyNdTvOklDzDAlDb+nA18tpVzV/P4RRg31o5557fVY6lnoC6IOobtvc/0hwD+MOvi+DbUnasTanp83AKsAImJFRLy7GcJzA/Vgcs+Y3PyXT1IP4g+gnrXeTg0OAP9IPbt8WjME6lmT2N+I1cDIgcuIC6hn4ifrEODeo16TJwP792wz5muyq9ujDtn7WDNk6AbgQ8CtRt338p6fN47x++jH6nVpKWXP3gvQG0ZXU18PAEop66g9EuO9Pq+nHqx/tRk69bJRt/e+zy5g5/fNrox+j96sOfh/AvVA/bKoQyoP79lkbc+2G5ofVzHFv/8kHqfXt6k9EkcDPwW+Rg3C9wHOLaVcPd7zGcPo98eyJnyMNpn34nuovU9vawJLr9F/n8XU99shwF+MEboPoH7+rymlXDvJ53II8Ome/fySGlj2o/49bm5D83qP9zrtS+1x6m1z7887vXd7ntOBABHxiIj4YdShj9dRv+9Gf7YopZwLvIga+q5oPo/jvW/H+94cy6upvU8v7Hk+K4Cf9Lw2X26ulzTEDFPSEGvG2z+eekZ8bUSsBV4MHBURvWe3e3sPKKWcXko5Frg18Bng481NFwGvHnUAvqI567sr/0AdMnPvUsru1FAENQhNqDlQ+yr1QPYvqcPkSnPb2lLKc0opq4G/Ad4Zk68wdymwd0Ts1nPdwdThTjDqdRnnuouAb496TVaVUo6fZBsm8prm8e7avGZPYRKv1wy6lHrwC0DUeTD7sOP12Ukp5cZSyj+UUm5HLXTy96Pml9ym5+eDm/0DrKceSI48Tu/B/827n6ihpZSvlFIeRj3A/xU1NOzKlP/+U3ic71Pf739GfX/8otn3I6lBa8ynMYk2T2TC92JErALeDPw3cEL0zFVqjP77bKEOE7yI2mvVu9+VpZTXNrftHT1z+XbxfC6iDnfs3deypmf1st42RMQK6vttLFdShwD2zrvsbf9O792e53RJ1IqmnwTeQB3yvCfwRcb5bJVSPlJKGenhL8DrxtluvO/NnUTEE6m9so8rpWxprr6KevLjLj2vyx6lFs2RNMQMU9JwO4561vfO1KFja4A7UXt1xhzKFBFLIuLJEbFH8x/9DewYavMe4LkRce+oVkbEo0YdjI5nN+rBwnXNQVya4nP5SNPmx7FjiB8R8Rexo5DFtdSDnTGHBo1WSrmIetD771GLBhwJPJvaAwS1l+fQZkgOPdfdruf3k4E7RJ04v7i53DMi7jTF5zeW3ahzSK6PiAOBl87APqfio8AzI2J
"text/plain": [
"<Figure size 1080x792 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from FCPython import createPitch\n",
"\n",
"pitch_width = 120\n",
"pitch_height = 80\n",
"\n",
"fig, ax = createPitch(pitch_width, pitch_height, 'yards', 'gray')\n",
"\n",
"home_team = 'Tottenham Hotspur'\n",
"away_team = 'Arsenal'\n",
"\n",
"for i, shot in shots.iterrows():\n",
" x = shot['location'][0]\n",
" y = shot['location'][1]\n",
" \n",
" goal = shot['shot_outcome_name']=='Goal'\n",
" team_name = shot['team_name']\n",
" \n",
" circle_size = np.sqrt(shot['shot_statsbomb_xg'] * 30)\n",
" \n",
" if team_name == home_team:\n",
" if goal:\n",
" shot_circle = plt.Circle((x, pitch_height-y), circle_size, color='grey')\n",
" plt.text((x+1), pitch_height-y+1, shot['player_name'])\n",
" else:\n",
" shot_circle = plt.Circle((x, pitch_height-y), circle_size, color='grey')\n",
" shot_circle.set_alpha(.1)\n",
" elif team_name == away_team:\n",
" if goal:\n",
" shot_circle = plt.Circle((pitch_width-x, y), circle_size, color='red')\n",
" plt.text((pitch_width-x+1), y+1, shot['player_name'])\n",
" else:\n",
" shot_circle = plt.Circle((pitch_width-x, y), circle_size, color='red')\n",
" shot_circle.set_alpha(.1)\n",
" \n",
" ax.add_patch(shot_circle)\n",
" \n",
"plt.text(5, 75, away_team)\n",
"plt.text(100, 75, home_team)\n",
"\n",
"plt.title('Arsenal vs Tottenham Hotspur shots with expected goals size')\n",
"\n",
"fig.set_size_inches(15, 11)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6b1fa9b1",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "58c9a382",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "809fbf54",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "9697dddd",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "87f42eef",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "fc1e491b",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "af4a2687",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "c63f8f82",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "bf5ec0a2",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "80ddb8b1",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "77f93ee6",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}