From 5304695ecb070006bef9d2f691d3ad8cd8460dcf Mon Sep 17 00:00:00 2001 From: manuba95 Date: Mon, 29 Aug 2022 15:30:17 +0200 Subject: [PATCH 01/25] fix: MetabolicPower framerate bug (#93) * fix: MetabolicPower framerate bug * fix: flake8 binary operator --- floodlight/models/kinetics.py | 12 +++++++++--- tests/test_models/test_kinetics.py | 6 +++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/floodlight/models/kinetics.py b/floodlight/models/kinetics.py index 490cc0d5..4e847a2e 100644 --- a/floodlight/models/kinetics.py +++ b/floodlight/models/kinetics.py @@ -393,7 +393,7 @@ def _calc_metabolic_power( # Calculate energy cost of locomotion ecl = MetabolicPowerModel._calc_ecl(es, vel, em, eccr) # Calculate metabolic power as product of ecl and velocity (m/s) - metp = ecl * vel / framerate + metp = ecl * vel return metp @@ -476,7 +476,10 @@ def cumulative_metabolic_power(self) -> PlayerProperty: frames and N is the number of players. The columns contain the cumulative metabolic power calculated by numpy.nancumsum() over axis=0. """ - cum_metp = np.nancumsum(self._metabolic_power_.property, axis=0) + cum_metp = np.divide( + np.nancumsum(self._metabolic_power_.property, axis=0), + self._metabolic_power_.framerate + ) cumulative_metabolic_power = PlayerProperty( property=cum_metp, name="cumulative_metabolic_power", @@ -532,7 +535,10 @@ def cumulative_equivalent_distance(self, eccr: Numeric = 3.6) -> PlayerProperty: frames and N is the number of players. The columns contain the cumulative equivalent distance calculated by numpy.nancumsum() over axis=0. """ - cum_metp = np.nancumsum(self._metabolic_power_.property, axis=0) + cum_metp = np.divide( + np.nancumsum(self._metabolic_power_.property, axis=0), + self._metabolic_power_.framerate + ) cum_eqdist = cum_metp / eccr cumulative_equivalent_distance = PlayerProperty( diff --git a/tests/test_models/test_kinetics.py b/tests/test_models/test_kinetics.py index 60e3e9d1..87625228 100644 --- a/tests/test_models/test_kinetics.py +++ b/tests/test_models/test_kinetics.py @@ -156,7 +156,7 @@ def test_calc_metabolic_power( # Assert assert np.array_equal( np.round(metabolic_power, 3), - np.array(((0.101, 0.045), (0.251, 2.427), (2.602, 0.347))), + np.array(((2.020, 0.896), (5.011, 48.540), (52.038, 6.931))), ) @@ -173,7 +173,7 @@ def test_metabolic_power(example_pitch_dfl, example_xy_object_kinetics) -> None: # Assert assert np.array_equal( np.round(metabolic_power, 3), - np.array(((0.459, 0.223), (0.465, 0.249), (0.472, 0.278))), + np.array(((9.177, 4.452), (9.306, 4.988), (9.439, 5.570))), ) @@ -209,7 +209,7 @@ def test_equivalent_distance(example_pitch_dfl, example_xy_object_kinetics) -> N # Assert assert np.array_equal( np.round(equivalent_distance, 3), - np.array(((0.127, 0.062), (0.129, 0.069), (0.131, 0.077))), + np.array(((2.549, 1.237), (2.585, 1.386), (2.622, 1.547))), ) From 6c7a29d5bd2cbb43574975c02279a596ec95d4d6 Mon Sep 17 00:00:00 2001 From: hbiermann95 <58177509+hbiermann95@users.noreply.github.com> Date: Mon, 2 Jan 2023 12:12:30 +0100 Subject: [PATCH 02/25] ci: update location of flake8 which was moved from gitlab to github (#99) Co-authored-by: draabe --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ebdabb32..8b39d683 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,7 +14,7 @@ repos: hooks: - id: black language_version: python3 -- repo: https://gitlab.com/pycqa/flake8 +- repo: https://github.com/pycqa/flake8 rev: 3.9.2 hooks: - id: flake8 From bcc5853da8f0f3ef806994c29b9e31f774039522 Mon Sep 17 00:00:00 2001 From: draabe Date: Mon, 2 Jan 2023 12:14:45 +0100 Subject: [PATCH 03/25] feat: add second spectrum insights parser (#100) * feat: add second spectrum insight parser * docs: add second spectrum insight parser * chore: update second spectrum position precedences --- docs/source/modules/io/io.rst | 1 + floodlight/io/secondspectrum.py | 276 +++++++++++++++++++++++++++----- 2 files changed, 239 insertions(+), 38 deletions(-) diff --git a/docs/source/modules/io/io.rst b/docs/source/modules/io/io.rst index 14ce9fc7..306cd3f5 100644 --- a/docs/source/modules/io/io.rst +++ b/docs/source/modules/io/io.rst @@ -67,6 +67,7 @@ Collection of file parsing functionalities for different data providers as well :nosignatures: read_secspec_files + read_secspec_insight create_links_from_metajson .. rubric:: StatsBomb diff --git a/floodlight/io/secondspectrum.py b/floodlight/io/secondspectrum.py index b9dc8f10..553eae8f 100644 --- a/floodlight/io/secondspectrum.py +++ b/floodlight/io/secondspectrum.py @@ -2,11 +2,16 @@ from pathlib import Path from typing import Dict, Tuple, Union +import pytz +import iso8601 import numpy as np +import pandas as pd +from floodlight.core.events import Events from floodlight.core.code import Code from floodlight.core.pitch import Pitch from floodlight.core.xy import XY +from floodlight.io.utils import get_and_convert def _get_position_precedence(position: str) -> int: @@ -18,22 +23,24 @@ def _get_position_precedence(position: str) -> int: "CB": 4, "RCB": 5, "RB": 6, - "LDM": 7, - "CDM": 8, - "RDM": 9, - "LM": 10, - "LCM": 11, - "CM": 12, - "RCM": 13, - "RM": 14, - "LW": 15, - "CAM": 16, - "RW": 17, - "LF": 18, - "LCF": 19, - "CF": 20, - "RCF": 21, - "RF": 22, + "LWB": 7, + "LDM": 8, + "CDM": 9, + "RDM": 10, + "RWB": 11, + "LM": 12, + "LCM": 13, + "CM": 14, + "RCM": 15, + "RM": 16, + "LW": 17, + "CAM": 18, + "RW": 19, + "LF": 20, + "LCF": 21, + "CF": 22, + "RCF": 23, + "RF": 24, "SUB": 99, } # unknown positions are inserted between known positions and substitutes @@ -45,8 +52,8 @@ def _get_position_precedence(position: str) -> int: def _read_metajson( filepath_metadata: Union[str, Path] ) -> Tuple[Dict, Dict, Dict, Pitch]: - """Reads TRACAB's metadata file and extracts information about match metainfo, - periods, player directions, and the pitch. + """Reads Second Spectrums's metadata file and extracts information about match + metainfo, periods, playing directions, and the pitch. Parameters ---------- @@ -79,6 +86,8 @@ def _read_metajson( metadata["framerate"] = metajson.get("fps", None) metadata["length"] = metajson.get("pitchLength", None) metadata["width"] = metajson.get("pitchWidth", None) + metadata["home_tID"] = get_and_convert(metajson, "homeOptaId", int) + metadata["away_tID"] = get_and_convert(metajson, "awayOptaId", int) # get period information for period in metajson["periods"]: @@ -135,24 +144,25 @@ def create_links_from_metajson( 'CB': 4, 'RCB': 5, 'RB': 6, - 'LDM': 7, - 'CDM': 8, - 'RDM': 9, - 'LM': 10, - 'LCM': 11, - 'CM': 12, - 'RCM': 13, - 'RM': 14, - 'LW': 15, - 'CAM': 16, - 'RW': 17, - 'LF': 18, - 'LCF': 19, - 'CF': 20, - 'RCF': 21, - 'RF': 22, - 'UNKNOWN': 23, - 'SUB': 99, + 'LWB': 7, + 'LDM': 8, + 'CDM': 9, + 'RDM': 10, + 'RWB': 11, + 'LM': 12, + 'LCM': 13, + 'CM': 14, + 'RCM': 15, + 'RM': 16, + 'LW': 17, + 'CAM': 18, + 'RW': 19, + 'LF': 20, + 'LCF': 21, + 'CF': 22, + 'RCF': 23, + 'RF': 24, + 'SUB': 99 } """ # read file @@ -195,8 +205,8 @@ def read_secspec_files( Second Spectrum data is typically stored in two separate files, a .jsonl file containing the actual data as well as a _meta.json containing information about pitch size, framerate, lineups and start- and endframes of match periods. This - function provides a high-level access to TRACAB data by parsing "the full match" - given both files. + function provides a high-level access to Second Spectrum data by parsing "the full + match" given both files. Parameters ---------- @@ -347,3 +357,193 @@ def read_secspec_files( ) return data_objects + + +def read_secspec_insight( + filepath_insight: Union[str, Path], + filepath_metadata: Union[str, Path], +) -> Tuple[Events, Events, Events, Events, Pitch]: + """Parse Second Spectrums's Insight file (containing match events) and extract + event data and pitch information. + + This function provides a high-level access to the particular Second Spectrum + Insight file and will return event objects for both teams. The number of segments is + inferred from the data, yet data for each segment is stored in a separate object. + + Parameters + ---------- + filepath_insight: str or pathlib.Path + Full path to .jsonl-file. + filepath_metadata: str or pathlib.Path + Full path to _meta.json file. + + Returns + ------- + data_objects: Tuple[Events, Events, Events, Events, Pitch] + Events- and Pitch-objects for both teams and both halves. The order is + (home_ht1, home_ht2, away_ht1, away_ht2, pitch) + + Notes + ----- + Second Spectrum's Insight files can be seen as a union of (wrapped) Opta event feeds + and attached Second Spectrum markings. Thus, properties of the Opta F24-feed parser + also mostly apply to this parser. This particularly includes the handling of + qualifiers, which are included as a string in the ``qualifier`` column of the + returned DataFrame's. Second Spectrum markings are disregarded at this moment, but + could be included in future releases. + """ + # 1. assemble meta info + metadata, periods, _, _ = _read_metajson(filepath_metadata) + teams = ["Home", "Away"] + tID_link = { + metadata["home_tID"]: "Home", + metadata["away_tID"]: "Away", + } + segments = periods.keys() + + # 2. parse events + # bins + columns = [ + "eID", + "gameclock", + "pID", + "outcome", + "timestamp", + "minute", + "second", + "at_x", + "at_y", + "qualifier", + ] + event_lists = { + team: {segment: {col: [] for col in columns} for segment in segments} + for team in teams + } + directions = {team: {} for team in teams} + dir_link = {"Left to Right": "lr", "Right to Left": "rl"} + segment_offsets = {1: 0, 2: 45, 3: 90, 4: 105} + kickoffs = {} + + # parse file for meta events (directions and kick-offs) + with open(str(filepath_insight), "r") as f: + while True: + # get one line of file + dataline = f.readline() + # terminate if at end of file + if len(dataline) == 0: + break + # load json + dataline = json.loads(dataline) + optaline = dataline["optaEvent"] + if optaline is None: + continue + if optaline["typeId"] == 32: + # get team and segment information + period = get_and_convert(optaline, "periodId", int) + segment = "HT" + str(period) + tID = get_and_convert(optaline, "opContestantId", int) + team = tID_link[tID] + # read kickoff times + kickoff_timestring = get_and_convert(optaline, "timeStamp", str) + kickoff_datetime = iso8601.parse_date( + kickoff_timestring, default_timezone=pytz.utc + ) + kickoffs[segment] = kickoff_datetime + # read playing direction + direction = None + for qualifier in get_and_convert(optaline, "qualifier", list, []): + if get_and_convert(qualifier, "qualifierId", int) == 127: + value = get_and_convert(qualifier, "value", str) + direction = dir_link.get(value) + directions[team][segment] = direction + + # parse file for match events + with open(str(filepath_insight), "r") as f: + while True: + # get one line of file + dataline = f.readline() + # terminate if at end of file + if len(dataline) == 0: + break + # load json + dataline = json.loads(dataline) + optaline = dataline["optaEvent"] + # secspecline = dataline["2sMarking"] + if optaline is None: + continue + + # get team and segment information + period = get_and_convert(optaline, "periodId", int) + segment = "HT" + str(period) + tID = get_and_convert(optaline, "opContestantId", int) + team = tID_link[tID] + + # skip match-unrelated events + if period not in range(1, 6): + continue + + # identifier and outcome: + eID = get_and_convert(optaline, "typeId", int) + # skip unwanted events + if eID in [30]: + continue + pID = get_and_convert(optaline, "opPlayerId", int) + outcome = get_and_convert(optaline, "outcome", int) + event_lists[team][segment]["eID"].append(eID) + event_lists[team][segment]["pID"].append(pID) + event_lists[team][segment]["outcome"].append(outcome) + + # absolute and relative time + event_timestring = get_and_convert(optaline, "timeStamp", str) + minute = get_and_convert(optaline, "timeMin", int) + # transform minute to be relative to current segment + minute -= segment_offsets[period] + second = get_and_convert(optaline, "timeSec", int) + timestamp = iso8601.parse_date(event_timestring, default_timezone=pytz.utc) + delta = timestamp - kickoffs[segment] + gameclock = delta.total_seconds() + # re-adjust pre-kick-off events (e.g. substitutions) to 00:00 + gameclock = max(gameclock, 0.0) + event_lists[team][segment]["timestamp"].append(timestamp) + event_lists[team][segment]["minute"].append(minute) + event_lists[team][segment]["second"].append(second) + event_lists[team][segment]["gameclock"].append(gameclock) + + # location + at_x = get_and_convert(optaline, "x", float) + at_y = get_and_convert(optaline, "y", float) + event_lists[team][segment]["at_x"].append(at_x) + event_lists[team][segment]["at_y"].append(at_y) + + # qualifier + qual_dict = {} + for qualifier in get_and_convert(optaline, "qualifier", list, []): + qual_id = get_and_convert(qualifier, "qualifierId", int) + qual_value = qualifier.get("value") + qual_dict[qual_id] = qual_value + event_lists[team][segment]["qualifier"].append(str(qual_dict)) + + # assembly + home_ht1 = Events( + events=pd.DataFrame(data=event_lists["Home"]["HT1"]), + direction=directions["Home"]["HT1"], + ) + home_ht2 = Events( + events=pd.DataFrame(data=event_lists["Home"]["HT2"]), + direction=directions["Home"]["HT2"], + ) + away_ht1 = Events( + events=pd.DataFrame(data=event_lists["Away"]["HT1"]), + direction=directions["Away"]["HT1"], + ) + away_ht2 = Events( + events=pd.DataFrame(data=event_lists["Away"]["HT2"]), + direction=directions["Away"]["HT2"], + ) + pitch = Pitch.from_template( + "opta", length=metadata["length"], width=metadata["width"], sport="football" + ) + + data_objects = (home_ht1, home_ht2, away_ht1, away_ht2, pitch) + + return data_objects From c4c52644088968b8dd41744d3672e69d83330458 Mon Sep 17 00:00:00 2001 From: hbiermann95 <58177509+hbiermann95@users.noreply.github.com> Date: Mon, 2 Jan 2023 12:16:14 +0100 Subject: [PATCH 04/25] fix: missing https in hyperlink leading to an unknown page when clicking on it in github (#98) Co-authored-by: draabe --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0e5716d7..4678499a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,7 +5,7 @@ Thank you for considering to help with this package! We warmly welcome all kinds Please also feel encouraged to open an issue (or PR) if you found a bug, have general feedback or if you are unsure whether your new feature would be a good addition. -If all or some of this is new to you, and you would prefer a detailed step-by-step explanation of how to contribute, check out our extended contributing manual in the [documentation](floodlight.readthedocs.io). +If all or some of this is new to you, and you would prefer a detailed step-by-step explanation of how to contribute, check out our extended contributing manual in the [documentation](https://floodlight.readthedocs.io). Development From b775a9f2be218dbdb569e2b5ff4c17096484ab54 Mon Sep 17 00:00:00 2001 From: hbiermann95 <58177509+hbiermann95@users.noreply.github.com> Date: Mon, 2 Jan 2023 12:18:09 +0100 Subject: [PATCH 05/25] fix: replace pandas iterrows (#96) Co-authored-by: draabe --- floodlight/core/events.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/floodlight/core/events.py b/floodlight/core/events.py index da50f121..23b7afcf 100644 --- a/floodlight/core/events.py +++ b/floodlight/core/events.py @@ -493,19 +493,19 @@ def get_event_stream( f"Expected fade to be a positive integer or None, got {fade} instead." ) - sorted_events = self.events.sort_values("frameclock") - start = int(np.round(np.nanmin(sorted_events["frameclock"].values))) - end = int(np.round(np.nanmax(sorted_events["frameclock"].values))) + 1 + tmp_events = self.events.sort_values("frameclock") + start = int(np.round(np.nanmin(tmp_events["frameclock"].values))) + end = int(np.round(np.nanmax(tmp_events["frameclock"].values))) + 1 code = np.full((end - start,), np.nan, dtype=object) - for _, event in sorted_events.iterrows(): - if pd.isna(event["frameclock"]): + for i in tmp_events.index: + if pd.isna(tmp_events.at[i, "frameclock"]): continue - frame = int(np.round(event["frameclock"])) + frame = int(np.round(tmp_events.at[i, "frameclock"])) if fade is None: - code[frame - start :] = event["eID"] + code[frame - start :] = tmp_events.at[i, "eID"] else: - code[frame - start : frame - start + fade + 1] = event["eID"] + code[frame - start : frame - start + fade + 1] = tmp_events.at[i, "eID"] event_stream = Code( code=code, From e0df95903251de90bbafc99dff833c044e5b0f57 Mon Sep 17 00:00:00 2001 From: hbiermann95 <58177509+hbiermann95@users.noreply.github.com> Date: Mon, 2 Jan 2023 12:25:08 +0100 Subject: [PATCH 06/25] docs: update tutorial matchsheets (#95) * fix: correct variable names * docs: update match sheet graphics Co-authored-by: draabe --- .../_img/tutorial_matchsheets_allgoals.png | Bin 76591 -> 75380 bytes .../_img/tutorial_matchsheets_singlegoal.png | Bin 18040 -> 15926 bytes docs/source/guides/tutorial_matchsheets.rst | 52 ++++++++++++------ 3 files changed, 35 insertions(+), 17 deletions(-) diff --git a/docs/source/_img/tutorial_matchsheets_allgoals.png b/docs/source/_img/tutorial_matchsheets_allgoals.png index a468ea9508cddaa531d1ff454aa1ab72b26acc22..6bd549cef63d71bf2eaf893ee9bbcd14c0e985ec 100644 GIT binary patch literal 75380 zcmeFZc{rBs{x^CfnMx!{$WT#=q#`OLA{ir7<{>E|5i*BNMFXWGnaQlovxqcEgE2!S z6`3<+=>43nwVrqHzQ(b8_<3>gbg|hmX zvcd@ph1QKip)RLiiN87dv5gD=C*`cD@2u@`+S%3I$(o{O?(Asi;B04W!FS2p>7uQJ z{T@*XQSqI8XPliKFG}y)b^f0hh&njg?ArEig9R?a;HYeHkwRHxPJUCR$)?&;s3??U z3Ws&vVn(`M^|jl0SB^`Xzg(%MX%HIPx9MaCz5Vd>3dM5;+0u^-mhC>ZSS;I z$JhSnZLHt73%Z5;^SjPctkKR#j8es`PZRz7S~g^aqoAe@JKt$C96c4Sy)_Ai4v}9 zZeG*ty>R|!&MASLUw$uFUcb3nDM33`y=f?P%+lV+z_M|8VS4)ed+wJuSz%k&GOSv? z`tz4B0aP?A`|t^8UmnxYXvnvI`L^8sqW-B<&tAP+RdDuWZEBo%s7>=j+o#vNiX0lM z{b)Xa{!F!J&z|Cv67%uCnv(3P@z2lB^ps0AMePWh9DKQ%kB<_;E30epwKkAxgRJ+# zA0N_bjvqg+lc~@8v$Nn?OQO=pJMLpWho*mgWRj4O$j!}_TbTKI(NoW~+>MHhi)*Ak z??~cL%y&Y*-`@#5k^l5*T`2nwC)G8~%+I^aT+MB54Zh{~3f3$XiW-*&9KF7gf9K9s zPi&f>FE1_RdCogIe}6|y$IM+lHPq~~R_{`$%6LzO2gmA-d#j6jy~A3wPFW5-zrNpX zoUd}OpXuP`Y5MCM_sPr4*LKkvk$ZW@Vd@!w$wX6=Mdr`qlts95*_~ac;p(x{HJF~N z#YrY+?)|=Fl?%)mA9*t~vzs}8KBQ}J*mpKk_hq^B_qDB=2LA3-Uk9TlFZ3(KNV^C( z#7S7_7o26sB?6xXt+A{PU}!Hm$6;7#7s9d2ByH#HkB>W^I`nR06H-_3U%5K>!obmy zuA((Zf|%>as{VwpT)naH>+1*e*<)p6mCrKta>UNH?i}f@;+^{X`dRYvyKi&Nj~G>X z8(Vku^_i8=_IRY}=LuXI{S>nG_?c5kEc+)Q zB!r=}@O)UoxwglV^Iu-D&CSjAVTANcoVFI)bzJ%IK?e&yz0Tp>xv=fpDQ3T?zbhX< zzT?#?vOkk=@?o099X>ujN$pFXUu@4FHU*2peurnRl%l2DC)@F1+NPN87RTKwK*UQSNV_{@yxhs!;>cSVf@GBSowMcur4 zlOM}xb7p2{-Ny{QkD^Z;dS!0L#KfHAbbsx^HP8^jkvu>BzP?`Z>DiAeKg(aedSwxQ z^uX_5!$SA>ol6nV;_GcFuhh_Zc#xG+7bA5s^8GrO7VIRQJ4^jxyH-&0oCZ~*z9%Y0 ztf$nas6B9s^qKmqW`6#>2yR>P=+UDOFUVY;-q!GxZp|k8&6_t*EH8{@s5-n$3K^fA zT>Jg|_a<8*^%y+UyX50jJNInfeB?vcDLtJGT{UYA)B8Z&e(<$xI_k%jm01Q~-sM>O z{Y%?GLR3_J!^VxFzlPg}O4KljI+t>3Ng>?6ntMNsZ~5RotVHU<^Icc5eII+h##;2l zz16;X!>p^Td!{{?UpG^qia)@KQ&LhAv(8gfQ`2-Rr~A{V$f<#Wfr*I*-o«*kY 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�rj_yP^MqUOEU1VyG#aCzI7 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 diff --git a/docs/source/_img/tutorial_matchsheets_singlegoal.png b/docs/source/_img/tutorial_matchsheets_singlegoal.png index 7924fcb9d0367ad19eecae671316d25352a26a09..faeceaa05e88952b8d934d42dc675396f0ba1c18 100644 GIT binary patch literal 15926 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 literal 18040 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 Gm;Vd9p%?oA diff --git a/docs/source/guides/tutorial_matchsheets.rst b/docs/source/guides/tutorial_matchsheets.rst index 4bc409ee..8e8a8521 100644 --- a/docs/source/guides/tutorial_matchsheets.rst +++ b/docs/source/guides/tutorial_matchsheets.rst @@ -78,7 +78,6 @@ Finally, we collect all goals into a single pandas DataFrame. ) ).sort_values("gameclock") - Here's the (formatted) DataFrame you should get: ==== ========== ====== ==== ======== ======== ============ ======= ======= ====== ===== ====== ===== ============= ======================== ========== ========== @@ -105,7 +104,7 @@ Alright, now let's try to extract the relevant information from the above DataFr scoring_team = goal["team_name"] if goal["event_name"] == "Shot": scoring_player = goal["player_name"] - xG = ast.literal_eval(goal["qualifier"])['shot']['statsbomb_xg'] + xG = ast.literal_eval(goal["qualifier"])["shot"]["statsbomb_xg"] else: scoring_player = "Own Goal" xG = None @@ -123,13 +122,14 @@ Next, we deal with the previously mentioned StatsBomb360 position data. The appr freeze_frame = ast.literal_eval(goal["qualifier"])["360_freeze_frame"] # set "to-location" to goal center if not available + at_x, at_y, to_x, to_y = goal["at_x"], goal["at_y"], goal["to_x"], goal["to_y"] if np.isnan(goal["to_x"]): - goal["to_x"] = 120 + to_x = 120 if np.isnan(goal["to_y"]): - goal["to_y"] = 40 + to_y = 40 # create arrays - xy_ball = np.array([[goal["at_x"], goal["at_y"]], [goal["to_x"], goal["to_y"]]]) + xy_ball = np.array([[at_x, at_y], [to_x, to_y]]) xy_off = np.array( [player["location"] for player in freeze_frame if player["teammate"]] ) @@ -155,11 +155,11 @@ Now we can use the predefined functions to create a plot of a single goal (e.g. import matplotlib.pyplot as plt - goal = all_goals.iloc[-1] + goal = all_goals.loc[all_goals.index[-1]] fig, ax = plt.subplots() scoring_team, scoring_player, xG = get_goal_info(goal) - ax[i, j].set_title( + ax.set_title( f"Goal for {scoring_team} by {str(scoring_player)} " f"|| xG: {round(xG, 2) if xG is not None else 'NA'}", fontdict={'size': 9} @@ -168,7 +168,17 @@ Now we can use the predefined functions to create a plot of a single goal (e.g. xy_ball, xy_off, xy_def = get_xy_data(goal) xy_off.plot(t=0, ax=ax, color="red") xy_def.plot(t=0, ax=ax, color="white") - xy_ball.plot(t=(0, 2), plot_type="trajectories", color="cyan", ball=True, ax=ax) + xy_ball.plot( + t=(0, 2), + plot_type="trajectories", + ball=True, + color="k", + linewidth=2, + linestyle="--", + marker="X", + markevery=[0], + ax=ax, + ) .. image:: ../_img/tutorial_matchsheets_singlegoal.png @@ -201,24 +211,24 @@ Now we create the match sheet by iterating over all goals and updating the respe row, col, home_score, away_score = 0, 0, 0, 0 colors = {"Croatia": "white", "Spain": "red"} - for _, goal in all_goals.iterrows(): + for i in all_goals.index: # display meta information - scoring_team, scoring_player, xG = get_goal_info(goal) + scoring_team, scoring_player, xG = get_goal_info(all_goals.loc[i]) if scoring_team == "Croatia": conceding_team = "Spain" home_score += 1 else: # score by Spain conceding_team = "Croatia" away_score += 1 - ax[i, j].set_title( + ax[row, col].set_title( f"{home_score}:{away_score} for {str(scoring_team)} by {str(scoring_player)} " f"|| xG: {round(xG, 2) if xG is not None else 'NA'}", - fontdict={'size': 10} + fontdict={"size": 10}, ) # get position data - xy_ball, xy_off, xy_def = get_xy_data(goal) + xy_ball, xy_off, xy_def = get_xy_data(all_goals.loc[i]) # rotate position data towards left goal for Spain if scoring_team == "Spain": xy_off.rotate(180) @@ -228,11 +238,19 @@ Now we create the match sheet by iterating over all goals and updating the respe xy_ball.rotate(180) xy_ball.translate((pitch.xlim[1], pitch.ylim[1])) # plot pitch and position data - pitch.plot(ax=ax[i, j]) - xy_off.plot(t=0, ax=ax[i, j], color=colors[scoring_team]) - xy_def.plot(t=0, ax=ax[i, j], color=colors[conceding_team]) + pitch.plot(ax=ax[row, col]) + xy_off.plot(t=0, ax=ax[row, col], color=colors[scoring_team]) + xy_def.plot(t=0, ax=ax[row, col], color=colors[conceding_team]) xy_ball.plot( - t=(0, 2), plot_type="trajectories", color="cyan", ball=True, ax=ax[i, j] + t=(0, 2), + plot_type="trajectories", + ball=True, + color="k", + linewidth=2, + linestyle="--", + marker="X", + markevery=[0], + ax=ax[row, col], ) # update grid position From 716388063d7fc48cbedd5f8f0fea325f1650c922 Mon Sep 17 00:00:00 2001 From: manuba95 Date: Mon, 2 Jan 2023 12:26:31 +0100 Subject: [PATCH 07/25] docs: fix butterworth cutoff freq doc (#94) --- floodlight/transforms/filter.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/floodlight/transforms/filter.py b/floodlight/transforms/filter.py index 4e71ad79..7e5001be 100644 --- a/floodlight/transforms/filter.py +++ b/floodlight/transforms/filter.py @@ -146,9 +146,9 @@ def butterworth_lowpass( signal.butter `_ function. Default is 3 Wn: Numeric, optional - The critical cutoff frequency. Corresponds to the argument ``Wn`` from the - `scipy.signal.butter `_ function. Default is 1. + The normalized critical cutoff frequency. Corresponds to the argument ``Wn`` + from the `scipy.signal.butter `_ function. Default is 1. remove_short_seqs: bool, optional If True, sequences that are to short for the filter with the specified settings are replaced with np.NaNs. If False, they are kept unfiltered. Default is False. From 6a4d37af8ec36cc42c71f1dd18ecd26d16a424bb Mon Sep 17 00:00:00 2001 From: draabe Date: Mon, 9 Jan 2023 13:03:24 +0100 Subject: [PATCH 08/25] fix: set matplotlib backend env in workflows --- .github/workflows/build.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 07006c8d..f81d6aff 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -18,6 +18,9 @@ jobs: python-version: [3.8, 3.9, '3.10'] poetry-version: [1.1.11] + env: + MPLBACKEND: Agg # https://github.com/microsoft/azure-pipelines-tasks/issues/16426 + steps: - name: Check out source repository uses: actions/checkout@v2 From cf314cd10a84fae55eeae048953367dd127ccf38 Mon Sep 17 00:00:00 2001 From: draabe Date: Mon, 9 Jan 2023 16:54:23 +0100 Subject: [PATCH 09/25] feat: add teamsheets core object (#103) * feat: add teamsheet core object * docs: add definitions * docs: add teamsheet * docs: update events docstrings, integrate definitions * fix: broken test * test: add tests for teamsheet object * feat: add xIDs (#102) * test: add_xIDs function for create and overwrite * feat: add_xIDs functionality * refactor: docstrings and cleanup code * feat: add started column to definitions Co-authored-by: hbiermann95 <58177509+hbiermann95@users.noreply.github.com> --- docs/source/modules/core/core.rst | 11 ++ docs/source/modules/core/definitions.rst | 11 ++ docs/source/modules/core/teamsheet.rst | 6 + floodlight/core/definitions.py | 26 ++- floodlight/core/events.py | 36 ++-- floodlight/core/teamsheet.py | 240 +++++++++++++++++++++++ tests/test_core/conftest.py | 16 ++ tests/test_core/test_events.py | 2 +- tests/test_core/test_teamsheet.py | 107 ++++++++++ 9 files changed, 436 insertions(+), 19 deletions(-) create mode 100644 docs/source/modules/core/definitions.rst create mode 100644 docs/source/modules/core/teamsheet.rst create mode 100644 floodlight/core/teamsheet.py create mode 100644 tests/test_core/test_teamsheet.py diff --git a/docs/source/modules/core/core.rst b/docs/source/modules/core/core.rst index 4a4a906f..abad4f69 100644 --- a/docs/source/modules/core/core.rst +++ b/docs/source/modules/core/core.rst @@ -12,7 +12,9 @@ Collection of core data structures. Each class is designed to contain one type o events pitch code + teamsheet property + definitions .. rubric:: Data-level Core Objects @@ -28,3 +30,12 @@ Collection of core data structures. Each class is designed to contain one type o property.DyadicProperty property.PlayerProperty property.TeamProperty + + +.. rubric:: Observation-level Core Objects + +.. currentmodule:: floodlight.core +.. autosummary:: + :nosignatures: + + teamsheet.Teamsheet diff --git a/docs/source/modules/core/definitions.rst b/docs/source/modules/core/definitions.rst new file mode 100644 index 00000000..57323dc8 --- /dev/null +++ b/docs/source/modules/core/definitions.rst @@ -0,0 +1,11 @@ +.. _definitions target: + +=========================== +floodlight.core.definitions +=========================== + +The following source code defines essential and protected columns for usage in :doc:`Events ` and :doc:`Teamsheet ` objects. + +.. literalinclude:: ../../../../floodlight/core/definitions.py + :language: python + :lines: 6-115 diff --git a/docs/source/modules/core/teamsheet.rst b/docs/source/modules/core/teamsheet.rst new file mode 100644 index 00000000..7447c169 --- /dev/null +++ b/docs/source/modules/core/teamsheet.rst @@ -0,0 +1,6 @@ +========================= +floodlight.core.teamsheet +========================= + +.. automodule:: floodlight.core.teamsheet + :members: diff --git a/floodlight/core/definitions.py b/floodlight/core/definitions.py index baa952cd..c50168b0 100644 --- a/floodlight/core/definitions.py +++ b/floodlight/core/definitions.py @@ -19,6 +19,14 @@ } } +essential_teamsheet_columns = { + "player": { + "definition": "Name of a player. May be abbreviated or contain aliases.", + "dtypes": [str], + "value_range": None, + } +} + protected_columns = { "pID": { @@ -67,12 +75,12 @@ "value_range": None }, "minute": { - "definition": "Minute of the segment the event took place", + "definition": "Minute of the segment when an event took place", "dtypes": [int], "value_range": [0, np.inf] }, "second": { - "definition": "Second of the minute of the segment the event took place", + "definition": "Second of the minute of the segment when an event took place", "dtypes": [int], "value_range": [0, np.inf] }, @@ -83,27 +91,33 @@ "value_range": [0, 1], }, "at_x": { - "definition": "The x position (longitudinal) where the event took place or " + "definition": "The x position (longitudinal) where an event took place or " "originated from", "dtypes": [float], "value_range": None }, "at_y": { - "definition": "The y position (lateral) where the event took place or " + "definition": "The y position (lateral) where an event took place or " "originated from", "dtypes": [float], "value_range": None }, "to_x": { - "definition": "The x position (longitudinal) where the event ended", + "definition": "The x position (longitudinal) where an event ended", "dtypes": [float], "value_range": None }, "to_y": { - "definition": "The y position (lateral) where the event ended", + "definition": "The y position (lateral) where an event ended", "dtypes": [float], "value_range": None }, + "started": { + "definition": "Boolean indicating whether a player started the observation as" + "an active player.", + "dtypes": [bool], + "value_range": None + } } # fmt:on diff --git a/floodlight/core/events.py b/floodlight/core/events.py index 23b7afcf..2397b094 100644 --- a/floodlight/core/events.py +++ b/floodlight/core/events.py @@ -15,12 +15,11 @@ class Events: """Event data fragment. Core class of floodlight. - Event data is stored in `pandas` ``DataFrame``, where each row stores one event - with its different properties organized in columns. You may put whatever - information you like in these columns. Yet, the columns `"eID"` and `"gameclock"` - are mandatory to identify and time-locate events. Some special column names are - reserved for properties that follow conventions. These may be necessary and their - existence is checked for running particular analyses. + Event data is stored in a `pandas` ``DataFrame``, where each row stores one + event with its different properties organized in columns. Columns may contain + any relevant information. An `"eID"` (event ID) and `"gameclock"` column is + required for instantiation, to identify and time-locate events. Some particular + column names are protected (see Notes). Parameters ---------- @@ -47,6 +46,19 @@ class Events: List of missing protected columns. protected_invalid: list List of protected columns that violate the definitions. + + Notes + ----- + Event data, particularly information available for each event, may vary across + data providers. To accommodate all data flavours, any column name or data type is + permissible. However, two `essential` column are required (`"eID"` and + `"gameclock`). Other column names are `protected`. Using these names assumes that + data stored in these columns follows conventions in terms of data types and value + ranges. These are required for methods working with protected columns to assure + correct calculations. Definitions for `essential` and `protected` columns can be + found in + :ref:`floodlight.core.definitions `. + """ events: pd.DataFrame @@ -66,10 +78,9 @@ def __post_init__(self): if incorrect_columns: for col in incorrect_columns: warnings.warn( - f"Floodlight Events column {col} does not match the defined value" - f"range (from floodlight.core.definitions). You can pursue at this " - f"point, however, be aware that this may lead to unexpected " - f"behavior in the future." + f"The '{col}' column does not match the defined value range (from " + f"floodlight.core.definitions). This may lead to unexpected " + f"behavior of methods using this column." ) def __str__(self): @@ -145,12 +156,13 @@ def protected_invalid(self): def column_values_in_range(self, col: str, definitions: Dict[str, Dict]) -> bool: """Check if values for a single column of the inner event DataFrame are in - correct range using using the specifications from floodlight.core.definitions. + correct range using the specifications from + :ref:`floodlight.core.definitions `. Parameters ---------- col: str - Column name of the inner event DataFrame to be checked + Column name of the inner events DataFrame to be checked definitions: Dict Dictionary (from floodlight.core.definitions) containing specifications for the columns to be checked. diff --git a/floodlight/core/teamsheet.py b/floodlight/core/teamsheet.py new file mode 100644 index 00000000..85262099 --- /dev/null +++ b/floodlight/core/teamsheet.py @@ -0,0 +1,240 @@ +from dataclasses import dataclass +from typing import Dict +import warnings + +import pandas as pd + +from floodlight.core.definitions import essential_teamsheet_columns, protected_columns + + +@dataclass +class Teamsheet: + """Teamsheet storing player information. Core class of floodlight. + + Teamsheet data is stored in a `pandas` ``DataFrame``, where each row stores one + player with their different properties organized in columns. Columns may contain + any relevant information. A `"player"` column is required for instantiation + to identify a player, and some particular column names are protected (see Notes). + + Parameters + ---------- + teamsheet: pd.DataFrame + DataFrame containing rows of players and columns of respective properties. + + Attributes + ---------- + essential: list + List of essential columns available for stored players. + protected: list + List of protected columns available for stored players. + custom: list + List of custom (i.e. non-essential and non-protected) columns available for + stored players. + essential_missing: list + List of missing essential columns. + essential_invalid: list + List of essential columns that violate the definitions. + protected_missing: list + List of missing protected columns. + protected_invalid: list + List of protected columns that violate the definitions. + + Notes + ----- + Teamsheet data, particularly information available for players, may vary across + data providers. To accommodate all data flavours, any column name or data type is + permissible. However, one `essential` column is required (`"player"`). Other column + names are `protected`. Using these names assumes that data stored in these columns + follows conventions in terms of data types and value ranges. These are required for + methods working with protected columns to assure correct calculations. Definitions + for `essential` and `protected` columns can be found in + :ref:`floodlight.core.definitions `. + + """ + + teamsheet: pd.DataFrame + + def __post_init__(self): + # check for missing essential columns + missing_columns = self.essential_missing + if missing_columns: + raise ValueError( + f"Floodlight Teamsheet object is missing the essential " + f"column(s) {missing_columns}!" + ) + + # warn if value ranges are violated + incorrect_columns = self.essential_invalid + if incorrect_columns: + for col in incorrect_columns: + warnings.warn( + f"The '{col}' column does not match the defined value range (from " + f"floodlight.core.definitions). This may lead to unexpected " + f"behavior of methods using this column." + ) + + def __str__(self): + return f"Floodlight Teamsheet object of shape {self.teamsheet.shape}" + + def __len__(self): + return len(self.teamsheet) + + def __getitem__(self, key): + return self.teamsheet[key] + + def __setitem__(self, key, value): + self.teamsheet[key] = value + + @property + def essential(self): + essential = [ + col for col in self.teamsheet.columns if col in essential_teamsheet_columns + ] + + return essential + + @property + def protected(self): + protected = [col for col in self.teamsheet.columns if col in protected_columns] + return protected + + @property + def custom(self): + custom = [ + col + for col in self.teamsheet.columns + if col not in essential_teamsheet_columns and col not in protected_columns + ] + + return custom + + @property + def essential_missing(self): + missing_columns = [ + col for col in essential_teamsheet_columns if col not in self.essential + ] + + return missing_columns + + @property + def essential_invalid(self): + invalid_columns = [ + col + for col in self.essential + if not self.column_values_in_range(col, essential_teamsheet_columns) + ] + + return invalid_columns + + @property + def protected_missing(self): + missing_columns = [ + col for col in protected_columns if col not in self.protected + ] + + return missing_columns + + @property + def protected_invalid(self): + invalid_columns = [ + col + for col in self.protected + if not self.column_values_in_range(col, protected_columns) + ] + + return invalid_columns + + def column_values_in_range(self, col: str, definitions: Dict[str, Dict]) -> bool: + """Check if values for a single column of the inner teamsheet DataFrame are in + correct range using the specifications from + :ref:`floodlight.core.definitions `. + + Parameters + ---------- + col: str + Column name of the inner teamsheet DataFrame to be checked + definitions: Dict + Dictionary (from floodlight.core.definitions) containing specifications for + the columns to be checked. + + The definitions need to contain an entry for the column to be checked and + this entry needs to contain information about the value range in the form: + ``definitions[col][value_range] = (min, max)``. + + Returns + ------- + bool + True if the checks for value range pass and False otherwise + + Notes + ----- + Non-integer results of this computation will always be rounded to the next + smaller integer. + """ + # skip if value range is not defined + if definitions[col]["value_range"] is None: + return True + + # skip values that are None or NaN + col_nan_free = self.teamsheet[col].dropna() + + # retrieve value range from definitions + min_val, max_val = definitions[col]["value_range"] + + # check value range for remaining values + if not (min_val <= col_nan_free).all() & (col_nan_free <= max_val).all(): + return False + + # all checks passed + return True + + def get_links(self, keys: str, values: str) -> dict: + """Creates dictionary of links between two columns of the teamsheet as specified + by `keys` and `values`. + + Parameters + ---------- + keys : str + Column of teamsheet used as keys in links dictionary. + values : str + Column of teamsheet used as values in links dictionary. + + Returns + ------- + links : dict + Dictionary of links between columns specified by `keys` and `values` + argument. + """ + # checks + if keys not in self.teamsheet.columns: + raise ValueError(f"No '{keys}' column in teamsheet.") + if values not in self.teamsheet.columns: + raise ValueError(f"No '{values}' column in teamsheet.") + if not self.teamsheet[keys].is_unique: + raise ValueError( + f"Cannot construct dictionary with unambiguous assignments" + f" as '{keys}' column has duplicate entries." + ) + # bin + links = {} + + # loop through players + for idx in self.teamsheet.index: + # add key-value pairs to links dict: + links[self.teamsheet.at[idx, keys]] = self.teamsheet.at[idx, values] + + return links + + def add_xIDs(self): + """Adds the column "xID" as an increasing index over all players. + + + The player index identifier ("xID") is used to enforce an order to the players + within a team. This identifier is primarily used for locating players in + respective XY objects, but can also be helpful iterating over or displaying all + players of a team. This function assigns the "xID" as an increasing index that + counts over all players in the inner teamsheet DataFrame, starting at 0 + and ending at N_players - 1. Any existing entries for "xID" are overwritten by + this function. + """ + self.teamsheet["xID"] = [i for i in range(len(self.teamsheet))] diff --git a/tests/test_core/conftest.py b/tests/test_core/conftest.py index 1bbdbbb9..dbc66da2 100644 --- a/tests/test_core/conftest.py +++ b/tests/test_core/conftest.py @@ -227,3 +227,19 @@ def example_pitch_handball() -> Pitch: ) return handball_pitch + + +# Teamsheet +@pytest.fixture() +def example_teamsheet_data() -> pd.DataFrame: + + data = pd.DataFrame( + { + "player": ["player 1", "player 2", "player 3"], + "pID": [1, 2, 3], + "jID": [1, 13, 99], + "position": ["GK", "SUB", "SUB"], + } + ) + + return data diff --git a/tests/test_core/test_events.py b/tests/test_core/test_events.py index 43100072..f0f746a6 100644 --- a/tests/test_core/test_events.py +++ b/tests/test_core/test_events.py @@ -71,7 +71,7 @@ def test_essential_missing( @pytest.mark.unit -@pytest.mark.filterwarnings("ignore: Floodlight Events column") +@pytest.mark.filterwarnings("ignore: The 'gameclock' column") def test_essential_invalid( example_events_data_minimal_invalid_essential: pd.DataFrame, ) -> None: diff --git a/tests/test_core/test_teamsheet.py b/tests/test_core/test_teamsheet.py new file mode 100644 index 00000000..dbf61c3c --- /dev/null +++ b/tests/test_core/test_teamsheet.py @@ -0,0 +1,107 @@ +from copy import deepcopy + +import pytest +import pandas as pd + +from floodlight.core.teamsheet import Teamsheet +from floodlight.core.definitions import protected_columns + + +@pytest.mark.unit +def test_teamsheet_getter(example_teamsheet_data: pd.DataFrame) -> None: + data = Teamsheet(example_teamsheet_data) + pIDs = data["pID"] + assert pd.Series.equals(pIDs, pd.Series([1, 2, 3])) + + +@pytest.mark.unit +def test_teamsheet_setter(example_teamsheet_data: pd.DataFrame) -> None: + data = Teamsheet(example_teamsheet_data) + data["pID"] = [2, 3, 4] + assert pd.Series.equals(data["pID"], pd.Series([2, 3, 4])) + + +@pytest.mark.unit +def test_column_properties() -> None: + # Arrange df with different columns + columns = ["name", "pID"] + df = pd.DataFrame(columns=columns) + + # trigger post_init + with pytest.raises(ValueError): + teamsheet = Teamsheet(teamsheet=df) + + # add missing column + columns.append("player") + df = pd.DataFrame(columns=columns) + teamsheet = Teamsheet(teamsheet=df) + + # Assert column properties + assert teamsheet.essential == ["player"] + assert teamsheet.protected == ["pID"] + assert teamsheet.custom == ["name"] + assert teamsheet.essential_missing == [] + assert len(teamsheet.protected_missing) > 3 + + +@pytest.mark.unit +def test_protected_missing( + example_teamsheet_data: pd.DataFrame, +) -> None: + data = Teamsheet(example_teamsheet_data) + missing_protected_columns = data.protected_missing + assert len(missing_protected_columns) == 13 + + +@pytest.mark.unit +def test_protected_invalid( + example_teamsheet_data: pd.DataFrame, +) -> None: + data = Teamsheet(example_teamsheet_data) + data.teamsheet.at[1, "jID"] = -1 + invalid_protected_columns = data.protected_invalid + assert invalid_protected_columns == ["jID"] + + +@pytest.mark.unit +def test_column_values_in_range( + example_teamsheet_data: pd.DataFrame, +) -> None: + # Arrange + data = Teamsheet(example_teamsheet_data) + jID_in_range = data.column_values_in_range("jID", protected_columns) + + assert jID_in_range + + +@pytest.mark.unit +def test_get_links(example_teamsheet_data) -> None: + data = Teamsheet(example_teamsheet_data) + + # trigger checks + with pytest.raises(ValueError): + data.get_links("xID", "pID") + with pytest.raises(ValueError): + data.get_links("pID", "xID") + with pytest.raises(ValueError): + data.get_links("position", "pID") + + links = data.get_links("pID", "jID") + assert links == {1: 1, 2: 13, 3: 99} + + +@pytest.mark.unit +def test_add_xIDs(example_teamsheet_data) -> None: + data = Teamsheet(example_teamsheet_data) + data.add_xIDs() + assert all(data.teamsheet["xID"].values == [0, 1, 2]) + + +@pytest.mark.unit +def test_add_xIDs_overwrite(example_teamsheet_data) -> None: + example_teamsheet_data["xID"] = [2, 0, 1] + original_data = Teamsheet(example_teamsheet_data) + new_data = Teamsheet(deepcopy(example_teamsheet_data)) + new_data.add_xIDs() + assert all(original_data.teamsheet["xID"].values == [2, 0, 1]) + assert all(new_data.teamsheet["xID"].values == [0, 1, 2]) From 36ea1735076e5c186aaf1695db6fe8176afa7637 Mon Sep 17 00:00:00 2001 From: draabe Date: Tue, 10 Jan 2023 13:22:49 +0100 Subject: [PATCH 10/25] test: update columns in tests --- tests/test_core/test_events.py | 7 ++----- tests/test_core/test_teamsheet.py | 4 +++- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/tests/test_core/test_events.py b/tests/test_core/test_events.py index f0f746a6..94c87fd5 100644 --- a/tests/test_core/test_events.py +++ b/tests/test_core/test_events.py @@ -89,14 +89,11 @@ def test_essential_invalid( def test_protected_missing( example_events_data_minimal: pd.DataFrame, ) -> None: - # Arrange data = Events(example_events_data_minimal) - - # Act missing_protected_columns = data.protected_missing + total_num_protected = len(protected_columns) - # Assert - assert len(missing_protected_columns) == 15 + assert len(missing_protected_columns) == total_num_protected @pytest.mark.unit diff --git a/tests/test_core/test_teamsheet.py b/tests/test_core/test_teamsheet.py index dbf61c3c..0745e69e 100644 --- a/tests/test_core/test_teamsheet.py +++ b/tests/test_core/test_teamsheet.py @@ -50,7 +50,9 @@ def test_protected_missing( ) -> None: data = Teamsheet(example_teamsheet_data) missing_protected_columns = data.protected_missing - assert len(missing_protected_columns) == 13 + total_num_protected = len(protected_columns) + + assert len(missing_protected_columns) == total_num_protected - 2 @pytest.mark.unit From 40c9df3acda217e260c638eb9c7c678595b4c1c3 Mon Sep 17 00:00:00 2001 From: manuba95 Date: Thu, 19 Jan 2023 13:04:14 +0100 Subject: [PATCH 11/25] feat: add sportradar parser (#110) * feat: sportradar parser initial commit * feat: initial working version * fix: unwanted behavior of late period start * docs: docstrings, inline comments and typing * fix: bug in period detection * refactor: documentation and minor fixes * fix: remove pre-commit-config.yaml * refactor: added gross minutes, seconds and updated documentation * fix: typos --- docs/source/modules/io/io.rst | 1 + docs/source/modules/io/sportradar.rst | 6 + floodlight/io/sportradar.py | 225 ++++++++++++++++++++++++++ 3 files changed, 232 insertions(+) create mode 100644 docs/source/modules/io/sportradar.rst create mode 100644 floodlight/io/sportradar.py diff --git a/docs/source/modules/io/io.rst b/docs/source/modules/io/io.rst index 306cd3f5..129893bd 100644 --- a/docs/source/modules/io/io.rst +++ b/docs/source/modules/io/io.rst @@ -13,6 +13,7 @@ Collection of file parsing functionalities for different data providers as well kinexon opta secondspectrum + sportradar statsbomb statsperform tracab diff --git a/docs/source/modules/io/sportradar.rst b/docs/source/modules/io/sportradar.rst new file mode 100644 index 00000000..0f6f9f6f --- /dev/null +++ b/docs/source/modules/io/sportradar.rst @@ -0,0 +1,6 @@ +======================== +floodlight.io.sportradar +======================== + +.. automodule:: floodlight.io.sportradar + :members: diff --git a/floodlight/io/sportradar.py b/floodlight/io/sportradar.py new file mode 100644 index 00000000..562038ae --- /dev/null +++ b/floodlight/io/sportradar.py @@ -0,0 +1,225 @@ +from pathlib import Path +from typing import Dict, Union + +import datetime +import json +import pandas as pd + +from floodlight import Events +from floodlight.io.utils import get_and_convert + + +def read_sportradar_timeline( + filepath_events: Union[str, Path] +) -> Dict[str, Dict[str, Dict]]: + """Parses the Sportradar timeline files in json format and extracts the event data. + + This function provides access to `Sport Event Timeline + `_ files from the data provider `Sportradar + `_ exported in json format and returns Event objects for + all teams and segments of the game. + + Parameters + ---------- + filepath_events: str or pathlib.Path + Full path to json file where the Sport Event Timeline is saved. + + Returns + ------- + data_objects: Dict[str: Dict[str: Events]] + Nested dictionary with ``Events`` objects for all teams and segments. The + returned dictionary contains one dictionary per segment, which in return contain + one ``Events`` object per team. For a usual league match with two halves and + two teams this dictionary looks like: + ``{"HT1": {"Home": Events, "Away": Events}, "HT2": {Home: Events, Away: + Events}}`` + + Notes + ----- + Sportradar provides different information depending on the respective Event type. + This parser itemizes top-level information for each possible event type listed in + the `Handball v2 documentation FAQ + `_ (most recent check: 11.01.2023). + + For example, this involves individual columns for the home and away score parsed + event type *score_change*. However, individual columns for players involved in + Events, like *seven_m_awarded* or *shots* are not fully itemized, as they can + contain different information depending on the situation. More complex information + that changes per event type is instead included as dict or list of dicts in + according column, so they can be accessed if necessary. + + In the return, the following columns contain temporal information about the event: + ``("gameclock", "time_stamp", "minutes_gross", "seconds_gross", "minutes", "seconds" + )``. In handball, the match-clock determines the net playing time (60 minutes) and + diverges from the gross "real world" time passed. The "gameclock" column contains + the gross time passed in seconds in relation to the start of the respective segment. + The "minute_gross" and "second_gross" columns contain the "gameclock" converted to + minutes and seconds, respectively. The columns "minutes" and "seconds" contain the + information about the net match-clock. the column "time_stamp" contains the global + time-stamp of the respective event in the ISO 8601 standard format. + + The column "outcome" in the return contains the "outcome" information in the raw + event data and not information about the success {0, 1} of an event. The outcome in + terms of success can be inferred by the ``eID``. E.g. "score_change" implies that a + shot lead to a goal, "shot_saved" implies that a goal was not scored. + """ + + # load full json into memory + with open(str(filepath_events)) as f: + events = json.load(f) + + # check if timeline data exists + if "timeline" not in events: + raise ValueError("There appears to be no timeline data in this file.") + else: + timeline = events["timeline"] + + # extract match id + mID = events["sport_event"]["id"] + + # create links from home/away to team id and team name + teams = ["Home", "Away"] + + home_away_link = {} + for competitor in events["statistics"]["totals"]["competitors"]: + home_away_link.update( + { + competitor["qualifier"].capitalize(): ( + competitor["id"], + competitor["name"], + ) + } + ) + + # extract periods + periods = sorted( + set( + [ + event["period_name"] + for event in timeline + if event["type"] == "period_start" + ] + ) + ) + + # create team event dict + columns = [ + "eID", + "gameclock", + "time_stamp", + "minute_gross", + "second_gross", + "minute", + "second", + "pID", + "player_name", + "tID", + "team_name", + "mID", + "home_score", + "away_score", + "scorer", + "assists", + "zone", + "shot_type", + "outcome", + "players", + ] + + segments = [f"HT{period[0]}" for period in periods] + + team_event_lists = { + team: {segment: {col: [] for col in columns} for segment in segments} + for team in teams + } + + period = None + # loop through event timeline + for event in timeline: + if period is None: + # get first period + if event["type"] == "period_start": + period = event["period_name"] + segment = f"HT{period[0]}" + segment_start = datetime.datetime.fromisoformat(event["time"]) + else: + # skip events before first period starts + continue + # get new periods + else: + if event["type"] == "period_start": + period = event["period_name"] + segment = f"HT{period[0]}" + segment_start = datetime.datetime.fromisoformat(event["time"]) + + # extract event, player and team ids and names + eID = event["type"] + + # add all teams as competitors if no competitor is specified in event + competitor = ( + [event["competitor"].capitalize()] if "competitor" in event else teams + ) + + tID = home_away_link[competitor[0]][0] if len(competitor) == 1 else None + team_name = home_away_link[competitor[0]][1] if len(competitor) == 1 else None + pID = event["player"]["id"] if "player" in event else None + player_name = event["player"]["name"] if "player" in event else None + + # extract time codes and match-clock + time_stamp = datetime.datetime.fromisoformat(event["time"]) + time_delta = time_stamp - segment_start + gameclock = time_delta.seconds + minute_gross = int(gameclock / 60) + second_gross = int(gameclock % 60) + + if "match_clock" in event: + match_clock = event["match_clock"] + minute, second = [int(x) for x in match_clock.split(":")] + else: + minute, second = (None, None) + + # extract optional event information + outcome = get_and_convert(event, "outcome", str) + home_score = get_and_convert(event, "home_score", int) + away_score = get_and_convert(event, "away_score", int) + scorer = get_and_convert(event, "scorer", Dict) + assists = get_and_convert(event, "assists", list) + zone = get_and_convert(event, "zone", str) + shot_type = get_and_convert(event, "shot_type", str) + players = get_and_convert(event, "players", list) + + # add event to team event list + for team in competitor: + team_event_lists[team][segment]["eID"].append(eID) + team_event_lists[team][segment]["gameclock"].append(gameclock) + team_event_lists[team][segment]["time_stamp"].append(time_stamp) + team_event_lists[team][segment]["minute_gross"].append(minute_gross) + team_event_lists[team][segment]["second_gross"].append(second_gross) + team_event_lists[team][segment]["minute"].append(minute) + team_event_lists[team][segment]["second"].append(second) + team_event_lists[team][segment]["pID"].append(pID) + team_event_lists[team][segment]["player_name"].append(player_name) + team_event_lists[team][segment]["tID"].append(tID) + team_event_lists[team][segment]["team_name"].append(team_name) + team_event_lists[team][segment]["mID"].append(mID) + team_event_lists[team][segment]["home_score"].append(home_score) + team_event_lists[team][segment]["away_score"].append(away_score) + team_event_lists[team][segment]["scorer"].append(scorer) + team_event_lists[team][segment]["assists"].append(assists) + team_event_lists[team][segment]["zone"].append(zone) + team_event_lists[team][segment]["shot_type"].append(shot_type) + team_event_lists[team][segment]["outcome"].append(outcome) + team_event_lists[team][segment]["players"].append(players) + + # flexible parser return for all segments and teams + data_objects = { + segment: { + team: Events(events=pd.DataFrame(data=team_event_lists[team][segment])) + for team in teams + } + for segment in segments + } + + return data_objects From 48e97938812c0e1fd2ccc0711f8b19f3a9c42688 Mon Sep 17 00:00:00 2001 From: hbiermann95 <58177509+hbiermann95@users.noreply.github.com> Date: Tue, 31 Jan 2023 12:33:25 +0100 Subject: [PATCH 12/25] feat!: integrate teamsheet logic to dfl parser (#106) BREAKING CHANGE: replaces link creation functions with teamsheet parsing functions * feat: add teamsheet core object * docs: add definitions * docs: add teamsheet * docs: update events docstrings, integrate definitions * fix: broken test * test: add tests for teamsheet object * feat: function to read teamsheet from file * feat: add teamsheet parser and integrate to read_position_data function * feat: integrate option of passing single teamsheet to position data parser * feat: function to add xIDs by counting over players * feat: add xIDs (#102) * test: add_xIDs function for create and overwrite * feat: add_xIDs functionality * refactor: docstrings and cleanup code * refactor: make read_teamsheet_from_mat_info return dictionary of teamsheets instead of tuple * fix: typo that assigned away_id for all players * fix: broken test * refactor: make event parser return teamsheet * test: merge tests from develop * perf: read list of players once and reuse while creating teamsheet * refactor: make events parser return pitch * refactor: code style * refactor: variable names of teamsheets * fix: use get_and_convert function --------- Co-authored-by: draabe --- floodlight/io/dfl.py | 332 ++++++++++++++++++++++++++++--------------- 1 file changed, 219 insertions(+), 113 deletions(-) diff --git a/floodlight/io/dfl.py b/floodlight/io/dfl.py index be4c6b5a..157a0a59 100644 --- a/floodlight/io/dfl.py +++ b/floodlight/io/dfl.py @@ -11,6 +11,8 @@ from floodlight.core.events import Events from floodlight.core.pitch import Pitch from floodlight.core.xy import XY +from floodlight.core.teamsheet import Teamsheet +from floodlight.io.utils import get_and_convert def _create_periods_from_dat( @@ -65,68 +67,6 @@ def _create_periods_from_dat( return periods, framerate_est -def create_links_from_mat_info( - filepath_mat_info: Union[str, Path] -) -> Tuple[Dict[str, Dict[int, int]], Dict[str, Dict[str, int]]]: - """Parses the DFL Match Information XML file for unique jIDs (jerseynumbers) and - creates two dictionaries, one linking pIDs to jIDs and one linking jIDs to xIDs in - ascending order. - - Parameters - ---------- - filepath_mat_info: str or pathlib.Path - Full path to XML File where the Match Information data in DFL format is saved - - Returns - ------- - links_jID_to_xID: Dict[str, Dict[int, int]] - A link dictionary of the form `links[team][jID] = xID`. - links_pID_to_jID: Dict[str, Dict[str, int]] - A link dictionary of the form `links[team][pID] = jID`. - """ - # set up XML tree - tree = etree.parse(str(filepath_mat_info)) - root = tree.getroot() - - # parse XML file and extract links from pID to xID for both teams - links_pID_to_jID = {} - teams = root.find("MatchInformation").find("Teams") - home = root.find("MatchInformation").find("General").get("HomeTeamId") - if "AwayTeamId" in root.find("MatchInformation").find("General").attrib: - away = root.find("MatchInformation").find("General").get("AwayTeamId") - elif "GuestTeamId" in root.find("MatchInformation").find("General").attrib: - away = root.find("MatchInformation").find("General").get("GuestTeamId") - else: - away = None - - for team in teams: - if team.get("TeamId") == home: - links_pID_to_jID["Home"] = { - player.get("PersonId"): int(player.get("ShirtNumber")) - for player in team.find("Players") - } - elif team.get("TeamId") == away: - links_pID_to_jID["Away"] = { - player.get("PersonId"): int(player.get("ShirtNumber")) - for player in team.find("Players") - } - else: - continue - - links_jID_to_xID = { - "Home": { - int(links_pID_to_jID["Home"][pID]): xID - for xID, pID in enumerate(links_pID_to_jID["Home"]) - }, - "Away": { - int(links_pID_to_jID["Away"][pID]): xID - for xID, pID in enumerate(links_pID_to_jID["Away"]) - }, - } - - return links_jID_to_xID, links_pID_to_jID - - def _get_event_description( elem: etree.Element, ) -> Tuple[str, Dict[str, Union[str, int]]]: @@ -342,24 +282,121 @@ def read_pitch_from_mat_info_xml(filepath_mat_info: Union[str, Path]) -> Pitch: return pitch -def read_event_data_xml( - filepath_events: Union[str, Path] -) -> Tuple[Events, Events, Events, Events]: - """Parses a DFL Match Event XML file and extracts the event data. +def read_teamsheets_from_mat_info_xml(filepath_mat_info) -> Dict[str, Teamsheet]: + """Reads match_information XML file and returns two teamsheet objects for the home + and the away team. + + Parameters + ---------- + filepath_mat_info: str or pathlib.Path + Full path to XML File where the Match Information data in DFL format is saved. + + Returns + ------- + teamsheets: Dict[str, Teamsheet] + Dictionary with teamsheets for the home team and the away team. + """ + # set up XML tree + tree = etree.parse(str(filepath_mat_info)) + root = tree.getroot() + + # initialize teamsheets + teamsheets = { + "Home": pd.DataFrame( + columns=["player", "position", "team", "jID", "pID", "tID"] + ), + "Away": pd.DataFrame( + columns=["player", "position", "team", "jID", "pID", "tID"] + ), + } + + # find team ids + team_informations = root.find("MatchInformation").find("Teams") + home_id = root.find("MatchInformation").find("General").get("HomeTeamId") + if "AwayTeamId" in root.find("MatchInformation").find("General").attrib: + away_id = root.find("MatchInformation").find("General").get("AwayTeamId") + elif "GuestTeamId" in root.find("MatchInformation").find("General").attrib: + away_id = root.find("MatchInformation").find("General").get("GuestTeamId") + else: + away_id = None + + # parse player information + for team_info in team_informations: + if team_info.get("TeamId") == home_id: + team = "Home" + elif team_info.get("TeamId") == away_id: + team = "Away" + else: + team = None + + # skip referees sometimes referred to as a team in new data formats + if team not in ["Home", "Away"]: + continue - This function provides a high-level access to the particular DFL Match Event feed - and returns Event objects for both teams. The number of segments is inferred from - the data, yet data for each segment is stored in a separate object. + # create list of players + players = team_info.find("Players") + + # create teamsheets + teamsheets[team]["player"] = [ + get_and_convert(player, "Shortname", str) for player in players + ] + teamsheets[team]["pID"] = [ + get_and_convert(player, "PersonId", str) for player in players + ] + teamsheets[team]["jID"] = [ + get_and_convert(player, "ShirtNumber", int) for player in players + ] + teamsheets[team]["position"] = [ + get_and_convert(player, "PlayingPosition", str) for player in players + ] + teamsheets[team]["tID"] = team_info.get("TeamId") + teamsheets[team]["team"] = team_info.get("TeamName") + + # create teamsheet objects + for team in teamsheets: + teamsheets[team] = Teamsheet(teamsheets[team]) + + return teamsheets + + +def read_event_data_xml( + filepath_events: Union[str, Path], + filepath_mat_info: Union[str, Path], + teamsheet_home: Teamsheet = None, + teamsheet_away: Teamsheet = None, +) -> Tuple[Events, Events, Events, Events, Pitch, Teamsheet, Teamsheet]: + """Parses a DFL Match Event XML file and extracts the event data as well as + teamsheets. + + The structure of the official tracking system of the DFL (German Football League) + contains two separate xml files, one containing the actual data as well as a + metadata file containing information about teams, pitch size, and start- and + endframes of match periods. This function provides high-level access to DFL data by + parsing "the full match" and returning Events-objects parsed from the event data + xml-file as well as Teamsheet-objects parsed from the metadata xml-file. The number + of segments is inferred from the data, yet data for each segment is stored in a + separate object. Parameters ---------- filepath_events: str or pathlib.Path Full path to XML File where the Event data in DFL format is saved. + filepath_mat_info: str or pathlib.Path + Full path to XML File where the Match Information data in DFL format is saved. + teamsheet_home: Teamsheet, optional + Teamsheet-object for the home team used to assign the tIDs of the teams to the + "Home" and "Away" position. If given as None (default), teamsheet is extracted + from the Match Information XML file. + teamsheet_away: Teamsheet, optional + Teamsheet-object for the away team. If given as None (default), teamsheet is + extracted from the Match Information XML file. See teamsheet_home for details. Returns ------- - data_objects: Tuple[Events, Events, Events, Events] - Events- and Pitch-objects for both teams and both halves. + data_objects: Tuple[Events, Events, Events, Events, Pitch, Teamsheet, Teamsheet] + Events- and Pitch-objects for both teams and both halves. The order is + (events_home_ht1, events_home_ht2, events_away_ht1, events_away_ht2, pitch + teamsheet_home, teamsheet_away). Notes ----- @@ -375,6 +412,24 @@ def read_event_data_xml( tree = etree.parse(str(filepath_events)) root = tree.getroot() + # read metadata + pitch = read_pitch_from_mat_info_xml(filepath_mat_info) + + # create or check teamsheet objects + if teamsheet_home is None and teamsheet_away is None: + teamsheets = read_teamsheets_from_mat_info_xml(filepath_mat_info) + teamsheet_home = teamsheets["Home"] + teamsheet_away = teamsheets["Away"] + elif teamsheet_home is None: + teamsheets = read_teamsheets_from_mat_info_xml(filepath_mat_info) + teamsheet_home = teamsheets["Home"] + elif teamsheet_away is None: + teamsheets = read_teamsheets_from_mat_info_xml(filepath_mat_info) + teamsheet_away = teamsheets["Away"] + else: + pass + # potential check + # find start of halves start_times = {} start_events = root.findall("Event/KickoffWhistle") @@ -513,24 +568,49 @@ def read_event_data_xml( f"other segment!" ) + # link team1 and team2 to home and away + home_tID = teamsheet_home.teamsheet.at[0, "tID"] + away_tID = teamsheet_away.teamsheet.at[0, "tID"] + links_team_to_role = { + "Home": home_tID, + "Away": away_tID, + } + + # check if home and away tIDs occur in event data + if team1 != home_tID and team2 != home_tID: + raise AttributeError( + f"Neither tID of teams in the event data ({team1} and {team2}) " + f"matches the tID of the home team from the " + f"teamsheet_home ({home_tID})!" + ) + if team1 != away_tID and team2 != away_tID: + raise AttributeError( + f"Neither tID of teams in the event data ({team1} and {team2}) " + f"matches the tID of the away team from the " + f"teamsheet_away ({away_tID})!" + ) + # assembly - events_team1_ht1 = Events( - events=team_dfs[segments[0]][team1], + events_home_ht1 = Events( + events=team_dfs[segments[0]][links_team_to_role["Home"]], ) - events_team1_ht2 = Events( - events=team_dfs[segments[1]][team1], + events_home_ht2 = Events( + events=team_dfs[segments[1]][links_team_to_role["Home"]], ) - events_team2_ht1 = Events( - events=team_dfs[segments[0]][team2], + events_away_ht1 = Events( + events=team_dfs[segments[0]][links_team_to_role["Away"]], ) - events_team2_ht2 = Events( - events=team_dfs[segments[1]][team2], + events_away_ht2 = Events( + events=team_dfs[segments[1]][links_team_to_role["Away"]], ) data_objects = ( - events_team1_ht1, - events_team1_ht2, - events_team2_ht1, - events_team2_ht2, + events_home_ht1, + events_home_ht2, + events_away_ht1, + events_away_ht2, + pitch, + teamsheet_home, + teamsheet_away, ) return data_objects @@ -539,18 +619,21 @@ def read_event_data_xml( def read_position_data_xml( filepath_positions: Union[str, Path], filepath_mat_info: Union[str, Path], - links_jID_to_xID: Dict[str, Dict[int, int]] = None, - links_pID_to_jID: Dict[str, Dict[int, int]] = None, -) -> Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch]: + teamsheet_home: Teamsheet = None, + teamsheet_away: Teamsheet = None, +) -> Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch, Teamsheet, Teamsheet]: """Parse DFL files and extract position data, possession and ballstatus codes as - well as pitch information. - - The official tracking system of the DFL (German Football League) delivers two - separate XML files, one containing the actual data as well as a metadata file - containing information about pitch size and start- and endframes of match periods. - Since no information about framerate is delivered, it is estimated from time - difference between individual frames. This function provides a high-level access to - DFL data by parsing "the full match" given both files. + well as pitch information and teamsheets. + + The structure of the official tracking system of the DFL (German Football League) + contains two separate xml files, one containing the actual data as well as a + metadata file containing information about teams, pitch size, and start- and + endframes of match periods. However, since no information about framerate is + contained in the metadata, the framerate is estimated from the time difference + between individual frames. This function provides high-level access to DFL data by + parsing "the full match" and returning XY- and Code-objects parsed from the position + data xml-file as well as Pitch- and Teamsheet-objects parsed from the metadata + xml-file. Parameters ---------- @@ -558,36 +641,57 @@ def read_position_data_xml( Full path to XML File where the Position data in DFL format is saved. filepath_mat_info: str or pathlib.Path Full path to XML File where the Match Information data in DFL format is saved. - links_jID_to_xID: Dict, optional - A link dictionary of the form `links[team][jID] = xID`. Player's are identified - in the XML files via jID, and this dictionary is used to map them to a specific - xID in the respective XY objects. Should be supplied if that order matters. If - one of links or id_to_jrsy is given as None (default), they are automatically - extracted from the Match Information XML file. - links_pID_to_jID: Dict, optional - A link dictionary of the form `links[team][pID] = jID` where pID is the PersonId - specified in the DFL Match Information file. + teamsheet_home: Teamsheet, optional + Teamsheet-object for the home team used to create link dictionaries of the form + `links[team][jID] = xID` and `links[team][pID] = jID`. The links are used to + map players to a specific xID in the respective XY objects. Should be supplied + for custom ordering. If given as None (default), teamsheet is extracted from the + Match Information XML file and its xIDs are assigned in order of appearance. + teamsheet_away: Teamsheet, optional + Teamsheet-object for the away team. If given as None (default), teamsheet is + extracted from the Match Information XML file. See teamsheet_home for details. Returns ------- - data_objects: Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch] - XY-, Code-, and Pitch-objects for both teams and both halves. The order is - (home_ht1, home_ht2, away_ht1, away_ht2, ball_ht1, ball_ht2, - possession_ht1, possession_ht2, ballstatus_ht1, ballstatus_ht2, pitch) - + data_objects: Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch, + Teamsheet, Teamsheet] + XY-, Code-, Pitch-, and Teamsheet-objects for both teams and both halves. The + order is (home_ht1, home_ht2, away_ht1, away_ht2, ball_ht1, ball_ht2, + possession_ht1, possession_ht2, ballstatus_ht1, ballstatus_ht2, pitch, + teamsheet_home, teamsheet_away). """ # read metadata pitch = read_pitch_from_mat_info_xml(filepath_mat_info) - # create or check links - if links_jID_to_xID is None or links_pID_to_jID is None: - links_jID_to_xID, links_pID_to_jID = create_links_from_mat_info( - filepath_mat_info - ) + # create or check teamsheet objects + if teamsheet_home is None and teamsheet_away is None: + teamsheets = read_teamsheets_from_mat_info_xml(filepath_mat_info) + teamsheet_home = teamsheets["Home"] + teamsheet_away = teamsheets["Away"] + elif teamsheet_home is None: + teamsheets = read_teamsheets_from_mat_info_xml(filepath_mat_info) + teamsheet_home = teamsheets["Home"] + elif teamsheet_away is None: + teamsheets = read_teamsheets_from_mat_info_xml(filepath_mat_info) + teamsheet_away = teamsheets["Away"] else: pass # potential check + # create links + if "xID" not in teamsheet_home.teamsheet.columns: + teamsheet_home.add_xIDs() + if "xID" not in teamsheet_away.teamsheet.columns: + teamsheet_away.add_xIDs() + links_jID_to_xID = { + "Home": teamsheet_home.get_links("jID", "xID"), + "Away": teamsheet_away.get_links("jID", "xID"), + } + links_pID_to_jID = { + "Home": teamsheet_home.get_links("pID", "jID"), + "Away": teamsheet_away.get_links("pID", "jID"), + } + # create periods periods, framerate_est = _create_periods_from_dat(filepath_positions) segments = list(periods.keys()) @@ -722,6 +826,8 @@ def read_position_data_xml( ballstatus_ht1, ballstatus_ht2, pitch, + teamsheet_home, + teamsheet_away, ) return data_objects From 5768e9343f51ff2462abb7ecbd85e9ac1c6779fb Mon Sep 17 00:00:00 2001 From: hbiermann95 <58177509+hbiermann95@users.noreply.github.com> Date: Tue, 31 Jan 2023 12:33:53 +0100 Subject: [PATCH 13/25] feat!: integrate teamsheet logic to statsbomb parser (#109) BREAKING CHANGE: replaces link creation functions with teamsheet parsing functions * feat: add teamsheet core object * docs: add definitions * docs: add teamsheet * docs: update events docstrings, integrate definitions * fix: broken test * test: add tests for teamsheet object * feat: add xIDs (#102) * test: add_xIDs function for create and overwrite * feat: add_xIDs functionality * refactor: docstrings and cleanup code * refactor: rename statsbomb parse function to exclude redundant use of statsbomb and align with other parsers * feat: read teamsheet from events and return as parser output * refactor: docstrings * refactor: update StatsBomb dataset class to new output shape * refactor: update matchsheet tutorial to new output shape * refactor: docstrings * fix: typo in naming of functions * test: add mock test with non_existent_file * refactor: add newline at end of file * refactor: docstrings * refactor: standardize variable names * feat: teamsheet as function argument support * feat: teamsheet as function argument support * refactor: docstrings * test: add test to get a single match from StatsBomb dataset * style: flake8 * fix: convert pathlib to str * test: add test battery for StatssBomb dataset teamsheets * refactor: variable names and docstrings * refactor: variable names --------- Co-authored-by: draabe --- docs/source/guides/tutorial_matchsheets.rst | 9 +- floodlight/io/datasets.py | 130 ++++++++++-- floodlight/io/statsbomb.py | 211 +++++++++++++++++--- tests/test_io/conftest.py | 6 + tests/test_io/test_datasets.py | 136 +++++++++++++ tests/test_io/test_statsbomb.py | 13 ++ 6 files changed, 459 insertions(+), 46 deletions(-) create mode 100644 tests/test_io/test_statsbomb.py diff --git a/docs/source/guides/tutorial_matchsheets.rst b/docs/source/guides/tutorial_matchsheets.rst index 8e8a8521..85cdd110 100644 --- a/docs/source/guides/tutorial_matchsheets.rst +++ b/docs/source/guides/tutorial_matchsheets.rst @@ -16,7 +16,14 @@ First we need some data to work with. The open StatsBomb dataset contains (among # load a match from the UEFA Euro 2020 dataset = StatsBombOpenDataset() - home_ht1, home_ht2, away_ht1, away_ht2 = dataset.get("UEFA Euro", "2020", "Croatia vs. Spain") + ( + home_ht1, + home_ht2, + away_ht1, + away_ht2, + home_teamsheet, + away_teamsheet, + ) = dataset.get("UEFA Euro", "2020", "Croatia vs. Spain") pitch = dataset.get_pitch() The variables ``home_ht1``, ``home_ht2``, ``away_ht1``, and ``away_ht2`` are Events objects containing the events of the teams during the first and second half. These will be used to create the match sheets. The ``pitch`` variable is a Pitch object that contains information regarding the pitch specification and coordinate system our data live in. diff --git a/floodlight/io/datasets.py b/floodlight/io/datasets.py index bc0b591e..f9504888 100644 --- a/floodlight/io/datasets.py +++ b/floodlight/io/datasets.py @@ -1,6 +1,6 @@ import json import os -from typing import Tuple +from typing import Tuple, Dict from urllib.error import HTTPError, URLError import h5py @@ -8,8 +8,12 @@ import pandas as pd from floodlight.io.utils import extract_zip, download_from_url -from floodlight.io.statsbomb import read_open_statsbomb_event_data_json +from floodlight.io.statsbomb import ( + read_open_statsbomb_event_data_json, + read_teamsheets_from_open_statsbomb_event_data_json, +) from floodlight import XY, Pitch, Events, Code +from floodlight.core.teamsheet import Teamsheet from floodlight.settings import DATA_DIR @@ -367,7 +371,7 @@ class StatsBombOpenDataset: >>> from floodlight.io.datasets import StatsBombOpenDataset >>> dataset = StatsBombOpenDataset() # get one sample of event data with StatsBomb360 data - >>> events = dataset.get("UEFA Euro", "2020", "England vs. Germany") + >>> single_match_data = dataset.get("UEFA Euro", "2020", "England vs. Germany") # get the corresponding pitch >>> pitch = dataset.get_pitch() # get a summary of available matches in the dataset @@ -493,8 +497,10 @@ def get( competition_name: str = "La Liga", season_name: str = "2020/2021", match_name: str = None, - ) -> Tuple[Events, Events, Events, Events]: - """Get events from one match of the StatsBomb open dataset. + teamsheet_home: Teamsheet = None, + teamsheet_away: Teamsheet = None, + ) -> Tuple[Events, Events, Events, Events, Teamsheet, Teamsheet]: + """Get events and teamsheets from one match of the StatsBomb open dataset. If `StatsBomb360data `_ are @@ -516,12 +522,19 @@ def get( Match name relating to the available matches in the chosen competition and season. If equal to None (default), the first available match of the given competition and season is chosen. + teamsheet_home: Teamsheet, optional + Teamsheet-object for the home team used to create link dictionaries of the + form `links[pID] = team`. If given as None (default), teamsheet is extracted + from the Match Information XML file. + teamsheet_away: Teamsheet, optional + Teamsheet-object for the away team. If given as None (default), teamsheet is + extracted from the Match Information XML file. Returns ------- - data_objects: Tuple[Events, Events, Events, Events] - Returns four Events objects of the form (events_home_ht1, events_home_ht2, - events_away_ht1, events_away_ht2) for the requested sample. + data_objects: Tuple[Events, Events, Events, Events, Teamsheet, Teamsheet] + Events-, and Teamsheet objects for both teams and both halves. The order + is (home_ht1, home_ht2, away_ht1, away_ht2, teamsheet_home, teamsheet_away). """ # get identifiers from links cID = self._links_competition_to_cID[competition_name] @@ -577,16 +590,107 @@ def get( filepath_threesixty = None # read events from file - (home_ht1, home_ht2, away_ht1, away_ht2,) = read_open_statsbomb_event_data_json( - filepath_events, filepath_matches, filepath_threesixty + ( + home_ht1, + home_ht2, + away_ht1, + away_ht2, + teamsheet_home, + teamsheet_away, + ) = read_open_statsbomb_event_data_json( + filepath_events, + filepath_matches, + filepath_threesixty, + teamsheet_home, + teamsheet_away, ) - event_objects = (home_ht1, home_ht2, away_ht1, away_ht2) - return event_objects + # assembly + data_objects = ( + home_ht1, + home_ht2, + away_ht1, + away_ht2, + teamsheet_home, + teamsheet_away, + ) + + return data_objects + + def get_teamsheets( + self, + competition_name: str = "La Liga", + season_name: str = "2020/2021", + match_name: str = None, + ) -> Dict[str, Teamsheet]: + """Returns a dictionary with Teamsheet-objects for both teams ("Home" and + "Away") from one match of the StatsBomb open dataset. + + Parameters + ---------- + competition_name : str, optional + Competition name for which the match is played, check Notes section for + possible competitions. Defaults to "La Liga". + season_name : str, optional + Season name during which the match is played. For league matches use the + format YYYY/YYYY and for international cup matches the format YYYY. + Check Notes for available seasons of every competition. + Defaults to "2020/2021". + match_name: str, optional + Match name relating to the available matches in the chosen competition and + season. If equal to None (default), the first available match of the + given competition and season is chosen. + + Returns + ------- + teamsheets: Dict[str, Teamsheet] + Teamsheet-objects for both teams ("Home" and "Away") of the given match. + """ + + # get identifiers from links + cID = self._links_competition_to_cID[competition_name] + if competition_name not in self._links_season_to_sID: + self._read_season_match_links_for_competition_from_files(competition_name) + sID = self._links_season_to_sID[competition_name][season_name] + matches_dict = self._links_match_to_mID[competition_name][season_name] + if match_name is None: + mID = list(matches_dict.values())[0] + else: + mID = matches_dict[match_name] + + # create paths + filepath_matches = os.path.join( + os.path.join(self._matches_data_dir, str(cID)), + str(sID) + self._STATSBOMB_FILE_EXT, + ) + filepath_events = os.path.join( + self._events_data_dir, + str(mID) + self._STATSBOMB_FILE_EXT, + ) + + # check if events need to be downloaded + if not os.path.exists(filepath_events): + events_host_url = ( + f"{self._STATSBOMB_SCHEMA}://" + f"{self._STATSBOMB_BASE_URL}/" + f"{self._STATSBOMB_EVENTS_FOLDERNAME}/" + f"{str(mID)}" + f"{self._STATSBOMB_FILE_EXT}" + ) + with open(filepath_events, "wb") as binary_file: + binary_file.write(download_from_url(events_host_url)) + + # read teamsheets from file + teamsheets = read_teamsheets_from_open_statsbomb_event_data_json( + filepath_events, + filepath_matches, + ) + + return teamsheets @staticmethod def get_pitch() -> Pitch: - """Returns a Pitch object corresponding to the StatsBomb Dataset.""" + """Returns a Pitch-object corresponding to the StatsBomb Dataset.""" return Pitch.from_template("statsbomb", sport="football") def _read_competition_links_from_file(self): diff --git a/floodlight/io/statsbomb.py b/floodlight/io/statsbomb.py index 6aca790a..eba1d2e5 100644 --- a/floodlight/io/statsbomb.py +++ b/floodlight/io/statsbomb.py @@ -1,26 +1,149 @@ import warnings from pathlib import Path -from typing import Tuple, Union +from typing import Tuple, Union, Dict import os import json import pandas as pd from floodlight.core.events import Events +from floodlight.core.teamsheet import Teamsheet + + +def read_teamsheets_from_open_statsbomb_event_data_json( + filepath_events: Union[str, Path], + filepath_match: Union[str, Path], +) -> Dict[str, Teamsheet]: + """Reads match_information XML file and returns two Teamsheet-objects for the home + and the away team. + + Parameters + ---------- + filepath_events: str or pathlib.Path + Full path to json file where the Event data is saved. + filepath_match: str or pathlib.Path + Full path to json file where information about all matches of a season are + stored. + + Returns + ------- + teamsheets: Dict[str, Teamsheet] + Dictionary with teamsheets for the home team and the away team. + """ + # load json file into memory + with open(str(filepath_match), "r", encoding="utf8") as f: + matchinfo_list = json.load(f) + with open(str(filepath_events), "r", encoding="utf8") as f: + file_event_list = json.load(f) + + # retrieve match info from file + mID = int(str(filepath_events).split(os.path.sep)[-1][:-5]) # from filepath + matchinfo = None + for info in matchinfo_list: + if info["match_id"] == mID: + matchinfo = info + break + + # raise error if match is not contained in matchinfo + if matchinfo is None: + raise KeyError( + f"The match with mID {mID} was not found in the specified " + f"File of match information ({filepath_match})." + ) + + # initialize teamsheets + teamsheets = { + "Home": pd.DataFrame( + columns=["player", "position", "team_name", "jID", "pID", "tID"] + ), + "Away": pd.DataFrame( + columns=["player", "position", "team_name", "jID", "pID", "tID"] + ), + } + + # find team data in match info + tIDs = { + "Home": matchinfo["home_team"]["home_team_id"], + "Away": matchinfo["away_team"]["away_team_id"], + } + team_names = { + "Home": matchinfo["home_team"]["home_team_name"], + "Away": matchinfo["away_team"]["away_team_name"], + } + + # parse starting eleven + for event in file_event_list: + if event["type"]["name"] != "Starting XI": + continue + + # find team + if event["team"]["id"] == tIDs["Home"]: + team = "Home" + elif event["team"]["id"] == tIDs["Away"]: + team = "Away" + else: + team = None + + # find list of players + players = event["tactics"]["lineup"] + + # add player data to teamsheets + teamsheets[team]["player"] = [player["player"]["name"] for player in players] + teamsheets[team]["pID"] = [player["player"]["id"] for player in players] + teamsheets[team]["jID"] = [player["jersey_number"] for player in players] + teamsheets[team]["position"] = [ + player["position"]["name"] for player in players + ] + teamsheets[team]["tID"] = tIDs[team] + teamsheets[team]["team_name"] = team_names[team] + + # parse players coming in from substitutions + for event in file_event_list: + if event["type"]["name"] != "Substitution": + continue + + # find team + if event["team"]["id"] == tIDs["Home"]: + team = "Home" + elif event["team"]["id"] == tIDs["Away"]: + team = "Away" + else: + team = None + + # append player data to teamsheet + player_data = pd.DataFrame( + { + "player": [event["substitution"]["replacement"]["name"]], + "pID": [event["substitution"]["replacement"]["id"]], + "jID": [pd.NA], # unfortunately not included in substitution event + "position": [event["position"]["name"]], + "tID": [tIDs[team]], + "team_name": [team_names[team]], + } + ) + teamsheets[team] = pd.concat((teamsheets[team], player_data), ignore_index=True) + + # create teamsheet objects + for team in team_names.keys(): + teamsheets[team] = Teamsheet(teamsheets[team]) + + return teamsheets def read_open_statsbomb_event_data_json( filepath_events: Union[str, Path], filepath_match: Union[str, Path], filepath_threesixty: Union[str, Path] = None, -) -> Tuple[Events, Events, Events, Events]: + teamsheet_home: Teamsheet = None, + teamsheet_away: Teamsheet = None, +) -> Tuple[Events, Events, Events, Events, Teamsheet, Teamsheet]: """Parses files for a single match from the StatsBomb open dataset and extracts the - event data. + event data and teamsheets. - This function provides a high-level access to an events json file from the openly - published StatsBomb open data and returns Event objects for both teams for the first - two periods. A StatsBomb360 json file can be passed to the function to include - `StatsBomb360 data `_ to the ``qualifier`` column. Requires the parsed files from the dataset to maintain their original names from the `official data repository @@ -38,12 +161,19 @@ def read_open_statsbomb_event_data_json( information about the area of the field where player positions are tracked (``visible_area``) and player positions at single events (``freeze frame``) are stored as a string in the ``qualifier`` column. + teamsheet_home: Teamsheet, optional + Teamsheet-object for the home team used to create link dictionaries of the form + `links[pID] = team`. If given as None (default), teamsheet is extracted from + the Match Information XML file. + teamsheet_away: Teamsheet, optional + Teamsheet-object for the away team. If given as None (default), teamsheet is + extracted from the Match Information XML file. See teamsheet_home for details. Returns ------- - data_objects: Tuple[Events, Events, Events, Events] - Events- and Pitch-objects for both teams and both halves. The order is - (home_ht1, home_ht2, away_ht1, away_ht2). + data_objects: Tuple[Events, Events, Events, Events, Teamsheet, Teamsheet] + Events-, and Teamsheet objects for both teams and both halves. The order + is (home_ht1, home_ht2, away_ht1, away_ht2, teamsheet_home, teamsheet_away). Notes ----- @@ -56,35 +186,45 @@ def read_open_statsbomb_event_data_json( """ # load json files into memory - with open(filepath_match, "r", encoding="utf8") as f: - matchinfo_list = json.load(f) - with open(filepath_events, "r", encoding="utf8") as f: + with open(str(filepath_events), "r", encoding="utf8") as f: file_event_list = json.load(f) if filepath_threesixty is not None: - with open(filepath_threesixty, "r", encoding="utf8") as f: + with open(str(filepath_threesixty), "r", encoding="utf8") as f: file_threesixty_list = json.load(f) else: file_threesixty_list = None - # 1. retrieve match info from file - mID = int(filepath_events.split(os.path.sep)[-1][:-5]) # from filepath - matchinfo = None - for info in matchinfo_list: - if info["match_id"] == mID: - matchinfo = info - break + # create or check teamsheet objects + if teamsheet_home is None and teamsheet_away is None: + teamsheets = read_teamsheets_from_open_statsbomb_event_data_json( + filepath_events, filepath_match + ) + teamsheet_home = teamsheets["Home"] + teamsheet_away = teamsheets["Away"] + elif teamsheet_home is None: + teamsheets = read_teamsheets_from_open_statsbomb_event_data_json( + filepath_events, filepath_match + ) + teamsheet_home = teamsheets["Home"] + elif teamsheet_away is None: + teamsheets = read_teamsheets_from_open_statsbomb_event_data_json( + filepath_events, filepath_match + ) + teamsheet_away = teamsheets["Away"] + else: + pass + # potential check - # 2. parse match info - teams = ["Home", "Away"] - tID_link = { - int(matchinfo["home_team"]["home_team_id"]): "Home", - int(matchinfo["away_team"]["away_team_id"]): "Away", + # create links + links_tID_to_team = { + teamsheet_home.teamsheet.at[0, "tID"]: "Home", + teamsheet_away.teamsheet.at[0, "tID"]: "Away", } periods = set([event["period"] for event in file_event_list]) segments = [f"HT{period}" for period in periods] + mID = int(filepath_events.split(os.path.sep)[-1][:-5]) # from filepath - # 3. parse events - # bins + # initialize event bins columns = [ "eID", "gameclock", @@ -107,15 +247,15 @@ def read_open_statsbomb_event_data_json( team_event_lists = { team: {segment: {col: [] for col in columns} for segment in segments} - for team in teams + for team in links_tID_to_team.values() } - # loop + # parse events loop for event in file_event_list: # get team and segment information period = event["period"] segment = "HT" + str(period) - team = tID_link[event["possession_team"]["id"]] + team = links_tID_to_team[event["possession_team"]["id"]] # identifier and outcome: eID = event["type"]["id"] @@ -233,6 +373,13 @@ def read_open_statsbomb_event_data_json( events=pd.DataFrame(data=team_event_lists["Away"]["HT2"]), ) - data_objects = (home_ht1, home_ht2, away_ht1, away_ht2) + data_objects = ( + home_ht1, + home_ht2, + away_ht1, + away_ht2, + teamsheet_home, + teamsheet_away, + ) return data_objects diff --git a/tests/test_io/conftest.py b/tests/test_io/conftest.py index ce5ff944..0444e20e 100644 --- a/tests/test_io/conftest.py +++ b/tests/test_io/conftest.py @@ -164,3 +164,9 @@ def eigd_sample_data_floodlight_shape() -> np.ndarray: ) return data + + +@pytest.fixture() +def filepath_empty() -> str: + path = ".data\\EMPTY" + return path diff --git a/tests/test_io/test_datasets.py b/tests/test_io/test_datasets.py index e07ccc4c..24cd584a 100644 --- a/tests/test_io/test_datasets.py +++ b/tests/test_io/test_datasets.py @@ -2,6 +2,9 @@ import numpy as np from floodlight.io.datasets import EIGDDataset +from floodlight.io.datasets import StatsBombOpenDataset +from floodlight import Events +from floodlight.core.teamsheet import Teamsheet # Test _transform staticmethod from EIGDDataset @@ -15,3 +18,136 @@ def test_eigd_transform( assert np.array_equal( data_transformed, eigd_sample_data_floodlight_shape, equal_nan=True ) + + +# Test get method from StatsBombDataset +@pytest.mark.unit +def test_statsbomb_get() -> None: + + dataset = StatsBombOpenDataset() + data = dataset.get( + "Champions League", + "2004/2005", + "AC Milan vs. Liverpool", + ) + assert isinstance(data[0], Events) + assert isinstance(data[1], Events) + assert isinstance(data[2], Events) + assert isinstance(data[3], Events) + assert isinstance(data[4], Teamsheet) + assert isinstance(data[5], Teamsheet) + + +# Test get_teamsheet method from StatsBombDataset +@pytest.mark.unit +def test_statsbomb_get_teamsheet() -> None: + + dataset = StatsBombOpenDataset() + teamsheets = dataset.get_teamsheets( + "Champions League", + "2004/2005", + "AC Milan vs. Liverpool", + ) + assert isinstance(teamsheets["Home"], Teamsheet) + assert isinstance(teamsheets["Away"], Teamsheet) + assert teamsheets["Home"].teamsheet.at[0, "team_name"] == "AC Milan" + assert teamsheets["Away"].teamsheet.at[0, "team_name"] == "Liverpool" + assert len(teamsheets["Home"].teamsheet) == 14 + assert len(teamsheets["Away"].teamsheet) == 14 + assert len(teamsheets["Home"].teamsheet.columns) == 6 + assert len(teamsheets["Away"].teamsheet.columns) == 6 + + +# Test passing custom home_teamsheet to get method +@pytest.mark.unit +def test_statsbomb_get_pass_custom_home_teamsheet() -> None: + + # get teamsheets + dataset = StatsBombOpenDataset() + teamsheets = dataset.get_teamsheets( + "Champions League", + "2004/2005", + "AC Milan vs. Liverpool", + ) + + # customize home teamsheet + teamsheets["Home"].teamsheet.at[0, "player"] = "Dida" # custom entry + teamsheets["Home"].teamsheet.at[0, "pID"] = 999999 # custom entry + teamsheets["Home"]["custom_col"] = 99 # custom column passed to function + teamsheets["Away"]["my_col"] = 99 # custom column but not passed to function + + # call get function with custom teamsheet + data = dataset.get( + "Champions League", + "2004/2005", + "AC Milan vs. Liverpool", + teamsheet_home=teamsheets["Home"], + ) + + assert data[4].teamsheet.at[0, "player"] == "Dida" + assert data[4].teamsheet.at[0, "pID"] == 999999 + assert "custom_col" in data[4].teamsheet.columns + assert "my_col" not in data[5].teamsheet.columns + + +# Test passing custom away_teamsheet to get method +@pytest.mark.unit +def test_statsbomb_get_pass_custom_away_teamsheet() -> None: + # get teamsheets + dataset = StatsBombOpenDataset() + teamsheets = dataset.get_teamsheets( + "Champions League", + "2004/2005", + "AC Milan vs. Liverpool", + ) + + # customize home teamsheet + teamsheets["Home"].teamsheet.at[0, "player"] = "Dida" # custom entry but not passed + teamsheets["Home"].teamsheet.at[0, "pID"] = 999999 # custom entry but not passed + teamsheets["Home"]["custom_col"] = 99 # custom column but not passed to function + teamsheets["Away"]["my_col"] = 99 # custom column passed to function + + # call get function with custom teamsheet + data = dataset.get( + "Champions League", + "2004/2005", + "AC Milan vs. Liverpool", + teamsheet_away=teamsheets["Away"], + ) + + assert data[4].teamsheet.at[0, "player"] != "Dida" + assert data[4].teamsheet.at[0, "pID"] != 999999 + assert "custom_col" not in data[4].teamsheet.columns + assert "my_col" in data[5].teamsheet.columns + + +# Test passing custom away_teamsheet to get method +@pytest.mark.unit +def test_statsbomb_get_pass_custom_teamsheets() -> None: + # get teamsheets + dataset = StatsBombOpenDataset() + teamsheets = dataset.get_teamsheets( + "Champions League", + "2004/2005", + "AC Milan vs. Liverpool", + ) + + # customize home teamsheet + teamsheets["Home"].teamsheet.at[0, "player"] = "Dida" # custom entry + teamsheets["Home"].teamsheet.at[0, "pID"] = 999999 # custom entry + teamsheets["Home"]["custom_col"] = 99 # custom column but not passed to function + teamsheets["Away"]["my_col"] = 99 # custom column passed to function + + # call get function with custom teamsheet + data = dataset.get( + "Champions League", + "2004/2005", + "AC Milan vs. Liverpool", + teamsheet_home=teamsheets["Home"], + teamsheet_away=teamsheets["Away"], + ) + + assert data[4].teamsheet.at[0, "player"] == "Dida" + assert data[4].teamsheet.at[0, "pID"] == 999999 + assert "custom_col" in data[4].teamsheet.columns + assert "my_col" in data[5].teamsheet.columns diff --git a/tests/test_io/test_statsbomb.py b/tests/test_io/test_statsbomb.py new file mode 100644 index 00000000..ef3f1ebb --- /dev/null +++ b/tests/test_io/test_statsbomb.py @@ -0,0 +1,13 @@ +import pytest + +from floodlight.io.statsbomb import read_open_statsbomb_event_data_json + + +@pytest.mark.unit +def test_statsbomb_read_events_path_not_exists( + filepath_empty +) -> None: + + with pytest.raises(FileNotFoundError): + read_open_statsbomb_event_data_json(filepath_events=filepath_empty, + filepath_match=filepath_empty) From 45df4c8d49548e22e3a72e48ea1b624c83e0833f Mon Sep 17 00:00:00 2001 From: hbiermann95 <58177509+hbiermann95@users.noreply.github.com> Date: Tue, 31 Jan 2023 12:34:22 +0100 Subject: [PATCH 14/25] feat!: integrate teamsheet logic to statsperform parsers (#108) BREAKING CHANGE: replaces link creation functions with teamsheet parsing functions * feat: add teamsheet core object * docs: add definitions * docs: add teamsheet * docs: update events docstrings, integrate definitions * fix: broken test * test: add tests for teamsheet object * feat: add xIDs (#102) * test: add_xIDs function for create and overwrite * feat: add_xIDs functionality * refactor: docstrings and cleanup code * feat: teamsheet creation from file and integration for statsperform open format * feat: add teamsheet logic to statsperform internal format parser * refactor: integrate teamsheets logic to event parser * fix: bug that always assigned events to both teams * fix: conversion from str to bool leading to all players being starters * refactor: variable names * refactor: improve order in teamsheet creation to make teamsheet creation more stable * refactor: docstrings * refactor: docstrings * refactor: update naming of unknown players to common convention * refactor: docstrings for unknown players --------- Co-authored-by: draabe --- floodlight/io/statsperform.py | 693 +++++++++++++++++++++++----------- 1 file changed, 483 insertions(+), 210 deletions(-) diff --git a/floodlight/io/statsperform.py b/floodlight/io/statsperform.py index 4bba3e72..abc530e0 100644 --- a/floodlight/io/statsperform.py +++ b/floodlight/io/statsperform.py @@ -11,9 +11,11 @@ from floodlight.core.code import Code from floodlight.core.events import Events from floodlight.core.pitch import Pitch +from floodlight.core.teamsheet import Teamsheet from floodlight.core.xy import XY from floodlight.settings import DATA_DIR + # ----------------------------- StatsPerform Open Format ------------------------------- @@ -21,12 +23,12 @@ def _create_metadata_from_open_csv_df( csv_df: pd.DataFrame, ) -> Tuple[Dict[int, tuple], Pitch]: """Creates meta information from a pd.DataFrame that results from parsing the open - StatsPerform event data csv file. + StatsPerform event data CSV file. Parameters ---------- csv_df: pd.DataFrame - Data Frame with the parsed event data csv file. + Data Frame with the parsed event data CSV file. Returns ------- @@ -62,35 +64,6 @@ def _create_metadata_from_open_csv_df( return periods, pitch -def _create_links_from_open_csv_df( - csv_df: pd.DataFrame, team_ids: Dict[str, float] -) -> Dict[str, Dict[int, int]]: - """Checks the entire parsed open StatsPerform event data csv file for unique jIDs - (jerseynumbers) and creates a dictionary linking jIDs to xIDs in ascending order. - - Parameters - ---------- - csv_df: pd.DataFrame - Data Frame with the parsed event data csv file. - team_ids: Dict[str, float] - Dictionary that stores the StatsPerform team id of the Home and Away team - - Returns - ------- - links: Dict[str, Dict[int, int]] - A link dictionary of the form ``links[team][jID] = xID``. - """ - links = {} - for team in team_ids: - links[team] = { - int(jID): xID - for xID, jID in enumerate( - csv_df[csv_df["team_id"] == team_ids[team]]["jersey_no"].unique() - ) - } - return links - - def _read_open_event_csv_single_line( line: str, ) -> Tuple[Dict, str, str]: @@ -100,7 +73,7 @@ def _read_open_event_csv_single_line( Parameters ---------- line: str - One full line from StatsPerform's Event csv file. + One full line from StatsPerform's Event CSV file. Returns ------- @@ -155,44 +128,85 @@ def _read_open_event_csv_single_line( return event, team, segment -def create_links_from_open_tracking_data_csv( - filepath_tracking: Union[str, Path] -) -> Dict[str, Dict[int, int]]: - """Parses the entire open StatsPerform event data csv file for unique jIDs - (jerseynumbers) and creates a dictionary linking jIDs to xIDs in ascending order. +def read_teamsheets_from_open_data_csv( + filepath_csv: Union[str, Path] +) -> Dict[str, Teamsheet]: + """Parses the entire open StatsPerform tracking data CSV file for unique jIDs + (jerseynumbers) and creates teamsheets for both teams. Parameters ---------- - filepath_tracking: str or pathlib.Path - csv file where the position data in StatsPerform format is saved. + filepath_csv: str or pathlib.Path + CSV file where the position data in StatsPerform format is saved. Returns ------- - links: Dict[str, Dict[int, int]] - A link dictionary of the form ``links[team][jID] = xID``. + teamsheets: Dict[str, Teamsheet] + Dictionary with teamsheets for the home team and the away team. + + Notes + ----- + Statsperform open data does not contain any player names. Thus, the teamsheet + objects generated by this method will name players 'Player i' with i starting at 1. + To identify players, use the jersey numbers of players or provide custom teamsheets + generated by a different parser if Statsperform open data is used in combination + with other data providers. """ # read dat-file into pd.DataFrame - dat_df = pd.read_csv(str(filepath_tracking)) + csv_df = pd.read_csv(str(filepath_csv)) # initialize team and ball ids team_ids = {"Home": 1.0, "Away": 2.0} ball_id = 4 # check for additional tIDs - for ID in dat_df["team_id"].unique(): - if not (ID in team_ids.values() or ID == ball_id): - warnings.warn(f"Team ID {ID} did not match any of the standard IDs!") + for tID in csv_df["team_id"].unique(): + if not (tID in team_ids.values() or tID == ball_id or np.isnan(tID)): + warnings.warn( + f"tID {tID} did not match any of the standard tIDs " + f"({team_ids.values}) or the ball ID ({ball_id})!" + ) + + # initialize teamsheets + teamsheets = { + "Home": pd.DataFrame(columns=["player", "jID", "pID", "tID"]), + "Away": pd.DataFrame(columns=["player", "jID", "pID", "tID"]), + } + + # loop over teams + for team in team_ids: + # extract list with pID and jID information for all players in the team + team_id = team_ids[team] + team_df = csv_df[csv_df["team_id"] == team_id] + jIDs = team_df["jersey_no"].unique() + pIDs = [ + team_df[team_df["jersey_no"] == jID]["player_id"].unique() for jID in jIDs + ] + # possible check for multiple pIDs assigned to a single jID + + # insert data to teamsheet + teamsheets[team]["player"] = [f"Player {i}" for i in range(len(pIDs))] + teamsheets[team]["jID"] = [jID for jID in jIDs] + teamsheets[team]["pID"] = [pID[0] for pID in pIDs] + teamsheets[team]["tID"] = team_id - return _create_links_from_open_csv_df(dat_df, team_ids) + # create teamsheet objects + for team in teamsheets: + teamsheets[team] = Teamsheet(teamsheets[team]) + + return teamsheets def read_open_event_data_csv( filepath_events: Union[str, Path], -) -> Tuple[Events, Events, Events, Events]: - """Parses an open StatsPerform Match Event csv file and extracts the event data. - - This function provides a high-level access to the particular openly published - StatsPerform match events csv file (e.g. for the Pro Forum '22) and returns Event + teamsheet_home: Teamsheet = None, + teamsheet_away: Teamsheet = None, +) -> Tuple[Events, Events, Events, Events, Teamsheet, Teamsheet]: + """Parses an open StatsPerform Match Event CSV file and extracts the event data and + teamsheets. + + This function provides high-level access to the particular openly published + StatsPerform match events CSV file (e.g. for the Pro Forum '22) and returns Event objects for both teams. Parameters @@ -200,10 +214,18 @@ def read_open_event_data_csv( filepath_events: str or pathlib.Path Full path to xml File where the Event data in StatsPerform csv format is saved + teamsheet_home: Teamsheet, optional + Teamsheet-object for the home team. If given as None (default), teamsheet is + extracted from the event data CSV file. + teamsheet_away: Teamsheet, optional + Teamsheet-object for the away team. If given as None (default), teamsheet is + extracted from the event data CSV file. + Returns ------- - data_objects: Tuple[Events, Events, Events, Events] - Events-objects for both teams and both halves. + data_objects: Tuple[Events, Events, Events, Events, Teamsheet, Teamsheet] + Events-objects for both teams and both halves. The order is (home_ht1, home_ht2, + away_ht1, away_ht2, teamsheet_home, teamsheet_away) Notes ----- @@ -214,11 +236,26 @@ def read_open_event_data_csv( """ # initialize bin and variables events = {} - teams = ["1.0", "2.0"] + team_ids = {"Home": 1.0, "Away": 2.0} segments = ["1", "2"] - for team in teams: + for team in team_ids.values(): events[team] = {segment: pd.DataFrame() for segment in segments} + # create or check teamsheet objects + if teamsheet_home is None and teamsheet_away is None: + teamsheets = read_teamsheets_from_open_data_csv(filepath_events) + teamsheet_home = teamsheets["Home"] + teamsheet_away = teamsheets["Away"] + elif teamsheet_home is None: + teamsheets = read_teamsheets_from_open_data_csv(filepath_events) + teamsheet_home = teamsheets["Home"] + elif teamsheet_away is None: + teamsheets = read_teamsheets_from_open_data_csv(filepath_events) + teamsheet_away = teamsheets["Away"] + else: + pass + # potential check + # parse event data with open(str(filepath_events), "r") as f: while True: @@ -237,64 +274,76 @@ def read_open_event_data_csv( # insert to bin if team: + team = float(team) events[team][segment] = events[team][segment].append( event, ignore_index=True ) else: # if no clear assignment possible, insert to bins for both teams - for team in teams: + for team in team_ids.values(): events[team][segment] = events[team][segment].append( event, ignore_index=True ) # assembly - t1_ht1 = Events( - events=events["1.0"]["1"], + home_ht1 = Events( + events=events[team_ids["Home"]]["1"], ) - t1_ht2 = Events( - events=events["1.0"]["2"], + home_ht2 = Events( + events=events[team_ids["Home"]]["2"], ) - t2_ht1 = Events( - events=events["2.0"]["1"], + away_ht1 = Events( + events=events[team_ids["Home"]]["1"], ) - t2_ht2 = Events( - events=events["2.0"]["2"], + away_ht2 = Events( + events=events[team_ids["Home"]]["2"], + ) + data_objects = ( + home_ht1, + home_ht2, + away_ht1, + away_ht2, + teamsheet_home, + teamsheet_away, ) - data_objects = (t1_ht1, t1_ht2, t2_ht1, t2_ht2) return data_objects def read_open_tracking_data_csv( filepath_tracking: Union[str, Path], - links: Dict[str, Dict[int, int]] = None, -) -> Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Pitch]: - """Parses an open StatsPerform csv file and extract position data and possession - codes as well as pitch information. + teamsheet_home: Teamsheet = None, + teamsheet_away: Teamsheet = None, +) -> Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Pitch, Teamsheet, Teamsheet]: + """Parses an open StatsPerform CSV file and extract position data and possession + codes as well as teamsheets and pitch information. - Openly published StatsPerform position data (e.g. for the Pro Forum '22) is stored - in a csv file containing all position data (for both halves) as well as information - about players, the pitch, and the ball possession. This function provides a - high-level access to StatsPerform data by parsing the csv file. + Openly published StatsPerform position data (e.g. for the Pro Forum '22) is stored + in a CSV file containing all position data (for both halves) as well as information + about players, the pitch, and the ball possession. This function provides high-level + access to StatsPerform data by parsing the CSV file. Parameters ---------- filepath_tracking: str or pathlib.Path - Full path to the csv file. - links: Dict[str, Dict[int, int]], optional - A link dictionary of the form ``links[team][jID] = xID``. Player's are - identified in StatsPerform files via jID, and this dictionary is used to map - them to a specific xID in the respective XY objects. Should be supplied if that - order matters. If None is given (default), the links are automatically extracted - from the csv file at the cost of a second pass through the entire file. + Full path to the CSV file. + teamsheet_home: Teamsheet, optional + Teamsheet-object for the home team used to create link dictionaries of the form + `links[team][jID] = xID`. The links are used to map players to a specific xID in + the respective XY objects. Should be supplied for custom ordering. If given as + None (default), teamsheet is extracted from the open StatsPerform CSV file and + its xIDs are assigned in order of appearance. + teamsheet_away: Teamsheet, optional + Teamsheet-object for the away team. If given as None (default), teamsheet is + extracted from the Match Information XML file. See teamsheet_home for details. Returns ------- - data_objects: Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Pitch] - XY-, Code-, and Pitch-objects for both teams and both halves. The order is - (home_ht1, home_ht2, away_ht1, away_ht2, ball_ht1, ball_ht2, - possession_ht1, possession_ht2, pitch) + data_objects: Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Pitch, Teamsheet, Teamsheet] + XY-, Code-, Teamsheet-, and Pitch-objects for both teams and both halves. The + order is (home_ht1, home_ht2, away_ht1, away_ht2, ball_ht1, ball_ht2, + possession_ht1, possession_ht2, pitch, teamsheet_home, teamsheet_away) """ - # parse the csv file into pd.DataFrame + # parse the CSV file into pd.DataFrame dat_df = pd.read_csv(str(filepath_tracking)) # initialize team and ball ids @@ -306,19 +355,36 @@ def read_open_tracking_data_csv( if not (ID in team_ids.values() or ID == ball_id): warnings.warn(f"Team ID {ID} did not match any of the standard IDs!") - # create or check links - if links is None: - links = _create_links_from_open_csv_df(dat_df, team_ids) + # create or check teamsheet objects + if teamsheet_home is None and teamsheet_away is None: + teamsheets = read_teamsheets_from_open_data_csv(filepath_tracking) + teamsheet_home = teamsheets["Home"] + teamsheet_away = teamsheets["Away"] + elif teamsheet_home is None: + teamsheets = read_teamsheets_from_open_data_csv(filepath_tracking) + teamsheet_home = teamsheets["Home"] + elif teamsheet_away is None: + teamsheets = read_teamsheets_from_open_data_csv(filepath_tracking) + teamsheet_away = teamsheets["Away"] else: pass - # potential check vs jerseys in dat file + # potential check + + # create links + if "xID" not in teamsheet_home.teamsheet.columns: + teamsheet_home.add_xIDs() + if "xID" not in teamsheet_away.teamsheet.columns: + teamsheet_away.add_xIDs() + links_jID_to_xID = {} + links_jID_to_xID["Home"] = teamsheet_home.get_links("jID", "xID") + links_jID_to_xID["Away"] = teamsheet_away.get_links("jID", "xID") # create periods and pitch periods, pitch = _create_metadata_from_open_csv_df(dat_df) segments = list(periods.keys()) # infer data shapes - number_of_players = {team: len(links[team]) for team in links} + number_of_players = {team: len(links_jID_to_xID[team]) for team in links_jID_to_xID} number_of_frames = {} for segment in segments: start = periods[segment][0] @@ -332,7 +398,7 @@ def read_open_tracking_data_csv( segment: np.full( [ number_of_frames[segment], - number_of_players[list(links.keys())[0]] * 2, + number_of_players[list(links_jID_to_xID.keys())[0]] * 2, ], np.nan, ) @@ -342,7 +408,7 @@ def read_open_tracking_data_csv( segment: np.full( [ number_of_frames[segment], - number_of_players[list(links.keys())[1]] * 2, + number_of_players[list(links_jID_to_xID.keys())[1]] * 2, ], np.nan, ) @@ -380,8 +446,8 @@ def read_open_tracking_data_csv( # insert player position to bin array jrsy = int(pl_df["jersey_no"].values[0]) - x_col = (links[team][jrsy] - 1) * 2 - y_col = (links[team][jrsy] - 1) * 2 + 1 + x_col = (links_jID_to_xID[team][jrsy] - 1) * 2 + y_col = (links_jID_to_xID[team][jrsy] - 1) * 2 + 1 start = frames[appearance][0] - periods[segment][0] end = frames[appearance][-1] - periods[segment][0] + 1 xydata[team][segment][start:end, x_col] = x_position[appearance] @@ -431,6 +497,8 @@ def read_open_tracking_data_csv( poss_ht1, poss_ht2, pitch, + teamsheet_home, + teamsheet_away, ) return data_objects @@ -447,7 +515,7 @@ def _read_tracking_data_txt_single_line( Dict[str, Union[str, tuple]], ]: """Extracts all relevant information from a single line of StatsPerform's tracking - data .txt file (i.e. one frame of data). + data TXT file (i.e. one frame of data). Parameters ---------- @@ -524,16 +592,16 @@ def _read_tracking_data_txt_single_line( def _read_time_information_from_tracking_data_txt( - filepath_txt: Union[str, Path], + filepath_tracking: Union[str, Path], ) -> Tuple[Dict, Union[int, None]]: - """Reads StatsPerform's tracking .txt file and extracts information about the first + """Reads StatsPerform's tracking TXT file and extracts information about the first and last frame of periods. Also, a framerate is estimated from the gameclock difference between samples. Parameters ---------- - filepath_txt: str or pathlib.Path - Full path to the txt file containing the tracking data. + filepath_tracking: str or pathlib.Path + Full path to the TXT file containing the tracking data. Returns ------- @@ -549,8 +617,8 @@ def _read_time_information_from_tracking_data_txt( endframes = {} framerate_est = None - # read txt file from disk - file_txt = open(filepath_txt, "r") + # read TXT file from disk + file_txt = open(filepath_tracking, "r") # loop last_gameclock = None @@ -603,13 +671,13 @@ def _read_time_information_from_tracking_data_txt( def _read_jersey_numbers_from_tracking_data_txt( file_location_txt: Union[str, Path], ) -> Tuple[set, set]: - """Reads StatsPerform's tracking .txt file and extracts unique set of jIDs + """Reads StatsPerform's tracking TXT file and extracts unique set of jIDs (jerseynumbers) for both teams. Parameters ---------- file_location_txt: str or pathlib.Path - Full path to the txt file containing the tracking data. + Full path to the TXT file containing the tracking data. Returns ------- @@ -621,7 +689,7 @@ def _read_jersey_numbers_from_tracking_data_txt( home_jIDs = set() away_jIDs = set() - # read txt file from disk + # read TXT file from disk file_txt = open(file_location_txt, "r") # loop @@ -640,59 +708,156 @@ def _read_jersey_numbers_from_tracking_data_txt( return home_jIDs, away_jIDs -def create_links_from_statsperform_tracking_data_txt( - filepath_txt: Union[str, Path], -) -> Dict[str, Dict[int, int]]: - """Parses the entire StatsPerform .txt file for unique jIDs (jerseynumbers) and - creates a dictionary linking jIDs to xIDs in ascending order. +def read_teamsheets_from_event_data_xml( + filepath_events: Union[str, Path], +) -> Dict[str, Teamsheet]: + """Parses the StatsPerform event file and returns two Teamsheet-objects with + detailed player information for the home and the away team. Parameters ---------- - filepath_txt: str or pathlib.Path - Full path to the txt file containing the tracking data. + filepath_events: str or pathlib.Path + Full path to the XML file containing the event data. Returns ------- - links: Dict[str, Dict[int, int]] - Link-dictionary of the form ``links[team][jID] = xID``. + teamsheets: Dict[str, Teamsheet] + Dictionary with teamsheets for the home team and the away team. """ - homejrsy, awayjrsy = _read_jersey_numbers_from_tracking_data_txt(filepath_txt) + # load event data xml tree into memory + tree = etree.parse(str(filepath_events)) + root = tree.getroot() + + # initialize teamsheets + teamsheets = { + "Home": pd.DataFrame( + columns=["player", "position", "team_name", "jID", "pID", "tID", "started"] + ), + "Away": pd.DataFrame( + columns=["player", "position", "team_name", "jID", "pID", "tID", "started"] + ), + } + # parse player information + for team_matchsheet in root.findall("MatchSheet/Team"): + + # skip referees + if team_matchsheet.attrib["Type"] == "Referees": + continue + + # read team + team = team_matchsheet.attrib["Type"][:-4] # cut 'Team' of e.g. 'HomeTeam' + tID = team_matchsheet.attrib["IdTeam"] + team_name = team_matchsheet.attrib["Name"] + + # find players + players = [ + actor + for actor in team_matchsheet.findall("Actor") + if actor.attrib["Occupation"] == "Player" + ] + + # create teamsheet + teamsheets[team]["player"] = [ + get_and_convert(player, "NickName", str) for player in players + ] + teamsheets[team]["pID"] = [ + get_and_convert(player, "IdActor", int) for player in players + ] + teamsheets[team]["jID"] = [ + get_and_convert(player, "JerseyNumber", int) for player in players + ] + teamsheets[team]["position"] = [ + get_and_convert(player, "Position", str) for player in players + ] + teamsheets[team]["started"] = [ + player.get("IsStarter") == "True" for player in players + ] + teamsheets[team]["tID"] = tID + teamsheets[team]["team_name"] = team_name + + # create teamsheet objects + for team in teamsheets: + teamsheets[team] = Teamsheet(teamsheets[team]) + + return teamsheets + + +def read_teamsheets_from_tracking_data_txt( + filepath_tracking: Union[str, Path], +) -> Dict[str, Teamsheet]: + """Parses the StatsPerform tracking file and returns two simple Teamsheet-objects + containing only two columns "player" and "jID" for the home and the away team. + + Parameters + ---------- + filepath_tracking: str or pathlib.Path + Full path to the TXT file containing the tracking data. + + Returns + ------- + teamsheets: Dict[str, Teamsheet] + Dictionary with teamsheets for the home team and the away team. + """ + # create list of jIDs + homejrsy, awayjrsy = _read_jersey_numbers_from_tracking_data_txt(filepath_tracking) homejrsy = list(homejrsy) awayjrsy = list(awayjrsy) - homejrsy.sort() awayjrsy.sort() + jIDs = { + "Home": homejrsy, + "Away": awayjrsy, + } - links = { - "Home": {jID: xID for xID, jID in enumerate(homejrsy)}, - "Away": {jID: xID for xID, jID in enumerate(awayjrsy)}, + # create teamsheets + teamsheets = { + "Home": pd.DataFrame(columns=["player", "jID"]), + "Away": pd.DataFrame(columns=["player", "jID"]), } + for team in teamsheets: + teamsheets[team]["player"] = [f"Player {i}" for i in range(len(jIDs[team]))] + teamsheets[team]["jID"] = [int(jID) for jID in jIDs[team]] + + # create teamsheet objects + for team in teamsheets: + teamsheets[team] = Teamsheet(teamsheets[team]) - return links + return teamsheets def read_event_data_xml( - filepath_xml: Union[str, Path], -) -> Tuple[Events, Events, Events, Events, Pitch]: - """Parses a StatsPerform .xml file and extracts event data and pitch information. + filepath_events: Union[str, Path], + teamsheet_home: Teamsheet = None, + teamsheet_away: Teamsheet = None, +) -> Tuple[Events, Events, Events, Events, Pitch, Teamsheet, Teamsheet]: + """Parses a StatsPerform XML file and extracts event data and pitch information. - This function provides a high-level access to the StatsPerform match events xml file + This function provides high-level access to the StatsPerform match events XML file and returns Events objects for both teams and information about the pitch. Parameters ---------- - filepath_xml: str or pathlib.Path - Full path to the xml file containing the event data. + filepath_events: str or pathlib.Path + Full path to the XML file containing the event data. + teamsheet_home: Teamsheet, optional + Teamsheet-object for the home team used to create link dictionaries of the form + `links[pID] = team`. The links are used to map players to the home and away + teams. If given as None (default), teamsheet is extracted from the event data + XML file. + teamsheet_away: Teamsheet, optional + Teamsheet-object for the away team. If given as None (default), teamsheet is + extracted from the event data XML file. See teamsheet_home for details. Returns ------- data_objects: Tuple[Events, Events, Events, Events, Pitch] - Events-objects for both teams and both halves and pitch information. The order - is (home_ht1, home_ht2, away_ht1, away_ht2, pitch). + Events-objects for both teams and both halves, pitch information, and + teamsheets. The order is (home_ht1, home_ht2, away_ht1, away_ht2, pitch, + teamsheet_home, teamsheet_away). """ # load xml tree into memory - tree = etree.parse(str(filepath_xml)) + tree = etree.parse(str(filepath_events)) root = tree.getroot() # create bins, read segments, and assign teams @@ -700,7 +865,6 @@ def read_event_data_xml( "eID", "gameclock", "pID", - "jID", "minute", "second", "at_x", @@ -715,34 +879,32 @@ def read_event_data_xml( ] teams = ["Home", "Away"] + # create or check teamsheet objects + if teamsheet_home is None and teamsheet_away is None: + teamsheets = read_teamsheets_from_event_data_xml(filepath_events) + teamsheet_home = teamsheets["Home"] + teamsheet_away = teamsheets["Away"] + elif teamsheet_home is None: + teamsheets = read_teamsheets_from_event_data_xml(filepath_events) + teamsheet_home = teamsheets["Home"] + elif teamsheet_away is None: + teamsheets = read_teamsheets_from_event_data_xml(filepath_events) + teamsheet_away = teamsheets["Away"] + else: + pass + # potential check + + # create links between pIDs and team + links_pID_to_team = {} + links_pID_to_team.update({pID: "Home" for pID in teamsheet_home["pID"]}) + links_pID_to_team.update({pID: "Away" for pID in teamsheet_away["pID"]}) + # bins event_lists = { team: {segment: {col: [] for col in columns} for segment in segments} for team in teams } - # create links - links_pID_to_tID = {} - links_pID_to_jID = {} - links_pID_to_name = {} - for teamsheet in root.findall("MatchSheet/Team"): - # skip referees - if teamsheet.attrib["Type"] == "Referees": - continue - # read team - team = teamsheet.attrib["Type"][:-4] # cut 'Team' of e.g. 'HomeTeam' - # assign player ids to team - for actor in teamsheet.findall("Actor"): - if actor.attrib["Occupation"] != "Player": # coaches etc. - continue - links_pID_to_tID[get_and_convert(actor, "IdActor", int)] = team - links_pID_to_jID[get_and_convert(actor, "IdActor", int)] = get_and_convert( - actor, "JerseyNumber", int - ) - links_pID_to_name[get_and_convert(actor, "IdActor", int)] = get_and_convert( - actor, "NickName", str - ) - # loop over events for half in root.findall("Events/EventsHalf"): # get segment information @@ -753,7 +915,7 @@ def read_event_data_xml( pID = get_and_convert(event.attrib, "IdActor1", int) # assign team - team = get_and_convert(links_pID_to_tID, pID, str) + team = get_and_convert(links_pID_to_team, pID, str) # create list of either a single team or both teams if no clear assignment if team == "None": @@ -763,11 +925,9 @@ def read_event_data_xml( # identifier eID = get_and_convert(event.attrib, "EventName", str) - jID = get_and_convert(links_pID_to_jID, pID, int) for team in teams_assigned: event_lists[team][segment]["eID"].append(eID) event_lists[team][segment]["pID"].append(pID) - event_lists[team][segment]["jID"].append(jID) # relative time gameclock = get_and_convert(event.attrib, "Time", int) / 1000 @@ -821,54 +981,95 @@ def read_event_data_xml( events=pd.DataFrame(data=event_lists["Away"]["HT2"]), ) - data_objects = (home_ht1, home_ht2, away_ht1, away_ht2, pitch) + data_objects = ( + home_ht1, + home_ht2, + away_ht1, + away_ht2, + pitch, + teamsheet_home, + teamsheet_away, + ) return data_objects def read_tracking_data_txt( - filepath_txt: Union[str, Path], - links: Dict[str, Dict[int, int]] = None, -) -> Tuple[XY, XY, XY, XY, XY, XY]: - """Parses a StatsPerform .txt file and extracts position data. - - Internal StatsPerform position data is stored as a .txt file containing all - position data (for both halves). This function provides a high-level access to - StatsPerform data by parsing the txt file. Since no information about framerate is + filepath_tracking: Union[str, Path], + teamsheet_home: Teamsheet = None, + teamsheet_away: Teamsheet = None, +) -> Tuple[XY, XY, XY, XY, XY, XY, Teamsheet, Teamsheet]: + """Parses a StatsPerform TXT file and extracts position data and teamsheets. + + Internal StatsPerform position data is stored as a TXT file containing all + position data (for both halves). This function provides high-level access to + StatsPerform data by parsing the TXT file. Since no information about framerate is delivered in the data itself, it is estimated from time difference between - individual frames. + individual frames. Teamsheets are extracted from the event data, if filepath_events + is provided. Otherwise, minimal Teamsheet-objects are inferred from the tracking + data. Parameters ---------- - filepath_txt: str or pathlib.Path - Full path to the txt file containing the tracking data. - links: Dict[str, Dict[int, int]], optional - A link dictionary of the form ``links[team][jID] = xID``. Player's are - identified in StatsPerform files via jID, and this dictionary is used to map - them to a specific xID in the respective XY objects. Should be supplied if that - order matters. If None is given (default), the links are automatically extracted - from the csv file at the cost of a second pass through the entire file. + filepath_tracking: str or pathlib.Path + Full path to the TXT file containing the tracking data. + teamsheet_home: Teamsheet, optional + Teamsheet-object for the home team used to create link dictionaries of the form + `links[team][jID] = xID`. The links are used to map players to a specific xID in + the respective XY objects. Should be supplied for custom ordering. If given as + None (default), teamsheet is extracted from the tracking data TXT file and its + xIDs are assigned in order of appearance. + teamsheet_away: Teamsheet, optional + Teamsheet-object for the away team. If given as None (default), teamsheet is + extracted from the tracking data TXT file. See teamsheet_home for details. Returns ------- - data_objects: Tuple[XY, XY, XY, XY, XY, XY] + data_objects: Tuple[XY, XY, XY, XY, XY, XY, Teamsheet, Teamsheet] XY-objects for both teams and both halves. The order is (home_ht1, home_ht2, - away_ht1, away_ht2, ball_ht1, ball_ht2). + away_ht1, away_ht2, ball_ht1, ball_ht2, teamsheet_home, teamsheet_away). + + Notes + ----- + Statsperform tracking data does not contain any player information expect jersey + numbers by default. Thus, the teamsheet objects generated by this method will name + players 'Player i' with i starting at 1. To identify players, use the jersey numbers + of players or provide custom teamsheets (e.g. by parsing teamsheets from the + Statsperform event data or another data provider). """ - # parse txt file for periods and estimate framerate if not contained in filepath - periods, framerate_est = _read_time_information_from_tracking_data_txt(filepath_txt) + # parse TXT file for periods and estimate framerate if not contained in filepath + periods, framerate_est = _read_time_information_from_tracking_data_txt( + filepath_tracking + ) segments = list(periods.keys()) - # create or check links - if links is None: - links = create_links_from_statsperform_tracking_data_txt(filepath_txt) + # create or check teamsheet objects + if teamsheet_home is None and teamsheet_away is None: + teamsheets = read_teamsheets_from_tracking_data_txt(filepath_tracking) + teamsheet_home = teamsheets["Home"] + teamsheet_away = teamsheets["Away"] + elif teamsheet_home is None: + teamsheets = read_teamsheets_from_tracking_data_txt(filepath_tracking) + teamsheet_home = teamsheets["Home"] + elif teamsheet_away is None: + teamsheets = read_teamsheets_from_tracking_data_txt(filepath_tracking) + teamsheet_away = teamsheets["Away"] else: pass - # potential check vs jerseys in txt file + # potential check + + # create links + if "xID" not in teamsheet_home.teamsheet.columns: + teamsheet_home.add_xIDs() + if "xID" not in teamsheet_away.teamsheet.columns: + teamsheet_away.add_xIDs() + links_jID_to_xID = {} + links_jID_to_xID["Home"] = teamsheet_home.get_links("jID", "xID") + links_jID_to_xID["Away"] = teamsheet_away.get_links("jID", "xID") # infer data array shapes - number_of_home_players = max(links["Home"].values()) + 1 - number_of_away_players = max(links["Away"].values()) + 1 + number_of_home_players = max(links_jID_to_xID["Home"].values()) + 1 + number_of_away_players = max(links_jID_to_xID["Away"].values()) + 1 number_of_frames = {} for segment in segments: number_of_frames[segment] = ( @@ -893,8 +1094,8 @@ def read_tracking_data_txt( segment: np.full([number_of_frames[segment], 2], np.nan) for segment in segments } - # read txt file from disk - with open(filepath_txt, "r") as f: + # read TXT file from disk + with open(filepath_tracking, "r") as f: tracking_data_lines = f.readlines() # loop @@ -919,9 +1120,10 @@ def read_tracking_data_txt( # insert (x,y)-data into np.array for team in ["Home", "Away"]: for jID in positions[team].keys(): + # map jersey number to array index and infer respective columns - x_col = (links[team][jID] - 1) * 2 - y_col = (links[team][jID] - 1) * 2 + 1 + x_col = (links_jID_to_xID[team][int(jID)] - 1) * 2 + y_col = (links_jID_to_xID[team][int(jID)] - 1) * 2 + 1 xydata[team][segment][frame_rel, x_col] = positions[team][jID][0] xydata[team][segment][frame_rel, y_col] = positions[team][jID][1] @@ -936,16 +1138,27 @@ def read_tracking_data_txt( ball_ht1 = XY(xy=xydata["Ball"][1], framerate=framerate_est) ball_ht2 = XY(xy=xydata["Ball"][2], framerate=framerate_est) - data_objects = (home_ht1, home_ht2, away_ht1, away_ht2, ball_ht1, ball_ht2) + data_objects = ( + home_ht1, + home_ht2, + away_ht1, + away_ht2, + ball_ht1, + ball_ht2, + teamsheet_home, + teamsheet_away, + ) return data_objects def read_event_data_from_url( url: str, -) -> Tuple[Events, Events, Events, Events, Pitch]: - """Reads a URL containing a StatsPerform events csv file and extracts the stored - event data and pitch information. + teamsheet_home: Teamsheet = None, + teamsheet_away: Teamsheet = None, +) -> Tuple[Events, Events, Events, Events, Pitch, Teamsheet, Teamsheet]: + """Reads a URL containing a StatsPerform events CSV file and extracts the stored + event data, pitch information, and teamsheets. The event data from the URL is downloaded into a temporary file stored in the repository's internal root ``.data``-folder and removed afterwards. @@ -953,13 +1166,22 @@ def read_event_data_from_url( Parameters ---------- url: str - URL to the xml file containing the event data. + URL to the XML file containing the event data. + teamsheet_home: Teamsheet, optional + Teamsheet-object for the home team used to create link dictionaries of the form + `links[pID] = team`. The links are used to map players to the home and away + teams. If given as None (default), teamsheet is extracted from the event data + XML file. + teamsheet_away: Teamsheet, optional + Teamsheet-object for the away team. If given as None (default), teamsheet is + extracted from the event data XML file. See teamsheet_home for details. Returns ------- data_objects: Tuple[Events, Events, Events, Events, Pitch] - Events-objects for both teams and both halves and pitch information. The order - is (home_ht1, home_ht2, away_ht1, away_ht2, pitch). + Events-objects for both teams and both halves, pitch information, and + teamsheets. The order is (home_ht1, home_ht2, away_ht1, away_ht2, pitch, + teamsheet_home, teamsheet_away). """ data_dir = os.path.join(DATA_DIR, "statsperform") if not os.path.isdir(data_dir): @@ -967,17 +1189,39 @@ def read_event_data_from_url( temp_file = os.path.join(data_dir, "events_temp.xml") with open(temp_file, "wb") as binary_file: binary_file.write(download_from_url(url)) - data_objects = read_event_data_xml(filepath_xml=os.path.join(data_dir, temp_file)) + ( + home_ht1, + home_ht2, + away_ht1, + away_ht2, + pitch, + teamsheet_home, + teamsheet_away, + ) = read_event_data_xml( + filepath_events=os.path.join(data_dir, temp_file), + teamsheet_home=teamsheet_home, + teamsheet_away=teamsheet_away, + ) + data_objects = ( + home_ht1, + home_ht2, + away_ht1, + away_ht2, + pitch, + teamsheet_home, + teamsheet_away, + ) os.remove(os.path.join(data_dir, temp_file)) return data_objects def read_tracking_data_from_url( url: str, - links: Dict[str, Dict[int, int]] = None, -) -> Tuple[XY, XY, XY, XY, XY, XY]: + teamsheet_home: Teamsheet = None, + teamsheet_away: Teamsheet = None, +) -> Tuple[XY, XY, XY, XY, XY, XY, Teamsheet, Teamsheet]: """Reads a URL from the StatsPerform API (StatsEdgeViewer) containing a tracking - data txt file and extracts position data. + data TXT file and extracts position data and teamsheets. The tracking data from the URL is downloaded into a temporary file stored in the repository's internal root ``.data``-folder and removed afterwards. @@ -985,19 +1229,30 @@ def read_tracking_data_from_url( Parameters ---------- url: str or pathlib.Path - URL to the txt file containing the tracking data. - links: Dict[str, Dict[int, int]], optional - A link dictionary of the form ``links[team][jID] = xID``. Player's are - identified in StatsPerform files via jID, and this dictionary is used to map - them to a specific xID in the respective XY objects. Should be supplied if that - order matters. If None is given (default), the links are automatically extracted - from the csv file at the cost of a second pass through the entire file. + URL to the TXT file containing the tracking data. + teamsheet_home: Teamsheet, optional + Teamsheet-object for the home team used to create link dictionaries of the form + `links[team][jID] = xID`. The links are used to map players to a specific xID in + the respective XY objects. Should be supplied for custom ordering. If given as + None (default), teamsheet is extracted from the tracking data TXT file and its + xIDs are assigned in order of appearance. + teamsheet_away: Teamsheet, optional + Teamsheet-object for the away team. If given as None (default), teamsheet is + extracted from the tracking data TXT file. See teamsheet_home for details. Returns ------- - data_objects: Tuple[XY, XY, XY, XY, XY, XY] - XY- and Pitch-objects for both teams and both halves. The order is - (home_ht1, home_ht2, away_ht1, away_ht2, ball_ht1, ball_ht2, pitch) + data_objects: Tuple[XY, XY, XY, XY, XY, XY, Teamsheet, Teamsheet] + XY-objects for both teams and both halves. The order is (home_ht1, home_ht2, + away_ht1, away_ht2, ball_ht1, ball_ht2, teamsheet_home, teamsheet_away). + + Notes + ----- + Statsperform tracking data does not contain any player information expect jersey + numbers by default. Thus, the teamsheet objects generated by this method will name + players 'Player i' with i starting at 1. To identify players, use the jersey numbers + of players or provide custom teamsheets (e.g. by parsing teamsheets from the + Statsperform event data or another data provider). """ data_dir = os.path.join(DATA_DIR, "statsperform") if not os.path.isdir(data_dir): @@ -1005,9 +1260,27 @@ def read_tracking_data_from_url( temp_file = os.path.join(data_dir, "tracking_temp.txt") with open(temp_file, "wb") as binary_file: binary_file.write(download_from_url(url)) - data_objects = read_tracking_data_txt( - filepath_txt=os.path.join(data_dir, temp_file), - links=links, + ( + home_ht1, + home_ht2, + away_ht1, + away_ht2, + ball_ht1, + ball_ht2, + ) = read_tracking_data_txt( + filepath_tracking=os.path.join(data_dir, temp_file), + teamsheet_home=teamsheet_home, + teamsheet_away=teamsheet_away, + ) + data_objects = ( + home_ht1, + home_ht2, + away_ht1, + away_ht2, + ball_ht1, + ball_ht2, + teamsheet_home, + teamsheet_away, ) os.remove(os.path.join(data_dir, temp_file)) return data_objects From ec031ad6bf4626d4abc7386e2b9ac546b9803acd Mon Sep 17 00:00:00 2001 From: draabe Date: Tue, 31 Jan 2023 13:09:18 +0100 Subject: [PATCH 15/25] feat!: integrate teamsheet logic to secondspectrum parsers (#111) BREAKING CHANGE: replaces link creation functions with teamsheet parsing functions --- floodlight/io/secondspectrum.py | 168 +++++++++++++++++++++----------- 1 file changed, 112 insertions(+), 56 deletions(-) diff --git a/floodlight/io/secondspectrum.py b/floodlight/io/secondspectrum.py index 553eae8f..de0ca66d 100644 --- a/floodlight/io/secondspectrum.py +++ b/floodlight/io/secondspectrum.py @@ -11,6 +11,7 @@ from floodlight.core.code import Code from floodlight.core.pitch import Pitch from floodlight.core.xy import XY +from floodlight.core.teamsheet import Teamsheet from floodlight.io.utils import get_and_convert @@ -116,11 +117,11 @@ def _read_metajson( return metadata, periods, directions, pitch -def create_links_from_metajson( +def read_teamsheets_from_metajson( filepath_metadata: Union[str, Path] -) -> Dict[str, Dict[int, int]]: - """Parses the Second Spectrum meta.json-file for unique jIDs (jerseynumbers) and - creates a dictionary linking jIDs to xIDs ordered by position precedence. +) -> Dict[str, Teamsheet]: + """Parses the Second Spectrum meta.json-file and creates respective teamsheets for + the home and the away team. Parameters ---------- @@ -129,13 +130,13 @@ def create_links_from_metajson( Returns ------- - links: Dict[str, Dict[int, int]] - Link-dictionary of the form `links[team][jID] = xID`. + teamsheets: Dict[str, Teamsheet] + Dictionary with teamsheets for the home team and the away team. Notes ----- - The ordering is determined by position precedence, with the following precedence - values assigned to Second Spectrum's player position information:: + The ordering of players is determined by position precedence, with the following + precedence values assigned to Second Spectrum's player position information:: { 'GK': 1, @@ -169,36 +170,51 @@ def create_links_from_metajson( with open(str(filepath_metadata), "r") as f: metajson = json.load(f) + # param + key_map = {"Home": "homePlayers", "Away": "awayPlayers"} + # bin - links_jID_to_xID = {} + teamsheets = {team: None for team in ["Home", "Away"]} # loop through teams - key_map = {"Home": "homePlayers", "Away": "awayPlayers"} for team in ["Home", "Away"]: - # bin (team) - links = [] + # bin + teamsheet = { + column: [] for column in ["precedence", "player", "jID", "pID", "position"] + } # query team player list player_list = metajson[key_map[team]] # add players to list for player in player_list: - number = player["number"] - position = player["position"] + # query + name = get_and_convert(player, "name", str) + position = get_and_convert(player, "position", str) + jID = get_and_convert(player, "number", int) + pID = get_and_convert(player, "optaId", int) precedence = _get_position_precedence(position) - links.append((number, precedence)) - - # sort link list by position precedence - links.sort(key=lambda p: p[1]) - # create and add link dict from sorted list - links = {player[0]: idx for idx, player in enumerate(links)} - links_jID_to_xID[team] = links - - return links_jID_to_xID + # assign + teamsheet["player"].append(name) + teamsheet["position"].append(position) + teamsheet["jID"].append(jID) + teamsheet["pID"].append(pID) + teamsheet["precedence"].append(precedence) + # curate + teamsheet = pd.DataFrame(teamsheet) + teamsheet.sort_values("precedence", inplace=True) + teamsheet.drop(["precedence"], axis=1, inplace=True) + teamsheet.reset_index(drop=True, inplace=True) + teamsheet = Teamsheet(teamsheet) + teamsheets[team] = teamsheet + + return teamsheets def read_secspec_files( filepath_tracking: Union[str, Path], filepath_metadata: Union[str, Path], -): + teamsheet_home: Teamsheet = None, + teamsheet_away: Teamsheet = None, +) -> Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch, Teamsheet, Teamsheet]: """Parse Second Spectrum files and extract position data, possession and ballstatus codes, as well as pitch information. @@ -214,30 +230,68 @@ def read_secspec_files( Full path to .jsonl-file. filepath_metadata: str or pathlib.Path Full path to _meta.json file. + teamsheet_home: Teamsheet, optional + Teamsheet object for the home team used to create link dictionaries of the form + `links[team][jID] = xID`. The links are used to map players to a specific xID + in the respective XY objects. Should be supplied for custom ordering. If given + as None (default), teamsheet is extracted from the meta.json file and xIDs are + assigned based on the ordering determined by the + ``read_teamsheets_from_metajson`` function (see for details). + teamsheet_away: Teamsheet, optional + Teamsheet object for the away team. If given as None (default), teamsheet is + extracted from the meta.json-file. See teamsheet_home for details. Returns ------- - data_objects: Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch] - XY-, Code-, and Pitch-objects for both teams and both halves. The order is + data_objects: Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch, + Teamsheet, Teamsheet] + XY-, Code-, Pitch- and Teamsheet-objects for both teams and both halves. The + order is (home_ht1, home_ht2, away_ht1, away_ht2, ball_ht1, ball_ht2, - possession_ht1, possession_ht2, ballstatus_ht1, ballstatus_ht2, pitch) + possession_ht1, possession_ht2, ballstatus_ht1, ballstatus_ht2, pitch, + teamsheet_home, teamsheet_away) + """ # setup metadata, periods, directions, pitch = _read_metajson(str(filepath_metadata)) - links = create_links_from_metajson(str(filepath_metadata)) segments = list(periods.keys()) - teams = list(links.keys()) + teams = ["Home", "Away"] fps = int(metadata["framerate"]) status_link = {True: "A", False: "D"} key_map = {"Home": "homePlayers", "Away": "awayPlayers"} + # create or check teamsheet objects + if teamsheet_home is None and teamsheet_away is None: + teamsheets = read_teamsheets_from_metajson(filepath_metadata) + teamsheet_home = teamsheets["Home"] + teamsheet_away = teamsheets["Away"] + elif teamsheet_home is None: + teamsheets = read_teamsheets_from_metajson(filepath_metadata) + teamsheet_home = teamsheets["Home"] + elif teamsheet_away is None: + teamsheets = read_teamsheets_from_metajson(filepath_metadata) + teamsheet_away = teamsheets["Away"] + else: + pass + # potential check + + # create links + if "xID" not in teamsheet_home.teamsheet.columns: + teamsheet_home.add_xIDs() + if "xID" not in teamsheet_away.teamsheet.columns: + teamsheet_away.add_xIDs() + links_jID_to_xID = { + "Home": teamsheet_home.get_links("jID", "xID"), + "Away": teamsheet_away.get_links("jID", "xID"), + } + # bins xydata = { team: { segment: np.full( [ periods[segment][1] - periods[segment][0], # T frames in segment - len(links[team]) * 2, # N players in team + len(links_jID_to_xID[team]) * 2, # N players in team ], np.nan, ) @@ -281,8 +335,8 @@ def read_secspec_files( for player in player_data: # map jersey number to array index and infer respective columns jID = player["number"] - x_col = (links[team][jID]) * 2 - y_col = (links[team][jID]) * 2 + 1 + x_col = (links_jID_to_xID[team][jID]) * 2 + y_col = (links_jID_to_xID[team][jID]) * 2 + 1 xydata[team][segment][frame_rel, (x_col, y_col)] = player["xyz"][:2] # get ball data @@ -354,6 +408,8 @@ def read_secspec_files( ballstatus_ht1, ballstatus_ht2, pitch, + teamsheet_home, + teamsheet_away, ) return data_objects @@ -523,27 +579,27 @@ def read_secspec_insight( qual_dict[qual_id] = qual_value event_lists[team][segment]["qualifier"].append(str(qual_dict)) - # assembly - home_ht1 = Events( - events=pd.DataFrame(data=event_lists["Home"]["HT1"]), - direction=directions["Home"]["HT1"], - ) - home_ht2 = Events( - events=pd.DataFrame(data=event_lists["Home"]["HT2"]), - direction=directions["Home"]["HT2"], - ) - away_ht1 = Events( - events=pd.DataFrame(data=event_lists["Away"]["HT1"]), - direction=directions["Away"]["HT1"], - ) - away_ht2 = Events( - events=pd.DataFrame(data=event_lists["Away"]["HT2"]), - direction=directions["Away"]["HT2"], - ) - pitch = Pitch.from_template( - "opta", length=metadata["length"], width=metadata["width"], sport="football" - ) - - data_objects = (home_ht1, home_ht2, away_ht1, away_ht2, pitch) - - return data_objects + # assembly + home_ht1 = Events( + events=pd.DataFrame(data=event_lists["Home"]["HT1"]), + direction=directions["Home"]["HT1"], + ) + home_ht2 = Events( + events=pd.DataFrame(data=event_lists["Home"]["HT2"]), + direction=directions["Home"]["HT2"], + ) + away_ht1 = Events( + events=pd.DataFrame(data=event_lists["Away"]["HT1"]), + direction=directions["Away"]["HT1"], + ) + away_ht2 = Events( + events=pd.DataFrame(data=event_lists["Away"]["HT2"]), + direction=directions["Away"]["HT2"], + ) + pitch = Pitch.from_template( + "opta", length=metadata["length"], width=metadata["width"], sport="football" + ) + + data_objects = (home_ht1, home_ht2, away_ht1, away_ht2, pitch) + + return data_objects From fe6b1254c34728ce9641cb3b0ecc02f7f68c0787 Mon Sep 17 00:00:00 2001 From: draabe Date: Tue, 31 Jan 2023 13:18:45 +0100 Subject: [PATCH 16/25] feat!: integrate teamsheet logic to tracab parser (#112) BREAKING CHANGE: replaces link creation functions with teamsheet parsing functions --- floodlight/io/tracab.py | 118 +++++++++++++++++++++++++++------------- 1 file changed, 81 insertions(+), 37 deletions(-) diff --git a/floodlight/io/tracab.py b/floodlight/io/tracab.py index 7948ab54..d6736158 100644 --- a/floodlight/io/tracab.py +++ b/floodlight/io/tracab.py @@ -2,11 +2,13 @@ from typing import Dict, Tuple, Union import numpy as np +import pandas as pd from lxml import etree from floodlight.core.code import Code from floodlight.core.pitch import Pitch from floodlight.core.xy import XY +from floodlight.core.teamsheet import Teamsheet def _read_metadata(filepath_metadata: Union[str, Path]) -> Tuple[Dict, Dict, Pitch]: @@ -187,9 +189,9 @@ def _read_dat_jersey_numbers(filepath_dat: Union[str, Path]): return home_jIDs, away_jIDs -def create_links_from_dat(filepath_dat: Union[str, Path]) -> Dict[str, Dict[int, int]]: - """Parses the entire TRACAB .dat file for unique jIDs (jerseynumbers) and creates a - dictionary linking jIDs to xIDs in ascending order. +def read_teamsheets_from_dat(filepath_dat: Union[str, Path]) -> Dict[str, Teamsheet]: + """Parses the entire TRACAB .dat file for unique jIDs (jerseynumbers) and creates + respective teamsheets for the home and the away team. Parameters ---------- @@ -198,32 +200,40 @@ def create_links_from_dat(filepath_dat: Union[str, Path]) -> Dict[str, Dict[int, Returns ------- - links: Dict[str, Dict[int, int]] - Link-dictionary of the form `links[team][jID] = xID`. + teamsheets: Dict[str, Teamsheet] + Dictionary with teamsheets for the home team and the away team. """ - homejrsy, awayjrsy = _read_dat_jersey_numbers(filepath_dat) - - homejrsy = list(homejrsy) - awayjrsy = list(awayjrsy) + # bin + teamsheets = {} - homejrsy.sort() - awayjrsy.sort() + # get jerseynumbers (jIDs) + homejrsy, awayjrsy = _read_dat_jersey_numbers(filepath_dat) - links = { - "Home": {jID: xID for xID, jID in enumerate(homejrsy)}, - "Away": {jID: xID for xID, jID in enumerate(awayjrsy)}, - } + # loop through teams + for team, jIDs in zip(("Home", "Away"), (homejrsy, awayjrsy)): + jIDs = list(jIDs) + jIDs.sort() + player = [f"Player {i+1}" for i in range(len(jIDs))] + teamsheet = pd.DataFrame( + data={ + "player": player, + "jID": jIDs, + } + ) + teamsheet = Teamsheet(teamsheet) + teamsheets[team] = teamsheet - return links + return teamsheets def read_tracab_files( filepath_dat: Union[str, Path], filepath_metadata: Union[str, Path], - links: Dict[str, Dict[int, int]] = None, -) -> Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch]: - """Parse TRACAB files and extract position data, possession and ballstatus codes as - well as pitch information. + teamsheet_home: Teamsheet = None, + teamsheet_away: Teamsheet = None, +) -> Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch, Teamsheet, Teamsheet]: + """Parse TRACAB files and extract position data, possession and ballstatus codes, + teamsheets as well as pitch information. ChyronHego's TRACAB system delivers two separate files, a .dat file containing the actual data as well as a metadata.xml containing information about pitch size, @@ -236,34 +246,66 @@ def read_tracab_files( Full path to dat-file. filepath_metadata: str or pathlib.Path Full path to metadata.xml file. - links: Dict[str, Dict[int, int]], optional - A link dictionary of the form `links[team][jID] = xID`. Player's are identified - in TRACAB files via jID, and this dictionary is used to map them to a specific - xID in the respective XY objects. Should be supplied if that order matters. If - None is given (default), the links are automatically extracted from the .dat - file at the cost of a second pass through the entire file. + teamsheet_home: Teamsheet, optional + Teamsheet object for the home team used to create link dictionaries of the form + `links[team][jID] = xID`. The links are used to map players to a specific xID + in the respective XY objects. Should be supplied for custom ordering. If given + as None (default), teamsheet is extracted from the .dat file and xIDs are + assigned ascendingly to the player's jersey numbers. + teamsheet_away: Teamsheet, optional + Teamsheet object for the away team. If given as None (default), teamsheet is + extracted from the .dat file. See teamsheet_home for details. Returns ------- - data_objects: Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch] - XY-, Code-, and Pitch-objects for both teams and both halves. The order is + data_objects: Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch, + Teamsheet, Teamsheet] + XY-, Code-, Pitch- and Teamsheet-objects for both teams and both halves. The + order is (home_ht1, home_ht2, away_ht1, away_ht2, ball_ht1, ball_ht2, - possession_ht1, possession_ht2, ballstatus_ht1, ballstatus_ht2, pitch) + possession_ht1, possession_ht2, ballstatus_ht1, ballstatus_ht2, pitch, + teamsheet_home, teamsheet_away) + + Notes + ----- + Tracab data does not contain any player information except jersey numbers by + default. Thus, the teamsheet objects generated by this method will name players + 'Player i' with i starting at 1. To identify players, use the jersey numbers of + provide custom teamsheets generated by a different parser if Tracab data is used in + combination with other data providers. """ # read metadata metadata, periods, pitch = _read_metadata(filepath_metadata) segments = list(periods.keys()) - # create or check links - if links is None: - links = create_links_from_dat(filepath_dat) + # create or check teamsheet objects + if teamsheet_home is None and teamsheet_away is None: + teamsheets = read_teamsheets_from_dat(filepath_dat) + teamsheet_home = teamsheets["Home"] + teamsheet_away = teamsheets["Away"] + elif teamsheet_home is None: + teamsheets = read_teamsheets_from_dat(filepath_dat) + teamsheet_home = teamsheets["Home"] + elif teamsheet_away is None: + teamsheets = read_teamsheets_from_dat(filepath_dat) + teamsheet_away = teamsheets["Away"] else: pass - # potential check vs jerseys in dat file + # potential check + + # create links + if "xID" not in teamsheet_home.teamsheet.columns: + teamsheet_home.add_xIDs() + if "xID" not in teamsheet_away.teamsheet.columns: + teamsheet_away.add_xIDs() + links_jID_to_xID = { + "Home": teamsheet_home.get_links("jID", "xID"), + "Away": teamsheet_away.get_links("jID", "xID"), + } # infer data array shapes - number_of_home_players = max(links["Home"].values()) + 1 - number_of_away_players = max(links["Away"].values()) + 1 + number_of_home_players = max(links_jID_to_xID["Home"].values()) + 1 + number_of_away_players = max(links_jID_to_xID["Away"].values()) + 1 number_of_frames = {} for segment in segments: start = periods[segment][0] @@ -315,8 +357,8 @@ def read_tracab_files( for team in ["Home", "Away"]: for jID in positions[team].keys(): # map jersey number to array index and infer respective columns - x_col = (links[team][jID]) * 2 - y_col = (links[team][jID]) * 2 + 1 + x_col = (links_jID_to_xID[team][jID]) * 2 + y_col = (links_jID_to_xID[team][jID]) * 2 + 1 xydata[team][segment][frame_rel, x_col] = positions[team][jID][0] xydata[team][segment][frame_rel, y_col] = positions[team][jID][1] @@ -373,6 +415,8 @@ def read_tracab_files( ballstatus_ht1, ballstatus_ht2, pitch, + teamsheet_home, + teamsheet_away, ) return data_objects From b38e0664c686fe2ca0e73291df0436aa6a81c2d3 Mon Sep 17 00:00:00 2001 From: draabe Date: Tue, 31 Jan 2023 14:49:43 +0100 Subject: [PATCH 17/25] feat!: add parser for metadata and teamsheets in json format (#113) BREAKING CHANGE: private metadata parsing functions are renamed --- floodlight/io/tracab.py | 157 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 142 insertions(+), 15 deletions(-) diff --git a/floodlight/io/tracab.py b/floodlight/io/tracab.py index d6736158..603f5b0c 100644 --- a/floodlight/io/tracab.py +++ b/floodlight/io/tracab.py @@ -1,3 +1,4 @@ +import json from pathlib import Path from typing import Dict, Tuple, Union @@ -9,16 +10,19 @@ from floodlight.core.pitch import Pitch from floodlight.core.xy import XY from floodlight.core.teamsheet import Teamsheet +from floodlight.io.utils import get_and_convert -def _read_metadata(filepath_metadata: Union[str, Path]) -> Tuple[Dict, Dict, Pitch]: - """Reads TRACAB's metadata file and extracts information about match metainfo, - periods and the pitch. +def _read_metadata_from_xml( + filepath_metadata: Union[str, Path] +) -> Tuple[Dict, Dict, Pitch]: + """Reads TRACAB's metadata file (xml format) and extracts match meta information + such as framerate, periods and pitch. Parameters ---------- filepath_metadata: str or pathlib.Path - Full path to metadata.xml file. + Full path to _metadata.xml file. Returns ------- @@ -65,6 +69,67 @@ def _read_metadata(filepath_metadata: Union[str, Path]) -> Tuple[Dict, Dict, Pit return metadata, periods, pitch +def _read_metadata_from_json( + filepath_metadata: Union[str, Path] +) -> Tuple[Dict, Dict, Pitch]: + """Reads TRACAB's metadata file (json format) and extracts match meta information + such as framerate, periods and pitch. + + Parameters + ---------- + filepath_metadata: str or pathlib.Path + Full path to _metadata.json file. + + Returns + ------- + metadata: Dict + Dictionary with metainformation such as framerate. + periods: Dict + Dictionary with start and endframes: + `periods[segment] = (startframe, endframe)`. + pitch: Pitch + Pitch object with actual pitch length and width. + """ + # load file + with open(filepath_metadata, "r", encoding="utf8") as f: + metafile = json.load(f) + + # bin + metadata = {} + periods = {} + + # get framerate + metadata["framerate"] = get_and_convert(metafile, "FrameRate", int) + + # get length and with and convert from cm to m + length = get_and_convert(metafile, "PitchLongSide", float) + width = get_and_convert(metafile, "PitchShortSide", float) + metadata["length"] = length / 100 if length else None + metadata["width"] = width / 100 if width else None + + # get period start and end frames + for i in range(1, 6): + phase = f"Phase{i}" + ht = f"HT{i}" + phase_start = get_and_convert(metafile, phase + "StartFrame", int) + phase_end = get_and_convert(metafile, phase + "EndFrame", int) + if phase_start is None or phase_end is None: + continue + if phase_start == 0 or phase_end == 0: + continue + periods[ht] = (phase_start, phase_end) + + # create pitch + pitch = Pitch.from_template( + "tracab", + length=length, + width=width, + sport="football", + ) + + return metadata, periods, pitch + + def _read_dat_single_line( package: str, ) -> Tuple[ @@ -226,6 +291,48 @@ def read_teamsheets_from_dat(filepath_dat: Union[str, Path]) -> Dict[str, Teamsh return teamsheets +def read_teamsheets_from_meta_json( + filepath_metadata: Union[str, Path] +) -> Dict[str, Teamsheet]: + """Reads TRACAB's metadata file (json format) and creates respective teamsheets for + the home and the away team. + + Parameters + ---------- + filepath_metadata: str or pathlib.Path + Full path to _metadata.json file. + + Returns + ------- + teamsheets: Dict[str, Teamsheet] + Dictionary with teamsheets for the home team and the away team. + """ + # load file + with open(filepath_metadata, "r", encoding="utf8") as f: + metafile = json.load(f) + + # param + teams = ["Home", "Away"] + + # bin + teamsheets = {team: {var: [] for var in ["player", "pID", "jID"]} for team in teams} + + # loop through teams + for team in teams: + team_name = team + "Team" + for player in metafile[team_name]["Players"]: + first_name = get_and_convert(player, "FirstName", str, "") + last_name = get_and_convert(player, "LastName", str, "") + full_name = first_name + " " + last_name + teamsheets[team]["player"].append(full_name) + teamsheets[team]["pID"].append(get_and_convert(player, "PlayerID", int)) + teamsheets[team]["jID"].append(get_and_convert(player, "JerseyNo", int)) + + teamsheets[team] = Teamsheet(pd.DataFrame(teamsheets[team])) + + return teamsheets + + def read_tracab_files( filepath_dat: Union[str, Path], filepath_metadata: Union[str, Path], @@ -268,26 +375,46 @@ def read_tracab_files( Notes ----- - Tracab data does not contain any player information except jersey numbers by - default. Thus, the teamsheet objects generated by this method will name players - 'Player i' with i starting at 1. To identify players, use the jersey numbers of - provide custom teamsheets generated by a different parser if Tracab data is used in - combination with other data providers. + Tracab provides metadata in two file types: xml and json. The json metadata files + typically include player information whereas the xml files do not. The dat file + storing tracking data (e.g. from an ASCII stream) contain only player jersey + numbers, but no additional player information. + + This function will check whether the provided ``filepath_metadata`` points to a xml + or json file. If it's a json, teamsheets are generated from this source. If it's a + xml, teamsheets are generated from the dat file and players are named 'Player i' + with i starting at 1. To identify players in this case, use the jersey numbers or + provide custom teamsheets generated by a different parser if additional data is + available. """ - # read metadata - metadata, periods, pitch = _read_metadata(filepath_metadata) + # check file type of metadata + file_extension = filepath_metadata.split(".")[-1].upper() + + # read metadata and determine logic used for teamsheet parsing + if file_extension == "XML": + metadata, periods, pitch = _read_metadata_from_xml(filepath_metadata) + teamsheet_parse_func = read_teamsheets_from_dat + teamsheet_parse_file = filepath_dat + elif file_extension == "JSON": + metadata, periods, pitch = _read_metadata_from_json(filepath_metadata) + teamsheet_parse_func = read_teamsheets_from_meta_json + teamsheet_parse_file = filepath_metadata + else: + raise ValueError( + f"Expected metadata file type to be from [XML, JSON], got {file_extension}." + ) segments = list(periods.keys()) - # create or check teamsheet objects + # create or check teamsheet objects with select teamsheet parsing functions & file if teamsheet_home is None and teamsheet_away is None: - teamsheets = read_teamsheets_from_dat(filepath_dat) + teamsheets = teamsheet_parse_func(teamsheet_parse_file) teamsheet_home = teamsheets["Home"] teamsheet_away = teamsheets["Away"] elif teamsheet_home is None: - teamsheets = read_teamsheets_from_dat(filepath_dat) + teamsheets = teamsheet_parse_func(teamsheet_parse_file) teamsheet_home = teamsheets["Home"] elif teamsheet_away is None: - teamsheets = read_teamsheets_from_dat(filepath_dat) + teamsheets = teamsheet_parse_func(teamsheet_parse_file) teamsheet_away = teamsheets["Away"] else: pass From 76c011b85bce946bf1a124a96fada0ea353aee12 Mon Sep 17 00:00:00 2001 From: draabe Date: Tue, 31 Jan 2023 17:20:42 +0100 Subject: [PATCH 18/25] refactor!: streamline IO function names (#115) BREAKING CHANGE: parsing function names change, signatures remain the same --- docs/source/modules/io/io.rst | 44 +++++++++----- floodlight/io/datasets.py | 8 +-- floodlight/io/kinexon.py | 6 +- floodlight/io/opta.py | 2 +- floodlight/io/secondspectrum.py | 12 ++-- floodlight/io/sportradar.py | 2 +- floodlight/io/statsbomb.py | 10 +-- floodlight/io/statsperform.py | 104 ++++++++++++++++---------------- floodlight/io/tracab.py | 6 +- tests/test_io/test_statsbomb.py | 11 ++-- 10 files changed, 108 insertions(+), 97 deletions(-) diff --git a/docs/source/modules/io/io.rst b/docs/source/modules/io/io.rst index 129893bd..dad8b47d 100644 --- a/docs/source/modules/io/io.rst +++ b/docs/source/modules/io/io.rst @@ -36,10 +36,10 @@ Collection of file parsing functionalities for different data providers as well .. autosummary:: :nosignatures: - read_event_data_xml read_position_data_xml + read_event_data_xml read_pitch_from_mat_info_xml - create_links_from_mat_info + read_teamsheets_from_mat_info_xml .. rubric:: Kinexon @@ -47,9 +47,9 @@ Collection of file parsing functionalities for different data providers as well .. autosummary:: :nosignatures: - read_kinexon_file - get_meta_data + read_position_data_csv create_links_from_meta_data + get_meta_data get_column_names_from_csv .. rubric:: Opta @@ -58,7 +58,7 @@ Collection of file parsing functionalities for different data providers as well .. autosummary:: :nosignatures: - read_f24 + read_event_data_xml get_opta_feedtype .. rubric:: Second Spectrum @@ -67,9 +67,17 @@ Collection of file parsing functionalities for different data providers as well .. autosummary:: :nosignatures: - read_secspec_files - read_secspec_insight - create_links_from_metajson + read_position_data_jsonl + read_event_data_jsonl + read_teamsheets_from_meta_json + +.. rubric:: Sportradar + +.. currentmodule:: floodlight.io.sportradar +.. autosummary:: + :nosignatures: + + read_event_data_json .. rubric:: StatsBomb @@ -77,7 +85,8 @@ Collection of file parsing functionalities for different data providers as well .. autosummary:: :nosignatures: - read_open_statsbomb_event_data_json + read_open_event_data_json + read_teamsheets_from_open_event_data_json .. rubric:: StatsPerform @@ -85,14 +94,15 @@ Collection of file parsing functionalities for different data providers as well .. autosummary:: :nosignatures: + read_position_data_txt + read_open_position_data_csv + read_position_data_from_url read_event_data_xml - read_tracking_data_txt - read_event_data_from_url - read_tracking_data_from_url read_open_event_data_csv - read_open_tracking_data_csv - create_links_from_statsperform_tracking_data_txt - create_links_from_open_tracking_data_csv + read_event_data_from_url + read_teamsheets_from_position_data_txt + read_teamsheets_from_event_data_xml + read_teamsheets_from_open_data_csv .. rubric:: Tracab (ChyronHego) @@ -100,4 +110,6 @@ Collection of file parsing functionalities for different data providers as well .. autosummary:: :nosignatures: - read_tracab_files + read_position_data_dat + read_teamsheets_from_dat + read_teamsheets_from_meta_json diff --git a/floodlight/io/datasets.py b/floodlight/io/datasets.py index f9504888..eed17901 100644 --- a/floodlight/io/datasets.py +++ b/floodlight/io/datasets.py @@ -9,8 +9,8 @@ from floodlight.io.utils import extract_zip, download_from_url from floodlight.io.statsbomb import ( - read_open_statsbomb_event_data_json, - read_teamsheets_from_open_statsbomb_event_data_json, + read_open_event_data_json, + read_teamsheets_from_open_event_data_json, ) from floodlight import XY, Pitch, Events, Code from floodlight.core.teamsheet import Teamsheet @@ -597,7 +597,7 @@ def get( away_ht2, teamsheet_home, teamsheet_away, - ) = read_open_statsbomb_event_data_json( + ) = read_open_event_data_json( filepath_events, filepath_matches, filepath_threesixty, @@ -681,7 +681,7 @@ def get_teamsheets( binary_file.write(download_from_url(events_host_url)) # read teamsheets from file - teamsheets = read_teamsheets_from_open_statsbomb_event_data_json( + teamsheets = read_teamsheets_from_open_event_data_json( filepath_events, filepath_matches, ) diff --git a/floodlight/io/kinexon.py b/floodlight/io/kinexon.py index 3d9501a4..8a68989a 100644 --- a/floodlight/io/kinexon.py +++ b/floodlight/io/kinexon.py @@ -334,8 +334,8 @@ def create_links_from_meta_data( return links -def read_kinexon_file(filepath_data: Union[str, Path]) -> List[XY]: - """Parse Kinexon files and extract position data. +def read_position_data_csv(filepath_data: Union[str, Path]) -> List[XY]: + """Parses a Kinexon csv file and extracts position data. Kinexon's local positioning system delivers one .csv file containing the position data. This function provides a high-level access to Kinexon data by parsing "the @@ -344,7 +344,7 @@ def read_kinexon_file(filepath_data: Union[str, Path]) -> List[XY]: Parameters ---------- filepath_data: str or pathlib.Path - Full path to Kinexon.csv-file. + Full path to Kinexon .csv-file. Returns ------- diff --git a/floodlight/io/opta.py b/floodlight/io/opta.py index 50e32536..a26f5564 100644 --- a/floodlight/io/opta.py +++ b/floodlight/io/opta.py @@ -45,7 +45,7 @@ def get_opta_feedtype(filepath: Union[str, Path]) -> Union[str, None]: return feedtype -def read_f24( +def read_event_data_xml( filepath: Union[str, Path] ) -> Tuple[Events, Events, Events, Events, Pitch]: """Parse Opta's f24 feed (containing match events) and extract event data and pitch diff --git a/floodlight/io/secondspectrum.py b/floodlight/io/secondspectrum.py index de0ca66d..ff0b60af 100644 --- a/floodlight/io/secondspectrum.py +++ b/floodlight/io/secondspectrum.py @@ -117,7 +117,7 @@ def _read_metajson( return metadata, periods, directions, pitch -def read_teamsheets_from_metajson( +def read_teamsheets_from_meta_json( filepath_metadata: Union[str, Path] ) -> Dict[str, Teamsheet]: """Parses the Second Spectrum meta.json-file and creates respective teamsheets for @@ -209,7 +209,7 @@ def read_teamsheets_from_metajson( return teamsheets -def read_secspec_files( +def read_position_data_jsonl( filepath_tracking: Union[str, Path], filepath_metadata: Union[str, Path], teamsheet_home: Teamsheet = None, @@ -262,14 +262,14 @@ def read_secspec_files( # create or check teamsheet objects if teamsheet_home is None and teamsheet_away is None: - teamsheets = read_teamsheets_from_metajson(filepath_metadata) + teamsheets = read_teamsheets_from_meta_json(filepath_metadata) teamsheet_home = teamsheets["Home"] teamsheet_away = teamsheets["Away"] elif teamsheet_home is None: - teamsheets = read_teamsheets_from_metajson(filepath_metadata) + teamsheets = read_teamsheets_from_meta_json(filepath_metadata) teamsheet_home = teamsheets["Home"] elif teamsheet_away is None: - teamsheets = read_teamsheets_from_metajson(filepath_metadata) + teamsheets = read_teamsheets_from_meta_json(filepath_metadata) teamsheet_away = teamsheets["Away"] else: pass @@ -415,7 +415,7 @@ def read_secspec_files( return data_objects -def read_secspec_insight( +def read_event_data_jsonl( filepath_insight: Union[str, Path], filepath_metadata: Union[str, Path], ) -> Tuple[Events, Events, Events, Events, Pitch]: diff --git a/floodlight/io/sportradar.py b/floodlight/io/sportradar.py index 562038ae..1850d57f 100644 --- a/floodlight/io/sportradar.py +++ b/floodlight/io/sportradar.py @@ -9,7 +9,7 @@ from floodlight.io.utils import get_and_convert -def read_sportradar_timeline( +def read_event_data_json( filepath_events: Union[str, Path] ) -> Dict[str, Dict[str, Dict]]: """Parses the Sportradar timeline files in json format and extracts the event data. diff --git a/floodlight/io/statsbomb.py b/floodlight/io/statsbomb.py index eba1d2e5..cbe95a3d 100644 --- a/floodlight/io/statsbomb.py +++ b/floodlight/io/statsbomb.py @@ -10,7 +10,7 @@ from floodlight.core.teamsheet import Teamsheet -def read_teamsheets_from_open_statsbomb_event_data_json( +def read_teamsheets_from_open_event_data_json( filepath_events: Union[str, Path], filepath_match: Union[str, Path], ) -> Dict[str, Teamsheet]: @@ -130,7 +130,7 @@ def read_teamsheets_from_open_statsbomb_event_data_json( return teamsheets -def read_open_statsbomb_event_data_json( +def read_open_event_data_json( filepath_events: Union[str, Path], filepath_match: Union[str, Path], filepath_threesixty: Union[str, Path] = None, @@ -196,18 +196,18 @@ def read_open_statsbomb_event_data_json( # create or check teamsheet objects if teamsheet_home is None and teamsheet_away is None: - teamsheets = read_teamsheets_from_open_statsbomb_event_data_json( + teamsheets = read_teamsheets_from_open_event_data_json( filepath_events, filepath_match ) teamsheet_home = teamsheets["Home"] teamsheet_away = teamsheets["Away"] elif teamsheet_home is None: - teamsheets = read_teamsheets_from_open_statsbomb_event_data_json( + teamsheets = read_teamsheets_from_open_event_data_json( filepath_events, filepath_match ) teamsheet_home = teamsheets["Home"] elif teamsheet_away is None: - teamsheets = read_teamsheets_from_open_statsbomb_event_data_json( + teamsheets = read_teamsheets_from_open_event_data_json( filepath_events, filepath_match ) teamsheet_away = teamsheets["Away"] diff --git a/floodlight/io/statsperform.py b/floodlight/io/statsperform.py index abc530e0..66d3a3ce 100644 --- a/floodlight/io/statsperform.py +++ b/floodlight/io/statsperform.py @@ -131,13 +131,13 @@ def _read_open_event_csv_single_line( def read_teamsheets_from_open_data_csv( filepath_csv: Union[str, Path] ) -> Dict[str, Teamsheet]: - """Parses the entire open StatsPerform tracking data CSV file for unique jIDs + """Parses the entire open StatsPerform position data CSV file for unique jIDs (jerseynumbers) and creates teamsheets for both teams. Parameters ---------- filepath_csv: str or pathlib.Path - CSV file where the position data in StatsPerform format is saved. + CSV file containing either open position or open event data. Returns ------- @@ -309,8 +309,8 @@ def read_open_event_data_csv( return data_objects -def read_open_tracking_data_csv( - filepath_tracking: Union[str, Path], +def read_open_position_data_csv( + filepath_position: Union[str, Path], teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, ) -> Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Pitch, Teamsheet, Teamsheet]: @@ -324,7 +324,7 @@ def read_open_tracking_data_csv( Parameters ---------- - filepath_tracking: str or pathlib.Path + filepath_position: str or pathlib.Path Full path to the CSV file. teamsheet_home: Teamsheet, optional Teamsheet-object for the home team used to create link dictionaries of the form @@ -344,7 +344,7 @@ def read_open_tracking_data_csv( possession_ht1, possession_ht2, pitch, teamsheet_home, teamsheet_away) """ # parse the CSV file into pd.DataFrame - dat_df = pd.read_csv(str(filepath_tracking)) + dat_df = pd.read_csv(str(filepath_position)) # initialize team and ball ids team_ids = {"Home": 1.0, "Away": 2.0} @@ -357,14 +357,14 @@ def read_open_tracking_data_csv( # create or check teamsheet objects if teamsheet_home is None and teamsheet_away is None: - teamsheets = read_teamsheets_from_open_data_csv(filepath_tracking) + teamsheets = read_teamsheets_from_open_data_csv(filepath_position) teamsheet_home = teamsheets["Home"] teamsheet_away = teamsheets["Away"] elif teamsheet_home is None: - teamsheets = read_teamsheets_from_open_data_csv(filepath_tracking) + teamsheets = read_teamsheets_from_open_data_csv(filepath_position) teamsheet_home = teamsheets["Home"] elif teamsheet_away is None: - teamsheets = read_teamsheets_from_open_data_csv(filepath_tracking) + teamsheets = read_teamsheets_from_open_data_csv(filepath_position) teamsheet_away = teamsheets["Away"] else: pass @@ -506,7 +506,7 @@ def read_open_tracking_data_csv( # ----------------------------- StatsPerform Format --------------------------- -def _read_tracking_data_txt_single_line( +def _read_position_data_txt_single_line( line: str, ) -> Tuple[ int, @@ -514,7 +514,7 @@ def _read_tracking_data_txt_single_line( Dict[str, Dict[str, Tuple[float, float, float]]], Dict[str, Union[str, tuple]], ]: - """Extracts all relevant information from a single line of StatsPerform's tracking + """Extracts all relevant information from a single line of StatsPerform's position data TXT file (i.e. one frame of data). Parameters @@ -591,17 +591,17 @@ def _read_tracking_data_txt_single_line( return gameclock, segment, positions, ball -def _read_time_information_from_tracking_data_txt( - filepath_tracking: Union[str, Path], +def _read_time_information_from_position_data_txt( + filepath_position: Union[str, Path], ) -> Tuple[Dict, Union[int, None]]: - """Reads StatsPerform's tracking TXT file and extracts information about the first + """Reads StatsPerform's position TXT file and extracts information about the first and last frame of periods. Also, a framerate is estimated from the gameclock difference between samples. Parameters ---------- - filepath_tracking: str or pathlib.Path - Full path to the TXT file containing the tracking data. + filepath_position: str or pathlib.Path + Full path to the TXT file containing the position data. Returns ------- @@ -618,7 +618,7 @@ def _read_time_information_from_tracking_data_txt( framerate_est = None # read TXT file from disk - file_txt = open(filepath_tracking, "r") + file_txt = open(filepath_position, "r") # loop last_gameclock = None @@ -626,7 +626,7 @@ def _read_time_information_from_tracking_data_txt( for line in file_txt.readlines(): # read gameclock and segment - gameclock, segment, _, _ = _read_tracking_data_txt_single_line(line) + gameclock, segment, _, _ = _read_position_data_txt_single_line(line) # update periods if segment not in startframes: @@ -668,16 +668,16 @@ def _read_time_information_from_tracking_data_txt( return periods, framerate_est -def _read_jersey_numbers_from_tracking_data_txt( +def _read_jersey_numbers_from_position_data_txt( file_location_txt: Union[str, Path], ) -> Tuple[set, set]: - """Reads StatsPerform's tracking TXT file and extracts unique set of jIDs + """Reads StatsPerform's position TXT file and extracts unique set of jIDs (jerseynumbers) for both teams. Parameters ---------- file_location_txt: str or pathlib.Path - Full path to the TXT file containing the tracking data. + Full path to the TXT file containing the position data. Returns ------- @@ -696,7 +696,7 @@ def _read_jersey_numbers_from_tracking_data_txt( for package in file_txt.readlines(): # read line - _, _, positions, _ = _read_tracking_data_txt_single_line(package) + _, _, positions, _ = _read_position_data_txt_single_line(package) # extract jersey numbers home_jIDs |= set(positions["Home"].keys()) @@ -783,16 +783,16 @@ def read_teamsheets_from_event_data_xml( return teamsheets -def read_teamsheets_from_tracking_data_txt( - filepath_tracking: Union[str, Path], +def read_teamsheets_from_position_data_txt( + filepath_position: Union[str, Path], ) -> Dict[str, Teamsheet]: - """Parses the StatsPerform tracking file and returns two simple Teamsheet-objects + """Parses the StatsPerform position file and returns two simple Teamsheet-objects containing only two columns "player" and "jID" for the home and the away team. Parameters ---------- - filepath_tracking: str or pathlib.Path - Full path to the TXT file containing the tracking data. + filepath_position: str or pathlib.Path + Full path to the TXT file containing the position data. Returns ------- @@ -800,7 +800,7 @@ def read_teamsheets_from_tracking_data_txt( Dictionary with teamsheets for the home team and the away team. """ # create list of jIDs - homejrsy, awayjrsy = _read_jersey_numbers_from_tracking_data_txt(filepath_tracking) + homejrsy, awayjrsy = _read_jersey_numbers_from_position_data_txt(filepath_position) homejrsy = list(homejrsy) awayjrsy = list(awayjrsy) homejrsy.sort() @@ -994,8 +994,8 @@ def read_event_data_xml( return data_objects -def read_tracking_data_txt( - filepath_tracking: Union[str, Path], +def read_position_data_txt( + filepath_position: Union[str, Path], teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, ) -> Tuple[XY, XY, XY, XY, XY, XY, Teamsheet, Teamsheet]: @@ -1006,22 +1006,22 @@ def read_tracking_data_txt( StatsPerform data by parsing the TXT file. Since no information about framerate is delivered in the data itself, it is estimated from time difference between individual frames. Teamsheets are extracted from the event data, if filepath_events - is provided. Otherwise, minimal Teamsheet-objects are inferred from the tracking + is provided. Otherwise, minimal Teamsheet-objects are inferred from the position data. Parameters ---------- - filepath_tracking: str or pathlib.Path - Full path to the TXT file containing the tracking data. + filepath_position: str or pathlib.Path + Full path to the TXT file containing the position data. teamsheet_home: Teamsheet, optional Teamsheet-object for the home team used to create link dictionaries of the form `links[team][jID] = xID`. The links are used to map players to a specific xID in the respective XY objects. Should be supplied for custom ordering. If given as - None (default), teamsheet is extracted from the tracking data TXT file and its + None (default), teamsheet is extracted from the position data TXT file and its xIDs are assigned in order of appearance. teamsheet_away: Teamsheet, optional Teamsheet-object for the away team. If given as None (default), teamsheet is - extracted from the tracking data TXT file. See teamsheet_home for details. + extracted from the position data TXT file. See teamsheet_home for details. Returns ------- @@ -1031,28 +1031,28 @@ def read_tracking_data_txt( Notes ----- - Statsperform tracking data does not contain any player information expect jersey + Statsperform position data does not contain any player information expect jersey numbers by default. Thus, the teamsheet objects generated by this method will name players 'Player i' with i starting at 1. To identify players, use the jersey numbers of players or provide custom teamsheets (e.g. by parsing teamsheets from the Statsperform event data or another data provider). """ # parse TXT file for periods and estimate framerate if not contained in filepath - periods, framerate_est = _read_time_information_from_tracking_data_txt( - filepath_tracking + periods, framerate_est = _read_time_information_from_position_data_txt( + filepath_position ) segments = list(periods.keys()) # create or check teamsheet objects if teamsheet_home is None and teamsheet_away is None: - teamsheets = read_teamsheets_from_tracking_data_txt(filepath_tracking) + teamsheets = read_teamsheets_from_position_data_txt(filepath_position) teamsheet_home = teamsheets["Home"] teamsheet_away = teamsheets["Away"] elif teamsheet_home is None: - teamsheets = read_teamsheets_from_tracking_data_txt(filepath_tracking) + teamsheets = read_teamsheets_from_position_data_txt(filepath_position) teamsheet_home = teamsheets["Home"] elif teamsheet_away is None: - teamsheets = read_teamsheets_from_tracking_data_txt(filepath_tracking) + teamsheets = read_teamsheets_from_position_data_txt(filepath_position) teamsheet_away = teamsheets["Away"] else: pass @@ -1095,7 +1095,7 @@ def read_tracking_data_txt( } # read TXT file from disk - with open(filepath_tracking, "r") as f: + with open(filepath_position, "r") as f: tracking_data_lines = f.readlines() # loop @@ -1107,7 +1107,7 @@ def read_tracking_data_txt( segment, positions, ball, - ) = _read_tracking_data_txt_single_line(package) + ) = _read_position_data_txt_single_line(package) # check if frame is in any segment if segment is None: @@ -1215,30 +1215,30 @@ def read_event_data_from_url( return data_objects -def read_tracking_data_from_url( +def read_position_data_from_url( url: str, teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, ) -> Tuple[XY, XY, XY, XY, XY, XY, Teamsheet, Teamsheet]: - """Reads a URL from the StatsPerform API (StatsEdgeViewer) containing a tracking + """Reads a URL from the StatsPerform API (StatsEdgeViewer) containing a position data TXT file and extracts position data and teamsheets. - The tracking data from the URL is downloaded into a temporary file stored in the + The position data from the URL is downloaded into a temporary file stored in the repository's internal root ``.data``-folder and removed afterwards. Parameters ---------- url: str or pathlib.Path - URL to the TXT file containing the tracking data. + URL to the TXT file containing the position data. teamsheet_home: Teamsheet, optional Teamsheet-object for the home team used to create link dictionaries of the form `links[team][jID] = xID`. The links are used to map players to a specific xID in the respective XY objects. Should be supplied for custom ordering. If given as - None (default), teamsheet is extracted from the tracking data TXT file and its + None (default), teamsheet is extracted from the position data TXT file and its xIDs are assigned in order of appearance. teamsheet_away: Teamsheet, optional Teamsheet-object for the away team. If given as None (default), teamsheet is - extracted from the tracking data TXT file. See teamsheet_home for details. + extracted from the position data TXT file. See teamsheet_home for details. Returns ------- @@ -1248,7 +1248,7 @@ def read_tracking_data_from_url( Notes ----- - Statsperform tracking data does not contain any player information expect jersey + Statsperform position data does not contain any player information expect jersey numbers by default. Thus, the teamsheet objects generated by this method will name players 'Player i' with i starting at 1. To identify players, use the jersey numbers of players or provide custom teamsheets (e.g. by parsing teamsheets from the @@ -1267,8 +1267,8 @@ def read_tracking_data_from_url( away_ht2, ball_ht1, ball_ht2, - ) = read_tracking_data_txt( - filepath_tracking=os.path.join(data_dir, temp_file), + ) = read_position_data_txt( + filepath_position=os.path.join(data_dir, temp_file), teamsheet_home=teamsheet_home, teamsheet_away=teamsheet_away, ) diff --git a/floodlight/io/tracab.py b/floodlight/io/tracab.py index 603f5b0c..68efdda1 100644 --- a/floodlight/io/tracab.py +++ b/floodlight/io/tracab.py @@ -333,14 +333,14 @@ def read_teamsheets_from_meta_json( return teamsheets -def read_tracab_files( +def read_position_data_dat( filepath_dat: Union[str, Path], filepath_metadata: Union[str, Path], teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, ) -> Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch, Teamsheet, Teamsheet]: - """Parse TRACAB files and extract position data, possession and ballstatus codes, - teamsheets as well as pitch information. + """Parse TRACAB .dat-files (ASCII) and metadata (xml or json) and extract position + data, possession and ballstatus codes, teamsheets as well as pitch information. ChyronHego's TRACAB system delivers two separate files, a .dat file containing the actual data as well as a metadata.xml containing information about pitch size, diff --git a/tests/test_io/test_statsbomb.py b/tests/test_io/test_statsbomb.py index ef3f1ebb..0b397a32 100644 --- a/tests/test_io/test_statsbomb.py +++ b/tests/test_io/test_statsbomb.py @@ -1,13 +1,12 @@ import pytest -from floodlight.io.statsbomb import read_open_statsbomb_event_data_json +from floodlight.io.statsbomb import read_open_event_data_json @pytest.mark.unit -def test_statsbomb_read_events_path_not_exists( - filepath_empty -) -> None: +def test_statsbomb_read_events_path_not_exists(filepath_empty) -> None: with pytest.raises(FileNotFoundError): - read_open_statsbomb_event_data_json(filepath_events=filepath_empty, - filepath_match=filepath_empty) + read_open_event_data_json( + filepath_events=filepath_empty, filepath_match=filepath_empty + ) From 9d5f38d75e3dc0c6b756902b4e80e3e8a3c6634f Mon Sep 17 00:00:00 2001 From: draabe Date: Wed, 1 Feb 2023 00:27:05 +0100 Subject: [PATCH 19/25] refactor!: flexible dictionary returns for parser (#116) BREAKING CHANGE: this changes the return signature of all public parsing functions * refactor: flexible dictionary returns for tracab parser * refactor: flexible dictionary returns for statsbomb parser * refactor: flexible dictionary returns for datasets * refactor: flexible dictionary returns for second spectrum parser * refactor: flexible dictionary returns for opta parser * test: fix statsbomb dataset tests * refactor: flexible dictionary returns for dfl parser * refactor: flexible dictionary returns for statsperform parser * docs: update tutorials with new parser returns --- docs/source/guides/getting_started.rst | 43 +-- docs/source/guides/tutorial_matchsheets.rst | 15 +- floodlight/io/datasets.py | 54 ++-- floodlight/io/dfl.py | 170 ++++++----- floodlight/io/opta.py | 47 +-- floodlight/io/secondspectrum.py | 173 +++++------ floodlight/io/statsbomb.py | 60 ++-- floodlight/io/statsperform.py | 316 ++++++++++---------- floodlight/io/tracab.py | 120 ++++---- tests/test_io/test_datasets.py | 42 ++- 10 files changed, 537 insertions(+), 503 deletions(-) diff --git a/docs/source/guides/getting_started.rst b/docs/source/guides/getting_started.rst index 79ef2f34..fd40ffc1 100644 --- a/docs/source/guides/getting_started.rst +++ b/docs/source/guides/getting_started.rst @@ -35,34 +35,35 @@ Let's look at a quick example loading Tracab position and Opta event data: .. code-block:: python - from floodlight.io.tracab import read_tracab_files - from floodlight.io.opta import read_f24 + from floodlight.io.tracab import read_position_data_dat + from floodlight.io.opta import read_event_data_xml filepath_dat = filepath_meta = filepath_f24 = ( - xy_home_ht1, - xy_home_ht2, - xy_away_ht1, - xy_away_ht2, - xy_ball_ht1, - xy_ball_ht2, - possession_ht1, - possession_ht2, - ballstatus_ht1, - ballstatus_ht2, - pitch_xy, - ) = read_tracab_files(filepath_dat, filepath_meta) + xy_objects, + possession_objects, + ballstatus_objects, + teamsheets, + pitch_xy + ) = read_position_data_dat(filepath_dat, filepath_meta) - ( - events_home_ht1, - events_home_ht2, - events_away_ht1, - events_away_ht2, - pitch_events - ) = read_f24(filepath_f24) + events_objects, pitch_events = read_event_data_xml(filepath_f24) + + +The data returned by both parsers is stored in nested dictionaries because the number of match segments can differ (due to overtime). We can unpack some of them to be more explicit: + +.. code-block:: python + + xy_home_ht1 = xy_objects["HT1"]["Home"] + xy_away_ht1 = xy_objects["HT1"]["Away"] + possession_ht1 = possession_objects["HT1"] + ballstatus_ht1 = ballstatus_objects["HT1"] + + events_home_ht1 = events_objects["HT1"]["Home"] + events_away_ht1 = events_objects["HT1"]["Away"] Sample Data diff --git a/docs/source/guides/tutorial_matchsheets.rst b/docs/source/guides/tutorial_matchsheets.rst index 85cdd110..6e4ee4b0 100644 --- a/docs/source/guides/tutorial_matchsheets.rst +++ b/docs/source/guides/tutorial_matchsheets.rst @@ -16,16 +16,15 @@ First we need some data to work with. The open StatsBomb dataset contains (among # load a match from the UEFA Euro 2020 dataset = StatsBombOpenDataset() - ( - home_ht1, - home_ht2, - away_ht1, - away_ht2, - home_teamsheet, - away_teamsheet, - ) = dataset.get("UEFA Euro", "2020", "Croatia vs. Spain") + events_objects, teamsheets = dataset.get("UEFA Euro", "2020", "Croatia vs. Spain") pitch = dataset.get_pitch() + # unpack the queried data + home_ht1 = events_objects["HT1"]["Home"] + home_ht2 = events_objects["HT2"]["Home"] + away_ht1 = events_objects["HT1"]["Away"] + away_ht2 = events_objects["HT2"]["Away"] + The variables ``home_ht1``, ``home_ht2``, ``away_ht1``, and ``away_ht2`` are Events objects containing the events of the teams during the first and second half. These will be used to create the match sheets. The ``pitch`` variable is a Pitch object that contains information regarding the pitch specification and coordinate system our data live in. diff --git a/floodlight/io/datasets.py b/floodlight/io/datasets.py index eed17901..43051b19 100644 --- a/floodlight/io/datasets.py +++ b/floodlight/io/datasets.py @@ -47,7 +47,7 @@ class EIGDDataset: 'e0e547': ['00-00-00', '00-08-00', '00-15-00', '00-50-00', '01-00-00'], 'e8a35a': ['00-02-00', '00-07-00', '00-14-00', '01-05-00', '01-14-00'], 'ec7a6a': ['00-30-00', '00-53-00', '01-19-00', '01-30-00', '01-40-00'], - } + } Examples -------- @@ -211,14 +211,14 @@ def get( Parameters ---------- - segment : str, optional - Segment identifier for the first ("HT1") or the second ("HT2") half. - Defaults to the first half ("HT1"). + segment : {'HT1', 'HT2'}, optional + Segment identifier for the first ("HT1", default)) or the second ("HT2") + half. Returns ------- toy_dataset: Tuple[XY, XY, XY, Events, Events, Code, Code] - Returns seven XY objects of the form (xy_home, xy_away, xy_ball, + Returns seven core objects of the form (xy_home, xy_away, xy_ball, events_home, events_away, possession, ballstatus) for the requested segment. """ @@ -371,7 +371,7 @@ class StatsBombOpenDataset: >>> from floodlight.io.datasets import StatsBombOpenDataset >>> dataset = StatsBombOpenDataset() # get one sample of event data with StatsBomb360 data - >>> single_match_data = dataset.get("UEFA Euro", "2020", "England vs. Germany") + >>> events, teamsheets = dataset.get("UEFA Euro", "2020", "England vs. Germany") # get the corresponding pitch >>> pitch = dataset.get_pitch() # get a summary of available matches in the dataset @@ -386,6 +386,7 @@ class StatsBombOpenDataset: >>> for _, clasico in clasicos.iterrows(): >>> data = dataset.get("La Liga", clasico["season_name"], clasico["match_name"]) >>> clasico_events.append(data) + """ def __init__(self, dataset_dir_name="statsbomb_dataset"): @@ -499,7 +500,7 @@ def get( match_name: str = None, teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, - ) -> Tuple[Events, Events, Events, Events, Teamsheet, Teamsheet]: + ) -> Tuple[Dict[str, Dict[str, Events]], Dict[str, Teamsheet]]: """Get events and teamsheets from one match of the StatsBomb open dataset. If `StatsBomb360data Tuple[Events, Events, Events, Events, Pitch, Teamsheet, Teamsheet]: +) -> Tuple[Dict[str, Dict[str, Events]], Dict[str, Teamsheet], Pitch]: """Parses a DFL Match Event XML file and extracts the event data as well as teamsheets. @@ -393,10 +393,20 @@ def read_event_data_xml( Returns ------- - data_objects: Tuple[Events, Events, Events, Events, Pitch, Teamsheet, Teamsheet] - Events- and Pitch-objects for both teams and both halves. The order is - (events_home_ht1, events_home_ht2, events_away_ht1, events_away_ht2, pitch - teamsheet_home, teamsheet_away). + data_objects: Tuple[Dict[str, Dict[str, Events]], Dict[str, Teamsheet], Pitch] + Tuple of (nested) floodlight core objects with shape (events_objects, + teamsheets, pitch). + + ``events_objects`` is a nested dictionary containing ``Events`` objects for + each team and segment of the form ``events_objects[segment][team] = Events``. + For a typical league match with two halves and teams this dictionary looks like: + ``{'HT1': {'Home': Events, 'Away': Events}, 'HT2': {'Home': Events, 'Away': + Events}}``. + + ``teamsheets`` is a dictionary containing ``Teamsheet`` objects for each team + of the form ``teamsheets[team] = Teamsheet``. + + ``pitch`` is a ``Pitch`` object corresponding to the data. Notes ----- @@ -590,28 +600,21 @@ def read_event_data_xml( f"teamsheet_away ({away_tID})!" ) - # assembly - events_home_ht1 = Events( - events=team_dfs[segments[0]][links_team_to_role["Home"]], - ) - events_home_ht2 = Events( - events=team_dfs[segments[1]][links_team_to_role["Home"]], - ) - events_away_ht1 = Events( - events=team_dfs[segments[0]][links_team_to_role["Away"]], - ) - events_away_ht2 = Events( - events=team_dfs[segments[1]][links_team_to_role["Away"]], - ) - data_objects = ( - events_home_ht1, - events_home_ht2, - events_away_ht1, - events_away_ht2, - pitch, - teamsheet_home, - teamsheet_away, - ) + # create objects + events_objects = {} + for segment in segments: + events_objects[segment] = {} + for team in ["Home", "Away"]: + events_objects[segment][team] = Events( + events=team_dfs[segment][links_team_to_role[team]], + ) + teamsheets = { + "Home": teamsheet_home, + "Away": teamsheet_away, + } + + # pack objects + data_objects = (events_objects, teamsheets, pitch) return data_objects @@ -621,7 +624,13 @@ def read_position_data_xml( filepath_mat_info: Union[str, Path], teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, -) -> Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch, Teamsheet, Teamsheet]: +) -> Tuple[ + Dict[str, Dict[str, XY]], + Dict[str, Code], + Dict[str, Code], + Dict[str, Teamsheet], + Pitch, +]: """Parse DFL files and extract position data, possession and ballstatus codes as well as pitch information and teamsheets. @@ -653,12 +662,28 @@ def read_position_data_xml( Returns ------- - data_objects: Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch, - Teamsheet, Teamsheet] - XY-, Code-, Pitch-, and Teamsheet-objects for both teams and both halves. The - order is (home_ht1, home_ht2, away_ht1, away_ht2, ball_ht1, ball_ht2, - possession_ht1, possession_ht2, ballstatus_ht1, ballstatus_ht2, pitch, - teamsheet_home, teamsheet_away). + data_objects: Tuple[Dict[str, Dict[str, XY]], Dict[str, Code], Dict[str, Code], \ + Dict[str, Teamsheet], Pitch] + Tuple of (nested) floodlight core objects with shape (xy_objects, + possession_objects, ballstatus_objects, teamsheets, pitch). + + ``xy_objects`` is a nested dictionary containing ``XY`` objects for each team + and segment of the form ``xy_objects[segment][team] = XY``. For a typical + league match with two halves and teams this dictionary looks like: + ``{'HT1': {'Home': XY, 'Away': XY}, 'HT2': {'Home': XY, 'Away': XY}}``. + + ``possession_objects`` is a dictionary containing ``Code`` objects with + possession information (home or away) for each segment of the form + ``possession_objects[segment] = Code``. + + ``ballstatus_objects`` is a dictionary containing ``Code`` objects with + ballstatus information (dead or alive) for each segment of the form + ``ballstatus_objects[segment] = Code``. + + ``teamsheets`` is a dictionary containing ``Teamsheet`` objects for each team + of the form ``teamsheets[team] = Teamsheet``. + + ``pitch`` is a ``Pitch`` object corresponding to the data. """ # read metadata pitch = read_pitch_from_mat_info_xml(filepath_mat_info) @@ -780,54 +805,41 @@ def read_position_data_xml( frame_set.clear() - # create XY objects - home_ht1 = XY(xy=xydata["Home"]["firstHalf"], framerate=framerate_est) - home_ht2 = XY(xy=xydata["Home"]["secondHalf"], framerate=framerate_est) - away_ht1 = XY(xy=xydata["Away"]["firstHalf"], framerate=framerate_est) - away_ht2 = XY(xy=xydata["Away"]["secondHalf"], framerate=framerate_est) - ball_ht1 = XY(xy=xydata["Ball"]["firstHalf"], framerate=framerate_est) - ball_ht2 = XY(xy=xydata["Ball"]["secondHalf"], framerate=framerate_est) - - # create Code objects - possession_ht1 = Code( - code=np.array(codes["possession"]["firstHalf"]), - name="possession", - definitions={1: "Home", 2: "Away"}, - framerate=framerate_est, - ) - possession_ht2 = Code( - code=np.array(codes["possession"]["secondHalf"]), - name="possession", - definitions={1: "Home", 2: "Away"}, - framerate=framerate_est, - ) - ballstatus_ht1 = Code( - code=np.array(codes["ballstatus"]["firstHalf"]), - name="ballstatus", - definitions={0: "Dead", 1: "Alive"}, - framerate=framerate_est, - ) - ballstatus_ht2 = Code( - code=np.array(codes["ballstatus"]["secondHalf"]), - name="ballstatus", - definitions={0: "Dead", 1: "Alive"}, - framerate=framerate_est, - ) + # create objects + xy_objects = {} + possession_objects = {} + ballstatus_objects = {} + for segment in segments: + xy_objects[segment] = {} + possession_objects[segment] = Code( + code=np.array(codes["possession"][segment]), + name="possession", + definitions={1: "Home", 2: "Away"}, + framerate=framerate_est, + ) + ballstatus_objects[segment] = Code( + code=np.array(codes["ballstatus"][segment]), + name="ballstatus", + definitions={0: "Dead", 1: "Alive"}, + framerate=framerate_est, + ) + for team in ["Home", "Away", "Ball"]: + xy_objects[segment][team] = XY( + xy=xydata[team][segment], + framerate=framerate_est, + ) + teamsheets = { + "Home": teamsheet_home, + "Away": teamsheet_away, + } + # pack objects data_objects = ( - home_ht1, - home_ht2, - away_ht1, - away_ht2, - ball_ht1, - ball_ht2, - possession_ht1, - possession_ht2, - ballstatus_ht1, - ballstatus_ht2, + xy_objects, + possession_objects, + ballstatus_objects, + teamsheets, pitch, - teamsheet_home, - teamsheet_away, ) return data_objects diff --git a/floodlight/io/opta.py b/floodlight/io/opta.py index a26f5564..8e0bfadf 100644 --- a/floodlight/io/opta.py +++ b/floodlight/io/opta.py @@ -1,6 +1,6 @@ import re from pathlib import Path -from typing import Tuple, Union +from typing import Dict, Tuple, Union import pytz import iso8601 @@ -47,7 +47,7 @@ def get_opta_feedtype(filepath: Union[str, Path]) -> Union[str, None]: def read_event_data_xml( filepath: Union[str, Path] -) -> Tuple[Events, Events, Events, Events, Pitch]: +) -> Tuple[Dict[str, Dict[str, Events]], Pitch]: """Parse Opta's f24 feed (containing match events) and extract event data and pitch information. @@ -62,9 +62,17 @@ def read_event_data_xml( Returns ------- - data_objects: Tuple[Events, Events, Events, Events, Pitch] - Events- and Pitch-objects for both teams and both halves. The order is - (home_ht1, home_ht2, away_ht1, away_ht2, pitch) + data_objects: Tuple[Dict[str, Dict[str, Events]], Pitch] + Tuple of (nested) floodlight core objects with shape (events_objects, + pitch). + + ``events_objects`` is a nested dictionary containing ``Events`` objects for + each team and segment of the form ``events_objects[segment][team] = Events``. + For a typical league match with two halves and teams this dictionary looks like: + ``{'HT1': {'Home': Events, 'Away': Events}, 'HT2': {'Home': Events, 'Away': + Events}}``. + + ``pitch`` is a ``Pitch`` object corresponding to the data. Notes ----- @@ -196,25 +204,18 @@ def read_event_data_xml( qual_dict[qual_id] = qual_value event_lists[team][segment]["qualifier"].append(str(qual_dict)) - # assembly - home_ht1 = Events( - events=pd.DataFrame(data=event_lists["Home"]["HT1"]), - direction=directions["Home"]["HT1"], - ) - home_ht2 = Events( - events=pd.DataFrame(data=event_lists["Home"]["HT2"]), - direction=directions["Home"]["HT2"], - ) - away_ht1 = Events( - events=pd.DataFrame(data=event_lists["Away"]["HT1"]), - direction=directions["Away"]["HT1"], - ) - away_ht2 = Events( - events=pd.DataFrame(data=event_lists["Away"]["HT2"]), - direction=directions["Away"]["HT2"], - ) + # create objects + events_objects = {} + for segment in segments: + events_objects[segment] = {} + for team in ["Home", "Away"]: + events_objects[segment][team] = Events( + events=pd.DataFrame(data=event_lists[team][segment]), + direction=directions[team][segment], + ) pitch = Pitch.from_template("opta", sport="football") - data_objects = (home_ht1, home_ht2, away_ht1, away_ht2, pitch) + # pack objects + data_objects = (events_objects, pitch) return data_objects diff --git a/floodlight/io/secondspectrum.py b/floodlight/io/secondspectrum.py index ff0b60af..cabb4347 100644 --- a/floodlight/io/secondspectrum.py +++ b/floodlight/io/secondspectrum.py @@ -210,11 +210,17 @@ def read_teamsheets_from_meta_json( def read_position_data_jsonl( - filepath_tracking: Union[str, Path], + filepath_position: Union[str, Path], filepath_metadata: Union[str, Path], teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, -) -> Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch, Teamsheet, Teamsheet]: +) -> Tuple[ + Dict[str, Dict[str, XY]], + Dict[str, Code], + Dict[str, Code], + Dict[str, Teamsheet], + Pitch, +]: """Parse Second Spectrum files and extract position data, possession and ballstatus codes, as well as pitch information. @@ -226,7 +232,7 @@ def read_position_data_jsonl( Parameters ---------- - filepath_tracking: str or pathlib.Path + filepath_position: str or pathlib.Path Full path to .jsonl-file. filepath_metadata: str or pathlib.Path Full path to _meta.json file. @@ -243,14 +249,28 @@ def read_position_data_jsonl( Returns ------- - data_objects: Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch, - Teamsheet, Teamsheet] - XY-, Code-, Pitch- and Teamsheet-objects for both teams and both halves. The - order is - (home_ht1, home_ht2, away_ht1, away_ht2, ball_ht1, ball_ht2, - possession_ht1, possession_ht2, ballstatus_ht1, ballstatus_ht2, pitch, - teamsheet_home, teamsheet_away) + data_objects: Tuple[Dict[str, Dict[str, XY]], Dict[str, Code], Dict[str, Code], \ + Dict[str, Teamsheet], Pitch] + Tuple of (nested) floodlight core objects with shape (xy_objects, + possession_objects, ballstatus_objects, teamsheets, pitch). + ``xy_objects`` is a nested dictionary containing ``XY`` objects for each team + and segment of the form ``xy_objects[segment][team] = XY``. For a typical + league match with two halves and teams this dictionary looks like: + ``{'HT1': {'Home': XY, 'Away': XY}, 'HT2': {'Home': XY, 'Away': XY}}``. + + ``possession_objects`` is a dictionary containing ``Code`` objects with + possession information (home or away) for each segment of the form + ``possession_objects[segment] = Code``. + + ``ballstatus_objects`` is a dictionary containing ``Code`` objects with + ballstatus information (dead or alive) for each segment of the form + ``ballstatus_objects[segment] = Code``. + + ``teamsheets`` is a dictionary containing ``Teamsheet`` objects for each team + of the form ``teamsheets[team] = Teamsheet``. + + ``pitch`` is a ``Pitch`` object corresponding to the data. """ # setup metadata, periods, directions, pitch = _read_metajson(str(filepath_metadata)) @@ -314,7 +334,7 @@ def read_position_data_jsonl( } # loop - with open(str(filepath_tracking), "r") as f: + with open(str(filepath_position), "r") as f: while True: # get one line of file dataline = f.readline() @@ -355,61 +375,43 @@ def read_position_data_jsonl( ballstatus = None codes["ballstatus"][segment][frame_rel] = ballstatus - # assemble core objects - home_ht1 = XY( - xy=xydata["Home"]["HT1"], framerate=fps, direction=directions["HT1"]["Home"] - ) - home_ht2 = XY( - xy=xydata["Home"]["HT2"], framerate=fps, direction=directions["HT2"]["Home"] - ) - away_ht1 = XY( - xy=xydata["Away"]["HT1"], framerate=fps, direction=directions["HT1"]["Away"] - ) - away_ht2 = XY( - xy=xydata["Away"]["HT2"], framerate=fps, direction=directions["HT2"]["Away"] - ) - ball_ht1 = XY(xy=xydata["Ball"]["HT1"], framerate=fps) - ball_ht2 = XY(xy=xydata["Ball"]["HT2"], framerate=fps) - - possession_ht1 = Code( - code=codes["possession"]["HT1"], - name="possession", - definitions={"H": "Home", "A": "Away"}, - framerate=fps, - ) - possession_ht2 = Code( - code=codes["possession"]["HT2"], - name="possession", - definitions={"H": "Home", "A": "Away"}, - framerate=fps, - ) - ballstatus_ht1 = Code( - code=codes["ballstatus"]["HT1"], - name="ballstatus", - definitions={"D": "Dead", "A": "Alive"}, - framerate=fps, - ) - ballstatus_ht2 = Code( - code=codes["ballstatus"]["HT2"], - name="ballstatus", - definitions={"D": "Dead", "A": "Alive"}, - framerate=fps, - ) + # create objects + xy_objects = {} + possession_objects = {} + ballstatus_objects = {} + for segment in segments: + xy_objects[segment] = {} + possession_objects[segment] = Code( + code=codes["possession"][segment], + name="possession", + definitions={"H": "Home", "A": "Away"}, + framerate=fps, + ) + ballstatus_objects[segment] = Code( + code=codes["ballstatus"][segment], + name="ballstatus", + definitions={"D": "Dead", "A": "Alive"}, + framerate=fps, + ) + for team in ["Home", "Away"]: + xy_objects[segment][team] = XY( + xy=xydata[team][segment], + framerate=fps, + direction=directions[segment][team], + ) + xy_objects[segment]["Ball"] = XY(xy=xydata["Ball"][segment], framerate=fps) + teamsheets = { + "Home": teamsheet_home, + "Away": teamsheet_away, + } + # pack objects data_objects = ( - home_ht1, - home_ht2, - away_ht1, - away_ht2, - ball_ht1, - ball_ht2, - possession_ht1, - possession_ht2, - ballstatus_ht1, - ballstatus_ht2, + xy_objects, + possession_objects, + ballstatus_objects, + teamsheets, pitch, - teamsheet_home, - teamsheet_away, ) return data_objects @@ -418,7 +420,7 @@ def read_position_data_jsonl( def read_event_data_jsonl( filepath_insight: Union[str, Path], filepath_metadata: Union[str, Path], -) -> Tuple[Events, Events, Events, Events, Pitch]: +) -> Tuple[Dict[str, Dict[str, Events]], Pitch]: """Parse Second Spectrums's Insight file (containing match events) and extract event data and pitch information. @@ -435,9 +437,17 @@ def read_event_data_jsonl( Returns ------- - data_objects: Tuple[Events, Events, Events, Events, Pitch] - Events- and Pitch-objects for both teams and both halves. The order is - (home_ht1, home_ht2, away_ht1, away_ht2, pitch) + data_objects: Tuple[Dict[str, Dict[str, Events]], Pitch] + Tuple of (nested) floodlight core objects with shape (events_objects, + pitch). + + ``events_objects`` is a nested dictionary containing ``Events`` objects for + each team and segment of the form ``events_objects[segment][team] = Events``. + For a typical league match with two halves and teams this dictionary looks like: + ``{'HT1': {'Home': Events, 'Away': Events}, 'HT2': {'Home': Events, 'Away': + Events}}``. + + ``pitch`` is a ``Pitch`` object corresponding to the data. Notes ----- @@ -579,27 +589,20 @@ def read_event_data_jsonl( qual_dict[qual_id] = qual_value event_lists[team][segment]["qualifier"].append(str(qual_dict)) - # assembly - home_ht1 = Events( - events=pd.DataFrame(data=event_lists["Home"]["HT1"]), - direction=directions["Home"]["HT1"], - ) - home_ht2 = Events( - events=pd.DataFrame(data=event_lists["Home"]["HT2"]), - direction=directions["Home"]["HT2"], - ) - away_ht1 = Events( - events=pd.DataFrame(data=event_lists["Away"]["HT1"]), - direction=directions["Away"]["HT1"], - ) - away_ht2 = Events( - events=pd.DataFrame(data=event_lists["Away"]["HT2"]), - direction=directions["Away"]["HT2"], - ) + # create objects + events_objects = {} + for segment in segments: + events_objects[segment] = {} + for team in ["Home", "Away"]: + events_objects[segment][team] = Events( + events=pd.DataFrame(data=event_lists[team][segment]), + direction=directions[team][segment], + ) pitch = Pitch.from_template( "opta", length=metadata["length"], width=metadata["width"], sport="football" ) - data_objects = (home_ht1, home_ht2, away_ht1, away_ht2, pitch) + # pack objects + data_objects = (events_objects, pitch) return data_objects diff --git a/floodlight/io/statsbomb.py b/floodlight/io/statsbomb.py index cbe95a3d..3362ec72 100644 --- a/floodlight/io/statsbomb.py +++ b/floodlight/io/statsbomb.py @@ -14,7 +14,7 @@ def read_teamsheets_from_open_event_data_json( filepath_events: Union[str, Path], filepath_match: Union[str, Path], ) -> Dict[str, Teamsheet]: - """Reads match_information XML file and returns two Teamsheet-objects for the home + """Reads open events and match files and returns Teamsheet objects for the home and the away team. Parameters @@ -136,7 +136,7 @@ def read_open_event_data_json( filepath_threesixty: Union[str, Path] = None, teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, -) -> Tuple[Events, Events, Events, Events, Teamsheet, Teamsheet]: +) -> Tuple[Dict[str, Dict[str, Events]], Dict[str, Teamsheet]]: """Parses files for a single match from the StatsBomb open dataset and extracts the event data and teamsheets. @@ -164,16 +164,25 @@ def read_open_event_data_json( teamsheet_home: Teamsheet, optional Teamsheet-object for the home team used to create link dictionaries of the form `links[pID] = team`. If given as None (default), teamsheet is extracted from - the Match Information XML file. + the events and match json files. teamsheet_away: Teamsheet, optional Teamsheet-object for the away team. If given as None (default), teamsheet is - extracted from the Match Information XML file. See teamsheet_home for details. + extracted from the events and match json files. See teamsheet_home for details. Returns ------- - data_objects: Tuple[Events, Events, Events, Events, Teamsheet, Teamsheet] - Events-, and Teamsheet objects for both teams and both halves. The order - is (home_ht1, home_ht2, away_ht1, away_ht2, teamsheet_home, teamsheet_away). + data_objects: Tuple[Dict[str, Dict[str, Events]], Dict[str, Teamsheet]] + Tuple of (nested) floodlight core objects with shape (events_objects, + teamsheets). + + ``events_objects`` is a nested dictionary containing ``Events`` objects for + each team and segment of the form ``events_objects[segment][team] = Events``. + For a typical league match with two halves and teams this dictionary looks like: + ``{'HT1': {'Home': Events, 'Away': Events}, 'HT2': {'Home': Events, 'Away': + Events}}``. + + ``teamsheets`` is a dictionary containing ``Teamsheet`` objects for each team + of the form ``teamsheets[team] = Teamsheet``. Notes ----- @@ -359,27 +368,20 @@ def read_open_event_data_json( ) team_event_lists[team][segment]["qualifier"].append(str(qual_dict)) - # assembly - home_ht1 = Events( - events=pd.DataFrame(data=team_event_lists["Home"]["HT1"]), - ) - home_ht2 = Events( - events=pd.DataFrame(data=team_event_lists["Home"]["HT2"]), - ) - away_ht1 = Events( - events=pd.DataFrame(data=team_event_lists["Away"]["HT1"]), - ) - away_ht2 = Events( - events=pd.DataFrame(data=team_event_lists["Away"]["HT2"]), - ) - - data_objects = ( - home_ht1, - home_ht2, - away_ht1, - away_ht2, - teamsheet_home, - teamsheet_away, - ) + # create objects + events_objects = {} + for segment in segments: + events_objects[segment] = {} + for team in ["Home", "Away"]: + events_objects[segment][team] = Events( + events=pd.DataFrame(data=team_event_lists[team][segment]), + ) + teamsheets = { + "Home": teamsheet_home, + "Away": teamsheet_away, + } + + # pack objects + data_objects = (events_objects, teamsheets) return data_objects diff --git a/floodlight/io/statsperform.py b/floodlight/io/statsperform.py index 66d3a3ce..bf930a8e 100644 --- a/floodlight/io/statsperform.py +++ b/floodlight/io/statsperform.py @@ -201,7 +201,7 @@ def read_open_event_data_csv( filepath_events: Union[str, Path], teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, -) -> Tuple[Events, Events, Events, Events, Teamsheet, Teamsheet]: +) -> Tuple[Dict[str, Dict[str, Events]], Dict[str, Teamsheet]]: """Parses an open StatsPerform Match Event CSV file and extracts the event data and teamsheets. @@ -223,9 +223,18 @@ def read_open_event_data_csv( Returns ------- - data_objects: Tuple[Events, Events, Events, Events, Teamsheet, Teamsheet] - Events-objects for both teams and both halves. The order is (home_ht1, home_ht2, - away_ht1, away_ht2, teamsheet_home, teamsheet_away) + data_objects: Tuple[Dict[str, Dict[str, Events]], Dict[str, Teamsheet]] + Tuple of (nested) floodlight core objects with shape (events_objects, + teamsheets). + + ``events_objects`` is a nested dictionary containing ``Events`` objects for + each team and segment of the form ``events_objects[segment][team] = Events``. + For a typical league match with two halves and teams this dictionary looks like: + ``{'HT1': {'Home': Events, 'Away': Events}, 'HT2': {'Home': Events, 'Away': + Events}}``. + + ``teamsheets`` is a dictionary containing ``Teamsheet`` objects for each team + of the form ``teamsheets[team] = Teamsheet``. Notes ----- @@ -284,27 +293,21 @@ def read_open_event_data_csv( event, ignore_index=True ) - # assembly - home_ht1 = Events( - events=events[team_ids["Home"]]["1"], - ) - home_ht2 = Events( - events=events[team_ids["Home"]]["2"], - ) - away_ht1 = Events( - events=events[team_ids["Home"]]["1"], - ) - away_ht2 = Events( - events=events[team_ids["Home"]]["2"], - ) - data_objects = ( - home_ht1, - home_ht2, - away_ht1, - away_ht2, - teamsheet_home, - teamsheet_away, - ) + # create objects + events_objects = {} + for segment in segments: + events_objects[segment] = {} + for team in ["Home", "Away"]: + events_objects[segment][team] = Events( + events=pd.DataFrame(data=events[team_ids[team]][segment]), + ) + teamsheets = { + "Home": teamsheet_home, + "Away": teamsheet_away, + } + + # pack objects + data_objects = (events_objects, teamsheets) return data_objects @@ -313,7 +316,7 @@ def read_open_position_data_csv( filepath_position: Union[str, Path], teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, -) -> Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Pitch, Teamsheet, Teamsheet]: +) -> Tuple[Dict[str, Dict[str, XY]], Dict[str, Code], Dict[str, Teamsheet], Pitch]: """Parses an open StatsPerform CSV file and extract position data and possession codes as well as teamsheets and pitch information. @@ -338,10 +341,24 @@ def read_open_position_data_csv( Returns ------- - data_objects: Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Pitch, Teamsheet, Teamsheet] - XY-, Code-, Teamsheet-, and Pitch-objects for both teams and both halves. The - order is (home_ht1, home_ht2, away_ht1, away_ht2, ball_ht1, ball_ht2, - possession_ht1, possession_ht2, pitch, teamsheet_home, teamsheet_away) + data_objects: Tuple[Dict[str, Dict[str, XY]], Dict[str, Code], \ + Dict[str, Teamsheet], Pitch] + Tuple of (nested) floodlight core objects with shape (xy_objects, + possession_objects, teamsheets, pitch). + + ``xy_objects`` is a nested dictionary containing ``XY`` objects for each team + and segment of the form ``xy_objects[segment][team] = XY``. For a typical + league match with two halves and teams this dictionary looks like: + ``{'HT1': {'Home': XY, 'Away': XY}, 'HT2': {'Home': XY, 'Away': XY}}``. + + ``possession_objects`` is a dictionary containing ``Code`` objects with + possession information (home or away) for each segment of the form + ``possession_objects[segment] = Code``. + + ``teamsheets`` is a dictionary containing ``Teamsheet`` objects for each team + of the form ``teamsheets[team] = Teamsheet``. + + ``pitch`` is a ``Pitch`` object corresponding to the data. """ # parse the CSV file into pd.DataFrame dat_df = pd.read_csv(str(filepath_position)) @@ -465,41 +482,35 @@ def read_open_position_data_csv( # update codes codes["possession"][segment] = ball_df["possession"].values[appearance] - # create XY objects - home_ht1 = XY(xy=xydata["Home"][0], framerate=10) - home_ht2 = XY(xy=xydata["Home"][1], framerate=10) - away_ht1 = XY(xy=xydata["Away"][0], framerate=10) - away_ht2 = XY(xy=xydata["Away"][1], framerate=10) - ball_ht1 = XY(xy=xydata["Ball"][0], framerate=10) - ball_ht2 = XY(xy=xydata["Ball"][1], framerate=10) - - # create Code objects - poss_ht1 = Code( - name="possession", - code=codes["possession"][0], - definitions=dict([(team_id, team) for team, team_id in team_ids.items()]), - framerate=10, - ) - poss_ht2 = Code( - name="possession", - code=codes["possession"][1], - definitions=dict([(team_id, team) for team, team_id in team_ids.items()]), - framerate=10, - ) + # create objects + xy_objects = {} + possession_objects = {} + for segment in segments: + xy_objects[segment] = {} + possession_objects[segment] = Code( + code=codes["possession"][segment], + name="possession", + definitions=dict([(team_id, team) for team, team_id in team_ids.items()]), + framerate=10, + ) + for team in ["Home", "Away", "Ball"]: + xy_objects[segment][team] = XY( + xy=xydata[team][segment], + framerate=10, + ) + teamsheets = { + "Home": teamsheet_home, + "Away": teamsheet_away, + } + # pack objects data_objects = ( - home_ht1, - home_ht2, - away_ht1, - away_ht2, - ball_ht1, - ball_ht2, - poss_ht1, - poss_ht2, + xy_objects, + possession_objects, + teamsheets, pitch, - teamsheet_home, - teamsheet_away, ) + return data_objects @@ -830,7 +841,7 @@ def read_event_data_xml( filepath_events: Union[str, Path], teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, -) -> Tuple[Events, Events, Events, Events, Pitch, Teamsheet, Teamsheet]: +) -> Tuple[Dict[str, Dict[str, Events]], Dict[str, Teamsheet], Pitch]: """Parses a StatsPerform XML file and extracts event data and pitch information. This function provides high-level access to the StatsPerform match events XML file @@ -851,10 +862,20 @@ def read_event_data_xml( Returns ------- - data_objects: Tuple[Events, Events, Events, Events, Pitch] - Events-objects for both teams and both halves, pitch information, and - teamsheets. The order is (home_ht1, home_ht2, away_ht1, away_ht2, pitch, - teamsheet_home, teamsheet_away). + data_objects: Tuple[Dict[str, Dict[str, Events]], Dict[str, Teamsheet], Pitch] + Tuple of (nested) floodlight core objects with shape (events_objects, + teamsheets, pitch). + + ``events_objects`` is a nested dictionary containing ``Events`` objects for + each team and segment of the form ``events_objects[segment][team] = Events``. + For a typical league match with two halves and teams this dictionary looks like: + ``{'HT1': {'Home': Events, 'Away': Events}, 'HT2': {'Home': Events, 'Away': + Events}}``. + + ``teamsheets`` is a dictionary containing ``Teamsheet`` objects for each team + of the form ``teamsheets[team] = Teamsheet``. + + ``pitch`` is a ``Pitch`` object corresponding to the data. """ # load xml tree into memory tree = etree.parse(str(filepath_events)) @@ -967,29 +988,21 @@ def read_event_data_xml( sport="football", ) - # assembly - home_ht1 = Events( - events=pd.DataFrame(data=event_lists["Home"]["HT1"]), - ) - home_ht2 = Events( - events=pd.DataFrame(data=event_lists["Home"]["HT2"]), - ) - away_ht1 = Events( - events=pd.DataFrame(data=event_lists["Away"]["HT1"]), - ) - away_ht2 = Events( - events=pd.DataFrame(data=event_lists["Away"]["HT2"]), - ) + # create objects + events_objects = {} + for segment in segments: + events_objects[segment] = {} + for team in ["Home", "Away"]: + events_objects[segment][team] = Events( + events=pd.DataFrame(data=event_lists[team][segment]), + ) + teamsheets = { + "Home": teamsheet_home, + "Away": teamsheet_away, + } - data_objects = ( - home_ht1, - home_ht2, - away_ht1, - away_ht2, - pitch, - teamsheet_home, - teamsheet_away, - ) + # pack objects + data_objects = (events_objects, teamsheets, pitch) return data_objects @@ -998,7 +1011,7 @@ def read_position_data_txt( filepath_position: Union[str, Path], teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, -) -> Tuple[XY, XY, XY, XY, XY, XY, Teamsheet, Teamsheet]: +) -> Tuple[Dict[str, Dict[str, XY]], Dict[str, Teamsheet]]: """Parses a StatsPerform TXT file and extracts position data and teamsheets. Internal StatsPerform position data is stored as a TXT file containing all @@ -1025,9 +1038,17 @@ def read_position_data_txt( Returns ------- - data_objects: Tuple[XY, XY, XY, XY, XY, XY, Teamsheet, Teamsheet] - XY-objects for both teams and both halves. The order is (home_ht1, home_ht2, - away_ht1, away_ht2, ball_ht1, ball_ht2, teamsheet_home, teamsheet_away). + data_objects: Tuple[Dict[str, Dict[str, XY]], Dict[str, Teamsheet]] + Tuple of (nested) floodlight core objects with shape (xy_objects, + teamsheets). + + ``xy_objects`` is a nested dictionary containing ``XY`` objects for each team + and segment of the form ``xy_objects[segment][team] = XY``. For a typical + league match with two halves and teams this dictionary looks like: + ``{'HT1': {'Home': XY, 'Away': XY}, 'HT2': {'Home': XY, 'Away': XY}}``. + + ``teamsheets`` is a dictionary containing ``Teamsheet`` objects for each team + of the form ``teamsheets[team] = Teamsheet``. Notes ----- @@ -1130,23 +1151,24 @@ def read_position_data_txt( # get ball data xydata["Ball"][segment][frame_rel] = ball.get("position", np.nan) - # create XY objects - home_ht1 = XY(xy=xydata["Home"][1], framerate=framerate_est) - home_ht2 = XY(xy=xydata["Home"][2], framerate=framerate_est) - away_ht1 = XY(xy=xydata["Away"][1], framerate=framerate_est) - away_ht2 = XY(xy=xydata["Away"][2], framerate=framerate_est) - ball_ht1 = XY(xy=xydata["Ball"][1], framerate=framerate_est) - ball_ht2 = XY(xy=xydata["Ball"][2], framerate=framerate_est) + # create objects + xy_objects = {} + for segment in segments: + xy_objects[segment] = {} + for team in ["Home", "Away", "Ball"]: + xy_objects[segment][team] = XY( + xy=xydata[team][segment], + framerate=framerate_est, + ) + teamsheets = { + "Home": teamsheet_home, + "Away": teamsheet_away, + } + # pack objects data_objects = ( - home_ht1, - home_ht2, - away_ht1, - away_ht2, - ball_ht1, - ball_ht2, - teamsheet_home, - teamsheet_away, + xy_objects, + teamsheets, ) return data_objects @@ -1156,7 +1178,7 @@ def read_event_data_from_url( url: str, teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, -) -> Tuple[Events, Events, Events, Events, Pitch, Teamsheet, Teamsheet]: +) -> Tuple[Dict[str, Dict[str, Events]], Dict[str, Teamsheet], Pitch]: """Reads a URL containing a StatsPerform events CSV file and extracts the stored event data, pitch information, and teamsheets. @@ -1178,10 +1200,20 @@ def read_event_data_from_url( Returns ------- - data_objects: Tuple[Events, Events, Events, Events, Pitch] - Events-objects for both teams and both halves, pitch information, and - teamsheets. The order is (home_ht1, home_ht2, away_ht1, away_ht2, pitch, - teamsheet_home, teamsheet_away). + data_objects: Tuple[Dict[str, Dict[str, Events]], Dict[str, Teamsheet], Pitch] + Tuple of (nested) floodlight core objects with shape (events_objects, + teamsheets, pitch). + + ``events_objects`` is a nested dictionary containing ``Events`` objects for + each team and segment of the form ``events_objects[segment][team] = Events``. + For a typical league match with two halves and teams this dictionary looks like: + ``{'HT1': {'Home': Events, 'Away': Events}, 'HT2': {'Home': Events, 'Away': + Events}}``. + + ``teamsheets`` is a dictionary containing ``Teamsheet`` objects for each team + of the form ``teamsheets[team] = Teamsheet``. + + ``pitch`` is a ``Pitch`` object corresponding to the data. """ data_dir = os.path.join(DATA_DIR, "statsperform") if not os.path.isdir(data_dir): @@ -1189,29 +1221,15 @@ def read_event_data_from_url( temp_file = os.path.join(data_dir, "events_temp.xml") with open(temp_file, "wb") as binary_file: binary_file.write(download_from_url(url)) - ( - home_ht1, - home_ht2, - away_ht1, - away_ht2, - pitch, - teamsheet_home, - teamsheet_away, - ) = read_event_data_xml( + + events_objects, teamsheets, pitch = read_event_data_xml( filepath_events=os.path.join(data_dir, temp_file), teamsheet_home=teamsheet_home, teamsheet_away=teamsheet_away, ) - data_objects = ( - home_ht1, - home_ht2, - away_ht1, - away_ht2, - pitch, - teamsheet_home, - teamsheet_away, - ) + data_objects = (events_objects, teamsheets, pitch) os.remove(os.path.join(data_dir, temp_file)) + return data_objects @@ -1219,7 +1237,7 @@ def read_position_data_from_url( url: str, teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, -) -> Tuple[XY, XY, XY, XY, XY, XY, Teamsheet, Teamsheet]: +) -> Tuple[Dict[str, Dict[str, XY]], Dict[str, Teamsheet]]: """Reads a URL from the StatsPerform API (StatsEdgeViewer) containing a position data TXT file and extracts position data and teamsheets. @@ -1242,9 +1260,17 @@ def read_position_data_from_url( Returns ------- - data_objects: Tuple[XY, XY, XY, XY, XY, XY, Teamsheet, Teamsheet] - XY-objects for both teams and both halves. The order is (home_ht1, home_ht2, - away_ht1, away_ht2, ball_ht1, ball_ht2, teamsheet_home, teamsheet_away). + data_objects: Tuple[Dict[str, Dict[str, XY]], Dict[str, Teamsheet]] + Tuple of (nested) floodlight core objects with shape (xy_objects, + teamsheets). + + ``xy_objects`` is a nested dictionary containing ``XY`` objects for each team + and segment of the form ``xy_objects[segment][team] = XY``. For a typical + league match with two halves and teams this dictionary looks like: + ``{'HT1': {'Home': XY, 'Away': XY}, 'HT2': {'Home': XY, 'Away': XY}}``. + + ``teamsheets`` is a dictionary containing ``Teamsheet`` objects for each team + of the form ``teamsheets[team] = Teamsheet``. Notes ----- @@ -1260,27 +1286,13 @@ def read_position_data_from_url( temp_file = os.path.join(data_dir, "tracking_temp.txt") with open(temp_file, "wb") as binary_file: binary_file.write(download_from_url(url)) - ( - home_ht1, - home_ht2, - away_ht1, - away_ht2, - ball_ht1, - ball_ht2, - ) = read_position_data_txt( + + xy_objects, teamsheets = read_position_data_txt( filepath_position=os.path.join(data_dir, temp_file), teamsheet_home=teamsheet_home, teamsheet_away=teamsheet_away, ) - data_objects = ( - home_ht1, - home_ht2, - away_ht1, - away_ht2, - ball_ht1, - ball_ht2, - teamsheet_home, - teamsheet_away, - ) + data_objects = (xy_objects, teamsheets) os.remove(os.path.join(data_dir, temp_file)) + return data_objects diff --git a/floodlight/io/tracab.py b/floodlight/io/tracab.py index 68efdda1..60e7d23f 100644 --- a/floodlight/io/tracab.py +++ b/floodlight/io/tracab.py @@ -338,7 +338,13 @@ def read_position_data_dat( filepath_metadata: Union[str, Path], teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, -) -> Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch, Teamsheet, Teamsheet]: +) -> Tuple[ + Dict[str, Dict[str, XY]], + Dict[str, Code], + Dict[str, Code], + Dict[str, Teamsheet], + Pitch, +]: """Parse TRACAB .dat-files (ASCII) and metadata (xml or json) and extract position data, possession and ballstatus codes, teamsheets as well as pitch information. @@ -357,21 +363,37 @@ def read_position_data_dat( Teamsheet object for the home team used to create link dictionaries of the form `links[team][jID] = xID`. The links are used to map players to a specific xID in the respective XY objects. Should be supplied for custom ordering. If given - as None (default), teamsheet is extracted from the .dat file and xIDs are - assigned ascendingly to the player's jersey numbers. + as None (default), teamsheet is extracted from the .dat or .json file (see + Notes) and xIDs are assigned to the player's jersey numbers ascendingly (dat + case) or in order of appearance (json case). teamsheet_away: Teamsheet, optional Teamsheet object for the away team. If given as None (default), teamsheet is - extracted from the .dat file. See teamsheet_home for details. + extracted from the .dat or -json file. See teamsheet_home for details. Returns ------- - data_objects: Tuple[XY, XY, XY, XY, XY, XY, Code, Code, Code, Code, Pitch, - Teamsheet, Teamsheet] - XY-, Code-, Pitch- and Teamsheet-objects for both teams and both halves. The - order is - (home_ht1, home_ht2, away_ht1, away_ht2, ball_ht1, ball_ht2, - possession_ht1, possession_ht2, ballstatus_ht1, ballstatus_ht2, pitch, - teamsheet_home, teamsheet_away) + data_objects: Tuple[Dict[str, Dict[str, XY]], Dict[str, Code], Dict[str, Code], \ + Dict[str, Teamsheet], Pitch] + Tuple of (nested) floodlight core objects with shape (xy_objects, + possession_objects, ballstatus_objects, teamsheets, pitch). + + ``xy_objects`` is a nested dictionary containing ``XY`` objects for each team + and segment of the form ``xy_objects[segment][team] = XY``. For a typical + league match with two halves and teams this dictionary looks like: + ``{'HT1': {'Home': XY, 'Away': XY}, 'HT2': {'Home': XY, 'Away': XY}}``. + + ``possession_objects`` is a dictionary containing ``Code`` objects with + possession information (home or away) for each segment of the form + ``possession_objects[segment] = Code``. + + ``ballstatus_objects`` is a dictionary containing ``Code`` objects with + ballstatus information (dead or alive) for each segment of the form + ``ballstatus_objects[segment] = Code``. + + ``teamsheets`` is a dictionary containing ``Teamsheet`` objects for each team + of the form ``teamsheets[team] = Teamsheet``. + + ``pitch`` is a ``Pitch`` object corresponding to the data. Notes ----- @@ -496,54 +518,40 @@ def read_position_data_dat( codes["possession"][segment].append(ball.get("possession", np.nan)) codes["ballstatus"][segment].append(ball.get("ballstatus", np.nan)) - # create XY objects - home_ht1 = XY(xy=xydata["Home"]["HT1"], framerate=metadata["framerate"]) - home_ht2 = XY(xy=xydata["Home"]["HT2"], framerate=metadata["framerate"]) - away_ht1 = XY(xy=xydata["Away"]["HT1"], framerate=metadata["framerate"]) - away_ht2 = XY(xy=xydata["Away"]["HT2"], framerate=metadata["framerate"]) - ball_ht1 = XY(xy=xydata["Ball"]["HT1"], framerate=metadata["framerate"]) - ball_ht2 = XY(xy=xydata["Ball"]["HT2"], framerate=metadata["framerate"]) - - # create Code objects - possession_ht1 = Code( - code=np.array(codes["possession"]["HT1"]), - name="possession", - definitions={"H": "Home", "A": "Away"}, - framerate=metadata["framerate"], - ) - possession_ht2 = Code( - code=np.array(codes["possession"]["HT2"]), - name="possession", - definitions={"H": "Home", "A": "Away"}, - framerate=metadata["framerate"], - ) - ballstatus_ht1 = Code( - code=np.array(codes["ballstatus"]["HT1"]), - name="ballstatus", - definitions={"D": "Dead", "A": "Alive"}, - framerate=metadata["framerate"], - ) - ballstatus_ht2 = Code( - code=np.array(codes["ballstatus"]["HT2"]), - name="ballstatus", - definitions={"D": "Dead", "A": "Alive"}, - framerate=metadata["framerate"], - ) + # create objects + xy_objects = {} + possession_objects = {} + ballstatus_objects = {} + for segment in segments: + xy_objects[segment] = {} + possession_objects[segment] = Code( + code=np.array(codes["possession"][segment]), + name="possession", + definitions={"H": "Home", "A": "Away"}, + framerate=metadata["framerate"], + ) + ballstatus_objects[segment] = Code( + code=np.array(codes["ballstatus"][segment]), + name="ballstatus", + definitions={"D": "Dead", "A": "Alive"}, + framerate=metadata["framerate"], + ) + for team in ["Home", "Away", "Ball"]: + xy_objects[segment][team] = XY( + xy=xydata[team][segment], framerate=metadata["framerate"] + ) + teamsheets = { + "Home": teamsheet_home, + "Away": teamsheet_away, + } + # pack objects data_objects = ( - home_ht1, - home_ht2, - away_ht1, - away_ht2, - ball_ht1, - ball_ht2, - possession_ht1, - possession_ht2, - ballstatus_ht1, - ballstatus_ht2, + xy_objects, + possession_objects, + ballstatus_objects, + teamsheets, pitch, - teamsheet_home, - teamsheet_away, ) return data_objects diff --git a/tests/test_io/test_datasets.py b/tests/test_io/test_datasets.py index 24cd584a..cb1f288e 100644 --- a/tests/test_io/test_datasets.py +++ b/tests/test_io/test_datasets.py @@ -25,17 +25,15 @@ def test_eigd_transform( def test_statsbomb_get() -> None: dataset = StatsBombOpenDataset() - data = dataset.get( + events, teamsheets = dataset.get( "Champions League", "2004/2005", "AC Milan vs. Liverpool", ) - assert isinstance(data[0], Events) - assert isinstance(data[1], Events) - assert isinstance(data[2], Events) - assert isinstance(data[3], Events) - assert isinstance(data[4], Teamsheet) - assert isinstance(data[5], Teamsheet) + assert isinstance(events["HT1"]["Home"], Events) + assert isinstance(events["HT4"]["Away"], Events) + assert isinstance(teamsheets["Home"], Teamsheet) + assert isinstance(teamsheets["Away"], Teamsheet) # Test get_teamsheet method from StatsBombDataset @@ -77,17 +75,17 @@ def test_statsbomb_get_pass_custom_home_teamsheet() -> None: teamsheets["Away"]["my_col"] = 99 # custom column but not passed to function # call get function with custom teamsheet - data = dataset.get( + events, teamsheets = dataset.get( "Champions League", "2004/2005", "AC Milan vs. Liverpool", teamsheet_home=teamsheets["Home"], ) - assert data[4].teamsheet.at[0, "player"] == "Dida" - assert data[4].teamsheet.at[0, "pID"] == 999999 - assert "custom_col" in data[4].teamsheet.columns - assert "my_col" not in data[5].teamsheet.columns + assert teamsheets["Home"].teamsheet.at[0, "player"] == "Dida" + assert teamsheets["Home"].teamsheet.at[0, "pID"] == 999999 + assert "custom_col" in teamsheets["Home"].teamsheet.columns + assert "my_col" not in teamsheets["Away"].teamsheet.columns # Test passing custom away_teamsheet to get method @@ -108,17 +106,17 @@ def test_statsbomb_get_pass_custom_away_teamsheet() -> None: teamsheets["Away"]["my_col"] = 99 # custom column passed to function # call get function with custom teamsheet - data = dataset.get( + events, teamsheets = dataset.get( "Champions League", "2004/2005", "AC Milan vs. Liverpool", teamsheet_away=teamsheets["Away"], ) - assert data[4].teamsheet.at[0, "player"] != "Dida" - assert data[4].teamsheet.at[0, "pID"] != 999999 - assert "custom_col" not in data[4].teamsheet.columns - assert "my_col" in data[5].teamsheet.columns + assert teamsheets["Home"].teamsheet.at[0, "player"] != "Dida" + assert teamsheets["Home"].teamsheet.at[0, "pID"] != 999999 + assert "custom_col" not in teamsheets["Home"].teamsheet.columns + assert "my_col" in teamsheets["Away"].teamsheet.columns # Test passing custom away_teamsheet to get method @@ -139,7 +137,7 @@ def test_statsbomb_get_pass_custom_teamsheets() -> None: teamsheets["Away"]["my_col"] = 99 # custom column passed to function # call get function with custom teamsheet - data = dataset.get( + events, teamsheets = dataset.get( "Champions League", "2004/2005", "AC Milan vs. Liverpool", @@ -147,7 +145,7 @@ def test_statsbomb_get_pass_custom_teamsheets() -> None: teamsheet_away=teamsheets["Away"], ) - assert data[4].teamsheet.at[0, "player"] == "Dida" - assert data[4].teamsheet.at[0, "pID"] == 999999 - assert "custom_col" in data[4].teamsheet.columns - assert "my_col" in data[5].teamsheet.columns + assert teamsheets["Home"].teamsheet.at[0, "player"] == "Dida" + assert teamsheets["Home"].teamsheet.at[0, "pID"] == 999999 + assert "custom_col" in teamsheets["Home"].teamsheet.columns + assert "my_col" in teamsheets["Away"].teamsheet.columns From b9992c766e1a41528f83c904ab3893cf1e125698 Mon Sep 17 00:00:00 2001 From: draabe Date: Fri, 3 Feb 2023 11:59:58 +0100 Subject: [PATCH 20/25] fix: io refactor fixes (#117) * fix: typing typo * fix: cases where stadium is missing in StatsBomb dataset (#118) * fix: statsbomb tutorial (#119) * docs: fixed bug in the statsbomb tutorial * docs: change index names * fix: statsperform parser typing (#120) * fix: pass keyword sport when creating statsperform pitch * fix: typo in docstring * fix: tracab pitch generation * fix: trajectory plotting indexing * fix: xID definition indexing * fix: add teamsheet as package level object * fix: docstrings of Statsperform URL functions (#121) * fix: cases where stadium is missing in StatsBomb dataset * fix: typo in docstrings * fix: dfl docstrings (#122) * fix: statsperform docstrings (#123) --------- Co-authored-by: hbiermann95 <58177509+hbiermann95@users.noreply.github.com> --- docs/source/guides/tutorial_matchsheets.rst | 63 ++++++++++----------- floodlight/__init__.py | 2 + floodlight/core/definitions.py | 8 +-- floodlight/core/pitch.py | 1 + floodlight/io/datasets.py | 8 ++- floodlight/io/dfl.py | 11 +++- floodlight/io/statsperform.py | 22 +++---- floodlight/io/tracab.py | 4 +- floodlight/vis/positions.py | 5 +- 9 files changed, 66 insertions(+), 58 deletions(-) diff --git a/docs/source/guides/tutorial_matchsheets.rst b/docs/source/guides/tutorial_matchsheets.rst index 6e4ee4b0..800e6142 100644 --- a/docs/source/guides/tutorial_matchsheets.rst +++ b/docs/source/guides/tutorial_matchsheets.rst @@ -125,30 +125,31 @@ Next, we deal with the previously mentioned StatsBomb360 position data. The appr def get_xy_data(goal): # read positions at event - freeze_frame = ast.literal_eval(goal["qualifier"])["360_freeze_frame"] - + qualifier = ast.literal_eval(goal["qualifier"]) + freeze_frame = None + if "360_freeze_frame" in qualifier: + freeze_frame = qualifier["360_freeze_frame"] # set "to-location" to goal center if not available at_x, at_y, to_x, to_y = goal["at_x"], goal["at_y"], goal["to_x"], goal["to_y"] if np.isnan(goal["to_x"]): to_x = 120 if np.isnan(goal["to_y"]): to_y = 40 - - # create arrays xy_ball = np.array([[at_x, at_y], [to_x, to_y]]) - xy_off = np.array( - [player["location"] for player in freeze_frame if player["teammate"]] - ) - xy_def = np.array( - [player["location"] for player in freeze_frame if not player["teammate"]] - ) - - # reshape arrays to represent a single frame - xy_off = xy_off.flatten() - xy_off = xy_off.reshape((1, len(xy_off))) - xy_def = xy_def.flatten() - xy_def = xy_def.reshape((1, len(xy_def))) - + xy_off, xy_def = None, None + if freeze_frame is not None: + # create arrays + xy_off = np.array( + [player["location"] for player in freeze_frame if player["teammate"]] + ) + xy_def = np.array( + [player["location"] for player in freeze_frame if not player["teammate"]] + ) + # reshape arrays to represent a single frame + xy_off = xy_off.flatten() + xy_off = xy_off.reshape((1, len(xy_off))) + xy_def = xy_def.flatten() + xy_def = xy_def.reshape((1, len(xy_def))) # return XY objects return XY(xy=xy_ball), XY(xy=xy_off), XY(xy=xy_def) @@ -160,20 +161,16 @@ Now we can use the predefined functions to create a plot of a single goal (e.g. .. code-block:: python import matplotlib.pyplot as plt - goal = all_goals.loc[all_goals.index[-1]] - fig, ax = plt.subplots() scoring_team, scoring_player, xG = get_goal_info(goal) ax.set_title( f"Goal for {scoring_team} by {str(scoring_player)} " f"|| xG: {round(xG, 2) if xG is not None else 'NA'}", - fontdict={'size': 9} + fontdict={"size": 9}, ) pitch.plot(ax=ax) xy_ball, xy_off, xy_def = get_xy_data(goal) - xy_off.plot(t=0, ax=ax, color="red") - xy_def.plot(t=0, ax=ax, color="white") xy_ball.plot( t=(0, 2), plot_type="trajectories", @@ -185,6 +182,9 @@ Now we can use the predefined functions to create a plot of a single goal (e.g. markevery=[0], ax=ax, ) + if xy_off.xy is not None and xy_def.xy is not None: + xy_off.plot(t=0, ax=ax, color="red") + xy_def.plot(t=0, ax=ax, color="white") .. image:: ../_img/tutorial_matchsheets_singlegoal.png @@ -216,11 +216,9 @@ Now we create the match sheet by iterating over all goals and updating the respe row, col, home_score, away_score = 0, 0, 0, 0 colors = {"Croatia": "white", "Spain": "red"} - - for i in all_goals.index: - + for idx in all_goals.index: # display meta information - scoring_team, scoring_player, xG = get_goal_info(all_goals.loc[i]) + scoring_team, scoring_player, xG = get_goal_info(all_goals.loc[idx]) if scoring_team == "Croatia": conceding_team = "Spain" home_score += 1 @@ -232,11 +230,10 @@ Now we create the match sheet by iterating over all goals and updating the respe f"|| xG: {round(xG, 2) if xG is not None else 'NA'}", fontdict={"size": 10}, ) - # get position data - xy_ball, xy_off, xy_def = get_xy_data(all_goals.loc[i]) + xy_ball, xy_off, xy_def = get_xy_data(all_goals.loc[idx]) # rotate position data towards left goal for Spain - if scoring_team == "Spain": + if scoring_team == "Spain" and xy_off.xy is not None and xy_def.xy is not None: xy_off.rotate(180) xy_off.translate((pitch.xlim[1], pitch.ylim[1])) xy_def.rotate(180) @@ -245,8 +242,6 @@ Now we create the match sheet by iterating over all goals and updating the respe xy_ball.translate((pitch.xlim[1], pitch.ylim[1])) # plot pitch and position data pitch.plot(ax=ax[row, col]) - xy_off.plot(t=0, ax=ax[row, col], color=colors[scoring_team]) - xy_def.plot(t=0, ax=ax[row, col], color=colors[conceding_team]) xy_ball.plot( t=(0, 2), plot_type="trajectories", @@ -258,14 +253,16 @@ Now we create the match sheet by iterating over all goals and updating the respe markevery=[0], ax=ax[row, col], ) - + if xy_off.xy is not None and xy_def.xy is not None: + xy_off.plot(t=0, ax=ax[row, col], color=colors[scoring_team]) + xy_def.plot(t=0, ax=ax[row, col], color=colors[conceding_team]) # update grid position col += 1 if col == cols: col = 0 row += 1 -The result should look like below. However, keep in mind that the StatsBomb360 data does only contain the positions from some players at the event (extracted from the camera angle). That's why you can not see the player responsible for the own goal in the first plot. +The result should look similar to the image below. However, due to an update in the StatsBomb dataset the FreezeFrame for the OwnGoal is no longer available. Thus, there will only be the trajectory of the ball in this plot. Also, keep in mind that the StatsBomb360 data does only contain the positions from some players at the event (extracted from the camera angle). That's why you can not see the player responsible for the own goal in the first plot. .. image:: ../_img/tutorial_matchsheets_allgoals.png diff --git a/floodlight/__init__.py b/floodlight/__init__.py index 1690e23b..195d095d 100644 --- a/floodlight/__init__.py +++ b/floodlight/__init__.py @@ -3,6 +3,7 @@ from .core.pitch import Pitch from .core.xy import XY from .core.property import DyadicProperty, PlayerProperty, TeamProperty +from .core.teamsheet import Teamsheet __all__ = [ "__version__", @@ -13,6 +14,7 @@ "Pitch", "PlayerProperty", "TeamProperty", + "Teamsheet", "XY", ] diff --git a/floodlight/core/definitions.py b/floodlight/core/definitions.py index c50168b0..c5f946a0 100644 --- a/floodlight/core/definitions.py +++ b/floodlight/core/definitions.py @@ -41,11 +41,11 @@ }, "xID": { "definition": "Index ID - a players index in the list of all players of a team" - "for a given match (starts counting at 1). This is primarily used" - " for locating players data in XY objects, but can also be " - "helpful iterating or displaying all players of a team", + "for a given match. This is primarily used for locating players " + "data in XY objects, but can also be helpful iterating or " + "displaying all players of a team", "dtypes": [int], - "value_range": [1, np.inf] + "value_range": [0, np.inf] }, "tID": { "definition": "Team ID - unique number or string for team identification ", diff --git a/floodlight/core/pitch.py b/floodlight/core/pitch.py index 5fd26c17..43be916d 100644 --- a/floodlight/core/pitch.py +++ b/floodlight/core/pitch.py @@ -168,6 +168,7 @@ def from_template(cls, template_name: str, **kwargs): boundaries="flexible", length=kwargs.get("length"), width=kwargs.get("width"), + sport=kwargs.get("sport"), ) elif template_name == "statsperform_tracking": if "length" not in kwargs or "width" not in kwargs: diff --git a/floodlight/io/datasets.py b/floodlight/io/datasets.py index 43051b19..4915e796 100644 --- a/floodlight/io/datasets.py +++ b/floodlight/io/datasets.py @@ -479,8 +479,12 @@ def available_matches(self) -> pd.DataFrame: f"vs. " f"{info['away_team']['away_team_name']}", "score": f"{info['home_score']}:{info['away_score']}", - "stadium": info["stadium"]["name"], - "country": info["stadium"]["country"]["name"], + "stadium": info["stadium"]["name"] + if "stadium" in info + else None, + "country": info["stadium"]["country"]["name"] + if "stadium" in info + else None, "sex": "f" if competition in ["FA Women's Super League", "NWSL", "Women's World Cup"] diff --git a/floodlight/io/dfl.py b/floodlight/io/dfl.py index a4ef2a7e..5fcf8650 100644 --- a/floodlight/io/dfl.py +++ b/floodlight/io/dfl.py @@ -400,8 +400,10 @@ def read_event_data_xml( ``events_objects`` is a nested dictionary containing ``Events`` objects for each team and segment of the form ``events_objects[segment][team] = Events``. For a typical league match with two halves and teams this dictionary looks like: - ``{'HT1': {'Home': Events, 'Away': Events}, 'HT2': {'Home': Events, 'Away': - Events}}``. + ``{ + 'firstHalf': {'Home': Events, 'Away': Events}, + 'secondHalf': {'Home': Events,'Away': Events} + }``. ``teamsheets`` is a dictionary containing ``Teamsheet`` objects for each team of the form ``teamsheets[team] = Teamsheet``. @@ -670,7 +672,10 @@ def read_position_data_xml( ``xy_objects`` is a nested dictionary containing ``XY`` objects for each team and segment of the form ``xy_objects[segment][team] = XY``. For a typical league match with two halves and teams this dictionary looks like: - ``{'HT1': {'Home': XY, 'Away': XY}, 'HT2': {'Home': XY, 'Away': XY}}``. + ``{ + 'firstHalf': {'Home': XY, 'Away': XY}, + 'secondHalf': {'Home': XY, 'Away': XY} + }``. ``possession_objects`` is a dictionary containing ``Code`` objects with possession information (home or away) for each segment of the form diff --git a/floodlight/io/statsperform.py b/floodlight/io/statsperform.py index bf930a8e..15822ade 100644 --- a/floodlight/io/statsperform.py +++ b/floodlight/io/statsperform.py @@ -230,8 +230,8 @@ def read_open_event_data_csv( ``events_objects`` is a nested dictionary containing ``Events`` objects for each team and segment of the form ``events_objects[segment][team] = Events``. For a typical league match with two halves and teams this dictionary looks like: - ``{'HT1': {'Home': Events, 'Away': Events}, 'HT2': {'Home': Events, 'Away': - Events}}``. + ``{'1': {'Home': Events, 'Away': Events}, '2': {'Home': Events, 'Away': Events} + }``. ``teamsheets`` is a dictionary containing ``Teamsheet`` objects for each team of the form ``teamsheets[team] = Teamsheet``. @@ -316,7 +316,7 @@ def read_open_position_data_csv( filepath_position: Union[str, Path], teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, -) -> Tuple[Dict[str, Dict[str, XY]], Dict[str, Code], Dict[str, Teamsheet], Pitch]: +) -> Tuple[Dict[int, Dict[str, XY]], Dict[int, Code], Dict[str, Teamsheet], Pitch]: """Parses an open StatsPerform CSV file and extract position data and possession codes as well as teamsheets and pitch information. @@ -341,7 +341,7 @@ def read_open_position_data_csv( Returns ------- - data_objects: Tuple[Dict[str, Dict[str, XY]], Dict[str, Code], \ + data_objects: Tuple[Dict[int, Dict[str, XY]], Dict[int, Code], \ Dict[str, Teamsheet], Pitch] Tuple of (nested) floodlight core objects with shape (xy_objects, possession_objects, teamsheets, pitch). @@ -349,7 +349,7 @@ def read_open_position_data_csv( ``xy_objects`` is a nested dictionary containing ``XY`` objects for each team and segment of the form ``xy_objects[segment][team] = XY``. For a typical league match with two halves and teams this dictionary looks like: - ``{'HT1': {'Home': XY, 'Away': XY}, 'HT2': {'Home': XY, 'Away': XY}}``. + ``{0: {'Home': XY, 'Away': XY}, 1: {'Home': XY, 'Away': XY}}``. ``possession_objects`` is a dictionary containing ``Code`` objects with possession information (home or away) for each segment of the form @@ -1011,7 +1011,7 @@ def read_position_data_txt( filepath_position: Union[str, Path], teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, -) -> Tuple[Dict[str, Dict[str, XY]], Dict[str, Teamsheet]]: +) -> Tuple[Dict[int, Dict[str, XY]], Dict[int, Teamsheet]]: """Parses a StatsPerform TXT file and extracts position data and teamsheets. Internal StatsPerform position data is stored as a TXT file containing all @@ -1038,14 +1038,14 @@ def read_position_data_txt( Returns ------- - data_objects: Tuple[Dict[str, Dict[str, XY]], Dict[str, Teamsheet]] + data_objects: Tuple[Dict[int, Dict[str, XY]], Dict[int, Teamsheet]] Tuple of (nested) floodlight core objects with shape (xy_objects, teamsheets). ``xy_objects`` is a nested dictionary containing ``XY`` objects for each team and segment of the form ``xy_objects[segment][team] = XY``. For a typical league match with two halves and teams this dictionary looks like: - ``{'HT1': {'Home': XY, 'Away': XY}, 'HT2': {'Home': XY, 'Away': XY}}``. + ``{1: {'Home': XY, 'Away': XY}, 2: {'Home': XY, 'Away': XY}}``. ``teamsheets`` is a dictionary containing ``Teamsheet`` objects for each team of the form ``teamsheets[team] = Teamsheet``. @@ -1237,7 +1237,7 @@ def read_position_data_from_url( url: str, teamsheet_home: Teamsheet = None, teamsheet_away: Teamsheet = None, -) -> Tuple[Dict[str, Dict[str, XY]], Dict[str, Teamsheet]]: +) -> Tuple[Dict[int, Dict[str, XY]], Dict[int, Teamsheet]]: """Reads a URL from the StatsPerform API (StatsEdgeViewer) containing a position data TXT file and extracts position data and teamsheets. @@ -1260,14 +1260,14 @@ def read_position_data_from_url( Returns ------- - data_objects: Tuple[Dict[str, Dict[str, XY]], Dict[str, Teamsheet]] + data_objects: Tuple[Dict[int, Dict[str, XY]], Dict[int, Teamsheet]] Tuple of (nested) floodlight core objects with shape (xy_objects, teamsheets). ``xy_objects`` is a nested dictionary containing ``XY`` objects for each team and segment of the form ``xy_objects[segment][team] = XY``. For a typical league match with two halves and teams this dictionary looks like: - ``{'HT1': {'Home': XY, 'Away': XY}, 'HT2': {'Home': XY, 'Away': XY}}``. + ``{1: {'Home': XY, 'Away': XY}, 2: {'Home': XY, 'Away': XY}}``. ``teamsheets`` is a dictionary containing ``Teamsheet`` objects for each team of the form ``teamsheets[team] = Teamsheet``. diff --git a/floodlight/io/tracab.py b/floodlight/io/tracab.py index 60e7d23f..5e0900da 100644 --- a/floodlight/io/tracab.py +++ b/floodlight/io/tracab.py @@ -122,8 +122,8 @@ def _read_metadata_from_json( # create pitch pitch = Pitch.from_template( "tracab", - length=length, - width=width, + length=metadata["length"], + width=metadata["width"], sport="football", ) diff --git a/floodlight/vis/positions.py b/floodlight/vis/positions.py index e37fcc3f..d6f88f02 100644 --- a/floodlight/vis/positions.py +++ b/floodlight/vis/positions.py @@ -195,9 +195,8 @@ def plot_trajectories( # iterating over every object (for instance players) in the XY.xy array and plot the # trajectories for the given range of frames for i in range(0, xy.N): - - x = xy.xy[start_frame:end_frame, i] - y = xy.xy[start_frame:end_frame, i + 1] + x = xy.x[start_frame:end_frame, i] + y = xy.y[start_frame:end_frame, i] ax.plot(x, y, color=color, zorder=zorder, linewidth=linewidth, **kwargs) return ax From e1c249062bc530aa4ed532f95d9033edb031eba5 Mon Sep 17 00:00:00 2001 From: draabe Date: Fri, 3 Feb 2023 19:34:27 +0100 Subject: [PATCH 21/25] feat: add discretized voronoi model (#124) * feat: add discretized voronoi model * test: tests for discretized voronoi model * docs: documentation for discretized voronoi model * test: mark plotting tests as such * fix: exclude W503 from flake (see https://github.com/psf/black/issues/52) --- docs/source/_img/sample_dvm_plot_hex.png | Bin 0 -> 330380 bytes docs/source/_img/sample_dvm_plot_hex_mesh.png | Bin 0 -> 496225 bytes docs/source/_img/sample_dvm_plot_square.png | Bin 0 -> 312550 bytes docs/source/modules/models/models.rst | 13 + docs/source/modules/models/space.rst | 6 + floodlight/models/space.py | 457 ++++++++++++ setup.cfg | 2 +- tests/test_models/conftest.py | 26 +- tests/test_models/test_space.py | 661 ++++++++++++++++++ 9 files changed, 1163 insertions(+), 2 deletions(-) create mode 100644 docs/source/_img/sample_dvm_plot_hex.png create mode 100644 docs/source/_img/sample_dvm_plot_hex_mesh.png create mode 100644 docs/source/_img/sample_dvm_plot_square.png create mode 100644 docs/source/modules/models/space.rst create mode 100644 floodlight/models/space.py create mode 100644 tests/test_models/test_space.py diff --git a/docs/source/_img/sample_dvm_plot_hex.png b/docs/source/_img/sample_dvm_plot_hex.png new file mode 100644 index 0000000000000000000000000000000000000000..3bbb5fbce87b8478e511385e38eac908a6d08ed8 GIT binary patch literal 330380 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%0AHa%@w+(DTEjZ;Myn! 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%0D?~k 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

U`m4=gql|_ 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

O52r)6p#NFD$ezFWtE?9UfiHB%FFi$R{Fq9A=|r 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 literal 0 HcmV?d00001 diff --git a/docs/source/_img/sample_dvm_plot_hex_mesh.png b/docs/source/_img/sample_dvm_plot_hex_mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..29301ade7eec6e11f0214c059caccee1e30c66ac GIT binary patch literal 496225 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


QBSn@d1?-nEVm=A7q>yQzs_lj?%wz_+L3fRyVuz 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%0AY;+1y`rM7lNC3GyQ?R4{doyXSLmpp$xC-PKb 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

Uhj%w$GtTn=F&!% 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%0Ddm!)5zcPdvYm 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 literal 0 HcmV?d00001 diff --git a/docs/source/modules/models/models.rst b/docs/source/modules/models/models.rst index 24263fe0..4b49c29e 100644 --- a/docs/source/modules/models/models.rst +++ b/docs/source/modules/models/models.rst @@ -11,6 +11,7 @@ Collection of data models grouped by category. Each submodule contains model cla geometry kinematics kinetics + space .. rubric:: All Available Models @@ -24,6 +25,7 @@ Collection of data models grouped by category. Each submodule contains model cla kinematics.AccelerationModel geometry.CentroidModel kinetics.MetabolicPowerModel + space.DiscreteVoronoiModel For quick reference, the following computations are available after calling the respective model's ``.fit(...)``-method @@ -61,3 +63,14 @@ For quick reference, the following computations are available after calling the MetabolicPowerModel.cumulative_metabolic_power MetabolicPowerModel.equivalent_distance MetabolicPowerModel.cumulative_equivalent_distance + +.. rubric:: Space + +.. currentmodule:: floodlight.models.space +.. autosummary:: + :nosignatures: + + DiscreteVoronoiModel.player_controls + DiscreteVoronoiModel.team_controls + DiscreteVoronoiModel.plot + DiscreteVoronoiModel.plot_mesh diff --git a/docs/source/modules/models/space.rst b/docs/source/modules/models/space.rst new file mode 100644 index 00000000..9d26d340 --- /dev/null +++ b/docs/source/modules/models/space.rst @@ -0,0 +1,6 @@ +======================= +floodlight.models.space +======================= + +.. automodule:: floodlight.models.space + :members: diff --git a/floodlight/models/space.py b/floodlight/models/space.py new file mode 100644 index 00000000..7843abca --- /dev/null +++ b/floodlight/models/space.py @@ -0,0 +1,457 @@ +from typing import Tuple + +import numpy as np +import matplotlib +import matplotlib.pyplot as plt +from matplotlib.patches import RegularPolygon +from scipy.spatial.distance import cdist + +from floodlight import XY, Pitch, TeamProperty, PlayerProperty +from floodlight.models.base import BaseModel, requires_fit + + +class DiscreteVoronoiModel(BaseModel): + """Calculates discretized versions of the Voronoi tessellation commonly used to + assess space control. + + Upon instantiation, this model creates a mesh grid that spans the entire pitch with + a fixed number of mesh points. When calling the + :func:`~DiscreteVoronoiModel.fit`-method, closest players to the respective mesh + points are evaluated and their control assigned to players. Thus, cumulative + controls and controlled areas are calculated on a discretization of the pitch. The + following calculations can subsequently be queried by calling the corresponding + methods: + + - Player Space Control --> :func:`~DiscreteVoronoiModel.player_controls` + - Team Space Control --> :func:`~DiscreteVoronoiModel.team_controls` + + Furthermore, the following plotting methods are available to visualize the model: + + - Plot controlled areas --> :func:`~DiscreteVoronoiModel.plot` + - Plot mesh grid --> :func:`~DiscreteVoronoiModel.plot_mesh` + + Parameters + ---------- + pitch: Pitch + A floodlight Pitch object corresponding to the XY data that will be supplied to + the model. The mesh created during instantiation will span this pitch. + mesh: {'square', 'hexagonal'}, optional + A string indicating the type of mesh that will be generated. 'square' will + generate a grid-like mesh with square cell shapes (default). 'hexagonal' will + generate a mesh with hexagonal cell shapes where mesh points have equidistant + neighbours. + xpoints: int, optional + The number of mesh grid points used in x-direction. Must be in range [10, 1000] + and defaults to 100. The number of messh grid points in y-direction will be + inferred automatically to match the shape of the pitch and produce regular mesh + cell shapes. + + Notes + ----- + The original work by Taki and Hasegawa proposed to use Voronoi tessellations for + assessing player dominant regions [1]_. This approach has later been simplified by + using the Euclidean distance when allocating space to players [2]_ , [3]_. + Instead of computing algebraic Voronoi regions, this model discretizes the problem + by sampling space control on a finite number of mesh points across the pitch. This + runs much faster and can be easier to handle. If an appropriate number of mesh + points is chosen, the resulting error is expected to be negligible given the common + spatial inaccuracies of tracking data as well as variations in moving players' + centers of masses. + + References + ---------- + .. [1] `Taki, T., & Hasegawa, J. (2000). Visualization of dominant region in + team games and its application to teamwork analysis. Proceedings Computer + Graphics International 2000, 227–235. + `_ + .. [2] `Fonseca, S., Milho, J., Travassos, B., & Araújo, D. (2012). Spatial + dynamics of team sports exposed by Voronoi diagrams. Human Movement + Science, 31(6), 1652–1659. `_ + .. [3] `Rein, R., Raabe, D., & Memmert, D. (2017). “Which pass is better?” + Novel approaches to assess passing effectiveness in elite soccer. Human + Movement Science, 55, 172–181. + `_ + + Examples + -------- + >>> import numpy as np + >>> from floodlight import XY, Pitch + >>> from floodlight.models.space import DiscreteVoronoiModel + + >>> # create data and fit model + >>> xy1 = XY(np.array(((10, 10, 20, 80, 30, 40), (10, 10, np.nan, np.nan, 35, 35)))) + >>> xy2 = XY(np.array(((90, 90, 80, 20, 75, 80), (90, 90, 75, 25, 80, 70)))) + >>> pitch = Pitch.from_template("opta", length=105, width=68) + >>> dvm = DiscreteVoronoiModel(pitch) + >>> dvm.fit(xy1, xy2) + + >>> # print player controls [%] for first team + >>> player_control1, player_control2 = dvm.player_controls() + >>> print(player_control1.property) + [[10.63 19.32 21.71] + [10.35 0. 36.56]] + + >>> # print team controls [%] for first team + >>> team_control1, team_control2 = dvm.team_controls() + >>> print(team_control1.property) + [[51.66] + [46.91]] + """ + + def __init__(self, pitch: Pitch, mesh: str = "square", xpoints: int = 100): + super().__init__(pitch) + + # input parameter + self._mesh_type = mesh + self._xpoints = xpoints + + # model parameter + self._meshx_ = None + self._meshy_ = None + self._xpolysize_ = None + self._ypolysize_ = None + self._T_ = None + self._N1_ = None + self._N2_ = None + self._framerate = None + self._cell_controls_ = None + + # checks + valid_mesh_types = ["square", "hexagonal"] + if mesh not in valid_mesh_types: + raise ValueError( + f"Invalid mesh type. Expected one of {valid_mesh_types}, got {mesh}" + ) + if xpoints < 10 or xpoints > 1000: + raise ValueError( + f"Expected xpoints to be in range [10, 1000], got {xpoints}" + ) + + # generate mesh + self._generate_mesh(mesh, xpoints) + + def _generate_mesh(self, mesh: str = "square", xpoints: int = 100) -> None: + """Generates a np.meshgrid for a given mesh type.""" + # param + self._meshx_ = None + self._meshy_ = None + self._xpolysize_ = None + self._ypolysize_ = None + xmin, xmax = self._pitch.xlim + ymin, ymax = self._pitch.ylim + + if mesh == "square": + # determine square size + self._xpolysize_ = (xmax - xmin) / xpoints + self._ypolysize_ = self._xpolysize_ + + # derive number of points in y direction + ypoints = round((ymax - ymin) / self._ypolysize_) + # re-adjust ypolysize for stretching/rounding in y direction + self._ypolysize_ = (ymax - ymin) / ypoints + + # get padding + xpad = self._xpolysize_ * 0.5 + ypad = self._ypolysize_ * 0.5 + + # create unilateral and two-dimensional grid points + x = np.linspace(xmin + xpad, xmax - xpad, xpoints) + y = np.linspace(ymax - ypad, ymin + ypad, ypoints) + self._meshx_, self._meshy_ = np.meshgrid(x, y) + + elif mesh == "hexagonal": + # longitudinal spacing of polygons (minus half polygon that's out of bounds) + xspace = (xmax - xmin) / (xpoints - 0.5) + # hexagon size (= radius of outer circumcircle) + self._xpolysize_ = xspace / np.sqrt(3) + self._ypolysize_ = self._xpolysize_ + # lateral spacing of polygons (by formula) + yspace = self._xpolysize_ * 1.5 + # longitudinal padding, also offset for odd rows of polygons + xpad = xspace * 0.5 + + # derive number of points in y direction + ypoints = round((ymax - ymin) / yspace) + 1 + + # unilateral and two-dimensional grid points + x = np.linspace(xmin, xmax - xpad, xpoints) + y = np.linspace(ymax, ymin, ypoints) + self._meshx_, self._meshy_ = np.meshgrid(x, y) + + # add offset for odd rows + self._meshx_[1::2, :] += xpad + + def _calc_cell_controls(self, xy1: XY, xy2: XY): + """Calculates xID of closest player to each mesh point at each time point and + stores results in self._cell_controls""" + # bin + T = len(xy1) + self._cell_controls_ = np.full( + # shape is: time x (mesh shape) + (T, self._meshx_.shape[0], self._meshx_.shape[1]), + np.nan, + ) + + # loop + for t in range(T): + # stack and reshape player and mesh coordinates to (M x 2) arrays + player_points = np.hstack((xy1.frame(t), xy2.frame(t))).reshape(-1, 2) + mesh_points = np.stack((self._meshx_, self._meshy_), axis=2).reshape(-1, 2) + + # calculate pairwise distances and determine closest player + pairwise_distances = cdist(mesh_points, player_points) + closest_player_index = np.nanargmin(pairwise_distances, axis=1) + self._cell_controls_[t] = closest_player_index.reshape(self._meshx_.shape) + + def fit(self, xy1: XY, xy2: XY): + """Fit the model to the given data and calculate control values for mesh points. + + Parameters + ---------- + xy1: XY + Player spatiotemporal data of the first team. + xy2: XY + Player spatiotemporal data of the second team. + """ + # derive parameters + self._N1_ = xy1.N + self._N2_ = xy2.N + self._T_ = len(xy1) + self._framerate = xy1.framerate + # invoke control calculation + self._calc_cell_controls(xy1, xy2) + + @requires_fit + def player_controls(self) -> Tuple[PlayerProperty, PlayerProperty]: + """Returns the percentage of mesh points controlled by each player of the first + and second team. + + Returns + ------- + player_controls: Tuple[PlayerProperty, PlayerProperty] + One Property object for each team (corresponding to the fitted xy1 and xy2) + of shape (n_frames x n_players), respectively. Property objets contain the + percentage of points controlled by each player on the pitch. + """ + # infer number of mesh cells + number_of_cells = self._cell_controls_.shape[1] * self._cell_controls_.shape[2] + + # xID ranges for both team's players if stacked together + range1 = range(self._N1_) + range2 = range(self._N1_, self._N1_ + self._N2_) + + # for each xID count number of cell controls in each mesh through time + counts1 = [np.sum(self._cell_controls_ == xID, axis=(1, 2)) for xID in range1] + counts2 = [np.sum(self._cell_controls_ == xID, axis=(1, 2)) for xID in range2] + + # transform to arrays and normalize + counts1 = np.array(counts1).transpose() + counts2 = np.array(counts2).transpose() + + # transform to percentages + percentages1 = np.round(100 * counts1 / number_of_cells, 2) + percentages2 = np.round(100 * counts2 / number_of_cells, 2) + + # create objects + property1 = PlayerProperty( + property=percentages1, name="space control", framerate=self._framerate + ) + property2 = PlayerProperty( + property=percentages2, name="space control", framerate=self._framerate + ) + + return property1, property2 + + @requires_fit + def team_controls(self) -> Tuple[TeamProperty, TeamProperty]: + """Returns the percentage of mesh points controlled by the first and second + team. + + Returns + ------- + team_controls: Tuple[TeamProperty, TeamProperty] + One Property object for each team (corresponding to the fitted xy1 and xy2) + of shape (n_frames x 1), respectively. Property objets contain the + percentage of points controlled by each team on the pitch. + """ + # infer number of mesh cells + number_of_cells = self._cell_controls_.shape[1] * self._cell_controls_.shape[2] + + # count number of cell controls for a team in each mesh through time + counts1 = np.sum(self._cell_controls_ < self._N1_, axis=(1, 2)) + counts2 = np.sum(self._cell_controls_ >= self._N1_, axis=(1, 2)) + + # transform to arrays and normalize + counts1 = np.array(counts1).reshape(-1, 1) + counts2 = np.array(counts2).reshape(-1, 1) + + # transform to percentages + percentages1 = np.round(100 * counts1 / number_of_cells, 2) + percentages2 = np.round(100 * counts2 / number_of_cells, 2) + + # create objects + property1 = TeamProperty( + property=percentages1, name="space control", framerate=self._framerate + ) + property2 = TeamProperty( + property=percentages2, name="space control", framerate=self._framerate + ) + + return property1, property2 + + @requires_fit + def plot( + self, + t: int = 0, + team_colors: Tuple[str, str] = ("red", "blue"), + ax: matplotlib.axes = None, + **kwargs, + ) -> matplotlib.axes: + """Plots the fitted mesh grid colored by team controls for a given time point + on a matplotlib axes. + + Parameters + ---------- + t: int, optional + Frame for which controls are plotted. Defaults to 0. + team_colors: Tuple[str, str], optional + Tuple of two colors in a format accepted by matplotlib that is used to + color team specific control areas. Defaults to ('red', 'blue'). + ax: matplotlib.axes, optional + Axes from matplotlib library to plot on. Defaults to None. + kwargs: + Optional keyworded arguments e.g. {'zorder', 'ec', 'alpha'} which can be + used for the plot functions from matplotlib. The kwargs are only passed to + all the plot functions of matplotlib. If not given default values are used. + + Returns + ------- + axes: matplotlib.axes + Axes from matplotlib library with plot. + + Notes + ----- + The kwargs are only passed to the plot functions of matplotlib. To customize the + plots have a look at + `matplotlib + `_. + + Examples + -------- + Given a DiscreteVoronoiModel that has already been fitted: + + >>> # fitted_dvm_model has square mesh + >>> ax = pitch.plot(color_scheme="bw") + >>> fitted_dvm_model.plot(ax=ax) + + .. image:: ../../_img/sample_dvm_plot_square.png + + >>> # fitted_dvm_model has hexagonal mesh + >>> ax = pitch.plot(color_scheme="bw") + >>> fitted_dvm_model.plot(ax=ax) + + .. image:: ../../_img/sample_dvm_plot_hex.png + """ + # get ax + ax = ax or plt.subplots()[1] + + # get colors and construct team color vector + team_color1, team_color2 = team_colors + color_vector = [team_color1] * self._N1_ + [team_color2] * self._N2_ + + # call plot by mesh type + if self._mesh_type == "square": + ax = self._plot_square(t, color_vector, ax=ax, **kwargs) + elif self._mesh_type == "hexagonal": + ax = self._plot_hexagonal(t, color_vector, ax=ax, **kwargs) + + return ax + + def _plot_square( + self, + t: int = 0, + team_colors: Tuple[str, str] = None, + ax: matplotlib.axes = None, + **kwargs, + ) -> matplotlib.axes: + """Plots square mesh grid controls in given color.""" + # handle kwargs + ec = kwargs.pop("ec", "grey") + alpha = kwargs.pop("alpha", 0.3) + + # offset to shift rectangle position from bottom left corner to center + xoffset = -(self._xpolysize_ * 0.5) + yoffset = -(self._ypolysize_ * 0.5) + # loop through mesh points and plot Rectangle patch + for i, j in np.ndindex(self._meshx_.shape): + poly = plt.Rectangle( + (self._meshx_[i, j] + xoffset, self._meshy_[i, j] + yoffset), + width=self._xpolysize_, + height=self._ypolysize_, + fc=team_colors[int(self._cell_controls_[t, i, j])], + ec=ec, + alpha=alpha, + **kwargs, + ) + ax.add_patch(poly) + + return ax + + def _plot_hexagonal( + self, + t: int = 0, + team_colors: Tuple[str, str] = None, + ax: matplotlib.axes = None, + **kwargs, + ) -> matplotlib.axes: + """Plots hexagonal mesh grid controls in given color.""" + # handle kwargs + ec = kwargs.pop("ec", "grey") + alpha = kwargs.pop("alpha", 0.3) + + # hexagons are regular polygons with 6 vertices + n_vertices = 6 + # loop through mesh points and plot RegularPolygon patch + for (i, j), x in np.ndenumerate(self._meshx_): + poly = RegularPolygon( + (x, self._meshy_[i, j]), + numVertices=n_vertices, + radius=self._xpolysize_, + fc=team_colors[int(self._cell_controls_[t, i, j])], + ec=ec, + alpha=alpha, + **kwargs, + ) + ax.add_patch(poly) + + return ax + + def plot_mesh(self, ax: matplotlib.axes = None) -> matplotlib.axes: + """Plots the generated mesh on a matplotlib.axes. + + Parameters + ---------- + ax: matplotlib.axes, optional + Matplotlib axes on which the mesh points are plotted. If ax is None, a + default-sized matplotlib.axes object is created. + + Returns + ------- + axes: matplotlib.axes + Matplotlib axes on which the mesh points are plotted. + + Examples + -------- + Given a DiscreteVoronoiModel that has already been fitted: + + >>> ax = pitch.plot(color_scheme="bw") + >>> fitted_dvm_model.plot_mesh(ax=ax) + + .. image:: ../../_img/sample_dvm_plot_hex_mesh.png + """ + # get ax + ax = ax or plt.subplots()[1] + # plot mesh + ax.plot(self._meshx_, self._meshy_, "ok", markersize=0.5) + + return ax diff --git a/setup.cfg b/setup.cfg index 5633218f..23700a87 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [flake8] -extend-ignore = E203 +extend-ignore = E203, W503 exclude = .git .github diff --git a/tests/test_models/conftest.py b/tests/test_models/conftest.py index 49b67b3f..2d8b7dce 100644 --- a/tests/test_models/conftest.py +++ b/tests/test_models/conftest.py @@ -61,5 +61,29 @@ def example_equivalent_mass() -> np.ndarray: @pytest.fixture() def example_pitch_dfl(): - pitch = Pitch.from_template("dfl", length=100, width=50) + pitch = Pitch.from_template("dfl", length=100, width=50, sport="football") return pitch + + +@pytest.fixture() +def example_xy_objects_space_control() -> XY: + xy1 = XY( + xy=np.array( + ( + (-30, 0, 0, 0, 0, 10), + (-31, 0, 0, 0, 1, 11), + ) + ), + framerate=20, + ) + xy2 = XY( + xy=np.array( + ( + (30, 0, 0, 0, 4, -10), + (31, 0, np.nan, np.nan, 5, -11), + ) + ), + framerate=20, + ) + + return xy1, xy2 diff --git a/tests/test_models/test_space.py b/tests/test_models/test_space.py new file mode 100644 index 00000000..c2b47511 --- /dev/null +++ b/tests/test_models/test_space.py @@ -0,0 +1,661 @@ +import pytest +import numpy as np +import matplotlib +import matplotlib.pyplot as plt + +from floodlight.core.pitch import Pitch +from floodlight.models.space import DiscreteVoronoiModel + + +# tests for DiscreteVoronoiModel (dvm) +@pytest.mark.unit +def test_dvm_constructor(example_pitch_dfl) -> None: + # create sample pitch + pitch = example_pitch_dfl + + # trigger constructor checks + with pytest.raises(ValueError): + model = DiscreteVoronoiModel(pitch, mesh="foo") + with pytest.raises(ValueError): + model = DiscreteVoronoiModel(pitch, xpoints=9) + with pytest.raises(ValueError): + model = DiscreteVoronoiModel(pitch, xpoints=1001) + + # check correct executing of post_init + model = DiscreteVoronoiModel(pitch, xpoints=10) + assert not model.is_fitted + assert model._meshx_ is not None + assert model._meshy_ is not None + + +# test mesh generation method with different mesh types +@pytest.mark.unit +@pytest.mark.filterwarnings("ignore: Model initialized with non-metrical pitch.") +def test_generate_mesh_square() -> None: + xpoints = 10 + pitch_opta = Pitch.from_template("opta", sport="football", length=109, width=69) + pitch_statsbomb = Pitch.from_template( + "statsbomb", sport="football", length=109, width=69 + ) + pitch_dfl = Pitch.from_template("dfl", sport="football", length=109, width=69) + pitch_tracab = Pitch.from_template("tracab", sport="football", length=109, width=69) + pitch_statsperform = Pitch.from_template( + "statsperform_tracking", sport="football", length=109, width=69 + ) + + # Opta + model = DiscreteVoronoiModel(pitch_opta, mesh="square", xpoints=xpoints) + assert np.allclose( + np.array( + [[5.0, 15.0, 25.0, 35.0, 45.0, 55.0, 65.0, 75.0, 85.0, 95.0]] + * model._meshx_.shape[0] + ), + model._meshx_, + ) + assert np.allclose( + np.array( + [[95.0, 85.0, 75.0, 65.0, 55.0, 45.0, 35.0, 25.0, 15.0, 5.0]] + * model._meshy_.shape[1] + ).transpose(), + model._meshy_, + ) + # StatsBomb + model = DiscreteVoronoiModel(pitch_statsbomb, mesh="square", xpoints=xpoints) + assert np.allclose( + np.array( + [[6.0, 18.0, 30.0, 42.0, 54.0, 66.0, 78.0, 90.0, 102.0, 114.0]] + * model._meshx_.shape[0] + ), + model._meshx_, + ) + assert np.allclose( + np.array( + [ + [ + 74.28571429, + 62.85714286, + 51.42857143, + 40.0, + 28.57142857, + 17.14285714, + 5.71428571, + ] + ] + * model._meshy_.shape[1] + ).transpose(), + model._meshy_, + ) + # DFL + model = DiscreteVoronoiModel(pitch_dfl, mesh="square", xpoints=xpoints) + assert np.allclose( + np.array( + [[-49.05, -38.15, -27.25, -16.35, -5.45, 5.45, 16.35, 27.25, 38.15, 49.05]] + * model._meshx_.shape[0] + ), + model._meshx_, + ) + assert np.allclose( + np.array( + [[28.75, 17.25, 5.75, -5.75, -17.25, -28.75]] * model._meshy_.shape[1] + ).transpose(), + model._meshy_, + ) + # Tracab + model = DiscreteVoronoiModel(pitch_tracab, mesh="square", xpoints=xpoints) + assert np.allclose( + np.array( + [ + [ + -4905.0, + -3815.0, + -2725.0, + -1635.0, + -545.0, + 545.0, + 1635.0, + 2725.0, + 3815.0, + 4905.0, + ] + ] + * model._meshx_.shape[0] + ), + model._meshx_, + ) + assert np.allclose( + np.array( + [[2875.0, 1725.0, 575.0, -575.0, -1725.0, -2875.0]] * model._meshy_.shape[1] + ).transpose(), + model._meshy_, + ) + # Statsperform + model = DiscreteVoronoiModel(pitch_statsperform, mesh="square", xpoints=xpoints) + assert np.allclose( + np.array( + [[5.45, 16.35, 27.25, 38.15, 49.05, 59.95, 70.85, 81.75, 92.65, 103.55]] + * model._meshx_.shape[0] + ), + model._meshx_, + ) + assert np.allclose( + np.array( + [[63.25, 51.75, 40.25, 28.75, 17.25, 5.75]] * model._meshy_.shape[1] + ).transpose(), + model._meshy_, + ) + + +# test mesh generation method with different mesh types +@pytest.mark.unit +@pytest.mark.filterwarnings("ignore: Model initialized with non-metrical pitch.") +def test_generate_mesh_hex() -> None: + xpoints = 10 + pitch_opta = Pitch.from_template("opta", sport="football", length=109, width=69) + pitch_statsbomb = Pitch.from_template( + "statsbomb", sport="football", length=109, width=69 + ) + pitch_dfl = Pitch.from_template("dfl", sport="football", length=109, width=69) + pitch_tracab = Pitch.from_template("tracab", sport="football", length=109, width=69) + pitch_statsperform = Pitch.from_template( + "statsperform_tracking", sport="football", length=109, width=69 + ) + + # Opta + model = DiscreteVoronoiModel(pitch_opta, mesh="hexagonal", xpoints=xpoints) + assert np.allclose( + np.array( + [ + [ + 0.0, + 10.52631579, + 21.05263158, + 31.57894737, + 42.10526316, + 52.63157895, + 63.15789474, + 73.68421053, + 84.21052632, + 94.73684211, + ], + [ + 5.26315789, + 15.78947368, + 26.31578947, + 36.84210526, + 47.36842105, + 57.89473684, + 68.42105263, + 78.94736842, + 89.47368421, + 100.0, + ], + ] + * int(model._meshx_.shape[0] / 2) + ), + model._meshx_, + ) + assert np.allclose( + np.array( + [ + [ + 100.0, + 90.90909091, + 81.81818182, + 72.72727273, + 63.63636364, + 54.54545455, + 45.45454545, + 36.36363636, + 27.27272727, + 18.18181818, + 9.09090909, + 0.0, + ] + ] + * model._meshy_.shape[1] + ).transpose(), + model._meshy_, + ) + # StatsBomb + model = DiscreteVoronoiModel(pitch_statsbomb, mesh="hexagonal", xpoints=xpoints) + assert np.allclose( + np.array( + [ + [ + 0.0, + 12.63157895, + 25.26315789, + 37.89473684, + 50.52631579, + 63.15789474, + 75.78947368, + 88.42105263, + 101.05263158, + 113.68421053, + ], + [ + 6.31578947, + 18.94736842, + 31.57894737, + 44.21052632, + 56.84210526, + 69.47368421, + 82.10526316, + 94.73684211, + 107.36842105, + 120.0, + ], + ] + * int(model._meshx_.shape[0] / 2) + ), + model._meshx_, + ) + assert np.allclose( + np.array( + [ + [ + 80.0, + 68.57142857, + 57.14285714, + 45.71428571, + 34.28571429, + 22.85714286, + 11.42857143, + 0.0, + ] + ] + * model._meshy_.shape[1] + ).transpose(), + model._meshy_, + ) + # DFL + model = DiscreteVoronoiModel(pitch_dfl, mesh="hexagonal", xpoints=xpoints) + assert np.allclose( + np.array( + [ + [ + -54.5, + -43.02631579, + -31.55263158, + -20.07894737, + -8.60526316, + 2.86842105, + 14.34210526, + 25.81578947, + 37.28947368, + 48.76315789, + ], + [ + -48.76315789, + -37.28947368, + -25.81578947, + -14.34210526, + -2.86842105, + 8.60526316, + 20.07894737, + 31.55263158, + 43.02631579, + 54.5, + ], + ] + * int(model._meshx_.shape[0] / 2) + ), + model._meshx_, + ) + assert np.allclose( + np.array( + [ + [ + 34.5, + 24.64285714, + 14.78571429, + 4.92857143, + -4.92857143, + -14.78571429, + -24.64285714, + -34.5, + ] + ] + * model._meshy_.shape[1] + ).transpose(), + model._meshy_, + ) + # Tracab + model = DiscreteVoronoiModel(pitch_tracab, mesh="hexagonal", xpoints=xpoints) + assert np.allclose( + np.array( + [ + [ + -5450.0, + -4302.63157895, + -3155.26315789, + -2007.89473684, + -860.52631579, + 286.84210526, + 1434.21052632, + 2581.57894737, + 3728.94736842, + 4876.31578947, + ], + [ + -4876.31578947, + -3728.94736842, + -2581.57894737, + -1434.21052632, + -286.84210526, + 860.52631579, + 2007.89473684, + 3155.26315789, + 4302.63157895, + 5450.0, + ], + ] + * int(model._meshx_.shape[0] / 2) + ), + model._meshx_, + ) + assert np.allclose( + np.array( + [ + [ + 3450.0, + 2464.28571429, + 1478.57142857, + 492.85714286, + -492.85714286, + -1478.57142857, + -2464.28571429, + -3450.0, + ] + ] + * model._meshy_.shape[1] + ).transpose(), + model._meshy_, + ) + # Statsperform + model = DiscreteVoronoiModel(pitch_statsperform, mesh="hexagonal", xpoints=xpoints) + assert np.allclose( + np.array( + [ + [ + 0.0, + 11.47368421, + 22.94736842, + 34.42105263, + 45.89473684, + 57.36842105, + 68.84210526, + 80.31578947, + 91.78947368, + 103.26315789, + ], + [ + 5.73684211, + 17.21052632, + 28.68421053, + 40.15789474, + 51.63157895, + 63.10526316, + 74.57894737, + 86.05263158, + 97.52631579, + 109.0, + ], + ] + * int(model._meshx_.shape[0] / 2) + ), + model._meshx_, + ) + assert np.allclose( + np.array( + [ + [ + 69.0, + 59.14285714, + 49.28571429, + 39.42857143, + 29.57142857, + 19.71428571, + 9.85714286, + 0.0, + ] + ] + * model._meshy_.shape[1] + ).transpose(), + model._meshy_, + ) + + +# test calculation of controls with euclidean distance +@pytest.mark.unit +def test_calc_cell_controls_euclidean_square( + example_xy_objects_space_control, example_pitch_dfl +) -> None: + xy1, xy2 = example_xy_objects_space_control + pitch = example_pitch_dfl + model_square = DiscreteVoronoiModel(pitch, mesh="square", xpoints=10) + model_square.fit(xy1, xy2) + + assert np.array_equal( + np.array( + [ + [0.0, 0.0, 0.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 5.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 0.0, 5.0, 5.0, 5.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 5.0, 5.0, 5.0, 5.0, 3.0, 3.0, 3.0], + ] + ), + model_square._cell_controls_[0], + ) + assert np.array_equal( + np.array( + [ + [0.0, 0.0, 0.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 5.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 1.0, 5.0, 5.0, 5.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 5.0, 5.0, 5.0, 5.0, 3.0, 3.0, 3.0], + ] + ), + model_square._cell_controls_[1], + ) + + +@pytest.mark.unit +def test_calc_cell_controls_euclidean_hex( + example_xy_objects_space_control, example_pitch_dfl +) -> None: + xy1, xy2 = example_xy_objects_space_control + pitch = example_pitch_dfl + model_hex = DiscreteVoronoiModel(pitch, mesh="hexagonal", xpoints=10) + model_hex.fit(xy1, xy2) + + assert np.array_equal( + np.array( + [ + [0.0, 0.0, 0.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 1.0, 1.0, 5.0, 3.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 0.0, 5.0, 5.0, 5.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 5.0, 5.0, 5.0, 5.0, 3.0, 3.0, 3.0], + ] + ), + model_hex._cell_controls_[0], + ) + assert np.array_equal( + np.array( + [ + [0.0, 0.0, 0.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 2.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 1.0, 1.0, 5.0, 3.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 0.0, 5.0, 5.0, 5.0, 3.0, 3.0, 3.0], + [0.0, 0.0, 0.0, 5.0, 5.0, 5.0, 5.0, 3.0, 3.0, 3.0], + ] + ), + model_hex._cell_controls_[1], + ) + + +# test calculation of player areas +@pytest.mark.unit +def test_player_controls_square( + example_xy_objects_space_control, example_pitch_dfl +) -> None: + xy1, xy2 = example_xy_objects_space_control + pitch = example_pitch_dfl + model_square = DiscreteVoronoiModel(pitch, mesh="square", xpoints=10) + model_square.fit(xy1, xy2) + + areas1, areas2 = model_square.player_controls() + + assert np.array_equal( + areas1.property, np.array([[34.0, 4.0, 16.0], [30.0, 8.0, 16.0]]) + ) + assert np.array_equal( + areas2.property, np.array([[30.0, 0.0, 16.0], [30.0, 0.0, 16.0]]) + ) + assert np.allclose( + np.sum(areas1, axis=1) + np.sum(areas2, axis=1), + np.array([100.0, 100.0]), + atol=0.5, + ) + + +@pytest.mark.unit +def test_player_controls_hex( + example_xy_objects_space_control, example_pitch_dfl +) -> None: + xy1, xy2 = example_xy_objects_space_control + pitch = example_pitch_dfl + model_hex = DiscreteVoronoiModel(pitch, mesh="hexagonal", xpoints=10) + model_hex.fit(xy1, xy2) + + areas1, areas2 = model_hex.player_controls() + + assert np.array_equal( + areas1.property, np.array([[33.33, 8.33, 11.67], [33.33, 6.67, 15.0]]) + ) + assert np.array_equal( + areas2.property, np.array([[33.33, 0.0, 13.33], [31.67, 0.0, 13.33]]) + ) + assert np.allclose( + np.sum(areas1, axis=1) + np.sum(areas2, axis=1), + np.array([100.0, 100.0]), + atol=0.5, + ) + + +# test calculation of team areas +@pytest.mark.unit +def test_team_controls_square( + example_xy_objects_space_control, example_pitch_dfl +) -> None: + xy1, xy2 = example_xy_objects_space_control + pitch = example_pitch_dfl + model_square = DiscreteVoronoiModel(pitch, mesh="square", xpoints=10) + model_square.fit(xy1, xy2) + + areas1, areas2 = model_square.team_controls() + + assert np.array_equal(areas1.property, np.array([[54.0], [54.0]])) + assert np.array_equal(areas2.property, np.array([[46.0], [46.0]])) + assert np.allclose( + np.sum(areas1, axis=1) + np.sum(areas2, axis=1), + np.array([100.0, 100.0]), + atol=0.5, + ) + + +@pytest.mark.unit +def test_team_controls_hex(example_xy_objects_space_control, example_pitch_dfl) -> None: + xy1, xy2 = example_xy_objects_space_control + pitch = example_pitch_dfl + model_hex = DiscreteVoronoiModel(pitch, mesh="hexagonal", xpoints=10) + model_hex.fit(xy1, xy2) + + areas1, areas2 = model_hex.team_controls() + + assert np.array_equal(areas1.property, np.array([[53.33], [55.0]])) + assert np.array_equal(areas2.property, np.array([[46.67], [45.0]])) + assert np.allclose( + np.sum(areas1, axis=1) + np.sum(areas2, axis=1), + np.array([100.0, 100.0]), + atol=0.5, + ) + + +# test plotting +@pytest.mark.plot +def test_plot_square(example_xy_objects_space_control, example_pitch_dfl) -> None: + # get data + xy1, xy2 = example_xy_objects_space_control + pitch = example_pitch_dfl + model_square = DiscreteVoronoiModel(pitch, mesh="square", xpoints=10) + model_square.fit(xy1, xy2) + + # create plot + fig, ax = plt.subplots() + pitch.plot(ax=ax) + # plot with all variables and kwarg + model_square.plot(t=1, team_colors=("red", "blue"), ax=ax, ec="black") + + # assert plot generation + assert isinstance(ax, matplotlib.axes.Axes) + + # assert rectangle generation + plotted_rectangles = 0 + for patch in plt.gca().patches: + if isinstance(patch, matplotlib.patches.Rectangle): + plotted_rectangles += 1 + assert plotted_rectangles == 50 + + plt.close() + + +@pytest.mark.plot +def test_plot_hex(example_xy_objects_space_control, example_pitch_dfl) -> None: + # get data + xy1, xy2 = example_xy_objects_space_control + pitch = example_pitch_dfl + model_hex = DiscreteVoronoiModel(pitch, mesh="hexagonal", xpoints=10) + model_hex.fit(xy1, xy2) + + # create plot + fig, ax = plt.subplots() + pitch.plot(ax=ax) + # plot with all variables and kwarg + model_hex.plot(t=1, team_colors=("red", "blue"), ax=ax, ec="black") + + # assert plot generation + assert isinstance(ax, matplotlib.axes.Axes) + + # assert recangle generation + plotted_polygons = 0 + for patch in plt.gca().patches: + if isinstance(patch, matplotlib.patches.RegularPolygon): + plotted_polygons += 1 + assert plotted_polygons == 60 + + plt.close() + + +@pytest.mark.plot +def test_plot_mesh(example_xy_objects_space_control, example_pitch_dfl) -> None: + # get data + xy1, xy2 = example_xy_objects_space_control + pitch = example_pitch_dfl + model_hex = DiscreteVoronoiModel(pitch, mesh="hexagonal", xpoints=10) + model_hex.fit(xy1, xy2) + + # create plot + fig, ax = plt.subplots() + pitch.plot(ax=ax) + model_hex.plot_mesh(ax=ax) + + # assert plot generation + assert isinstance(ax, matplotlib.axes.Axes) + + plt.close() From 73e2721b484404e3f39edab65b7339010faa2a6b Mon Sep 17 00:00:00 2001 From: draabe Date: Fri, 3 Feb 2023 21:07:53 +0100 Subject: [PATCH 22/25] chore: update README --- README.md | 65 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 7989d7d5..5109908a 100644 --- a/README.md +++ b/README.md @@ -15,19 +15,21 @@ [contrib-url]: https://github.com/floodlight-sports/floodlight/blob/main/CONTRIBUTING.md [arxiv-image]: https://img.shields.io/badge/arXiv-2206.02562-b31b1b.svg [arxiv-url]: https://arxiv.org/abs/2206.02562 +[joss-image]: https://joss.theoj.org/papers/10.21105/joss.04588/status.svg +[joss-url]: https://doi.org/10.21105/joss.04588 [codecov-image]: https://codecov.io/gh/floodlight-sports/floodlight/branch/develop/graph/badge.svg?token=RLY582UBC6 [codecov-url]: https://codecov.io/gh/floodlight-sports/floodlight # floodlight + [![Latest Version][version-image]][version-url] [![Python Version][python-image]][python-url] [![Documentation Status][docs-image]][docs-url] [![Build Status][build-image]][build-url] [![Linting Status][lint-image]][lint-url] [![Codecov][codecov-image]][codecov-url] -[![Code style: black][black-image]][black-url] -[![arXiv][arxiv-image]][arxiv-url] +[![DOI][joss-image]][joss-url] ## A high-level, data-driven sports analytics framework @@ -88,28 +90,30 @@ To find out more, see the full set of features below or get started quickly with ### Features -This project is still under development, and we hope to expand the set -of features in the future. At this point, we provide core data structures, -parsing functionality for major data providers, access to public data sets, data -filtering, basic plotting routines and computational models. +We provide core data structures for team sports data, parsing functionality for major +data providers, access points to public data sets, data filtering, plotting routines and +many computational models from the literature. The feature set is constantly expanding, +and if you want to add more just open an issue! #### Data-level Objects - Tracking data - Event data - Pitch information +- Teamsheets with player information (*new*) - Codes such as ball possession information - Properties such as distances or advanced computations #### Parser -- ChyronHego (Tracking data, Codes) -- DFL (Tracking data, Event data, Codes) -- Kinexon (Tracking data) -- Opta (Event data - F24 feeds) -- Second Spectrum (Tracking data) -- StatsPerform (Tracking data, Event data - also directly from URLs) -- StatsBomb (Event data) +- **Tracab/ChyronHego**: Tracking data, Teamsheets, Codes +- **DFL/STS**: Tracking data, Event data, Teamsheets, Codes +- **Kinexon**: Tracking data +- **Opta**: Event data (F24 feeds) +- **Second Spectrum**: Tracking data, Event data (*new*) +- **Sportradar**: Event data (*new*) +- **StatsPerform**: Tracking data, Event data (with URL access) +- **StatsBomb**: Event data #### Datasets @@ -120,15 +124,16 @@ filtering, basic plotting routines and computational models. - Spatial transformations for all data structures - Lowpass-filter tracking data -- Slicing and selection methods -- Plot pitches and tracking data +- Slicing, selection and sequencing methods +- Plot pitches, player positions and model overlays #### Models and Metrics -- Centroids -- Distances, Velocities, Accelerations -- Metabolic Power and Equivalent Distances - Approximate Entropy +- Centroids +- Distances, Velocities & Accelerations +- Metabolic Power & Equivalent Distances +- Voronoi Space Control (*new*) ### Installation @@ -148,6 +153,8 @@ You can find all documentation [here][docs-url]. ### Contributing [![Contributions][contrib-image]][contrib-url] +[![Code style: black][black-image]][black-url] + Check out [Contributing.md][contrib-url] for a quick rundown of what you need to know to get started. We also provide an extended, beginner-friendly guide on how to @@ -157,17 +164,21 @@ start contributing in our documentation. ### Citing -If you've used *floodlight* in your scientific work, please cite the [corresponding paper][arxiv-url]. +If you've used *floodlight* in your scientific work, please cite the [corresponding paper][joss-url]. ``` -@misc{Raabe2022floodlight, - doi = {10.48550/ARXIV.2206.02562}, - url = {https://arxiv.org/abs/2206.02562}, - author = {Raabe, Dominik and Biermann, Henrik and Bassek, Manuel and Wohlan, Martin and Komitova, Rumena and Rein, - Robert and Groot, Tobias Kuppens and Memmert, Daniel}, - title = {floodlight -- A high-level, data-driven sports analytics framework}, - publisher = {arXiv}, - year = {2022}, +@article{Raabe2022, + doi = {10.21105/joss.04588}, + url = {https://doi.org/10.21105/joss.04588}, + year = {2022}, + publisher = {The Open Journal}, + volume = {7}, + number = {76}, + pages = {4588}, + author = {Dominik Raabe and Henrik Biermann and Manuel Bassek and Martin Wohlan and Rumena Komitova + and Robert Rein and Tobias Kuppens Groot and Daniel Memmert}, + title = {floodlight - A high-level, data-driven sports analytics framework}, + journal = {Journal of Open Source Software} } ``` From ddbe39288ff45a463e5e250e14adbdbfd91e9d85 Mon Sep 17 00:00:00 2001 From: draabe Date: Fri, 3 Feb 2023 21:13:44 +0100 Subject: [PATCH 23/25] docs: update docs build --- floodlight/io/dfl.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/floodlight/io/dfl.py b/floodlight/io/dfl.py index 5fcf8650..11cf3f76 100644 --- a/floodlight/io/dfl.py +++ b/floodlight/io/dfl.py @@ -672,10 +672,8 @@ def read_position_data_xml( ``xy_objects`` is a nested dictionary containing ``XY`` objects for each team and segment of the form ``xy_objects[segment][team] = XY``. For a typical league match with two halves and teams this dictionary looks like: - ``{ - 'firstHalf': {'Home': XY, 'Away': XY}, - 'secondHalf': {'Home': XY, 'Away': XY} - }``. + ``{'firstHalf': {'Home': XY, 'Away': XY}, 'secondHalf': {'Home': XY, 'Away': + XY}}``. ``possession_objects`` is a dictionary containing ``Code`` objects with possession information (home or away) for each segment of the form From 4b9b298d266c7cdad31a1503db1c84aebc3064e3 Mon Sep 17 00:00:00 2001 From: draabe Date: Fri, 3 Feb 2023 21:14:36 +0100 Subject: [PATCH 24/25] docs: update changelog --- CHANGELOG.md | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 44024c68..03c1b80c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,17 +1,41 @@ # Changelog -## 0.3.3 (2022-08-23) +## 0.4.0 (2023-02-03) +#### New Features + +* add discretized voronoi model ([#124](https://github.com/floodlight-sports/floodlight/issues/124)) +* add parser for metadata and teamsheets in json format ([#113](https://github.com/floodlight-sports/floodlight/issues/113)) +* integrate teamsheet logic to tracab parser ([#112](https://github.com/floodlight-sports/floodlight/issues/112)) +* integrate teamsheet logic to secondspectrum parsers ([#111](https://github.com/floodlight-sports/floodlight/issues/111)) +* integrate teamsheet logic to statsperform parsers ([#108](https://github.com/floodlight-sports/floodlight/issues/108)) +* integrate teamsheet logic to statsbomb parser ([#109](https://github.com/floodlight-sports/floodlight/issues/109)) +* integrate teamsheet logic to dfl parser ([#106](https://github.com/floodlight-sports/floodlight/issues/106)) +* add sportradar parser ([#110](https://github.com/floodlight-sports/floodlight/issues/110)) +* add teamsheets core object ([#103](https://github.com/floodlight-sports/floodlight/issues/103)) +* add second spectrum insights parser ([#100](https://github.com/floodlight-sports/floodlight/issues/100)) #### Fixes +* io refactor fixes ([#117](https://github.com/floodlight-sports/floodlight/issues/117)) +* set matplotlib backend env in workflows +* replace pandas iterrows ([#96](https://github.com/floodlight-sports/floodlight/issues/96)) +* missing https in hyperlink leading to an unknown page when clicking on it in github ([#98](https://github.com/floodlight-sports/floodlight/issues/98)) +* MetabolicPower framerate bug ([#93](https://github.com/floodlight-sports/floodlight/issues/93)) * UTF-8 encoding Kinexon parser * UFT-8 encoding Kinexon parser * minimum signal length ([#81](https://github.com/floodlight-sports/floodlight/issues/81)) * statsperform pitch templates ([#75](https://github.com/floodlight-sports/floodlight/issues/75)) * adapt dfl parser to different format versions and fix statsperform gameclock unit ([#76](https://github.com/floodlight-sports/floodlight/issues/76)) * pass difference argument to axis-specific differentiation and fix prepend ([#77](https://github.com/floodlight-sports/floodlight/issues/77)) +#### Refactorings + +* flexible dictionary returns for parser ([#116](https://github.com/floodlight-sports/floodlight/issues/116)) +* streamline IO function names ([#115](https://github.com/floodlight-sports/floodlight/issues/115)) #### Docs +* fix butterworth cutoff freq doc ([#94](https://github.com/floodlight-sports/floodlight/issues/94)) +* update tutorial matchsheets ([#95](https://github.com/floodlight-sports/floodlight/issues/95)) +* update changelog * add information on setup.py * update datasets description * update readme @@ -19,14 +43,18 @@ * add paper reference #### Others +* bump version * add dependency pytest-cov * add dependency coverage * bump version +* update location of flake8 which was moved from gitlab to github ([#99](https://github.com/floodlight-sports/floodlight/issues/99)) * add coverage reports generation and codecov upload +* update README * update readme * update module init +* update columns in tests -Full set of changes: [`0.3.1...0.3.3`](https://github.com/floodlight-sports/floodlight/compare/0.3.1...0.3.3) +Full set of changes: [`0.3.1...0.4.0`](https://github.com/floodlight-sports/floodlight/compare/0.3.1...0.4.0) ## 0.3.1 (2022-06-06) From e1de08731b802402b8a63574f0f462b9c606fe2d Mon Sep 17 00:00:00 2001 From: draabe Date: Fri, 3 Feb 2023 21:15:33 +0100 Subject: [PATCH 25/25] build: bump version --- floodlight/__init__.py | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/floodlight/__init__.py b/floodlight/__init__.py index 195d095d..f5cb9bfd 100644 --- a/floodlight/__init__.py +++ b/floodlight/__init__.py @@ -18,7 +18,7 @@ "XY", ] -__version__ = "0.3.3" +__version__ = "0.4.0" __doc__ = """ A high-level, data-driven sports analytics framework diff --git a/pyproject.toml b/pyproject.toml index f4490a7b..5a72ba73 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "floodlight" -version = "0.3.3" +version = "0.4.0" description = "A high-level framework for sports data analysis" authors = ["draabe "] license = "MIT"