diff --git a/gtfs_rt_comparison/compare_vp_tu.ipynb b/gtfs_rt_comparison/compare_vp_tu.ipynb new file mode 100644 index 000000000..9cc492df4 --- /dev/null +++ b/gtfs_rt_comparison/compare_vp_tu.ipynb @@ -0,0 +1,2217 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "724f15b2", + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "import datetime\n", + "import pandas as pd\n", + "from jinja2 import Environment, FileSystemLoader, StrictUndefined\n", + "\n", + "from calitp_data_analysis import gcs_pandas\n", + "from calitp_data_analysis.sql import get_engine\n", + "from shared_utils.catalog_utils import get_catalog\n", + "from shared_utils.rt_dates import DATES\n", + "\n", + "g = gcs_pandas.GCSPandas()\n", + "\n", + "# get jinja environment for substituting in queries\n", + "jinja_env = Environment(\n", + " loader=FileSystemLoader(Path(\"queries\")),\n", + " undefined=StrictUndefined,\n", + " autoescape=False, # nosec B701 - rendering SQL, not markup\n", + ")\n", + "\n", + "jinja_env.filters[\"sql_in\"] = lambda values: \"(\" + \", \".join(f\"'{v}'\" for v in values) + \")\"\n", + "jinja_env.filters[\"sql_in_timestamps\"] = (\n", + " lambda values: \"(\" + \", \".join(f\"timestamp('{v}')\" for v in values) + \")\"\n", + ")\n", + "\n", + "# bigquery engine from calitp_date_analysis\n", + "engine = get_engine()\n", + "\n", + "def run_query(name: str, **params) -> pd.DataFrame:\n", + " \"\"\"Render queries/.sql with params and run it against BigQuery.\"\"\"\n", + " return pd.read_sql_query(jinja_env.get_template(f\"{name}.sql\").render(**params), engine)" + ] + }, + { + "cell_type": "markdown", + "id": "505bd04b", + "metadata": {}, + "source": [ + "## Constants" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "dee4c1f7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "85\n" + ] + } + ], + "source": [ + "# The feed to examine TODO: support multiple\n", + "GTFS_DATASET_NAME = \"Bay Area 511 SamTrans Schedule\"\n", + "# Sample dates to look at\n", + "dates_values = DATES.values()\n", + "print(len(dates_values))" + ] + }, + { + "cell_type": "markdown", + "id": "6808b264", + "metadata": {}, + "source": [ + "## Get data" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "7d247387", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/mrtopsyt/data-analyses/.venv/lib/python3.11/site-packages/google/cloud/bigquery/client.py:613: UserWarning: Cannot create BigQuery Storage client, the dependency google-cloud-bigquery-storage is not installed.\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
tu_base64_urlschedule_feed_keydate
0aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG...4dfefaf518766d1cfc3d254a65e4295e2026-06-10
1aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG...0215a1c49f081dc0a7eb1e118ea912292024-12-11
2aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG...15b3a87c05331f6d0e0b73cf340bfc5b2025-02-12
3aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG...1d276b06a3c6ff0d661e25035982ead72024-03-13
4aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG...25c80082b079cb7fab299c7015aa74702023-07-12
............
80aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG...c1c5d0b862094fbf640e18075b2908612025-09-30
81aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG...c1c5d0b862094fbf640e18075b2908612025-09-24
82aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG...c7ab222b14ca19ad45369c228ac167832025-09-23
83aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG...c7bc4bc9de15ff685470b0de7578d3132026-01-14
84aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG...c7bc4bc9de15ff685470b0de7578d3132025-12-17
\n", + "

85 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " tu_base64_url \\\n", + "0 aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG... \n", + "1 aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG... \n", + "2 aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG... \n", + "3 aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG... \n", + "4 aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG... \n", + ".. ... \n", + "80 aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG... \n", + "81 aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG... \n", + "82 aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG... \n", + "83 aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG... \n", + "84 aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG... \n", + "\n", + " schedule_feed_key date \n", + "0 4dfefaf518766d1cfc3d254a65e4295e 2026-06-10 \n", + "1 0215a1c49f081dc0a7eb1e118ea91229 2024-12-11 \n", + "2 15b3a87c05331f6d0e0b73cf340bfc5b 2025-02-12 \n", + "3 1d276b06a3c6ff0d661e25035982ead7 2024-03-13 \n", + "4 25c80082b079cb7fab299c7015aa7470 2023-07-12 \n", + ".. ... ... \n", + "80 c1c5d0b862094fbf640e18075b290861 2025-09-30 \n", + "81 c1c5d0b862094fbf640e18075b290861 2025-09-24 \n", + "82 c7ab222b14ca19ad45369c228ac16783 2025-09-23 \n", + "83 c7bc4bc9de15ff685470b0de7578d313 2026-01-14 \n", + "84 c7bc4bc9de15ff685470b0de7578d313 2025-12-17 \n", + "\n", + "[85 rows x 3 columns]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get feed key for the target feed:\n", + "feed_keys_to_dates = run_query(\n", + " \"feed_keys\",\n", + " DATES=dates_values,\n", + " GTFS_DATASET_NAME=GTFS_DATASET_NAME,\n", + ")\n", + "feed_keys_to_dates" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "c6cb00ad", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
tu_base64_urlservice_daten_stop_time_metrics
0aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG...2025-12-1759708
1aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG...2026-01-1459560
2aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG...2026-04-0836667
3aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG...2026-06-1060858
\n", + "
" + ], + "text/plain": [ + " tu_base64_url service_date \\\n", + "0 aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG... 2025-12-17 \n", + "1 aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG... 2026-01-14 \n", + "2 aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG... 2026-04-08 \n", + "3 aHR0cHM6Ly9hcGkuNTExLm9yZy90cmFuc2l0L3RyaXB1cG... 2026-06-10 \n", + "\n", + " n_stop_time_metrics \n", + "0 59708 \n", + "1 59560 \n", + "2 36667 \n", + "3 60858 " + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Count fct_stop_time_metrics rows per trip updates feed per date\n", + "tu_urls = feed_keys_to_dates[\"tu_base64_url\"].dropna().unique()\n", + "\n", + "stop_time_metrics_counts = run_query(\n", + " \"stop_time_metrics_counts\",\n", + " DATES=dates_values,\n", + " TU_URLS=tu_urls,\n", + ")\n", + "stop_time_metrics_counts" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "994c75ac", + "metadata": {}, + "outputs": [], + "source": [ + "# Get the VP based stop times\n", + "gtfs_analytics_catalog = get_catalog(\"gtfs_analytics_data\")\n", + "stop_time_metrics_counts[\"vp_uri\"] = (\n", + " f\"{gtfs_analytics_catalog['rt_stop_times']['dir']}{gtfs_analytics_catalog['rt_stop_times']['stage3']}_\" \n", + " + stop_time_metrics_counts[\"service_date\"].astype(str)\n", + " + \".parquet\"\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "8999c6da", + "metadata": {}, + "outputs": [], + "source": [ + "# The TU based stop times, plus the trips to filter the statewide VP files with.\n", + "# Both are limited to the dates that actually have stop time metrics.\n", + "stm_dates = stop_time_metrics_counts[\"service_date\"].astype(str).tolist()\n", + "stm_urls = stop_time_metrics_counts[\"tu_base64_url\"].unique()\n", + "\n", + "operator_trips = run_query(\n", + " \"operator_trips\",\n", + " DATES=stm_dates,\n", + " GTFS_DATASET_NAME=GTFS_DATASET_NAME,\n", + ")\n", + "\n", + "tu_stop_times = run_query(\n", + " \"tu_stop_times\",\n", + " DATES=stm_dates,\n", + " TU_URLS=stm_urls,\n", + " GTFS_DATASET_NAME=GTFS_DATASET_NAME,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "79951035", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
trip_instance_keyservice_datestop_idstop_sequencetu_arrival_timen_predictions
00008d298e3f42cea9e00cfddb076fdd02026-06-1034108112026-06-10 07:18:0079
10008d298e3f42cea9e00cfddb076fdd02026-06-1034118522026-06-10 07:18:1785
20008d298e3f42cea9e00cfddb076fdd02026-06-1034162232026-06-10 07:22:0090
30008d298e3f42cea9e00cfddb076fdd02026-06-1034106042026-06-10 07:18:2690
40008d298e3f42cea9e00cfddb076fdd02026-06-1034195752026-06-10 07:19:2090
\n", + "
" + ], + "text/plain": [ + " trip_instance_key service_date stop_id stop_sequence \\\n", + "0 0008d298e3f42cea9e00cfddb076fdd0 2026-06-10 341081 1 \n", + "1 0008d298e3f42cea9e00cfddb076fdd0 2026-06-10 341185 2 \n", + "2 0008d298e3f42cea9e00cfddb076fdd0 2026-06-10 341622 3 \n", + "3 0008d298e3f42cea9e00cfddb076fdd0 2026-06-10 341060 4 \n", + "4 0008d298e3f42cea9e00cfddb076fdd0 2026-06-10 341957 5 \n", + "\n", + " tu_arrival_time n_predictions \n", + "0 2026-06-10 07:18:00 79 \n", + "1 2026-06-10 07:18:17 85 \n", + "2 2026-06-10 07:22:00 90 \n", + "3 2026-06-10 07:18:26 90 \n", + "4 2026-06-10 07:19:20 90 " + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tu_stop_times.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "a1a58f2c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
trip_instance_keyservice_datestop_idstop_sequenceschedule_arrival_timeschedule_departure_time
000003a69e91a4ef117840d081cdbe3552025-12-1733201412025-12-18 00:15:002025-12-18 00:15:00
100003a69e91a4ef117840d081cdbe3552025-12-1733217022025-12-18 00:17:012025-12-18 00:17:01
200003a69e91a4ef117840d081cdbe3552025-12-1733223232025-12-18 00:18:032025-12-18 00:18:03
300003a69e91a4ef117840d081cdbe3552025-12-1733223842025-12-18 00:18:422025-12-18 00:18:42
400003a69e91a4ef117840d081cdbe3552025-12-1733221552025-12-18 00:19:492025-12-18 00:19:49
\n", + "
" + ], + "text/plain": [ + " trip_instance_key service_date stop_id stop_sequence \\\n", + "0 00003a69e91a4ef117840d081cdbe355 2025-12-17 332014 1 \n", + "1 00003a69e91a4ef117840d081cdbe355 2025-12-17 332170 2 \n", + "2 00003a69e91a4ef117840d081cdbe355 2025-12-17 332232 3 \n", + "3 00003a69e91a4ef117840d081cdbe355 2025-12-17 332238 4 \n", + "4 00003a69e91a4ef117840d081cdbe355 2025-12-17 332215 5 \n", + "\n", + " schedule_arrival_time schedule_departure_time \n", + "0 2025-12-18 00:15:00 2025-12-18 00:15:00 \n", + "1 2025-12-18 00:17:01 2025-12-18 00:17:01 \n", + "2 2025-12-18 00:18:03 2025-12-18 00:18:03 \n", + "3 2025-12-18 00:18:42 2025-12-18 00:18:42 \n", + "4 2025-12-18 00:19:49 2025-12-18 00:19:49 " + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get the scheduled stop times.\n", + "# One feed version can span several service dates, so this is fewer feeds than dates.\n", + "schedule_feed_keys = feed_keys_to_dates.loc[\n", + " feed_keys_to_dates[\"date\"].astype(str).isin(stm_dates), \"schedule_feed_key\"\n", + "].unique()\n", + "\n", + "schedule_feeds = run_query(\"schedule_feeds\", FEED_KEYS=schedule_feed_keys)\n", + "\n", + "schedule_stop_times = run_query(\n", + " \"schedule_stop_times\",\n", + " DATES=stm_dates,\n", + " GTFS_DATASET_NAME=GTFS_DATASET_NAME,\n", + " FEED_VALID_FROMS=schedule_feeds[\"feed_valid_from\"].astype(str),\n", + " FEED_KEYS=schedule_feed_keys,\n", + ")\n", + "schedule_stop_times.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "d26c12c7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "source vp_only tu_only both schedule_only\n", + "service_date \n", + "2025-12-17 1594 10608 49100 2212\n", + "2026-01-14 1151 10809 48751 2775\n", + "2026-04-08 19911 6742 29925 6907\n", + "2026-06-10 1465 13132 47726 3871\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
trip_instance_keystop_sequencevp_arrival_timestop_metersshape_array_keystop_idtu_arrival_timen_predictionssourceschedule_arrival_timeschedule_departure_timehas_scheduleservice_date
000003a69e91a4ef117840d081cdbe35512025-12-17 00:18:171.613893fd6a664f2ca715017d46996e1cf0c8e0332014NaTNaNvp_only2025-12-18 00:15:002025-12-18 00:15:00True2025-12-17
100003a69e91a4ef117840d081cdbe35522025-12-17 00:20:53734.456238fd6a664f2ca715017d46996e1cf0c8e0332170NaTNaNvp_only2025-12-18 00:17:012025-12-18 00:17:01True2025-12-17
200003a69e91a4ef117840d081cdbe3553NaTNaNNaN332232NaTNaNschedule_only2025-12-18 00:18:032025-12-18 00:18:03True2025-12-17
300003a69e91a4ef117840d081cdbe35542025-12-17 00:21:281359.918670fd6a664f2ca715017d46996e1cf0c8e0332238NaTNaNvp_only2025-12-18 00:18:422025-12-18 00:18:42True2025-12-17
400003a69e91a4ef117840d081cdbe35552025-12-17 00:22:401772.076525fd6a664f2ca715017d46996e1cf0c8e0332215NaTNaNvp_only2025-12-18 00:19:492025-12-18 00:19:49True2025-12-17
\n", + "
" + ], + "text/plain": [ + " trip_instance_key stop_sequence vp_arrival_time \\\n", + "0 00003a69e91a4ef117840d081cdbe355 1 2025-12-17 00:18:17 \n", + "1 00003a69e91a4ef117840d081cdbe355 2 2025-12-17 00:20:53 \n", + "2 00003a69e91a4ef117840d081cdbe355 3 NaT \n", + "3 00003a69e91a4ef117840d081cdbe355 4 2025-12-17 00:21:28 \n", + "4 00003a69e91a4ef117840d081cdbe355 5 2025-12-17 00:22:40 \n", + "\n", + " stop_meters shape_array_key stop_id tu_arrival_time \\\n", + "0 1.613893 fd6a664f2ca715017d46996e1cf0c8e0 332014 NaT \n", + "1 734.456238 fd6a664f2ca715017d46996e1cf0c8e0 332170 NaT \n", + "2 NaN NaN 332232 NaT \n", + "3 1359.918670 fd6a664f2ca715017d46996e1cf0c8e0 332238 NaT \n", + "4 1772.076525 fd6a664f2ca715017d46996e1cf0c8e0 332215 NaT \n", + "\n", + " n_predictions source schedule_arrival_time schedule_departure_time \\\n", + "0 NaN vp_only 2025-12-18 00:15:00 2025-12-18 00:15:00 \n", + "1 NaN vp_only 2025-12-18 00:17:01 2025-12-18 00:17:01 \n", + "2 NaN schedule_only 2025-12-18 00:18:03 2025-12-18 00:18:03 \n", + "3 NaN vp_only 2025-12-18 00:18:42 2025-12-18 00:18:42 \n", + "4 NaN vp_only 2025-12-18 00:19:49 2025-12-18 00:19:49 \n", + "\n", + " has_schedule service_date \n", + "0 True 2025-12-17 \n", + "1 True 2025-12-17 \n", + "2 True 2025-12-17 \n", + "3 True 2025-12-17 \n", + "4 True 2025-12-17 " + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get matching VP stop times\n", + "\n", + "VP_COLS = [\"trip_instance_key\", \"stop_sequence\", \"arrival_time\", \"stop_meters\", \"shape_array_key\"]\n", + "\n", + "# trip_instance_key is unique per trip per service date, so it both filters the\n", + "# statewide VP files down to this operator and carries the date back onto the\n", + "# joined rows. Pushing the filter into the read gets ~200k rows off GCS instead\n", + "# of the ~9.6M statewide rows these four files hold.\n", + "trip_dates = operator_trips.set_index(\"trip_instance_key\")[\"service_date\"]\n", + "\n", + "vp_stop_times = g.read_parquet(\n", + " stop_time_metrics_counts[\"vp_uri\"].tolist(),\n", + " columns=VP_COLS,\n", + " filters=[(\"trip_instance_key\", \"in\", set(trip_dates.index))],\n", + ").rename(columns={\"arrival_time\": \"vp_arrival_time\"})\n", + "\n", + "vp_tu_stop_times = vp_stop_times.merge(\n", + " tu_stop_times.drop(columns=[\"service_date\"]),\n", + " on=[\"trip_instance_key\", \"stop_sequence\"],\n", + " how=\"outer\",\n", + " indicator=\"source\",\n", + ")\n", + "vp_tu_stop_times[\"source\"] = vp_tu_stop_times[\"source\"].cat.rename_categories(\n", + " {\"left_only\": \"vp_only\", \"right_only\": \"tu_only\"}\n", + ")\n", + "\n", + "# Outer again, so scheduled stops that neither VP nor TU ever reported survive.\n", + "vp_tu_stop_times = vp_tu_stop_times.merge(\n", + " schedule_stop_times.drop(columns=[\"service_date\"]),\n", + " on=[\"trip_instance_key\", \"stop_sequence\"],\n", + " how=\"outer\",\n", + " indicator=\"has_schedule\",\n", + " suffixes=(\"\", \"_schedule\"),\n", + ")\n", + "vp_tu_stop_times[\"has_schedule\"] = vp_tu_stop_times[\"has_schedule\"] != \"left_only\"\n", + "# The two stop_id columns agree wherever both are populated, so keep one.\n", + "vp_tu_stop_times[\"stop_id\"] = vp_tu_stop_times[\"stop_id\"].fillna(\n", + " vp_tu_stop_times[\"stop_id_schedule\"]\n", + ")\n", + "vp_tu_stop_times = vp_tu_stop_times.drop(columns=[\"stop_id_schedule\"])\n", + "# Rows only the schedule knows about have no VP/TU source yet.\n", + "vp_tu_stop_times[\"source\"] = (\n", + " vp_tu_stop_times[\"source\"].cat.add_categories(\"schedule_only\").fillna(\"schedule_only\")\n", + ")\n", + "\n", + "vp_tu_stop_times[\"service_date\"] = vp_tu_stop_times[\"trip_instance_key\"].map(trip_dates)\n", + "\n", + "print(\n", + " vp_tu_stop_times.groupby([\"service_date\", \"source\"], observed=True)\n", + " .size()\n", + " .unstack(fill_value=0)\n", + ")\n", + "vp_tu_stop_times.head()\n" + ] + }, + { + "cell_type": "markdown", + "id": "1a6d1268", + "metadata": {}, + "source": [ + "## Analysis\n", + "\n", + "### Data availability" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "2568c165", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABv4AAAMdCAYAAABTGwGjAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd4FOX6//HPpicbSIfQQuiEJkiRJk2QIgjSEUE6IlaOnmNDwQNiAWyg0mwoYACxUSxI/dIsCIIoKiQoSIcAIWWTzO8PftnDkkLCzpLd5P26Li7deWbuvXczu7kz98wzFsMwDAEAAAAAAAAAAADwaF5FnQAAAAAAAAAAAAAA59H4AwAAAAAAAAAAAIoBGn8AAAAAAAAAAABAMUDjDwAAAAAAAAAAACgGaPwBAAAAAAAAAAAAxQCNPwAAAAAAAAAAAKAYoPEHAAAAAAAAAAAAFAM0/gAAAAAAAAAAAIBigMYfAAAAAAAAAAAAUAzQ+AMAACiEsWPHKjg4uKjTgBtJTExUcHCwpk6del2fd+PGjQoODtYHH3zgUc9Zp04ddenSxcSsLimK98NduOo9hWsFBwdr7Nix1+W5iup7ylMVl/erS5cuqlOnTlGnkcPUqVMVHBysxMTEok4FAACgWKLxBwAAir2vv/5awcHBmjx5co6xHTt2KDg4WOHh4bp48WKO8V69eqlUqVI6efLk9Uj1mq1Zs0bBwcH697//ne96U6ZMUXBwsOLj4yX97+Bb9r9SpUqpUqVK6tGjh1avXn1NudSpU8chZn7/Nm7caD/Amt8B8Dp16rjlwUsUX4mJiZo6dap2795d1KlIuvRZ/fzzz4s6DQAochs3btTUqVN19uzZok4FAADALfkUdQIAAACu1qJFC/n4+Gjz5s05xjZu3CgfHx+lp6dr+/btat++vX0sIyNDW7duVZ06dRQZGXk9Uy60Tp06qVy5cvroo480depU+fr65ljHMAwtWrRIoaGhuv322x3GnnrqKcXGxiojI0N//PGH3n77bfXr109vv/22+vfvX6hcXnjhBSUnJ9sf//rrr5o+fbp69Oihnj17Oqxbq1YtpaamFio+cD0kJiZq2rRpqly5sho0aFDU6WjatGkaPHiwevTokWNs586dslgsRZAVAHf22WefyTCMok7DdJs2bdK0adN01113KTQ0tKjTAQAAcDs0/gAAQLEXHBysxo0b64cfftDFixcVFBRkH9u0aZM6dOigXbt2aePGjQ6Nvx9++EHJycm6+eabiyLtQvH29tbgwYM1ffp0rVq1KkeDTZLWr1+vQ4cOafTo0QoICHAYu/XWW3XjjTfaH/fs2VM333yzXnzxxUI3/q5sTGzcuFHTp09XvXr1NHDgwBzrM9UX4Bx/f/+iTqFEO3/+vEqVKlXUaXiszMxMpaWlOfxuRk7Xsp/5+fm5KBsAAAC4M6b6BAAAJcLNN9+s9PR0bdu2zb4sIyND27ZtU+vWrdW6dWtt2rTJYZvsx23atMkRLykpSQ8++KBiY2MVERGhjh076rvvvsuxnmEYmjdvnlq3bq2oqCiVLVtWXbt21YYNGxzWu/x+QqtXr1abNm0UERGhatWq6cknn1RGRsZVX+PQoUNlsVi0cOHCXMezlw8dOvSqsRo1aqTw8HAdOHDgquu6m7lz5+r2229XjRo1FBYWpmrVqmnkyJG5Nhizpxjdvn27OnfurDJlyigmJkbjx4/XhQsXcqy/ZcsWdezYUZGRkapSpYomTJiQ63p5OX36tP7zn/+ofv36ioiIUExMjFq3bq1XXnklx7qffPKJunTpogoVKigqKkqNGjXSI488ovT09BzrLly4UE2aNFF4eLji4uL08ssv5/r8P/74owYOHKiYmBiFh4erUaNGevHFF3Pdv7744gu1bNlSERERqlWrlp599tlc18vvXk2FufecK3LLy99//61x48YpLi5O4eHhio2N1S233KIPP/xQkvTBBx+oW7dukqR77rnHPjXt5a8lOTlZzzzzjOrXr6/w8HBVrVpVo0eP1qFDhxye6/J7D7755ptq2LChIiIi1LBhQ7355ptXzTX7u0GSPvzwQ4epcrPl9j5nL/v555/VvXt3lS1bVrGxsXr88ceVkZGh1NRUPfHEE6pRo4YiIiJ066236tdff83x/GlpaXrppZfUpEkTRUREqEKFCurXr5927drlsF5WVpZmz56tm266SdHR0SpXrpwaNWqke++9Vzab7aqvMyMjQzNnzlTjxo3tn42BAwdqz549ua5fkM+HYRh655131K5dO5UtW1Zly5ZVs2bN9N///te+TmH33+zvjHXr1qlTp04qW7as+vXrd9XXl59169apffv2ioqKUtWqVfXoo486fK/MmjVLwcHB+vbbb3Nsm5aWppiYGPv+WhAF/R2zefNm9ejRQ+XLl1dkZKRatWql9957L8d6eX3Oc7vv5gcffKDg4GCtW7dOzz//vP278OOPP8435+Lyvb5s2TJ16tRJ0dHRioqKUrt27bRixYo8X8OV+9m8efMUHByslStX5tgmKytLNWvWVIsWLezL8rrH359//ql77rlHNWvWVFhYmKpXr64BAwZo586dDusV5ns5N1lZWZo+fbrq1q2riIgINW3aVB999FGu6/7222966KGH1KRJE/v707p1a7377rsO640dO1bTpk2TJNWtW9f+fXj5/RiTkpI0ceJENWjQQOHh4apcubKGDRumgwcPFihvAAAAT8cVfwAAoERo27atpk+fro0bN6pDhw6S/ndFX+vWrVWqVCn9+9//VnJysqxWq6RLjT+LxaLWrVvniNerVy9FRkbqscce0+nTpzVr1iz16dNHe/fudTgjf9SoUVq6dKl69eqlu+66S+np6froo490++23a9GiRbrtttsc4n711VeaN2+eRo4cqSFDhmjlypV69dVXFRoaqkcffTTf11i1alW1atVKX3/9tY4eParo6Gj7WFJSkj7//HPVr19fjRo1uur7dfLkSZ09e1Zly5a96rru5rXXXlPTpk01btw4hYWF6ZdfftF7772nDRs2aPv27YqIiHBYf/fu3erXr5/uuusu9e/fX5s2bdJ7770ni8WiWbNm2df77rvv1KNHDwUHB+vhhx9WaGioli1bpjFjxhQ4tyFDhuj//u//NHLkSNWrV08pKSn67bfftGnTJj300EP29SZNmqTp06erdu3aGj9+vKKjo3Xw4EF9+umneuqppxyu4liwYIGOHz+uoUOHKiQkRB999JEmTpyoChUqOFytuWbNGt15552qWrWqHnjgAYWFhWnHjh2aMmWKdu/e7XBw/rPPPtPgwYNVuXJlPfbYY/Lx8dHChQv15ZdfFuZHUWDXM7eMjAz16NFD//zzj0aPHq3q1avr3Llz2rNnj7Zs2aLBgwerVatWeuSRRzR9+nQNHz5crVq1kiSVKVNGkmSz2dSrVy9t3bpVvXr10v33368///xT8+fP19q1a7Vp0yZVqFDB4XnfeustHTt2TCNGjFCpUqW0dOlSPfroozpz5oyeeOKJPPONjIzU/PnzNWrUKLVs2VIjRowo8Pt65MgR9ejRQ3369FGvXr20du1avf76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Ll1a0qVpCI8fP35NOWdfifWvf/3LYXmXLl3UoEEDrVy5UllZWQ5j/fv3d7gKMHvfycjI0KpVq64pj6spX768evfu7bCsRYsWMgxD99xzj8O+lH1V4+X7zZIlS1SzZk01bNjQ4eeSnp6uDh06aOvWrUpJSZF06X39559/tGXLlkLn+dlnn0mS/v3vfzvkVL9+fXXt2lVbt27ViRMnJBX88xEfHy/p0lSe2VcwZrvycWHVr1/f4X6wzqhRo0aO+6Jm71eff/65fdnw4cOVlpbmME1iYmKi1q9fr/79++d4L/JSkN8xO3fu1F9//aUhQ4aoXLly9nX9/Pz00EMPKSsrK9epJgtj1KhRhbqnX3H4XrdYLLrzzjsdPksnT55Ut27ddP78ee3YscNhm7z2s8GDBystLU3Lly+3L7tw4YI+//xzderUyX5lcm52796tffv26a677rJfIXe57M9GYb6X87Jy5UoZhqH7779f3t7e9uUNGzbMceWq9L+fsSSlpqbq1KlTOn36tG655RadO3dOv/32W77PJ12a3vejjz5Sq1atVK5cOYe8g4KC1LRpU61du/aqcQAAADwdU30CAIASo02bNtqyZYu2bt2qdu3aadu2bfapo6RLB743btwo6X/397v55ptzjVWlShWHx9lTTZ0+fdq+7LffftP58+dVtWrVPHM6fvy4wwHH3Ka/Cg8Pt8e+/L5euQkMDFTfvn21YMECbd++XTfddJP27dun7777Tr1797bHutLMmTNVo0YNWSwWhYaGqlatWgoMDMz3ua63KxteeVm/fr2ef/55ff/990pNTXUYO3v2bI71r/aeS1JCQoIkqWbNmjnWjYuLK1Befn5+euGFF/Tvf/9bdevWVe3atdW2bVt1797d4eDun3/+KYvFovr16xco7pX7Ynb+V+6LkjRu3Lg842Q3wbLvgZTba61du3aBciqM651bTEyMHn30Uc2YMUPVq1dXgwYN1K5dO91xxx1q3LhxgWIkJCSoXLlyCgsLyzEWFxen3bt36+TJkw4H4GvVqpXrutnxXOHyBk+20NDQXMeyl1+536SkpOT6Gcl26tQpVaxYUZMmTdLAgQN16623qly5crr55pvVpUsX9erVy2Fq2twkJibKy8srz/foiy++UGJioqKiogr8+fjjjz8UHR3tkumKq1evblqs3F5zdHS0QkNDHfaLNm3aqEaNGnr//fftn5WFCxfKMIwCT/MpFex3TPbz5vbdlr3M2XulFfY99PTv9d9++02GYdinxs3NlSci5PUederUSVFRUVq8eLFGjRolSfr000+VnJysQYMG5ZtvdmP/8qlzc1OY7+W8XO37+soG3IULF/Tcc8/p448/1t9//51jm9x+zlc6ceKETp8+rbVr1+b5veVs4x8AAMAT0PgDAAAlRps2bfT8889r06ZNKlWqlP3+ftlat26txx57TBcuXNCmTZvk5eVlvwrmSpefvX45wzAc/j8yMlLvvPNOnjnVqVOnQHGvjJ2foUOHasGCBVq4cKFuuukm+3147r777jy3adKkSb4HJF0p+0qVixcv5rlOcnKywxVeefnhhx/Us2dPVa1aVZMnT1ZsbKwCAwNlsVh0991357gKSzLnPS+oUaNGqXv37lqzZo02b96sTz75RHPmzFGfPn303nvv2dfL7cq+vOSXf7bs1zF16lQ1aNAg13UuvydkYeSXZ0ZGRpHmlpdnnnlGQ4cO1Zo1a7Rlyxa99957euWVV/Twww/rv//9r6nPVZTy2zcK+h1Wt25dPf/883nGyf5c3nTTTfr555/1zTffaOPGjdq4caPi4+P1wgsv6Ouvv87zpINrUZjPR0Fi5SWv/bcwV6qZadiwYXryySe1c+dO3XDDDfrwww914403FvgkAck133d5vYeZmZl5blOYE0uKw/e6YRiyWCxasWJFnrld2WzMaz/z8fFR//79NXv2bP3555+qVq2aFi1apLCwsBz3/btWRfG9PGLECK1evVrDhw9X69atFR4eLm9vb3355ZeaNWtWrj/nvPJu3769JkyYYGp+AAAAnoTGHwAAKDFuuukmBQQEaOPGjSpVqpQCAwMdrvBp3bq1MjIytGnTJm3btk0NGjTI9YqegqpevbrWrFmjpk2bXvVKPTM1btxYdevW1ccff6znnntOixcvVqVKlUybms5skZGRCg4OznMarxMnTujUqVNq0qTJVWPFx8crMzNTK1ascDjbPzk5uUBXC+Ql++qo/fv35xjbt29foWJFR0dr2LBhGjZsmDIzMzVq1CgtXbpUDzzwgBo3bqzq1avrq6++0s8//1yg11wQ1apVk3TpQPLV9oPsKwhze62//vprjmXZn5EzZ844XEWWmpqqo0eP5nvFq6tzu1qscePGady4cUpNTVXPnj318ssv6/7771eZMmXybQhVqVJFX3/9tc6ePWu/Uu7yPEqXLp2jUZ3b/p297+R3RV1Rqlatmk6ePKm2bdsW6CqZ4OBg9erVS7169ZIkzZ07VxMmTND777+vhx56KM/tYmNjlZWVpd9++y3H9IPZP9fsfaugn48aNWroiy++0LFjx/K96s/Z/ddZue0XR48e1dmzZ3PsF4MHD9bkyZP13nvvqXv37vrrr79yTDdrhuzPWW7fbdk/j8uvNA4LC9OZM2dyrOvsVYHZisP3erVq1fT111+rYsWKplw5PXjwYM2ePVuLFi3S8OHDtWnTJg0fPlz+/v75bpc9w8Du3bvzXa8w38t5ufz7+srP0ZXf12fPntXq1as1aNAgvfbaaw5j69atyxE7r+/nqKgohYaG6vz5825b8wAAAFwPzHEAAABKDH9/fzVr1kw7d+7UmjVr1KxZM4cp6OrWravw8HC98sorSk5OznOaz4IaNGiQsrKy9Mwzz+Q6fuzYMafi52fo0KE6d+6cxo8fr+PHj2vw4MFuO72Vt7e3unbtql9++SXXe+/MmjVL0qV7UxUklpTzio6XXnqpQFcL5KVs2bJq1qyZVq5cqd9//92+PD09XbNnzy5QjIsXL+a4qtHb29ve6Mg+cN6/f39J0qRJk5Senp4jzrVcrdKxY0dFRUVp5syZDlM5ZktJSdH58+clSY0aNVKFChW0cOFCnTx50r7OuXPntGDBghzbZh9IvvLgbEGv0HBlbrlJSkqSzWZzWBYQEGCfcjG7kZDdrM+todG9e3dlZWVp5syZDsu/+uor7dq1S926dcvxeYuPj9fhw4ftj7P3nez9/2qCg4NzzcWV7rzzTh07dkyvv/56ruOXf4dd/vPI1rBhQ0m5v4eXy77H3fTp0x32771792rVqlVq0aKFoqKiJBX885G93sSJE3Psh5c/h7P7r7N+//13h3v5SbLvV1d+50VGRqp79+5aunSp5syZo6CgIPvrNFPDhg1VqVIlffDBBw4/Y5vNpldeeUUWi8XhyrLq1atr//79OnLkiH1ZWlqa5s6da0o+xeF7PXsKzkmTJuV6JWRh64EGDRqoXr16+uijj7R48WJlZWVp8ODBV92ufv36iouL08KFC/XLL7/kGM9+jwvzvZyXbt26yWKx6PXXX3d4zT/99FOOz1teP+OjR4/q3XffzRE7r+9nLy8v9e/fX99//71WrFiRa17Xem9XAAAAT8IVfwAAoERp06aNNm7cqG3btunJJ590GLNYLGrZsqW++OIL+7rOuOOOOzRkyBDNmTNHu3btUpcuXRQREaHDhw9rx44dOnDggPbs2ePUc+Rl4MCBmjhxolasWCGLxaIhQ4Y4HXPjxo3q1q2bBg8erDlz5piQ5f88++yz2rhxo/r06aPBgwerQYMGSk1N1fr16/X111+rdevWuuuuu64ap0ePHpo1a5Z69+6tESNGyNfXV+vWrdOePXvs92G8VtOmTVPXrl3VsWNHjRkzRqGhoVq2bFmBprOULt1bqUuXLurRo4fq1Kmj0NBQ/fbbb5o/f75iY2PVsmVLSZemXZ0wYYJmzpypVq1aqU+fPipbtqwSExP1ySefaP369TmuMrsaq9WqefPmaeDAgWrUqJGGDh2qqlWrKikpSfv379dnn32mRYsWqU2bNvL29tbzzz+voUOHql27dho2bJh8fHz0/vvvKzw8XH/99ZdD7Pbt26tGjRqaMmWKTp8+rcqVK2vr1q367rvvCvSeuzK33GzcuFH333+/evbsqZo1a8pqtWrnzp1677331LRpU/v9qGrXrq1SpUpp3rx5CgwMVEhIiKKiotSuXTvdddddWrRokWbOnKnExES1atVKBw4c0Lx581SmTBlNmjQpx/NWr15d7dq108iRI1WqVCnFx8frhx9+0H/+8x9VrFjxqnk3bdpU69at08yZM1WxYkVZLBb169fvqts5495779W3336rJ598Uhs2bFDbtm1VqlQp/fXXX9qwYYP8/f21evVqSZeuNG7WrJmaNGmicuXK6ejRo3rnnXfk5+envn375vs8HTp0UO/evbVs2TKdPXtWXbp00bFjxzRv3jwFBARo+vTp9nUL+vno3bu3Pv30Uy1atEh//vmnunXrptDQUP3xxx/65ptv9N1330lyfv+9UnBwsGJiYnJtquSmbt26GjVqlIYNG6Zq1app48aN+uSTT9S6detc37fhw4fr448/1urVqzV48GCVLl260Dlejbe3t2bMmKFBgwapTZs2Gj58uEqVKqXly5drx44deuSRRxzuPzd27FgtW7ZM3bt318iRI2Wz2bR48WLTpkQtDt/rjRs31hNPPKHnnntOLVq00B133GH/nPz000/68ssvC93YHzx4sB5//HG9/PLL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qGnTpjp16pReeOEFtW3bVjt27FBUVJQkacyYMXrllVe0YcMGtW3btkD5ASh+qHvyRt2T08svv6zz58/bHz/88MMKCgpyaOJFRkZet3yuBbUPtQ+1DwAAAABPQuPPBH5+fvY/LC//I3TZsmWKi4uTt7d3EWZXdC5cuKD3339f8+bNK+pU8nT33XfriSee0H/+8x/5+vpel+csX768Wrdurfj4+Dwbf507d1ZISIh9WZkyZdSsWTNJUqtWrZSamqopU6bop59+0o033mhqfikpKQoMDMxzeXYe7mTBggWqVq2aGjVqdF2eb+3atfLy8lJiYmKeB7+qVq2qqlWrOix7+umnVbt2bdWvX99heUBAwDW/r9WqVct321deeUXh4eF677337N9VJ0+e1EsvvaR77rlH/v7+atGihX788Uf5+PzvV0Lz5s1Vu3ZtLV68WA888IAkKTQ0VD179tSbb77JwS+gBKPuyR11T+6ubOSWKlVKwcHBblVPUPtcHbUPtQ8AAAAAz8FUnybp27evPv30U9lsNvuy+Ph49e/fP8e6v/32m+6++27VqlVLUVFRaty4sV577TX7lFmJiYn2M8WHDBlin8YmMTFRkpSWlqbJkyerXr16Cg8PV82aNXOdUmvjxo1q2bKlypQpo7Zt22rnzp0O44Zh6NVXX1XDhg0VHh6uevXqadasWTnifPHFF2rUqJEiIiLUtm1b/fDDDwV6Tz755BNJynGGryRlZGToqaeeUuXKlRUdHa2xY8c6nA0uXbpyYPDgwSpfvrzKlCmjnj17as+ePfbxOnXq6NChQ5o7d679Pfrggw8cYsyZM0dxcXEqX768Bg4cqBMnTjiMd+/eXUlJSblOm+VK/fv31+7du/Xbb785LN++fbsSEhI0YMCAfLfPbvYlJCTkuc6iRYvUqVMnVapUSRUrVlSXLl30/fffO6wzdepUlS1bVt9//706dOigiIgIzZ071z711Pbt29WjRw+VKVNGTz75pCTH6a6mTp2qSpUqOez3krR3714FBwfrm2++kSStWbNGPXr0UGxsrMqVK6d27dpddTqnwli8eLF69eqV62vbs2ePOnXqpKioKDVt2tSekzOu5SrLI0eOaMuWLVf92Zrt66+/Vvfu3eXn52df1rdvX509e1bbt2+XdOmg1uUHvqRLU6pFRkbqn3/+cVh+xx13aM2aNUU21SwA90DdkxN1T9Gj9qH2kah9AAAAAIDGn0m6deumtLQ0rV27VpK0b98+7dmzR3379s2x7pEjR1SjRg29/PLLWr58uUaMGKHnn39ezz//vCQpOjrafibtpEmT9O233+rbb79VdHS0JGnw4MGaNWuWhgwZouXLl2vKlClKTk52eI5jx47p0Ucf1UMPPaT3339fqampGjRokMNBikcffVRTpkzRnXfeqeXLl2vw4MGaOHGi5s+fb19n9+7dGjx4sKpXr65Fixbpzjvv1NChQ5WWlnbV92TdunW64YYbFBAQkGPsrbfe0m+//aa5c+dq8uTJ+vTTT3XffffZx8+fP6+uXbtq9+7deuWVVzR//nydPn1aXbp0sd8bb/HixSpbtqx69eplf48un/pq1apVWrVqlWbOnKkXX3xRmzdv1iOPPOKQR+nSpRUXF6dvv/32qq/HTL169ZKfn5/i4+MdlsfHxyskJERdunTJd/vshl+5cuXyXCcxMVGDBg3S+++/r7fffluVKlVS586d9fvvvzusl56erhEjRmjAgAH6+OOPdcstt9jHRowYobZt22rp0qUaNGhQjufo16+fzpw5k+OA0tKlSxUVFWW/50pCQoK6du2q+fPn68MPP1Tz5s3Vu3dvbdy4Md/XWRB//vmnEhMT1bx58xxjNptNI0eO1ODBg7V48WJFRUVp8ODBOnXqlH2drKwsZWRk5PsvMzPT6TyXLl2qrKws9evXL8fYgQMHVL58eYWFhal169b6/PPPCxz3oYceUunSpRUbG6v77rtPp0+fto8lJyfr77//Vs2aNR22qVmzpiwWi/bv359n3N9//10nTpzIMe1Ws2bNlJmZqU2bNhU4RwDFD3VPTtQ9RY/ah9qH2gcAAAAAmOrTNEFBQbrtttu0bNkydenSRUuXLtVNN92k2NjYHOu2b9/eflDAMAy1bNlSFy9e1Jw5c/TEE0/I399fN9xwg6ScU9l8++23WrNmjd5++22Hs+qvPMP+zJkzWrNmjerUqWPPr1u3bvruu+/UsmVLHThwQHPmzNGrr76qESNG2PNKSUnRtGnTNGLECHl5eWnGjBmqVKmSlixZYp+6KzAwUPfee+9V35Mff/zR/jqv5O/vnyPm+PHj9cQTT6hWrVpauHChDh06pO+++061a9eWJLVu3VpxcXGaPXu2pk2bphtuuEH+/v4O02BezjAMxcfHy9/fX9Klg0HTp09XVlaWw1nL9evXz3E2uKuFhobq1ltv1bJlyzRx4kRJUmZmplasWKGePXvac85mGIYyMjLs9/h76aWXVKVKFTVs2DDP53j88cft/5+VlaUOHTro+++/14cffqhJkybZx2w2m55++mmHg7U//fSTJGnkyJGaMGFCns9Rs2ZN3XDDDVq6dKm6du1qX758+XLdcccd9p/vPffc45BLmzZttG/fPr3zzjsO08Rdi+wrMerVq5djLD09Xc8++6z9wGiNGjVUt25dff311xo4cKAkady4cfrwww/zfY6YmBj98ssvTuUZHx+f63dCgwYNdOONNyouLk5JSUmaP3++Bg0apIULF+qOO+7IM56/v79GjRqljh07KiQkRN9//71eeukl/fjjj9qwYYN8fX2VlJQkSQ7TxkqXpukLCgrSmTNnco1tGIYeffRRlStXLsfButDQUFWqVEnff/99vvkBKN6oe3Ki7il61D7UPtQ+AAAAAEDjz1T9+vXTiBEjlJKSouXLlzv8wX+51NRUTZ8+XfHx8frrr78czka/cOFCjhvUX279+vUKCgrK9czZy5UrV85+8EuS/SDS4cOHJV06K12SevbsqYyMDPt67du318yZM/X3338rJiZG33//vbp16+Zwv55evXoV6ADY0aNHFRkZmetY165dc435ww8/qFatWtqyZYvq1Kljz1uSwsPD1b59e23duvWqzy1dOmB2eQOtdu3astlsOnHihMqWLWtfHhERoaNHj+Yb6/L3qKC8vLzynRapf//+Gjp0qH788UfdeOON2rBhg44fP57rNGnz5s1zuGdQ48aN9frrr+d6P5psv/76qyZNmqTt27c7TPV15VnvkvK8wvDyKwny0q9fPz3//PP2++B8//33OnjwoMM+evjwYU2ePFnr1q3T0aNHZRiGJJlyX5pjx47Jy8tLEREROca8vLwcDsJWrlxZgYGB9s+BJD3xxBO5Thl3ucuniroWv/32m3bt2qXp06fnGBs/frzD49tuu0233HKLpkyZku/BpejoaL3yyiv2xzfffLPi4uLUt29fffbZZ+rTp8815zt16lStX79eK1askNVqzTFekM8MgOKPuscRdU/+dc/1QO1D7XOtqH0AAAAAFCc0/kzUsWNH+fr6asqUKUpISFDv3r1zXW/ixIl699139fjjj6tR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N5WQkKDu3burTZs2+ueffyRJH374ocaNG6e3335bvXv31uOPP57v/XHyy2PixIlatmyZ+vTpo1GjRunjjz9W69at7evccMMNWrhwof744w8NGjRIH3zwgd59990872FzuV69eunAgQP6448/cozdc889ql69ukaNGqWnn35aPXr00OzZs+3jpUqV0urVq1WvXj098MADGjlypEJDQ7VmzRpVrFjRvt4zzzyj8uXLa/DgwWrTpo1Wr15dqPfgp59+0smTJ9WzZ89CbWcWb29v9enTR4ZhqH///qbFLVu2rBYuXKgTJ05owIABmj17tl577TWHgxhmioqKUrt27XKc8S5duifKokWL5O/vryFDhmjq1Kl69NFHHfYzZ1itVt1666366quvTIlXEHPmzNGQIUP08MMPS5Jee+01+2u7XGZmpj7++GN17do1189ocHCwQkJC9OKLL6pPnz4aN26c/az322+/3WHd5ORkh2n0ateurQ0bNujee+/VHXfcobfffltDhw7VF1984XCVRLVq1fTpp5/qyJEj6tOnj1577TU9+eSTDgd9v//+eyUlJemXX35Rx44d1aFDB/u/F154wSGPr7/+WjExMWrcuPG1v4EAShTqHuqegqpXr56++uorWa1WPfDAA+rdu7c+/PBDPfzww3rrrbfy3Zbax7Wofah9AAAAAHgOi2EYRlEngeKrdevWuu222wo81c/19uSTT2rnzp1atWpVUacCJ6xatUojRozQgQMHFBQUVNTpmO7AgQNq0KCB1q9fryZNmhRpLm3atFHXrl3d9jMNAEWJugfXC7XP9UPtAwAAAMDTcMUfXOqxxx7TggULnL4fjSucO3dO7733np544omiTgVO6tq1q6pXr6533323qFNxiW3btqlDhw5FfuBr8+bNOnjwoMaNG1ekeQCAu6LuwfVC7XN9UPsAAAAA8ERc8QeXe/XVV9W9e3dVq1atqFNxsHfvXm3atEn33HNPUacCE/zwww/6+eefNWzYsKJOpdjKnlKua9euRZwJALgv6h5cL9Q+rkftAwAAAMAT0fgDAAAAAAAAAAAAigGm+gQAAAAAAAAAAACKARp/AAAAAAAAAAAAQDFA4w8AAAAAAAAAAAAoBmj8XSPDMGSz2cQtEgEAQHFH3QMAAAAAAOAZaPxdo4yMDK1atUoZGRlFnQoAAIBLUfcAAAAA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xt/69esVEBCg3bt3F9r4K1++vLp3767Zs2fT+ANQ5s2ePVu33367Jk6c6JrWoUMHjRo1Srm5uT7MDCi7CqtR86bXq1fPB1kV7csvv9Rvv/2mfv36lcj6JkyY4NpuffHFF0UuW9BvuXM5e+S7tLQ0/fzzz+rfv7+Cgv5pM+QdvLZ69WpXM/bsM/nynLmvvCA33HCDypcvr8WLFxc5YhwAdwz16YHw8HB17dpVK1euzFf4LV++XIGBgbrtttuKjHH11VcrNTVVhw8fLnSZY8eOafjw4UpISFBsbKzatWunr7/+2m2ZvNPZV61apUaNGuniiy9Wly5d9OeffxYa9/HHH1fdunXz5f7xxx8rMjKyxHbctWjRQlWrVtXy5cvzzVu+fLnq16+vBg0aFHr/iy66SLVr11ZycnKhyxw8eFDDhw9XgwYNFBsbqyuvvFLPPPNMviNNIiMjNWXKFI0dO1Y1a9ZUjRo1JP0zBMa0adNUr149xcbG6tixY25DNaSlpSkuLq7A4REGDBigtm3bupYbPXq0GjVqpIoVK+ryyy/XAw88oJSUlHM+V8WxevVqSad/lJz92KZNm6YJEyaoRo0aSkhI0L333qu0tDSP1nfmTqk8V155pU6ePJkv9p9//qlXX31VL730UrHjn904LEhgYGC+o34CAwPVoEEDHThw4LzjSdKtt96qZcuWFXoEPwDAe0p77VNSqH+8V//keeSRR3TnnXeqdu3aBc4vbt1xtsLqK8MwdPDgQUmn66pTp06pXbt2bsu1a9dOW7Zs0V9//XXeedx666368MMPvTokHQBYwYkTJwodlvHsberixYvVvHlzxcTEKCEhQT169NCePXvcltm3b59uvfVWxcXF6corryzwIIwPP/xQrVu3VmxsrKpVq6YHH3ww3/fV9u3b1bFjR8XExKhhw4Z655138sW555578l1W48SJE65h2Yvy/fffq0uXLoqLi1OVKlU0ZMiQYg1tumfPHg0YMEBVqlRRXFycunfvri1btrgtk1dXzJ07V/Xq1VOVKlXUt2/fIveH9e/fv8ADvOfPn6+YmBgdO3bsnLmZ5c0339S1116r2NhYJSQkqH379tq0aZNrfm5url599VVdffXVqlChgmrWrKnbb789X62zZcsWtW/fXhUrVlTjxo316aef5lvX22+/rSZNmigmJka1a9fWM888I6fT6bbMd999p5YtWyomJkaNGzfWxx9/nC9OQUNfFnfofbPejwX5/vvv1bt3b1166aWuS8bkjU6QJ2/Y1w8//FADBgxQ5cqVNXDgQNfwkG+//bZGjhyphIQE1wFLZz7ewoaNdTqdqlmzpsaNGyfp9EFcgwcPVp06dVzDq7/yyiumNfgXL16sli1bqmLFivkeW96wnJUqVVK9evU0bdo0j9d3obXnhVqzZo3S0tLUp08f17STJ09q5cqVGjZsmGlnYN56663Ffn8BOI3Gn4d69+6tAwcO5PvCTExMVNu2bc85/ENycrJCQkIUExNT4Hyn06kePXpo7dq1+ve//6233npLERERuvnmm/V///d/bstu3rxZL7/8ssaPH685c+bozz//1F133VXougcPHqy9e/fmG7rrzTff1HXXXVdiR8rYbDb17NlT69atU2pqqmv6oUOH9Pnnn7t9eRTE6XRq7969qly5cqHLHDlyRNHR0Zo4caJWrVqlUaNG6Z133inwyOxZs2Zp586dmjVrlhYsWOCa/u6772rdunWaNGmSli1bpoiICLf7RUREqEuXLvmuq3Lq1Cl99NFHrrMW09PT5XQ69fTTT2vlypV6+umn9fXXX6tv375FPs7i2rBhg6688kqFhobmmzd37lz98ccfmjdvnsaMGaPExES9+OKLbsvk5OSc86+o6/dJ0rfffqsqVarooosucpv+r3/9S/369VPDhg09f6DnkJOTox9//FF16tS5oPs3bdpUR48e1ebNm03ODABQlLJQ+5QU6p/TvFX/rFq1Slu3btWYMWNMeQznsnHjRoWEhKh69eqS5Grgnj0sU0hIiKTTO7LO13XXXSen06mvvvrKs2QBwOKuuuoqLVq0SK+//rr+/vvvQpebPn267r77bjVq1EiLFy/WrFmzVKtWrXwHUAwdOlTt2rXT0qVLdcUVV+iee+7R9u3bXfNXrVql3r17q379+lqyZImee+45vffee7rvvvtcy2RmZqp79+46dOiQ5s+fr/Hjx2vKlCluzSdPfP/99+rcubOioqL0xhtv6JVXXtFPP/10zu/qU6dOqXPnztq8ebOmT5+uBQsW6NixY+rUqZP27t3rtuzatWu1du1aTZ06VZMmTdLXX3+tRx55pNDYQ4YM0XfffacdO3a4TX/rrbfUrVs3VahQ4cIf8Hn4+uuvdd9996ljx45asWKF5s2bpxtuuMGtqffwww/rqaeeUufOnbV8+XJNnTpVF110kVuzzOFw6M4779SAAQO0ZMkSVaxYUQMGDNDRo0ddy7z66qsaMWKEbrzxRi1fvlwPPfSQ5syZ4zZS2N9//61bbrlFISEhevPNNzVq1CiNGjVK+/fvN+Xxevv9uGfPHjVt2lQzZ85UYmKiunfvrvvuu6/Axs7999+vmjVravHixXrggQdc08eNGyfDMPTaa69pwoQJ+e7XsmVLVa5cOV+N+sUXX+jQoUOuGnX//v2qXbu2pk2bphUrVmjo0KF64YUX9MILLxT7+SrKhg0b1LRp0wLnPfjgg7r00ku1ZMkSde7cWWPHjtUnn3zimm8YRrFq1As1ZcoUlS9fXvHx8Ro0aJDbQWPFlZiYqGrVqrk9xp9//lnZ2dkKCgpSx44dVb58edWsWVNjx47Nd71qSRo1apSioqJUvXp1jRw5ssCGfpMmTbR58+YiDxQAcBYDHnE4HEa1atWMESNGuKZt2bLFiIiIMBYvXuyalpycbERERBhJSUmGw+EwTpw4YbzxxhtGVFSUcccddxQa/4MPPjAiIiKMTz75xDUtOzvbqFu3rtGvXz/XtI4dOxpxcXHGoUOHXNPeeustIyIiwti7d69bDitXrnQtc+ONNxoDBw503T5y5IgRHR1tLFq06AKfkQuzefNmIyIiwli6dKlr2uzZs43IyEhjz549rml5j+ngwYOGw+EwDhw4YIwaNcqIiIgwFi5cWOz1ORwOY9myZUa5cuWMtLQ01/SIiAjjmmuuMXJzc92Wr1evnnHJJZcYqampbtOfe+45Iy4uznU77/XauXOna9o777xjREVFGQcPHiw0l40bNxoRERHGjh073Nb50EMPFfsx5bnqqqsKvF9ERIRxww03uE27++67jYYNG7pu571HzvX31ltvFbr+b775xrjooouMGTNmuE1fs2aNUbVqVePw4cOudV977bXn9djOfr6LMmnSJCMqKsr46aefCpz/xRdfGBEREcamTZsKnO9wOIyoqChjzpw555UjAJQVERERxvTp0/NNL2r7+ssvvxgRERHGF198UWjcslL75Cnq+Srqe2/GjBlGRETEea2L+uc0M+qftLQ0o06dOsYbb7xhGMa564q8XAr6zBTHzp07jbi4OOPRRx91TUtJSTEiIyONqVOnui07fPhwIyIiwli2bFm+OAV9Js5Wr14944knnrigPAGgtNiyZYtxxRVXuL4D6tevbzzyyCNGcnKya5kTJ04YFStWNEaOHFlonLzaZO7cua5pqampRsWKFY0XXnjBMAzDyM3NNerVq5dv39DHH39sREZGGlu3bjUMwzDmz59vXHTRRW7ft//973+Niy66yOjYsaNrWkG/tY8fP57vu+zs79wOHToY7dq1c6sHfvvtNyMyMtL48MMPC32MM2fONCIjI41t27a5ph09etSIi4szxowZ47a+yy67zMjMzHRNe+6554zy5csbTqfTMIz836dOp9OoW7eu8dRTT7nuk7fPbf369YXmZLbp06cbl1xySaHzd+zYYURGRhqTJ08udJnnnnvOiIiIcHsu876XlyxZYhiGYZw8edK4+OKLjXHjxrndd/78+UZsbKxx5MgRwzAMY+zYsUalSpWMEydOuJbZsGGDERERYdx9992uaR07djRuu+02t1gF1eNn1ihmvx/PJTc313A4HMbIkSONtm3buqbnvRceeOABt+XznrNbbrklX6yzH+9jjz1mXHbZZW7v6XvvvbfQfVF5uUyaNMmoVatWvnUWVT8V5MCBAwXeL++xPfnkk27rvvzyy4377rvPNS1v+3GuvzO3S2cqqq4eNmyYsWLFCuOrr74y5s6da9SsWdOoU6eOcezYsWI/viNHjhjly5fP935NTEw0IiIijEqVKhljxowxPv/8c2PKlClGdHS08fTTT7s9Pw8++KDx/vvvG19++aUxdepUo3LlykazZs2M7Oxst5h5r8G6deuKnR9Q1nGNPw8FBQXp1ltvVVJSkqZOnarg4GAtX75c4eHh6tatW77lBw8e7Pq/zWbTrbfeWuSwhxs3blRUVJTb0AZ2u10333yzEhMT3Za94oor3E4dr1u3rqTTQ0oUdh2WIUOG6P7779exY8dUoUIFLVu2THa7Pd9QAGfKzc29oFPezxzr+WwNGzZU3bp1tXz5ctcZfklJSWrWrJkuueSSfMvXqlXL9f+wsDD961//0pAhQwqNbxiGZs2apUWLFmn37t2u6+lI0q5du1S/fn3X7Q4dOshms+WLcf311+c7yv1s7du3V/ny5ZWUlOQ6+jspKUmtWrVyGyZkyZIlevXVV/XHH3+4Hf313//+t9Choorr4MGDBQ4PJeUfT7tu3bpuRz9Vrlz5nMM9SFK1atUKnL5v3z4NHjxYrVq10vDhw13TMzMz9dhjj+mJJ54oNDczffbZZ5owYYLGjBmjRo0aXVCMoKAglStXzjWcFgCgZJSV2qckUP+c5o36Z9KkSYqLi9PAgQMvMOPiO3nypPr3769q1aq5hqWSTl8vsm/fvpo2bZrq16+vxo0ba926da7h8wt6PYsjJiaG+gdAmVe/fn39+OOP2rBhg9avX6+vv/5as2fP1ttvv62PPvpIV1xxhX744Qelp6e77ecpzJnDMkdEROiSSy7Rvn37JEk7d+7Unj179OKLL7qdvdOyZUsFBATo//7v/3T55ZfrP//5jy6//HJdeumlrmVq1aplyog66enp+u677/T888+7DSlZu3ZtVa1aVZs2bVLHjh0LvO/GjRt1+eWXu+owSapQoYLatGmjb7/91m3Zli1bus5Ml05/JzscDh0+fLjAoVUDAgI0aNAgLViwQOPGjVNQUJDeeustJSQkqHXr1oU+HqfTec6RigpSWO125ZVX6tixY7rnnnvUp08fNW3aVOHh4a75X3zxhQzD0KBBg4qMHxAQ4FaXVKtWTWFhYa73wvfff6/U1FTdeuutbu+FNm3aKCMjQ7/99puuv/56/fjjj2rVqpXKlSvnWqZ169amnAFZEu/H48ePa8KECVqzZo3279/ves8VlH+nTp0KjFHY+/FMvXr10owZM7Rx40a1aNFC2dnZev/9993OHMzMzNRLL72kxMRE/fXXX25npKWmpioyMvKc6ylMXj1VWI165nbBZrOpTp06rveCJHXu3LlYNWpRI6AVZt68ea7/t2zZUs2bN1eLFi30+uuv66GHHipWjJUrV8rhcLjOnsyT99lr3bq163qDN9xwg06dOqVXXnlFY8aMUVhYmCpVqqTp06e77nf99derXr166tmzp9577z23y2fljZRHjQoUH40/E/Tu3Vvz58/XJ598oq5duyopKUldunQp8Mvh3//+t2644QaFhYWpWrVqboVCQU6cOOG2QytPXFycjh8/7jbtzC986Z9hf87cyXO2W2+9Vf/617+0dOlS3XfffXr77bd1yy235Bui8UzDhw+/oHGVt27dWmjDSDr9PE6cOFFHjx5Vamqqvv/+e7cvgDO9//77KleunMqXL6+EhIRz7libOXOmnnjiCT300ENq1aqVypcvr02bNmn06NH5rnNT2PCs5xq2VTr9nHfv3t214+vo0aP67LPP9Oqrr7qWee+99zRs2DANGTJE48aNU4UKFXTw4EH169evyNequDIzM90K6TOVL18+X75nPv7g4GBdccUV51xHQWN0nzhxQrfeeqsqVKigd955x21c8ZkzZyogIEC9evXSiRMnJEnZ2dnKzc3ViRMnFB4enm+Yqgv1888/a8CAAerdu7cef/xxj2KFhISY8poAQFmS95189nVIzpxmt9sLvX9Zqn3OJSgoqMDnUTr9XFL//KMk6589e/bolVde0ZIlS1xDfOU1MlNTUz3eSXSm7Oxs9evXTydOnNBnn32Wrwn7wgsv6O+//1aPHj0knd4pMnbsWD3xxBOqVKnSBa0zJCREGRkZHucOAFYXHBysjh07uhoMn376qW677TZNnDhRS5YscQ1HV5yd7gXVLHnfRXnDPPbr16/A++YNl3nw4MFCayRPt9snTpyQ0+nUY489psceeyzf/DObEQXdt6B6IS4uLt/1ky+kdhs0aJBeeOEFffTRR+rQoYOWLl2qYcOGFXkts65du+a7PnRxnHn5mTO1bt1aCxYs0KxZs9S9e3eFhobqlltu0YsvvqgKFSro2LFjCgoKOmfdFBYWlm/fR3BwsOvx570XWrRoUeD9816HgwcPuh0Qn8eMA61L4v1477336rvvvtOYMWNUr149RUVFacGCBVqxYkWB8QpSnBr1mmuuUc2aNbV8+XK1aNFCH3/8sU6cOOHWqBo7dqxef/11Pf7442rUqJHKlSunDz74QJMmTVJmZqZHNV3e61pYjVrQ5yFvn5l0uhF69jIFMeNgwwYNGqh27dr5Lq1QlMTERDVo0MDtYELpn9o779qLeVq3bq3Jkyfrjz/+UIMGDQqM2bFjR0VEROjnn392a/zlPYfUqEDx0fgzQdOmTVWtWjUtX75cFStWVHJysiZNmlTgstWrV9fVV19d7NjR0dEFjl986NAhRUdHX3DOecLCwtS7d2+9/fbbat68uTZv3qzJkycXeZ8nnnhC99xzz3mv61zFcO/evfXss89q9erVOnHihOtsyoI0bNjwvAqaVatWqUuXLm5jop85nv6ZCjs6urhHTffs2VNvvPGGtmzZou+//16BgYG6+eab3XK54oor3HaGmXkdlejo6HwXjy6u3bt35/vCLsicOXN0++23u25nZGSoV69eOnnypD777LN8hcmOHTv0xx9/uK5Jc6aqVatq+vTpRV6Tqbj++OMP3XrrrWrSpIlmzpzpcbyUlJQSu2YAAJQWed/PBV0P58CBA5JU4E6CPGWp9jmX2NhYZWZm6sSJE/maVwcOHCjyeZSof4rrfOuf5ORkZWdnu+2MyNOlSxc1btxYGzZsuKBczpSbm6uhQ4fq559/1kcffaSqVavmWyYmJkbvvfeeDhw4oGPHjunSSy/VmjVrFBwcrKuuuuqC1nvixAm3szYAAKfdeOONatiwoesaqnm/FQ8cOFDoSAPFkVffTJkyRY0bN843P6+eqFSpkn7++ed88w8dOuR2AFNISEi+62id2UwoSLly5WSz2fTII48UOHpV3tk2heW/c+fOAvMyo3aLj49X+/bt9dZbbyknJ0dHjx495xn3r7zySqFNvAvVt29f9e3bV0eOHNGaNWs0ZswY2e12zZo1SxUqVFBOTo4OHTpUrIZUYfKer8WLFxf4vZ93QFmlSpUKrJfPvrZkaGiosrOz3aadfSBdYTmY9X48W2ZmptatW6eJEye6jRRV2OgaZtSoixYt0ksvvaSkpCQ1btxYNWrUcM1ftWqVhg4dqtGjR7umffjhh8WKfS55z+WF1qjvvPOO7r333nMu5+nBhhfir7/+0nfffef2OyPPuerIsw9ALI68bVhR2yIA7mj8mcBms6lXr16aNWuWwsPDVaFCBbVv396U2M2aNdP06dO1fv161yngOTk5ev/999WsWTNT1jFkyBDNmzdPjz32mC699NJCjyzKU61aNa98oVSvXl1NmjRRYmKiTpw4ofbt25vWdMnIyMh3VNWyZctMiX22vGGtli9fru+//17t27d3a4R5O5fatWsrOTn5gu57IUNd5eTkaNCgQfr999/10UcfqUqVKvmWHz16tAYMGOA2berUqdq5c6dmz57t8fBe0umjzbp3765LLrlEb7/9dpFnkxTH4cOHlZ6ebkpuAFCWXHrppapUqZLWrFmjm266yW3eBx98oEqVKhV4hHKeslT7nEteXmvXrlX//v1d03NycvThhx+eM2/qn+I53/rniiuu0Nq1a93m/frrr3rsscf08ssv65prrrmgPM720EMPad26dVq9enWhR0XnqVy5sipXriyn06kFCxbotttuK3KnW2Fyc3O1d+9eXXbZZReaNgCUCn///Xe+oSczMjK0d+9e1atXT5J03XXXKTw8XG+99ZauvfbaC15XnTp1FB8fr+Tk5CIPNLrmmmu0ePFi/fHHH65a6o8//tCvv/6q5s2bu5aLj4/Xvn373M5AX79+fZE5REREqEmTJvr999/dhpUujmbNmmn16tXasWOH6/vj+PHj+vzzz4u8JMv5uOOOO3T77bfr8OHDat26tRISEopc3pvfY7GxsRo8eLA++ugjVxP4hhtukM1m09tvv+3WQDpfee+pffv2uR1AdbZrr71WCxYsUEpKiqve+vzzz11noeaJj4/XZ599JsMwXI2yzz77rMgczH4/ni0rK0u5ubludeGpU6fy1VZm6dWrlyZNmqQ1a9Zo7dq1+d7fmZmZbrk4nU63IeE9Ua1aNQUHB19wjerNoT7PtnnzZu3cubPYw9jnDS1/9jCfkpSQkKD69evr888/d2tcbtiwQWFhYUU2BtetW6e0tLR8J83s2bNHkthHB5wHGn8m6dWrl1566SW99dZbGjp0qMdNhzydOnXStddeqzvvvFPPPvus4uLiNGfOHB08eFCPPvqoKeto2LChrrnmGn3zzTcFHqlRknr16qVHH31UhmGY9vgkqW3btpo1a5bmzJmj2rVra+nSpfrzzz9Ni3+mwMBA9ejRQ2+//bYOHz6s119/PV8uo0eP1gsvvKAmTZroo48+0hdffGHa+ps1a6aVK1de0H2Dg4PP64xUSRo1apTraK1Tp07phx9+cM278sorFRISojp16qhOnTpu93vnnXe0b98+tWrVym16ZGSkBgwYoLlz57qmrVq1StLpsxScTqfr9jXXXKOEhARlZGTo1ltv1dGjRzVp0iT99ttvrvuGhIToyiuvdN3+6quvdOTIEdeQI1988YV2796tatWquT32vOENzNrJDABlRUBAgJ588kndf//9CgwMVNeuXSVJa9as0ZtvvqkZM2YUeYRuWat9ilK3bl317t1bo0aN0t69e9W4cWMdO3ZM8+bN019//aW33nqryPtT/xTP+dY/5cuXz1e/5GnUqJHbmXbbtm1zO8ty69atWrVqlSIiItShQwfX9LPrn8mTJ2vhwoUaNWqUQkJC3OqrunXrKioqStLp5mlGRoZq1qypgwcPauHChdq9e7cWLVrkltdPP/2k3bt3u84E+PHHHyWd3nl5/fXXu5bbsWOHUlNTi9xhBwBlQZMmTdSlSxe1a9dOlSpV0v79+zVv3jwdPXpU9913n6TTZ8k9/vjjGjt2rHJzc3XTTTcpNzdXX375pXr16lXs7xabzaaJEydq6NChSktLU6dOnRQeHq6//vpLH374oZ555hnVrl1bt99+uyZNmqSePXtq7NixkqTnnnsuX4Py5ptv1nPPPafhw4dryJAh2rZtW77v5YI899xz6tq1qwYNGqSePXuqfPny2r9/vz777DPdfvvthX73DRw4UDNnznTlFRoaqsmTJysoKEgjRowo1nNwLp06dVJsbKy+//57vfbaa6bEPB/PPfecjh07puuvv14VK1bU1q1b9emnn2rkyJGSTjcj8mrX48ePq3Xr1kpPT9dHH32kJ554osADpAtSvnx5PfXUUxo7dqz279+v66+/XoGBgdq1a5fWrFmjd955R+Hh4RoxYoTmzZunHj16aPTo0Tpx4oQmTJiQ7+D5W265RW+88YYefvhhdevWTd99951Wr15dZA5mvx/PVq5cOV1zzTWaOnWqYmNjFRQUpKlTpyoqKqrAsxg9Va9ePTVo0ECPPPKIMjMz813Xu02bNnr99ddVt25dxcTEaP78+fnOkrxQoaGhatSoUYFnRhZHTEzMeZ/htmfPHm3atEnS6Wt37tq1y7UPLW9UtZdffll//vmn6/3822+/afLkyapatarbNUu//PJLdenSJd+oX9LpYT6bNm2qSy65pMA8xo0bpz59+uhf//qXOnXqpE2bNunll1/WqFGjXEPXP/744woICFDjxo1Vrlw5bdq0SVOmTNHVV1+d78zjn376SZGRkcUanh/AaTT+TFK/fn01aNBAW7ZsUe/evU2LGxgYqBUrVujJJ5/UU089pbS0NF111VV699131ahRI9PW061bN9e10Xzptttu05gxYxQaGuraUWiGMWPG6MiRI5owYYIkqXv37po8eXKBR6aYoVevXpo9e7YiIyPVuXNnt3l33nmnkpOTNWfOHL388stq166dFi1a5HaBZ0/ccssteumll/Tf//7X7SLL3pJ3tFhB19M73+EG8q6Pc3ahePYRR3m384qPQ4cO6ddff5WkfJ+/hIQEt0bghAkT3Mb6zytQz242fvzxx2revPk5i1YAQH5DhgxRZGSkZsyY4Tqrq169elq0aNE566SyVvucy9y5czV58mS98847mjhxosLDw9WkSRN9/PHH5zwLjPrH91auXKmJEye6bi9evFiLFy92q08Kqn/yzsyYPn16vmter1271rXz1TAMvfLKK9q9e7ciIiLUsWNHLVq0KN/1/ebOnet2ncpXXnlFktSyZUu34aw++eQTJSQkmHbWIgBY1RNPPKF169bp8ccf15EjRxQTE6MGDRrogw8+cLtu1UMPPaTY2FjNmDFD77zzjiIjI9WkSZNzDsd9th49eqh8+fKaNGmSq3ZKSEhQ+/btXUNHhoWF6d1339WoUaN01113qUqVKnrssce0Zs0at6E869Wrp3nz5umFF15Qnz591KxZMy1atOicB7U2bdpUn3zyiSZMmKDhw4crOztb8fHxuuGGG4ocreGiiy7SunXrNGbMGD3wwANyOp1q2rSpPvzwwwKHq7wQQUFB6ty5s1avXl3kmXDecs0112jmzJlauXKlTp06pfj4eD344INu10OcOnWqqlevrtdff10zZsxQhQoV1LJly/O+RtwDDzygypUra8aMGZozZ47sdrtq1KihTp06uc5Mq1SpklauXKlHH31UAwcOVI0aNTR16tR8B7S1b99ezz33nObMmaN33nlHHTp00PTp0wsczvVMZr4fC7Jo0SI98MADuueee1ShQgUNHz5cqamprvrEbL169dK4cePUunXrfPt4XnrpJT344IN65JFHFBYWpttvv13dunVzNXU9dcstt2jGjBluZ11605dfful2lt0nn3yiTz75RNI/17CsXbu23n33Xdf7OTY2Vp06ddLTTz/tdnmB9PR0Sfn30W3btk1btmzRtGnTCs2jS5cueu211/Tiiy9qwYIFqlSpkp588kk9/PDDrmXq1q2r+fPn67XXXlN6erqqVKmiQYMG6cknn8x33cJPPvlE3bp1c11zG8C52QzDMHydBHyvQ4cOKleunOtUbVhby5Yt1bVr1wKbcf5sw4YNuu222/Trr796dI0ET+Xk5Khu3bp69tln3YZWAwCUHtQ+pQ/1j+datWqlzp07W+45BACUbrm5uWrYsKE6deqkKVOm+DodoNgOHz6sunXr6t1331XLli19nc55efbZZ/X+++/rhx9+KJGmZWGOHz+uWrVq6b333rPccwj4UoCvE4Bv/fTTT5oxY4Y2btzoGq4C1jdmzBgtXLjwgi6Y60vfffed+vfv7/OdXomJiYqMjDT17F0AgH+g9im9qH888/XXX2vXrl0aPny4T/MA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T48brxkz58hut+vll6f5OrV86tatp5SUFA0eNECDB92u1NRU9ejR09dpFSozM0OhoaFu106IiIhQhp9+pqTT41lPnfqSmjdvoUsvre3rdPJ568031KZNW1WpUsXXqRQpNTVVkrR58y+aNHmKpkydrr8P/a3XXlvo48zyu7rRNdq2bZtuH9BXd915h2JiYtXWD66lcfY23l8/T0V9F/n756mssmLNI1H3mIGax3v8dRt9Lv6+nbZC3UPN4zlqHniTFeseah5zUPd4j79up4vi79tpK9Q8EnWPGah7rIvGn0WFhoZJktLT/zniK+9ohdCwMJ/kVBTDMDRv3hzt27dPjz32hAIC/Outd+DAAX300YcaNOgOX6dyTqFhoZKkLl1vUlxcnMLCwtSnbz9t2fKrz8aoLkhubq6eHT9OdevV0zuLl+mdxctUt149PTt+nK9TK1RoaJiysrLkdDpd09LS0xTmh58p6fQX10uTX1RISIjuHT7C1+nk89tvW7V9+za/H05FOj08gCT16NFTUVFRioqKUo8ePfWfH3/0cWbuUlNTNX7807qxfQctXpKoN958R6GhoXp5+lSf5lXQNt4fP09FfRf5++epLLNazSNR95iFmsd7/HEbfS7+vp22St1DzeMZah54m9XqHmoe81D3eI8/bqeL4u/baavUPBJ1j6eoe6zNv76RUWyRkZGKiYnRrl27XNOSd/2p2NhYtyPD/IFhGJo/b6527tihp8eN97v8JGnbtt+UknJC948crjsG364XX3heGRnpumPw7dqx43dfp+cmIiJSsbEVC5xnGEYJZ1O41NRUHT58SF273KSQkBCFhISoS5eu2rlzh06ePOnr9AoUHx+vwMBAJSef+bnapQQ/PA3c4XBoykuTlJOTo0f/NUZ2u93XKeXz6+bN+vvvgxp21xDdMfh2LVwwT3v27NYdg2/3u+FKqlSJV3BwsK/TOKeDBw8oOztbXbveJLvdrsjISLXv0FE//bTJZzkVto33t89TUd9FVvg8lWVWqnkk6h4zUfN4j79to8/FCttpq9Q91DwXjpoHJcFKdQ81j7moe7zH37bTRbHCdtoqNY9E3eMJ6h7r89/BrXFObdq204qk5apbt54kacWKJLW7sb2Ps8pvwfy52r59m8Y/+29FRkb6Op0CtWjRUldecaXr9u87ftfsWTM0Zcp0RZUr58PM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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Hour of day distribution of stop time entries, stacked by service date\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from calitp_data_analysis.calitp_color_palette import CALITP_CATEGORY_BOLD_COLORS\n", + "\n", + "# Light mode, pinned explicitly so the figure does not inherit a dark notebook\n", + "# theme (a transparent background would put this near-black text on dark gray).\n", + "SURFACE = \"#ffffff\"\n", + "INK = \"#0b0b0b\"\n", + "INK_MUTED = \"#52514e\"\n", + "GRID = \"#d9d9d9\"\n", + "AXIS = \"#b0b0b0\"\n", + "\n", + "# Slots 1, 2, 4, 3: green sits between orange and yellow so the two warmest\n", + "# hues are never adjacent segments within a stack.\n", + "DATE_COLORS = [CALITP_CATEGORY_BOLD_COLORS[i] for i in (0, 1, 3, 2)]\n", + "\n", + "# grid position -> (source, which arrival time to bin, panel title)\n", + "PANELS = {\n", + " (0, 0): (\"both\", \"vp_arrival_time\", \"Matched (both) — VP arrival\"),\n", + " (0, 1): (\"both\", \"tu_arrival_time\", \"Matched (both) — TU arrival\"),\n", + " (1, 0): (\"vp_only\", \"vp_arrival_time\", \"VP only — VP arrival\"),\n", + " (1, 1): (\"tu_only\", \"tu_arrival_time\", \"TU only — TU arrival\"),\n", + " (1, 2): (\"schedule_only\", \"schedule_arrival_time\", \"Schedule only — scheduled arrival\"),\n", + "}\n", + "\n", + "service_dates = sorted(vp_tu_stop_times[\"service_date\"].unique())\n", + "color_by_date = dict(zip(service_dates, DATE_COLORS))\n", + "\n", + "# Rows share a y axis: the two \"both\" panels are the same matched rows counted\n", + "# two ways, and the bottom row is the three mutually exclusive misses. The rows\n", + "# differ in magnitude by ~5x, so their scales are left independent.\n", + "fig, axes = plt.subplots(\n", + " 2, 3, figsize=(18, 8), sharex=True, sharey=\"row\", facecolor=SURFACE\n", + ")\n", + "fig.delaxes(axes[0, 2]) # only two ways to count a matched row\n", + "\n", + "for (row, col), (src, time_col, title) in PANELS.items():\n", + " ax = axes[row, col]\n", + " subset = vp_tu_stop_times.loc[vp_tu_stop_times[\"source\"] == src]\n", + " hourly = (\n", + " subset.groupby([subset[time_col].dt.hour, \"service_date\"], observed=True)\n", + " .size()\n", + " .unstack(fill_value=0)\n", + " .reindex(index=range(24), columns=service_dates, fill_value=0)\n", + " )\n", + "\n", + " bottom = np.zeros(24)\n", + " for service_date in service_dates:\n", + " heights = hourly[service_date].to_numpy()\n", + " ax.bar(\n", + " hourly.index,\n", + " heights,\n", + " bottom=bottom,\n", + " width=0.82,\n", + " color=color_by_date[service_date],\n", + " label=str(service_date),\n", + " edgecolor=SURFACE,\n", + " linewidth=0.6,\n", + " )\n", + " bottom += heights\n", + "\n", + " ax.set_facecolor(SURFACE)\n", + " ax.set_title(f\"{title} (n={len(subset):,})\", fontsize=11, loc=\"left\", color=INK)\n", + " ax.set_xticks(range(0, 24, 2))\n", + " ax.grid(axis=\"y\", color=GRID, linewidth=0.6)\n", + " ax.set_axisbelow(True)\n", + " for side in (\"top\", \"right\"):\n", + " ax.spines[side].set_visible(False)\n", + " for side in (\"left\", \"bottom\"):\n", + " ax.spines[side].set_color(AXIS)\n", + " ax.tick_params(colors=INK_MUTED, labelsize=9, labelbottom=True)\n", + "\n", + "for ax in axes[:, 0]:\n", + " ax.set_ylabel(\"stop time entries\", fontsize=10, color=INK_MUTED)\n", + "for ax in axes[1, :]:\n", + " ax.set_xlabel(\"hour of day (Pacific)\", fontsize=10, color=INK_MUTED)\n", + "\n", + "handles, labels = axes[0, 0].get_legend_handles_labels()\n", + "legend = fig.legend(\n", + " handles,\n", + " labels,\n", + " title=\"service date\",\n", + " loc=\"lower center\",\n", + " ncol=len(service_dates),\n", + " frameon=False,\n", + " fontsize=9,\n", + " title_fontsize=9,\n", + ")\n", + "legend.get_title().set_color(INK_MUTED)\n", + "for text in legend.get_texts():\n", + " text.set_color(INK_MUTED)\n", + "\n", + "fig.suptitle(\n", + " \"When VP, TU and scheduled stop times occur, by hour and service date\",\n", + " fontsize=13,\n", + " x=0.5,\n", + " y=0.98,\n", + " color=INK,\n", + ")\n", + "fig.tight_layout(rect=[0, 0.05, 1, 0.96])\n", + "plt.show()\n", + "# this plot seems to show that VP only trips have a strong time pattern (mornings on all dates, evenings specifically on one date. \n", + "# this matches hypothesis that TU is producing trips for certain dates only, because it runs on data that is partitioned by UTC date rather than service_date\n", + "# however, TU arrivals are occuring for all dates evenly. this suggests that there are significant data availability issues for the VP data, although\n", + "# could also infer that erroneous trips are occuring\n" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "a2355ca5", + "metadata": {}, + "outputs": [], + "source": [ + "# TODO - would be interesting to know if missing VP trips are clustered on the same trips and/or same stops\n", + "# many clustered on same trip - means that vp is either consistently unavailable for some trips \n", + "# or that trips are being dropped by the pipeline\n", + "# many clustered on same stop - issue with GPS/cellular outages at specific stops\n", + "# no clustering - VP pipeline is potentially dropping stops" + ] + }, + { + "cell_type": "markdown", + "id": "3b33fa86", + "metadata": {}, + "source": [ + "### Basic difference analysis" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "8ea66996", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
trip_instance_keystop_sequencevp_arrival_timestop_metersshape_array_keystop_idtu_arrival_timen_predictionssourceschedule_arrival_timeschedule_departure_timehas_scheduleservice_datevp_tu_differencevp_tu_difference_seconds
810008d298e3f42cea9e00cfddb076fdd022026-06-10 07:18:28875.0718965c9e314c9eb12d2f42a1172287709df23411852026-06-10 07:18:1785.0both2026-06-10 07:15:172026-06-10 07:15:17True2026-06-100 days 00:00:1111
820008d298e3f42cea9e00cfddb076fdd032026-06-10 07:21:443452.9355775c9e314c9eb12d2f42a1172287709df23416222026-06-10 07:22:0090.0both2026-06-10 07:22:002026-06-10 07:22:00True2026-06-100 days 00:00:1616
830008d298e3f42cea9e00cfddb076fdd042026-06-10 07:23:344380.0342535c9e314c9eb12d2f42a1172287709df23410602026-06-10 07:18:2690.0both2026-06-10 07:27:262026-06-10 07:27:26True2026-06-100 days 00:05:08308
840008d298e3f42cea9e00cfddb076fdd052026-06-10 07:23:504533.5452965c9e314c9eb12d2f42a1172287709df23419572026-06-10 07:19:2090.0both2026-06-10 07:28:202026-06-10 07:28:20True2026-06-100 days 00:04:30270
850008d298e3f42cea9e00cfddb076fdd062026-06-10 07:24:414958.5407135c9e314c9eb12d2f42a1172287709df23412712026-06-10 07:22:4990.0both2026-06-10 07:30:492026-06-10 07:30:49True2026-06-100 days 00:01:52112
\n", + "
" + ], + "text/plain": [ + " trip_instance_key stop_sequence vp_arrival_time \\\n", + "81 0008d298e3f42cea9e00cfddb076fdd0 2 2026-06-10 07:18:28 \n", + "82 0008d298e3f42cea9e00cfddb076fdd0 3 2026-06-10 07:21:44 \n", + "83 0008d298e3f42cea9e00cfddb076fdd0 4 2026-06-10 07:23:34 \n", + "84 0008d298e3f42cea9e00cfddb076fdd0 5 2026-06-10 07:23:50 \n", + "85 0008d298e3f42cea9e00cfddb076fdd0 6 2026-06-10 07:24:41 \n", + "\n", + " stop_meters shape_array_key stop_id tu_arrival_time \\\n", + "81 875.071896 5c9e314c9eb12d2f42a1172287709df2 341185 2026-06-10 07:18:17 \n", + "82 3452.935577 5c9e314c9eb12d2f42a1172287709df2 341622 2026-06-10 07:22:00 \n", + "83 4380.034253 5c9e314c9eb12d2f42a1172287709df2 341060 2026-06-10 07:18:26 \n", + "84 4533.545296 5c9e314c9eb12d2f42a1172287709df2 341957 2026-06-10 07:19:20 \n", + "85 4958.540713 5c9e314c9eb12d2f42a1172287709df2 341271 2026-06-10 07:22:49 \n", + "\n", + " n_predictions source schedule_arrival_time schedule_departure_time \\\n", + "81 85.0 both 2026-06-10 07:15:17 2026-06-10 07:15:17 \n", + "82 90.0 both 2026-06-10 07:22:00 2026-06-10 07:22:00 \n", + "83 90.0 both 2026-06-10 07:27:26 2026-06-10 07:27:26 \n", + "84 90.0 both 2026-06-10 07:28:20 2026-06-10 07:28:20 \n", + "85 90.0 both 2026-06-10 07:30:49 2026-06-10 07:30:49 \n", + "\n", + " has_schedule service_date vp_tu_difference vp_tu_difference_seconds \n", + "81 True 2026-06-10 0 days 00:00:11 11 \n", + "82 True 2026-06-10 0 days 00:00:16 16 \n", + "83 True 2026-06-10 0 days 00:05:08 308 \n", + "84 True 2026-06-10 0 days 00:04:30 270 \n", + "85 True 2026-06-10 0 days 00:01:52 112 " + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vp_tu_stop_times_cleaned = vp_tu_stop_times.loc[\n", + " (\n", + " (vp_tu_stop_times[\"service_date\"] != datetime.date(2026, 4, 8))\n", + " & (vp_tu_stop_times[\"source\"] == \"both\")\n", + " )\n", + "].copy()\n", + "vp_tu_stop_times_cleaned[\"vp_tu_difference\"] = (\n", + " vp_tu_stop_times_cleaned[\"vp_arrival_time\"] - vp_tu_stop_times_cleaned[\"tu_arrival_time\"]\n", + ").abs()\n", + "vp_tu_stop_times_cleaned[\"vp_tu_difference_seconds\"] = vp_tu_stop_times_cleaned[\"vp_tu_difference\"].dt.seconds\n", + "vp_tu_stop_times_cleaned.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "1b5a1d30", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
meanp5p25p50p75p90p95std_dev
service_date
2025-12-1741.42.011.023.042.077.0118.0106.5
2026-01-1442.72.011.024.043.079.0123.0109.4
2026-06-1058.22.012.025.049.0109.0194.0164.5
\n", + "
" + ], + "text/plain": [ + " mean p5 p25 p50 p75 p90 p95 std_dev\n", + "service_date \n", + "2025-12-17 41.4 2.0 11.0 23.0 42.0 77.0 118.0 106.5\n", + "2026-01-14 42.7 2.0 11.0 24.0 43.0 79.0 123.0 109.4\n", + "2026-06-10 58.2 2.0 12.0 25.0 49.0 109.0 194.0 164.5" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Headline difference analysis\n", + "vp_tu_stop_times_grouped_by_date = vp_tu_stop_times_cleaned.groupby(\"service_date\")[\"vp_tu_difference_seconds\"]\n", + "diff_stats = pd.DataFrame(\n", + " {\n", + " \"mean\": vp_tu_stop_times_grouped_by_date.mean(),\n", + " \"p5\": vp_tu_stop_times_grouped_by_date.quantile(0.05),\n", + " \"p25\": vp_tu_stop_times_grouped_by_date.quantile(0.25),\n", + " \"p50\": vp_tu_stop_times_grouped_by_date.quantile(0.50),\n", + " \"p75\": vp_tu_stop_times_grouped_by_date.quantile(0.75),\n", + " \"p90\": vp_tu_stop_times_grouped_by_date.quantile(0.90),\n", + " \"p95\": vp_tu_stop_times_grouped_by_date.quantile(0.95),\n", + " \"std_dev\": vp_tu_stop_times_grouped_by_date.std(),\n", + " }\n", + ")\n", + "diff_stats.index.name = \"service_date\"\n", + "diff_stats.round(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "7f724710", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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Tz3yyCNasGCBHnnkETVs2PCqxy9dujTT6z59+ui+++7T22+/rSFDhig0NDTb45YtW6YyZcpku9bU312Zcv3000/nuE/JkiWznR4LAAAAIPcopUzQvXt3TZ06VUuXLtUzzzyjuLg4bdu2TUOHDs22LLnrrrsc08CKFSumGjVq5OrJdl26dNG0adO0du1aRUdHKyEhQV988YUGDBjg+KX59ttvV6dOnTR+/HhNmzZNt99+u+666y5FR0eb+pS3K3muZt26dZowYYJ++umnTOsIZXdsREREjue5UgReS5cuXfTpp59q586daty4sY4cOaIffvghy9o427dv18svv6xvv/02y3TAixcvFngp9ffiSfqraPznL+JXyogrRcSRI0dkGIbGjh2baVrX350+fTrHwuT3339XcHBwlqldVatWzfN7uJbffvtNv/zyS45/rqdPn870+p/7nT59WhcuXND8+fM1f/78XJ2jfPnymV5fKZ7+/vlJl9f1ysmNfsZXYxhGjmNXy37l70G9evXyfM28GDNmjEqVKpVpmnJePProo1qwYIE2btx4zVLqnywWix555BGtX79eX3/9dbaLlh89elQ7d+7U4MGDsyzC/09LliyRu7u7unTpkuM+hmHk6ucYAAAAgJxRSpmgXr16qlq1qpYtW6ZnnnlGy5Ytc6zPk52QkBDHQrp50bBhQ4WHh2vlypWKjo7W2rVrlZycnOkXK4vFog8++EDffvut1q5dqw0bNmjo0KF66623tHHjxuteS+bvvL29lZqamu0vbYZhKCUl5ZoF2DfffKPo6Gg1bdpUb775poKDg+Xp6an3338/y10Skq76pLVrrdl1RVRUlGP9n8aNG2vlypVyc3PLtEbXkSNHdNddd6lq1aoaP368ypcvLy8vL33++eeaOnWqMjIycnWtG5HTXV85bb9SZlzJ9thjj6lt27bZ7luxYsV8SHjjMjIyVKtWLb366qvZjv+zgPvnn/+V99yjRw/17t0723PUqlUr0+trfX65UVCfcenSpXX+/Pkcx3OT/dy5c7leUyqvxepvv/2m+fPn67XXXtOJEycc21NTU2W32xUbG6tixYqpdOnSOZ7jSrF2tfd5NVf+Tpw7dy7b8Ss/N3L6uXtFcnKyVq9erVatWikoKCjH/S5cuKCAgIDrygoAAADgMkopk3Tv3l1jx47V3r17tXTp0mwfM54fOnfurOnTp+vixYtauXKlwsPDs73roGHDhmrYsKFGjRqlpUuXasCAAVq+fLn69et3wxnCwsJkt9t15MiRLIuzHz582LEw8dV8/PHH8vHx0ccff5ypwHr//fdvOF9OrFar7rzzTq1atUqvvvqqVqxYoSZNmqhcuXKOfdatW6fU1FQtXbo00x1Lmzdvvu7rmnW3xZW7iTw9Pa+r9KxQoYI2bdqUaXqoJB06dCi/IjpUrFhRP//8s1q2bHldn0+ZMmVUrFgxpaenX9d7zSmTdHkh85zOeaOfcU6qVq161adv5kavXr20devWa+7Xu3dvzZo1K0/nPn78uDIyMvTMM8/omWeeyTJeq1YtPfzww5owYUKO5zh69Kiky3921yMmJuaqxy9dulQVK1a85l1Ya9as0aVLl65ZXsXGxl5zMXcAAAAAV5f753zjhlz5BWfcuHH66aefsn3MeH7o0qWLUlNT9cEHH+jLL7/MdJePdPkuhH/e+VGnTh1JyjRF7kbccccdkpTtL7azZ8/OtE9O3N3dZbFYlJ6e7tgWGxurTz/9NF8y5qRLly46ceKEFixYoJ9//jnL9J0rT7H7+2cYHx+vhQsXXvc1/fz8FB8ff93H51ZgYKBuv/12vfPOO/rzzz+zjP9zOts/tW/fXna7XXPnznVsS09P18yZM/M9a+fOnXX8+PFsp94lJycrMTHxqse7u7urU6dO+vjjj7Vv374s49d6r9m5+eabFRERoWnTpmVZm+nK34cb/Yxz0rBhQ+3fv/+G/o2OHz9eq1evvubX448/nudz16xZU4sWLcryVaNGDVWoUEGLFi3SAw88IOnyFNd/vg/DMByFVU53mF1x7ty5TD8XJMlms2nSpEny8vJyrDv2d3v27NEvv/yibt26XfO9LFu2TH5+frr77rtz3Cc+Pl5HjhzJtK4ZAAAAgLzjTimTREREqHHjxo5S5Vr/Ff563XzzzapUqZLGjBmj1NTULKXKhx9+qDlz5ujuu+9WZGSkEhISNH/+fBUvXlzt27fPlwx169ZVv379NH36dB0+fNixqPBXX32lzz//XP369XMUYTlp37693n77bd17772Kjo7W6dOnNXv2bFWsWFF79+7Nl5w5XbdYsWJ64YUXHMXG37Vp00ZeXl7q1q2bBgwYoMTERC1YsEBly5bNtoTIjXr16mnjxo16++23FRwcrIiICMci5flt0qRJuuOOO9SwYUP1799fEREROnXqlL799lvFxcVpx44dOR4bFRWl2267TSNHjlRsbKyqV6+uTz75RBcvXsz3nD179tTKlSv12GOPORY1T09P16FDh7Rq1Sp99NFHuuWWW656jtGjR2vLli1q1aqV+vXrp+rVq+v8+fP68ccftWnTJv3+++95yuTm5qbJkyerW7duatKkie6//34FBwfr0KFDOnDggD7++GNJN/YZ5+Suu+7Sa6+9pq1bt6pNmzZ5Pl66/jWltm7dqm+++UaSdObMGSUlJTnWWWvatKmaNWumMmXKZFviTJs2TZIyjf3444/q37+/unXrpooVKyolJUWrV6/W9u3b1b9/f918882ZzuHv769mzZrps88+kyStXbtWEyZM0L333qvw8HCdP39eS5cu1f79+zVq1Khsp9wtWbJE0rV/7p47d05ffPGFOnXqdNWpzBs3bpRhGOrYseNVzwcAAADg6iilTBQdHa0dO3aofv36Waa15afOnTvr9ddfV6VKlbL8gtesWTPt2rVLy5cv16lTp1S8eHHVr19f77zzzlUXC8+rt956SzVr1tT777+vl156SZJUpUoVvf76645F3K+mZcuWmj59uiZNmqRnn31W4eHhGjt2rGJjYwu0lPLx8VFUVJSWLFmiVq1aKTAwMNN41apVtXDhQo0ZM0YvvPCCgoKC9OCDD6pMmTIaOnTodV1z/Pjx+s9//qMxY8YoOTlZvXv3LrBSqkaNGtqyZYvGjx+vhQsX6ty5cypbtqxuuukmDR8+/KrHurm5acmSJXr22We1ZMkSWSwWRUVFafz48Y6nO+YXNzc3LV68WFOnTtWHH36o1atXy8/PTxERERo6dKgqV658zXMEBQVp06ZNevXVV/XJJ59ozpw5Kl26tGrUqKExY8ZcV662bdtq7dq1Gj9+vN5++21lZGQoMjIy07TXG/mMc1KvXj3Vrl1bK1euvO5S6npt3rxZ48ePz7TtyiLuzz33nJo1a5an84WFhalJkyZavXq1Tp48KTc3N1WrVk1TpkzRgAEDMu2bkJAgKfMTAWvVqqXq1atr8eLFOnPmjLy8vFSnTh299957We4MlS6v87V8+XLdfPPN11yUf9WqVbLZbNe8k3XVqlW67bbbXGYNNgAAAODfymLkZRVfAIBTLFq0SE8++aQOHDjg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P617771XNWvW1GuvvaawsDA99thjstlsCgq6vLjglTvJ0tPT9eSTT2rJkiUqVqyYxo0bp65du0qSBg8erBIlSmjChAmKjY1VrVq1NGfOHI0fP15nz57VXXfdpalTp3IHIwAAAAA4mVNLqbVr12jTxg2KjY1VvVtu1fDhz0uS4i9c0Pz587Rv3z4lJycpODhY3bv3VIOGjRzHnjt3VtOnT9P+fXtVrFgxde3WXe3a3WHaeJFi2JSyzfUeHVmYGMlJsvhWztMx//nPf7Ry5Uq1b99ehmFo2bJlioqKyrTPG2+8oQkTJigxMVGlS5e+5jpLjz/+uD744AMlJycrLCxM999/vySpVq1amjhxopKTk7Vp0ybVqlVLhw8f1qpVq7Rx48ZrZm3evLnefvttSdLevXtVvHhxbd26VZJ0/vx57d27V82bN890zE033aQpU6Zkmb4nSevXr9fcuXP1+uuva8mSJXrkkUfUvn17FStWLNvrf/HFF/rmm2+UkJCgli1basmSJY73BgAAAABwDqdO3ytdurS6dI1W23+UPckpKYqMrKhXX52g997/UN179NKbb76h338/5tjnzUlvqFTJknpn/nt66un/6r13F2jfvr2mjQPO1rhxY505c0bly5dXhQoVdOHCBT311FOZ9nnqqad08uRJ7dq1SwMHDnTccZSTyZMn6+TJk9qyZYt69uypkv9/JGn79u3VrFkztWzZ0rGW1RNPPKEJEyZo3bp1uvPOO3Xffffp4MGD2Z739ttv148//qiLFy9q8+bN6tSpkwICAnTgwAF9/fXXqlmzpkqXLp3r937zzTerS5cucnd3V8+ePZWWlua4qys7w4cPV7FixVSuXDm1a9dOP/zwQ477AgAAAADM4dRSqnHj29SoUWMVL1Y80/bg4GB1uvc+BZQpIzc3NzVo0FAhIaE6dOiQJOnPP0/o4MED6n3/A/Lx8VHVqtXUvHlzfbVhvSnjgLNlZGTonnvuUePGjXXy5EmdPHlSjRs3VqdOnbLdv3r16qpTp44GDx58zXO7ubnplltuUbFixfTCCy84tr/00kvauXOn5s+fr88++0wVKlRQzZo19d///leLFi3SE088oYcffjjbcwYGBqpKlSratm2bNm/erObNm6tly5basmWLNm/erBYtWuTp/f+9XLNYLPL19dWlS5dytb+fn58SEhLydD0A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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "SMALL_HIST = 60\n", + "# The tail runs to ~85 min but 99.4% of rows are under 10 min, so the axis stops\n", + "MAX_SECONDS = 600\n", + "TICK_SECONDS = 120 # a multiple of the bin width that divides MAX_SECONDS evenly\n", + "\n", + "diff_seconds = vp_tu_stop_times_cleaned[\"vp_tu_difference\"].dt.total_seconds()\n", + "bins = np.arange(0, MAX_SECONDS + 2 * SMALL_HIST, SMALL_HIST)\n", + "within_noise = (diff_seconds < SMALL_HIST).mean()\n", + "\n", + "# Reuse color_by_date so a date keeps the color it has in the hour of day plot.\n", + "# 2026-04-08 is filtered out of the cleaned frame; the remaining dates keep their\n", + "# own colors rather than being repainted.\n", + "cleaned_dates = [\n", + " d for d in service_dates if d in set(vp_tu_stop_times_cleaned[\"service_date\"])\n", + "]\n", + "\n", + "fig, ax = plt.subplots(figsize=(12, 6), facecolor=SURFACE)\n", + "ax.hist(\n", + " [\n", + " diff_seconds[vp_tu_stop_times_cleaned[\"service_date\"] == d].clip(upper=MAX_SECONDS)\n", + " for d in cleaned_dates\n", + " ],\n", + " bins=bins,\n", + " stacked=True,\n", + " color=[color_by_date[d] for d in cleaned_dates],\n", + " label=[str(d) for d in cleaned_dates],\n", + " edgecolor=SURFACE,\n", + " linewidth=0.6,\n", + ")\n", + "\n", + "# The first bin is the noise floor; mark its right edge.\n", + "ax.axvline(SMALL_HIST, color=INK, linewidth=1.2, linestyle=\"--\")\n", + "ax.annotate(\n", + " f\"{SMALL_HIST}s in the next chart \\n{within_noise:.1%} within\",\n", + " xy=(SMALL_HIST, ax.get_ylim()[1]),\n", + " xytext=(8, -22),\n", + " textcoords=\"offset points\",\n", + " fontsize=9,\n", + " color=INK,\n", + ")\n", + "\n", + "ax.set_facecolor(SURFACE)\n", + "ax.set_title(\n", + " f\"VP vs TU arrival time difference (n={len(diff_seconds):,})\",\n", + " fontsize=12,\n", + " loc=\"left\",\n", + " color=INK,\n", + ")\n", + "ax.set_xlabel(\n", + " f\"|VP arrival − TU arrival| (seconds, {SMALL_HIST}s bins)\",\n", + " fontsize=10,\n", + " color=INK_MUTED,\n", + ")\n", + "ax.set_ylabel(\"stop time entries\", fontsize=10, color=INK_MUTED)\n", + "# The last tick sits on the overflow bin, so it gets a \"+\" label.\n", + "ticks = np.arange(0, MAX_SECONDS + TICK_SECONDS, TICK_SECONDS)\n", + "ax.set_xticks(ticks)\n", + "ax.set_xticklabels([f\"{t:.0f}\" for t in ticks[:-1]] + [f\"{MAX_SECONDS}+\"])\n", + "ax.grid(axis=\"y\", color=GRID, linewidth=0.6)\n", + "ax.set_axisbelow(True)\n", + "for side in (\"top\", \"right\"):\n", + " ax.spines[side].set_visible(False)\n", + "for side in (\"left\", \"bottom\"):\n", + " ax.spines[side].set_color(AXIS)\n", + "ax.tick_params(colors=INK_MUTED, labelsize=9)\n", + "\n", + "legend = ax.legend(title=\"service date\", frameon=False, fontsize=9, title_fontsize=9)\n", + "legend.get_title().set_color(INK_MUTED)\n", + "for text in legend.get_texts():\n", + " text.set_color(INK_MUTED)\n", + "\n", + "fig.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "9b7479fe", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAhPdJREFUeJzs3Xd4FNX+x/HPZrNpG1oKhAAhAaSDonSQjgqIKL2IAlIVL4L6U7EBYkEBGy0UsQOhWAELiCBiRUHpKCReAkoPpG12k/n9gex1TQIJbHbD5v16njyXPefM7Hdmh73mw5wzJsMwDAEAAAAAAAAe5OftAgAAAAAAAFDyEEoBAAAAAADA4wilAAAAAAAA4HGEUgAAAAAAAPA4QikAAAAAAAB4HKEUAAAAAAAAPI5QCgAAAAAAAB5HKAUAAAAAAACPI5QCAAAAAACAxxFKoVhJSkpSaGio3n77bWfb008/rdDQUJdxDodDjz32mGrVqqVSpUqpf//+kqTU1FTdc889qlatmkJDQ/V///d/Hq2/pMrrcyvpUlNTFRsbq2XLlnm7FFwGvlMu3cKFC1W7dm3ZbDZvlwIAAIBiilDqMvTt21eRkZE6e/ZsvmOGDRumcuXK6cSJE5Kk0NBQ50+pUqVUo0YN3XLLLdq0aZOnys7l7bffdqkrv5+6detKkkaNGqUKFSrku78KFSpo1KhRRVrzm2++qZdeekm33nqr5s+fr3vuuUeSNH36dL399tsaPny4Fi5cqAEDBhRpHfCev/76S/fee6+uuuoqhYeHq27durr77rtzjTt8+LAGDx6sSpUqqWLFiurXr58OHjxY5PXNmTNHpUqVUu/evYv8vf5pwYIFuv3221W7dm2Fhobm+3dxw4YNGjNmjK655hpFRkaqfv36uueee/Tnn3/mGrt+/XrdfffdatKkiUqXLu38LiiI84Flfj9jx451Gf/zzz/r1ltvVcWKFRUVFaVbbrlFv/zyS6795uTkaOHChWrRooUqVKiguLg43Xbbbfr2228LXFtBFOY75VLP07JlyxQaGprn9+qoUaPyPG+NGjUq0L5vuummPLe/9dZbC/Q+538OHz4sqXCf5+23366srCwtWrSoQLUCAACg5PH3dgFXsr59+2rNmjX66KOPNHDgwFz96enpWr16tTp37qzw8HBne4cOHTRw4EAZhqHExEQtWLBA3bp108qVK3XDDTd48hAkSa1atdLChQtd2u655x5dd911GjZsmLPNarV6ujRJ0kMPPaT777/fpW3jxo2Kjo7WtGnTcrU3bdpUEydO9GSJ8LBDhw6pU6dOkqS77rpL0dHROnLkiLZu3eoyLjU1VV27dlVKSooeeOABWSwWzZo1SzfddJO2bNni8vfSnex2u+bMmaOxY8fKbDYXyXvk58UXX1Rqaqquu+66PAOm85544gmdOnVKt912m6pXr67ExETFx8dr7dq1+uabb1wCkoSEBK1cuVLXXHONKlasWKh6IiIicn2/SNLnn3+uZcuWqUOHDs62bdu2qXPnzqpcubIeeeQR5eTkaMGCBbrpppv05ZdfqmbNms6xjz76qF599VX1799fI0aMUEpKil577TXddNNNWrdunRo3blyoOvNTmO+USzlPqampeuyxxy74/RoYGKjZs2e7tJUuXbpA+5ekSpUqafLkyS5tUVFRLq+HDRum9u3bu7QZhqFx48YpJiZG0dHRkgr3eQYFBWnQoEGaNWuWxowZI5PJVOCaAQAAUEIYuGTp6elGVFSU0aNHjzz7ly1bZlitVmP58uXONqvVaowfP95l3K+//mpYrVbjlltuKcpyC6V8+fLGyJEj8+wbOXKkUb58+Uva9mISExMNq9VqvPXWWxcc16VLF6Nx48a52uvVq2f06tXrkt47L9nZ2UZGRobb9uerCvq5FVRqauoF+2+77TajXr16xvHjxy84bubMmYbVajV+/PFHZ9uePXuM0qVLG08++aQ7Ss3TBx98YFitVuP3338vsvfIT1JSkpGTk2MYxoX/Ln711VdGdnZ2rjar1WpMmjTJpf3w4cNGVlaWYRiG0atXL6NOnTqXXWe3bt2MihUruvz96tmzp1G5cmWXz/XIkSNGhQoVjAEDBjjb7Ha7ERERYQwaNMhlnwcPHjSsVqvxwAMPXHZ95xXmO+VSztPjjz9uXHPNNcawYcPy/F692Pftxdx44415flcWxNdff21YrVbj+eefv+jYvD5PwzCMn376ybBarcaGDRsuqQYAAAD4NqbvXYbg4GDdcsst+vLLL3X06NFc/cuXL1epUqXUrVu3C+6nfv36Cg8PV1JSUr5jJkyYoAoVKig9PT1X35AhQ1StWjVlZ2dLkn766Sf16NFDMTExioiIUL169TRmzJhCHl3RO336tEaN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Ab744gt9+umnGjJkiDMIy0/Xrl3VokULPfHEE0pKSlLt2rX14Ycf6syZM26p8Z8GDBigVatWady4cc5FzbOzs7Vv3z699957ev/993XttddecB+TJ0/Wpk2b1L59ew0ZMkS1a9fWqVOntG3bNn355Zf673//W6ia/Pz89NJLL6lPnz5q2bKlbr/9dkVFRWnfvn3avXu3PvjgA0nSzJkzdcMNN6hp06YaOnSoYmNjdfToUX3//fdKTk6+4DSlMmXK6LbbbtO8efNkMpkUFxenTz755LICocJ8bpdT+4UEBgbq6aef1siRI3XjjTeqf//+OnTokObMmaOWLVuqR48ezrEjRozQ66+/rl69emncuHGyWCx69dVXVb58ed17773OcT169FCFChXUvHlzlS9fXnv37lV8fLxuuummS5rO1q1bNy1ZskT79+93BiiFdalrSq1Zs0a//vqrpHN3De3YsUPTpk1z1lW/fn1J5xZb//HHH3XHHXdo7969zruEpHN3jXXv3t35eseOHVq9erWkc3dDnjlzxrnPBg0aqGvXrs6x59dJ27Vrl0td2dnZWrlypZo2bZrvtNPNmzfrueeeU8eOHRUWFqYffvhBb731ljp37qy7777bOa5Ro0bq0KGD3nnnHZ05c0YdO3bUn3/+qfj4eAUHB1/woRGSNGzYML322msaPXq0tm3bppiYGL3//vv65ptvNG3atEuewliQ8xQSEuJybs/7+OOPtXXrVpe+v/76S61atVLv3r2d67atX79en376qTp37qybb77ZZR//Pvfbtm3T0KFD1adPH1WrVk2ZmZn66KOP9M0332jo0KG65pprctWxcuVKORyOi/5/WEE+T0n6+eefdfLkyYvedQUAAIASytOP+/Nl5x8z37Zt23zHWK1WY/z48Zf1PpMmTTKsVqvRsGHDXH3btm0zhgwZYtSuXdsICwszYmNjjd69exs//fRTod7jYo+Sz87ONmbPnm00b97cCA8PN8LDw43mzZsbc+bMyfex4P924sQJY/jw4UbFihWN6OhoY/jw4cb27dsNq9VqvPXWW85xU6dONaxWq8u2N954o9G4ceNc+8zv8e1ZWVnGzJkzjcaNGxthYWFG5cqVjdatWxvPPPOMkZKS4hx3oc/nr7/+MsaPH2/UqlXLKFu2rFGtWjWjW7duxmuvveYcs3HjRsNqtRqr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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Zoom in on the sub-minute differences to examine distribution there\n", + "SMALL_HIST_SECONDS = 5\n", + "CUTOFF_SECONDS = 60\n", + "\n", + "diff_under_minute = diff_seconds[diff_seconds <= CUTOFF_SECONDS]\n", + "fine_bins = np.arange(0, CUTOFF_SECONDS + SMALL_HIST_SECONDS, SMALL_HIST_SECONDS)\n", + "cleaned_service_dates = vp_tu_stop_times_cleaned[\"service_date\"]\n", + "\n", + "fig, ax = plt.subplots(figsize=(12, 6), facecolor=SURFACE)\n", + "ax.hist(\n", + " [\n", + " diff_under_minute[cleaned_service_dates.loc[diff_under_minute.index] == d]\n", + " for d in cleaned_dates\n", + " ],\n", + " bins=fine_bins,\n", + " stacked=True,\n", + " color=[color_by_date[d] for d in cleaned_dates],\n", + " label=[str(d) for d in cleaned_dates],\n", + " edgecolor=SURFACE,\n", + " linewidth=0.6,\n", + ")\n", + "\n", + "ax.set_facecolor(SURFACE)\n", + "ax.set_title(\n", + " f\"VP vs TU difference under {CUTOFF_SECONDS}s \"\n", + " f\"(n={len(diff_under_minute):,} of {len(diff_seconds):,})\",\n", + " fontsize=12,\n", + " loc=\"left\",\n", + " color=INK,\n", + ")\n", + "ax.set_xlabel(\n", + " f\"|VP arrival − TU arrival| (seconds, {SMALL_HIST_SECONDS}s bins)\",\n", + " fontsize=10,\n", + " color=INK_MUTED,\n", + ")\n", + "ax.set_ylabel(\"stop time entries\", fontsize=10, color=INK_MUTED)\n", + "ax.set_xticks(np.arange(0, CUTOFF_SECONDS + 10, 10))\n", + "ax.grid(axis=\"y\", color=GRID, linewidth=0.6)\n", + "ax.set_axisbelow(True)\n", + "for side in (\"top\", \"right\"):\n", + " ax.spines[side].set_visible(False)\n", + "for side in (\"left\", \"bottom\"):\n", + " ax.spines[side].set_color(AXIS)\n", + "ax.tick_params(colors=INK_MUTED, labelsize=9)\n", + "\n", + "legend = ax.legend(title=\"service date\", frameon=False, fontsize=9, title_fontsize=9)\n", + "legend.get_title().set_color(INK_MUTED)\n", + "for text in legend.get_texts():\n", + " text.set_color(INK_MUTED)\n", + "\n", + "fig.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "id": "87ae9865", + "metadata": {}, + "source": [ + "### Outlier Investigation" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "12f67118", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9201\n" + ] + } + ], + "source": [ + "OUTLIER_DIFFERENCE = datetime.timedelta(seconds=120)\n", + "vp_tu_stop_times_outliers = vp_tu_stop_times_cleaned.loc[\n", + " vp_tu_stop_times_cleaned[\"vp_tu_difference\"] > OUTLIER_DIFFERENCE\n", + "].copy()\n", + "print(len(vp_tu_stop_times_outliers))" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "ddd35f2c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.06320366541417943\n" + ] + } + ], + "source": [ + "print(len(vp_tu_stop_times_outliers) / len(vp_tu_stop_times_cleaned))" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "018fac51", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
trip_instance_keystop_sequencevp_arrival_timestop_metersshape_array_keystop_idtu_arrival_timen_predictionssourceschedule_arrival_timeschedule_departure_timehas_scheduleservice_datevp_tu_differencevp_tu_difference_seconds
830008d298e3f42cea9e00cfddb076fdd042026-06-10 07:23:344380.0342535c9e314c9eb12d2f42a1172287709df23410602026-06-10 07:18:2690.0both2026-06-10 07:27:262026-06-10 07:27:26True2026-06-100 days 00:05:08308
840008d298e3f42cea9e00cfddb076fdd052026-06-10 07:23:504533.5452965c9e314c9eb12d2f42a1172287709df23419572026-06-10 07:19:2090.0both2026-06-10 07:28:202026-06-10 07:28:20True2026-06-100 days 00:04:30270
860008d298e3f42cea9e00cfddb076fdd072026-06-10 07:25:475505.3711285c9e314c9eb12d2f42a1172287709df23410972026-06-10 07:29:0190.0both2026-06-10 07:34:012026-06-10 07:34:01True2026-06-100 days 00:03:14194
870008d298e3f42cea9e00cfddb076fdd082026-06-10 07:26:595829.0937905c9e314c9eb12d2f42a1172287709df23410312026-06-10 07:30:5590.0both2026-06-10 07:35:552026-06-10 07:35:55True2026-06-100 days 00:03:56236
96000e8ebad1f93d750cc8f215289b4ce182025-12-17 16:54:012543.385058cbfa2dd041603fde52a091d42b0387253630012025-12-17 16:56:20178.0both2025-12-17 16:52:202025-12-17 16:52:20True2025-12-170 days 00:02:19139
\n", + "
" + ], + "text/plain": [ + " trip_instance_key stop_sequence vp_arrival_time \\\n", + "83 0008d298e3f42cea9e00cfddb076fdd0 4 2026-06-10 07:23:34 \n", + "84 0008d298e3f42cea9e00cfddb076fdd0 5 2026-06-10 07:23:50 \n", + "86 0008d298e3f42cea9e00cfddb076fdd0 7 2026-06-10 07:25:47 \n", + "87 0008d298e3f42cea9e00cfddb076fdd0 8 2026-06-10 07:26:59 \n", + "96 000e8ebad1f93d750cc8f215289b4ce1 8 2025-12-17 16:54:01 \n", + "\n", + " stop_meters shape_array_key stop_id tu_arrival_time \\\n", + "83 4380.034253 5c9e314c9eb12d2f42a1172287709df2 341060 2026-06-10 07:18:26 \n", + "84 4533.545296 5c9e314c9eb12d2f42a1172287709df2 341957 2026-06-10 07:19:20 \n", + "86 5505.371128 5c9e314c9eb12d2f42a1172287709df2 341097 2026-06-10 07:29:01 \n", + "87 5829.093790 5c9e314c9eb12d2f42a1172287709df2 341031 2026-06-10 07:30:55 \n", + "96 2543.385058 cbfa2dd041603fde52a091d42b038725 363001 2025-12-17 16:56:20 \n", + "\n", + " n_predictions source schedule_arrival_time schedule_departure_time \\\n", + "83 90.0 both 2026-06-10 07:27:26 2026-06-10 07:27:26 \n", + "84 90.0 both 2026-06-10 07:28:20 2026-06-10 07:28:20 \n", + "86 90.0 both 2026-06-10 07:34:01 2026-06-10 07:34:01 \n", + "87 90.0 both 2026-06-10 07:35:55 2026-06-10 07:35:55 \n", + "96 178.0 both 2025-12-17 16:52:20 2025-12-17 16:52:20 \n", + "\n", + " has_schedule service_date vp_tu_difference vp_tu_difference_seconds \n", + "83 True 2026-06-10 0 days 00:05:08 308 \n", + "84 True 2026-06-10 0 days 00:04:30 270 \n", + "86 True 2026-06-10 0 days 00:03:14 194 \n", + "87 True 2026-06-10 0 days 00:03:56 236 \n", + "96 True 2025-12-17 0 days 00:02:19 139 " + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vp_tu_stop_times_outliers.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "2fcd677d", + "metadata": {}, + "outputs": [], + "source": [ + "vp_tu_stop_times_outliers[\"vp_schedule_difference\"] = (\n", + " vp_tu_stop_times_outliers[\"schedule_arrival_time\"] - vp_tu_stop_times_outliers[\"vp_arrival_time\"]\n", + ").abs()\n", + "vp_tu_stop_times_outliers[\"tu_schedule_difference\"] = (\n", + " vp_tu_stop_times_outliers[\"schedule_arrival_time\"] - vp_tu_stop_times_outliers[\"tu_arrival_time\"]\n", + ").abs()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "ac037f56", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
meanp5p10p15p25p50p75p90p95std_dev
metric
vp_schedule_difference368.532.057.083.0119.0224.0432.0859.01240.0442.2
tu_schedule_difference339.40.00.060.0120.0240.0420.0720.0960.0341.7
\n", + "
" + ], + "text/plain": [ + " mean p5 p10 p15 p25 p50 p75 p90 \\\n", + "metric \n", + "vp_schedule_difference 368.5 32.0 57.0 83.0 119.0 224.0 432.0 859.0 \n", + "tu_schedule_difference 339.4 0.0 0.0 60.0 120.0 240.0 420.0 720.0 \n", + "\n", + " p95 std_dev \n", + "metric \n", + "vp_schedule_difference 1240.0 442.2 \n", + "tu_schedule_difference 960.0 341.7 " + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Spread of the schedule differences among the vp/tu outliers (signed, seconds)\n", + "OUTLIER_DIFF_COLS = [\"vp_schedule_difference\", \"tu_schedule_difference\"]\n", + "PERCENTILES = {\"p5\": 0.05, \"p10\": 0.1, \"p15\": 0.15, \"p25\": 0.25, \"p50\": 0.50, \"p75\": 0.75, \"p90\": 0.90, \"p95\": 0.95}\n", + "\n", + "outlier_diff_seconds = vp_tu_stop_times_outliers[OUTLIER_DIFF_COLS].apply(\n", + " lambda column: column.dt.total_seconds()\n", + ")\n", + "outlier_stats = pd.DataFrame(\n", + " {\n", + " \"mean\": outlier_diff_seconds.mean(),\n", + " **{name: outlier_diff_seconds.quantile(q) for name, q in PERCENTILES.items()},\n", + " \"std_dev\": outlier_diff_seconds.std(),\n", + " }\n", + ")\n", + "outlier_stats.index.name = \"metric\"\n", + "outlier_stats.round(1)\n", + "# there isn't really a clear pattern here, \n", + "# except the p5/p10 is interesting. seems likely that the schedule rt will \"snap\" to schedule times. \n", + "# also TU times are all within 1 min of schedule times. this decreases the usefulness of TU" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "71a5dcea", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
trip_instance_keystop_sequencesourcevp_arrival_timevp_arrival_time_lag1vp_arrival_time_lag2vp_arrival_time_lag3
810008d298e3f42cea9e00cfddb076fdd02both2026-06-10 07:18:28NaTNaTNaT
820008d298e3f42cea9e00cfddb076fdd03both2026-06-10 07:21:442026-06-10 07:18:28NaTNaT
830008d298e3f42cea9e00cfddb076fdd04both2026-06-10 07:23:342026-06-10 07:21:442026-06-10 07:18:28NaT
840008d298e3f42cea9e00cfddb076fdd05both2026-06-10 07:23:502026-06-10 07:23:342026-06-10 07:21:442026-06-10 07:18:28
850008d298e3f42cea9e00cfddb076fdd06both2026-06-10 07:24:412026-06-10 07:23:502026-06-10 07:23:342026-06-10 07:21:44
860008d298e3f42cea9e00cfddb076fdd07both2026-06-10 07:25:472026-06-10 07:24:412026-06-10 07:23:502026-06-10 07:23:34
870008d298e3f42cea9e00cfddb076fdd08both2026-06-10 07:26:592026-06-10 07:25:472026-06-10 07:24:412026-06-10 07:23:50
90000e8ebad1f93d750cc8f215289b4ce12both2025-12-17 16:47:12NaTNaTNaT
91000e8ebad1f93d750cc8f215289b4ce13both2025-12-17 16:48:192025-12-17 16:47:12NaTNaT
93000e8ebad1f93d750cc8f215289b4ce15both2025-12-17 16:51:152025-12-17 16:48:192025-12-17 16:47:12NaT
\n", + "
" + ], + "text/plain": [ + " trip_instance_key stop_sequence source \\\n", + "81 0008d298e3f42cea9e00cfddb076fdd0 2 both \n", + "82 0008d298e3f42cea9e00cfddb076fdd0 3 both \n", + "83 0008d298e3f42cea9e00cfddb076fdd0 4 both \n", + "84 0008d298e3f42cea9e00cfddb076fdd0 5 both \n", + "85 0008d298e3f42cea9e00cfddb076fdd0 6 both \n", + "86 0008d298e3f42cea9e00cfddb076fdd0 7 both \n", + "87 0008d298e3f42cea9e00cfddb076fdd0 8 both \n", + "90 000e8ebad1f93d750cc8f215289b4ce1 2 both \n", + "91 000e8ebad1f93d750cc8f215289b4ce1 3 both \n", + "93 000e8ebad1f93d750cc8f215289b4ce1 5 both \n", + "\n", + " vp_arrival_time vp_arrival_time_lag1 vp_arrival_time_lag2 \\\n", + "81 2026-06-10 07:18:28 NaT NaT \n", + "82 2026-06-10 07:21:44 2026-06-10 07:18:28 NaT \n", + "83 2026-06-10 07:23:34 2026-06-10 07:21:44 2026-06-10 07:18:28 \n", + "84 2026-06-10 07:23:50 2026-06-10 07:23:34 2026-06-10 07:21:44 \n", + "85 2026-06-10 07:24:41 2026-06-10 07:23:50 2026-06-10 07:23:34 \n", + "86 2026-06-10 07:25:47 2026-06-10 07:24:41 2026-06-10 07:23:50 \n", + "87 2026-06-10 07:26:59 2026-06-10 07:25:47 2026-06-10 07:24:41 \n", + "90 2025-12-17 16:47:12 NaT NaT \n", + "91 2025-12-17 16:48:19 2025-12-17 16:47:12 NaT \n", + "93 2025-12-17 16:51:15 2025-12-17 16:48:19 2025-12-17 16:47:12 \n", + "\n", + " vp_arrival_time_lag3 \n", + "81 NaT \n", + "82 NaT \n", + "83 NaT \n", + "84 2026-06-10 07:18:28 \n", + "85 2026-06-10 07:21:44 \n", + "86 2026-06-10 07:23:34 \n", + "87 2026-06-10 07:23:50 \n", + "90 NaT \n", + "91 NaT \n", + "93 NaT " + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Jump detection: attach the previous 3 arrival times within each trip.\n", + "# trip_instance_key is the per trip per service date key, so grouping on it keeps\n", + "# one trip's last stops from leaking into the next trip's first stops.\n", + "# The frame already arrives in trip/stop order (both queries order by them and the\n", + "# outer merges sort on the join keys), so this asserts that rather than re-sorting.\n", + "LAG_STEPS = (1, 2, 3)\n", + "ARRIVAL_COLS = [\"vp_arrival_time\", \"tu_arrival_time\"]\n", + "\n", + "trips = vp_tu_stop_times_cleaned.groupby(\"trip_instance_key\", sort=False)\n", + "assert trips[\"stop_sequence\"].is_monotonic_increasing.all(), \"not in stop_sequence order\"\n", + "\n", + "vp_tu_stop_times_lagged = vp_tu_stop_times_cleaned.assign(\n", + " **{\n", + " f\"{col}_lag{lag}\": trips[col].shift(lag)\n", + " for col in ARRIVAL_COLS\n", + " for lag in LAG_STEPS\n", + " }\n", + ")\n", + "\n", + "vp_tu_stop_times_lagged[\n", + " [\"trip_instance_key\", \"stop_sequence\", \"source\", \"vp_arrival_time\"]\n", + " + [f\"vp_arrival_time_lag{lag}\" for lag in LAG_STEPS]\n", + "].head(10)\n" + ] + }, + { + "cell_type": "markdown", + "id": "8b959954", + "metadata": {}, + "source": [ + "### Analyze backwards jumps" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "813dbd1f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
entriesbackwardspct_backwardsmean_backwards_time_difference_seconds
metric
vp_jump1_seconds1404195490.39370.5
vp_jump2_seconds1352823460.26549.5
vp_jump3_seconds1301642070.16792.5
tu_jump1_seconds14041978005.5570.7
tu_jump2_seconds13528221421.58113.0
tu_jump3_seconds13016411670.90166.4
\n", + "
" + ], + "text/plain": [ + " entries backwards pct_backwards \\\n", + "metric \n", + "vp_jump1_seconds 140419 549 0.39 \n", + "vp_jump2_seconds 135282 346 0.26 \n", + "vp_jump3_seconds 130164 207 0.16 \n", + "tu_jump1_seconds 140419 7800 5.55 \n", + "tu_jump2_seconds 135282 2142 1.58 \n", + "tu_jump3_seconds 130164 1167 0.90 \n", + "\n", + " mean_backwards_time_difference_seconds \n", + "metric \n", + "vp_jump1_seconds 370.5 \n", + "vp_jump2_seconds 549.5 \n", + "vp_jump3_seconds 792.5 \n", + "tu_jump1_seconds 70.7 \n", + "tu_jump2_seconds 113.0 \n", + "tu_jump3_seconds 166.4 " + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Jump size: how far each arrival moved relative to the 1-3 entries before it.\n", + "# Within a trip, arrival times should only ever increase with stop_sequence, so a\n", + "# negative jump is time running backwards - the \"came back down\" half of a jump.\n", + "jump_columns = {\n", + " f\"{col.removesuffix('_arrival_time')}_jump{lag}_seconds\": (\n", + " vp_tu_stop_times_lagged[col] - vp_tu_stop_times_lagged[f\"{col}_lag{lag}\"]\n", + " ).dt.total_seconds()\n", + " for col in ARRIVAL_COLS\n", + " for lag in LAG_STEPS\n", + "}\n", + "vp_tu_stop_times_lagged = vp_tu_stop_times_lagged.assign(**jump_columns)\n", + "JUMP_COLS = list(jump_columns)\n", + "\n", + "# How often does each feed run backwards? The denominator is entries that have a\n", + "# lag to compare against, so trip starts and gaps from the other feed drop out.\n", + "backwards_steps = pd.DataFrame(\n", + " {\n", + " \"entries\": vp_tu_stop_times_lagged[JUMP_COLS].notna().sum(),\n", + " \"backwards\": (vp_tu_stop_times_lagged[JUMP_COLS] < 0).sum(),\n", + " }\n", + ")\n", + "backwards_steps[\"pct_backwards\"] = (\n", + " backwards_steps[\"backwards\"] / backwards_steps[\"entries\"] * 100\n", + ").round(2)\n", + "# How far time runs backwards when it does, in seconds. Only the negative jumps\n", + "# are averaged, so this is the typical size of a backwards step rather than a\n", + "# net drift across all entries.\n", + "jumps = vp_tu_stop_times_lagged[JUMP_COLS]\n", + "backwards_steps[\"mean_backwards_time_difference_seconds\"] = (\n", + " jumps.where(jumps < 0).abs().mean().round(1)\n", + ")\n", + "backwards_steps.index.name = \"metric\"\n", + "backwards_steps\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "cal-itp-data-analyses (3.11.x)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/gtfs_rt_comparison/queries/feed_keys.sql b/gtfs_rt_comparison/queries/feed_keys.sql new file mode 100644 index 000000000..638a45ff8 --- /dev/null +++ b/gtfs_rt_comparison/queries/feed_keys.sql @@ -0,0 +1,15 @@ +-- Schedule feed keys for the target feed, and the trip updates feed that goes +-- with each one. Left join because a schedule feed can exist on a date with no +-- trip updates feed at all - those rows are the dates to drop later. +select + tu.base64_url as tu_base64_url, + sched.feed_key as schedule_feed_key, + sched.date +from mart_gtfs.fct_daily_schedule_feeds as sched +left join mart_gtfs.fct_daily_rt_feed_files as tu + on sched.feed_key = tu.schedule_feed_key + and sched.date = tu.date + and tu.feed_type = 'trip_updates' +where + sched.date in {{ DATES | sql_in }} + and sched.gtfs_dataset_name = '{{ GTFS_DATASET_NAME }}' diff --git a/gtfs_rt_comparison/queries/operator_trips.sql b/gtfs_rt_comparison/queries/operator_trips.sql new file mode 100644 index 000000000..8367a0333 --- /dev/null +++ b/gtfs_rt_comparison/queries/operator_trips.sql @@ -0,0 +1,8 @@ +-- Every scheduled trip this operator ran on the dates of interest. The VP +-- parquets are statewide, so these keys are what filters them down; keeping all +-- of them also keeps trips that VP saw but TU never predicted. +select trip_instance_key, trip_id, service_date +from mart_gtfs.fct_scheduled_trips +where + service_date in {{ DATES | sql_in }} + and name = '{{ GTFS_DATASET_NAME }}' diff --git a/gtfs_rt_comparison/queries/schedule_feeds.sql b/gtfs_rt_comparison/queries/schedule_feeds.sql new file mode 100644 index 000000000..33e7731cf --- /dev/null +++ b/gtfs_rt_comparison/queries/schedule_feeds.sql @@ -0,0 +1,7 @@ +-- The _valid_from of each schedule feed version. dim_stop_arrivals is +-- partitioned by _feed_valid_from, so this is what lets that query prune. +select + key as feed_key, + _valid_from as feed_valid_from +from mart_gtfs.dim_schedule_feeds +where key in {{ FEED_KEYS | sql_in }} diff --git a/gtfs_rt_comparison/queries/schedule_stop_times.sql b/gtfs_rt_comparison/queries/schedule_stop_times.sql new file mode 100644 index 000000000..d1095d6ea --- /dev/null +++ b/gtfs_rt_comparison/queries/schedule_stop_times.sql @@ -0,0 +1,49 @@ +-- Scheduled stop times, keyed by trip_instance_key + service_date + stop_sequence. +-- dim_stop_arrivals is per feed version, not per date. fct_scheduled_trips +-- expands a feed's trips out per service date and carries trip_instance_key, +-- which is the key the VP stop arrivals use. +-- +-- dim_stop_arrivals is partitioned by _feed_valid_from and clustered by +-- feed_key, so both have to be literals here. +with sched_trips as ( + select trip_instance_key, feed_key, trip_id, service_date + from mart_gtfs.fct_scheduled_trips + where + service_date in {{ DATES | sql_in }} + and name = '{{ GTFS_DATASET_NAME }}' +), +arrivals as ( + select feed_key, trip_id, stop_id, stop_sequence, feed_timezone, + arrival_sec, departure_sec + from mart_gtfs.dim_stop_arrivals + where + _feed_valid_from in {{ FEED_VALID_FROMS | sql_in_timestamps }} + and feed_key in {{ FEED_KEYS | sql_in }} +) +-- arrival_sec/departure_sec are gtfs time - count from midnight and are allowed to run past +-- 24h on owl trips, so they are added to midnight in the feed's own timezone +-- and converted to Pacific, matching how the VP and TU arrival times read. +select + sched_trips.trip_instance_key, + sched_trips.service_date, + arrivals.stop_sequence, + arrivals.stop_id, + datetime( + timestamp_add( + timestamp(sched_trips.service_date, arrivals.feed_timezone), + interval arrivals.arrival_sec second + ), + 'America/Los_Angeles' + ) as schedule_arrival_time, + datetime( + timestamp_add( + timestamp(sched_trips.service_date, arrivals.feed_timezone), + interval arrivals.departure_sec second + ), + 'America/Los_Angeles' + ) as schedule_departure_time +from arrivals +inner join sched_trips + on sched_trips.feed_key = arrivals.feed_key + and sched_trips.trip_id = arrivals.trip_id +order by trip_instance_key, stop_sequence diff --git a/gtfs_rt_comparison/queries/stop_time_metrics_counts.sql b/gtfs_rt_comparison/queries/stop_time_metrics_counts.sql new file mode 100644 index 000000000..d8e6a133e --- /dev/null +++ b/gtfs_rt_comparison/queries/stop_time_metrics_counts.sql @@ -0,0 +1,13 @@ +-- Count fct_stop_time_metrics rows per trip updates feed per date. The dates +-- with a significant number of rows are the dates where both TU and VP based +-- stop times are available. +select + base64_url as tu_base64_url, + service_date, + count(*) as n_stop_time_metrics +from mart_gtfs.fct_stop_time_metrics +where + service_date in {{ DATES | sql_in }} + and base64_url in {{ TU_URLS | sql_in }} +group by base64_url, service_date +order by service_date diff --git a/gtfs_rt_comparison/queries/tu_stop_times.sql b/gtfs_rt_comparison/queries/tu_stop_times.sql new file mode 100644 index 000000000..ebe0a2e45 --- /dev/null +++ b/gtfs_rt_comparison/queries/tu_stop_times.sql @@ -0,0 +1,31 @@ +-- TU based stop times, keyed the way the VP stop times are (schedule trip_instance_key + service_date + stop_sequence). + +-- Ordered by trip and stop so the frame arrives ready for within-trip lags. +with stm as ( + select service_date, schedule_base64_url, trip_id, stop_id, stop_sequence, + actual_arrival_pacific, n_predictions + from mart_gtfs.fct_stop_time_metrics + where + service_date in {{ DATES | sql_in }} + and base64_url in {{ TU_URLS | sql_in }} +), +sched as ( + select trip_instance_key, trip_id, base64_url, service_date + from mart_gtfs.fct_scheduled_trips + where + service_date in {{ DATES | sql_in }} + and name = '{{ GTFS_DATASET_NAME }}' +) +select + sched.trip_instance_key, + stm.service_date, + stm.stop_sequence, + stm.stop_id, + stm.actual_arrival_pacific as tu_arrival_time, + stm.n_predictions +from stm +left join sched + on sched.service_date = stm.service_date + and sched.trip_id = stm.trip_id + and sched.base64_url = stm.schedule_base64_url +order by trip_instance_key, stop_sequence