| import os |
| from datetime import datetime |
|
|
| import pandas as pd |
| from pytest import fixture |
| from socceraction.data.opta import OptaEventSchema, OptaGameSchema |
| from socceraction.data.opta.parsers import F24XMLParser |
|
|
|
|
| @fixture() |
| def f24xml_parser() -> F24XMLParser: |
| path = os.path.join( |
| os.path.dirname(__file__), |
| os.pardir, |
| os.pardir, |
| os.pardir, |
| "datasets", |
| "opta", |
| "f24-23-2018-1009316-eventdetails.xml", |
| ) |
| return F24XMLParser(str(path)) |
|
|
|
|
| def test_extract_games(f24xml_parser: F24XMLParser) -> None: |
| games = f24xml_parser.extract_games() |
| assert len(games) == 1 |
| assert games[1009316] == { |
| "game_id": 1009316, |
| "season_id": 2018, |
| "competition_id": 23, |
| "game_day": 1, |
| "game_date": datetime(2018, 8, 20, 21, 0), |
| "home_team_id": 174, |
| "away_team_id": 957, |
| "home_score": 2, |
| "away_score": 1, |
| } |
| OptaGameSchema.validate(pd.DataFrame.from_dict(games, orient="index")) |
|
|
|
|
| def test_extract_events(f24xml_parser: F24XMLParser) -> None: |
| events = f24xml_parser.extract_events() |
| assert len(events) == 1665 |
| assert events[(1009316, 2097423126)] == { |
| "game_id": 1009316, |
| "event_id": 2097423126, |
| "period_id": 2, |
| "team_id": 174, |
| "player_id": 197319, |
| "type_id": 1, |
| "timestamp": datetime(2018, 8, 20, 22, 51, 28, 259000), |
| "minute": 94, |
| "second": 50, |
| "outcome": False, |
| "start_x": 46.4, |
| "start_y": 37.1, |
| "end_x": 74.4, |
| "end_y": 8.9, |
| "qualifiers": { |
| 1: None, |
| 213: "5.7", |
| 212: "35.1", |
| 152: None, |
| 5: None, |
| 155: None, |
| 56: "Right", |
| 140: "74.4", |
| 141: "8.9", |
| }, |
| "assist": False, |
| "keypass": False, |
| } |
| df = pd.DataFrame.from_dict(events, orient="index") |
| df["type_name"] = "Added later" |
| OptaEventSchema.validate(df) |
|
|