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