Skip to content

Commit 79710b7

Browse files
authored
Add service/ridership stats by mode (#176)
1 parent ce62957 commit 79710b7

4 files changed

Lines changed: 52 additions & 4 deletions

File tree

ingestor/chalicelib/service_ridership_dashboard/ingest.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from .s3 import put_dashboard_json_to_s3
1616
from .service_levels import ServiceLevelsByDate, ServiceLevelsEntry, get_service_level_entries_by_line_id
1717
from .service_summaries import summarize_weekly_service_around_date
18-
from .summary import get_summary_data
18+
from .summary import get_summary_data, get_summary_data_by_mode
1919
from .time_series import get_weekly_median_time_series
2020
from .types import DashJSON, LineData, LineKind, ServiceRegimes
2121
from .util import date_from_string, date_to_string
@@ -171,8 +171,14 @@ def create_service_ridership_dash_json(
171171
start_date=start_date,
172172
end_date=end_date,
173173
)
174+
mode_data = get_summary_data_by_mode(
175+
line_data=list(line_data_by_line_id.values()),
176+
start_date=start_date,
177+
end_date=end_date,
178+
)
174179
dash_json: DashJSON = {
175180
"summaryData": summary_data,
181+
"modeData": mode_data,
176182
"lineData": line_data_by_line_id,
177183
}
178184
if write_debug_files:

ingestor/chalicelib/service_ridership_dashboard/summary.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
get_latest_weekly_median_time_series_entry,
55
merge_weekly_median_time_series,
66
)
7-
from .types import LineData, SummaryData
8-
from .util import date_to_string
7+
from .types import LineData, ModeKind, SummaryData
8+
from .util import bucket_by, date_to_string, line_kind_to_mode_kind
99

1010

1111
def _line_is_cancelled(line: LineData) -> bool:
@@ -91,3 +91,15 @@ def get_summary_data(line_data: list[LineData], start_date: date, end_date: date
9191
"startDate": date_to_string(start_date),
9292
"endDate": date_to_string(end_date),
9393
}
94+
95+
96+
def get_summary_data_by_mode(
97+
line_data: list[LineData],
98+
start_date: date,
99+
end_date: date,
100+
) -> dict[ModeKind, SummaryData]:
101+
lines_by_mode = bucket_by(line_data, lambda line: line_kind_to_mode_kind(line["lineKind"]))
102+
mode_summary_data: dict[ModeKind, SummaryData] = {}
103+
for mode, lines in lines_by_mode.items():
104+
mode_summary_data[mode] = get_summary_data(lines, start_date, end_date)
105+
return mode_summary_data

ingestor/chalicelib/service_ridership_dashboard/types.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,21 @@
1111
"boat",
1212
]
1313

14+
15+
MODE_KINDS = [
16+
"rapid-transit",
17+
"regional-rail",
18+
"bus",
19+
"boat",
20+
]
21+
22+
ModeKind = Literal[
23+
"rapid-transit",
24+
"regional-rail",
25+
"bus",
26+
"boat",
27+
]
28+
1429
WeeklyMedianTimeSeries = dict[str, float] # Map yyyy-mm-dd to numbers
1530

1631

@@ -61,3 +76,4 @@ class SummaryData(TypedDict):
6176
class DashJSON(TypedDict):
6277
lineData: dict[str, LineData]
6378
summaryData: SummaryData
79+
modeData: dict[ModeKind, SummaryData]

ingestor/chalicelib/service_ridership_dashboard/util.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from datetime import date, datetime, timedelta
2-
from typing import Tuple
2+
from typing import Optional, Tuple
3+
4+
from .types import LineKind, ModeKind
35

46

57
def date_from_string(date_str):
@@ -67,3 +69,15 @@ def date_range_contains(containing: Tuple[date, date], contained: Tuple[date, da
6769
(containing_from, containing_to) = containing
6870
(contained_from, contained_to) = contained
6971
return contained_from >= containing_from and contained_to <= containing_to
72+
73+
74+
def line_kind_to_mode_kind(line_kind: LineKind) -> Optional[ModeKind]:
75+
if line_kind == "bus":
76+
return "bus"
77+
if line_kind == "regional-rail":
78+
return "regional-rail"
79+
if line_kind == "boat":
80+
return "boat"
81+
if line_kind in ("red", "orange", "blue", "green", "silver"):
82+
return "rapid-transit"
83+
return None

0 commit comments

Comments
 (0)