socr / tests /data /opta /parsers /test_f9_json.py
scfive's picture
Upload 203 files
d6ea71e verified
import os
from datetime import datetime
import pandas as pd
from pytest import fixture
from socceraction.data.opta import (
OptaGameSchema,
OptaPlayerSchema,
OptaTeamSchema,
)
from socceraction.data.opta.parsers import F9JSONParser
@fixture()
def f9json_parser() -> F9JSONParser:
path = os.path.join(
os.path.dirname(__file__),
os.pardir,
os.pardir,
os.pardir,
"datasets",
"opta",
"match-2017-8-918893.json",
)
return F9JSONParser(str(path))
def test_extract_games(f9json_parser: F9JSONParser) -> None:
games = f9json_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),
"home_team_id": 3,
"away_team_id": 13,
"home_score": 4,
"away_score": 3,
"attendance": 59387,
"duration": 96,
"referee": "Mike Dean",
"venue": None,
"home_manager": None,
"away_manager": None,
}
OptaGameSchema.validate(pd.DataFrame.from_dict(games, orient="index"))
def test_extract_teams(f9json_parser: F9JSONParser) -> None:
teams = f9json_parser.extract_teams()
assert len(teams) == 2
assert teams[3] == {
"team_id": 3,
"team_name": "Arsenal",
}
assert teams[13] == {
"team_id": 13,
"team_name": "Leicester City",
}
OptaTeamSchema.validate(pd.DataFrame.from_dict(teams, orient="index"))
def test_extract_players(f9json_parser: F9JSONParser) -> None:
players = f9json_parser.extract_players()
assert len(players) == 27
assert players[(918893, 11334)] == {
"game_id": 918893,
"player_id": 11334,
"player_name": "Petr Cech",
"team_id": 3,
"jersey_number": 33,
"minutes_played": 96,
"starting_position": "Goalkeeper",
"is_starter": True,
}
OptaPlayerSchema.validate(pd.DataFrame.from_dict(players, orient="index"))