|
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) |
|
|