{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "7baffbf8-615f-44b3-9d8d-6852da57f3bf", "metadata": {}, "outputs": [], "source": [ "from statsbombpy import sb\n", "from mplsoccer.pitch import Pitch\n", "import mplsoccer as mpls\n", "\n", "import statsbombpy\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "from mplEasyAnimate import animation\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "61e4ac1a-ecdc-43e1-aad1-0b1d556a4b2e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "credentials were not supplied. open data access only\n" ] }, { "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", "
competition_idseason_idcountry_namecompetition_namecompetition_gendercompetition_youthcompetition_internationalseason_namematch_updatedmatch_updated_360match_available_360match_available
351137SpainLa LigamaleFalseFalse2004/20052020-07-29T05:002021-06-13T16:17:31.694None2020-07-29T05:00
36493United States of AmericaNWSLfemaleFalseFalse20182021-11-06T05:53:29.4350162021-06-13T16:17:31.694None2021-11-06T05:53:29.435016
37244EnglandPremier LeaguemaleFalseFalse2003/20042021-11-14T22:29:00.6461202021-06-13T16:17:31.694None2021-11-14T22:29:00.646120
385543EuropeUEFA EuromaleFalseTrue20202021-11-11T14:00:16.1058092021-11-11T13:54:37.5073762021-11-11T13:54:37.5073762021-11-11T14:00:16.105809
397230InternationalWomen's World CupfemaleFalseTrue20192020-07-29T05:002021-06-13T16:17:31.694None2020-07-29T05:00
\n", "
" ], "text/plain": [ " competition_id season_id country_name competition_name \\\n", "35 11 37 Spain La Liga \n", "36 49 3 United States of America NWSL \n", "37 2 44 England Premier League \n", "38 55 43 Europe UEFA Euro \n", "39 72 30 International Women's World Cup \n", "\n", " competition_gender competition_youth competition_international \\\n", "35 male False False \n", "36 female False False \n", "37 male False False \n", "38 male False True \n", "39 female False True \n", "\n", " season_name match_updated match_updated_360 \\\n", "35 2004/2005 2020-07-29T05:00 2021-06-13T16:17:31.694 \n", "36 2018 2021-11-06T05:53:29.435016 2021-06-13T16:17:31.694 \n", "37 2003/2004 2021-11-14T22:29:00.646120 2021-06-13T16:17:31.694 \n", "38 2020 2021-11-11T14:00:16.105809 2021-11-11T13:54:37.507376 \n", "39 2019 2020-07-29T05:00 2021-06-13T16:17:31.694 \n", "\n", " match_available_360 match_available \n", "35 None 2020-07-29T05:00 \n", "36 None 2021-11-06T05:53:29.435016 \n", "37 None 2021-11-14T22:29:00.646120 \n", "38 2021-11-11T13:54:37.507376 2021-11-11T14:00:16.105809 \n", "39 None 2020-07-29T05:00 " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sb.competitions().tail()" ] }, { "cell_type": "code", "execution_count": 3, "id": "888d932e-204b-4834-a284-0cb5708a0e3e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "credentials were not supplied. open data access only\n" ] }, { "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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", "
match_idmatch_datekick_offcompetitionseasonhome_teamaway_teamhome_scoreaway_scorematch_statusmatch_status_360last_updatedlast_updated_360match_weekcompetition_stagestadiumrefereedata_versionshot_fidelity_versionxy_fidelity_version
037887532021-06-1615:00:00.000Europe - UEFA Euro2020FinlandRussia01availableavailable2021-11-11T14:00:16.1058092021-09-22T16:39:05.6975122Group StageSaint-Petersburg StadiumDanny Desmond Makkelie1.1.022
137887652021-06-2018:00:00.000Europe - UEFA Euro2020SwitzerlandTurkey31availableavailable2021-08-02T14:58:49.0572021-11-11T13:54:37.5073763Group StageBakı Olimpiya StadionuSlavko Vinčić1.1.022
237951072021-07-0221:00:00.000Europe - UEFA Euro2020BelgiumItaly12availableavailable2021-07-19T12:41:55.8982021-09-23T00:02:51.4958625Quarter-finalsAllianz Arena (München)Slavko Vinčić1.1.022
337952212021-07-0721:00:00.000Europe - UEFA Euro2020EnglandDenmark21availableavailable2021-07-09T12:38:23.4372021-09-22T22:33:37.4943666Semi-finalsWembley Stadium (London)Danny Desmond Makkelie1.1.022
437955062021-07-1121:00:00.000Europe - UEFA Euro2020ItalyEngland11availableavailable2021-07-12T12:27:50.6472021-09-22T22:40:31.6905507FinalWembley Stadium (London)Björn Kuipers1.1.022
537946882021-06-2918:00:00.000Europe - UEFA Euro2020EnglandGermany20availableavailable2021-08-21T19:00:29.0362021-09-22T23:46:25.4571494Round of 16Wembley Stadium (London)Danny Desmond Makkelie1.1.022
637946922021-06-2921:00:00.000Europe - UEFA Euro2020SwedenUkraine12availableavailable2021-10-09T14:22:25.5600752021-09-22T23:38:19.4831994Round of 16Hampden ParkDaniele Orsato1.1.022
737946862021-06-2818:00:00.000Europe - UEFA Euro2020CroatiaSpain35availableavailable2021-06-29T12:51:11.5072021-09-22T23:30:10.4285634Round of 16Nya ParkenCüneyt Çakιr1.1.022
837946872021-06-2721:00:00.000Europe - UEFA Euro2020BelgiumPortugal10availableavailable2021-07-05T13:37:21.6332021-09-22T16:40:48.0204744Round of 16Estadio Olímpico de Sevilla (Sevilla)Felix Brych1.1.022
937946852021-06-2621:00:00.000Europe - UEFA Euro2020ItalyAustria21availableavailable2021-06-27T13:56:22.0302021-09-22T16:40:41.3100014Round of 16Wembley Stadium (London)Anthony Taylor1.1.022
1037887742021-06-2321:00:00.000Europe - UEFA Euro2020GermanyHungary22availableavailable2021-09-16T22:37:38.4761972021-09-22T16:40:32.7029103Group StageAllianz Arena (München)Sergey Karasev1.1.022
1137887712021-06-2221:00:00.000Europe - UEFA Euro2020CroatiaScotland31availableavailable2021-06-23T13:41:52.6722021-09-22T16:40:26.0785823Group StageHampden ParkFernando Andrés Rapallini1.1.022
1237887722021-06-2221:00:00.000Europe - UEFA Euro2020Czech RepublicEngland01availableavailable2021-06-23T13:36:16.6402021-09-22T16:40:22.1285103Group StageWembley Stadium (London)Artur Manuel Ribeiro Soares Dias1.1.022
1337887682021-06-2121:00:00.000Europe - UEFA Euro2020FinlandBelgium02availableavailable2021-06-22T13:47:34.9252021-09-22T16:40:14.2973133Group StageSaint-Petersburg StadiumFelix Brych1.1.022
1437887672021-06-2118:00:00.000Europe - UEFA Euro2020UkraineAustria01availableavailable2021-06-27T13:34:43.1042021-09-22T16:40:10.4860103Group StageArena Naţională (Bucureşti)Cüneyt Çakιr1.1.022
1537887632021-06-1915:00:00.000Europe - UEFA Euro2020HungaryFrance11availableavailable2021-06-21T13:08:32.5222021-09-22T16:40:01.2817352Group StagePuskás ArénaMichael Oliver1.1.022
1637887592021-06-1821:00:00.000Europe - UEFA Euro2020EnglandScotland00availableavailable2021-07-14T12:59:48.6022021-09-22T16:39:45.1089672Group StageWembley Stadium (London)Antonio Miguel Mateu Lahoz1.1.022
1737887582021-06-1715:00:00.000Europe - UEFA Euro2020UkraineNorth Macedonia21availableavailable2021-06-19T12:31:42.0852021-09-22T16:39:24.0570392Group StageArena Naţională (Bucureşti)Fernando Andrés Rapallini1.1.022
1837887572021-06-1718:00:00.000Europe - UEFA Euro2020DenmarkBelgium12availableavailable2021-07-24T16:17:22.2512021-09-22T16:39:19.2386052Group StageNya ParkenBjörn Kuipers1.1.022
1937887452021-06-1315:00:00.000Europe - UEFA Euro2020EnglandCroatia10availableavailable2021-07-19T16:25:28.9552021-09-22T16:38:34.4523091Group StageWembley Stadium (London)Daniele Orsato1.1.022
2037887462021-06-1321:00:00.000Europe - UEFA Euro2020NetherlandsUkraine32availableavailable2021-06-14T12:58:15.6732021-09-22T16:38:23.7092301Group StageJohan Cruijff Arena (Amsterdam)Felix Brych1.1.022
2137946912021-06-2821:00:00.000Europe - UEFA Euro2020FranceSwitzerland33availableavailable2021-06-29T04:56:23.5472021-09-22T16:40:50.5209654Round of 16Arena Naţională (Bucureşti)Fernando Andrés Rapallini1.1.022
2237946902021-06-2718:00:00.000Europe - UEFA Euro2020NetherlandsCzech Republic02availableavailable2021-06-28T12:45:34.8812021-09-22T16:40:45.8098994Round of 16Puskás ArénaSergey Karasev1.1.022
2337946892021-06-2618:00:00.000Europe - UEFA Euro2020WalesDenmark04availableavailable2021-08-10T14:33:01.8312021-09-22T16:40:43.8336764Round of 16Johan Cruijff Arena (Amsterdam)Daniel Siebert1.1.022
2437887692021-06-2121:00:00.000Europe - UEFA Euro2020RussiaDenmark14availableavailable2021-07-15T14:05:30.2702021-09-22T16:40:07.1939643Group StageNya ParkenClément Turpin1.1.022
2537887612021-06-1815:00:00.000Europe - UEFA Euro2020SwedenSlovakia10availableavailable2021-06-20T13:02:21.4422021-09-22T16:39:35.4427782Group StageSaint-Petersburg StadiumDaniel Siebert1.1.022
2637887642021-06-1918:00:00.000Europe - UEFA Euro2020PortugalGermany24availableavailable2021-06-20T13:10:40.9112021-09-22T16:39:51.8353002Group StageAllianz Arena (München)Anthony Taylor1.1.022
2737887662021-06-2018:00:00.000Europe - UEFA Euro2020ItalyWales10availableavailable2021-06-21T20:35:17.9122021-09-22T16:40:03.8942923Group StageStadio Olimpico (Roma)Ovidiu Alin Hațegan1.1.022
2837887542021-06-1621:00:00.000Europe - UEFA Euro2020ItalySwitzerland30availableavailable2021-06-17T13:24:15.9902021-09-22T16:39:11.8358412Group StageStadio Olimpico (Roma)Sergey Karasev1.1.022
2937887552021-06-1618:00:00.000Europe - UEFA Euro2020TurkeyWales02availableavailable2021-07-21T12:20:01.4062021-09-22T16:39:15.4016392Group StageBakı Olimpiya StadionuArtur Manuel Ribeiro Soares Dias1.1.022
3037887732021-06-2321:00:00.000Europe - UEFA Euro2020PortugalFrance22availableavailable2021-06-26T12:36:01.6962021-09-22T16:40:30.0617313Group StagePuskás ArénaAntonio Miguel Mateu Lahoz1.1.022
3137887622021-06-1921:00:00.000Europe - UEFA Euro2020SpainPoland11availableavailable2021-09-06T18:23:20.6761612021-09-22T16:39:57.9847442Group StageEstadio Olímpico de Sevilla (Sevilla)Daniele Orsato1.1.022
3237887602021-06-1818:00:00.000Europe - UEFA Euro2020CroatiaCzech Republic11availableavailable2021-06-20T13:06:34.0432021-09-22T16:39:41.3253662Group StageHampden ParkCarlos del Cerro Grande1.1.022
3337887472021-06-1318:00:00.000Europe - UEFA Euro2020AustriaNorth Macedonia31availableavailable2021-07-07T13:09:42.8912021-09-22T16:38:29.2891071Group StageArena Naţională (Bucureşti)Lars Christian Andreas Ekberg1.1.022
3437887412021-06-1121:00:00.000Europe - UEFA Euro2020TurkeyItaly03availableavailable2021-06-12T12:49:02.0702021-09-22T16:38:05.0590901Group StageStadio Olimpico (Roma)Danny Desmond Makkelie1.1.022
3537952202021-07-0621:00:00.000Europe - UEFA Euro2020ItalySpain11availableavailable2021-08-09T20:41:31.2412021-09-22T22:25:01.8661986Semi-finalsWembley Stadium (London)Felix Brych1.1.022
3637887702021-06-2118:00:00.000Europe - UEFA Euro2020North MacedoniaNetherlands03availableavailable2021-09-26T22:04:17.4534382021-09-22T16:40:19.2778473Group StageJohan Cruijff Arena (Amsterdam)Istvan Kovacs1.1.022
3737951082021-07-0218:00:00.000Europe - UEFA Euro2020SwitzerlandSpain11availableavailable2021-07-03T12:52:01.3202021-09-22T23:54:54.8232375Quarter-finalsSaint-Petersburg StadiumMichael Oliver1.1.022
3837951872021-07-0321:00:00.000Europe - UEFA Euro2020UkraineEngland04availableavailable2021-07-04T16:39:20.7462021-09-22T22:09:58.3741955Quarter-finalsStadio Olimpico (Roma)Felix Brych1.1.022
3937951092021-07-0318:00:00.000Europe - UEFA Euro2020Czech RepublicDenmark12availableavailable2021-07-04T13:05:32.8322021-09-22T22:16:30.4392455Quarter-finalsBakı Olimpiya StadionuBjörn Kuipers1.1.022
4037887562021-06-1721:00:00.000Europe - UEFA Euro2020NetherlandsAustria20availableavailable2021-06-19T12:26:56.6362021-09-22T16:39:30.4987042Group StageJohan Cruijff Arena (Amsterdam)Orel Grinfeeld1.1.022
4137887492021-06-1418:00:00.000Europe - UEFA Euro2020PolandSlovakia12availableavailable2021-06-15T13:11:56.4122021-09-22T16:38:40.6325861Group StageSaint-Petersburg StadiumOvidiu Alin Hațegan1.1.022
4237887502021-06-1421:00:00.000Europe - UEFA Euro2020SpainSweden00availableavailable2021-06-16T12:30:09.2072021-09-22T16:38:45.9601821Group StageEstadio Olímpico de Sevilla (Sevilla)Slavko Vinčić1.1.022
4337887482021-06-1415:00:00.000Europe - UEFA Euro2020ScotlandCzech Republic02availableavailable2021-08-08T19:08:28.2332021-09-22T16:38:50.0970131Group StageHampden ParkDaniel Siebert1.1.022
4437887512021-06-1521:00:00.000Europe - UEFA Euro2020FranceGermany10availableavailable2021-08-27T17:33:01.4582021-09-22T16:38:55.6195521Group StageAllianz Arena (München)Carlos del Cerro Grande1.1.022
4537887522021-06-1518:00:00.000Europe - UEFA Euro2020HungaryPortugal03availableavailable2021-06-17T16:25:36.8222021-09-22T16:39:00.0605171Group StagePuskás ArénaCüneyt Çakιr1.1.022
4637887422021-06-1218:00:00.000Europe - UEFA Euro2020DenmarkFinland01availableavailable2021-06-14T12:52:32.9952021-09-22T16:38:10.5446271Group StageNya ParkenAnthony Taylor1.1.022
4737887752021-06-2318:00:00.000Europe - UEFA Euro2020SlovakiaSpain05availableavailable2021-06-24T03:38:10.4942021-09-22T16:40:35.2972563Group StageEstadio Olímpico de Sevilla (Sevilla)Björn Kuipers1.1.022
4837887762021-06-2318:00:00.000Europe - UEFA Euro2020SwedenPoland32availableavailable2021-06-24T15:06:44.5312021-09-22T16:40:38.1945203Group StageSaint-Petersburg StadiumMichael Oliver1.1.022
4937887432021-06-1221:00:00.000Europe - UEFA Euro2020BelgiumRussia30availableavailable2021-06-13T13:10:11.6022021-09-22T16:38:15.3689591Group StageSaint-Petersburg StadiumAntonio Miguel Mateu Lahoz1.1.022
5037887442021-06-1215:00:00.000Europe - UEFA Euro2020WalesSwitzerland11availableavailable2021-06-20T12:57:59.2582021-09-22T16:38:18.4337991Group StageBakı Olimpiya StadionuClément Turpin1.1.022
\n", "
" ], "text/plain": [ " match_id match_date kick_off competition season \\\n", "0 3788753 2021-06-16 15:00:00.000 Europe - UEFA Euro 2020 \n", "1 3788765 2021-06-20 18:00:00.000 Europe - UEFA Euro 2020 \n", "2 3795107 2021-07-02 21:00:00.000 Europe - UEFA Euro 2020 \n", "3 3795221 2021-07-07 21:00:00.000 Europe - UEFA Euro 2020 \n", "4 3795506 2021-07-11 21:00:00.000 Europe - UEFA Euro 2020 \n", "5 3794688 2021-06-29 18:00:00.000 Europe - UEFA Euro 2020 \n", "6 3794692 2021-06-29 21:00:00.000 Europe - UEFA Euro 2020 \n", "7 3794686 2021-06-28 18:00:00.000 Europe - UEFA Euro 2020 \n", "8 3794687 2021-06-27 21:00:00.000 Europe - UEFA Euro 2020 \n", "9 3794685 2021-06-26 21:00:00.000 Europe - UEFA Euro 2020 \n", "10 3788774 2021-06-23 21:00:00.000 Europe - UEFA Euro 2020 \n", "11 3788771 2021-06-22 21:00:00.000 Europe - UEFA Euro 2020 \n", "12 3788772 2021-06-22 21:00:00.000 Europe - UEFA Euro 2020 \n", "13 3788768 2021-06-21 21:00:00.000 Europe - UEFA Euro 2020 \n", "14 3788767 2021-06-21 18:00:00.000 Europe - UEFA Euro 2020 \n", "15 3788763 2021-06-19 15:00:00.000 Europe - UEFA Euro 2020 \n", "16 3788759 2021-06-18 21:00:00.000 Europe - UEFA Euro 2020 \n", "17 3788758 2021-06-17 15:00:00.000 Europe - UEFA Euro 2020 \n", "18 3788757 2021-06-17 18:00:00.000 Europe - UEFA Euro 2020 \n", "19 3788745 2021-06-13 15:00:00.000 Europe - UEFA Euro 2020 \n", "20 3788746 2021-06-13 21:00:00.000 Europe - UEFA Euro 2020 \n", "21 3794691 2021-06-28 21:00:00.000 Europe - UEFA Euro 2020 \n", "22 3794690 2021-06-27 18:00:00.000 Europe - UEFA Euro 2020 \n", "23 3794689 2021-06-26 18:00:00.000 Europe - UEFA Euro 2020 \n", "24 3788769 2021-06-21 21:00:00.000 Europe - UEFA Euro 2020 \n", "25 3788761 2021-06-18 15:00:00.000 Europe - UEFA Euro 2020 \n", "26 3788764 2021-06-19 18:00:00.000 Europe - UEFA Euro 2020 \n", "27 3788766 2021-06-20 18:00:00.000 Europe - UEFA Euro 2020 \n", "28 3788754 2021-06-16 21:00:00.000 Europe - UEFA Euro 2020 \n", "29 3788755 2021-06-16 18:00:00.000 Europe - UEFA Euro 2020 \n", "30 3788773 2021-06-23 21:00:00.000 Europe - UEFA Euro 2020 \n", "31 3788762 2021-06-19 21:00:00.000 Europe - UEFA Euro 2020 \n", "32 3788760 2021-06-18 18:00:00.000 Europe - UEFA Euro 2020 \n", "33 3788747 2021-06-13 18:00:00.000 Europe - UEFA Euro 2020 \n", "34 3788741 2021-06-11 21:00:00.000 Europe - UEFA Euro 2020 \n", "35 3795220 2021-07-06 21:00:00.000 Europe - UEFA Euro 2020 \n", "36 3788770 2021-06-21 18:00:00.000 Europe - UEFA Euro 2020 \n", "37 3795108 2021-07-02 18:00:00.000 Europe - UEFA Euro 2020 \n", "38 3795187 2021-07-03 21:00:00.000 Europe - UEFA Euro 2020 \n", "39 3795109 2021-07-03 18:00:00.000 Europe - UEFA Euro 2020 \n", "40 3788756 2021-06-17 21:00:00.000 Europe - UEFA Euro 2020 \n", "41 3788749 2021-06-14 18:00:00.000 Europe - UEFA Euro 2020 \n", "42 3788750 2021-06-14 21:00:00.000 Europe - UEFA Euro 2020 \n", "43 3788748 2021-06-14 15:00:00.000 Europe - UEFA Euro 2020 \n", "44 3788751 2021-06-15 21:00:00.000 Europe - UEFA Euro 2020 \n", "45 3788752 2021-06-15 18:00:00.000 Europe - UEFA Euro 2020 \n", "46 3788742 2021-06-12 18:00:00.000 Europe - UEFA Euro 2020 \n", "47 3788775 2021-06-23 18:00:00.000 Europe - UEFA Euro 2020 \n", "48 3788776 2021-06-23 18:00:00.000 Europe - UEFA Euro 2020 \n", "49 3788743 2021-06-12 21:00:00.000 Europe - UEFA Euro 2020 \n", "50 3788744 2021-06-12 15:00:00.000 Europe - UEFA Euro 2020 \n", "\n", " home_team away_team home_score away_score match_status \\\n", "0 Finland Russia 0 1 available \n", "1 Switzerland Turkey 3 1 available \n", "2 Belgium Italy 1 2 available \n", "3 England Denmark 2 1 available \n", "4 Italy England 1 1 available \n", "5 England Germany 2 0 available \n", "6 Sweden Ukraine 1 2 available \n", "7 Croatia Spain 3 5 available \n", "8 Belgium Portugal 1 0 available \n", "9 Italy Austria 2 1 available \n", "10 Germany Hungary 2 2 available \n", "11 Croatia Scotland 3 1 available \n", "12 Czech Republic England 0 1 available \n", "13 Finland Belgium 0 2 available \n", "14 Ukraine Austria 0 1 available \n", "15 Hungary France 1 1 available \n", "16 England Scotland 0 0 available \n", "17 Ukraine North Macedonia 2 1 available \n", "18 Denmark Belgium 1 2 available \n", "19 England Croatia 1 0 available \n", "20 Netherlands Ukraine 3 2 available \n", "21 France Switzerland 3 3 available \n", "22 Netherlands Czech Republic 0 2 available \n", "23 Wales Denmark 0 4 available \n", "24 Russia Denmark 1 4 available \n", "25 Sweden Slovakia 1 0 available \n", "26 Portugal Germany 2 4 available \n", "27 Italy Wales 1 0 available \n", "28 Italy Switzerland 3 0 available \n", "29 Turkey Wales 0 2 available \n", "30 Portugal France 2 2 available \n", "31 Spain Poland 1 1 available \n", "32 Croatia Czech Republic 1 1 available \n", "33 Austria North Macedonia 3 1 available \n", "34 Turkey Italy 0 3 available \n", "35 Italy Spain 1 1 available \n", "36 North Macedonia Netherlands 0 3 available \n", "37 Switzerland Spain 1 1 available \n", "38 Ukraine England 0 4 available \n", "39 Czech Republic Denmark 1 2 available \n", "40 Netherlands Austria 2 0 available \n", "41 Poland Slovakia 1 2 available \n", "42 Spain Sweden 0 0 available \n", "43 Scotland Czech Republic 0 2 available \n", "44 France Germany 1 0 available \n", "45 Hungary Portugal 0 3 available \n", "46 Denmark Finland 0 1 available \n", "47 Slovakia Spain 0 5 available \n", "48 Sweden Poland 3 2 available \n", "49 Belgium Russia 3 0 available \n", "50 Wales Switzerland 1 1 available \n", "\n", " match_status_360 last_updated last_updated_360 \\\n", "0 available 2021-11-11T14:00:16.105809 2021-09-22T16:39:05.697512 \n", "1 available 2021-08-02T14:58:49.057 2021-11-11T13:54:37.507376 \n", "2 available 2021-07-19T12:41:55.898 2021-09-23T00:02:51.495862 \n", "3 available 2021-07-09T12:38:23.437 2021-09-22T22:33:37.494366 \n", "4 available 2021-07-12T12:27:50.647 2021-09-22T22:40:31.690550 \n", "5 available 2021-08-21T19:00:29.036 2021-09-22T23:46:25.457149 \n", "6 available 2021-10-09T14:22:25.560075 2021-09-22T23:38:19.483199 \n", "7 available 2021-06-29T12:51:11.507 2021-09-22T23:30:10.428563 \n", "8 available 2021-07-05T13:37:21.633 2021-09-22T16:40:48.020474 \n", "9 available 2021-06-27T13:56:22.030 2021-09-22T16:40:41.310001 \n", "10 available 2021-09-16T22:37:38.476197 2021-09-22T16:40:32.702910 \n", "11 available 2021-06-23T13:41:52.672 2021-09-22T16:40:26.078582 \n", "12 available 2021-06-23T13:36:16.640 2021-09-22T16:40:22.128510 \n", "13 available 2021-06-22T13:47:34.925 2021-09-22T16:40:14.297313 \n", "14 available 2021-06-27T13:34:43.104 2021-09-22T16:40:10.486010 \n", "15 available 2021-06-21T13:08:32.522 2021-09-22T16:40:01.281735 \n", "16 available 2021-07-14T12:59:48.602 2021-09-22T16:39:45.108967 \n", "17 available 2021-06-19T12:31:42.085 2021-09-22T16:39:24.057039 \n", "18 available 2021-07-24T16:17:22.251 2021-09-22T16:39:19.238605 \n", "19 available 2021-07-19T16:25:28.955 2021-09-22T16:38:34.452309 \n", "20 available 2021-06-14T12:58:15.673 2021-09-22T16:38:23.709230 \n", "21 available 2021-06-29T04:56:23.547 2021-09-22T16:40:50.520965 \n", "22 available 2021-06-28T12:45:34.881 2021-09-22T16:40:45.809899 \n", "23 available 2021-08-10T14:33:01.831 2021-09-22T16:40:43.833676 \n", "24 available 2021-07-15T14:05:30.270 2021-09-22T16:40:07.193964 \n", "25 available 2021-06-20T13:02:21.442 2021-09-22T16:39:35.442778 \n", "26 available 2021-06-20T13:10:40.911 2021-09-22T16:39:51.835300 \n", "27 available 2021-06-21T20:35:17.912 2021-09-22T16:40:03.894292 \n", "28 available 2021-06-17T13:24:15.990 2021-09-22T16:39:11.835841 \n", "29 available 2021-07-21T12:20:01.406 2021-09-22T16:39:15.401639 \n", "30 available 2021-06-26T12:36:01.696 2021-09-22T16:40:30.061731 \n", "31 available 2021-09-06T18:23:20.676161 2021-09-22T16:39:57.984744 \n", "32 available 2021-06-20T13:06:34.043 2021-09-22T16:39:41.325366 \n", "33 available 2021-07-07T13:09:42.891 2021-09-22T16:38:29.289107 \n", "34 available 2021-06-12T12:49:02.070 2021-09-22T16:38:05.059090 \n", "35 available 2021-08-09T20:41:31.241 2021-09-22T22:25:01.866198 \n", "36 available 2021-09-26T22:04:17.453438 2021-09-22T16:40:19.277847 \n", "37 available 2021-07-03T12:52:01.320 2021-09-22T23:54:54.823237 \n", "38 available 2021-07-04T16:39:20.746 2021-09-22T22:09:58.374195 \n", "39 available 2021-07-04T13:05:32.832 2021-09-22T22:16:30.439245 \n", "40 available 2021-06-19T12:26:56.636 2021-09-22T16:39:30.498704 \n", "41 available 2021-06-15T13:11:56.412 2021-09-22T16:38:40.632586 \n", "42 available 2021-06-16T12:30:09.207 2021-09-22T16:38:45.960182 \n", "43 available 2021-08-08T19:08:28.233 2021-09-22T16:38:50.097013 \n", "44 available 2021-08-27T17:33:01.458 2021-09-22T16:38:55.619552 \n", "45 available 2021-06-17T16:25:36.822 2021-09-22T16:39:00.060517 \n", "46 available 2021-06-14T12:52:32.995 2021-09-22T16:38:10.544627 \n", "47 available 2021-06-24T03:38:10.494 2021-09-22T16:40:35.297256 \n", "48 available 2021-06-24T15:06:44.531 2021-09-22T16:40:38.194520 \n", "49 available 2021-06-13T13:10:11.602 2021-09-22T16:38:15.368959 \n", "50 available 2021-06-20T12:57:59.258 2021-09-22T16:38:18.433799 \n", "\n", " match_week competition_stage stadium \\\n", "0 2 Group Stage Saint-Petersburg Stadium \n", "1 3 Group Stage Bakı Olimpiya Stadionu \n", "2 5 Quarter-finals Allianz Arena (München) \n", "3 6 Semi-finals Wembley Stadium (London) \n", "4 7 Final Wembley Stadium (London) \n", "5 4 Round of 16 Wembley Stadium (London) \n", "6 4 Round of 16 Hampden Park \n", "7 4 Round of 16 Nya Parken \n", "8 4 Round of 16 Estadio Olímpico de Sevilla (Sevilla) \n", "9 4 Round of 16 Wembley Stadium (London) \n", "10 3 Group Stage Allianz Arena (München) \n", "11 3 Group Stage Hampden Park \n", "12 3 Group Stage Wembley Stadium (London) \n", "13 3 Group Stage Saint-Petersburg Stadium \n", "14 3 Group Stage Arena Naţională (Bucureşti) \n", "15 2 Group Stage Puskás Aréna \n", "16 2 Group Stage Wembley Stadium (London) \n", "17 2 Group Stage Arena Naţională (Bucureşti) \n", "18 2 Group Stage Nya Parken \n", "19 1 Group Stage Wembley Stadium (London) \n", "20 1 Group Stage Johan Cruijff Arena (Amsterdam) \n", "21 4 Round of 16 Arena Naţională (Bucureşti) \n", "22 4 Round of 16 Puskás Aréna \n", "23 4 Round of 16 Johan Cruijff Arena (Amsterdam) \n", "24 3 Group Stage Nya Parken \n", "25 2 Group Stage Saint-Petersburg Stadium \n", "26 2 Group Stage Allianz Arena (München) \n", "27 3 Group Stage Stadio Olimpico (Roma) \n", "28 2 Group Stage Stadio Olimpico (Roma) \n", "29 2 Group Stage Bakı Olimpiya Stadionu \n", "30 3 Group Stage Puskás Aréna \n", "31 2 Group Stage Estadio Olímpico de Sevilla (Sevilla) \n", "32 2 Group Stage Hampden Park \n", "33 1 Group Stage Arena Naţională (Bucureşti) \n", "34 1 Group Stage Stadio Olimpico (Roma) \n", "35 6 Semi-finals Wembley Stadium (London) \n", "36 3 Group Stage Johan Cruijff Arena (Amsterdam) \n", "37 5 Quarter-finals Saint-Petersburg Stadium \n", "38 5 Quarter-finals Stadio Olimpico (Roma) \n", "39 5 Quarter-finals Bakı Olimpiya Stadionu \n", "40 2 Group Stage Johan Cruijff Arena (Amsterdam) \n", "41 1 Group Stage Saint-Petersburg Stadium \n", "42 1 Group Stage Estadio Olímpico de Sevilla (Sevilla) \n", "43 1 Group Stage Hampden Park \n", "44 1 Group Stage Allianz Arena (München) \n", "45 1 Group Stage Puskás Aréna \n", "46 1 Group Stage Nya Parken \n", "47 3 Group Stage Estadio Olímpico de Sevilla (Sevilla) \n", "48 3 Group Stage Saint-Petersburg Stadium \n", "49 1 Group Stage Saint-Petersburg Stadium \n", "50 1 Group Stage Bakı Olimpiya Stadionu \n", "\n", " referee data_version shot_fidelity_version \\\n", "0 Danny Desmond Makkelie 1.1.0 2 \n", "1 Slavko Vinčić 1.1.0 2 \n", "2 Slavko Vinčić 1.1.0 2 \n", "3 Danny Desmond Makkelie 1.1.0 2 \n", "4 Björn Kuipers 1.1.0 2 \n", "5 Danny Desmond Makkelie 1.1.0 2 \n", "6 Daniele Orsato 1.1.0 2 \n", "7 Cüneyt Çakιr 1.1.0 2 \n", "8 Felix Brych 1.1.0 2 \n", "9 Anthony Taylor 1.1.0 2 \n", "10 Sergey Karasev 1.1.0 2 \n", "11 Fernando Andrés Rapallini 1.1.0 2 \n", "12 Artur Manuel Ribeiro Soares Dias 1.1.0 2 \n", "13 Felix Brych 1.1.0 2 \n", "14 Cüneyt Çakιr 1.1.0 2 \n", "15 Michael Oliver 1.1.0 2 \n", "16 Antonio Miguel Mateu Lahoz 1.1.0 2 \n", "17 Fernando Andrés Rapallini 1.1.0 2 \n", "18 Björn Kuipers 1.1.0 2 \n", "19 Daniele Orsato 1.1.0 2 \n", "20 Felix Brych 1.1.0 2 \n", "21 Fernando Andrés Rapallini 1.1.0 2 \n", "22 Sergey Karasev 1.1.0 2 \n", "23 Daniel Siebert 1.1.0 2 \n", "24 Clément Turpin 1.1.0 2 \n", "25 Daniel Siebert 1.1.0 2 \n", "26 Anthony Taylor 1.1.0 2 \n", "27 Ovidiu Alin Hațegan 1.1.0 2 \n", "28 Sergey Karasev 1.1.0 2 \n", "29 Artur Manuel Ribeiro Soares Dias 1.1.0 2 \n", "30 Antonio Miguel Mateu Lahoz 1.1.0 2 \n", "31 Daniele Orsato 1.1.0 2 \n", "32 Carlos del Cerro Grande 1.1.0 2 \n", "33 Lars Christian Andreas Ekberg 1.1.0 2 \n", "34 Danny Desmond Makkelie 1.1.0 2 \n", "35 Felix Brych 1.1.0 2 \n", "36 Istvan Kovacs 1.1.0 2 \n", "37 Michael Oliver 1.1.0 2 \n", "38 Felix Brych 1.1.0 2 \n", "39 Björn Kuipers 1.1.0 2 \n", "40 Orel Grinfeeld 1.1.0 2 \n", "41 Ovidiu Alin Hațegan 1.1.0 2 \n", "42 Slavko Vinčić 1.1.0 2 \n", "43 Daniel Siebert 1.1.0 2 \n", "44 Carlos del Cerro Grande 1.1.0 2 \n", "45 Cüneyt Çakιr 1.1.0 2 \n", "46 Anthony Taylor 1.1.0 2 \n", "47 Björn Kuipers 1.1.0 2 \n", "48 Michael Oliver 1.1.0 2 \n", "49 Antonio Miguel Mateu Lahoz 1.1.0 2 \n", "50 Clément Turpin 1.1.0 2 \n", "\n", " xy_fidelity_version \n", "0 2 \n", "1 2 \n", "2 2 \n", "3 2 \n", "4 2 \n", "5 2 \n", "6 2 \n", "7 2 \n", "8 2 \n", "9 2 \n", "10 2 \n", "11 2 \n", "12 2 \n", "13 2 \n", "14 2 \n", "15 2 \n", "16 2 \n", "17 2 \n", "18 2 \n", "19 2 \n", "20 2 \n", "21 2 \n", "22 2 \n", "23 2 \n", "24 2 \n", "25 2 \n", "26 2 \n", "27 2 \n", "28 2 \n", "29 2 \n", "30 2 \n", "31 2 \n", "32 2 \n", "33 2 \n", "34 2 \n", "35 2 \n", "36 2 \n", "37 2 \n", "38 2 \n", "39 2 \n", "40 2 \n", "41 2 \n", "42 2 \n", "43 2 \n", "44 2 \n", "45 2 \n", "46 2 \n", "47 2 \n", "48 2 \n", "49 2 \n", "50 2 " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sb.matches(competition_id=55, season_id=43)" ] }, { "cell_type": "code", "execution_count": 4, "id": "d90cd7ed-b973-425b-ba81-be836915723c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "credentials were not supplied. open data access only\n", "credentials were not supplied. open data access only\n", "credentials were not supplied. open data access only\n" ] } ], "source": [ "match_id = 3788764\n", "lineups = sb.lineups(match_id=match_id)\n", "events = sb.events(match_id=match_id)\n", "match_frames = sb.frames(match_id=match_id, fmt='dataframe')\n", "match_frames[['x','y']] = pd.DataFrame(match_frames.location.tolist(), index= match_frames.index)" ] }, { "cell_type": "code", "execution_count": 5, "id": "5aa163f4-2645-4015-b676-9202960d22cb", "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", " \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", "
player_idplayer_nameplayer_nicknamejersey_numbercountrycardspositions
03053Leroy SanéNone19Germany[][{'position_id': 23, 'position': 'Center Forwa...
13167Antonio RüdigerNone2Germany[][{'position_id': 5, 'position': 'Left Center B...
23493Emre CanNone23Germany[][{'position_id': 4, 'position': 'Center Back',...
34440Kevin TrappNone22Germany[][]
45557Timo WernerNone11Germany[][]
55562Thomas MüllerNone25Germany[][{'position_id': 18, 'position': 'Right Attack...
65570Manuel NeuerNone1Germany[][{'position_id': 1, 'position': 'Goalkeeper', ...
75572Mats HummelsNone5Germany[][{'position_id': 4, 'position': 'Center Back',...
85574Toni KroosNone8Germany[][{'position_id': 11, 'position': 'Left Defensi...
95579Joshua KimmichNone6Germany[][{'position_id': 7, 'position': 'Right Wing Ba...
106322Niklas SüleNone15Germany[][{'position_id': 9, 'position': 'Right Defensi...
116324Leon GoretzkaNone18Germany[][{'position_id': 20, 'position': 'Left Attacki...
126985Robin GosensNone20Germany[][{'position_id': 8, 'position': 'Left Wing Bac...
138215Kevin VollandNone9Germany[][]
148400Serge GnabryNone10Germany[][{'position_id': 23, 'position': 'Center Forwa...
158525Marcel HalstenbergNone3Germany[][{'position_id': 8, 'position': 'Left Wing Bac...
168808Matthias GinterNone4Germany[{'time': '76:38', 'card_type': 'Yellow Card',...[{'position_id': 3, 'position': 'Right Center ...
178945Christian GünterNone26Germany[][]
188966Kai HavertzNone7Germany[{'time': '65:25', 'card_type': 'Yellow Card',...[{'position_id': 20, 'position': 'Left Attacki...
1910287İlkay GündoğanNone21Germany[][{'position_id': 9, 'position': 'Right Defensi...
2012323Florian NeuhausNone17Germany[][]
2113294Robin KochNone24Germany[][]
2215581Bernd LenoNone12Germany[][]
\n", "
" ], "text/plain": [ " player_id player_name player_nickname jersey_number country \\\n", "0 3053 Leroy Sané None 19 Germany \n", "1 3167 Antonio Rüdiger None 2 Germany \n", "2 3493 Emre Can None 23 Germany \n", "3 4440 Kevin Trapp None 22 Germany \n", "4 5557 Timo Werner None 11 Germany \n", "5 5562 Thomas Müller None 25 Germany \n", "6 5570 Manuel Neuer None 1 Germany \n", "7 5572 Mats Hummels None 5 Germany \n", "8 5574 Toni Kroos None 8 Germany \n", "9 5579 Joshua Kimmich None 6 Germany \n", "10 6322 Niklas Süle None 15 Germany \n", "11 6324 Leon Goretzka None 18 Germany \n", "12 6985 Robin Gosens None 20 Germany \n", "13 8215 Kevin Volland None 9 Germany \n", "14 8400 Serge Gnabry None 10 Germany \n", "15 8525 Marcel Halstenberg None 3 Germany \n", "16 8808 Matthias Ginter None 4 Germany \n", "17 8945 Christian Günter None 26 Germany \n", "18 8966 Kai Havertz None 7 Germany \n", "19 10287 İlkay Gündoğan None 21 Germany \n", "20 12323 Florian Neuhaus None 17 Germany \n", "21 13294 Robin Koch None 24 Germany \n", "22 15581 Bernd Leno None 12 Germany \n", "\n", " cards \\\n", "0 [] \n", "1 [] \n", "2 [] \n", "3 [] \n", "4 [] \n", "5 [] \n", "6 [] \n", "7 [] \n", "8 [] \n", "9 [] \n", "10 [] \n", "11 [] \n", "12 [] \n", "13 [] \n", "14 [] \n", "15 [] \n", "16 [{'time': '76:38', 'card_type': 'Yellow Card',... \n", "17 [] \n", "18 [{'time': '65:25', 'card_type': 'Yellow Card',... \n", "19 [] \n", "20 [] \n", "21 [] \n", "22 [] \n", "\n", " positions \n", "0 [{'position_id': 23, 'position': 'Center Forwa... \n", "1 [{'position_id': 5, 'position': 'Left Center B... \n", "2 [{'position_id': 4, 'position': 'Center Back',... \n", "3 [] \n", "4 [] \n", "5 [{'position_id': 18, 'position': 'Right Attack... \n", "6 [{'position_id': 1, 'position': 'Goalkeeper', ... \n", "7 [{'position_id': 4, 'position': 'Center Back',... \n", "8 [{'position_id': 11, 'position': 'Left Defensi... \n", "9 [{'position_id': 7, 'position': 'Right Wing Ba... \n", "10 [{'position_id': 9, 'position': 'Right Defensi... \n", "11 [{'position_id': 20, 'position': 'Left Attacki... \n", "12 [{'position_id': 8, 'position': 'Left Wing Bac... \n", "13 [] \n", "14 [{'position_id': 23, 'position': 'Center Forwa... \n", "15 [{'position_id': 8, 'position': 'Left Wing Bac... \n", "16 [{'position_id': 3, 'position': 'Right Center ... \n", "17 [] \n", "18 [{'position_id': 20, 'position': 'Left Attacki... \n", "19 [{'position_id': 9, 'position': 'Right Defensi... \n", "20 [] \n", "21 [] \n", "22 [] " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lineups['Germany']" ] }, { "cell_type": "code", "execution_count": 6, "id": "99497138-9182-4870-b70c-5dbc371ea689", "metadata": {}, "outputs": [], "source": [ "pid, name = 6985,'Robin Gosens'" ] }, { "cell_type": "code", "execution_count": 7, "id": "dc9bc0bb-a506-483d-b056-74d707737f0a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ball_receipt_outcome NaN\n", "ball_recovery_recovery_failure NaN\n", "block_deflection NaN\n", "block_offensive NaN\n", "carry_end_location NaN\n", "clearance_aerial_won NaN\n", "clearance_body_part NaN\n", "clearance_head NaN\n", "clearance_left_foot NaN\n", "clearance_right_foot NaN\n", "counterpress NaN\n", "dribble_outcome NaN\n", "dribble_overrun NaN\n", "duel_outcome NaN\n", "duel_type NaN\n", "duration 0.767229\n", "foul_committed_advantage NaN\n", "foul_committed_card NaN\n", "foul_committed_type NaN\n", "foul_won_advantage NaN\n", "foul_won_defensive NaN\n", "goalkeeper_body_part NaN\n", "goalkeeper_end_location NaN\n", "goalkeeper_outcome NaN\n", "goalkeeper_position NaN\n", "goalkeeper_technique NaN\n", "goalkeeper_type NaN\n", "id 2b893a26-046a-43a9-927d-d45598595a81\n", "index 42\n", "injury_stoppage_in_chain NaN\n", "interception_outcome NaN\n", "location [102.5, 3.0]\n", "match_id 3788764\n", "minute 0\n", "off_camera NaN\n", "out NaN\n", "pass_aerial_won NaN\n", "pass_angle 1.374596\n", "pass_assisted_shot_id NaN\n", "pass_body_part Left Foot\n", "pass_cross NaN\n", "pass_cut_back NaN\n", "pass_deflected NaN\n", "pass_end_location [105.7, 19.1]\n", "pass_goal_assist NaN\n", "pass_height Ground Pass\n", "pass_inswinging NaN\n", "pass_length 16.414932\n", "pass_no_touch NaN\n", "pass_outcome NaN\n", "pass_outswinging NaN\n", "pass_recipient Kai Havertz\n", "pass_shot_assist NaN\n", "pass_switch NaN\n", "pass_technique NaN\n", "pass_through_ball NaN\n", "pass_type NaN\n", "period 1\n", "play_pattern From Kick Off\n", "player Robin Gosens\n", "player_id 6985.0\n", "position Left Wing Back\n", "possession 2\n", "possession_team Germany\n", "possession_team_id 770\n", "related_events [f3e38744-b67b-4d50-b251-680a1a2d2123]\n", "second 30\n", "shot_body_part NaN\n", "shot_end_location NaN\n", "shot_first_time NaN\n", "shot_freeze_frame NaN\n", "shot_key_pass_id NaN\n", "shot_open_goal NaN\n", "shot_outcome NaN\n", "shot_statsbomb_xg NaN\n", "shot_technique NaN\n", "shot_type NaN\n", "substitution_outcome NaN\n", "substitution_replacement NaN\n", "tactics NaN\n", "team Germany\n", "timestamp 00:00:30.866\n", "type Pass\n", "under_pressure NaN\n", "Name: 18, dtype: object" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "with pd.option_context('display.max_rows', None, 'display.max_columns', None): # more options can be specified also\n", " display(events[events.player_id==pid].iloc[0].T)" ] }, { "cell_type": "code", "execution_count": 8, "id": "dc730855-fbe1-438e-b556-20dee1669c1d", "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", "
teammateactorkeeperlocationidvisible_areamatch_idxy
529FalseFalseFalse[90.27666, 37.98272]2b893a26-046a-43a9-927d-d45598595a81[120.0, 0.0, 120.0, 19.3244033355597, 92.86066...378876490.27666037.982720
530FalseFalseFalse[95.283005, 16.7601]2b893a26-046a-43a9-927d-d45598595a81[120.0, 0.0, 120.0, 19.3244033355597, 92.86066...378876495.28300516.760100
531TrueFalseFalse[96.5817, 43.41135]2b893a26-046a-43a9-927d-d45598595a81[120.0, 0.0, 120.0, 19.3244033355597, 92.86066...378876496.58170043.411350
532FalseFalseFalse[98.46088, 52.73351]2b893a26-046a-43a9-927d-d45598595a81[120.0, 0.0, 120.0, 19.3244033355597, 92.86066...378876498.46088052.733510
533FalseFalseFalse[100.49047, 21.92496]2b893a26-046a-43a9-927d-d45598595a81[120.0, 0.0, 120.0, 19.3244033355597, 92.86066...3788764100.49047021.924960
534TrueFalseFalse[101.17361, 17.428257]2b893a26-046a-43a9-927d-d45598595a81[120.0, 0.0, 120.0, 19.3244033355597, 92.86066...3788764101.17361017.428257
535TrueTrueFalse[102.38295, 1.5539799]2b893a26-046a-43a9-927d-d45598595a81[120.0, 0.0, 120.0, 19.3244033355597, 92.86066...3788764102.3829501.553980
536FalseFalseFalse[103.71181, 7.565845]2b893a26-046a-43a9-927d-d45598595a81[120.0, 0.0, 120.0, 19.3244033355597, 92.86066...3788764103.7118107.565845
537TrueFalseFalse[106.549484, 33.877693]2b893a26-046a-43a9-927d-d45598595a81[120.0, 0.0, 120.0, 19.3244033355597, 92.86066...3788764106.54948433.877693
538FalseFalseFalse[107.0708, 29.898258]2b893a26-046a-43a9-927d-d45598595a81[120.0, 0.0, 120.0, 19.3244033355597, 92.86066...3788764107.07080029.898258
539FalseFalseFalse[107.13862, 36.549755]2b893a26-046a-43a9-927d-d45598595a81[120.0, 0.0, 120.0, 19.3244033355597, 92.86066...3788764107.13862036.549755
\n", "
" ], "text/plain": [ " teammate actor keeper location \\\n", "529 False False False [90.27666, 37.98272] \n", "530 False False False [95.283005, 16.7601] \n", "531 True False False [96.5817, 43.41135] \n", "532 False False False [98.46088, 52.73351] \n", "533 False False False [100.49047, 21.92496] \n", "534 True False False [101.17361, 17.428257] \n", "535 True True False [102.38295, 1.5539799] \n", "536 False False False [103.71181, 7.565845] \n", "537 True False False [106.549484, 33.877693] \n", "538 False False False [107.0708, 29.898258] \n", "539 False False False [107.13862, 36.549755] \n", "\n", " id \\\n", "529 2b893a26-046a-43a9-927d-d45598595a81 \n", "530 2b893a26-046a-43a9-927d-d45598595a81 \n", "531 2b893a26-046a-43a9-927d-d45598595a81 \n", "532 2b893a26-046a-43a9-927d-d45598595a81 \n", "533 2b893a26-046a-43a9-927d-d45598595a81 \n", "534 2b893a26-046a-43a9-927d-d45598595a81 \n", "535 2b893a26-046a-43a9-927d-d45598595a81 \n", "536 2b893a26-046a-43a9-927d-d45598595a81 \n", "537 2b893a26-046a-43a9-927d-d45598595a81 \n", "538 2b893a26-046a-43a9-927d-d45598595a81 \n", "539 2b893a26-046a-43a9-927d-d45598595a81 \n", "\n", " visible_area match_id x \\\n", "529 [120.0, 0.0, 120.0, 19.3244033355597, 92.86066... 3788764 90.276660 \n", "530 [120.0, 0.0, 120.0, 19.3244033355597, 92.86066... 3788764 95.283005 \n", "531 [120.0, 0.0, 120.0, 19.3244033355597, 92.86066... 3788764 96.581700 \n", "532 [120.0, 0.0, 120.0, 19.3244033355597, 92.86066... 3788764 98.460880 \n", "533 [120.0, 0.0, 120.0, 19.3244033355597, 92.86066... 3788764 100.490470 \n", "534 [120.0, 0.0, 120.0, 19.3244033355597, 92.86066... 3788764 101.173610 \n", "535 [120.0, 0.0, 120.0, 19.3244033355597, 92.86066... 3788764 102.382950 \n", "536 [120.0, 0.0, 120.0, 19.3244033355597, 92.86066... 3788764 103.711810 \n", "537 [120.0, 0.0, 120.0, 19.3244033355597, 92.86066... 3788764 106.549484 \n", "538 [120.0, 0.0, 120.0, 19.3244033355597, 92.86066... 3788764 107.070800 \n", "539 [120.0, 0.0, 120.0, 19.3244033355597, 92.86066... 3788764 107.138620 \n", "\n", " y \n", "529 37.982720 \n", "530 16.760100 \n", "531 43.411350 \n", "532 52.733510 \n", "533 21.924960 \n", "534 17.428257 \n", "535 1.553980 \n", "536 7.565845 \n", "537 33.877693 \n", "538 29.898258 \n", "539 36.549755 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "match_frames[match_frames.id=='2b893a26-046a-43a9-927d-d45598595a81']" ] }, { "cell_type": "code", "execution_count": 9, "id": "f3cb2148-0222-4a1b-85ca-5824871ba4a4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(
,\n", " ,\n", " VerticalPitch(pitch_type='statsbomb', half=True, pitch_color='#c2d59d', line_color='white', linewidth=2, line_zorder=0.9, stripe=False, stripe_color='#c2d59d', stripe_zorder=0.6, pad_left=4, pad_right=4, pad_bottom=4, pad_top=4, positional=False, positional_zorder=0.8, positional_linewidth=2, positional_linestyle=None, positional_color='#eadddd', shade_middle=False, shade_color='#f2f2f2', shade_zorder=0.7, pitch_length=None, pitch_width=None, goal_type='box', goal_alpha=1, line_alpha=1, label=False, tick=False, axis=False, spot_scale=0.002))" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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krJIf1A4FBHJIq0TWnIDbuLxNhNawkPr2rOWrxHpP/ruEhHJUk6nA1+eA19e2wktCSLh+KCe0OJwGtxedQ1F+ovCoYiItJnQgr3wdnjfeoqDbUJLTp5LE1FE+pHCoYiItGOMwZPjxNM6oSVqX34Ot8RJxDLcUjT2LGUR6T8KhyIi0iVjDG6PE7fHSV7+vgktkZYEsejAtxS9ObqPskh/UzgUEZFu2zehBeLxfQtvD9SEFt0RRaT/6btMRER6xek0+PJcqQkt0XCccEuCaEscqx+uPjvdBrdHE1FE+pvCoYiI9JnDYfD6XHh9+ya02OspJrAS6UmKWr5GZGDoO01ERNKq7YSWPMsiFt13+TneywktxoDXp4koIgNB4VBERPqNPaHFvhycl+8mFmszoSXS/XGK3lxNRBEZKAqHIiIyYFwuBy6/g1x/hwktkcQBF97WJWWRgaPvNhERyYj9J7Qku4rh9gtvuz32DGkRGRgKhyIiknH2hBYnXp+98HY0su/ys5avERlY+o4TEZFBxRiDx+vE43VCgT37WUQGjvr0IiIyqOk+yiIDS+FQRERERFIUDkVEREQkReFQRERERFIUDkVEREQkReFQRERERFIUDkVEREQkReFQRERERFIUDkVEREQkReFQRERERFIUDkVEREQkReFQRERERFIUDkVEREQkReFQRERERFIUDkVEREQkReFQRERERFIUDkVEREQkReFQRERERFIUDkVEREQkReFQRERERFIUDkVEREQkReFQRERERFIUDkVEREQkReFQRERERFIUDkVEREQkReFQRERERFIUDkVEREQkReFQRERERFIUDkVEREQkReFQRERERFIUDkVEREQkReFQRERERFIUDkVEREQkReFQRERERFIUDkVEREQkReFQRERERFJcmS5AREREus8R9+NjDMZyASbT5UgarFu3DgB/7Mg0nM3CMjFCbCPhDPbqDAqHIiIiQ4Qj7ifgmMSoURV4vG6MUTgcDgK+UgAaQ7V9PpdlWUTCUbZv99IY39CrgKjLyiIiIkOEjzGMGlWBN8ejYCidMsbgzfEwalQFPsb06hwKhyIiIkOEsVx4vO5MlyFDgMfrTg496DmFQxERkSHDqGMo3WJ/nfTua0XhUERERERSFA5FREREJEXhUERERAaFDy8+i0suujwt5/rpbb/ghf+8mJZzZRuF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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def plot_event(event, match_frames, lineups):\n", " if len(match_frames[match_frames.id==event.id])>0:\n", " fig, ax, pitch = plot_frame(event, match_frames[match_frames.id==event.id], lineups)\n", " else:\n", " fig, ax, pitch = None, None, None\n", " return fig, ax, pitch\n", "\n", "def plot_frame(df_event, df_freeze_frame, df_lineups, plot_event=True, show_logo=False):\n", " # strings for team names\n", " team1 = df_event.possession_team\n", " try:\n", " team2 = (set(lineups.keys()) - set([team1])).pop()\n", " except KeyError:\n", " team2 = '?'\n", "\n", " # subset the team shooting, and the opposition (goalkeeper/ other)\n", " df_team1 = df_freeze_frame[df_freeze_frame.teammate]\n", " df_team2_goal = df_freeze_frame[df_freeze_frame.keeper]\n", " df_team2_other = df_freeze_frame[(~df_freeze_frame.teammate) & \n", " (~df_freeze_frame.keeper)]\n", "\n", " # Setup the pitch\n", " fig, ax = plt.subplots(figsize = (4*3, 3*3))\n", " pitch = mpls.pitch.VerticalPitch(half=True, tight_layout=False, goal_type='box', pitch_color='#c2d59d', line_color='white')\n", " # pitch = mpls.pitch.Pitch(half=False, tight_layout=False, goal_type='box', pitch_color='#c2d59d', line_color='white')\n", " pitch.draw(ax=ax)\n", "\n", " \n", " x,y = df_freeze_frame[df_freeze_frame.actor][['x','y']].values[0]\n", " # plot the shot\n", " if plot_event:\n", " pitch.lines(x,y, df_event.pass_end_location[0], df_event.pass_end_location[1],\n", " comet=True, label='shot', color='darkblue', ax=ax)\n", "\n", " # plot the jersey number\n", " df_lineup_possession = df_lineups[df_event.possession_team]\n", " pitch.annotate(df_lineup_possession[df_lineup_possession.player_id==df_event['player_id']].jersey_number.values[0],\n", " (x,y), va='center', ha='center', color='black', fontsize=10, ax=ax)\n", " \n", " # plot the players\n", " sc1 = pitch.scatter(df_team1.x, df_team1.y, s=300, c='white', edgecolors='black', label='Germany', ax=ax)\n", " sc2 = pitch.scatter(df_team2_other.x, df_team2_other.y, s=300,\n", " c='red', edgecolors='green', label='Portugal', ax=ax)\n", " sc3 = pitch.scatter(df_team2_goal.x, df_team2_goal.y, s=300,\n", " c='purple', label='Goalkeeper', ax=ax)\n", " \n", " # add a legend and title \n", " legend = ax.legend(loc='lower right', labelspacing=1, fontsize=15)\n", " title = ax.set_title(f'{df_event.player}\\n{team1} vs. {team2}', fontsize=20)\n", " \n", " visible_area = np.array(df_freeze_frame.visible_area.values[0])\n", " pitch.polygon([visible_area.reshape(int(len(visible_area)/2),2)], ax=ax, facecolors='gray', alpha=0.3)\n", " \n", " return fig, ax, pitch\n", "\n", "plot_event(events[events.player_id==pid].iloc[0], match_frames, lineups)" ] }, { "cell_type": "code", "execution_count": 10, "id": "cf51cd2d-6f36-45af-8cf8-9fe5af541c29", "metadata": {}, "outputs": [], "source": [ "filename = 'output\\Gosens_vs_Portugal.mp4'\n", "anim = animation(filename, fps=1)\n", "\n", "for i, event in events[(events.pass_recipient=='Robin Gosens')].iterrows():\n", " if event.pass_end_location[0] > 80:\n", " fig, ax, pitch = plot_event(event, match_frames, lineups)\n", " if fig:\n", " anim.add_frame(fig)\n", " anim.add_frame(fig)\n", " plt.close(fig)\n", " \n", "anim.close()" ] }, { "cell_type": "code", "execution_count": null, "id": "66054951-26ac-40a9-a574-98353a5e7259", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python [conda env:statsbomb] *", "language": "python", "name": "conda-env-statsbomb-py" }, "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.10.1" } }, "nbformat": 4, "nbformat_minor": 5 }