Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
probberechts committed Sep 6, 2023
1 parent f6d330f commit f73ebd6
Show file tree
Hide file tree
Showing 7 changed files with 3,108 additions and 16 deletions.
2 changes: 1 addition & 1 deletion socceraction/data/opta/parsers/ma12_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ def extract_players(self) -> Dict[Tuple[str, str], Dict[str, Any]]: # noqa: C90
"player_id": player.player_id,
"player_name": player.player_name,
"is_starter": is_starter,
"minutes_played": player.minutes_played,
"minutes_played": int(player.minutes_played),
"jersey_number": player.jersey_number,
# Fields required by the opta schema
"starting_position": player.starting_position,
Expand Down
14 changes: 2 additions & 12 deletions socceraction/data/opta/parsers/ma5_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,6 @@ def _get_live_data(self) -> Dict[str, Any]:
return self.root["liveData"]
raise MissingDataError

"""
game_id: Series[Object] = pa.Field()
season_id: Series[Object] = pa.Field()
competition_id: Series[Object] = pa.Field()
game_day: Series[pd.Int64Dtype] = pa.Field(nullable=True)
game_date: Series[DateTime] = pa.Field()
home_team_id: Series[Object] = pa.Field()
away_team_id: Series[Object] = pa.Field()
"""

def extract_games(self) -> Dict[str, Dict[str, Any]]:
"""Return a dictionary with all available games.
Expand Down Expand Up @@ -81,7 +71,7 @@ def extract_games(self) -> Dict[str, Dict[str, Any]]:
game_date=datetime.strptime(game_datetime, "%Y-%m-%dT%H:%M:%S"),
home_team_id=home_team_id,
away_team_id=away_team_id,
home_possession=home_possession,
away_possession=away_possession,
home_possession=float(home_possession),
away_possession=float(away_possession),
)
}
4 changes: 1 addition & 3 deletions socceraction/data/opta/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,9 @@ class OptaPlayerSchema(PlayerSchema):

starting_position: Series[str]
"""The starting position of the player."""

position_side: Optional[Series[str]]
"""The side of the pitch where the player started the game"""

xG_non_penalty: Optional[Series[int]]
xG_non_penalty: Optional[Series[float]]
"""The xG of the player without taking penalties into account"""

# minutes_played: Optional[Series[int]]
Expand Down
46 changes: 46 additions & 0 deletions tests/data/opta/parsers/test_ma12_json.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import os

import pandas as pd
from pytest import fixture

from socceraction.data.opta import OptaPlayerSchema
from socceraction.data.opta.parsers import MA12JSONParser


@fixture()
def ma12json_parser() -> MA12JSONParser:
path = os.path.join(
os.path.dirname(__file__),
os.pardir,
os.pardir,
os.pardir,
"datasets",
"opta",
"ma12_drnl1etmyzjz088y0bb4kh4pg.json",
)
return MA12JSONParser(str(path))


def test_extract_players(ma12json_parser: MA12JSONParser) -> None:
players = ma12json_parser.extract_players()
assert len(players) == 40
assert players[("drnl1etmyzjz088y0bb4kh4pg", "4iijb6llnz28unsz4rirr3umt")] == {
"game_id": "drnl1etmyzjz088y0bb4kh4pg",
"player_id": "4iijb6llnz28unsz4rirr3umt",
"player_name": "David Raya",
"team_id": "7yx5dqhhphyvfisohikodajhv",
"jersey_number": 1,
"minutes_played": 90,
"starting_position": "Goalkeeper",
"is_starter": True,
"position_side": "Centre",
"xG_non_penalty": 0.0,
}
# red card
assert (
players[("drnl1etmyzjz088y0bb4kh4pg", "ds1wjqejslhsbcvzaufxubey2")]["minutes_played"] == 10
)
assert (
players[("drnl1etmyzjz088y0bb4kh4pg", "2o5etqath4k9qaliho4op0hd5")]["minutes_played"] == 0
)
OptaPlayerSchema.validate(pd.DataFrame.from_dict(players, orient="index"))
39 changes: 39 additions & 0 deletions tests/data/opta/parsers/test_ma5_json.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import os
from datetime import datetime

import pandas as pd
from pytest import fixture

from socceraction.data.opta import OptaGameSchema
from socceraction.data.opta.parsers import MA5JSONParser


@fixture()
def ma5json_parser() -> MA5JSONParser:
path = os.path.join(
os.path.dirname(__file__),
os.pardir,
os.pardir,
os.pardir,
"datasets",
"opta",
"ma5_drnl1etmyzjz088y0bb4kh4pg.json",
)
return MA5JSONParser(str(path))


def test_extract_games(ma5json_parser: MA5JSONParser) -> None:
games = ma5json_parser.extract_games()
assert len(games) == 1
assert games["drnl1etmyzjz088y0bb4kh4pg"] == {
"game_id": "drnl1etmyzjz088y0bb4kh4pg",
"season_id": "8l3o9v8n8tva0bb2cds2dhatw",
"competition_id": "2kwbbcootiqqgmrzs6o5inle5",
"game_day": 1,
"game_date": datetime(2021, 8, 13, 19, 0),
"home_team_id": "7yx5dqhhphyvfisohikodajhv",
"away_team_id": "4dsgumo7d4zupm2ugsvm4zm4d",
"away_possession": 64.7,
"home_possession": 35.3,
}
OptaGameSchema.validate(pd.DataFrame.from_dict(games, orient="index"))
Loading

0 comments on commit f73ebd6

Please sign in to comment.