| 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 F24JSONParser |
|
|
|
|
| @fixture() |
| def f24json_parser() -> F24JSONParser: |
| path = os.path.join( |
| os.path.dirname(__file__), |
| os.pardir, |
| os.pardir, |
| os.pardir, |
| "datasets", |
| "opta", |
| "match-2017-8-918893.json", |
| ) |
| return F24JSONParser(str(path)) |
|
|
|
|
| def test_extract_games(f24json_parser: F24JSONParser) -> None: |
| games = f24json_parser.extract_games() |
| assert len(games) == 1 |
| assert games[918893] == { |
| "game_id": 918893, |
| "season_id": 2017, |
| "competition_id": 8, |
| "game_day": 1, |
| "game_date": datetime(2017, 8, 11, 18, 45, 0, 0), |
| "home_team_id": 3, |
| "away_team_id": 13, |
| } |
| OptaGameSchema.validate(pd.DataFrame.from_dict(games, orient="index")) |
|
|
|
|
| def test_extract_events(f24json_parser: F24JSONParser) -> None: |
| events = f24json_parser.extract_events() |
| assert len(events) == 1785 |
| assert events[(918893, 1815408644)] == { |
| "game_id": 918893, |
| "event_id": 1815408644, |
| "period_id": 2, |
| "team_id": 3, |
| "player_id": 41792, |
| "type_id": 5, |
| "timestamp": datetime(2017, 8, 11, 20, 38, 49, 0), |
| "minute": 94, |
| "second": 57, |
| "outcome": False, |
| "start_x": 101.1, |
| "start_y": 44.4, |
| "end_x": 101.1, |
| "end_y": 44.4, |
| "qualifiers": { |
| 233: "690", |
| 56: "Center", |
| }, |
| "assist": False, |
| "keypass": False, |
| } |
| df = pd.DataFrame.from_dict(events, orient="index") |
| df["type_name"] = "Added later" |
| OptaEventSchema.validate(df) |
|
|