Jon Solow commited on
Commit
42841bf
·
1 Parent(s): 5681b11

Refactor the parsing of schedule to get more info

Browse files
src/load_options.py CHANGED
@@ -11,7 +11,7 @@ from domain.playoffs import (
11
  )
12
  from domain.teams import SCHEDULE_NAME_TO_PFR_NAME_MAP
13
  from queries.nflverse.github_data import get_weekly_rosters
14
- from queries.pfr.league_schedule import get_season_time_map
15
 
16
 
17
  @dataclass
@@ -99,8 +99,7 @@ def load_options():
99
  df_rosters = get_weekly_rosters()
100
 
101
  # get game schedules
102
- week_game_times = get_season_time_map(SEASON)
103
- latest_game_time_defaults = {k: max(v.values()) for k, v in week_game_times.items() if v}
104
 
105
  # sort
106
  sort_by_cols = ["position", "fantasy_points", "week"]
@@ -117,9 +116,9 @@ def load_options():
117
  if len(df_rosters) == 0:
118
  return initialize_empty_options_map()
119
  df_rosters["gametime"] = df_rosters.apply(
120
- lambda x: week_game_times.get(x.week, {}).get(
121
- SCHEDULE_NAME_TO_PFR_NAME_MAP[x.team], latest_game_time_defaults.get(x.week, None)
122
- ),
123
  axis=1,
124
  )
125
 
 
11
  )
12
  from domain.teams import SCHEDULE_NAME_TO_PFR_NAME_MAP
13
  from queries.nflverse.github_data import get_weekly_rosters
14
+ from queries.pfr.league_schedule import get_season_game_map
15
 
16
 
17
  @dataclass
 
99
  df_rosters = get_weekly_rosters()
100
 
101
  # get game schedules
102
+ week_game_times, latest_game_time_defaults = get_season_game_map(SEASON)
 
103
 
104
  # sort
105
  sort_by_cols = ["position", "fantasy_points", "week"]
 
116
  if len(df_rosters) == 0:
117
  return initialize_empty_options_map()
118
  df_rosters["gametime"] = df_rosters.apply(
119
+ lambda x: week_game_times.get(x.week, {})
120
+ .get(SCHEDULE_NAME_TO_PFR_NAME_MAP[x.team], {})
121
+ .get("gametime", latest_game_time_defaults.get(x.week, None)),
122
  axis=1,
123
  )
124
 
src/queries/pfr/league_schedule.py CHANGED
@@ -12,16 +12,35 @@ def get_full_schedule(season_int: str | int) -> pd.DataFrame:
12
  return df
13
 
14
 
15
- def get_week_team_time_map(df_schedule: pd.DataFrame) -> dict[int, dict[str, pd.Timestamp]]:
16
- week_team_time_map: dict[int, dict[str, pd.Timestamp]] = {k: {} for k in SCHEDULE_WEEK_TO_PLAYOFF_WEEK.values()}
 
 
 
 
 
 
 
17
  for _, row in df_schedule.iterrows():
18
  if mapped_week := SCHEDULE_WEEK_TO_PLAYOFF_WEEK.get(row.Week):
19
  game_time = pd.to_datetime(row.Date + " " + row.Time, yearfirst=True).tz_localize("EST")
20
- week_team_time_map[mapped_week][row["Winner/tie"]] = game_time
21
- week_team_time_map[mapped_week][row["Loser/tie"]] = game_time
22
- return week_team_time_map
23
 
24
-
25
- def get_season_time_map(season_int: str | int) -> dict[int, dict[str, pd.Timestamp]]:
26
- df_schedule = get_full_schedule(season_int)
27
- return get_week_team_time_map(df_schedule)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  return df
13
 
14
 
15
+ def get_season_game_map(
16
+ season_int: str | int,
17
+ ) -> tuple[dict[int, dict[str, str | int | dict[str, pd.Timestamp]]], dict[int, pd.Timestamp]]:
18
+ df_schedule = get_full_schedule(season_int)
19
+ week_team_time_map: dict[int, dict[str, str | int | dict[str, pd.Timestamp]]] = {
20
+ k: {} for k in SCHEDULE_WEEK_TO_PLAYOFF_WEEK.values()
21
+ }
22
+ last_game_week_map: dict[int, pd.Timestamp] = {}
23
+
24
  for _, row in df_schedule.iterrows():
25
  if mapped_week := SCHEDULE_WEEK_TO_PLAYOFF_WEEK.get(row.Week):
26
  game_time = pd.to_datetime(row.Date + " " + row.Time, yearfirst=True).tz_localize("EST")
 
 
 
27
 
28
+ if mapped_week not in last_game_week_map:
29
+ last_game_week_map[mapped_week] = game_time
30
+ else:
31
+ last_game_week_map[mapped_week] = max(game_time, last_game_week_map[mapped_week])
32
+
33
+ # only actual winner/loser if game has already happened
34
+ winner_team = row["Winner/tie"]
35
+ loser_team = row["Loser/tie"]
36
+ winner_game = {
37
+ "gametime": game_time,
38
+ "opponent": loser_team,
39
+ }
40
+ loser_game = {
41
+ "gametime": game_time,
42
+ "opponent": winner_team,
43
+ }
44
+ week_team_time_map[mapped_week][winner_team] = winner_game
45
+ week_team_time_map[mapped_week][loser_team] = loser_game
46
+ return week_team_time_map, last_game_week_map