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 +5 -6
- src/queries/pfr/league_schedule.py +28 -9
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
|
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 =
|
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, {})
|
121 |
-
|
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
|
16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
26 |
-
|
27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|