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