File size: 2,095 Bytes
d6ea71e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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"))