diff --git a/_shared_utils/shared_utils/create_portfolio_display_yaml.py b/_shared_utils/shared_utils/create_portfolio_display_yaml.py index 69e02960a4..0b50425a12 100644 --- a/_shared_utils/shared_utils/create_portfolio_display_yaml.py +++ b/_shared_utils/shared_utils/create_portfolio_display_yaml.py @@ -46,7 +46,8 @@ "Roseville Transit GMV Schedule", # dupe with Roseville Schedule "South San Francisco Schedule", # dupe with Bay Area 511 South San Francisco Shuttle "Tahoe Transportation District GMV Schedule", # dupe with Tahoe Transportation District Schedule - "Victor Valley GMV Schedule", # dupe with Victor Valley Schedule + "Victor Valley GMV Schedule", # dupe with Victor Valley Schedule, + "Desert Roadrunner GMV Schedule", #dupe with Desert Roadrunner Schedule ] diff --git a/gtfs_digest/17_route_direction_viz_wrangling.ipynb b/gtfs_digest/17_route_direction_viz_wrangling.ipynb index 06979ed9b9..f1f5bcf2e9 100644 --- a/gtfs_digest/17_route_direction_viz_wrangling.ipynb +++ b/gtfs_digest/17_route_direction_viz_wrangling.ipynb @@ -17,7 +17,7 @@ }, "outputs": [], "source": [ - "import _report_visuals_utils\n", + "\n", "import altair as alt\n", "import merge_data\n", "import numpy as np\n", @@ -78,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 12, "id": "97c1c3d5-de4c-4e10-ab32-69b5426359e1", "metadata": { "scrolled": true, @@ -99,6 +99,106 @@ ").drop_duplicates()" ] }, + { + "cell_type": "code", + "execution_count": 6, + "id": "12f17590-245f-4792-8508-c3104034e49e", + "metadata": { + "tags": [] + }, + "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", + "
schedule_gtfs_dataset_keynameorganization_nameservice_date
01770249a5a2e770ca90628434d4934b1VCTC GMV ScheduleVentura County Transportation Commission2024-01-17
11770249a5a2e770ca90628434d4934b1VCTC GMV ScheduleCity of Simi Valley2024-01-17
21770249a5a2e770ca90628434d4934b1VCTC GMV ScheduleCity of Thousand Oaks2024-01-17
31770249a5a2e770ca90628434d4934b1VCTC GMV ScheduleCity of Camarillo2024-01-17
41770249a5a2e770ca90628434d4934b1VCTC GMV ScheduleGold Coast Transit District2024-01-17
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key name \\\n", + "0 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "1 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "2 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "3 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "4 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "\n", + " organization_name service_date \n", + "0 Ventura County Transportation Commission 2024-01-17 \n", + "1 City of Simi Valley 2024-01-17 \n", + "2 City of Thousand Oaks 2024-01-17 \n", + "3 City of Camarillo 2024-01-17 \n", + "4 Gold Coast Transit District 2024-01-17 " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, { "cell_type": "markdown", "id": "660dd8be-f956-4964-b1b5-a517b8e1672e", @@ -194,29 +294,291 @@ "* We only need schd key, name, service_date, portfolio_org_name & de duplicate " ] }, + { + "cell_type": "markdown", + "id": "11986c96-1676-40b4-8af3-4413178aabc7", + "metadata": {}, + "source": [ + "## CIty of Duarte and Foothill Transit have the same feed." + ] + }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "2591e737-e2b5-4846-b34d-1b9220ec7e9b", "metadata": { "scrolled": true, "tags": [] }, - "outputs": [], + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
schedule_gtfs_dataset_keynameorganization_nameservice_date
99f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleCity of Duarte2024-02-14
100f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit2024-02-14
97f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleCity of Duarte2024-03-13
98f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit2024-03-13
100f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleCity of Duarte2024-04-17
101f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit2024-04-17
97f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleCity of Duarte2024-05-22
98f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit2024-05-22
90f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleCity of Duarte2024-06-12
91f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit2024-06-12
104f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleCity of Duarte2024-07-17
105f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit2024-07-17
110f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleCity of Duarte2024-08-14
111f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit2024-08-14
111f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleCity of Duarte2024-09-18
112f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit2024-09-18
112f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleCity of Duarte2024-10-16
113f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit2024-10-16
119f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleCity of Duarte2024-11-13
120f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit2024-11-13
120f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleCity of Duarte2024-12-11
121f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit2024-12-11
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key name organization_name \\\n", + "99 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule City of Duarte \n", + "100 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule Foothill Transit \n", + "97 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule City of Duarte \n", + "98 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule Foothill Transit \n", + "100 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule City of Duarte \n", + "101 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule Foothill Transit \n", + "97 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule City of Duarte \n", + "98 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule Foothill Transit \n", + "90 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule City of Duarte \n", + "91 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule Foothill Transit \n", + "104 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule City of Duarte \n", + "105 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule Foothill Transit \n", + "110 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule City of Duarte \n", + "111 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule Foothill Transit \n", + "111 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule City of Duarte \n", + "112 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule Foothill Transit \n", + "112 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule City of Duarte \n", + "113 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule Foothill Transit \n", + "119 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule City of Duarte \n", + "120 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule Foothill Transit \n", + "120 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule City of Duarte \n", + "121 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule Foothill Transit \n", + "\n", + " service_date \n", + "99 2024-02-14 \n", + "100 2024-02-14 \n", + "97 2024-03-13 \n", + "98 2024-03-13 \n", + "100 2024-04-17 \n", + "101 2024-04-17 \n", + "97 2024-05-22 \n", + "98 2024-05-22 \n", + "90 2024-06-12 \n", + "91 2024-06-12 \n", + "104 2024-07-17 \n", + "105 2024-07-17 \n", + "110 2024-08-14 \n", + "111 2024-08-14 \n", + "111 2024-09-18 \n", + "112 2024-09-18 \n", + "112 2024-10-16 \n", + "113 2024-10-16 \n", + "119 2024-11-13 \n", + "120 2024-11-13 \n", + "120 2024-12-11 \n", + "121 2024-12-11 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# df2.loc[df2.name.str.contains(\"Foothill\")]" + "df.loc[df.name.str.contains(\"Foothill\")]" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "id": "e913de41-a8b7-4a06-98e8-1e4a46f4b71c", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['schedule_gtfs_dataset_key', 'name', 'organization_name',\n", + " 'service_date'],\n", + " dtype='object')" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# df2.loc[df2.name.str.contains(\"Foothill\")].columns" + "df.loc[df.name.str.contains(\"Foothill\")].columns" ] }, { @@ -224,1344 +586,35 @@ "id": "e40a7bc8-4ff9-4db8-9c4c-061ca6a69494", "metadata": {}, "source": [ + "## Basin Transit GMV and Morongo Basin Schedule are two different feeds presented by the same organization name\n", "* De duplicating on `key`, `name`, and `portfolio_organization_name`\n", "* I can get it to one row but then I would have to check if `route_name-direction` are unique to the portfolio_organization_name\n", "* What if Basin Transit GMV and Morongo Basin use both Route ID 1? Don't mix them up if they are using the same route ID name.\n", "* These are different feeds so there is no gurantee that they have to pick uniqe route IDS\n", "* If route IDS aren't unique, then we have to leave it as 2 rows \n", - "* Just leave it as two rows since this will fix both the top and bottom examples, but this means I will have to unpack any route IDs that are repated across different `schedule_gtfs_dataset_keys`" + "* Just leave it as two rows since this will fix both the top and bottom examples, but this means I will have to unpack any route IDs that are repated across different `schedule_gtfs_dataset_keys`\n", + "\n", + "## Notes 6/17\n", + "* Basin Transit has 10 routes and Morongo have 5. \n", + "* There are 15 individual paths, we want to capture that in our map. \n", + "* In contrast, for Foothill and Duarte they are repeating the same route over & over again. \n", + "* Organization name can expand the stuff inthe feed that we don't want.\n", + "* We know it's coming from the merge_data the crosswalk area. \n", + "* RElationship we want in the portfolio is show distinct and unique info for transit.\n", + "* If we are drawing a route map, we want all the routes without duplicating them. \n", + "* For organization_name == Basin Transit, we want everything because it represents two disticnt feeds.\n", + "* If we are grabbing the same feed like Foothill Transit, we want to de-duplicate." ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "id": "1b1be4fb-56ab-4339-b906-c4e674808bda", "metadata": { "scrolled": true, "tags": [] }, "outputs": [ - { - "data": { - "text/plain": [ - "'df2.loc[df2.organization_name.str.contains(\"Basin\")].sort_values(\\n by=[\"portfolio_organization_name\", \"service_date\"]\\n)'" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\"\"\"df2.loc[df2.organization_name.str.contains(\"Basin\")].sort_values(\n", - " by=[\"portfolio_organization_name\", \"service_date\"]\n", - ")\"\"\"" - ] - }, - { - "cell_type": "markdown", - "id": "3daadaa6-bd2b-443e-820a-8111bc2be45e", - "metadata": {}, - "source": [ - "## Function 1 for Bullet Point (2): time-series operator route-direction data becomes portfolio_organization route-direction data" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "21a2c871-a007-4c5d-bbb1-e60840677934", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "DIGEST_RT_SCHED = GTFS_DATA_DICT.digest_tables.route_schedule_vp" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "f0af1d32-4a16-45ac-8b5b-49a0cebc40b1", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "schd_vp_df = pd.read_parquet(f\"{RT_SCHED_GCS}{DIGEST_RT_SCHED}.parquet\")" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "5885a1d4-8b23-45bf-8e02-ca43ee56dda3", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "def portfolio_organization_name_grain(df: pd.DataFrame) -> pd.DataFrame:\n", - " \"\"\"\n", - " Input df after merge_data_sources_by_route_direction().\n", - " Change grain from \"schedule_gtfs_dataset_key\", \"name\", \"organization_name\" to\n", - " \"portfolio_organization_name\". Do some light cleaning.\n", - " \"\"\"\n", - " # Drop duplicates for these following rows\n", - " df2 = df.drop_duplicates(\n", - " subset=[\n", - " \"schedule_gtfs_dataset_key\",\n", - " \"organization_name\",\n", - " \"service_date\",\n", - " \"portfolio_organization_name\",\n", - " \"route_id\",\n", - " \"direction_id\",\n", - " \"time_period\",\n", - " ]\n", - " )\n", - "\n", - " return df2" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "5271c024-814b-44b1-a6c1-66f14ec2f587", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# Test it out\n", - "function1_test = portfolio_organization_name_grain(schd_vp_df)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "0c816649-2b1e-4ee3-8128-1492b8a6a62f", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(367926, 708563)" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(function1_test), len(schd_vp_df)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "1eb2c68e-c5e9-465d-bc52-edd7a50fc03d", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['schedule_gtfs_dataset_key', 'route_id', 'direction_id', 'time_period',\n", - " 'avg_scheduled_service_minutes', 'avg_stop_miles', 'n_scheduled_trips',\n", - " 'frequency', 'service_date', 'is_express', 'is_ferry', 'is_rail',\n", - " 'is_coverage', 'is_local', 'is_downtown_local', 'is_rapid', 'typology',\n", - " 'name', 'combined_name', 'recent_combined_name', 'recent_route_id',\n", - " 'route_primary_direction', 'minutes_atleast1_vp', 'minutes_atleast2_vp',\n", - " 'total_rt_service_minutes', 'total_scheduled_service_minutes',\n", - " 'total_vp', 'vp_in_shape', 'is_early', 'is_ontime', 'is_late',\n", - " 'n_vp_trips', 'vp_per_minute', 'pct_in_shape',\n", - " 'pct_rt_journey_atleast1_vp', 'pct_rt_journey_atleast2_vp',\n", - " 'pct_sched_journey_atleast1_vp', 'pct_sched_journey_atleast2_vp',\n", - " 'rt_sched_journey_ratio', 'avg_rt_service_minutes', 'sched_rt_category',\n", - " 'speed_mph', 'schedule_source_record_id', 'base64_url',\n", - " 'organization_source_record_id', 'organization_name',\n", - " 'caltrans_district', 'portfolio_organization_name'],\n", - " dtype='object')" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "function1_test.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "081b495d-7189-4bdd-a11f-e12d520c848d", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_1561/4047423999.py:1: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " function1_test.portfolio_organization_name = (\n" - ] - } - ], - "source": [ - "function1_test.portfolio_organization_name = (\n", - " function1_test.portfolio_organization_name.fillna(\"None\")\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "e0061484-c735-4fcb-8316-4a3b5b1d86a2", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "def check_results(df: pd.DataFrame, operator: str) -> pd.DataFrame:\n", - " df2 = df.loc[df.portfolio_organization_name.str.contains(operator)]\n", - "\n", - " agg1 = df2.groupby([\"service_date\", \"name\"]).agg({\"route_id\": \"nunique\"})\n", - "\n", - " display(agg1)\n", - " df3 = (\n", - " df2[\n", - " [\n", - " \"service_date\",\n", - " \"schedule_gtfs_dataset_key\",\n", - " \"name\",\n", - " \"portfolio_organization_name\",\n", - " ]\n", - " ]\n", - " .drop_duplicates()\n", - " .sort_values(\n", - " by=[\n", - " \"service_date\",\n", - " \"name\",\n", - " ]\n", - " )\n", - " )\n", - " display(df3)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "ea3f3bd9-904e-4538-84a7-9d8509c2ad37", - "metadata": { - "scrolled": true, - "tags": [] - }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
route_id
service_datename
2023-03-15Bay Area 511 Muni Schedule67
2023-04-12Bay Area 511 Muni Schedule67
2023-05-17Bay Area 511 Muni Schedule67
2023-06-14Bay Area 511 Muni Schedule67
2023-07-12Bay Area 511 Muni Schedule67
2023-08-15Bay Area 511 Muni Schedule67
2023-10-11Bay Area 511 Muni Schedule68
2023-11-15Bay Area 511 Muni Schedule70
2023-12-13Bay Area 511 Muni Schedule68
2024-01-17Bay Area 511 Muni Schedule68
2024-02-14Bay Area 511 Muni Schedule68
2024-03-13Bay Area 511 Muni Schedule70
2024-04-17Bay Area 511 Muni Schedule68
2024-05-22Bay Area 511 Muni Schedule68
2024-07-17Bay Area 511 Muni Schedule68
2024-08-14Bay Area 511 Muni Schedule68
2024-09-18Bay Area 511 Muni Schedule69
2024-10-16Bay Area 511 Muni Schedule68
2024-11-13Bay Area 511 Muni Schedule68
2024-12-11Bay Area 511 Muni Schedule68
2025-01-15Bay Area 511 Muni Schedule70
Golden Gate Park Shuttle Schedule1
2025-02-12Bay Area 511 Golden Gate Park Shuttle Schedule1
Bay Area 511 Muni Schedule69
2025-03-12Bay Area 511 Golden Gate Park Shuttle Schedule1
\n", - "
" - ], - "text/plain": [ - " route_id\n", - "service_date name \n", - "2023-03-15 Bay Area 511 Muni Schedule 67\n", - "2023-04-12 Bay Area 511 Muni Schedule 67\n", - "2023-05-17 Bay Area 511 Muni Schedule 67\n", - "2023-06-14 Bay Area 511 Muni Schedule 67\n", - "2023-07-12 Bay Area 511 Muni Schedule 67\n", - "2023-08-15 Bay Area 511 Muni Schedule 67\n", - "2023-10-11 Bay Area 511 Muni Schedule 68\n", - "2023-11-15 Bay Area 511 Muni Schedule 70\n", - "2023-12-13 Bay Area 511 Muni Schedule 68\n", - "2024-01-17 Bay Area 511 Muni Schedule 68\n", - "2024-02-14 Bay Area 511 Muni Schedule 68\n", - "2024-03-13 Bay Area 511 Muni Schedule 70\n", - "2024-04-17 Bay Area 511 Muni Schedule 68\n", - "2024-05-22 Bay Area 511 Muni Schedule 68\n", - "2024-07-17 Bay Area 511 Muni Schedule 68\n", - "2024-08-14 Bay Area 511 Muni Schedule 68\n", - "2024-09-18 Bay Area 511 Muni Schedule 69\n", - "2024-10-16 Bay Area 511 Muni Schedule 68\n", - "2024-11-13 Bay Area 511 Muni Schedule 68\n", - "2024-12-11 Bay Area 511 Muni Schedule 68\n", - "2025-01-15 Bay Area 511 Muni Schedule 70\n", - " Golden Gate Park Shuttle Schedule 1\n", - "2025-02-12 Bay Area 511 Golden Gate Park Shuttle Schedule 1\n", - " Bay Area 511 Muni Schedule 69\n", - "2025-03-12 Bay Area 511 Golden Gate Park Shuttle Schedule 1" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
service_dateschedule_gtfs_dataset_keynameportfolio_organization_name
6307992023-03-15d8453d9a4ae1184f7e1339f7c61849dfBay Area 511 Muni ScheduleCity and County of San Francisco
4170202023-04-127cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170212023-05-177cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170222023-06-147cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170232023-07-127cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170242023-08-157cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170252023-10-117cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170262023-11-157cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170272023-12-137cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170282024-01-177cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170292024-02-147cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170302024-03-137cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170312024-04-177cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170322024-05-227cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170332024-07-177cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170342024-08-147cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170352024-09-187cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170362024-10-167cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170372024-11-137cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170382024-12-117cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4170392025-01-157cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
4530412025-01-158fa99062694cb2eec80c647258cf70ddGolden Gate Park Shuttle ScheduleCity and County of San Francisco
6440432025-02-12e6230c3c190508921b7f350020e82ed5Bay Area 511 Golden Gate Park Shuttle ScheduleCity and County of San Francisco
4170402025-02-127cc0cb1871dfd558f11a2885c145d144Bay Area 511 Muni ScheduleCity and County of San Francisco
6440442025-03-12e6230c3c190508921b7f350020e82ed5Bay Area 511 Golden Gate Park Shuttle ScheduleCity and County of San Francisco
\n", - "
" - ], - "text/plain": [ - " service_date schedule_gtfs_dataset_key \\\n", - "630799 2023-03-15 d8453d9a4ae1184f7e1339f7c61849df \n", - "417020 2023-04-12 7cc0cb1871dfd558f11a2885c145d144 \n", - "417021 2023-05-17 7cc0cb1871dfd558f11a2885c145d144 \n", - "417022 2023-06-14 7cc0cb1871dfd558f11a2885c145d144 \n", - "417023 2023-07-12 7cc0cb1871dfd558f11a2885c145d144 \n", - "417024 2023-08-15 7cc0cb1871dfd558f11a2885c145d144 \n", - "417025 2023-10-11 7cc0cb1871dfd558f11a2885c145d144 \n", - "417026 2023-11-15 7cc0cb1871dfd558f11a2885c145d144 \n", - "417027 2023-12-13 7cc0cb1871dfd558f11a2885c145d144 \n", - "417028 2024-01-17 7cc0cb1871dfd558f11a2885c145d144 \n", - "417029 2024-02-14 7cc0cb1871dfd558f11a2885c145d144 \n", - "417030 2024-03-13 7cc0cb1871dfd558f11a2885c145d144 \n", - "417031 2024-04-17 7cc0cb1871dfd558f11a2885c145d144 \n", - "417032 2024-05-22 7cc0cb1871dfd558f11a2885c145d144 \n", - "417033 2024-07-17 7cc0cb1871dfd558f11a2885c145d144 \n", - "417034 2024-08-14 7cc0cb1871dfd558f11a2885c145d144 \n", - "417035 2024-09-18 7cc0cb1871dfd558f11a2885c145d144 \n", - "417036 2024-10-16 7cc0cb1871dfd558f11a2885c145d144 \n", - "417037 2024-11-13 7cc0cb1871dfd558f11a2885c145d144 \n", - "417038 2024-12-11 7cc0cb1871dfd558f11a2885c145d144 \n", - "417039 2025-01-15 7cc0cb1871dfd558f11a2885c145d144 \n", - "453041 2025-01-15 8fa99062694cb2eec80c647258cf70dd \n", - "644043 2025-02-12 e6230c3c190508921b7f350020e82ed5 \n", - "417040 2025-02-12 7cc0cb1871dfd558f11a2885c145d144 \n", - "644044 2025-03-12 e6230c3c190508921b7f350020e82ed5 \n", - "\n", - " name \\\n", - "630799 Bay Area 511 Muni Schedule \n", - "417020 Bay Area 511 Muni Schedule \n", - "417021 Bay Area 511 Muni Schedule \n", - "417022 Bay Area 511 Muni Schedule \n", - "417023 Bay Area 511 Muni Schedule \n", - "417024 Bay Area 511 Muni Schedule \n", - "417025 Bay Area 511 Muni Schedule \n", - "417026 Bay Area 511 Muni Schedule \n", - "417027 Bay Area 511 Muni Schedule \n", - "417028 Bay Area 511 Muni Schedule \n", - "417029 Bay Area 511 Muni Schedule \n", - "417030 Bay Area 511 Muni Schedule \n", - "417031 Bay Area 511 Muni Schedule \n", - "417032 Bay Area 511 Muni Schedule \n", - "417033 Bay Area 511 Muni Schedule \n", - "417034 Bay Area 511 Muni Schedule \n", - "417035 Bay Area 511 Muni Schedule \n", - "417036 Bay Area 511 Muni Schedule \n", - "417037 Bay Area 511 Muni Schedule \n", - "417038 Bay Area 511 Muni Schedule \n", - "417039 Bay Area 511 Muni Schedule \n", - "453041 Golden Gate Park Shuttle Schedule \n", - "644043 Bay Area 511 Golden Gate Park Shuttle Schedule \n", - "417040 Bay Area 511 Muni Schedule \n", - "644044 Bay Area 511 Golden Gate Park Shuttle Schedule \n", - "\n", - " portfolio_organization_name \n", - "630799 City and County of San Francisco \n", - "417020 City and County of San Francisco \n", - "417021 City and County of San Francisco \n", - "417022 City and County of San Francisco \n", - "417023 City and County of San Francisco \n", - "417024 City and County of San Francisco \n", - "417025 City and County of San Francisco \n", - "417026 City and County of San Francisco \n", - "417027 City and County of San Francisco \n", - "417028 City and County of San Francisco \n", - "417029 City and County of San Francisco \n", - "417030 City and County of San Francisco \n", - "417031 City and County of San Francisco \n", - "417032 City and County of San Francisco \n", - "417033 City and County of San Francisco \n", - "417034 City and County of San Francisco \n", - "417035 City and County of San Francisco \n", - "417036 City and County of San Francisco \n", - "417037 City and County of San Francisco \n", - "417038 City and County of San Francisco \n", - "417039 City and County of San Francisco \n", - "453041 City and County of San Francisco \n", - "644043 City and County of San Francisco \n", - "417040 City and County of San Francisco \n", - "644044 City and County of San Francisco " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "check_results(function1_test, \"City and County of San Francisco\")" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "6a9c9725-d6d5-4de5-8beb-8a00fb30e925", - "metadata": { - "scrolled": true, - "tags": [] - }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
route_id
service_datename
2023-03-15Foothill Schedule38
2023-04-12Foothill Schedule38
2023-05-17Foothill Schedule38
2023-06-14Foothill Schedule38
2023-07-12Foothill Schedule38
2023-08-15Foothill Schedule36
2023-09-13Foothill Schedule36
2023-10-11Foothill Schedule36
2023-11-15Foothill Schedule35
2023-12-13Foothill Schedule35
2024-03-13Foothill Schedule35
2024-04-17Foothill Schedule35
2024-05-22Foothill Schedule35
2024-06-12Foothill Schedule35
2024-07-17Foothill Schedule35
2024-08-14Foothill Schedule35
2024-09-18Foothill Schedule35
2024-10-16Foothill Schedule35
2024-11-13Foothill Schedule35
2024-12-11Foothill Schedule35
2025-01-15Foothill Schedule35
2025-02-12Foothill Schedule35
\n", - "
" - ], - "text/plain": [ - " route_id\n", - "service_date name \n", - "2023-03-15 Foothill Schedule 38\n", - "2023-04-12 Foothill Schedule 38\n", - "2023-05-17 Foothill Schedule 38\n", - "2023-06-14 Foothill Schedule 38\n", - "2023-07-12 Foothill Schedule 38\n", - "2023-08-15 Foothill Schedule 36\n", - "2023-09-13 Foothill Schedule 36\n", - "2023-10-11 Foothill Schedule 36\n", - "2023-11-15 Foothill Schedule 35\n", - "2023-12-13 Foothill Schedule 35\n", - "2024-03-13 Foothill Schedule 35\n", - "2024-04-17 Foothill Schedule 35\n", - "2024-05-22 Foothill Schedule 35\n", - "2024-06-12 Foothill Schedule 35\n", - "2024-07-17 Foothill Schedule 35\n", - "2024-08-14 Foothill Schedule 35\n", - "2024-09-18 Foothill Schedule 35\n", - "2024-10-16 Foothill Schedule 35\n", - "2024-11-13 Foothill Schedule 35\n", - "2024-12-11 Foothill Schedule 35\n", - "2025-01-15 Foothill Schedule 35\n", - "2025-02-12 Foothill Schedule 35" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
service_dateschedule_gtfs_dataset_keynameportfolio_organization_name
6731542023-03-15f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6731582023-04-12f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6731622023-05-17f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6731662023-06-14f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6731682023-07-12f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6731702023-08-15f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6731742023-09-13f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6731782023-10-11f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6731822023-11-15f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6731862023-12-13f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6730222024-03-13f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6730262024-04-17f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6730302024-05-22f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6730342024-06-12f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6730382024-07-17f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6730422024-08-14f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6730462024-09-18f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6730482024-10-16f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6730502024-11-13f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6730542024-12-11f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6730582025-01-15f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
6730622025-02-12f74424acf8c41e4c1e9fd42838c4875cFoothill ScheduleFoothill Transit
\n", - "
" - ], - "text/plain": [ - " service_date schedule_gtfs_dataset_key name \\\n", - "673154 2023-03-15 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673158 2023-04-12 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673162 2023-05-17 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673166 2023-06-14 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673168 2023-07-12 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673170 2023-08-15 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673174 2023-09-13 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673178 2023-10-11 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673182 2023-11-15 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673186 2023-12-13 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673022 2024-03-13 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673026 2024-04-17 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673030 2024-05-22 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673034 2024-06-12 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673038 2024-07-17 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673042 2024-08-14 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673046 2024-09-18 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673048 2024-10-16 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673050 2024-11-13 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673054 2024-12-11 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673058 2025-01-15 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "673062 2025-02-12 f74424acf8c41e4c1e9fd42838c4875c Foothill Schedule \n", - "\n", - " portfolio_organization_name \n", - "673154 Foothill Transit \n", - "673158 Foothill Transit \n", - "673162 Foothill Transit \n", - "673166 Foothill Transit \n", - "673168 Foothill Transit \n", - "673170 Foothill Transit \n", - "673174 Foothill Transit \n", - "673178 Foothill Transit \n", - "673182 Foothill Transit \n", - "673186 Foothill Transit \n", - "673022 Foothill Transit \n", - "673026 Foothill Transit \n", - "673030 Foothill Transit \n", - "673034 Foothill Transit \n", - "673038 Foothill Transit \n", - "673042 Foothill Transit \n", - "673046 Foothill Transit \n", - "673048 Foothill Transit \n", - "673050 Foothill Transit \n", - "673054 Foothill Transit \n", - "673058 Foothill Transit \n", - "673062 Foothill Transit " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "check_results(function1_test, \"Foothill Transit\")" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "d86d9f82-cc04-48c9-9efe-c5ecc84ff2dd", - "metadata": { - "scrolled": true, - "tags": [] - }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - "
route_id
service_datename
2023-11-15Morongo Basin Schedule7
2023-12-13Morongo Basin Schedule7
2024-01-17Morongo Basin Schedule7
2024-02-14Morongo Basin Schedule7
2024-03-13Morongo Basin Schedule7
2024-04-17Morongo Basin Schedule7
2024-05-22Morongo Basin Schedule7
2024-06-12Morongo Basin Schedule7
2024-07-17Morongo Basin Schedule7
2024-08-14Morongo Basin Schedule7
2024-09-18Morongo Basin Schedule7
2024-10-16Morongo Basin Schedule7
2024-11-13Basin Transit GMV Schedule7
Morongo Basin Schedule7
2024-12-11Basin Transit GMV Schedule7
Morongo Basin Schedule7
2025-01-15Basin Transit GMV Schedule7
Morongo Basin Schedule7
2025-02-12Basin Transit GMV Schedule7
Morongo Basin Schedule7
2025-03-12Basin Transit GMV Schedule7
Morongo Basin Schedule7
\n", - "
" - ], - "text/plain": [ - " route_id\n", - "service_date name \n", - "2023-11-15 Morongo Basin Schedule 7\n", - "2023-12-13 Morongo Basin Schedule 7\n", - "2024-01-17 Morongo Basin Schedule 7\n", - "2024-02-14 Morongo Basin Schedule 7\n", - "2024-03-13 Morongo Basin Schedule 7\n", - "2024-04-17 Morongo Basin Schedule 7\n", - "2024-05-22 Morongo Basin Schedule 7\n", - "2024-06-12 Morongo Basin Schedule 7\n", - "2024-07-17 Morongo Basin Schedule 7\n", - "2024-08-14 Morongo Basin Schedule 7\n", - "2024-09-18 Morongo Basin Schedule 7\n", - "2024-10-16 Morongo Basin Schedule 7\n", - "2024-11-13 Basin Transit GMV Schedule 7\n", - " Morongo Basin Schedule 7\n", - "2024-12-11 Basin Transit GMV Schedule 7\n", - " Morongo Basin Schedule 7\n", - "2025-01-15 Basin Transit GMV Schedule 7\n", - " Morongo Basin Schedule 7\n", - "2025-02-12 Basin Transit GMV Schedule 7\n", - " Morongo Basin Schedule 7\n", - "2025-03-12 Basin Transit GMV Schedule 7\n", - " Morongo Basin Schedule 7" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, { "data": { "text/html": [ @@ -1583,248 +636,356 @@ " \n", " \n", " \n", - " service_date\n", " schedule_gtfs_dataset_key\n", " name\n", - " portfolio_organization_name\n", + " organization_name\n", + " service_date\n", " \n", " \n", " \n", " \n", - " 491279\n", - " 2023-11-15\n", - " b0760015c9fcd0500c4fddd5b9bb115b\n", - " Morongo Basin Schedule\n", - " Basin Transit\n", - " \n", - " \n", - " 491280\n", - " 2023-12-13\n", - " b0760015c9fcd0500c4fddd5b9bb115b\n", - " Morongo Basin Schedule\n", - " Basin Transit\n", - " \n", - " \n", - " 491281\n", - " 2024-01-17\n", - " b0760015c9fcd0500c4fddd5b9bb115b\n", - " Morongo Basin Schedule\n", - " Basin Transit\n", - " \n", - " \n", - " 491282\n", - " 2024-02-14\n", - " b0760015c9fcd0500c4fddd5b9bb115b\n", - " Morongo Basin Schedule\n", + " 15\n", + " a7f5522d7690161fc2be75857d7e2f79\n", + " Basin Transit GMV Schedule\n", " Basin Transit\n", + " 2024-11-13\n", " \n", " \n", - " 491283\n", - " 2024-03-13\n", - " b0760015c9fcd0500c4fddd5b9bb115b\n", - " Morongo Basin Schedule\n", + " 15\n", + " a7f5522d7690161fc2be75857d7e2f79\n", + " Basin Transit GMV Schedule\n", " Basin Transit\n", + " 2024-12-11\n", " \n", " \n", - " 491284\n", - " 2024-04-17\n", + " 152\n", " b0760015c9fcd0500c4fddd5b9bb115b\n", " Morongo Basin Schedule\n", " Basin Transit\n", + " 2024-01-17\n", " \n", " \n", - " 491285\n", - " 2024-05-22\n", + " 158\n", " b0760015c9fcd0500c4fddd5b9bb115b\n", " Morongo Basin Schedule\n", " Basin Transit\n", + " 2024-02-14\n", " \n", " \n", - " 491286\n", - " 2024-06-12\n", + " 157\n", " b0760015c9fcd0500c4fddd5b9bb115b\n", " Morongo Basin Schedule\n", " Basin Transit\n", + " 2024-03-13\n", " \n", " \n", - " 491287\n", - " 2024-07-17\n", + " 160\n", " b0760015c9fcd0500c4fddd5b9bb115b\n", " Morongo Basin Schedule\n", " Basin Transit\n", + " 2024-04-17\n", " \n", " \n", - " 491288\n", - " 2024-08-14\n", + " 154\n", " b0760015c9fcd0500c4fddd5b9bb115b\n", " Morongo Basin Schedule\n", " Basin Transit\n", + " 2024-05-22\n", " \n", " \n", - " 491289\n", - " 2024-09-18\n", + " 145\n", " b0760015c9fcd0500c4fddd5b9bb115b\n", " Morongo Basin Schedule\n", " Basin Transit\n", + " 2024-06-12\n", " \n", " \n", - " 491290\n", - " 2024-10-16\n", + " 160\n", " b0760015c9fcd0500c4fddd5b9bb115b\n", " Morongo Basin Schedule\n", " Basin Transit\n", + " 2024-07-17\n", " \n", " \n", - " 487495\n", - " 2024-11-13\n", - " a7f5522d7690161fc2be75857d7e2f79\n", - " Basin Transit GMV Schedule\n", - " Basin Transit\n", - " \n", - " \n", - " 491291\n", - " 2024-11-13\n", + " 174\n", " b0760015c9fcd0500c4fddd5b9bb115b\n", " Morongo Basin Schedule\n", " Basin Transit\n", + " 2024-08-14\n", " \n", " \n", - " 487496\n", - " 2024-12-11\n", - " a7f5522d7690161fc2be75857d7e2f79\n", - " Basin Transit GMV Schedule\n", - " Basin Transit\n", - " \n", - " \n", - " 491292\n", - " 2024-12-11\n", + " 178\n", " b0760015c9fcd0500c4fddd5b9bb115b\n", " Morongo Basin Schedule\n", " Basin Transit\n", + " 2024-09-18\n", " \n", " \n", - " 487497\n", - " 2025-01-15\n", - " a7f5522d7690161fc2be75857d7e2f79\n", - " Basin Transit GMV Schedule\n", - " Basin Transit\n", - " \n", - " \n", - " 491293\n", - " 2025-01-15\n", + " 179\n", " b0760015c9fcd0500c4fddd5b9bb115b\n", " Morongo Basin Schedule\n", " Basin Transit\n", + " 2024-10-16\n", " \n", " \n", - " 487498\n", - " 2025-02-12\n", - " a7f5522d7690161fc2be75857d7e2f79\n", - " Basin Transit GMV Schedule\n", - " Basin Transit\n", - " \n", - " \n", - " 491294\n", - " 2025-02-12\n", + " 187\n", " b0760015c9fcd0500c4fddd5b9bb115b\n", " Morongo Basin Schedule\n", " Basin Transit\n", + " 2024-11-13\n", " \n", " \n", - " 487499\n", - " 2025-03-12\n", - " a7f5522d7690161fc2be75857d7e2f79\n", - " Basin Transit GMV Schedule\n", - " Basin Transit\n", - " \n", - " \n", - " 491295\n", - " 2025-03-12\n", + " 189\n", " b0760015c9fcd0500c4fddd5b9bb115b\n", " Morongo Basin Schedule\n", " Basin Transit\n", + " 2024-12-11\n", " \n", " \n", "\n", "" ], "text/plain": [ - " service_date schedule_gtfs_dataset_key \\\n", - "491279 2023-11-15 b0760015c9fcd0500c4fddd5b9bb115b \n", - "491280 2023-12-13 b0760015c9fcd0500c4fddd5b9bb115b \n", - "491281 2024-01-17 b0760015c9fcd0500c4fddd5b9bb115b \n", - "491282 2024-02-14 b0760015c9fcd0500c4fddd5b9bb115b \n", - "491283 2024-03-13 b0760015c9fcd0500c4fddd5b9bb115b \n", - "491284 2024-04-17 b0760015c9fcd0500c4fddd5b9bb115b \n", - "491285 2024-05-22 b0760015c9fcd0500c4fddd5b9bb115b \n", - "491286 2024-06-12 b0760015c9fcd0500c4fddd5b9bb115b \n", - "491287 2024-07-17 b0760015c9fcd0500c4fddd5b9bb115b \n", - "491288 2024-08-14 b0760015c9fcd0500c4fddd5b9bb115b \n", - "491289 2024-09-18 b0760015c9fcd0500c4fddd5b9bb115b \n", - "491290 2024-10-16 b0760015c9fcd0500c4fddd5b9bb115b \n", - "487495 2024-11-13 a7f5522d7690161fc2be75857d7e2f79 \n", - "491291 2024-11-13 b0760015c9fcd0500c4fddd5b9bb115b \n", - "487496 2024-12-11 a7f5522d7690161fc2be75857d7e2f79 \n", - "491292 2024-12-11 b0760015c9fcd0500c4fddd5b9bb115b \n", - "487497 2025-01-15 a7f5522d7690161fc2be75857d7e2f79 \n", - "491293 2025-01-15 b0760015c9fcd0500c4fddd5b9bb115b \n", - "487498 2025-02-12 a7f5522d7690161fc2be75857d7e2f79 \n", - "491294 2025-02-12 b0760015c9fcd0500c4fddd5b9bb115b \n", - "487499 2025-03-12 a7f5522d7690161fc2be75857d7e2f79 \n", - "491295 2025-03-12 b0760015c9fcd0500c4fddd5b9bb115b \n", + " schedule_gtfs_dataset_key name \\\n", + "15 a7f5522d7690161fc2be75857d7e2f79 Basin Transit GMV Schedule \n", + "15 a7f5522d7690161fc2be75857d7e2f79 Basin Transit GMV Schedule \n", + "152 b0760015c9fcd0500c4fddd5b9bb115b Morongo Basin Schedule \n", + "158 b0760015c9fcd0500c4fddd5b9bb115b Morongo Basin Schedule \n", + "157 b0760015c9fcd0500c4fddd5b9bb115b Morongo Basin Schedule \n", + "160 b0760015c9fcd0500c4fddd5b9bb115b Morongo Basin Schedule \n", + "154 b0760015c9fcd0500c4fddd5b9bb115b Morongo Basin Schedule \n", + "145 b0760015c9fcd0500c4fddd5b9bb115b Morongo Basin Schedule \n", + "160 b0760015c9fcd0500c4fddd5b9bb115b Morongo Basin Schedule \n", + "174 b0760015c9fcd0500c4fddd5b9bb115b Morongo Basin Schedule \n", + "178 b0760015c9fcd0500c4fddd5b9bb115b Morongo Basin Schedule \n", + "179 b0760015c9fcd0500c4fddd5b9bb115b Morongo Basin Schedule \n", + "187 b0760015c9fcd0500c4fddd5b9bb115b Morongo Basin Schedule \n", + "189 b0760015c9fcd0500c4fddd5b9bb115b Morongo Basin Schedule \n", "\n", - " name portfolio_organization_name \n", - "491279 Morongo Basin Schedule Basin Transit \n", - "491280 Morongo Basin Schedule Basin Transit \n", - "491281 Morongo Basin Schedule Basin Transit \n", - "491282 Morongo Basin Schedule Basin Transit \n", - "491283 Morongo Basin Schedule Basin Transit \n", - "491284 Morongo Basin Schedule Basin Transit \n", - "491285 Morongo Basin Schedule Basin Transit \n", - "491286 Morongo Basin Schedule Basin Transit \n", - "491287 Morongo Basin Schedule Basin Transit \n", - "491288 Morongo Basin Schedule Basin Transit \n", - "491289 Morongo Basin Schedule Basin Transit \n", - "491290 Morongo Basin Schedule Basin Transit \n", - "487495 Basin Transit GMV Schedule Basin Transit \n", - "491291 Morongo Basin Schedule Basin Transit \n", - "487496 Basin Transit GMV Schedule Basin Transit \n", - "491292 Morongo Basin Schedule Basin Transit \n", - "487497 Basin Transit GMV Schedule Basin Transit \n", - "491293 Morongo Basin Schedule Basin Transit \n", - "487498 Basin Transit GMV Schedule Basin Transit \n", - "491294 Morongo Basin Schedule Basin Transit \n", - "487499 Basin Transit GMV Schedule Basin Transit \n", - "491295 Morongo Basin Schedule Basin Transit " + " organization_name service_date \n", + "15 Basin Transit 2024-11-13 \n", + "15 Basin Transit 2024-12-11 \n", + "152 Basin Transit 2024-01-17 \n", + "158 Basin Transit 2024-02-14 \n", + "157 Basin Transit 2024-03-13 \n", + "160 Basin Transit 2024-04-17 \n", + "154 Basin Transit 2024-05-22 \n", + "145 Basin Transit 2024-06-12 \n", + "160 Basin Transit 2024-07-17 \n", + "174 Basin Transit 2024-08-14 \n", + "178 Basin Transit 2024-09-18 \n", + "179 Basin Transit 2024-10-16 \n", + "187 Basin Transit 2024-11-13 \n", + "189 Basin Transit 2024-12-11 " ] }, + "execution_count": 10, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], + "source": [ + "df.loc[df.organization_name.str.contains(\"Basin\")].sort_values(\n", + " by=[\"organization_name\",\"name\", \"service_date\"]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "3daadaa6-bd2b-443e-820a-8111bc2be45e", + "metadata": {}, + "source": [ + "## Function 1 for Bullet Point (2): time-series operator route-direction data becomes portfolio_organization route-direction data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21a2c871-a007-4c5d-bbb1-e60840677934", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "DIGEST_RT_SCHED = GTFS_DATA_DICT.digest_tables.route_schedule_vp" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f0af1d32-4a16-45ac-8b5b-49a0cebc40b1", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "schd_vp_df = pd.read_parquet(f\"{RT_SCHED_GCS}{DIGEST_RT_SCHED}.parquet\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5885a1d4-8b23-45bf-8e02-ca43ee56dda3", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "def portfolio_organization_name_grain(df: pd.DataFrame) -> pd.DataFrame:\n", + " \"\"\"\n", + " Input df after merge_data_sources_by_route_direction().\n", + " Change grain from \"schedule_gtfs_dataset_key\", \"name\", \"organization_name\" to\n", + " \"portfolio_organization_name\". Do some light cleaning.\n", + " \"\"\"\n", + " # Drop duplicates for these following rows\n", + " df2 = df.drop_duplicates(\n", + " subset=[\n", + " \"schedule_gtfs_dataset_key\",\n", + " \"organization_name\",\n", + " \"service_date\",\n", + " \"portfolio_organization_name\",\n", + " \"route_id\",\n", + " \"direction_id\",\n", + " \"time_period\",\n", + " ]\n", + " )\n", + "\n", + " return df2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5271c024-814b-44b1-a6c1-66f14ec2f587", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Test it out\n", + "function1_test = portfolio_organization_name_grain(schd_vp_df)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0c816649-2b1e-4ee3-8128-1492b8a6a62f", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "len(function1_test), len(schd_vp_df)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1eb2c68e-c5e9-465d-bc52-edd7a50fc03d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "function1_test.columns" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "081b495d-7189-4bdd-a11f-e12d520c848d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "function1_test.portfolio_organization_name = (\n", + " function1_test.portfolio_organization_name.fillna(\"None\")\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e0061484-c735-4fcb-8316-4a3b5b1d86a2", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "def check_results(df: pd.DataFrame, operator: str) -> pd.DataFrame:\n", + " df2 = df.loc[df.portfolio_organization_name.str.contains(operator)]\n", + "\n", + " agg1 = df2.groupby([\"service_date\", \"name\"]).agg({\"route_id\": \"nunique\"})\n", + "\n", + " display(agg1)\n", + " df3 = (\n", + " df2[\n", + " [\n", + " \"service_date\",\n", + " \"schedule_gtfs_dataset_key\",\n", + " \"name\",\n", + " \"portfolio_organization_name\",\n", + " ]\n", + " ]\n", + " .drop_duplicates()\n", + " .sort_values(\n", + " by=[\n", + " \"service_date\",\n", + " \"name\",\n", + " ]\n", + " )\n", + " )\n", + " display(df3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ea3f3bd9-904e-4538-84a7-9d8509c2ad37", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "check_results(function1_test, \"City and County of San Francisco\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6a9c9725-d6d5-4de5-8beb-8a00fb30e925", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "check_results(function1_test, \"Foothill Transit\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d86d9f82-cc04-48c9-9efe-c5ecc84ff2dd", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], "source": [ "check_results(function1_test, \"Basin Transit\")" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "e1cf8a28-63e7-44c6-8884-78fbe79f3a2a", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "array(['344', '346', '347', '348', '349', '350', '351'], dtype=object)" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "function1_test.loc[\n", " (function1_test.name == \"Morongo Basin Schedule\")\n", @@ -1834,24 +995,12 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "id": "c3627ea2-76f1-4dc6-ab1a-1004036b98eb", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "array(['6588', '6589', '6590', '6591', '6594', '6595', '6596'],\n", - " dtype=object)" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "function1_test.loc[\n", " (function1_test.name == \"Basin Transit GMV Schedule\")\n", @@ -1872,7 +1021,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "800165a0-2145-4c65-8779-1d188a62297e", "metadata": { "tags": [] @@ -1905,7 +1054,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "id": "a9715cd5-7575-4e99-ada3-8af07f90db36", "metadata": { "tags": [] @@ -1967,230 +1116,31 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "id": "bfc311e0-17ae-4a41-baf7-44728b7f0826", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_1561/4215476028.py:7: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " df[i] = df[i].round(2)\n", - "/tmp/ipykernel_1561/4215476028.py:12: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " df[i] = df[i] * 100\n", - "/tmp/ipykernel_1561/4215476028.py:15: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " df[\"headway_in_minutes\"] = 60 / df.frequency\n" - ] - } - ], + "outputs": [], "source": [ "function2_test = data_wrangling_for_visualizing(function1_test)" ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "id": "1a7856df-085e-44a4-9b0a-5d487911e9d8", "metadata": { "tags": [] }, - "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", - "
Direction (0/1)PeriodAverage Scheduled Service (trip minutes)# Scheduled TripsDateRouteDirection# Minutes with 1+ VP per Minute# Minutes with 2+ VP per Minute# Early Arrival Trips# On-Time Trips# Late TripsAverage VP per Minute% VP within Scheduled Shape% Scheduled Trip w/ 1+ VP/Minute% Scheduled Trip w/ 2+ VP/MinuteRealtime versus Scheduled Service RatioSpeed (MPH)Portfolio Organization NameHeadway (Minutes)
2416791Peak25.82392023-05-17R12 Venice/Westwood Sta/UCLA RapidSouthbound102317759230.9494.0098.0017.001.2210.52City of Santa Monica12.30
2293660Offpeak44.00152023-08-15DASH Leimert/Slauson CounterclockwiseEastbound7807681392.7696.00100.00100.001.4210.58City of Los Angeles63.83
1796141All Day75.82672025-02-12235 Downtown - Escondido Transit CenterSouthbound7137638900672.2197.00100.00100.001.40NaNSan Diego Metropolitan Transit System, Airport, Flagship Cruises21.51
\n", - "
" - ], - "text/plain": [ - " Direction (0/1) Period Average Scheduled Service (trip minutes) \\\n", - "241679 1 Peak 25.82 \n", - "229366 0 Offpeak 44.00 \n", - "179614 1 All Day 75.82 \n", - "\n", - " # Scheduled Trips Date Route \\\n", - "241679 39 2023-05-17 R12 Venice/Westwood Sta/UCLA Rapid \n", - "229366 15 2023-08-15 DASH Leimert/Slauson Counterclockwise \n", - "179614 67 2025-02-12 235 Downtown - Escondido Transit Center \n", - "\n", - " Direction # Minutes with 1+ VP per Minute \\\n", - "241679 Southbound 1023 \n", - "229366 Eastbound 780 \n", - "179614 Southbound 7137 \n", - "\n", - " # Minutes with 2+ VP per Minute # Early Arrival Trips \\\n", - "241679 177 5 \n", - "229366 768 1 \n", - "179614 6389 0 \n", - "\n", - " # On-Time Trips # Late Trips Average VP per Minute \\\n", - "241679 9 23 0.94 \n", - "229366 3 9 2.76 \n", - "179614 0 67 2.21 \n", - "\n", - " % VP within Scheduled Shape % Scheduled Trip w/ 1+ VP/Minute \\\n", - "241679 94.00 98.00 \n", - "229366 96.00 100.00 \n", - "179614 97.00 100.00 \n", - "\n", - " % Scheduled Trip w/ 2+ VP/Minute \\\n", - "241679 17.00 \n", - "229366 100.00 \n", - "179614 100.00 \n", - "\n", - " Realtime versus Scheduled Service Ratio Speed (MPH) \\\n", - "241679 1.22 10.52 \n", - "229366 1.42 10.58 \n", - "179614 1.40 NaN \n", - "\n", - " Portfolio Organization Name \\\n", - "241679 City of Santa Monica \n", - "229366 City of Los Angeles \n", - "179614 San Diego Metropolitan Transit System, Airport, Flagship Cruises \n", - "\n", - " Headway (Minutes) \n", - "241679 12.30 \n", - "229366 63.83 \n", - "179614 21.51 " - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "function2_test.sample(3)" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "id": "65a1f60e-e727-4d13-aa30-5a5fb5e35ab8", "metadata": { "tags": [] @@ -2238,7 +1188,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "id": "c821a415-dc4d-4588-bbf8-a66e8c3f11ea", "metadata": { "tags": [] @@ -2263,7 +1213,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "id": "6011fc21-f93f-44b9-89fc-fc1c2cf6c514", "metadata": { "tags": [] @@ -2289,7 +1239,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "id": "0ea77378-f1ea-439a-a524-9d57d2a9786e", "metadata": { "tags": [] @@ -2324,7 +1274,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "id": "863d3dc3-0989-40ad-a6c4-bae1c76f638b", "metadata": { "tags": [] @@ -2345,105 +1295,12 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "id": "616eabde-9fbc-4d70-84b5-b730d59907d4", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_1561/2010216261.py:4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " df[\"ruler\"] = ruler_value\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - "
\n", - "" - ], - "text/plain": [ - "alt.Chart(...)" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "ruler_chart(function2_test.head(2), 100)" ] @@ -2466,7 +1323,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "id": "253acd03-9899-4105-8074-697c6a7a4c78", "metadata": { "tags": [] @@ -2511,7 +1368,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "id": "52cba1cf-d525-4bef-8a10-2ab283950f22", "metadata": { "tags": [] @@ -2552,7 +1409,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "id": "4a5b3147-0ae0-4e12-8896-ce30342f1737", "metadata": { "tags": [] @@ -2579,7 +1436,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "id": "4e4916d6-f056-4491-8cf8-5fabd4b66747", "metadata": { "tags": [] @@ -2617,7 +1474,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": null, "id": "c1af7311-1343-4afc-9e43-31d37f984f59", "metadata": { "tags": [] @@ -2631,7 +1488,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": null, "id": "cfc16f88-d708-4935-af52-41d68724b11d", "metadata": { "tags": [] @@ -2672,39 +1529,12 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": null, "id": "b80b2826-4dc5-4052-9fd1-22de48db68f4", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_1561/2010216261.py:4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " df[\"ruler\"] = ruler_value\n" - ] - }, - { - "ename": "ValueError", - "evalue": "Facet charts require data to be specified at the top level. If you are trying to facet layered or concatenated charts, ensure that the same data variable is passed to each chart or specify the data inside the facet method instead.", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[48], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mcreate_spatial_accuracy_chart\u001b[49m\u001b[43m(\u001b[49m\u001b[43msample_route\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloc\u001b[49m\u001b[43m[\u001b[49m\u001b[43msample_route\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mPeriod\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m==\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mAll Day\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n", - "Cell \u001b[0;32mIn[47], line 24\u001b[0m, in \u001b[0;36mcreate_spatial_accuracy_chart\u001b[0;34m(df)\u001b[0m\n\u001b[1;32m 19\u001b[0m final_chart \u001b[38;5;241m=\u001b[39m configure_chart(\n\u001b[1;32m 20\u001b[0m chart\u001b[38;5;241m=\u001b[39mfinal_chart, width\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m200\u001b[39m, height\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m250\u001b[39m, title\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m, subtitle\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 21\u001b[0m )\n\u001b[1;32m 23\u001b[0m \u001b[38;5;66;03m# Facet & have to add title behind or else it's repeated 2x\u001b[39;00m\n\u001b[0;32m---> 24\u001b[0m final_chart2 \u001b[38;5;241m=\u001b[39m \u001b[43mfacet_chart\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 25\u001b[0m \u001b[43m \u001b[49m\u001b[43mchart\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfinal_chart\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 26\u001b[0m \u001b[43m \u001b[49m\u001b[43mfacet_col\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mDirection\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 27\u001b[0m \u001b[43m \u001b[49m\u001b[43mtitle\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mspecific_chart_dict\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtitle\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 28\u001b[0m \u001b[43m \u001b[49m\u001b[43msubtitle\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mspecific_chart_dict\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubtitle\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 29\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 30\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m final_chart2\n", - "Cell \u001b[0;32mIn[29], line 4\u001b[0m, in \u001b[0;36mfacet_chart\u001b[0;34m(chart, facet_col, title, subtitle)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21mfacet_chart\u001b[39m(\n\u001b[1;32m 2\u001b[0m chart: alt\u001b[38;5;241m.\u001b[39mChart, facet_col: \u001b[38;5;28mstr\u001b[39m, title: \u001b[38;5;28mstr\u001b[39m, subtitle: \u001b[38;5;28mstr\u001b[39m\n\u001b[1;32m 3\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m alt\u001b[38;5;241m.\u001b[39mChart:\n\u001b[0;32m----> 4\u001b[0m chart2 \u001b[38;5;241m=\u001b[39m \u001b[43mchart\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfacet\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 5\u001b[0m \u001b[43m \u001b[49m\u001b[43mcolumn\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43malt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mColumn\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43mf\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;132;43;01m{\u001b[39;49;00m\u001b[43mfacet_col\u001b[49m\u001b[38;5;132;43;01m}\u001b[39;49;00m\u001b[38;5;124;43m:N\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 7\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 8\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mproperties(\n\u001b[1;32m 9\u001b[0m title\u001b[38;5;241m=\u001b[39m{\n\u001b[1;32m 10\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtext\u001b[39m\u001b[38;5;124m\"\u001b[39m: title,\n\u001b[1;32m 11\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msubtitle\u001b[39m\u001b[38;5;124m\"\u001b[39m: subtitle,\n\u001b[1;32m 12\u001b[0m }\n\u001b[1;32m 13\u001b[0m )\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m chart2\n", - "File \u001b[0;32m/opt/conda/lib/python3.11/site-packages/altair/vegalite/v5/api.py:3859\u001b[0m, in \u001b[0;36m_EncodingMixin.facet\u001b[0;34m(self, facet, row, column, data, columns, **kwargs)\u001b[0m\n\u001b[1;32m 3852\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdata \u001b[38;5;129;01mis\u001b[39;00m Undefined:\n\u001b[1;32m 3853\u001b[0m msg \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 3854\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFacet charts require data to be specified at the top level. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 3855\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIf you are trying to facet layered or concatenated charts, \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 3856\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mensure that the same data variable is passed to each chart \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 3857\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mor specify the data inside the facet method instead.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 3858\u001b[0m )\n\u001b[0;32m-> 3859\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(msg)\n\u001b[1;32m 3860\u001b[0m \u001b[38;5;28mself\u001b[39m \u001b[38;5;241m=\u001b[39m _top_schema_base(\u001b[38;5;28mself\u001b[39m)\u001b[38;5;241m.\u001b[39mcopy(deep\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[1;32m 3861\u001b[0m data, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdata \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdata, Undefined\n", - "\u001b[0;31mValueError\u001b[0m: Facet charts require data to be specified at the top level. If you are trying to facet layered or concatenated charts, ensure that the same data variable is passed to each chart or specify the data inside the facet method instead." - ] - } - ], + "outputs": [], "source": [ "create_spatial_accuracy_chart(sample_route.loc[sample_route.Period == \"All Day\"])" ] @@ -2790,7 +1620,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "id": "efd20ba2-8537-43aa-a973-e8dd4c7d6ced", "metadata": { "tags": [] @@ -2827,33 +1657,12 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": null, "id": "ae893661-2e70-4df2-b7d6-3d5e5de9106a", "metadata": { "tags": [] }, - "outputs": [ - { - "ename": "ConfigKeyError", - "evalue": "Missing key freq_range\n full_key: freq_range\n object_type=dict", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mConfigKeyError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[50], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mcreate_headway_chart\u001b[49m\u001b[43m(\u001b[49m\u001b[43msample_route\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloc\u001b[49m\u001b[43m[\u001b[49m\u001b[43msample_route\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mPeriod\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m!=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mAll Day\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n", - "Cell \u001b[0;32mIn[49], line 7\u001b[0m, in \u001b[0;36mcreate_headway_chart\u001b[0;34m(df)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21mcreate_headway_chart\u001b[39m(df: pd\u001b[38;5;241m.\u001b[39mDataFrame) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m alt\u001b[38;5;241m.\u001b[39mChart:\n\u001b[1;32m 2\u001b[0m base_chart \u001b[38;5;241m=\u001b[39m bar_chart(\n\u001b[1;32m 3\u001b[0m df\u001b[38;5;241m=\u001b[39mdf,\n\u001b[1;32m 4\u001b[0m x_col\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDate\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 5\u001b[0m y_col\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mHeadway (Minutes)\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 6\u001b[0m color_col\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mHeadway (Minutes)\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m----> 7\u001b[0m color_scheme\u001b[38;5;241m=\u001b[39m\u001b[43mreadable_dict\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfreq_range\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m,\n\u001b[1;32m 8\u001b[0m tooltip_cols\u001b[38;5;241m=\u001b[39mreadable_dict[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfrequency_graph\u001b[39m\u001b[38;5;124m\"\u001b[39m][\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtooltip\u001b[39m\u001b[38;5;124m\"\u001b[39m],\n\u001b[1;32m 9\u001b[0m )\u001b[38;5;241m.\u001b[39mencode(\n\u001b[1;32m 10\u001b[0m y\u001b[38;5;241m=\u001b[39malt\u001b[38;5;241m.\u001b[39mY(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mHeadway (Minutes)\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 11\u001b[0m scale\u001b[38;5;241m=\u001b[39malt\u001b[38;5;241m.\u001b[39mScale(domain\u001b[38;5;241m=\u001b[39m[\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m250\u001b[39m])),\n\u001b[1;32m 12\u001b[0m )\n\u001b[1;32m 14\u001b[0m base_chart \u001b[38;5;241m=\u001b[39m configure_chart(\n\u001b[1;32m 15\u001b[0m base_chart, width\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m200\u001b[39m, height\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m250\u001b[39m, title\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m, subtitle\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 16\u001b[0m )\n\u001b[1;32m 18\u001b[0m \u001b[38;5;66;03m# Facet\u001b[39;00m\n", - "File \u001b[0;32m/opt/conda/lib/python3.11/site-packages/omegaconf/dictconfig.py:375\u001b[0m, in \u001b[0;36mDictConfig.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 371\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_format_and_raise(\n\u001b[1;32m 372\u001b[0m key\u001b[38;5;241m=\u001b[39mkey, value\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, cause\u001b[38;5;241m=\u001b[39me, type_override\u001b[38;5;241m=\u001b[39mConfigKeyError\n\u001b[1;32m 373\u001b[0m )\n\u001b[1;32m 374\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 375\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_format_and_raise\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcause\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43me\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/opt/conda/lib/python3.11/site-packages/omegaconf/base.py:231\u001b[0m, in \u001b[0;36mNode._format_and_raise\u001b[0;34m(self, key, value, cause, msg, type_override)\u001b[0m\n\u001b[1;32m 223\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21m_format_and_raise\u001b[39m(\n\u001b[1;32m 224\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 225\u001b[0m key: Any,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 229\u001b[0m type_override: Any \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 230\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 231\u001b[0m \u001b[43mformat_and_raise\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 232\u001b[0m \u001b[43m \u001b[49m\u001b[43mnode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 233\u001b[0m \u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 234\u001b[0m \u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 235\u001b[0m \u001b[43m \u001b[49m\u001b[43mmsg\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mstr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mcause\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mmsg\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mis\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mmsg\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 236\u001b[0m \u001b[43m \u001b[49m\u001b[43mcause\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcause\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 237\u001b[0m \u001b[43m \u001b[49m\u001b[43mtype_override\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtype_override\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 238\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 239\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m\n", - "File \u001b[0;32m/opt/conda/lib/python3.11/site-packages/omegaconf/_utils.py:899\u001b[0m, in \u001b[0;36mformat_and_raise\u001b[0;34m(node, key, value, msg, cause, type_override)\u001b[0m\n\u001b[1;32m 896\u001b[0m ex\u001b[38;5;241m.\u001b[39mref_type \u001b[38;5;241m=\u001b[39m ref_type\n\u001b[1;32m 897\u001b[0m ex\u001b[38;5;241m.\u001b[39mref_type_str \u001b[38;5;241m=\u001b[39m ref_type_str\n\u001b[0;32m--> 899\u001b[0m \u001b[43m_raise\u001b[49m\u001b[43m(\u001b[49m\u001b[43mex\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcause\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/opt/conda/lib/python3.11/site-packages/omegaconf/_utils.py:797\u001b[0m, in \u001b[0;36m_raise\u001b[0;34m(ex, cause)\u001b[0m\n\u001b[1;32m 795\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 796\u001b[0m ex\u001b[38;5;241m.\u001b[39m__cause__ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m--> 797\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ex\u001b[38;5;241m.\u001b[39mwith_traceback(sys\u001b[38;5;241m.\u001b[39mexc_info()[\u001b[38;5;241m2\u001b[39m])\n", - "File \u001b[0;32m/opt/conda/lib/python3.11/site-packages/omegaconf/dictconfig.py:369\u001b[0m, in \u001b[0;36mDictConfig.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 362\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 363\u001b[0m \u001b[38;5;124;03mAllow map style access\u001b[39;00m\n\u001b[1;32m 364\u001b[0m \u001b[38;5;124;03m:param key:\u001b[39;00m\n\u001b[1;32m 365\u001b[0m \u001b[38;5;124;03m:return:\u001b[39;00m\n\u001b[1;32m 366\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 368\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 369\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdefault_value\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_DEFAULT_MARKER_\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 370\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 371\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_format_and_raise(\n\u001b[1;32m 372\u001b[0m key\u001b[38;5;241m=\u001b[39mkey, value\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, cause\u001b[38;5;241m=\u001b[39me, type_override\u001b[38;5;241m=\u001b[39mConfigKeyError\n\u001b[1;32m 373\u001b[0m )\n", - "File \u001b[0;32m/opt/conda/lib/python3.11/site-packages/omegaconf/dictconfig.py:442\u001b[0m, in \u001b[0;36mDictConfig._get_impl\u001b[0;34m(self, key, default_value, validate_key)\u001b[0m\n\u001b[1;32m 438\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21m_get_impl\u001b[39m(\n\u001b[1;32m 439\u001b[0m \u001b[38;5;28mself\u001b[39m, key: DictKeyType, default_value: Any, validate_key: \u001b[38;5;28mbool\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 440\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Any:\n\u001b[1;32m 441\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 442\u001b[0m node \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_child\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 443\u001b[0m \u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mthrow_on_missing_key\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalidate_key\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvalidate_key\u001b[49m\n\u001b[1;32m 444\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 445\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (ConfigAttributeError, ConfigKeyError):\n\u001b[1;32m 446\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m default_value \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m _DEFAULT_MARKER_:\n", - "File \u001b[0;32m/opt/conda/lib/python3.11/site-packages/omegaconf/basecontainer.py:73\u001b[0m, in \u001b[0;36mBaseContainer._get_child\u001b[0;34m(self, key, validate_access, validate_key, throw_on_missing_value, throw_on_missing_key)\u001b[0m\n\u001b[1;32m 64\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21m_get_child\u001b[39m(\n\u001b[1;32m 65\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 66\u001b[0m key: Any,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 70\u001b[0m throw_on_missing_key: \u001b[38;5;28mbool\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[1;32m 71\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Union[Optional[Node], List[Optional[Node]]]:\n\u001b[1;32m 72\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Like _get_node, passing through to the nearest concrete Node.\"\"\"\u001b[39;00m\n\u001b[0;32m---> 73\u001b[0m child \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_node\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 74\u001b[0m \u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 75\u001b[0m \u001b[43m \u001b[49m\u001b[43mvalidate_access\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvalidate_access\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 76\u001b[0m \u001b[43m \u001b[49m\u001b[43mvalidate_key\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvalidate_key\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 77\u001b[0m \u001b[43m \u001b[49m\u001b[43mthrow_on_missing_value\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mthrow_on_missing_value\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 78\u001b[0m \u001b[43m \u001b[49m\u001b[43mthrow_on_missing_key\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mthrow_on_missing_key\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 79\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 80\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(child, UnionNode) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m _is_special(child):\n\u001b[1;32m 81\u001b[0m value \u001b[38;5;241m=\u001b[39m child\u001b[38;5;241m.\u001b[39m_value()\n", - "File \u001b[0;32m/opt/conda/lib/python3.11/site-packages/omegaconf/dictconfig.py:480\u001b[0m, in \u001b[0;36mDictConfig._get_node\u001b[0;34m(self, key, validate_access, validate_key, throw_on_missing_value, throw_on_missing_key)\u001b[0m\n\u001b[1;32m 478\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m value \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 479\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m throw_on_missing_key:\n\u001b[0;32m--> 480\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ConfigKeyError(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMissing key \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mkey\u001b[38;5;132;01m!s}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 481\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m throw_on_missing_value \u001b[38;5;129;01mand\u001b[39;00m value\u001b[38;5;241m.\u001b[39m_is_missing():\n\u001b[1;32m 482\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m MissingMandatoryValue(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMissing mandatory value: $KEY\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "\u001b[0;31mConfigKeyError\u001b[0m: Missing key freq_range\n full_key: freq_range\n object_type=dict" - ] - } - ], + "outputs": [], "source": [ "create_headway_chart(sample_route.loc[sample_route.Period != \"All Day\"])" ] diff --git a/gtfs_digest/18_shs_routes_ct_district_report.ipynb b/gtfs_digest/18_shs_routes_ct_district_report.ipynb index e131178cf8..495b30bdf5 100644 --- a/gtfs_digest/18_shs_routes_ct_district_report.ipynb +++ b/gtfs_digest/18_shs_routes_ct_district_report.ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "f6b01cd8-ccda-4d2a-9c64-9cca36e0713c", "metadata": {}, "outputs": [], @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "ec246873-6121-4544-8d62-f71dec06352e", "metadata": { "tags": [] @@ -53,7 +53,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "ffeaad35-64a6-4b16-a93d-ac4a0759288a", "metadata": { "tags": [] @@ -66,33 +66,9 @@ "pd.set_option(\"display.max_colwidth\", None)" ] }, - { - "cell_type": "code", - "execution_count": 4, - "id": "fac679d2-4c02-409f-9550-4334664c631a", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "analysis_date_list = rt_dates.y2024_dates + rt_dates.y2023_dates + rt_dates.y2025_dates" - ] - }, { "cell_type": "code", "execution_count": 5, - "id": "48e01cac-bde0-49bf-bfed-304f83f8fc10", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "analysis_date = \"2025-03-12\"" - ] - }, - { - "cell_type": "code", - "execution_count": 6, "id": "1771ea96-ce3b-415f-88f5-8ed54a9b6a5c", "metadata": { "tags": [] @@ -101,9 +77,11 @@ "source": [ "def process_transit_routes() -> gpd.GeoDataFrame:\n", " \"\"\"\n", - " Select the most recent transit route.\n", - " Also count how many routes there are for each operator.\n", + " Select the most recent transit route to\n", + " figure out how much of it intersects with\n", + " the state highway network.\n", " \"\"\"\n", + " # Load in the route shapes.\n", " OPERATOR_ROUTE = GTFS_DATA_DICT.digest_tables.operator_routes_map\n", "\n", " subset = [\n", @@ -111,13 +89,15 @@ " \"geometry\",\n", " \"portfolio_organization_name\",\n", " \"recent_combined_name\",\n", - " \"schedule_gtfs_dataset_key\",\n", + " # \"route_id\",\n", " ]\n", " op_geography_df = gpd.read_parquet(\n", " f\"{RT_SCHED_GCS}{OPERATOR_ROUTE}.parquet\",\n", " storage_options={\"token\": credentials.token},\n", " )[subset]\n", "\n", + " # Keep the row for each portfolio_organization_name/recent_combined_name\n", + " # that is the most recent.\n", " most_recent_routes = publish_utils.filter_to_recent_date(\n", " df=op_geography_df,\n", " group_cols=[\n", @@ -125,20 +105,34 @@ " ],\n", " )\n", "\n", - " # Calc length of route\n", + " # Calculate the length of route, ensuring that it is in feet.\n", " most_recent_routes = most_recent_routes.assign(\n", " route_length_feet=most_recent_routes.geometry.to_crs(\n", " geography_utils.CA_NAD83Albers_ft\n", " ).length\n", " )\n", "\n", - " # Drop duplicates\n", + " # Drop any duplicates.\n", + " # This will probably be taken out once the 1:m recent_combined_name\n", + " # to route_id issue is resolved.\n", " most_recent_routes = most_recent_routes.drop_duplicates(\n", " subset=[\"portfolio_organization_name\", \"recent_combined_name\", \"service_date\"]\n", " )\n", " return most_recent_routes" ] }, + { + "cell_type": "code", + "execution_count": 6, + "id": "dc878ec3-d196-4e85-bd5d-9960874476ed", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# transit_routes = process_transit_routes()" + ] + }, { "cell_type": "code", "execution_count": 7, @@ -151,6 +145,42 @@ "# transit_routes.drop(columns=[\"geometry\"]).sample(3)" ] }, + { + "cell_type": "code", + "execution_count": 8, + "id": "b0490311-308d-4894-9776-301cb4cad658", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# len(transit_routes)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "15c7b3ee-b927-49ed-a5be-43918c97bfdf", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# transit_routes.recent_combined_name.value_counts().head()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "c190ae33-bf44-4e94-a614-b4f01ead288b", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# transit_routes.portfolio_organization_name.value_counts().head()" + ] + }, { "cell_type": "markdown", "id": "458212e5-3cb6-476b-8768-3a2d6d4ce494", @@ -158,26 +188,24 @@ "tags": [] }, "source": [ - "## Load in SHS \n", - "* Saving it out isn't working" + "## Load in SHS \n" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 11, "id": "3e081d5e-43f5-4298-b98a-cd89390117be", "metadata": { "tags": [] }, "outputs": [], "source": [ - "def dissolve_shn() -> gpd.GeoDataFrame:\n", + "def dissolve_shn(columns_to_dissolve: list, file_name: str) -> gpd.GeoDataFrame:\n", " \"\"\"\n", - " Dissolve State Highway Network so\n", - " there will only be one row for each\n", + " Dissolve State Highway Network so there will only be one row for each\n", " route name and route type\n", " \"\"\"\n", - " # calitp-analytics-data/data-analyses/state_highway_network\n", + " # Read in the dataset and change the CRS to one to feet.\n", " SHN_FILE = catalog_utils.get_catalog(\n", " \"shared_data_catalog\"\n", " ).state_highway_network.urlpath\n", @@ -187,22 +215,25 @@ " storage_options={\"token\": credentials.token},\n", " ).to_crs(geography_utils.CA_NAD83Albers_ft)\n", "\n", - " # Dissolve\n", - " shn_dissolved = (\n", - " shn.dissolve(by=[\"Route\"])\n", - " .reset_index()\n", - " .drop(columns=[\"County\", \"District\", \"Direction\", \"RouteType\"])\n", - " )\n", + " # Dissolve by route which represents the the route's name and drop the other columns\n", + " # because they are no longer relevant.\n", + " shn_dissolved = (shn.dissolve(by=columns_to_dissolve).reset_index())[\n", + " columns_to_dissolve + [\"geometry\"]\n", + " ]\n", "\n", + " # Rename because I don't want any confusion between SHN route and\n", + " # transit route.\n", " shn_dissolved = shn_dissolved.rename(columns={\"Route\": \"shn_route\"})\n", "\n", + " # Find the length of each highway.\n", " shn_dissolved = shn_dissolved.assign(\n", " highway_feet=shn_dissolved.geometry.length,\n", - " shn_route=shn_dissolved.shn_route.astype(int),\n", + " shn_route=shn_dissolved.shn_route.astype(int).astype(str),\n", " )\n", "\n", + " # Save this out so I don't have to dissolve it each time.\n", " shn_dissolved.to_parquet(\n", - " \"gs://calitp-analytics-data/data-analyses/state_highway_network/shn_dissolved.parquet\",\n", + " f\"gs://calitp-analytics-data/data-analyses/state_highway_network/shn_dissolved_by_{file_name}.parquet\",\n", " filesystem=fs,\n", " )\n", " return shn_dissolved" @@ -210,19 +241,67 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 12, "id": "b2d43e08-f0d0-4c17-b55b-2c7d509c2ddb", "metadata": { "tags": [] }, "outputs": [], "source": [ - "dissolved = dissolve_shn()" + "dissolved_route = dissolve_shn([\"Route\", \"District\"], \"ct_district_route\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, + "id": "4ee38095-fcf9-4b6f-ae73-b417034990ca", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12',\n", + " '13', '14', '15', '16', '17', '18', '20', '22', '23', '24', '25',\n", + " '26', '27', '28', '29', '32', '33', '34', '35', '36', '37', '38',\n", + " '39', '40', '41', '43', '44', '45', '46', '47', '49', '50', '51',\n", + " '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62',\n", + " '63', '65', '66', '67', '68', '70', '71', '72', '73', '74', '75',\n", + " '76', '77', '78', '79', '80', '82', '83', '84', '85', '86', '87',\n", + " '88', '89', '90', '91', '92', '94', '95', '96', '97', '98', '99',\n", + " '101', '103', '104', '105', '107', '108', '109', '110', '111',\n", + " '112', '113', '114', '115', '116', '118', '119', '120', '121',\n", + " '123', '124', '125', '126', '127', '128', '129', '130', '131',\n", + " '132', '133', '134', '135', '136', '137', '138', '139', '140',\n", + " '142', '144', '145', '146', '147', '149', '150', '151', '152',\n", + " '153', '154', '155', '156', '158', '160', '161', '162', '163',\n", + " '164', '165', '166', '167', '168', '169', '170', '172', '173',\n", + " '174', '175', '177', '178', '180', '182', '183', '184', '185',\n", + " '186', '187', '188', '189', '190', '191', '192', '193', '197',\n", + " '198', '199', '200', '201', '202', '203', '204', '205', '207',\n", + " '210', '211', '213', '215', '216', '217', '218', '219', '220',\n", + " '221', '222', '223', '227', '229', '232', '233', '236', '237',\n", + " '238', '241', '242', '243', '244', '245', '246', '247', '253',\n", + " '254', '255', '259', '260', '261', '262', '263', '265', '266',\n", + " '267', '269', '270', '271', '273', '275', '280', '281', '282',\n", + " '283', '284', '299', '330', '371', '380', '395', '405', '505',\n", + " '580', '605', '680', '710', '780', '805', '880', '905', '980'],\n", + " dtype=object)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dissolved_route.shn_route.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, "id": "4d2d3727-e2f7-4eae-af62-539c96cba02f", "metadata": { "scrolled": true, @@ -235,7 +314,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "045892dc-1094-42ec-9267-a1800387f1bf", "metadata": { "tags": [] @@ -247,7 +326,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "id": "9d5c54c5-b055-4251-baea-20a45b47c41c", "metadata": { "scrolled": true, @@ -260,7 +339,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "a0f23cb6-4a7c-4a86-b0d3-3bcad379a9f2", "metadata": { "tags": [] @@ -272,44 +351,48 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "id": "0be8698f-226a-40e3-ab00-394b5c205123", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# len(shn_dissolved)" + "# len(dissolved)" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 19, "id": "d3dc507a-7bb1-4d6b-81b2-b2e1b250cd05", "metadata": { "tags": [] }, "outputs": [], "source": [ - "def buffer_shn(buffer_amount: int) -> gpd.GeoDataFrame:\n", + "def buffer_shn(buffer_amount: int, file_name: str) -> gpd.GeoDataFrame:\n", " \"\"\"\n", - " Add a buffer to the SHN file. Save it out so\n", - " we won't have to buffer over and over again.\n", + " Add a buffer to the SHN before overlaying it with\n", + " transit routes.\n", " \"\"\"\n", " GCS_FILE_PATH = \"gs://calitp-analytics-data/data-analyses/state_highway_network/\"\n", "\n", + " # Read in the dissolved SHN file\n", " shn_df = gpd.read_parquet(\n", - " f\"{GCS_FILE_PATH}shn_dissolved.parquet\",\n", + " f\"{GCS_FILE_PATH}shn_dissolved_by_{file_name}.parquet\",\n", " storage_options={\"token\": credentials.token},\n", " )\n", "\n", + " # Buffer the state highway.\n", " shn_df_buffered = shn_df.assign(\n", " geometry=shn_df.geometry.buffer(buffer_amount),\n", " )\n", "\n", + " # Save it out so we won't have to buffer over again and\n", + " # can just read it in.\n", " shn_df_buffered.to_parquet(\n", - " f\"{GCS_FILE_PATH}shn_buffered_{buffer_amount}_ft.parquet\", \n", - " filesystem=fs\n", + " f\"{GCS_FILE_PATH}shn_buffered_{buffer_amount}_ft_{file_name}.parquet\",\n", + " filesystem=fs,\n", " )\n", "\n", " return shn_df_buffered" @@ -317,7 +400,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 20, "id": "495541e6-2344-4dab-95e9-00d9c66be124", "metadata": { "tags": [] @@ -330,60 +413,191 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 21, "id": "0598e1da-3f56-4415-b68b-63e12ff5109d", "metadata": { "tags": [] }, + "outputs": [], + "source": [ + "# intersecting_buffer.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "7011b56d-a411-4178-8d9d-5aed53dae8b2", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# buffered_df = buffer_shn(SHN_HWY_BUFFER_FEET, \"ct_district_route\")" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "5fa7355f-ef54-42dc-adef-90bba2afdc34", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# buffered_df.loc[buffered_df.shn_route == 5].explore()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "673b6c64-1667-4e19-bcad-231293cb643e", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "shn_district_df = gpd.read_parquet(\n", + " f\"gs://calitp-analytics-data/data-analyses/state_highway_network/shn_buffered_50_ft_ct_district_route.parquet\",\n", + " storage_options={\"token\": credentials.token},\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "857a24b9-c5fd-4808-9dc3-0d0953ccc53e", + "metadata": { + "tags": [] + }, "outputs": [ { "data": { "text/plain": [ - "(242, 4)" + "(344, 4)" ] }, - "execution_count": 16, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "intersecting_buffer.shape" + "shn_district_df.shape" ] }, { "cell_type": "code", - "execution_count": 31, - "id": "7011b56d-a411-4178-8d9d-5aed53dae8b2", + "execution_count": 26, + "id": "4efb0f3c-00ef-49fe-b4b5-8b66a5f7dafe", "metadata": { "tags": [] }, - "outputs": [], + "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", + "
shn_routeDistricthighway_feet
1991388201549.35
2621991235912.88
211151243383.23
\n", + "
" + ], + "text/plain": [ + " shn_route District highway_feet\n", + "199 138 8 201549.35\n", + "262 199 1 235912.88\n", + "211 151 2 43383.23" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "buffered_df = buffer_shn(SHN_HWY_BUFFER_FEET)" + "shn_district_df.drop(columns=[\"geometry\"]).sample(3)" ] }, { "cell_type": "code", - "execution_count": 32, - "id": "95d188c3-bdd6-4405-874b-f257a4a0d213", + "execution_count": 27, + "id": "94df1985-37bb-4ec5-8780-ebf456652681", "metadata": { "tags": [] }, "outputs": [ { - "data": { - "text/plain": [ - "Index(['shn_route', 'geometry', 'highway_feet'], dtype='object')" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 344 entries, 0 to 343\n", + "Data columns (total 4 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 shn_route 344 non-null object \n", + " 1 District 344 non-null int64 \n", + " 2 geometry 344 non-null geometry\n", + " 3 highway_feet 344 non-null float64 \n", + "dtypes: float64(1), geometry(1), int64(1), object(1)\n", + "memory usage: 10.9+ KB\n" + ] } ], "source": [ - "buffered_df.columns" + "shn_district_df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "95d188c3-bdd6-4405-874b-f257a4a0d213", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# buffered_df.columns" ] }, { @@ -396,21 +610,22 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 29, "id": "e58e7e81-684e-46b9-96cb-3c9f0643e113", "metadata": { "tags": [] }, "outputs": [], "source": [ - "def routes_shn_intersection(\n", - " buffer_amount: int,\n", - ") -> gpd.GeoDataFrame:\n", - "\n", + "def routes_shn_intersection(buffer_amount: int, file_name: str) -> gpd.GeoDataFrame:\n", + " \"\"\"\n", + " Overlay the most recent transit routes with a buffered version\n", + " of the SHN\n", + " \"\"\"\n", " GCS_FILE_PATH = \"gs://calitp-analytics-data/data-analyses/state_highway_network/\"\n", "\n", - " # Read in buffered shn here or re buffer\n", - " HWY_FILE = f\"{GCS_FILE_PATH}shn_buffered_{buffer_amount}_ft.parquet\"\n", + " # Read in buffered shn here or re buffer if we don't have it available.\n", + " HWY_FILE = f\"{GCS_FILE_PATH}shn_buffered_{buffer_amount}_ft_{file_name}.parquet\"\n", "\n", " if fs.exists(HWY_FILE):\n", " shn_routes_gdf = gpd.read_parquet(\n", @@ -419,25 +634,28 @@ " else:\n", " shn_routes_gdf = buffer_shn(buffer_amount)\n", "\n", - " # Process the most recent transit route geogrpahies\n", + " # Process the most recent transit route geographies and ensure the\n", + " # CRS matches the SHN routes' GDF so the overlay doesn't go wonky.\n", " transit_routes_gdf = process_transit_routes().to_crs(shn_routes_gdf.crs)\n", "\n", - " # Overlay\n", + " # Overlay transit routes with the SHN geographies.\n", " gdf = gpd.overlay(\n", " transit_routes_gdf, shn_routes_gdf, how=\"intersection\", keep_geom_type=True\n", " )\n", "\n", - " # Calcuate the percent of the transit route that runs on a highway\n", + " # Calcuate the percent of the transit route that runs on a highway, round it up and\n", + " # multiply it by 100. Drop the geometry because we want the original transit route\n", + " # shapes.\n", " gdf = gdf.assign(\n", " pct_route_on_hwy=(gdf.geometry.length / gdf.route_length_feet).round(3) * 100,\n", - " shn_route=gdf.shn_route.astype(int),\n", " ).drop(\n", " columns=[\n", " \"geometry\",\n", " ]\n", " )\n", "\n", - " # Join back for geo and any routes that don't intersect with the SHS\n", + " # Join back the dataframe above with the original transit route dataframes\n", + " # so we can have the original transit route geographies.\n", " gdf2 = pd.merge(\n", " transit_routes_gdf,\n", " gdf,\n", @@ -445,232 +663,2466 @@ " \"service_date\",\n", " \"portfolio_organization_name\",\n", " \"recent_combined_name\",\n", - " \"schedule_gtfs_dataset_key\",\n", " \"route_length_feet\",\n", " ],\n", " how=\"left\",\n", " )\n", "\n", + " # Clean up\n", + " gdf2.District = gdf2.District.fillna(0).astype(int)\n", " return gdf2" ] }, { "cell_type": "code", - "execution_count": null, - "id": "9b72f225-6ab2-4967-b95c-f206a2e1a3f5", + "execution_count": 30, + "id": "385b204c-1215-4fdb-8063-023618b85077", "metadata": { "tags": [] }, "outputs": [], - "source": [] + "source": [ + "intersecting = routes_shn_intersection(SHN_HWY_BUFFER_FEET, \"ct_district_route\")" + ] }, { "cell_type": "code", - "execution_count": 34, - "id": "385b204c-1215-4fdb-8063-023618b85077", + "execution_count": 31, + "id": "6c12df00-6b72-427c-9285-d8dd8cb25831", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64Index: 6788 entries, 0 to 6787\n", + "Data columns (total 9 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 service_date 6788 non-null datetime64[ns]\n", + " 1 geometry 6775 non-null geometry \n", + " 2 portfolio_organization_name 6788 non-null object \n", + " 3 recent_combined_name 6788 non-null object \n", + " 4 route_length_feet 6775 non-null float64 \n", + " 5 shn_route 6191 non-null object \n", + " 6 District 6788 non-null int64 \n", + " 7 highway_feet 6191 non-null float64 \n", + " 8 pct_route_on_hwy 6191 non-null float64 \n", + "dtypes: datetime64[ns](1), float64(3), geometry(1), int64(1), object(3)\n", + "memory usage: 530.3+ KB\n" + ] + } + ], "source": [ - "intersecting = routes_shn_intersection(SHN_HWY_BUFFER_FEET)" + "intersecting.info()" ] }, { "cell_type": "code", - "execution_count": 35, - "id": "1dfaf6d4-a7e7-44ef-84fb-6bd2f691a615", + "execution_count": 32, + "id": "03dfb862-00ec-4d0e-87ce-91800ea0d5c9", "metadata": { "tags": [] }, "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", + "
service_dateportfolio_organization_namerecent_combined_nameshn_routeDistrictpct_route_on_hwy
44582025-04-16FlixBus and GreyhoundFlixBus N2002 SF - LA - Palm Springs8042.10
47742025-04-16FlixBus and GreyhoundGreyhound US0802 San Francisco - Fresno - Los Angeles11070.00
42732025-04-16FlixBus and GreyhoundFlixBus 2015 San Diego - San Bernardino - Los Angeles52110.00
15672025-05-14Los Angeles World AirportsLAX to US FlyAway - LAX to Union Station173.50
32822025-05-14City and County of San Francisco28 19TH AVENUE28040.60
13722025-05-14University of California, Los AngelesU41070.50
17962025-05-14San Diego Metropolitan Transit System, Airport, Flagship Cruises290 Rancho Bernardo Station - Downtown805110.20
37072025-05-14OmniTrans3 San Bdno - Baseline - Highland21080.60
48112025-04-16FlixBus and GreyhoundGreyhound US0802 San Francisco - Fresno - Los Angeles20540.20
30942025-05-14Yolo County Transportation DistrictROUTE 40530.60
\n", + "
" + ], "text/plain": [ - "count 6055.00\n", - "mean 6.68\n", - "std 15.47\n", - "min 0.00\n", - "25% 0.10\n", - "50% 0.40\n", - "75% 3.40\n", - "max 95.20\n", - "Name: pct_route_on_hwy, dtype: float64" + " service_date \\\n", + "4458 2025-04-16 \n", + "4774 2025-04-16 \n", + "4273 2025-04-16 \n", + "1567 2025-05-14 \n", + "3282 2025-05-14 \n", + "1372 2025-05-14 \n", + "1796 2025-05-14 \n", + "3707 2025-05-14 \n", + "4811 2025-04-16 \n", + "3094 2025-05-14 \n", + "\n", + " portfolio_organization_name \\\n", + "4458 FlixBus and Greyhound \n", + "4774 FlixBus and Greyhound \n", + "4273 FlixBus and Greyhound \n", + "1567 Los Angeles World Airports \n", + "3282 City and County of San Francisco \n", + "1372 University of California, Los Angeles \n", + "1796 San Diego Metropolitan Transit System, Airport, Flagship Cruises \n", + "3707 OmniTrans \n", + "4811 FlixBus and Greyhound \n", + "3094 Yolo County Transportation District \n", + "\n", + " recent_combined_name shn_route \\\n", + "4458 FlixBus N2002 SF - LA - Palm Springs 80 \n", + "4774 Greyhound US0802 San Francisco - Fresno - Los Angeles 110 \n", + "4273 FlixBus 2015 San Diego - San Bernardino - Los Angeles 52 \n", + "1567 LAX to US FlyAway - LAX to Union Station 1 \n", + "3282 28 19TH AVENUE 280 \n", + "1372 U4 10 \n", + "1796 290 Rancho Bernardo Station - Downtown 805 \n", + "3707 3 San Bdno - Baseline - Highland 210 \n", + "4811 Greyhound US0802 San Francisco - Fresno - Los Angeles 205 \n", + "3094 ROUTE 40 5 \n", + "\n", + " District pct_route_on_hwy \n", + "4458 4 2.10 \n", + "4774 7 0.00 \n", + "4273 11 0.00 \n", + "1567 7 3.50 \n", + "3282 4 0.60 \n", + "1372 7 0.50 \n", + "1796 11 0.20 \n", + "3707 8 0.60 \n", + "4811 4 0.20 \n", + "3094 3 0.60 " ] }, - "execution_count": 35, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "intersecting.pct_route_on_hwy.describe()" + "intersecting.drop(columns=[\"geometry\", \"route_length_feet\", \"highway_feet\"]).sample(10)" ] }, { "cell_type": "code", - "execution_count": null, - "id": "adcd5ca9-25b5-4aac-a4cd-0a7a9d98532f", + "execution_count": 33, + "id": "20aeafc5-48f6-46d0-9c91-210ff2dcd6a9", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "6788" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# transit_routes_gdf = process_transit_routes()" + "len(intersecting)" ] }, { "cell_type": "code", - "execution_count": null, - "id": "5bdbb646-9217-4acb-906c-b230933e62fe", + "execution_count": 34, + "id": "60c66a8e-1519-4c2c-827c-651af54757f9", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "4008" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# len(intersecting)" + "len(\n", + " intersecting.loc[\n", + " (intersecting.pct_route_on_hwy <= 1) & (intersecting.shn_route.notna())\n", + " ]\n", + ")" ] }, { "cell_type": "code", - "execution_count": null, - "id": "de6248ff-8a6b-4dc3-bb10-9feb28a2510b", + "execution_count": 35, + "id": "5e05b2f0-b614-4a02-9295-748dda09e840", "metadata": { "tags": [] }, - "outputs": [], - "source": [ - "# intersecting.loc[intersecting.pct_route_on_hwy != 0].recent_combined_name.nunique()" - ] - }, - { - "cell_type": "markdown", - "id": "9f9296aa-d0a9-45c3-b8a9-43872d1614dd", - "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", + "
service_dateportfolio_organization_namerecent_combined_nameshn_routeDistrictpct_route_on_hwy
19242025-05-14San Diego Metropolitan Transit System, Airport, Flagship Cruises929 Downtown - Iris Transit Center75110.20
10792025-05-14Alameda-Contra Costa Transit DistrictNX Grand Lake - Laurel Transbay2440.20
66902025-05-14Santa Clara Valley Transportation AuthorityExpress 104 Milpitas BART - Stanford Research Park8540.10
17362025-05-14San Diego Metropolitan Transit System, Airport, Flagship Cruises14 Grantville Trolley - Baltimore & Lake Murray8110.70
49972025-04-16FlixBus and GreyhoundGreyhound US0900 Los Angeles - Las Vegas6070.00
46652025-04-16FlixBus and GreyhoundGreyhound US0500 Seattle - Sacramento8030.00
45372025-04-16FlixBus and GreyhoundFlixBus N2003 San Francisco - Los Angeles - San Diego57120.20
42562025-04-16FlixBus and GreyhoundFlixBus 2007 LA - Sacramento12100.00
40092025-05-14Sacramento Regional Transit DistrictGold Downtown - Folsom5130.20
15172025-05-14City of Montebello10 Whittier Blvd60570.20
\n", + "
" + ], + "text/plain": [ + " service_date \\\n", + "1924 2025-05-14 \n", + "1079 2025-05-14 \n", + "6690 2025-05-14 \n", + "1736 2025-05-14 \n", + "4997 2025-04-16 \n", + "4665 2025-04-16 \n", + "4537 2025-04-16 \n", + "4256 2025-04-16 \n", + "4009 2025-05-14 \n", + "1517 2025-05-14 \n", + "\n", + " portfolio_organization_name \\\n", + "1924 San Diego Metropolitan Transit System, Airport, Flagship Cruises \n", + "1079 Alameda-Contra Costa Transit District \n", + "6690 Santa Clara Valley Transportation Authority \n", + "1736 San Diego Metropolitan Transit System, Airport, Flagship Cruises \n", + "4997 FlixBus and Greyhound \n", + "4665 FlixBus and Greyhound \n", + "4537 FlixBus and Greyhound \n", + "4256 FlixBus and Greyhound \n", + "4009 Sacramento Regional Transit District \n", + "1517 City of Montebello \n", + "\n", + " recent_combined_name shn_route \\\n", + "1924 929 Downtown - Iris Transit Center 75 \n", + "1079 NX Grand Lake - Laurel Transbay 24 \n", + "6690 Express 104 Milpitas BART - Stanford Research Park 85 \n", + "1736 14 Grantville Trolley - Baltimore & Lake Murray 8 \n", + "4997 Greyhound US0900 Los Angeles - Las Vegas 60 \n", + "4665 Greyhound US0500 Seattle - Sacramento 80 \n", + "4537 FlixBus N2003 San Francisco - Los Angeles - San Diego 57 \n", + "4256 FlixBus 2007 LA - Sacramento 12 \n", + "4009 Gold Downtown - Folsom 51 \n", + "1517 10 Whittier Blvd 605 \n", + "\n", + " District pct_route_on_hwy \n", + "1924 11 0.20 \n", + "1079 4 0.20 \n", + "6690 4 0.10 \n", + "1736 11 0.70 \n", + "4997 7 0.00 \n", + "4665 3 0.00 \n", + "4537 12 0.20 \n", + "4256 10 0.00 \n", + "4009 3 0.20 \n", + "1517 7 0.20 " + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "## Create final dataframes" + "intersecting.loc[\n", + " (intersecting.pct_route_on_hwy <= 1) & (intersecting.shn_route.notna())\n", + "].drop(columns=[\"geometry\", \"route_length_feet\", \"highway_feet\"]).sample(10)" ] }, { "cell_type": "code", "execution_count": 36, - "id": "5b2d690d-9339-4589-ae73-fe2dcd103cea", + "id": "1dfaf6d4-a7e7-44ef-84fb-6bd2f691a615", "metadata": { "tags": [] }, - "outputs": [], - "source": [ - "def create_on_shs_column(df):\n", - " df[\"on_shs\"] = np.where(df[\"pct_route_on_hwy\"] == 0, \"N\", \"Y\")\n", - " return df" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "31c72996-a662-4278-9bad-f71f9d4c440e", + "outputs": [ + { + "data": { + "text/plain": [ + "count 6191.00\n", + "mean 6.54\n", + "std 15.02\n", + "min 0.00\n", + "25% 0.10\n", + "50% 0.40\n", + "75% 3.70\n", + "max 95.20\n", + "Name: pct_route_on_hwy, dtype: float64" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "intersecting.pct_route_on_hwy.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "2eb8c505-2d6c-4416-a31a-b974cafb1ff9", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "count 2546.00\n", + "mean 2.67\n", + "std 4.15\n", + "min 1.00\n", + "25% 1.00\n", + "50% 2.00\n", + "75% 3.00\n", + "max 72.00\n", + "Name: recent_combined_name, dtype: float64" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "intersecting.recent_combined_name.value_counts().describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "60baeb61-115c-48cd-988e-12358b077cba", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Find routes that cross multiple districts\n", + "multi_district_routes = (\n", + " intersecting.groupby([\"portfolio_organization_name\", \"recent_combined_name\"])\n", + " .agg({\"District\": \"nunique\"})\n", + " .reset_index()\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "7c8af6ad-1e43-4da4-88b9-e64bddd8de02", + "metadata": { + "scrolled": true, + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
portfolio_organization_namerecent_combined_nameDistrict
1646Orange County Transportation Authority1 Long Beach - San Clemente3
1215Kern County100 Bakersfield - Lancaster3
2309Stanislaus Regional Transit AuthorityBART - Modesto2
248Capitol Corridor Joint Powers AuthorityCC Capitol Corridor2
1763Riverside Transit Agency200 San Bernardino - Riverside - Anaheim/Disneyland Express2
2368Tehama CountyGTC Glenn-Tehama Connect2
1687Orange County Transportation Authority60 Long Beach - Tustin2
2582Yolo County Transportation DistrictROUTE 2302
1789Sacramento CountyHighway 99 Express2
132Amador Regional Transit System1 Sacramento2
2578Yolo County Transportation DistrictCauseway Connection2
2425UCSC and City of Santa Cruz Beach Shuttle172
2495Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express2
1855San Benito County Local Transportation AuthorityIntercounty Gilroy Caltrain and Gavilan College2
1978San Joaquin Regional Transit District163 Sacramento Via992
1977San Joaquin Regional Transit District150 Livermore/Dublin BART2
1493Mendocino Transit Authority65 CC Rider2
886Eastern Sierra Transit Authority395 Route South2
1495Mendocino Transit Authority75 South Coast / Ukiah2
1975San Joaquin Regional Rail CommissionACE Train2
\n", + "
" + ], + "text/plain": [ + " portfolio_organization_name \\\n", + "1646 Orange County Transportation Authority \n", + "1215 Kern County \n", + "2309 Stanislaus Regional Transit Authority \n", + "248 Capitol Corridor Joint Powers Authority \n", + "1763 Riverside Transit Agency \n", + "2368 Tehama County \n", + "1687 Orange County Transportation Authority \n", + "2582 Yolo County Transportation District \n", + "1789 Sacramento County \n", + "132 Amador Regional Transit System \n", + "2578 Yolo County Transportation District \n", + "2425 UCSC and City of Santa Cruz Beach Shuttle \n", + "2495 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "1855 San Benito County Local Transportation Authority \n", + "1978 San Joaquin Regional Transit District \n", + "1977 San Joaquin Regional Transit District \n", + "1493 Mendocino Transit Authority \n", + "886 Eastern Sierra Transit Authority \n", + "1495 Mendocino Transit Authority \n", + "1975 San Joaquin Regional Rail Commission \n", + "\n", + " recent_combined_name District \n", + "1646 1 Long Beach - San Clemente 3 \n", + "1215 100 Bakersfield - Lancaster 3 \n", + "2309 BART - Modesto 2 \n", + "248 CC Capitol Corridor 2 \n", + "1763 200 San Bernardino - Riverside - Anaheim/Disneyland Express 2 \n", + "2368 GTC Glenn-Tehama Connect 2 \n", + "1687 60 Long Beach - Tustin 2 \n", + "2582 ROUTE 230 2 \n", + "1789 Highway 99 Express 2 \n", + "132 1 Sacramento 2 \n", + "2578 Causeway Connection 2 \n", + "2425 17 2 \n", + "2495 80-89 Coastal Express 2 \n", + "1855 Intercounty Gilroy Caltrain and Gavilan College 2 \n", + "1978 163 Sacramento Via99 2 \n", + "1977 150 Livermore/Dublin BART 2 \n", + "1493 65 CC Rider 2 \n", + "886 395 Route South 2 \n", + "1495 75 South Coast / Ukiah 2 \n", + "1975 ACE Train 2 " + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "multi_district_routes.loc[\n", + " ~multi_district_routes.portfolio_organization_name.isin([\"FlixBus and Greyhound\", \"Amtrak\"])\n", + "].sort_values(by=[\"District\"], ascending=False).head(20)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "fcbcdff2-22f5-4db9-9b37-880ecbab2621", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "bakersfield_route = intersecting.loc[\n", + " intersecting.recent_combined_name == \"100 Bakersfield - Lancaster\"\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "eab02039-73a9-40fd-a806-caff9691738c", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([7, 6, 9])" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bakersfield_route.District.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "1fecd99c-44f3-47cd-9327-ba679e3c8d10", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# bakersfield_route.drop(columns = [\"service_date\"]).explore()" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "5004cbb9-f740-494a-b335-dcf0e7f977cd", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "75.4" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "intersecting.loc[\n", + " intersecting.recent_combined_name == \"100 Bakersfield - Lancaster\"\n", + "].pct_route_on_hwy.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "3b8b8f0b-0768-44de-b2c8-e112a7414b60", + "metadata": { + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
service_dateportfolio_organization_namerecent_combined_nameroute_length_feetshn_routeDistricthighway_feetpct_route_on_hwy
35072025-05-14Antelope Valley Transit AuthorityRoute 785384526.241017876278.7614.40
35082025-05-14Antelope Valley Transit AuthorityRoute 785384526.241107327921.870.00
35092025-05-14Antelope Valley Transit AuthorityRoute 785384526.244057512007.450.10
35102025-05-14Antelope Valley Transit AuthorityRoute 785384526.2457967173.5211.70
35112025-05-14Antelope Valley Transit AuthorityRoute 785384526.24170764634.098.50
35122025-05-14Antelope Valley Transit AuthorityRoute 785384526.241347141091.550.00
35132025-05-14Antelope Valley Transit AuthorityRoute 785384526.2427451415.950.00
35142025-05-14Antelope Valley Transit AuthorityRoute 785384526.241187416699.900.10
35152025-05-14Antelope Valley Transit AuthorityRoute 785384526.242107553415.120.00
35162025-05-14Antelope Valley Transit AuthorityRoute 785384526.24147583368.4547.90
\n", + "
" + ], + "text/plain": [ + " service_date portfolio_organization_name recent_combined_name \\\n", + "3507 2025-05-14 Antelope Valley Transit Authority Route 785 \n", + "3508 2025-05-14 Antelope Valley Transit Authority Route 785 \n", + "3509 2025-05-14 Antelope Valley Transit Authority Route 785 \n", + "3510 2025-05-14 Antelope Valley Transit Authority Route 785 \n", + "3511 2025-05-14 Antelope Valley Transit Authority Route 785 \n", + "3512 2025-05-14 Antelope Valley Transit Authority Route 785 \n", + "3513 2025-05-14 Antelope Valley Transit Authority Route 785 \n", + "3514 2025-05-14 Antelope Valley Transit Authority Route 785 \n", + "3515 2025-05-14 Antelope Valley Transit Authority Route 785 \n", + "3516 2025-05-14 Antelope Valley Transit Authority Route 785 \n", + "\n", + " route_length_feet shn_route District highway_feet pct_route_on_hwy \n", + "3507 384526.24 101 7 876278.76 14.40 \n", + "3508 384526.24 110 7 327921.87 0.00 \n", + "3509 384526.24 405 7 512007.45 0.10 \n", + "3510 384526.24 5 7 967173.52 11.70 \n", + "3511 384526.24 170 7 64634.09 8.50 \n", + "3512 384526.24 134 7 141091.55 0.00 \n", + "3513 384526.24 2 7 451415.95 0.00 \n", + "3514 384526.24 118 7 416699.90 0.10 \n", + "3515 384526.24 210 7 553415.12 0.00 \n", + "3516 384526.24 14 7 583368.45 47.90 " + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "intersecting.loc[intersecting.recent_combined_name == \"Route 785\"].drop(\n", + " columns=[\"geometry\"]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "dd3cb6cc-131f-4948-b1e4-0b79528ef3c8", + "metadata": {}, + "source": [ + "## Create final dataframe to add to Transit Routes dataset on the Open Data Portal [here](https://data.ca.gov/dataset/california-transit-routes/resource/3ea7eb11-4fc6-45ed-88f5-b599e38c6b19)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "6c49e959-ff7a-49c6-9294-ab21824c3f92", "metadata": { "tags": [] }, "outputs": [], "source": [ - "def prep_transit_route_shs(gdf: gpd.GeoDataFrame, pct_route_intersection: int):\n", - " # Aggregate to find the total pct of a transit route because\n", - " # a route can intersect with one or more state highway\n", - " # so there will only be one row for one transit route instead of\n", - " # many rows for one transit route.\n", - " map_gdf = (\n", - " gdf.groupby(\n", + "def group_route_district(df: pd.DataFrame, pct_route_on_hwy_agg: str) -> pd.DataFrame:\n", + "\n", + " # Aggregate by adding all the districts and SHN to a single row, rather than\n", + " # multiple and sum up the total % of SHN a transit route intersects with\n", + " agg1 = (\n", + " df.groupby(\n", " [\n", " \"portfolio_organization_name\",\n", " \"recent_combined_name\",\n", - " \"schedule_gtfs_dataset_key\",\n", - " ]\n", + " ],\n", + " as_index=False,\n", + " )[[\"shn_route\", \"District\", \"pct_route_on_hwy_across_districts\"]]\n", + " .agg(\n", + " {\n", + " \"shn_route\": lambda x: \", \".join(set(x.astype(str))),\n", + " \"District\": lambda x: \", \".join(set(x.astype(str))),\n", + " \"pct_route_on_hwy_across_districts\": pct_route_on_hwy_agg,\n", + " }\n", " )\n", - " .agg({\"pct_route_on_hwy\": \"sum\"})\n", - " .reset_index()\n", + " .reset_index(drop=True)\n", " )\n", "\n", - " # Tag whether or not a transit route intersects with\n", - " # a state highway.\n", - " map_gdf = create_on_shs_column(map_gdf)\n", - "\n", - " # Join back to get the original transit route geometries.\n", - " map_gdf = pd.merge(\n", - " gdf[\n", - " [\"schedule_gtfs_dataset_key\", \"recent_combined_name\", \"geometry\"]\n", - " ].drop_duplicates(),\n", - " map_gdf,\n", - " on=[\"schedule_gtfs_dataset_key\", \"recent_combined_name\"],\n", - " )\n", - " # We want a text table to display.\n", - " # Filter out for any pct_route_on_hwy that we deem too low.\n", - " # For transit routes that intersect with multiple highways, join the highways\n", - " # together so there will be one row for a unique route.\n", - " filtered_gdf = map_gdf.loc[map_gdf.pct_route_on_hwy > pct_route_intersection]\n", - " text_df = pd.merge(\n", - " gdf.drop(columns=[\"pct_route_on_hwy\"]), filtered_gdf, how=\"inner\"\n", - " )\n", - " text_df = (\n", - " (\n", - " text_df.groupby(\n", - " [\n", - " \"portfolio_organization_name\",\n", - " \"recent_combined_name\",\n", - " \"schedule_gtfs_dataset_key\",\n", - " \"pct_route_on_hwy\",\n", - " ],\n", - " as_index=False,\n", - " )\n", - " )[\"shn_route\"]\n", - " .agg(lambda x: \", \".join(set(x.astype(str))))\n", - " .reset_index(drop=True)\n", + " # Clean up\n", + " agg1.pct_route_on_hwy_across_districts = (\n", + " agg1.pct_route_on_hwy_across_districts.astype(float).round(2)\n", " )\n", + " return agg1" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "49ef0c20-a178-41aa-ac2b-3c2ee10a5105", + "metadata": {}, + "outputs": [], + "source": [ + "# group_route_district()" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "2a0f3f1c-5906-43db-a1c4-a3c44a514349", + "metadata": {}, + "outputs": [], + "source": [ + "def create_on_shs_column(df):\n", + " df[\"on_shs\"] = np.where(df[\"pct_route_on_hwy_across_districts\"] == 0, \"N\", \"Y\")\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "8257de8b-8a94-477c-9e4b-9aed7a8a446b", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "def prep_open_data_portal(gdf: gpd.GeoDataFrame) -> pd.DataFrame:\n", + " \"\"\"\n", + " Prepare the gdf to join with the existing transit_routes\n", + " dataframe that is published on the Open Data Portal\n", + " \"\"\"\n", + " # Rename column\n", + " gdf = gdf.rename(columns={\"pct_route_on_hwy\": \"pct_route_on_hwy_across_districts\"})\n", + " # Group the dataframe so that one route only has one\n", + " # row instead of multiple rows after finding its\n", + " # intersection with any SHN routes.\n", + " agg1 = group_route_district(gdf, \"sum\")\n", "\n", - " return map_gdf, text_df" + " # Add yes/no column to signify if a transit route intersects\n", + " # with a SHN route\n", + " agg1 = create_on_shs_column(agg1)\n", + "\n", + " return agg1" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "27be2b5f-8b69-449d-b113-707d2130b697", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['service_date', 'geometry', 'portfolio_organization_name',\n", + " 'recent_combined_name', 'route_length_feet', 'shn_route', 'District',\n", + " 'highway_feet', 'pct_route_on_hwy'],\n", + " dtype='object')" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "intersecting.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "b555caba-52fc-4253-bea1-8e1da0f7bd1e", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "open_data_portal_df = prep_open_data_portal(intersecting)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "1a56f955-8169-49ec-b541-3058b0bbca17", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['4', '0', '3, 10', '10', '9, 4, 3, 10', '4, 3', '4, 3, 2, 7, 5',\n", + " '7, 5', '8, 7, 12', '8, 7, 11', '12', '7', '8', '3', '6', '5',\n", + " '7, 12', '1', '9', '7, 9', '7, 4, 6, 10', '7, 6, 11, 12',\n", + " '7, 6, 10, 3', '7, 11, 12', '8, 7', '6, 4, 10, 11, 12, 7', '3, 2',\n", + " '6, 3, 10, 11, 12, 7', '11', '7, 9, 6', '6, 9', '4, 1', '2',\n", + " '5, 4', '8, 12', '4, 10', '2, 1'], dtype=object)" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "open_data_portal_df.District.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "2a79984b-1f0f-4ca3-99b2-7e1fbdbce1c7", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Y 2021\n", + "N 600\n", + "Name: on_shs, dtype: int64" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "open_data_portal_df.on_shs.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "5af04ee4-5d19-4443-947e-e20c7108a74a", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "count 2021.00\n", + "mean 20.02\n", + "std 27.36\n", + "min 0.10\n", + "25% 1.00\n", + "50% 4.40\n", + "75% 31.60\n", + "max 97.80\n", + "Name: pct_route_on_hwy_across_districts, dtype: float64" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "open_data_portal_df.loc[\n", + " open_data_portal_df.on_shs == \"Y\"\n", + "].pct_route_on_hwy_across_districts.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "39020051-ccba-46f5-b612-588bdc5c9410", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "count 600.00\n", + "mean 0.00\n", + "std 0.00\n", + "min 0.00\n", + "25% 0.00\n", + "50% 0.00\n", + "75% 0.00\n", + "max 0.00\n", + "Name: pct_route_on_hwy_across_districts, dtype: float64" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "open_data_portal_df.loc[\n", + " open_data_portal_df.on_shs == \"N\"\n", + "].pct_route_on_hwy_across_districts.describe()" + ] + }, + { + "cell_type": "markdown", + "id": "7c2210be-1478-4474-8b16-df4e44fc95a0", + "metadata": {}, + "source": [ + "### Check a couple of routes " ] }, { "cell_type": "code", - "execution_count": 38, - "id": "9ce2810a-c58d-4f0e-8a06-d10e39cac140", + "execution_count": 69, + "id": "41160615-7f76-4123-b11d-26730d7afb42", "metadata": { + "scrolled": true, "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Tulare County Regional Transit Agency',\n", + " 'Marin County Transit District', 'City of Auburn', 'City of Bell',\n", + " 'Santa Barbara Metropolitan Transit District',\n", + " 'Los Angeles County Metropolitan Transportation Authority',\n", + " 'Tahoe Transportation District',\n", + " 'Sonoma-Marin Area Rail Transit District',\n", + " 'Sonoma County Transit Schedule', 'Lake Transit Authority',\n", + " 'Yuba-Sutter Transit Authority', 'City of Glendale', 'Yurok Tribe',\n", + " 'City of Bell Gardens', 'POINT', 'Modoc Transportation Agency',\n", + " 'City of Fairfield', 'Alameda-Contra Costa Transit District',\n", + " 'City of Cudahy', 'Emeryville Transportation Management Agency',\n", + " 'City of Redondo Beach', 'City of West Covina',\n", + " 'Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)',\n", + " 'Yuma County Intergovernmental Public Transportation Authority',\n", + " 'City of Avalon', 'Curry Public Transit', 'City of La Puente',\n", + " 'Fresno County Rural Transit Agency',\n", + " 'Napa Valley Transportation Authority',\n", + " 'Solano Transportation Authority',\n", + " 'University of California, Los Angeles',\n", + " 'University of California, San Diego', 'Long Beach Transit',\n", + " 'City of Burbank', 'Los Angeles County', 'City of Montebello',\n", + " 'Los Angeles World Airports',\n", + " 'San Francisco International Airport',\n", + " 'North County Transit District', 'Yosemite National Park',\n", + " 'Santa Barbara County Association of Governments',\n", + " 'Siskiyou County',\n", + " 'San Diego Metropolitan Transit System, Airport, Flagship Cruises',\n", + " 'City of South Gate', 'Amador Regional Transit System',\n", + " 'Tuolumne County Transit Agency', 'City of Visalia',\n", + " 'Stanford University', 'City of Roseville', 'City of Norwalk',\n", + " 'Palo Verde Valley Transit Agency', 'City of Madera', 'Amtrak',\n", + " 'City of Culver City', 'Kings County Area Public Transit Agency',\n", + " 'Tehama County', 'City of Fresno', 'City of Dana Point',\n", + " 'Kern County', 'City of Huntington Park', 'Madera County',\n", + " 'City of El Segundo', 'Angel Island-Tiburon Ferry Company',\n", + " 'City of Mission Viejo', 'San Mateo County Transit District',\n", + " 'Eastern Contra Costa Transit Authority',\n", + " 'Central Contra Costa Transit Authority',\n", + " 'Mountain Area Regional Transit Authority', 'City of Lompoc',\n", + " 'San Benito County Local Transportation Authority',\n", + " 'City of Petaluma', 'City of Rosemead', 'Chemehuevi Indian Tribe',\n", + " 'City of Cerritos', 'City of South San Francisco',\n", + " 'UCSC and City of Santa Cruz Beach Shuttle',\n", + " 'Calaveras Transit Agency',\n", + " 'Mountain View Transportation Management Association',\n", + " 'Butte County Association of Governments', 'Trinity County',\n", + " 'City of Morro Bay', 'City of Thousand Oaks',\n", + " 'Transit Joint Powers Authority for Merced County',\n", + " 'Tahoe Truckee Area Regional Transportation, North Lake Tahoe',\n", + " 'City of Baldwin Park', 'City of Guadalupe',\n", + " 'El Dorado County Transit Authority', 'City of Santa Maria',\n", + " 'Mission Bay Transportation Management Agency',\n", + " 'Yolo County Transportation District',\n", + " 'Mendocino Transit Authority',\n", + " 'San Luis Obispo Regional Transit Authority',\n", + " 'Western Contra Costa Transit Authority', 'City of Irvine',\n", + " 'City of Arvin', 'City and County of San Francisco',\n", + " 'San Joaquin Regional Transit District', 'Glenn County',\n", + " 'City of Beaumont', 'Antelope Valley Transit Authority',\n", + " 'San Francisco Bay Ferry and Oakland Alameda Water Shuttle Schedule',\n", + " 'City of Bellflower', 'Presidio Trust', 'City of Maywood',\n", + " 'Palos Verdes Peninsula Transit Authority', 'City of Elk Grove',\n", + " 'City of Lodi', 'San Francisco Bay Area Rapid Transit District',\n", + " 'Placer County', 'City of Santa Rosa', 'City of Calabasas',\n", + " 'City of Sierra Madre', 'City of Lynwood', 'OmniTrans',\n", + " 'City of Torrance', 'Plumas Transit Systems',\n", + " 'Monterey-Salinas Transit', 'Sacramento Regional Transit District',\n", + " 'Peninsula Corridor Joint Powers Board', 'City of Alhambra',\n", + " 'City of Santa Monica', 'City of Rio Vista', 'City of Inglewood',\n", + " 'City of Arcadia', 'Humboldt Transit Authority',\n", + " 'FlixBus and Greyhound', 'City of Artesia', 'City of Glendora',\n", + " 'University of California, Berkeley', 'Nevada County',\n", + " 'Redding Area Bus Authority',\n", + " 'Golden Gate Bridge, Highway and Transportation District',\n", + " 'Basin Transit', 'City of Manteca',\n", + " 'Treasure Island Community Development', 'City of Santa Clarita',\n", + " 'City of Union City', 'Sacramento County',\n", + " 'Redwood Coast Transit Authority', 'City of El Monte',\n", + " 'University of California, Irvine', 'City of Gardena',\n", + " 'City of Downey', 'City of San Clemente',\n", + " 'Commute.org and Menlo Park Community Shuttles Schedule',\n", + " 'City of Laguna Beach',\n", + " 'Southern California Regional Rail Authority',\n", + " 'Anaheim Transportation Network', 'City of San Fernando',\n", + " 'City of Lawndale', 'SunLine Transit Agency',\n", + " 'Eastern Sierra Transit Authority', 'City of Los Angeles',\n", + " 'San Joaquin Regional Rail Commission', 'City of Needles',\n", + " 'City of Delano', 'University of California, Davis',\n", + " 'Golden Empire Transit District',\n", + " 'Stanislaus Regional Transit Authority',\n", + " 'Livermore-Amador Valley Transit Authority', 'City of Tracy',\n", + " 'City of Vacaville', 'Lassen Transit Service Agency',\n", + " 'Victor Valley Transit Authority', 'City of Turlock',\n", + " 'City of Escalon', 'City of Commerce', 'City of Banning',\n", + " 'Orange County Transportation Authority', 'Town of Truckee',\n", + " 'City of Pasadena', 'City of West Hollywood',\n", + " 'Capitol Corridor Joint Powers Authority', 'City of Mountain View',\n", + " 'Foothill Transit', 'City of Corona', 'City of Clovis',\n", + " 'Yosemite Area Regional Transportation System',\n", + " 'Riverside Transit Agency',\n", + " 'Santa Clara Valley Transportation Authority',\n", + " 'City of San Juan Capistrano', 'City of Monterey Park',\n", + " 'Imperial County Transportation Commission', 'City of Solvang',\n", + " 'City of Ripon'], dtype=object)" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "map_gdf, text_df = prep_transit_route_shs(intersecting, 20)" + "intersecting.portfolio_organization_name.unique()" ] }, { "cell_type": "code", - "execution_count": 39, - "id": "f1c26505-554d-4822-ae77-105feb8423a1", + "execution_count": 72, + "id": "636011d3-f05b-45fa-b0c9-132ef27daece", "metadata": { + "scrolled": true, "tags": [] }, "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
service_dateportfolio_organization_namerecent_combined_nameroute_length_feetshn_routeDistricthighway_feetpct_route_on_hwy
51982025-05-14Golden Gate Bridge, Highway and Transportation District101 Santa Rosa - San Francisco330666.2614944979.070.10
51992025-05-14Golden Gate Bridge, Highway and Transportation District101 Santa Rosa - San Francisco330666.2610141824371.7676.00
52002025-05-14Golden Gate Bridge, Highway and Transportation District101 Santa Rosa - San Francisco330666.26131435125.000.00
52012025-05-14Golden Gate Bridge, Highway and Transportation District101 Santa Rosa - San Francisco330666.265804621177.640.00
52022025-05-14Golden Gate Bridge, Highway and Transportation District101 Santa Rosa - San Francisco330666.26374225675.010.00
52032025-05-14Golden Gate Bridge, Highway and Transportation District101 Santa Rosa - San Francisco330666.26124478781.000.10
52042025-05-14Golden Gate Bridge, Highway and Transportation District114 Mill Valley - San Francisco97788.4414944979.073.40
52052025-05-14Golden Gate Bridge, Highway and Transportation District114 Mill Valley - San Francisco97788.4410141824371.7634.00
52062025-05-14Golden Gate Bridge, Highway and Transportation District114 Mill Valley - San Francisco97788.44804748779.570.10
52072025-05-14Golden Gate Bridge, Highway and Transportation District130 San Rafael - San Francisco124935.8214944979.070.10
52082025-05-14Golden Gate Bridge, Highway and Transportation District130 San Rafael - San Francisco124935.8210141824371.7647.60
52092025-05-14Golden Gate Bridge, Highway and Transportation District130 San Rafael - San Francisco124935.82131435125.000.10
52102025-05-14Golden Gate Bridge, Highway and Transportation District130 San Rafael - San Francisco124935.825804621177.640.20
52152025-05-14Golden Gate Bridge, Highway and Transportation District132 San Anselmo - San Francisco115948.92804748779.570.10
52142025-05-14Golden Gate Bridge, Highway and Transportation District132 San Anselmo - San Francisco115948.925804621177.640.10
52132025-05-14Golden Gate Bridge, Highway and Transportation District132 San Anselmo - San Francisco115948.92131435125.000.10
52122025-05-14Golden Gate Bridge, Highway and Transportation District132 San Anselmo - San Francisco115948.9210141824371.7656.10
52112025-05-14Golden Gate Bridge, Highway and Transportation District132 San Anselmo - San Francisco115948.9214944979.070.20
52162025-05-14Golden Gate Bridge, Highway and Transportation District150 San Rafael - San Francisco111677.7914944979.070.60
52172025-05-14Golden Gate Bridge, Highway and Transportation District150 San Rafael - San Francisco111677.7910141824371.7664.40
52182025-05-14Golden Gate Bridge, Highway and Transportation District150 San Rafael - San Francisco111677.79131435125.000.10
52192025-05-14Golden Gate Bridge, Highway and Transportation District150 San Rafael - San Francisco111677.795804621177.640.10
52202025-05-14Golden Gate Bridge, Highway and Transportation District154 Novato - San Francisco172674.6614944979.070.10
52212025-05-14Golden Gate Bridge, Highway and Transportation District154 Novato - San Francisco172674.6610141824371.7662.40
52222025-05-14Golden Gate Bridge, Highway and Transportation District154 Novato - San Francisco172674.66131435125.000.10
52232025-05-14Golden Gate Bridge, Highway and Transportation District154 Novato - San Francisco172674.665804621177.640.10
52242025-05-14Golden Gate Bridge, Highway and Transportation District154 Novato - San Francisco172674.66374225675.010.30
52252025-05-14Golden Gate Bridge, Highway and Transportation District154 Novato - San Francisco172674.66804748779.570.10
52322025-05-14Golden Gate Bridge, Highway and Transportation District164 Petaluma - San Francisco236848.64804748779.570.10
52302025-05-14Golden Gate Bridge, Highway and Transportation District164 Petaluma - San Francisco236848.64374225675.010.00
52292025-05-14Golden Gate Bridge, Highway and Transportation District164 Petaluma - San Francisco236848.645804621177.640.00
52312025-05-14Golden Gate Bridge, Highway and Transportation District164 Petaluma - San Francisco236848.641164265930.401.30
52272025-05-14Golden Gate Bridge, Highway and Transportation District164 Petaluma - San Francisco236848.6410141824371.7673.20
52262025-05-14Golden Gate Bridge, Highway and Transportation District164 Petaluma - San Francisco236848.6414944979.070.10
52282025-05-14Golden Gate Bridge, Highway and Transportation District164 Petaluma - San Francisco236848.64131435125.000.00
52332025-05-14Golden Gate Bridge, Highway and Transportation District172 Santa Rosa - San Francisco331701.1914944979.070.10
52342025-05-14Golden Gate Bridge, Highway and Transportation District172 Santa Rosa - San Francisco331701.1910141824371.7678.60
52352025-05-14Golden Gate Bridge, Highway and Transportation District172 Santa Rosa - San Francisco331701.19131435125.000.00
52362025-05-14Golden Gate Bridge, Highway and Transportation District172 Santa Rosa - San Francisco331701.195804621177.640.00
52372025-05-14Golden Gate Bridge, Highway and Transportation District172 Santa Rosa - San Francisco331701.19374225675.010.00
52382025-05-14Golden Gate Bridge, Highway and Transportation District172 Santa Rosa - San Francisco331701.19124478781.001.00
52392025-05-14Golden Gate Bridge, Highway and Transportation District172 Santa Rosa - San Francisco331701.191164265930.400.00
52402025-05-14Golden Gate Bridge, Highway and Transportation District172 Santa Rosa - San Francisco331701.19804748779.570.00
52482025-05-14Golden Gate Bridge, Highway and Transportation District172X Santa Rosa - San Francisco Express324977.86804748779.570.00
52462025-05-14Golden Gate Bridge, Highway and Transportation District172X Santa Rosa - San Francisco Express324977.86124478781.001.10
52452025-05-14Golden Gate Bridge, Highway and Transportation District172X Santa Rosa - San Francisco Express324977.86374225675.010.00
52472025-05-14Golden Gate Bridge, Highway and Transportation District172X Santa Rosa - San Francisco Express324977.861164265930.400.10
52432025-05-14Golden Gate Bridge, Highway and Transportation District172X Santa Rosa - San Francisco Express324977.86131435125.000.00
52422025-05-14Golden Gate Bridge, Highway and Transportation District172X Santa Rosa - San Francisco Express324977.8610141824371.7684.20
52412025-05-14Golden Gate Bridge, Highway and Transportation District172X Santa Rosa - San Francisco Express324977.8614944979.070.10
52442025-05-14Golden Gate Bridge, Highway and Transportation District172X Santa Rosa - San Francisco Express324977.865804621177.640.00
52492025-05-14Golden Gate Bridge, Highway and Transportation District580 Del Norte BART Station - San Rafael71600.7210141824371.760.40
52502025-05-14Golden Gate Bridge, Highway and Transportation District580 Del Norte BART Station - San Rafael71600.725804621177.6446.00
52512025-05-14Golden Gate Bridge, Highway and Transportation District580 Del Norte BART Station - San Rafael71600.72804748779.570.30
52522025-05-14Golden Gate Bridge, Highway and Transportation District580 Del Norte BART Station - San Rafael71600.72123468502.681.00
52562025-05-14Golden Gate Bridge, Highway and Transportation District580X Del Norte BART Station - San Rafael Express67803.32123468502.681.10
52552025-05-14Golden Gate Bridge, Highway and Transportation District580X Del Norte BART Station - San Rafael Express67803.32804748779.570.40
52532025-05-14Golden Gate Bridge, Highway and Transportation District580X Del Norte BART Station - San Rafael Express67803.3210141824371.765.60
52542025-05-14Golden Gate Bridge, Highway and Transportation District580X Del Norte BART Station - San Rafael Express67803.325804621177.6464.40
52572025-05-14Golden Gate Bridge, Highway and Transportation District704 Del Norte BART Station - San Francisco75705.565804621177.641.60
52582025-05-14Golden Gate Bridge, Highway and Transportation District704 Del Norte BART Station - San Francisco75705.56804748779.5773.70
52592025-05-14Golden Gate Bridge, Highway and Transportation District704 Del Norte BART Station - San Francisco75705.568804501522.662.00
52602025-05-14Golden Gate Bridge, Highway and Transportation District704 Del Norte BART Station - San Francisco75705.5613484401.110.20
52612025-05-14Golden Gate Bridge, Highway and Transportation District704 Del Norte BART Station - San Francisco75705.56123468502.681.20
52622025-05-14Golden Gate Bridge, Highway and Transportation DistrictAISF Angel Island - San Francisco Ferry37411.10NaN0NaNNaN
52632025-05-14Golden Gate Bridge, Highway and Transportation DistrictLSSF Larkspur - San Francisco Ferry68152.43NaN0NaNNaN
52642025-05-14Golden Gate Bridge, Highway and Transportation DistrictSSSF Sausalito - San Francisco Ferry35761.60NaN0NaNNaN
52652025-05-14Golden Gate Bridge, Highway and Transportation DistrictTBSF Tiburon - San Francisco Ferry35928.35NaN0NaNNaN
\n", + "
" + ], "text/plain": [ - "Y 2021\n", - "N 600\n", - "Name: on_shs, dtype: int64" + " service_date portfolio_organization_name \\\n", + "5198 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5199 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5200 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5201 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5202 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5203 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5204 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5205 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5206 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5207 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5208 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5209 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5210 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5215 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5214 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5213 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5212 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5211 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5216 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5217 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5218 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5219 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5220 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5221 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5222 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5223 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5224 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5225 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5232 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5230 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5229 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5231 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5227 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5226 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5228 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5233 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5234 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5235 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5236 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5237 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5238 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5239 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5240 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5248 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5246 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5245 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5247 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5243 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5242 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5241 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5244 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5249 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5250 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5251 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5252 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5256 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5255 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5253 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5254 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5257 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5258 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5259 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5260 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5261 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5262 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5263 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5264 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "5265 2025-05-14 Golden Gate Bridge, Highway and Transportation District \n", + "\n", + " recent_combined_name route_length_feet \\\n", + "5198 101 Santa Rosa - San Francisco 330666.26 \n", + "5199 101 Santa Rosa - San Francisco 330666.26 \n", + "5200 101 Santa Rosa - San Francisco 330666.26 \n", + "5201 101 Santa Rosa - San Francisco 330666.26 \n", + "5202 101 Santa Rosa - San Francisco 330666.26 \n", + "5203 101 Santa Rosa - San Francisco 330666.26 \n", + "5204 114 Mill Valley - San Francisco 97788.44 \n", + "5205 114 Mill Valley - San Francisco 97788.44 \n", + "5206 114 Mill Valley - San Francisco 97788.44 \n", + "5207 130 San Rafael - San Francisco 124935.82 \n", + "5208 130 San Rafael - San Francisco 124935.82 \n", + "5209 130 San Rafael - San Francisco 124935.82 \n", + "5210 130 San Rafael - San Francisco 124935.82 \n", + "5215 132 San Anselmo - San Francisco 115948.92 \n", + "5214 132 San Anselmo - San Francisco 115948.92 \n", + "5213 132 San Anselmo - San Francisco 115948.92 \n", + "5212 132 San Anselmo - San Francisco 115948.92 \n", + "5211 132 San Anselmo - San Francisco 115948.92 \n", + "5216 150 San Rafael - San Francisco 111677.79 \n", + "5217 150 San Rafael - San Francisco 111677.79 \n", + "5218 150 San Rafael - San Francisco 111677.79 \n", + "5219 150 San Rafael - San Francisco 111677.79 \n", + "5220 154 Novato - San Francisco 172674.66 \n", + "5221 154 Novato - San Francisco 172674.66 \n", + "5222 154 Novato - San Francisco 172674.66 \n", + "5223 154 Novato - San Francisco 172674.66 \n", + "5224 154 Novato - San Francisco 172674.66 \n", + "5225 154 Novato - San Francisco 172674.66 \n", + "5232 164 Petaluma - San Francisco 236848.64 \n", + "5230 164 Petaluma - San Francisco 236848.64 \n", + "5229 164 Petaluma - San Francisco 236848.64 \n", + "5231 164 Petaluma - San Francisco 236848.64 \n", + "5227 164 Petaluma - San Francisco 236848.64 \n", + "5226 164 Petaluma - San Francisco 236848.64 \n", + "5228 164 Petaluma - San Francisco 236848.64 \n", + "5233 172 Santa Rosa - San Francisco 331701.19 \n", + "5234 172 Santa Rosa - San Francisco 331701.19 \n", + "5235 172 Santa Rosa - San Francisco 331701.19 \n", + "5236 172 Santa Rosa - San Francisco 331701.19 \n", + "5237 172 Santa Rosa - San Francisco 331701.19 \n", + "5238 172 Santa Rosa - San Francisco 331701.19 \n", + "5239 172 Santa Rosa - San Francisco 331701.19 \n", + "5240 172 Santa Rosa - San Francisco 331701.19 \n", + "5248 172X Santa Rosa - San Francisco Express 324977.86 \n", + "5246 172X Santa Rosa - San Francisco Express 324977.86 \n", + "5245 172X Santa Rosa - San Francisco Express 324977.86 \n", + "5247 172X Santa Rosa - San Francisco Express 324977.86 \n", + "5243 172X Santa Rosa - San Francisco Express 324977.86 \n", + "5242 172X Santa Rosa - San Francisco Express 324977.86 \n", + "5241 172X Santa Rosa - San Francisco Express 324977.86 \n", + "5244 172X Santa Rosa - San Francisco Express 324977.86 \n", + "5249 580 Del Norte BART Station - San Rafael 71600.72 \n", + "5250 580 Del Norte BART Station - San Rafael 71600.72 \n", + "5251 580 Del Norte BART Station - San Rafael 71600.72 \n", + "5252 580 Del Norte BART Station - San Rafael 71600.72 \n", + "5256 580X Del Norte BART Station - San Rafael Express 67803.32 \n", + "5255 580X Del Norte BART Station - San Rafael Express 67803.32 \n", + "5253 580X Del Norte BART Station - San Rafael Express 67803.32 \n", + "5254 580X Del Norte BART Station - San Rafael Express 67803.32 \n", + "5257 704 Del Norte BART Station - San Francisco 75705.56 \n", + "5258 704 Del Norte BART Station - San Francisco 75705.56 \n", + "5259 704 Del Norte BART Station - San Francisco 75705.56 \n", + "5260 704 Del Norte BART Station - San Francisco 75705.56 \n", + "5261 704 Del Norte BART Station - San Francisco 75705.56 \n", + "5262 AISF Angel Island - San Francisco Ferry 37411.10 \n", + "5263 LSSF Larkspur - San Francisco Ferry 68152.43 \n", + "5264 SSSF Sausalito - San Francisco Ferry 35761.60 \n", + "5265 TBSF Tiburon - San Francisco Ferry 35928.35 \n", + "\n", + " shn_route District highway_feet pct_route_on_hwy \n", + "5198 1 4 944979.07 0.10 \n", + "5199 101 4 1824371.76 76.00 \n", + "5200 131 4 35125.00 0.00 \n", + "5201 580 4 621177.64 0.00 \n", + "5202 37 4 225675.01 0.00 \n", + "5203 12 4 478781.00 0.10 \n", + "5204 1 4 944979.07 3.40 \n", + "5205 101 4 1824371.76 34.00 \n", + "5206 80 4 748779.57 0.10 \n", + "5207 1 4 944979.07 0.10 \n", + "5208 101 4 1824371.76 47.60 \n", + "5209 131 4 35125.00 0.10 \n", + "5210 580 4 621177.64 0.20 \n", + "5215 80 4 748779.57 0.10 \n", + "5214 580 4 621177.64 0.10 \n", + "5213 131 4 35125.00 0.10 \n", + "5212 101 4 1824371.76 56.10 \n", + "5211 1 4 944979.07 0.20 \n", + "5216 1 4 944979.07 0.60 \n", + "5217 101 4 1824371.76 64.40 \n", + "5218 131 4 35125.00 0.10 \n", + "5219 580 4 621177.64 0.10 \n", + "5220 1 4 944979.07 0.10 \n", + "5221 101 4 1824371.76 62.40 \n", + "5222 131 4 35125.00 0.10 \n", + "5223 580 4 621177.64 0.10 \n", + "5224 37 4 225675.01 0.30 \n", + "5225 80 4 748779.57 0.10 \n", + "5232 80 4 748779.57 0.10 \n", + "5230 37 4 225675.01 0.00 \n", + "5229 580 4 621177.64 0.00 \n", + "5231 116 4 265930.40 1.30 \n", + "5227 101 4 1824371.76 73.20 \n", + "5226 1 4 944979.07 0.10 \n", + "5228 131 4 35125.00 0.00 \n", + "5233 1 4 944979.07 0.10 \n", + "5234 101 4 1824371.76 78.60 \n", + "5235 131 4 35125.00 0.00 \n", + "5236 580 4 621177.64 0.00 \n", + "5237 37 4 225675.01 0.00 \n", + "5238 12 4 478781.00 1.00 \n", + "5239 116 4 265930.40 0.00 \n", + "5240 80 4 748779.57 0.00 \n", + "5248 80 4 748779.57 0.00 \n", + "5246 12 4 478781.00 1.10 \n", + "5245 37 4 225675.01 0.00 \n", + "5247 116 4 265930.40 0.10 \n", + "5243 131 4 35125.00 0.00 \n", + "5242 101 4 1824371.76 84.20 \n", + "5241 1 4 944979.07 0.10 \n", + "5244 580 4 621177.64 0.00 \n", + "5249 101 4 1824371.76 0.40 \n", + "5250 580 4 621177.64 46.00 \n", + "5251 80 4 748779.57 0.30 \n", + "5252 123 4 68502.68 1.00 \n", + "5256 123 4 68502.68 1.10 \n", + "5255 80 4 748779.57 0.40 \n", + "5253 101 4 1824371.76 5.60 \n", + "5254 580 4 621177.64 64.40 \n", + "5257 580 4 621177.64 1.60 \n", + "5258 80 4 748779.57 73.70 \n", + "5259 880 4 501522.66 2.00 \n", + "5260 13 4 84401.11 0.20 \n", + "5261 123 4 68502.68 1.20 \n", + "5262 NaN 0 NaN NaN \n", + "5263 NaN 0 NaN NaN \n", + "5264 NaN 0 NaN NaN \n", + "5265 NaN 0 NaN NaN " ] }, - "execution_count": 39, + "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "map_gdf.on_shs.value_counts()" + "intersecting.loc[intersecting.portfolio_organization_name == 'Golden Gate Bridge, Highway and Transportation District',].drop(\n", + " columns=[\"geometry\"]\n", + ").sort_values(by = [\"recent_combined_name\"])" ] }, { "cell_type": "code", - "execution_count": 40, - "id": "0e31fbcd-caf4-40b5-9c7b-a36652e4dac2", + "execution_count": 78, + "id": "53d80ab3-4a0b-4e9d-b140-9944deda1d6b", "metadata": { "tags": [] }, @@ -678,61 +3130,93 @@ { "data": { "text/plain": [ - "count 600.00\n", - "mean 0.00\n", - "std 0.00\n", - "min 0.00\n", - "25% 0.00\n", - "50% 0.00\n", - "75% 0.00\n", - "max 0.00\n", - "Name: pct_route_on_hwy, dtype: float64" + "63.1" ] }, - "execution_count": 40, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "map_gdf.loc[map_gdf.on_shs == \"N\"].pct_route_on_hwy.describe()" + "intersecting.loc[intersecting.recent_combined_name == '154 Novato - San Francisco',].pct_route_on_hwy.sum()" ] }, { "cell_type": "code", - "execution_count": 41, - "id": "d2cff860-550b-4031-9665-dd931437e853", + "execution_count": 79, + "id": "989bbf7e-1e9e-4494-9250-9daec1b585e2", "metadata": { "tags": [] }, "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", + "
portfolio_organization_namerecent_combined_nameshn_routeDistrictpct_route_on_hwy_across_districtson_shs
1179Golden Gate Bridge, Highway and Transportation District154 Novato - San Francisco101, 131, 580, 80, 1, 37463.10Y
\n", + "
" + ], "text/plain": [ - "count 2021.00\n", - "mean 20.02\n", - "std 27.36\n", - "min 0.10\n", - "25% 1.00\n", - "50% 4.40\n", - "75% 31.60\n", - "max 97.80\n", - "Name: pct_route_on_hwy, dtype: float64" + " portfolio_organization_name \\\n", + "1179 Golden Gate Bridge, Highway and Transportation District \n", + "\n", + " recent_combined_name shn_route District \\\n", + "1179 154 Novato - San Francisco 101, 131, 580, 80, 1, 37 4 \n", + "\n", + " pct_route_on_hwy_across_districts on_shs \n", + "1179 63.10 Y " ] }, - "execution_count": 41, + "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "map_gdf.loc[map_gdf.on_shs == \"Y\"].pct_route_on_hwy.describe()" + "open_data_portal_df.loc[open_data_portal_df.recent_combined_name == '154 Novato - San Francisco']" ] }, { "cell_type": "code", - "execution_count": 44, - "id": "78e83524-d55d-4029-8e45-f12cc705dfef", + "execution_count": 73, + "id": "f7e51d3b-d453-4757-933c-5b060f968d59", "metadata": { "tags": [] }, @@ -740,429 +3224,880 @@ { "data": { "text/plain": [ - "'map_gdf.loc[map_gdf.on_shs == \"Y\"].explore(\\n \"recent_combined_name\",\\n tiles=\"CartoDB positron\",\\n width=1000,\\n height=600,\\n style_kwds={\"weight\": 3},\\n legend=False,\\n)'" + "76.19999999999999" ] }, - "execution_count": 44, + "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "\"\"\"map_gdf.loc[map_gdf.on_shs == \"Y\"].explore(\n", - " \"recent_combined_name\",\n", - " tiles=\"CartoDB positron\",\n", - " width=1000,\n", - " height=600,\n", - " style_kwds={\"weight\": 3},\n", - " legend=False,\n", - ")\"\"\"" + "intersecting.loc[intersecting.recent_combined_name == '101 Santa Rosa - San Francisco',].pct_route_on_hwy.sum()" ] }, { - "cell_type": "markdown", - "id": "9189c1a5-6b68-4f2b-a975-70314c96d3e2", - "metadata": {}, + "cell_type": "code", + "execution_count": 74, + "id": "36226282-1c27-4677-8b8e-f0f60cfdc216", + "metadata": { + "tags": [] + }, + "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", + "
portfolio_organization_namerecent_combined_nameshn_routeDistrictpct_route_on_hwy_across_districtson_shs
1174Golden Gate Bridge, Highway and Transportation District101 Santa Rosa - San Francisco101, 131, 580, 1, 37, 12476.20Y
\n", + "
" + ], + "text/plain": [ + " portfolio_organization_name \\\n", + "1174 Golden Gate Bridge, Highway and Transportation District \n", + "\n", + " recent_combined_name shn_route District \\\n", + "1174 101 Santa Rosa - San Francisco 101, 131, 580, 1, 37, 12 4 \n", + "\n", + " pct_route_on_hwy_across_districts on_shs \n", + "1174 76.20 Y " + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "### Need one dataframe with one row per unique transit route + a boolean column that says \"on_shn\"" + "open_data_portal_df.loc[open_data_portal_df.recent_combined_name == '101 Santa Rosa - San Francisco']" ] }, { "cell_type": "code", - "execution_count": null, - "id": "d707ed64-1098-4c23-823a-52a922d71b80", + "execution_count": 75, + "id": "88bf23fe-0246-4201-8395-dcceee65160e", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "56.600000000000016" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "df1 = intersecting.drop(columns=[\"geometry\"]).sort_values(\n", - " by=[\"portfolio_organization_name\", \"recent_combined_name\", \"pct_route_on_hwy\"],\n", - " ascending=[True, True, False],\n", - ")" + "intersecting.loc[intersecting.recent_combined_name == '132 San Anselmo - San Francisco',].pct_route_on_hwy.sum()" ] }, { "cell_type": "code", - "execution_count": null, - "id": "f48a5343-ec0e-4f58-a577-13f7f38c7518", + "execution_count": 77, + "id": "005163fa-b264-44f3-bca0-27f393492ecb", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "df1.recent_combined_name.value_counts().head()" + "intersecting.loc[intersecting.recent_combined_name == '132 San Anselmo - San Francisco',].shn_route.nunique()" ] }, { "cell_type": "code", - "execution_count": null, - "id": "bd8e2e70-f44e-4abf-9136-c104d2d314e5", + "execution_count": 76, + "id": "ddd25ebb-c6ea-40ab-b80d-af6b50b5a8bc", "metadata": { "tags": [] }, - "outputs": [], + "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", + "
portfolio_organization_namerecent_combined_nameshn_routeDistrictpct_route_on_hwy_across_districtson_shs
1177Golden Gate Bridge, Highway and Transportation District132 San Anselmo - San Francisco101, 131, 580, 80, 1456.60Y
\n", + "
" + ], + "text/plain": [ + " portfolio_organization_name \\\n", + "1177 Golden Gate Bridge, Highway and Transportation District \n", + "\n", + " recent_combined_name shn_route District \\\n", + "1177 132 San Anselmo - San Francisco 101, 131, 580, 80, 1 4 \n", + "\n", + " pct_route_on_hwy_across_districts on_shs \n", + "1177 56.60 Y " + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "df1.loc[\n", - " df1.recent_combined_name == \"FlixBus 2015 San Diego - San Bernardino - Los Angeles\"\n", - "]" + "open_data_portal_df.loc[open_data_portal_df.recent_combined_name == '132 San Anselmo - San Francisco']" + ] + }, + { + "cell_type": "markdown", + "id": "9f9296aa-d0a9-45c3-b8a9-43872d1614dd", + "metadata": {}, + "source": [ + "## Create final dataframes for portfolio" ] }, { "cell_type": "code", - "execution_count": null, - "id": "ad98c1b0-e2d4-45be-98dc-bf23ed401af7", + "execution_count": 55, + "id": "b8bbd0d5-6d96-4e31-8c61-9ccbc1699ee3", "metadata": { "tags": [] }, "outputs": [], "source": [ - "df1.columns" + "def categorize_percentiles(df):\n", + " bins = [20, 41, 61, 81, np.inf]\n", + " labels = [\"20-40\", \"41-60\", \"61-80\", \"81-100\"]\n", + " df[\"percentile_route\"] = pd.cut(\n", + " df[\"pct_route_on_hwy\"], bins=bins, labels=labels, right=False\n", + " ).astype(str)\n", + " return df" ] }, { "cell_type": "code", - "execution_count": null, - "id": "fa0713cf-02b6-4ee9-b37e-2e1ed6ffcb9f", + "execution_count": 56, + "id": "31c72996-a662-4278-9bad-f71f9d4c440e", "metadata": { "tags": [] }, "outputs": [], "source": [ - "df1 = (\n", - " df1.groupby(\n", - " [\n", - " \"portfolio_organization_name\",\n", - " \"recent_combined_name\",\n", - " \"schedule_gtfs_dataset_key\",\n", - " ]\n", + "def final_transit_route_shs_outputs(\n", + " intersecting_gdf: gpd.GeoDataFrame,\n", + " open_data_df: pd.DataFrame,\n", + " pct_route_intersection: int,\n", + " district: str,\n", + "):\n", + " \"\"\"\n", + " Take the dataframes from prep_open_data_portal and routes_shn_intersection.\n", + " Prepare them for display on the GTFS Caltrans District Digest.\n", + "\n", + " intersecting_gdf: geodataframe created by\n", + " open_data_df: dataframe created by\n", + " pct_route_intersection: cutoff of the % of the transit route intersecting with the SHN\n", + " district: the Caltrans district we are interested in.\n", + " \"\"\"\n", + " # Filter out for any pct_route_on_hwy that we deem too low & for the relevant district.\n", + " open_data_df = open_data_df.loc[\n", + " (open_data_df.pct_route_on_hwy_across_districts > pct_route_intersection)\n", + " & (open_data_df.District.str.contains(district))\n", + " ]\n", + " # intersecting_gdf.District = intersecting_gdf.District\n", + " intersecting_gdf = intersecting_gdf.loc[\n", + " intersecting_gdf.District.astype(str).str.contains(district)\n", + " ]\n", + "\n", + " # Join back to get the original transit route geometries and the names of the\n", + " # state highways these routes intersect with. This gdf will be used to\n", + " # display a map.\n", + " map_gdf = pd.merge(\n", + " intersecting_gdf[\n", + " [\"portfolio_organization_name\", \"recent_combined_name\", \"geometry\"]\n", + " ].drop_duplicates(),\n", + " open_data_df,\n", + " on=[\"portfolio_organization_name\", \"recent_combined_name\"],\n", " )\n", - " .agg({\"pct_route_on_hwy\": \"sum\"})\n", - " .reset_index()\n", - ")" + "\n", + " # Add column for color scale when mapping\n", + " # map_gdf = categorize_percentiles(map_gdf)\n", + "\n", + " # We want a text table to display.\n", + " # Have to rejoin and to find only the SHN routes that are in the district\n", + " # we are interested in.\n", + " text_table_df = pd.merge(\n", + " intersecting_gdf[\n", + " [\n", + " \"portfolio_organization_name\",\n", + " \"recent_combined_name\",\n", + " \"shn_route\",\n", + " \"District\",\n", + " ]\n", + " ],\n", + " open_data_df[\n", + " [\n", + " \"portfolio_organization_name\",\n", + " \"recent_combined_name\",\n", + " \"pct_route_on_hwy_across_districts\",\n", + " ]\n", + " ],\n", + " on=[\"portfolio_organization_name\", \"recent_combined_name\"],\n", + " )\n", + "\n", + " # Now we have to aggregate again so each route will only have one row with the\n", + " # district and SHN route info delinated by commas if there are multiple values.\n", + " text_table = group_route_district(text_table_df, \"max\")\n", + "\n", + " # Rename for clarity\n", + " text_table = text_table.rename(\n", + " columns={\n", + " \"shn_route\": f\"shn_routes_in_d_{district}\",\n", + " }\n", + " )\n", + "\n", + " return map_gdf, text_table" + ] + }, + { + "cell_type": "markdown", + "id": "b3454e29-3b17-49c6-b692-5467a1211058", + "metadata": {}, + "source": [ + "### Example using 100 Bakersfield - Lancaster which crosses D6, D7, D9" ] }, { "cell_type": "code", - "execution_count": null, - "id": "878224eb-d8e0-4eba-85b5-d61d1434e698", + "execution_count": 57, + "id": "9ce2810a-c58d-4f0e-8a06-d10e39cac140", "metadata": { "tags": [] }, "outputs": [], "source": [ - "df1.pct_route_on_hwy.describe()" + "map_gdf_d7, text_df_d7 = final_transit_route_shs_outputs(\n", + " intersecting, open_data_portal_df, 20, \"7\"\n", + ")" ] }, { "cell_type": "code", - "execution_count": null, - "id": "90d16bf5-0e86-4b27-b281-f64b536993da", + "execution_count": 58, + "id": "62a9b9ef-c6a9-4fd1-be7e-fdf826276600", "metadata": { "tags": [] }, "outputs": [], "source": [ - "len(df1)" + "map_gdf_d9, text_df_d9 = final_transit_route_shs_outputs(\n", + " intersecting, open_data_portal_df, 20, \"9\"\n", + ")" ] }, { "cell_type": "code", - "execution_count": null, - "id": "5083f717-caba-4a87-ba65-d79b0794dcd5", + "execution_count": 59, + "id": "86ab3bed-f850-4509-8746-8f23e867bfd8", "metadata": { "tags": [] }, "outputs": [], "source": [ - "df1 = create_on_shs_column(df1)" + "map_gdf_d6, text_df_d6 = final_transit_route_shs_outputs(\n", + " intersecting, open_data_portal_df, 20, \"6\"\n", + ")" ] }, { "cell_type": "code", - "execution_count": null, - "id": "d0e3accc-1c06-42f0-9397-1aa7b2c3e39b", + "execution_count": 60, + "id": "2e44da32-07ba-45bb-b675-3c06b69ca4d4", "metadata": { "tags": [] }, - "outputs": [], + "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", + "
portfolio_organization_namerecent_combined_nameshn_routes_in_d_7Districtpct_route_on_hwy_across_districts
75Kern County100 Bakersfield - Lancaster14, 138775.40
\n", + "
" + ], + "text/plain": [ + " portfolio_organization_name recent_combined_name shn_routes_in_d_7 \\\n", + "75 Kern County 100 Bakersfield - Lancaster 14, 138 \n", + "\n", + " District pct_route_on_hwy_across_districts \n", + "75 7 75.40 " + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "df1.sample(3)" + "text_df_d7.loc[text_df_d7.recent_combined_name == \"100 Bakersfield - Lancaster\"]" ] }, { "cell_type": "code", - "execution_count": null, - "id": "fb004cc0-5d4d-49d2-859c-e6caef5e09f4", + "execution_count": 61, + "id": "4dd16b83-03f7-436b-a4b5-a17da53eb255", "metadata": { "tags": [] }, - "outputs": [], + "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", + "
portfolio_organization_namerecent_combined_nameshn_routes_in_d_7Districtpct_route_on_hwy_across_districts
3Antelope Valley Transit AuthorityRoute 785101, 14, 118, 210, 405, 134, 2, 5, 170, 110782.70
\n", + "
" + ], + "text/plain": [ + " portfolio_organization_name recent_combined_name \\\n", + "3 Antelope Valley Transit Authority Route 785 \n", + "\n", + " shn_routes_in_d_7 District \\\n", + "3 101, 14, 118, 210, 405, 134, 2, 5, 170, 110 7 \n", + "\n", + " pct_route_on_hwy_across_districts \n", + "3 82.70 " + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "df1.on_shs_y_n.value_counts()" + "text_df_d7.loc[text_df_d7.recent_combined_name == \"Route 785\"]" ] }, { "cell_type": "code", - "execution_count": null, - "id": "2c8e1644-64bd-4651-adea-76a68b858824", + "execution_count": 62, + "id": "71a3d332-54b7-41cb-ba6f-840cf615972c", "metadata": { "tags": [] }, - "outputs": [], + "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", + "
portfolio_organization_namerecent_combined_nameshn_routes_in_d_6Districtpct_route_on_hwy_across_districts
21Kern County100 Bakersfield - Lancaster184, 204, 178, 223, 58675.40
\n", + "
" + ], + "text/plain": [ + " portfolio_organization_name recent_combined_name \\\n", + "21 Kern County 100 Bakersfield - Lancaster \n", + "\n", + " shn_routes_in_d_6 District pct_route_on_hwy_across_districts \n", + "21 184, 204, 178, 223, 58 6 75.40 " + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Join back for geo\n", - "final_df1 = pd.merge(\n", - " intersecting[\n", - " [\"schedule_gtfs_dataset_key\", \"recent_combined_name\", \"geometry\"]\n", - " ].drop_duplicates(),\n", - " df1,\n", - " on=[\"schedule_gtfs_dataset_key\", \"recent_combined_name\"],\n", - ")" + "text_df_d6.loc[text_df_d6.recent_combined_name == \"100 Bakersfield - Lancaster\"]" ] }, { "cell_type": "code", - "execution_count": null, - "id": "e231fe14-c84c-4463-9fb0-1b217ac5ff55", + "execution_count": 63, + "id": "c9cca9da-a6f4-43a0-be1f-68e1e29e050b", "metadata": { "tags": [] }, - "outputs": [], + "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", + "
portfolio_organization_namerecent_combined_nameshn_routes_in_d_9Districtpct_route_on_hwy_across_districts
8Kern County100 Bakersfield - Lancaster202, 14, 58975.40
\n", + "
" + ], + "text/plain": [ + " portfolio_organization_name recent_combined_name shn_routes_in_d_9 \\\n", + "8 Kern County 100 Bakersfield - Lancaster 202, 14, 58 \n", + "\n", + " District pct_route_on_hwy_across_districts \n", + "8 9 75.40 " + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "text_df_d9.loc[text_df_d9.recent_combined_name == \"100 Bakersfield - Lancaster\"]" + ] + }, + { + "cell_type": "markdown", + "id": "b11f2a17-cbfd-43b1-9f52-381aa7cac8d7", + "metadata": {}, + "source": [ + "## Sample Map\n", + "* This will be displayed by each Caltrans District as opposed to this sample which shows all the routes across the state that touch a state highway." + ] + }, + { + "cell_type": "markdown", + "id": "fee82333-2d3d-420c-ba47-b424634dc5d0", + "metadata": {}, "source": [ - "final_df1.on_shs_y_n.value_counts()" + "* Read in the buffered SHN file and dissolve it again so it's only one row, since we don't care about each individual state route.\n", + "* Amanda, note to self: should save this out to GCS because there's no point in dissolving over & over again\n", + "* Bug in geopandas [documented here](https://github.com/geopandas/geopandas/issues/3194), you can't specify a column and color." ] }, { "cell_type": "code", "execution_count": null, - "id": "bcce6789-14e7-41f6-860a-a9d61597c281", + "id": "1fee56ee-2a9a-4ecf-a471-ebf7412c5de4", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# Read in buffered shn here or re buffer\n", - "GCS_FILE_PATH = \"gs://calitp-analytics-data/data-analyses/state_highway_network/\"\n", - "HWY_FILE = f\"{GCS_FILE_PATH}shn_buffered_{SHN_HWY_BUFFER_FEET}_ft.parquet\"" + "def dissolve_buffered_for_map(buffer_amount: str) -> gpd.GeoDataFrame:\n", + " GCS_FILE_PATH = \"gs://calitp-analytics-data/data-analyses/state_highway_network/\"\n", + " # Read in buffered shn here\n", + " HWY_FILE = (\n", + " f\"{GCS_FILE_PATH}shn_buffered_{buffer_amount}_ft_ct_district_route.parquet\"\n", + " )\n", + " gdf = gpd.read_parquet(HWY_FILE, storage_options={\"token\": credentials.token})\n", + "\n", + " # Dissolve by district\n", + " gdf2 = gdf.dissolve(\"District\").reset_index()[[\"geometry\", \"District\", \"shn_route\"]]\n", + "\n", + " # Save\n", + " gdf2.to_parquet(\n", + " f\"{GCS_FILE_PATH}shn_buffered_{buffer_amount}_gtfs_digest.parquet\",\n", + " filesystem=fs,\n", + " )" ] }, { "cell_type": "code", "execution_count": null, - "id": "32dacb1a-4078-4c25-882f-ff56496cfee3", + "id": "9b0224b6-fbec-4ece-9105-7c0ff4659b60", "metadata": { "tags": [] }, "outputs": [], "source": [ - "shn_dissolved = gpd.read_parquet(HWY_FILE, storage_options={\"token\": credentials.token})" + "gtfs_digest_shn = dissolve_buffered_for_map(SHN_HWY_BUFFER_FEET)" ] }, { "cell_type": "code", "execution_count": null, - "id": "cdd1099a-c631-4280-9c65-e9b0ceaad9d1", + "id": "84da58a0-5360-47f0-904f-84bb9f6eba69", "metadata": { "tags": [] }, "outputs": [], "source": [ - "len(shn_dissolved)" + "GCS_FILE_PATH = \"gs://calitp-analytics-data/data-analyses/state_highway_network/\"" ] }, { "cell_type": "code", "execution_count": null, - "id": "1803ecff-4e3d-4c30-b756-bea973d45fe7", + "id": "cfb4fbe1-abf0-47f7-84ad-715272cd07fa", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# shn_dissolved2 = shn_dissolved.dissolve()" + "shn_gdf = gpd.read_parquet(\n", + " f\"{GCS_FILE_PATH}shn_buffered_{SHN_HWY_BUFFER_FEET}_gtfs_digest.parquet\",\n", + " storage_options={\"token\": credentials.token},\n", + ")" ] }, { "cell_type": "code", "execution_count": null, - "id": "344d2399-d50e-4968-a15f-d547d171ebe7", + "id": "120b5b9a-a74d-4d5c-b729-867b0699d7f9", "metadata": { "tags": [] }, "outputs": [], "source": [ - "len(shn_dissolved2)" + "shn_gdf.columns" ] }, { "cell_type": "code", "execution_count": null, - "id": "fc1011ee-f1a7-409b-a220-65fac76368af", + "id": "eefd3209-e7e8-462c-b815-eb9413e09eba", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# shn_dissolved2.explore()" + "shn_gdf.District.unique()" ] }, { "cell_type": "code", "execution_count": null, - "id": "061158b7-c40c-453b-b1d5-3c8e103e909c", + "id": "bf641b85-801b-45fe-8702-44758f1fdabe", "metadata": { "tags": [] }, "outputs": [], "source": [ - "\"\"\" final_df1.loc[final_df1.on_shs_y_n == \"Y\"].explore(\n", - " cmap=\"Spectral\",\n", - " tiles=\"CartoDB positron\",\n", - " width=500,\n", - " height=300,\n", - " style_kwds={\"weight\": 3},\n", - " legend=False, \n", - " )\"\"\"" - ] - }, - { - "cell_type": "markdown", - "id": "e3b19d58-ce5d-4576-bfc2-d51b5a809ecc", - "metadata": {}, - "source": [ - "### Dataframe that combines all the State Highway routes a transit route crosses into a text table for display" + "\"\"\" m = shn_gdf.loc[shn_gdf.District == 7].explore(\n", + " height=500,\n", + " width=1000,\n", + " style_kwds={\"color\": \"#9DA4A6\", \"weight\": 6, \"opacity\": 0.5},\n", + " tiles=\"CartoDB positron\",\n", + " name=\"shs\",\n", + ")\"\"\"" ] }, { "cell_type": "code", "execution_count": null, - "id": "f0868168-a197-4fe0-adc6-980a5a43208a", + "id": "fe5cff84-6043-4299-92e8-e04ff05eb360", "metadata": { "tags": [] }, "outputs": [], "source": [ - "intersecting.columns" + "m" ] }, { "cell_type": "code", "execution_count": null, - "id": "2b09f297-1f1a-4fc1-b997-4392a31cb873", + "id": "61725848-1990-477b-bdfc-d8f8b29a1ae0", "metadata": { "tags": [] }, "outputs": [], "source": [ - "intersecting.shn_route = intersecting.shn_route.fillna(\"Doesn't intersect w/ SHN\")" + "cmap_colors = [\n", + " \"#93c3db\",\n", + " \"#144c87\",\n", + " \"#8c1024\",\n", + " \"#e4846c\",\n", + "]" ] }, { "cell_type": "code", "execution_count": null, - "id": "dd81ea01-e974-419a-babc-87781ba30fd0", + "id": "42783e5e-04d6-45d9-ae05-5cf8a0e261a6", "metadata": { "tags": [] }, "outputs": [], "source": [ - "df1.head(3)" + "cmap_colors_continuous = [\n", + " \"#93c3db\",\n", + " \"#82b4d1\",\n", + " \"#71a5c7\",\n", + " \"#6096bd\",\n", + " \"#4f87b3\",\n", + " \"#3e78a9\",\n", + " \"#2d699f\",\n", + " \"#1c5a95\",\n", + " \"#0b4b8b\",\n", + " \"#003c81\",\n", + "]" ] }, { "cell_type": "code", "execution_count": null, - "id": "8183fbaa-57cf-4622-ac83-4b925e103f3b", + "id": "f11c53c3-ed8b-4276-88d8-b59dd23d5524", "metadata": { "tags": [] }, "outputs": [], "source": [ - "agg1 = (\n", - " (\n", - " intersecting.groupby(\n", - " [\n", - " \"portfolio_organization_name\",\n", - " \"recent_combined_name\",\n", - " \"schedule_gtfs_dataset_key\",\n", - " ],\n", - " as_index=False,\n", - " )\n", - " )[\"shn_route\"]\n", - " .agg(lambda x: \", \".join(set(x.astype(str))))\n", - " .reset_index(drop=True)\n", - ")" + "map_gdf_d7.columns" ] }, { "cell_type": "code", "execution_count": null, - "id": "2550bdb2-9138-4fa0-9d8f-2f0191b0a70e", + "id": "94249045-af30-4fa0-b5d3-c795962c70d3", "metadata": { - "scrolled": true, "tags": [] }, "outputs": [], "source": [ - "# agg1.shn_route.value_counts()" + "# map_gdf_d7.explore(\n", + "# \"percentile_route\", m=m, categorical=True, cmap=cmap_colors, legend=True\n", + "# )" ] }, { "cell_type": "code", "execution_count": null, - "id": "b08d65c7-a729-4eac-9a96-a71fa669073c", + "id": "1170ec19-d69c-457e-afd7-8aa8c866d43d", "metadata": { "tags": [] }, "outputs": [], "source": [ - "agg1.head()" + "# map_gdf_d7.explore(\"pct_route_on_hwy_across_districts\", m=m, cmap= 'Blues', legend = True)" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "5d12f49e-974c-4987-a2c5-6ac89f41f846", + "cell_type": "markdown", + "id": "cfaab31a-f770-4c72-bedc-5e6201cdfabe", "metadata": { "tags": [] }, - "outputs": [], "source": [ - "text_table = pd.merge(\n", - " df1,\n", - " agg1,\n", - " on=[\n", - " \"portfolio_organization_name\",\n", - " \"recent_combined_name\",\n", - " \"schedule_gtfs_dataset_key\",\n", - " ],\n", - ")" + "### Sample Text Table" ] }, { "cell_type": "code", "execution_count": null, - "id": "25b00cd2-a428-4742-b2d7-b68285109a4d", + "id": "c668f18c-f69a-458c-bbdf-9f4816236d44", "metadata": { + "scrolled": true, "tags": [] }, "outputs": [], "source": [ - "len(text_table), len(df1), len(agg1)" + "text_df_d7.sort_values(by=[\"pct_route_on_hwy_across_districts\"], ascending=False)" ] }, { "cell_type": "code", "execution_count": null, - "id": "127a957d-b13a-4da0-ac82-600c5e0ec29f", - "metadata": { - "tags": [] - }, + "id": "72768925-ae44-49c3-9794-8f0a2fdf21cb", + "metadata": {}, "outputs": [], - "source": [ - "text_table.head()" - ] + "source": [] } ], "metadata": { diff --git a/gtfs_digest/24_correct_crosswalk.ipynb b/gtfs_digest/24_correct_crosswalk.ipynb new file mode 100644 index 0000000000..f979c42fbd --- /dev/null +++ b/gtfs_digest/24_correct_crosswalk.ipynb @@ -0,0 +1,7644 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0a7220c0-eb1c-468c-a2d6-b0a7e765f66e", + "metadata": {}, + "source": [ + "but once you said you didn't check the clean_route_names file...that's when i looked, and i saw vctc in the list of time_series_utils. if you had checked it, and truly there were multiple route_ids same route_short/long_name, then i would say, yes, aggregate. but once i saw that they had different route_short/long_name, the solution is actually a lot simpler! just remove vctc from the list!\n", + " \n", + "so actually, your 2 items to make sure you got it correctly:\n", + "remove organization_name from the crosswalk function in merge_data. \n", + "remove vctc + any operator in that list where the time_series_utils pipe should not be used. if you look at the markdown table in the github issue (it's not a 1:m issue, it's a VCTC routes are getting labeled incorrectly), the general rule is short+long name, but the exception is long name only. so vctc should revert back to the rule. remove other operators where doing long name only is giving undesired names (based on the notebook's output i gave you\n", + "can you show me the branch after you do these 2 things? these should clear up the majority of issues. \n", + " \n", + "this has happened a couple times now, so when you have a question around a column, follow these steps to debug:\n", + "column is (recent_combined_name)\n", + "find which dataset brings that in (clean route names)\n", + "check what is happening before merging it in, after merging it in (this is a 1:1 merge, so nothing would show up except extra columns appeared)\n", + "look at the dataset itself (all the columns for route_id / short name / long name / combined name are here, as well as the \"visualization\" columns, recent_combined_name, recent_route_name). \n", + "ask why the column you are using isn't behaving. there's a function that applies it. look at the function. time_series_utils. turns out it carves out the exceptions to the rule, and uses route_long_name only sometimes, and VCTC (problem operator) is in this list! if you don't apply that function to VCTC, does it look better? YES!\n", + " \n", + "i think most times, you'll get your questions answered if you look this way. i always assume you do these things, so if something's not working, then i'll give you additional suggestions. but if you havent' done this (simplier!) then additional suggestions are actually moot\n", + " \n", + "so do not(!) do the aggregation to recent_combined_name. nope nope nope. the answer was much simpler.\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "ea27c5ab-8392-4765-8148-18bce48f7126", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import altair as alt\n", + "import calitp_data_analysis.magics\n", + "import geopandas as gpd\n", + "import google.auth\n", + "import pandas as pd\n", + "import yaml\n", + "from IPython.display import HTML, Image, Markdown, display, display_html\n", + "from omegaconf import OmegaConf\n", + "from segment_speed_utils import gtfs_schedule_wrangling, time_series_utils\n", + "from shared_utils import (\n", + " catalog_utils,\n", + " gtfs_utils_v2,\n", + " portfolio_utils,\n", + " publish_utils,\n", + " rt_dates,\n", + " rt_utils,\n", + ")\n", + "from update_vars import GTFS_DATA_DICT, RT_SCHED_GCS, SCHED_GCS, SEGMENT_GCS\n", + "\n", + "readable_dict = OmegaConf.load(\"readable2.yml\")\n", + "credentials, project = google.auth.default()\n", + "\n", + "import _report_route_dir_visuals\n", + "import merge_data" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "98eb24df-5ceb-4d92-879e-4eafab6c3938", + "metadata": {}, + "outputs": [], + "source": [ + "pd.options.display.max_columns = 100\n", + "pd.options.display.float_format = \"{:.2f}\".format\n", + "pd.set_option(\"display.max_rows\", None)\n", + "pd.set_option(\"display.max_colwidth\", None)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "15335106-fd89-40aa-8012-4d917293db1c", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# portfolio_name = \"City and County of San Francisco\"\n", + "portfolio_name = \"Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "3550f3cb-36fc-443e-9157-e4e5ff3c49e8", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "date_list = rt_dates.y2025_dates" + ] + }, + { + "cell_type": "markdown", + "id": "f34ac019-d424-4c95-890c-f24e5e28f9c2", + "metadata": {}, + "source": [ + "## `concatenate_crosswalk_organization` in `merge_data`" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "e47a5a06-f984-40a3-ba2a-2922f65b47a0", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "FILE = GTFS_DATA_DICT.schedule_tables.gtfs_key_crosswalk\n", + "\n", + "crosswalk_cols = [\n", + " \"schedule_gtfs_dataset_key\",\n", + " \"name\",\n", + " \"schedule_source_record_id\",\n", + " \"base64_url\",\n", + " \"organization_source_record_id\",\n", + " \"organization_name\",\n", + " \"caltrans_district\",\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "68dab544-18b2-41a4-8c09-c5a1d4b9fb21", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "df = time_series_utils.concatenate_datasets_across_dates(\n", + " SCHED_GCS, FILE, date_list, data_type=\"df\", columns=crosswalk_cols\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "efed2684-3b3f-4491-9a17-ca1f39f704d7", + "metadata": { + "scrolled": true, + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
nameorganization_name
162VCTC GMV ScheduleCity of Camarillo
163VCTC GMV ScheduleGold Coast Transit District
164VCTC GMV ScheduleCity of Moorpark
165VCTC GMV ScheduleCity of Ojai
166VCTC GMV ScheduleCity of Simi Valley
167VCTC GMV ScheduleCity of Thousand Oaks
168VCTC GMV ScheduleVentura County Transportation Commission
162VCTC GMV ScheduleCity of Camarillo
163VCTC GMV ScheduleGold Coast Transit District
164VCTC GMV ScheduleCity of Moorpark
165VCTC GMV ScheduleCity of Ojai
166VCTC GMV ScheduleCity of Simi Valley
167VCTC GMV ScheduleCity of Thousand Oaks
168VCTC GMV ScheduleVentura County Transportation Commission
159VCTC GMV ScheduleCity of Thousand Oaks
160VCTC GMV ScheduleCity of Camarillo
161VCTC GMV ScheduleGold Coast Transit District
162VCTC GMV ScheduleCity of Moorpark
163VCTC GMV ScheduleCity of Ojai
164VCTC GMV ScheduleCity of Simi Valley
165VCTC GMV ScheduleVentura County Transportation Commission
162VCTC GMV ScheduleVentura County Transportation Commission
163VCTC GMV ScheduleCity of Thousand Oaks
164VCTC GMV ScheduleCity of Camarillo
165VCTC GMV ScheduleGold Coast Transit District
166VCTC GMV ScheduleCity of Moorpark
167VCTC GMV ScheduleCity of Ojai
168VCTC GMV ScheduleCity of Simi Valley
158VCTC GMV ScheduleVentura County Transportation Commission
159VCTC GMV ScheduleCity of Thousand Oaks
160VCTC GMV ScheduleCity of Camarillo
161VCTC GMV ScheduleGold Coast Transit District
162VCTC GMV ScheduleCity of Moorpark
163VCTC GMV ScheduleCity of Ojai
164VCTC GMV ScheduleCity of Simi Valley
\n", + "
" + ], + "text/plain": [ + " name organization_name\n", + "162 VCTC GMV Schedule City of Camarillo\n", + "163 VCTC GMV Schedule Gold Coast Transit District\n", + "164 VCTC GMV Schedule City of Moorpark\n", + "165 VCTC GMV Schedule City of Ojai\n", + "166 VCTC GMV Schedule City of Simi Valley\n", + "167 VCTC GMV Schedule City of Thousand Oaks\n", + "168 VCTC GMV Schedule Ventura County Transportation Commission\n", + "162 VCTC GMV Schedule City of Camarillo\n", + "163 VCTC GMV Schedule Gold Coast Transit District\n", + "164 VCTC GMV Schedule City of Moorpark\n", + "165 VCTC GMV Schedule City of Ojai\n", + "166 VCTC GMV Schedule City of Simi Valley\n", + "167 VCTC GMV Schedule City of Thousand Oaks\n", + "168 VCTC GMV Schedule Ventura County Transportation Commission\n", + "159 VCTC GMV Schedule City of Thousand Oaks\n", + "160 VCTC GMV Schedule City of Camarillo\n", + "161 VCTC GMV Schedule Gold Coast Transit District\n", + "162 VCTC GMV Schedule City of Moorpark\n", + "163 VCTC GMV Schedule City of Ojai\n", + "164 VCTC GMV Schedule City of Simi Valley\n", + "165 VCTC GMV Schedule Ventura County Transportation Commission\n", + "162 VCTC GMV Schedule Ventura County Transportation Commission\n", + "163 VCTC GMV Schedule City of Thousand Oaks\n", + "164 VCTC GMV Schedule City of Camarillo\n", + "165 VCTC GMV Schedule Gold Coast Transit District\n", + "166 VCTC GMV Schedule City of Moorpark\n", + "167 VCTC GMV Schedule City of Ojai\n", + "168 VCTC GMV Schedule City of Simi Valley\n", + "158 VCTC GMV Schedule Ventura County Transportation Commission\n", + "159 VCTC GMV Schedule City of Thousand Oaks\n", + "160 VCTC GMV Schedule City of Camarillo\n", + "161 VCTC GMV Schedule Gold Coast Transit District\n", + "162 VCTC GMV Schedule City of Moorpark\n", + "163 VCTC GMV Schedule City of Ojai\n", + "164 VCTC GMV Schedule City of Simi Valley" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[df.name.str.contains(\"VCTC\")][[\"name\",\"organization_name\"]]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e2ae131e-9b86-423c-878d-73e80dc1912a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "with open(\"../_shared_utils/shared_utils/portfolio_organization_name.yml\", \"r\") as f:\n", + " PORTFOLIO_ORGANIZATIONS_DICT = yaml.safe_load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "78487a16-5ddb-4bb2-8222-f1b8b07a7169", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "df = df.assign(\n", + " caltrans_district=df.caltrans_district.map(portfolio_utils.CALTRANS_DISTRICT_DICT)\n", + ").pipe(\n", + " portfolio_utils.standardize_portfolio_organization_names,\n", + " PORTFOLIO_ORGANIZATIONS_DICT,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "ccade4de-aa73-4e0f-9bed-eefda4b997fa", + "metadata": { + "tags": [] + }, + "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", + "
schedule_gtfs_dataset_keynameschedule_source_record_idbase64_urlorganization_source_record_idorganization_namecaltrans_districtservice_dateportfolio_organization_name
0ff1bc5dde661d62c877165421e9ca257Santa Ynez Mecatran SchedulerecuWhPXfxMatv6rLaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==reckp33bhAuZlmO1MCity of Solvang05 - San Luis Obispo / Santa Barbara2025-01-15City of Solvang
1f4c3ea214214ee0d96f7646b3e9d69dcSLO Peak Transit Schedulerec0EeeizKvsEDfRQaHR0cDovL2RhdGEucGVha3RyYW5zaXQuY29tL3N0YXRpY2d0ZnMvMS9ndGZzLnppcA==recMM99msxjmc6PPvCity of San Luis Obispo05 - San Luis Obispo / Santa Barbara2025-01-15San Luis Obispo Regional Transit Authority
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key name \\\n", + "0 ff1bc5dde661d62c877165421e9ca257 Santa Ynez Mecatran Schedule \n", + "1 f4c3ea214214ee0d96f7646b3e9d69dc SLO Peak Transit Schedule \n", + "\n", + " schedule_source_record_id \\\n", + "0 recuWhPXfxMatv6rL \n", + "1 rec0EeeizKvsEDfRQ \n", + "\n", + " base64_url \\\n", + "0 aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA== \n", + "1 aHR0cDovL2RhdGEucGVha3RyYW5zaXQuY29tL3N0YXRpY2d0ZnMvMS9ndGZzLnppcA== \n", + "\n", + " organization_source_record_id organization_name \\\n", + "0 reckp33bhAuZlmO1M City of Solvang \n", + "1 recMM99msxjmc6PPv City of San Luis Obispo \n", + "\n", + " caltrans_district service_date \\\n", + "0 05 - San Luis Obispo / Santa Barbara 2025-01-15 \n", + "1 05 - San Luis Obispo / Santa Barbara 2025-01-15 \n", + "\n", + " portfolio_organization_name \n", + "0 City of Solvang \n", + "1 San Luis Obispo Regional Transit Authority " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "c24c2442-e501-48c2-b153-3c4809c0f923", + "metadata": { + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
schedule_gtfs_dataset_keynameschedule_source_record_idbase64_urlorganization_source_record_idorganization_namecaltrans_districtservice_dateportfolio_organization_name
1621770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecD4Vzt0EDC3VY7ICity of Camarillo07 - Los Angeles / Ventura2025-01-15Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1631770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecS7GnKTcQVX20HEGold Coast Transit District07 - Los Angeles / Ventura2025-01-15Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1641770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecojKzQsBzE1hjVuCity of Moorpark07 - Los Angeles / Ventura2025-01-15Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1651770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzreckQmUdXUzHFmlVfCity of Ojai07 - Los Angeles / Ventura2025-01-15Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1661770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrec1ErIn9gG1Isk5WCity of Simi Valley07 - Los Angeles / Ventura2025-01-15Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1671770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecPJULRJk1Yn824NCity of Thousand Oaks07 - Los Angeles / Ventura2025-01-15Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1681770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrec7EN71rsZxDFxZdVentura County Transportation Commission07 - Los Angeles / Ventura2025-01-15Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1621770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecD4Vzt0EDC3VY7ICity of Camarillo07 - Los Angeles / Ventura2025-02-12Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1631770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecS7GnKTcQVX20HEGold Coast Transit District07 - Los Angeles / Ventura2025-02-12Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1641770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecojKzQsBzE1hjVuCity of Moorpark07 - Los Angeles / Ventura2025-02-12Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1651770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzreckQmUdXUzHFmlVfCity of Ojai07 - Los Angeles / Ventura2025-02-12Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1661770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrec1ErIn9gG1Isk5WCity of Simi Valley07 - Los Angeles / Ventura2025-02-12Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1671770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecPJULRJk1Yn824NCity of Thousand Oaks07 - Los Angeles / Ventura2025-02-12Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1681770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrec7EN71rsZxDFxZdVentura County Transportation Commission07 - Los Angeles / Ventura2025-02-12Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1591770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecPJULRJk1Yn824NCity of Thousand Oaks07 - Los Angeles / Ventura2025-03-12Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1601770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecD4Vzt0EDC3VY7ICity of Camarillo07 - Los Angeles / Ventura2025-03-12Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1611770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecS7GnKTcQVX20HEGold Coast Transit District07 - Los Angeles / Ventura2025-03-12Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1621770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecojKzQsBzE1hjVuCity of Moorpark07 - Los Angeles / Ventura2025-03-12Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1631770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzreckQmUdXUzHFmlVfCity of Ojai07 - Los Angeles / Ventura2025-03-12Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1641770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrec1ErIn9gG1Isk5WCity of Simi Valley07 - Los Angeles / Ventura2025-03-12Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1651770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrec7EN71rsZxDFxZdVentura County Transportation Commission07 - Los Angeles / Ventura2025-03-12Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1621770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrec7EN71rsZxDFxZdVentura County Transportation Commission07 - Los Angeles / Ventura2025-04-16Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1631770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecPJULRJk1Yn824NCity of Thousand Oaks07 - Los Angeles / Ventura2025-04-16Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1641770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecD4Vzt0EDC3VY7ICity of Camarillo07 - Los Angeles / Ventura2025-04-16Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1651770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecS7GnKTcQVX20HEGold Coast Transit District07 - Los Angeles / Ventura2025-04-16Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1661770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecojKzQsBzE1hjVuCity of Moorpark07 - Los Angeles / Ventura2025-04-16Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1671770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzreckQmUdXUzHFmlVfCity of Ojai07 - Los Angeles / Ventura2025-04-16Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1681770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrec1ErIn9gG1Isk5WCity of Simi Valley07 - Los Angeles / Ventura2025-04-16Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1581770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrec7EN71rsZxDFxZdVentura County Transportation Commission07 - Los Angeles / Ventura2025-05-14Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1591770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecPJULRJk1Yn824NCity of Thousand Oaks07 - Los Angeles / Ventura2025-05-14Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1601770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecD4Vzt0EDC3VY7ICity of Camarillo07 - Los Angeles / Ventura2025-05-14Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1611770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecS7GnKTcQVX20HEGold Coast Transit District07 - Los Angeles / Ventura2025-05-14Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1621770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrecojKzQsBzE1hjVuCity of Moorpark07 - Los Angeles / Ventura2025-05-14Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1631770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzreckQmUdXUzHFmlVfCity of Ojai07 - Los Angeles / Ventura2025-05-14Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1641770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzrec1ErIn9gG1Isk5WCity of Simi Valley07 - Los Angeles / Ventura2025-05-14Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key name \\\n", + "162 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "163 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "164 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "165 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "166 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "167 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "168 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "162 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "163 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "164 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "165 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "166 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "167 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "168 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "159 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "160 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "161 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "162 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "163 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "164 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "165 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "162 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "163 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "164 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "165 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "166 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "167 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "168 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "158 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "159 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "160 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "161 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "162 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "163 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "164 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", + "\n", + " schedule_source_record_id base64_url \\\n", + "162 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "163 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "164 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "165 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "166 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "167 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "168 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "162 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "163 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "164 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "165 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "166 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "167 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "168 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "159 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "160 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "161 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "162 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "163 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "164 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "165 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "162 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "163 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "164 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "165 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "166 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "167 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "168 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "158 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "159 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "160 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "161 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "162 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "163 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "164 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "\n", + " organization_source_record_id organization_name \\\n", + "162 recD4Vzt0EDC3VY7I City of Camarillo \n", + "163 recS7GnKTcQVX20HE Gold Coast Transit District \n", + "164 recojKzQsBzE1hjVu City of Moorpark \n", + "165 reckQmUdXUzHFmlVf City of Ojai \n", + "166 rec1ErIn9gG1Isk5W City of Simi Valley \n", + "167 recPJULRJk1Yn824N City of Thousand Oaks \n", + "168 rec7EN71rsZxDFxZd Ventura County Transportation Commission \n", + "162 recD4Vzt0EDC3VY7I City of Camarillo \n", + "163 recS7GnKTcQVX20HE Gold Coast Transit District \n", + "164 recojKzQsBzE1hjVu City of Moorpark \n", + "165 reckQmUdXUzHFmlVf City of Ojai \n", + "166 rec1ErIn9gG1Isk5W City of Simi Valley \n", + "167 recPJULRJk1Yn824N City of Thousand Oaks \n", + "168 rec7EN71rsZxDFxZd Ventura County Transportation Commission \n", + "159 recPJULRJk1Yn824N City of Thousand Oaks \n", + "160 recD4Vzt0EDC3VY7I City of Camarillo \n", + "161 recS7GnKTcQVX20HE Gold Coast Transit District \n", + "162 recojKzQsBzE1hjVu City of Moorpark \n", + "163 reckQmUdXUzHFmlVf City of Ojai \n", + "164 rec1ErIn9gG1Isk5W City of Simi Valley \n", + "165 rec7EN71rsZxDFxZd Ventura County Transportation Commission \n", + "162 rec7EN71rsZxDFxZd Ventura County Transportation Commission \n", + "163 recPJULRJk1Yn824N City of Thousand Oaks \n", + "164 recD4Vzt0EDC3VY7I City of Camarillo \n", + "165 recS7GnKTcQVX20HE Gold Coast Transit District \n", + "166 recojKzQsBzE1hjVu City of Moorpark \n", + "167 reckQmUdXUzHFmlVf City of Ojai \n", + "168 rec1ErIn9gG1Isk5W City of Simi Valley \n", + "158 rec7EN71rsZxDFxZd Ventura County Transportation Commission \n", + "159 recPJULRJk1Yn824N City of Thousand Oaks \n", + "160 recD4Vzt0EDC3VY7I City of Camarillo \n", + "161 recS7GnKTcQVX20HE Gold Coast Transit District \n", + "162 recojKzQsBzE1hjVu City of Moorpark \n", + "163 reckQmUdXUzHFmlVf City of Ojai \n", + "164 rec1ErIn9gG1Isk5W City of Simi Valley \n", + "\n", + " caltrans_district service_date \\\n", + "162 07 - Los Angeles / Ventura 2025-01-15 \n", + "163 07 - Los Angeles / Ventura 2025-01-15 \n", + "164 07 - Los Angeles / Ventura 2025-01-15 \n", + "165 07 - Los Angeles / Ventura 2025-01-15 \n", + "166 07 - Los Angeles / Ventura 2025-01-15 \n", + "167 07 - Los Angeles / Ventura 2025-01-15 \n", + "168 07 - Los Angeles / Ventura 2025-01-15 \n", + "162 07 - Los Angeles / Ventura 2025-02-12 \n", + "163 07 - Los Angeles / Ventura 2025-02-12 \n", + "164 07 - Los Angeles / Ventura 2025-02-12 \n", + "165 07 - Los Angeles / Ventura 2025-02-12 \n", + "166 07 - Los Angeles / Ventura 2025-02-12 \n", + "167 07 - Los Angeles / Ventura 2025-02-12 \n", + "168 07 - Los Angeles / Ventura 2025-02-12 \n", + "159 07 - Los Angeles / Ventura 2025-03-12 \n", + "160 07 - Los Angeles / Ventura 2025-03-12 \n", + "161 07 - Los Angeles / Ventura 2025-03-12 \n", + "162 07 - Los Angeles / Ventura 2025-03-12 \n", + "163 07 - Los Angeles / Ventura 2025-03-12 \n", + "164 07 - Los Angeles / Ventura 2025-03-12 \n", + "165 07 - Los Angeles / Ventura 2025-03-12 \n", + "162 07 - Los Angeles / Ventura 2025-04-16 \n", + "163 07 - Los Angeles / Ventura 2025-04-16 \n", + "164 07 - Los Angeles / Ventura 2025-04-16 \n", + "165 07 - Los Angeles / Ventura 2025-04-16 \n", + "166 07 - Los Angeles / Ventura 2025-04-16 \n", + "167 07 - Los Angeles / Ventura 2025-04-16 \n", + "168 07 - Los Angeles / Ventura 2025-04-16 \n", + "158 07 - Los Angeles / Ventura 2025-05-14 \n", + "159 07 - Los Angeles / Ventura 2025-05-14 \n", + "160 07 - Los Angeles / Ventura 2025-05-14 \n", + "161 07 - Los Angeles / Ventura 2025-05-14 \n", + "162 07 - Los Angeles / Ventura 2025-05-14 \n", + "163 07 - Los Angeles / Ventura 2025-05-14 \n", + "164 07 - Los Angeles / Ventura 2025-05-14 \n", + "\n", + " portfolio_organization_name \n", + "162 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "163 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "164 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "165 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "166 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "167 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "168 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "162 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "163 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "164 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "165 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "166 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "167 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "168 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "159 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "160 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "161 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "162 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "163 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "164 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "165 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "162 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "163 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "164 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "165 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "166 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "167 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "168 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "158 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "159 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "160 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "161 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "162 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "163 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "164 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[df.portfolio_organization_name == portfolio_name]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "d8697ac0-dc3f-451c-883c-16ecdbdf9e5f", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "df_sched = merge_data.concatenate_schedule_by_route_direction(date_list)\n", + "\n", + "df_avg_speeds = merge_data.concatenate_speeds_by_route_direction(date_list)\n", + "\n", + "df_rt_sched = merge_data.concatenate_rt_vs_schedule_by_route_direction(date_list)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "ff166e44-630b-4a59-badc-64df47aee00f", + "metadata": { + "tags": [] + }, + "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", + "
schedule_gtfs_dataset_keyroute_iddirection_idtime_periodavg_scheduled_service_minutesavg_stop_milesn_scheduled_tripsfrequencyservice_dateis_expressis_ferryis_railis_coverageis_localis_downtown_localis_rapidtypologynamecombined_namerecent_combined_namerecent_route_idroute_primary_direction
00139b1253130b33adcd4b3a4490530d20177a66b-9f33-407d-a72e-776429fb73d4NaNall_day63.500.9220.082025-01-150.000.000.001.000.000.000.00coverageTCRTA TripShot ScheduleC70 LOOP__70C70 LOOP 700177a66b-9f33-407d-a72e-776429fb73d4Eastbound
10139b1253130b33adcd4b3a4490530d20177a66b-9f33-407d-a72e-776429fb73d4NaNall_day63.505.9820.082025-02-120.000.000.001.000.000.000.00coverageTCRTA TripShot ScheduleC70 LOOP__70C70 LOOP 700177a66b-9f33-407d-a72e-776429fb73d4Eastbound
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key route_id \\\n", + "0 0139b1253130b33adcd4b3a4490530d2 0177a66b-9f33-407d-a72e-776429fb73d4 \n", + "1 0139b1253130b33adcd4b3a4490530d2 0177a66b-9f33-407d-a72e-776429fb73d4 \n", + "\n", + " direction_id time_period avg_scheduled_service_minutes avg_stop_miles \\\n", + "0 NaN all_day 63.50 0.92 \n", + "1 NaN all_day 63.50 5.98 \n", + "\n", + " n_scheduled_trips frequency service_date is_express is_ferry is_rail \\\n", + "0 2 0.08 2025-01-15 0.00 0.00 0.00 \n", + "1 2 0.08 2025-02-12 0.00 0.00 0.00 \n", + "\n", + " is_coverage is_local is_downtown_local is_rapid typology \\\n", + "0 1.00 0.00 0.00 0.00 coverage \n", + "1 1.00 0.00 0.00 0.00 coverage \n", + "\n", + " name combined_name recent_combined_name \\\n", + "0 TCRTA TripShot Schedule C70 LOOP__70 C70 LOOP 70 \n", + "1 TCRTA TripShot Schedule C70 LOOP__70 C70 LOOP 70 \n", + "\n", + " recent_route_id route_primary_direction \n", + "0 0177a66b-9f33-407d-a72e-776429fb73d4 Eastbound \n", + "1 0177a66b-9f33-407d-a72e-776429fb73d4 Eastbound " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_sched.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "271bb082-5ca3-4839-89be-8fe2686a90a4", + "metadata": { + "tags": [] + }, + "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", + "
schedule_gtfs_dataset_keyroute_iddirection_idtime_periodspeed_mphservice_date
00139b1253130b33adcd4b3a4490530d20177a66b-9f33-407d-a72e-776429fb73d4NaNall_day33.492025-04-16
10139b1253130b33adcd4b3a4490530d20177a66b-9f33-407d-a72e-776429fb73d4NaNpeak33.492025-04-16
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key route_id \\\n", + "0 0139b1253130b33adcd4b3a4490530d2 0177a66b-9f33-407d-a72e-776429fb73d4 \n", + "1 0139b1253130b33adcd4b3a4490530d2 0177a66b-9f33-407d-a72e-776429fb73d4 \n", + "\n", + " direction_id time_period speed_mph service_date \n", + "0 NaN all_day 33.49 2025-04-16 \n", + "1 NaN peak 33.49 2025-04-16 " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_avg_speeds.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "c40b3b6e-5d94-4573-8286-4b81f120cd8f", + "metadata": { + "tags": [] + }, + "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", + "
schedule_gtfs_dataset_keyroute_iddirection_idtime_periodminutes_atleast1_vpminutes_atleast2_vptotal_rt_service_minutestotal_scheduled_service_minutestotal_vpvp_in_shapeis_earlyis_ontimeis_laten_vp_tripsvp_per_minutepct_in_shapepct_rt_journey_atleast1_vppct_rt_journey_atleast2_vppct_sched_journey_atleast1_vppct_sched_journey_atleast2_vprt_sched_journey_ratioavg_rt_service_minutesservice_date
00139b1253130b33adcd4b3a4490530d20177a66b-9f33-407d-a72e-776429fb73d4NaNall_day159158156.95127.0047339001123.010.821.001.001.001.001.2478.472025-01-15
10139b1253130b33adcd4b3a4490530d20177a66b-9f33-407d-a72e-776429fb73d4NaNall_day161159158.92127.0047937801123.010.791.001.001.001.001.2579.462025-02-12
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key route_id \\\n", + "0 0139b1253130b33adcd4b3a4490530d2 0177a66b-9f33-407d-a72e-776429fb73d4 \n", + "1 0139b1253130b33adcd4b3a4490530d2 0177a66b-9f33-407d-a72e-776429fb73d4 \n", + "\n", + " direction_id time_period minutes_atleast1_vp minutes_atleast2_vp \\\n", + "0 NaN all_day 159 158 \n", + "1 NaN all_day 161 159 \n", + "\n", + " total_rt_service_minutes total_scheduled_service_minutes total_vp \\\n", + "0 156.95 127.00 473 \n", + "1 158.92 127.00 479 \n", + "\n", + " vp_in_shape is_early is_ontime is_late n_vp_trips vp_per_minute \\\n", + "0 390 0 1 1 2 3.01 \n", + "1 378 0 1 1 2 3.01 \n", + "\n", + " pct_in_shape pct_rt_journey_atleast1_vp pct_rt_journey_atleast2_vp \\\n", + "0 0.82 1.00 1.00 \n", + "1 0.79 1.00 1.00 \n", + "\n", + " pct_sched_journey_atleast1_vp pct_sched_journey_atleast2_vp \\\n", + "0 1.00 1.00 \n", + "1 1.00 1.00 \n", + "\n", + " rt_sched_journey_ratio avg_rt_service_minutes service_date \n", + "0 1.24 78.47 2025-01-15 \n", + "1 1.25 79.46 2025-02-12 " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_rt_sched.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "71157a5a-8f8c-4bc7-b285-b1db9f8b2fb9", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "df2 = merge_data.merge_data_sources_by_route_direction(\n", + " df_sched, df_rt_sched, df_avg_speeds, df\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "14a7e09e-f8d4-474d-a271-3ae32b9e1c99", + "metadata": { + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
schedule_gtfs_dataset_key
1621770249a5a2e770ca90628434d4934b1
1631770249a5a2e770ca90628434d4934b1
1641770249a5a2e770ca90628434d4934b1
1651770249a5a2e770ca90628434d4934b1
1661770249a5a2e770ca90628434d4934b1
1671770249a5a2e770ca90628434d4934b1
1681770249a5a2e770ca90628434d4934b1
1621770249a5a2e770ca90628434d4934b1
1631770249a5a2e770ca90628434d4934b1
1641770249a5a2e770ca90628434d4934b1
1651770249a5a2e770ca90628434d4934b1
1661770249a5a2e770ca90628434d4934b1
1671770249a5a2e770ca90628434d4934b1
1681770249a5a2e770ca90628434d4934b1
1591770249a5a2e770ca90628434d4934b1
1601770249a5a2e770ca90628434d4934b1
1611770249a5a2e770ca90628434d4934b1
1621770249a5a2e770ca90628434d4934b1
1631770249a5a2e770ca90628434d4934b1
1641770249a5a2e770ca90628434d4934b1
1651770249a5a2e770ca90628434d4934b1
1621770249a5a2e770ca90628434d4934b1
1631770249a5a2e770ca90628434d4934b1
1641770249a5a2e770ca90628434d4934b1
1651770249a5a2e770ca90628434d4934b1
1661770249a5a2e770ca90628434d4934b1
1671770249a5a2e770ca90628434d4934b1
1681770249a5a2e770ca90628434d4934b1
1581770249a5a2e770ca90628434d4934b1
1591770249a5a2e770ca90628434d4934b1
1601770249a5a2e770ca90628434d4934b1
1611770249a5a2e770ca90628434d4934b1
1621770249a5a2e770ca90628434d4934b1
1631770249a5a2e770ca90628434d4934b1
1641770249a5a2e770ca90628434d4934b1
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key\n", + "162 1770249a5a2e770ca90628434d4934b1\n", + "163 1770249a5a2e770ca90628434d4934b1\n", + "164 1770249a5a2e770ca90628434d4934b1\n", + "165 1770249a5a2e770ca90628434d4934b1\n", + "166 1770249a5a2e770ca90628434d4934b1\n", + "167 1770249a5a2e770ca90628434d4934b1\n", + "168 1770249a5a2e770ca90628434d4934b1\n", + "162 1770249a5a2e770ca90628434d4934b1\n", + "163 1770249a5a2e770ca90628434d4934b1\n", + "164 1770249a5a2e770ca90628434d4934b1\n", + "165 1770249a5a2e770ca90628434d4934b1\n", + "166 1770249a5a2e770ca90628434d4934b1\n", + "167 1770249a5a2e770ca90628434d4934b1\n", + "168 1770249a5a2e770ca90628434d4934b1\n", + "159 1770249a5a2e770ca90628434d4934b1\n", + "160 1770249a5a2e770ca90628434d4934b1\n", + "161 1770249a5a2e770ca90628434d4934b1\n", + "162 1770249a5a2e770ca90628434d4934b1\n", + "163 1770249a5a2e770ca90628434d4934b1\n", + "164 1770249a5a2e770ca90628434d4934b1\n", + "165 1770249a5a2e770ca90628434d4934b1\n", + "162 1770249a5a2e770ca90628434d4934b1\n", + "163 1770249a5a2e770ca90628434d4934b1\n", + "164 1770249a5a2e770ca90628434d4934b1\n", + "165 1770249a5a2e770ca90628434d4934b1\n", + "166 1770249a5a2e770ca90628434d4934b1\n", + "167 1770249a5a2e770ca90628434d4934b1\n", + "168 1770249a5a2e770ca90628434d4934b1\n", + "158 1770249a5a2e770ca90628434d4934b1\n", + "159 1770249a5a2e770ca90628434d4934b1\n", + "160 1770249a5a2e770ca90628434d4934b1\n", + "161 1770249a5a2e770ca90628434d4934b1\n", + "162 1770249a5a2e770ca90628434d4934b1\n", + "163 1770249a5a2e770ca90628434d4934b1\n", + "164 1770249a5a2e770ca90628434d4934b1" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[df.name.str.contains(\"VCTC\")][[\"schedule_gtfs_dataset_key\"]]" + ] + }, + { + "attachments": { + "243230eb-b213-42fc-a46e-0a65c6ed9448.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "id": "ec34bc92-46e8-4966-922b-c831e2b183d6", + "metadata": {}, + "source": [ + "## Clarification on this portion of `merge_data.py`\n", + "![image.png](attachment:243230eb-b213-42fc-a46e-0a65c6ed9448.png)" + ] + }, + { + "cell_type": "markdown", + "id": "fa8911d1-73d6-4d5a-8f2c-d75f90b40583", + "metadata": {}, + "source": [ + "## Check Ventura County Route 80 " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "09df4d30-fd24-46c1-8550-b5e46eb1cb2a", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['schedule_gtfs_dataset_key', 'route_id', 'direction_id', 'time_period',\n", + " 'avg_scheduled_service_minutes', 'avg_stop_miles', 'n_scheduled_trips',\n", + " 'frequency', 'service_date', 'is_express', 'is_ferry', 'is_rail',\n", + " 'is_coverage', 'is_local', 'is_downtown_local', 'is_rapid', 'typology',\n", + " 'name', 'combined_name', 'recent_combined_name', 'recent_route_id',\n", + " 'route_primary_direction', 'minutes_atleast1_vp', 'minutes_atleast2_vp',\n", + " 'total_rt_service_minutes', 'total_scheduled_service_minutes',\n", + " 'total_vp', 'vp_in_shape', 'is_early', 'is_ontime', 'is_late',\n", + " 'n_vp_trips', 'vp_per_minute', 'pct_in_shape',\n", + " 'pct_rt_journey_atleast1_vp', 'pct_rt_journey_atleast2_vp',\n", + " 'pct_sched_journey_atleast1_vp', 'pct_sched_journey_atleast2_vp',\n", + " 'rt_sched_journey_ratio', 'avg_rt_service_minutes', 'sched_rt_category',\n", + " 'speed_mph', 'schedule_source_record_id', 'base64_url',\n", + " 'organization_source_record_id', 'organization_name',\n", + " 'caltrans_district', 'portfolio_organization_name'],\n", + " dtype='object')" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "aa888960-d4e5-458b-bfc5-6d7db44c8dde", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['2025-01-15T00:00:00.000000000', '2025-02-12T00:00:00.000000000',\n", + " '2025-03-12T00:00:00.000000000', '2025-04-16T00:00:00.000000000',\n", + " '2025-05-14T00:00:00.000000000'], dtype='datetime64[ns]')" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2.service_date.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "f4deed07-728c-44b9-874d-947fe34428a8", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "route_80_89 = df2.loc[\n", + " (df2.portfolio_organization_name == portfolio_name)\n", + " & (df2.recent_combined_name == \"80-89 Coastal Express\")\n", + " & (df2.service_date == \"2025-05-14T00:00:00.000000000\")\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "78efc372-7911-4f87-937a-3ba129eefbd9", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "VCTC GMV Schedule 1673\n", + "Name: name, dtype: int64" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "route_80_89.name.value_counts()" + ] + }, + { + "cell_type": "markdown", + "id": "f207717f-b4be-4bfc-ad1a-a9dcad29cd47", + "metadata": {}, + "source": [ + "### There are two directions, 3 time periods so I should only see 6 rows per date? Also there are many duplicates -> dropped from 239 to 41. " + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "575c71e8-c5eb-4a4d-bcab-d92e99b71d8b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(1673, 287)" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(route_80_89), len(route_80_89.drop_duplicates())" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "c4b109a3-9e08-4789-b810-ba12cfb0461d", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "route_80_89_dedup = route_80_89.drop_duplicates()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "3c76cf03-2825-4378-a8a9-61632628eb30", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['schedule_gtfs_dataset_key', 'route_id', 'direction_id', 'time_period',\n", + " 'avg_scheduled_service_minutes', 'avg_stop_miles', 'n_scheduled_trips',\n", + " 'frequency', 'service_date', 'is_express', 'is_ferry', 'is_rail',\n", + " 'is_coverage', 'is_local', 'is_downtown_local', 'is_rapid', 'typology',\n", + " 'name', 'combined_name', 'recent_combined_name', 'recent_route_id',\n", + " 'route_primary_direction', 'minutes_atleast1_vp', 'minutes_atleast2_vp',\n", + " 'total_rt_service_minutes', 'total_scheduled_service_minutes',\n", + " 'total_vp', 'vp_in_shape', 'is_early', 'is_ontime', 'is_late',\n", + " 'n_vp_trips', 'vp_per_minute', 'pct_in_shape',\n", + " 'pct_rt_journey_atleast1_vp', 'pct_rt_journey_atleast2_vp',\n", + " 'pct_sched_journey_atleast1_vp', 'pct_sched_journey_atleast2_vp',\n", + " 'rt_sched_journey_ratio', 'avg_rt_service_minutes', 'sched_rt_category',\n", + " 'speed_mph', 'schedule_source_record_id', 'base64_url',\n", + " 'organization_source_record_id', 'organization_name',\n", + " 'caltrans_district', 'portfolio_organization_name'],\n", + " dtype='object')" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "route_80_89_dedup.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "5e901bac-49e6-46c0-b066-448195b6ceb7", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "all_day 133\n", + "offpeak 91\n", + "peak 63\n", + "Name: time_period, dtype: int64" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "route_80_89_dedup.time_period.value_counts()" + ] + }, + { + "cell_type": "markdown", + "id": "e4c418b8-c5a1-4019-a77a-6add4a3dc016", + "metadata": {}, + "source": [ + "### What about unique route ID's that are repeated for the same `key, recent_combined_name,service_date, and portfolio_organization_name` combo?" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "43caaaf8-e2c0-41f5-90e9-c4511d9e5d7d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['4134', '4136', '4137', '4138', '4141', '4142', '4143', '4144',\n", + " '4145', '4146', '4147', '4148'], dtype=object)" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "route_80_89_dedup.route_id.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "1be84f1e-6b32-4367-8b43-cd0434b8d058", + "metadata": { + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
5408254083540845408554086540875408854775547765477754778547795478054781552655526655267552685526955270552715600056001560025600356004560055600656448564495645056451564525645356454568965689756898568995690056901569025738657387573885738957390573915739257876578775787857879578805788157882
portfolio_organization_nameVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
recent_combined_name80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express80-89 Coastal Express
route_id41344134413441344134413441344136413641364136413641364136413741374137413741374137413741414141414141414141414141414143414341434143414341434143414541454145414541454145414541464146414641464146414641464148414841484148414841484148
recent_route_id41344134413441344134413441344136413641364136413641364136413741374137413741374137413741414141414141414141414141414143414341434143414341434143414541454145414541454145414541464146414641464146414641464148414841484148414841484148
direction_id11111111111111111111111111111111111111111111111111111111
time_periodpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeakpeak
avg_scheduled_service_minutes86.8086.8086.8086.8086.8086.8086.8050.0050.0050.0050.0050.0050.0050.00125.50125.50125.50125.50125.50125.50125.50128.00128.00128.00128.00128.00128.00128.00129.00129.00129.00129.00129.00129.00129.00106.00106.00106.00106.00106.00106.00106.00129.00129.00129.00129.00129.00129.00129.00149.67149.67149.67149.67149.67149.67149.67
avg_stop_miles7.717.717.717.717.717.717.7132.1032.1032.1032.1032.1032.1032.1028.8828.8828.8828.8828.8828.8828.8817.8217.8217.8217.8217.8217.8217.823.703.703.703.703.703.703.702.912.912.912.912.912.912.9138.0638.0638.0638.0638.0638.0638.065.575.575.575.575.575.575.57
n_scheduled_trips55555551111111222222222222221111111222222211111113333333
frequency0.620.620.620.620.620.620.620.120.120.120.120.120.120.120.250.250.250.250.250.250.250.250.250.250.250.250.250.250.120.120.120.120.120.120.120.250.250.250.250.250.250.250.120.120.120.120.120.120.120.380.380.380.380.380.380.38
route_primary_directionEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastbound
vp_per_minute2.322.322.322.322.322.322.321.741.741.741.741.741.741.743.013.013.013.013.013.013.012.172.172.172.172.172.172.17NaNNaNNaNNaNNaNNaNNaN0.720.720.720.720.720.720.721.341.341.341.341.341.341.341.911.911.911.911.911.911.91
pct_in_shape0.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.00NaNNaNNaNNaNNaNNaNNaN0.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.00
pct_rt_journey_atleast1_vp0.790.790.790.790.790.790.790.560.560.560.560.560.560.561.001.001.001.001.001.001.000.820.820.820.820.820.820.82NaNNaNNaNNaNNaNNaNNaN0.240.240.240.240.240.240.240.450.450.450.450.450.450.450.640.640.640.640.640.640.64
pct_rt_journey_atleast2_vp0.770.770.770.770.770.770.770.530.530.530.530.530.530.531.001.001.001.001.001.001.000.700.700.700.700.700.700.70NaNNaNNaNNaNNaNNaNNaN0.240.240.240.240.240.240.240.450.450.450.450.450.450.450.640.640.640.640.640.640.64
pct_sched_journey_atleast1_vp1.001.001.001.001.001.001.001.001.001.001.001.001.001.000.580.580.580.580.580.580.581.001.001.001.001.001.001.00NaNNaNNaNNaNNaNNaNNaN1.001.001.001.001.001.001.001.001.001.001.001.001.001.001.001.001.001.001.001.001.00
pct_sched_journey_atleast2_vp1.001.001.001.001.001.001.001.001.001.001.001.001.001.000.580.580.580.580.580.580.581.001.001.001.001.001.001.00NaNNaNNaNNaNNaNNaNNaN1.001.001.001.001.001.001.001.001.001.001.001.001.001.001.001.001.001.001.001.001.00
rt_sched_journey_ratio1.701.701.701.701.701.701.703.203.203.203.203.203.203.200.580.580.580.580.580.580.581.431.431.431.431.431.431.43NaNNaNNaNNaNNaNNaNNaN6.746.746.746.746.746.746.744.494.494.494.494.494.494.492.172.172.172.172.172.172.17
avg_rt_service_minutes147.42147.42147.42147.42147.42147.42147.42159.92159.92159.92159.92159.92159.92159.9277.6777.6777.6777.6777.6777.6777.67187.70187.70187.70187.70187.70187.70187.70NaNNaNNaNNaNNaNNaNNaN714.46714.46714.46714.46714.46714.46714.46579.38579.38579.38579.38579.38579.38579.38324.76324.76324.76324.76324.76324.76324.76
speed_mph15.4715.4715.4715.4715.4715.4715.47NaNNaNNaNNaNNaNNaNNaN19.4619.4619.4619.4619.4619.4619.46NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN30.4530.4530.4530.4530.4530.4530.45NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", + "
" + ], + "text/plain": [ + " 54082 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4134 \n", + "recent_route_id 4134 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 86.80 \n", + "avg_stop_miles 7.71 \n", + "n_scheduled_trips 5 \n", + "frequency 0.62 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 2.32 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.79 \n", + "pct_rt_journey_atleast2_vp 0.77 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.70 \n", + "avg_rt_service_minutes 147.42 \n", + "speed_mph 15.47 \n", + "\n", + " 54083 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4134 \n", + "recent_route_id 4134 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 86.80 \n", + "avg_stop_miles 7.71 \n", + "n_scheduled_trips 5 \n", + "frequency 0.62 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 2.32 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.79 \n", + "pct_rt_journey_atleast2_vp 0.77 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.70 \n", + "avg_rt_service_minutes 147.42 \n", + "speed_mph 15.47 \n", + "\n", + " 54084 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4134 \n", + "recent_route_id 4134 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 86.80 \n", + "avg_stop_miles 7.71 \n", + "n_scheduled_trips 5 \n", + "frequency 0.62 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 2.32 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.79 \n", + "pct_rt_journey_atleast2_vp 0.77 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.70 \n", + "avg_rt_service_minutes 147.42 \n", + "speed_mph 15.47 \n", + "\n", + " 54085 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4134 \n", + "recent_route_id 4134 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 86.80 \n", + "avg_stop_miles 7.71 \n", + "n_scheduled_trips 5 \n", + "frequency 0.62 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 2.32 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.79 \n", + "pct_rt_journey_atleast2_vp 0.77 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.70 \n", + "avg_rt_service_minutes 147.42 \n", + "speed_mph 15.47 \n", + "\n", + " 54086 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4134 \n", + "recent_route_id 4134 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 86.80 \n", + "avg_stop_miles 7.71 \n", + "n_scheduled_trips 5 \n", + "frequency 0.62 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 2.32 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.79 \n", + "pct_rt_journey_atleast2_vp 0.77 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.70 \n", + "avg_rt_service_minutes 147.42 \n", + "speed_mph 15.47 \n", + "\n", + " 54087 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4134 \n", + "recent_route_id 4134 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 86.80 \n", + "avg_stop_miles 7.71 \n", + "n_scheduled_trips 5 \n", + "frequency 0.62 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 2.32 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.79 \n", + "pct_rt_journey_atleast2_vp 0.77 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.70 \n", + "avg_rt_service_minutes 147.42 \n", + "speed_mph 15.47 \n", + "\n", + " 54088 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4134 \n", + "recent_route_id 4134 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 86.80 \n", + "avg_stop_miles 7.71 \n", + "n_scheduled_trips 5 \n", + "frequency 0.62 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 2.32 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.79 \n", + "pct_rt_journey_atleast2_vp 0.77 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.70 \n", + "avg_rt_service_minutes 147.42 \n", + "speed_mph 15.47 \n", + "\n", + " 54775 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4136 \n", + "recent_route_id 4136 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 50.00 \n", + "avg_stop_miles 32.10 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.74 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.56 \n", + "pct_rt_journey_atleast2_vp 0.53 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 3.20 \n", + "avg_rt_service_minutes 159.92 \n", + "speed_mph NaN \n", + "\n", + " 54776 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4136 \n", + "recent_route_id 4136 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 50.00 \n", + "avg_stop_miles 32.10 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.74 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.56 \n", + "pct_rt_journey_atleast2_vp 0.53 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 3.20 \n", + "avg_rt_service_minutes 159.92 \n", + "speed_mph NaN \n", + "\n", + " 54777 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4136 \n", + "recent_route_id 4136 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 50.00 \n", + "avg_stop_miles 32.10 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.74 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.56 \n", + "pct_rt_journey_atleast2_vp 0.53 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 3.20 \n", + "avg_rt_service_minutes 159.92 \n", + "speed_mph NaN \n", + "\n", + " 54778 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4136 \n", + "recent_route_id 4136 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 50.00 \n", + "avg_stop_miles 32.10 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.74 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.56 \n", + "pct_rt_journey_atleast2_vp 0.53 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 3.20 \n", + "avg_rt_service_minutes 159.92 \n", + "speed_mph NaN \n", + "\n", + " 54779 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4136 \n", + "recent_route_id 4136 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 50.00 \n", + "avg_stop_miles 32.10 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.74 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.56 \n", + "pct_rt_journey_atleast2_vp 0.53 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 3.20 \n", + "avg_rt_service_minutes 159.92 \n", + "speed_mph NaN \n", + "\n", + " 54780 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4136 \n", + "recent_route_id 4136 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 50.00 \n", + "avg_stop_miles 32.10 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.74 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.56 \n", + "pct_rt_journey_atleast2_vp 0.53 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 3.20 \n", + "avg_rt_service_minutes 159.92 \n", + "speed_mph NaN \n", + "\n", + " 54781 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4136 \n", + "recent_route_id 4136 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 50.00 \n", + "avg_stop_miles 32.10 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.74 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.56 \n", + "pct_rt_journey_atleast2_vp 0.53 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 3.20 \n", + "avg_rt_service_minutes 159.92 \n", + "speed_mph NaN \n", + "\n", + " 55265 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4137 \n", + "recent_route_id 4137 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 125.50 \n", + "avg_stop_miles 28.88 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 3.01 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 1.00 \n", + "pct_rt_journey_atleast2_vp 1.00 \n", + "pct_sched_journey_atleast1_vp 0.58 \n", + "pct_sched_journey_atleast2_vp 0.58 \n", + "rt_sched_journey_ratio 0.58 \n", + "avg_rt_service_minutes 77.67 \n", + "speed_mph 19.46 \n", + "\n", + " 55266 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4137 \n", + "recent_route_id 4137 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 125.50 \n", + "avg_stop_miles 28.88 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 3.01 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 1.00 \n", + "pct_rt_journey_atleast2_vp 1.00 \n", + "pct_sched_journey_atleast1_vp 0.58 \n", + "pct_sched_journey_atleast2_vp 0.58 \n", + "rt_sched_journey_ratio 0.58 \n", + "avg_rt_service_minutes 77.67 \n", + "speed_mph 19.46 \n", + "\n", + " 55267 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4137 \n", + "recent_route_id 4137 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 125.50 \n", + "avg_stop_miles 28.88 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 3.01 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 1.00 \n", + "pct_rt_journey_atleast2_vp 1.00 \n", + "pct_sched_journey_atleast1_vp 0.58 \n", + "pct_sched_journey_atleast2_vp 0.58 \n", + "rt_sched_journey_ratio 0.58 \n", + "avg_rt_service_minutes 77.67 \n", + "speed_mph 19.46 \n", + "\n", + " 55268 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4137 \n", + "recent_route_id 4137 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 125.50 \n", + "avg_stop_miles 28.88 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 3.01 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 1.00 \n", + "pct_rt_journey_atleast2_vp 1.00 \n", + "pct_sched_journey_atleast1_vp 0.58 \n", + "pct_sched_journey_atleast2_vp 0.58 \n", + "rt_sched_journey_ratio 0.58 \n", + "avg_rt_service_minutes 77.67 \n", + "speed_mph 19.46 \n", + "\n", + " 55269 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4137 \n", + "recent_route_id 4137 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 125.50 \n", + "avg_stop_miles 28.88 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 3.01 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 1.00 \n", + "pct_rt_journey_atleast2_vp 1.00 \n", + "pct_sched_journey_atleast1_vp 0.58 \n", + "pct_sched_journey_atleast2_vp 0.58 \n", + "rt_sched_journey_ratio 0.58 \n", + "avg_rt_service_minutes 77.67 \n", + "speed_mph 19.46 \n", + "\n", + " 55270 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4137 \n", + "recent_route_id 4137 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 125.50 \n", + "avg_stop_miles 28.88 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 3.01 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 1.00 \n", + "pct_rt_journey_atleast2_vp 1.00 \n", + "pct_sched_journey_atleast1_vp 0.58 \n", + "pct_sched_journey_atleast2_vp 0.58 \n", + "rt_sched_journey_ratio 0.58 \n", + "avg_rt_service_minutes 77.67 \n", + "speed_mph 19.46 \n", + "\n", + " 55271 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4137 \n", + "recent_route_id 4137 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 125.50 \n", + "avg_stop_miles 28.88 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 3.01 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 1.00 \n", + "pct_rt_journey_atleast2_vp 1.00 \n", + "pct_sched_journey_atleast1_vp 0.58 \n", + "pct_sched_journey_atleast2_vp 0.58 \n", + "rt_sched_journey_ratio 0.58 \n", + "avg_rt_service_minutes 77.67 \n", + "speed_mph 19.46 \n", + "\n", + " 56000 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4141 \n", + "recent_route_id 4141 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 128.00 \n", + "avg_stop_miles 17.82 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 2.17 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.82 \n", + "pct_rt_journey_atleast2_vp 0.70 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.43 \n", + "avg_rt_service_minutes 187.70 \n", + "speed_mph NaN \n", + "\n", + " 56001 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4141 \n", + "recent_route_id 4141 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 128.00 \n", + "avg_stop_miles 17.82 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 2.17 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.82 \n", + "pct_rt_journey_atleast2_vp 0.70 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.43 \n", + "avg_rt_service_minutes 187.70 \n", + "speed_mph NaN \n", + "\n", + " 56002 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4141 \n", + "recent_route_id 4141 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 128.00 \n", + "avg_stop_miles 17.82 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 2.17 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.82 \n", + "pct_rt_journey_atleast2_vp 0.70 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.43 \n", + "avg_rt_service_minutes 187.70 \n", + "speed_mph NaN \n", + "\n", + " 56003 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4141 \n", + "recent_route_id 4141 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 128.00 \n", + "avg_stop_miles 17.82 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 2.17 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.82 \n", + "pct_rt_journey_atleast2_vp 0.70 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.43 \n", + "avg_rt_service_minutes 187.70 \n", + "speed_mph NaN \n", + "\n", + " 56004 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4141 \n", + "recent_route_id 4141 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 128.00 \n", + "avg_stop_miles 17.82 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 2.17 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.82 \n", + "pct_rt_journey_atleast2_vp 0.70 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.43 \n", + "avg_rt_service_minutes 187.70 \n", + "speed_mph NaN \n", + "\n", + " 56005 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4141 \n", + "recent_route_id 4141 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 128.00 \n", + "avg_stop_miles 17.82 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 2.17 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.82 \n", + "pct_rt_journey_atleast2_vp 0.70 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.43 \n", + "avg_rt_service_minutes 187.70 \n", + "speed_mph NaN \n", + "\n", + " 56006 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4141 \n", + "recent_route_id 4141 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 128.00 \n", + "avg_stop_miles 17.82 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 2.17 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.82 \n", + "pct_rt_journey_atleast2_vp 0.70 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.43 \n", + "avg_rt_service_minutes 187.70 \n", + "speed_mph NaN \n", + "\n", + " 56448 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4143 \n", + "recent_route_id 4143 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 129.00 \n", + "avg_stop_miles 3.70 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute NaN \n", + "pct_in_shape NaN \n", + "pct_rt_journey_atleast1_vp NaN \n", + "pct_rt_journey_atleast2_vp NaN \n", + "pct_sched_journey_atleast1_vp NaN \n", + "pct_sched_journey_atleast2_vp NaN \n", + "rt_sched_journey_ratio NaN \n", + "avg_rt_service_minutes NaN \n", + "speed_mph NaN \n", + "\n", + " 56449 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4143 \n", + "recent_route_id 4143 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 129.00 \n", + "avg_stop_miles 3.70 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute NaN \n", + "pct_in_shape NaN \n", + "pct_rt_journey_atleast1_vp NaN \n", + "pct_rt_journey_atleast2_vp NaN \n", + "pct_sched_journey_atleast1_vp NaN \n", + "pct_sched_journey_atleast2_vp NaN \n", + "rt_sched_journey_ratio NaN \n", + "avg_rt_service_minutes NaN \n", + "speed_mph NaN \n", + "\n", + " 56450 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4143 \n", + "recent_route_id 4143 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 129.00 \n", + "avg_stop_miles 3.70 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute NaN \n", + "pct_in_shape NaN \n", + "pct_rt_journey_atleast1_vp NaN \n", + "pct_rt_journey_atleast2_vp NaN \n", + "pct_sched_journey_atleast1_vp NaN \n", + "pct_sched_journey_atleast2_vp NaN \n", + "rt_sched_journey_ratio NaN \n", + "avg_rt_service_minutes NaN \n", + "speed_mph NaN \n", + "\n", + " 56451 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4143 \n", + "recent_route_id 4143 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 129.00 \n", + "avg_stop_miles 3.70 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute NaN \n", + "pct_in_shape NaN \n", + "pct_rt_journey_atleast1_vp NaN \n", + "pct_rt_journey_atleast2_vp NaN \n", + "pct_sched_journey_atleast1_vp NaN \n", + "pct_sched_journey_atleast2_vp NaN \n", + "rt_sched_journey_ratio NaN \n", + "avg_rt_service_minutes NaN \n", + "speed_mph NaN \n", + "\n", + " 56452 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4143 \n", + "recent_route_id 4143 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 129.00 \n", + "avg_stop_miles 3.70 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute NaN \n", + "pct_in_shape NaN \n", + "pct_rt_journey_atleast1_vp NaN \n", + "pct_rt_journey_atleast2_vp NaN \n", + "pct_sched_journey_atleast1_vp NaN \n", + "pct_sched_journey_atleast2_vp NaN \n", + "rt_sched_journey_ratio NaN \n", + "avg_rt_service_minutes NaN \n", + "speed_mph NaN \n", + "\n", + " 56453 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4143 \n", + "recent_route_id 4143 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 129.00 \n", + "avg_stop_miles 3.70 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute NaN \n", + "pct_in_shape NaN \n", + "pct_rt_journey_atleast1_vp NaN \n", + "pct_rt_journey_atleast2_vp NaN \n", + "pct_sched_journey_atleast1_vp NaN \n", + "pct_sched_journey_atleast2_vp NaN \n", + "rt_sched_journey_ratio NaN \n", + "avg_rt_service_minutes NaN \n", + "speed_mph NaN \n", + "\n", + " 56454 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4143 \n", + "recent_route_id 4143 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 129.00 \n", + "avg_stop_miles 3.70 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute NaN \n", + "pct_in_shape NaN \n", + "pct_rt_journey_atleast1_vp NaN \n", + "pct_rt_journey_atleast2_vp NaN \n", + "pct_sched_journey_atleast1_vp NaN \n", + "pct_sched_journey_atleast2_vp NaN \n", + "rt_sched_journey_ratio NaN \n", + "avg_rt_service_minutes NaN \n", + "speed_mph NaN \n", + "\n", + " 56896 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4145 \n", + "recent_route_id 4145 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 106.00 \n", + "avg_stop_miles 2.91 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 0.72 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.24 \n", + "pct_rt_journey_atleast2_vp 0.24 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 6.74 \n", + "avg_rt_service_minutes 714.46 \n", + "speed_mph 30.45 \n", + "\n", + " 56897 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4145 \n", + "recent_route_id 4145 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 106.00 \n", + "avg_stop_miles 2.91 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 0.72 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.24 \n", + "pct_rt_journey_atleast2_vp 0.24 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 6.74 \n", + "avg_rt_service_minutes 714.46 \n", + "speed_mph 30.45 \n", + "\n", + " 56898 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4145 \n", + "recent_route_id 4145 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 106.00 \n", + "avg_stop_miles 2.91 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 0.72 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.24 \n", + "pct_rt_journey_atleast2_vp 0.24 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 6.74 \n", + "avg_rt_service_minutes 714.46 \n", + "speed_mph 30.45 \n", + "\n", + " 56899 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4145 \n", + "recent_route_id 4145 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 106.00 \n", + "avg_stop_miles 2.91 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 0.72 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.24 \n", + "pct_rt_journey_atleast2_vp 0.24 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 6.74 \n", + "avg_rt_service_minutes 714.46 \n", + "speed_mph 30.45 \n", + "\n", + " 56900 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4145 \n", + "recent_route_id 4145 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 106.00 \n", + "avg_stop_miles 2.91 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 0.72 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.24 \n", + "pct_rt_journey_atleast2_vp 0.24 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 6.74 \n", + "avg_rt_service_minutes 714.46 \n", + "speed_mph 30.45 \n", + "\n", + " 56901 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4145 \n", + "recent_route_id 4145 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 106.00 \n", + "avg_stop_miles 2.91 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 0.72 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.24 \n", + "pct_rt_journey_atleast2_vp 0.24 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 6.74 \n", + "avg_rt_service_minutes 714.46 \n", + "speed_mph 30.45 \n", + "\n", + " 56902 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4145 \n", + "recent_route_id 4145 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 106.00 \n", + "avg_stop_miles 2.91 \n", + "n_scheduled_trips 2 \n", + "frequency 0.25 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 0.72 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.24 \n", + "pct_rt_journey_atleast2_vp 0.24 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 6.74 \n", + "avg_rt_service_minutes 714.46 \n", + "speed_mph 30.45 \n", + "\n", + " 57386 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4146 \n", + "recent_route_id 4146 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 129.00 \n", + "avg_stop_miles 38.06 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.34 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.45 \n", + "pct_rt_journey_atleast2_vp 0.45 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 4.49 \n", + "avg_rt_service_minutes 579.38 \n", + "speed_mph NaN \n", + "\n", + " 57387 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4146 \n", + "recent_route_id 4146 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 129.00 \n", + "avg_stop_miles 38.06 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.34 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.45 \n", + "pct_rt_journey_atleast2_vp 0.45 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 4.49 \n", + "avg_rt_service_minutes 579.38 \n", + "speed_mph NaN \n", + "\n", + " 57388 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4146 \n", + "recent_route_id 4146 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 129.00 \n", + "avg_stop_miles 38.06 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.34 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.45 \n", + "pct_rt_journey_atleast2_vp 0.45 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 4.49 \n", + "avg_rt_service_minutes 579.38 \n", + "speed_mph NaN \n", + "\n", + " 57389 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4146 \n", + "recent_route_id 4146 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 129.00 \n", + "avg_stop_miles 38.06 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.34 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.45 \n", + "pct_rt_journey_atleast2_vp 0.45 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 4.49 \n", + "avg_rt_service_minutes 579.38 \n", + "speed_mph NaN \n", + "\n", + " 57390 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4146 \n", + "recent_route_id 4146 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 129.00 \n", + "avg_stop_miles 38.06 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.34 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.45 \n", + "pct_rt_journey_atleast2_vp 0.45 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 4.49 \n", + "avg_rt_service_minutes 579.38 \n", + "speed_mph NaN \n", + "\n", + " 57391 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4146 \n", + "recent_route_id 4146 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 129.00 \n", + "avg_stop_miles 38.06 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.34 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.45 \n", + "pct_rt_journey_atleast2_vp 0.45 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 4.49 \n", + "avg_rt_service_minutes 579.38 \n", + "speed_mph NaN \n", + "\n", + " 57392 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4146 \n", + "recent_route_id 4146 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 129.00 \n", + "avg_stop_miles 38.06 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.34 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.45 \n", + "pct_rt_journey_atleast2_vp 0.45 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 4.49 \n", + "avg_rt_service_minutes 579.38 \n", + "speed_mph NaN \n", + "\n", + " 57876 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4148 \n", + "recent_route_id 4148 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 149.67 \n", + "avg_stop_miles 5.57 \n", + "n_scheduled_trips 3 \n", + "frequency 0.38 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.91 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.64 \n", + "pct_rt_journey_atleast2_vp 0.64 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 2.17 \n", + "avg_rt_service_minutes 324.76 \n", + "speed_mph NaN \n", + "\n", + " 57877 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4148 \n", + "recent_route_id 4148 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 149.67 \n", + "avg_stop_miles 5.57 \n", + "n_scheduled_trips 3 \n", + "frequency 0.38 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.91 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.64 \n", + "pct_rt_journey_atleast2_vp 0.64 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 2.17 \n", + "avg_rt_service_minutes 324.76 \n", + "speed_mph NaN \n", + "\n", + " 57878 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4148 \n", + "recent_route_id 4148 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 149.67 \n", + "avg_stop_miles 5.57 \n", + "n_scheduled_trips 3 \n", + "frequency 0.38 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.91 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.64 \n", + "pct_rt_journey_atleast2_vp 0.64 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 2.17 \n", + "avg_rt_service_minutes 324.76 \n", + "speed_mph NaN \n", + "\n", + " 57879 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4148 \n", + "recent_route_id 4148 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 149.67 \n", + "avg_stop_miles 5.57 \n", + "n_scheduled_trips 3 \n", + "frequency 0.38 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.91 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.64 \n", + "pct_rt_journey_atleast2_vp 0.64 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 2.17 \n", + "avg_rt_service_minutes 324.76 \n", + "speed_mph NaN \n", + "\n", + " 57880 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4148 \n", + "recent_route_id 4148 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 149.67 \n", + "avg_stop_miles 5.57 \n", + "n_scheduled_trips 3 \n", + "frequency 0.38 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.91 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.64 \n", + "pct_rt_journey_atleast2_vp 0.64 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 2.17 \n", + "avg_rt_service_minutes 324.76 \n", + "speed_mph NaN \n", + "\n", + " 57881 \\\n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4148 \n", + "recent_route_id 4148 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 149.67 \n", + "avg_stop_miles 5.57 \n", + "n_scheduled_trips 3 \n", + "frequency 0.38 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.91 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.64 \n", + "pct_rt_journey_atleast2_vp 0.64 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 2.17 \n", + "avg_rt_service_minutes 324.76 \n", + "speed_mph NaN \n", + "\n", + " 57882 \n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "recent_combined_name 80-89 Coastal Express \n", + "route_id 4148 \n", + "recent_route_id 4148 \n", + "direction_id 1 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 149.67 \n", + "avg_stop_miles 5.57 \n", + "n_scheduled_trips 3 \n", + "frequency 0.38 \n", + "route_primary_direction Eastbound \n", + "vp_per_minute 1.91 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.64 \n", + "pct_rt_journey_atleast2_vp 0.64 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 2.17 \n", + "avg_rt_service_minutes 324.76 \n", + "speed_mph NaN " + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "route_80_89_dedup.loc[\n", + " (route_80_89_dedup.time_period == \"peak\") & (route_80_89_dedup.direction_id == 1)\n", + "][\n", + " [\n", + " \"portfolio_organization_name\",\n", + " \"recent_combined_name\",\n", + " \"route_id\",\n", + " \"recent_route_id\",\n", + " \"direction_id\",\n", + " \"time_period\",\n", + " \"avg_scheduled_service_minutes\",\n", + " \"avg_stop_miles\",\n", + " \"n_scheduled_trips\",\n", + " \"frequency\",\n", + " \"route_primary_direction\",\n", + " # \"minutes_atleast1_vp\",\n", + " # \"minutes_atleast2_vp\",\n", + " # \"total_rt_service_minutes\",\n", + " # \"total_scheduled_service_minutes\",\n", + " # \"total_vp\",\n", + " # \"vp_in_shape\",\n", + " # \"is_early\",\n", + " # \"is_ontime\",\n", + " # \"is_late\",\n", + " # \"n_vp_trips\",\n", + " \"vp_per_minute\",\n", + " \"pct_in_shape\",\n", + " \"pct_rt_journey_atleast1_vp\",\n", + " \"pct_rt_journey_atleast2_vp\",\n", + " \"pct_sched_journey_atleast1_vp\",\n", + " \"pct_sched_journey_atleast2_vp\",\n", + " \"rt_sched_journey_ratio\",\n", + " \"avg_rt_service_minutes\",\n", + " \"speed_mph\",\n", + " ]\n", + "].T" + ] + }, + { + "attachments": { + "52070240-c6b8-4bc3-b156-f97d25c44c80.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "id": "7de2bc8b-07fa-42b5-8068-d46888022742", + "metadata": {}, + "source": [ + "# Aggregation per my notebook #17\n", + "![image.png](attachment:52070240-c6b8-4bc3-b156-f97d25c44c80.png)\n", + "* Need clarification (yes even though I wrote this myself). IF the route IDs are repeated, then we leave them as two rows. What does unpacking any route IDs that are repeated across different `keys` mean?\n", + "* Confirm if two different `names` have thes ame `key` that means this is the same feed. " + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "a769acb0-7a2f-4cb4-b7e6-93571361bc9b", + "metadata": { + "tags": [] + }, + "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", + "
schedule_gtfs_dataset_keyroute_iddirection_idtime_periodavg_scheduled_service_minutesavg_stop_milesn_scheduled_tripsfrequencyservice_dateis_expressis_ferryis_railis_coverageis_localis_downtown_localis_rapidtypologynamecombined_namerecent_combined_namerecent_route_idroute_primary_directionminutes_atleast1_vpminutes_atleast2_vptotal_rt_service_minutestotal_scheduled_service_minutestotal_vpvp_in_shapeis_earlyis_ontimeis_laten_vp_tripsvp_per_minutepct_in_shapepct_rt_journey_atleast1_vppct_rt_journey_atleast2_vppct_sched_journey_atleast1_vppct_sched_journey_atleast2_vprt_sched_journey_ratioavg_rt_service_minutessched_rt_categoryspeed_mphschedule_source_record_idbase64_urlorganization_source_record_idorganization_namecaltrans_districtportfolio_organization_name
00139b1253130b33adcd4b3a4490530d20177a66b-9f33-407d-a72e-776429fb73d40all_day63.500.9220.082025-01-150.000.000.001.000.000.000.00coverageTCRTA TripShot ScheduleC70 LOOP__70C70 LOOP 700177a66b-9f33-407d-a72e-776429fb73d4Eastbound159158156.95127.0047339001123.010.821.001.001.001.001.2478.47schedule_and_vpNaNrecGeFW9Cz2cr1jJdaHR0cHM6Ly90Y3J0YS50cmlwc2hvdC5jb20vdjEvZ3Rmcy56aXA_cmVnaW9uSWQ9Q0E1NThEREMtRDdGMi00QjQ4LTlDQUMtREVFQTExMzRGODIwrec4YWVqVwJ9XqDbqTulare County Regional Transit Agency06 - Fresno / BakersfieldTulare County Regional Transit Agency
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key route_id \\\n", + "0 0139b1253130b33adcd4b3a4490530d2 0177a66b-9f33-407d-a72e-776429fb73d4 \n", + "\n", + " direction_id time_period avg_scheduled_service_minutes avg_stop_miles \\\n", + "0 0 all_day 63.50 0.92 \n", + "\n", + " n_scheduled_trips frequency service_date is_express is_ferry is_rail \\\n", + "0 2 0.08 2025-01-15 0.00 0.00 0.00 \n", + "\n", + " is_coverage is_local is_downtown_local is_rapid typology \\\n", + "0 1.00 0.00 0.00 0.00 coverage \n", + "\n", + " name combined_name recent_combined_name \\\n", + "0 TCRTA TripShot Schedule C70 LOOP__70 C70 LOOP 70 \n", + "\n", + " recent_route_id route_primary_direction \\\n", + "0 0177a66b-9f33-407d-a72e-776429fb73d4 Eastbound \n", + "\n", + " minutes_atleast1_vp minutes_atleast2_vp total_rt_service_minutes \\\n", + "0 159 158 156.95 \n", + "\n", + " total_scheduled_service_minutes total_vp vp_in_shape is_early \\\n", + "0 127.00 473 390 0 \n", + "\n", + " is_ontime is_late n_vp_trips vp_per_minute pct_in_shape \\\n", + "0 1 1 2 3.01 0.82 \n", + "\n", + " pct_rt_journey_atleast1_vp pct_rt_journey_atleast2_vp \\\n", + "0 1.00 1.00 \n", + "\n", + " pct_sched_journey_atleast1_vp pct_sched_journey_atleast2_vp \\\n", + "0 1.00 1.00 \n", + "\n", + " rt_sched_journey_ratio avg_rt_service_minutes sched_rt_category \\\n", + "0 1.24 78.47 schedule_and_vp \n", + "\n", + " speed_mph schedule_source_record_id \\\n", + "0 NaN recGeFW9Cz2cr1jJd \n", + "\n", + " base64_url \\\n", + "0 aHR0cHM6Ly90Y3J0YS50cmlwc2hvdC5jb20vdjEvZ3Rmcy56aXA_cmVnaW9uSWQ9Q0E1NThEREMtRDdGMi00QjQ4LTlDQUMtREVFQTExMzRGODIw \n", + "\n", + " organization_source_record_id organization_name \\\n", + "0 rec4YWVqVwJ9XqDbq Tulare County Regional Transit Agency \n", + "\n", + " caltrans_district portfolio_organization_name \n", + "0 06 - Fresno / Bakersfield Tulare County Regional Transit Agency " + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2.head(1)" + ] + }, + { + "cell_type": "markdown", + "id": "78657ea1-2923-4e82-ae32-3dca46621435", + "metadata": {}, + "source": [ + "## Check if route_name-direction are unique to the portfolio_organization_name" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "b9551e5c-a82f-448e-b5ce-b79d20a1f4fb", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "unique_route_names = (\n", + " df2.groupby([\"service_date\", \"recent_combined_name\"])\n", + " .agg({\"portfolio_organization_name\": \"nunique\"})\n", + " .reset_index()\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "39bf90d7-8c77-4593-aa7e-da26a9836930", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "unique_route_names2 = unique_route_names.loc[\n", + " unique_route_names.portfolio_organization_name > 1\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "8434d6cc-ff97-484d-afd2-2229defaa355", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(193, 3)" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unique_route_names2.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "4f1499a6-3ba5-4581-97ae-76e88ee07f82", + "metadata": { + "scrolled": true, + "tags": [] + }, + "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", + "
service_daterecent_combined_nameportfolio_organization_name
21192025-01-15Route 46
113582025-05-14Route 46
90442025-04-16Route 46
44412025-02-12Route 46
66942025-03-12Route 46
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name portfolio_organization_name\n", + "2119 2025-01-15 Route 4 6\n", + "11358 2025-05-14 Route 4 6\n", + "9044 2025-04-16 Route 4 6\n", + "4441 2025-02-12 Route 4 6\n", + "6694 2025-03-12 Route 4 6" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unique_route_names2.sort_values(\n", + " by=[\"portfolio_organization_name\"], ascending=False\n", + ").head()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "b8e30aff-0c5d-4a4d-b4a6-e6d6ee40c6a2", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)',\n", + " 'City of Visalia', 'City of Beaumont',\n", + " 'Antelope Valley Transit Authority', 'Redding Area Bus Authority',\n", + " 'City of Monterey Park'], dtype=object)" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2.loc[df2.recent_combined_name == \"Route 4\"].portfolio_organization_name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "219472cd-bcee-454e-905a-fadd6678a85a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "unique_route_ids = (\n", + " df2.groupby([ \"portfolio_organization_name\", \"recent_combined_name\"])\n", + " .agg({\"route_id\": \"nunique\"})\n", + " .reset_index()\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "ec03e507-5d2c-40eb-ad69-7bc3528cf16c", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "unique_route_ids2 = unique_route_ids.loc[unique_route_ids.route_id > 1]" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "e73094d3-4aab-4e37-8573-4daf653424fb", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "224" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(unique_route_ids2)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "870bb884-c57f-4af8-924f-9c77d3ad8014", + "metadata": { + "scrolled": true, + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
portfolio_organization_namerecent_combined_nameroute_id
2309Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express12
418City of Elk GroveElk Grove Commuter Route10
419City of Elk GroveElk Grove Local Route7
721City of Santa MonicaR10 Downtown LA Freeway Express3
1532Peninsula Corridor Joint Powers Board3
2310Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)90-99 CSU Channel Islands3
2307Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)70-74 East County3
704City of Santa Monica18 UCLA - Marina del Rey3
720City of Santa Monica9 Pacific Palisades3
711City of Santa Monica43 26th Street3
1247Los Angeles County Metropolitan Transportation Authority665 Metro Local Line2
1249Los Angeles County Metropolitan Transportation Authority70 Metro Local Line2
1248Los Angeles County Metropolitan Transportation Authority690 Metro Local Line2
313City and County of San FranciscoGGPS Golden Gate Park Shuttle2
1246Los Angeles County Metropolitan Transportation Authority662 Metro Local Line2
1245Los Angeles County Metropolitan Transportation Authority660 Metro Local Line2
1250Los Angeles County Metropolitan Transportation Authority720 Metro Rapid Line2
1243Los Angeles County Metropolitan Transportation Authority62 Metro Local Line2
1242Los Angeles County Metropolitan Transportation Authority617 Metro Local Line2
1244Los Angeles County Metropolitan Transportation Authority66 Metro Local Line2
1252Los Angeles County Metropolitan Transportation Authority76 Metro Local Line2
1251Los Angeles County Metropolitan Transportation Authority754 Metro Rapid Line2
1240Los Angeles County Metropolitan Transportation Authority605 Metro Local Line2
1253Los Angeles County Metropolitan Transportation Authority761 Metro Rapid Line2
1254Los Angeles County Metropolitan Transportation Authority78 Metro Local Line2
1255Los Angeles County Metropolitan Transportation Authority81 Metro Local Line2
1256Los Angeles County Metropolitan Transportation Authority857 Metro Local Line2
1257Los Angeles County Metropolitan Transportation Authority90 Metro Local Line2
1258Los Angeles County Metropolitan Transportation Authority92 Metro Local Line2
1259Los Angeles County Metropolitan Transportation Authority94 Metro Local Line2
1265Los Angeles County Metropolitan Transportation AuthorityMetro G Line (Orange) 9012
1266Los Angeles County Metropolitan Transportation AuthorityMetro J Line (Silver) 910/9502
1268Los Angeles County Metropolitan Transportation AuthoritySouth Bay Dodger Stadium Express2
1241Los Angeles County Metropolitan Transportation Authority611 Metro Local Line2
1237Los Angeles County Metropolitan Transportation Authority601 Metro Local Line2
1239Los Angeles County Metropolitan Transportation Authority603 Metro Local Line2
1225Los Angeles County Metropolitan Transportation Authority4 Metro Local Line2
1214Los Angeles County Metropolitan Transportation Authority266 Metro Local Line2
1215Los Angeles County Metropolitan Transportation Authority267 Metro Local Line2
1216Los Angeles County Metropolitan Transportation Authority268 Metro Local Line2
1217Los Angeles County Metropolitan Transportation Authority28 Metro Local Line2
1218Los Angeles County Metropolitan Transportation Authority287 Metro Local Line2
1219Los Angeles County Metropolitan Transportation Authority294 Metro Local Line2
1220Los Angeles County Metropolitan Transportation Authority296 Metro Local Line2
1221Los Angeles County Metropolitan Transportation Authority30 Metro Local Line2
1222Los Angeles County Metropolitan Transportation Authority33 Metro Local Line2
1223Los Angeles County Metropolitan Transportation Authority344 Metro Limited Line2
1224Los Angeles County Metropolitan Transportation Authority35/38 Metro Local Line2
1226Los Angeles County Metropolitan Transportation Authority40 Metro Local Line2
1238Los Angeles County Metropolitan Transportation Authority602 Metro Local Line2
1227Los Angeles County Metropolitan Transportation Authority45 Metro Local Line2
1228Los Angeles County Metropolitan Transportation Authority460 Metro Express Line2
1229Los Angeles County Metropolitan Transportation Authority487/489 Metro Express Line2
1230Los Angeles County Metropolitan Transportation Authority501 Metro Express Line2
1231Los Angeles County Metropolitan Transportation Authority51 Metro Local Line2
1232Los Angeles County Metropolitan Transportation Authority53 Metro Local Line2
1233Los Angeles County Metropolitan Transportation Authority55 Metro Local Line2
1234Los Angeles County Metropolitan Transportation Authority550 Metro Express Line2
1235Los Angeles County Metropolitan Transportation Authority577 Metro Express Line2
1236Los Angeles County Metropolitan Transportation Authority60 Metro Local Line2
1273Los Angeles World AirportsLAX to VN FlyAway - LAX to Van Nuys2
1272Los Angeles World AirportsLAX to US FlyAway - LAX to Union Station2
1360Mountain View Transportation Management AssociationC - AM Charleston, Garcia & San Antonio (Counterclockwise loop)2
1275Los Angeles World AirportsUS to LAX FlyAway - Union Station to LAX2
1276Los Angeles World AirportsVN to LAX FlyAway - Van Nuys to LAX2
1451OmniTrans82 Rancho Cucamonga - Fontana2
1452OmniTrans83 Chino - Euclid - Upland2
1453OmniTrans84 Chino - Mountain - Montclair2
1454OmniTrans85 Chino - Montclair - Chaffey College2
1455OmniTrans87 Chaffey College - Ontario -Eastvale2
1456OmniTrans88 Chino Hills - Ramona - Montclair2
1520Palo Verde Valley Transit Agency1 Blue Route2
1521Palo Verde Valley Transit Agency2 Gold Route2
1522Palo Verde Valley Transit Agency3 Red Route2
1523Palo Verde Valley Transit Agency4 Green Route2
1524Palo Verde Valley Transit Agency6 Wellness Express2
1772San Francisco Bay Area Rapid Transit DistrictBeige-N Oakland Airport to Coliseum2
1773San Francisco Bay Area Rapid Transit DistrictBlue-S Dublin/Pleasanton to Daly City2
1774San Francisco Bay Area Rapid Transit DistrictGreen-N Daly City to Berryessa/North San Jose2
1775San Francisco Bay Area Rapid Transit DistrictGrey-N Oakland Int'l Airport OAK to Coliseum2
1776San Francisco Bay Area Rapid Transit DistrictOrange-N Berryessa/North San Jose to Richmond2
1777San Francisco Bay Area Rapid Transit DistrictRed-S Richmond to SF Int'l Airport SFO/Millbrae2
1778San Francisco Bay Area Rapid Transit DistrictYellow-S Antioch to SF Int'l Airport SFO/Millbrae2
1870San Luis Obispo Regional Transit AuthorityLT Laguna Tripper2
2237Tuolumne County Transit AgencyGroveland Route Groveland Columbia Express2
2306Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)60-62 Hwy 1262
2319Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Route 12
2320Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Route 102
1450OmniTrans81 Ontario - Haven - Chaffey College2
1449OmniTrans8 San Bdno - Mentone - Crafton Hills2
1448OmniTrans66 Fontana - Foothill - Montclair2
1435OmniTrans215 Riverside - San Bdno2
1358Mountain View Transportation Management AssociationA - PM Middlefield, Clyde & Whisman2
1359Mountain View Transportation Management AssociationB - PM Shoreline, Crittenden, La Avenida2
1212Los Angeles County Metropolitan Transportation Authority260/261 Metro Local Line2
1361Mountain View Transportation Management AssociationD - AM San Antonio, Garcia & Charleston (Clockwise loop)2
1428OmniTrans1 ARMC - San Bdno - Del Rosa2
1429OmniTrans10 Fontana - Baseline - San Bdno2
1430OmniTrans14 Fontana - Foothill - San Bdno2
1431OmniTrans15 Fontana - San Bdno - Redlands2
1432OmniTrans19 Fontana - Colton - Yucaipa2
1433OmniTrans2 Cal State - Loma Linda2
1436OmniTrans22 North Rialto - Riverside Ave - ARMC2
1447OmniTrans61 Fontana -Ontario Mills -ONT- Pomona2
1437OmniTrans290 San Bdno - Ontario Mills -Montclair2
1438OmniTrans3 San Bdno - Baseline - Highland2
1439OmniTrans300 SB Connect2
1440OmniTrans305 San Bdno - Waterman - Grand Terrace2
1441OmniTrans312 Fontana - Muscoy - Cal State2
1442OmniTrans319 Yucaipa2
1443OmniTrans367 Fontana - Baseline -Chaffey College2
1444OmniTrans380 ONT Connect2
1445OmniTrans4 San Bdno - Baseline - Highland2
1446OmniTrans6 Cal State - Sierra Way - San Bdno2
1213Los Angeles County Metropolitan Transportation Authority265 Metro Local Line2
1209Los Angeles County Metropolitan Transportation Authority246 Metro Local Line2
1211Los Angeles County Metropolitan Transportation Authority258 Metro Local Line2
714City of Santa Monica5 Olympic Blvd2
628City of Roseville9_AM AM COMMUTER 92
684City of Santa MariaRt 1. Transit Ctr to Preisker Park Via N. Broadway2
694City of Santa Monica1 Main St & Santa Monica Blvd/UCLA2
696City of Santa Monica14 Bundy Dr & Centinela Ave2
698City of Santa Monica15 Barrington Ave2
700City of Santa Monica16 Wilshire Bl/Bundy Dr-Playa del Rey2
702City of Santa Monica17 Culver City Sta - UCLA2
705City of Santa Monica2 Wilshire Blvd/UCLA2
707City of Santa Monica3 Lincoln Blvd/LAX2
709City of Santa Monica41 SMC- 17th St Station- Montana2
712City of Santa Monica44 17th St Sta - SMC Bundy Campus2
716City of Santa Monica7 Pico Blvd2
1210Los Angeles County Metropolitan Transportation Authority251 Metro Local Line2
718City of Santa Monica8 Ocean Park Blvd & Westwood Bl/UCLA2
722City of Santa MonicaR12 Venice/Westwood Sta/UCLA Rapid2
724City of Santa MonicaR3 Lincoln Blvd/LAX Rapid2
726City of Santa MonicaR7 Pico Blvd Rapid2
765City of TracyArbor Arbor Shuttle2
775City of TracyE_PM Commuter Route E PM2
777City of TracyF_PM Commuter Route F PM2
779City of TracyH_PM Commuter Route H PM2
791City of TracyTH AM Tracy Hills Shuttle AM2
1153Los Angeles County Metropolitan Transportation Authority10/48 Metro Local Line2
1154Los Angeles County Metropolitan Transportation Authority102 Metro Local Line2
627City of Roseville7_AM AM COMMUTER 72
626City of Roseville6_AM AM COMMUTER 62
625City of Roseville5_AM AM COMMUTER 52
624City of Roseville4_PM PM COMMUTER 42
426City of Fresno01 FAX Q2
427City of Fresno03 HERNDON2
428City of Fresno09 SHAW2
429City of Fresno12 BRAWLEY / INSPIRATION PARK2
430City of Fresno20 HUGHES/MCKINLEY2
431City of Fresno22 WEST AVE/TULARE2
432City of Fresno26 PALM/BUTLER2
433City of Fresno28 DSS/MANCHESTER/WEST FRESNO2
434City of Fresno32 FRESNO ST2
435City of Fresno33 BELMONT2
436City of Fresno34 FIRST STREET2
437City of Fresno35 OLIVE2
438City of Fresno38 CEDAR2
439City of Fresno39 FYI/CLINTON2
440City of Fresno41 MALAGA/SHIELDS/CHESTNUT2
441City of Fresno45 ASHLAN2
442City of Fresno58 NE FRESNO2
443City of Fresno58E CHILDRENS HOSPITAL2
503City of Los AngelesCE438B2
620City of Roseville10_PM PM COMMUTER 102
621City of Roseville1_AM AM COMMUTER 12
622City of Roseville2_AM AM COMMUTER 22
623City of Roseville3_AM AM COMMUTER 32
1155Los Angeles County Metropolitan Transportation Authority105 Metro Local Line2
1156Los Angeles County Metropolitan Transportation Authority106 Metro Local Line2
1157Los Angeles County Metropolitan Transportation Authority108 Metro Local Line2
1184Los Angeles County Metropolitan Transportation Authority182 Metro Local Line2
1186Los Angeles County Metropolitan Transportation Authority20 Metro Local Line2
1187Los Angeles County Metropolitan Transportation Authority202 Metro Local Line2
1188Los Angeles County Metropolitan Transportation Authority204 Metro Local Line2
1189Los Angeles County Metropolitan Transportation Authority205 Metro Local Line2
1190Los Angeles County Metropolitan Transportation Authority206 Metro Local Line2
1191Los Angeles County Metropolitan Transportation Authority207 Metro Local Line2
1192Los Angeles County Metropolitan Transportation Authority209 Metro Local Line2
1193Los Angeles County Metropolitan Transportation Authority210 Metro Local Line2
1194Los Angeles County Metropolitan Transportation Authority211/215 Metro Local Line2
1195Los Angeles County Metropolitan Transportation Authority212 Metro Local Line2
1196Los Angeles County Metropolitan Transportation Authority217 Metro Local Line2
1197Los Angeles County Metropolitan Transportation Authority218 Metro Local Line2
1198Los Angeles County Metropolitan Transportation Authority222 Metro Local Line2
1199Los Angeles County Metropolitan Transportation Authority224 Metro Local Line2
1200Los Angeles County Metropolitan Transportation Authority230 Metro Local Line2
1201Los Angeles County Metropolitan Transportation Authority232 Metro Local Line2
1202Los Angeles County Metropolitan Transportation Authority233 Metro Local Line2
1203Los Angeles County Metropolitan Transportation Authority234 Metro Local Line2
1204Los Angeles County Metropolitan Transportation Authority235/236 Metro Local Line2
1205Los Angeles County Metropolitan Transportation Authority237 Metro Local Line2
1206Los Angeles County Metropolitan Transportation Authority240 Metro Local Line2
1207Los Angeles County Metropolitan Transportation Authority242/243 Metro Local Line2
1208Los Angeles County Metropolitan Transportation Authority244 Metro Local Line2
1185Los Angeles County Metropolitan Transportation Authority2 Metro Local Line2
1183Los Angeles County Metropolitan Transportation Authority180 Metro Local Line2
1158Los Angeles County Metropolitan Transportation Authority110 Metro Local Line2
1182Los Angeles County Metropolitan Transportation Authority18 Metro Local Line2
1159Los Angeles County Metropolitan Transportation Authority111 Metro Local Line2
1160Los Angeles County Metropolitan Transportation Authority115 Metro Local Line2
1161Los Angeles County Metropolitan Transportation Authority117 Metro Local Line2
1162Los Angeles County Metropolitan Transportation Authority120 Metro Local Line2
1163Los Angeles County Metropolitan Transportation Authority125 Metro Local Line2
1164Los Angeles County Metropolitan Transportation Authority127 Metro Local Line2
1165Los Angeles County Metropolitan Transportation Authority128 Metro Local Line2
1166Los Angeles County Metropolitan Transportation Authority134 Metro Local Line2
1167Los Angeles County Metropolitan Transportation Authority14/37 Metro Local Line2
1168Los Angeles County Metropolitan Transportation Authority150 Metro Local Line2
1169Los Angeles County Metropolitan Transportation Authority152 Metro Local Line2
1170Los Angeles County Metropolitan Transportation Authority154 Metro Local Line2
1171Los Angeles County Metropolitan Transportation Authority155 Metro Local Line2
1172Los Angeles County Metropolitan Transportation Authority158 Metro Local Line2
1173Los Angeles County Metropolitan Transportation Authority16 Metro Local Line2
1174Los Angeles County Metropolitan Transportation Authority161 Metro Local Line2
1175Los Angeles County Metropolitan Transportation Authority162 Metro Local Line2
1176Los Angeles County Metropolitan Transportation Authority164 Metro Local Line2
1177Los Angeles County Metropolitan Transportation Authority165 Metro Local Line2
1178Los Angeles County Metropolitan Transportation Authority166 Metro Local Line2
1179Los Angeles County Metropolitan Transportation Authority167 Metro Local Line2
1180Los Angeles County Metropolitan Transportation Authority169 Metro Local Line2
1181Los Angeles County Metropolitan Transportation Authority179 Metro Local Line2
2327Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)Route 22
\n", + "
" + ], + "text/plain": [ + " portfolio_organization_name \\\n", + "2309 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "418 City of Elk Grove \n", + "419 City of Elk Grove \n", + "721 City of Santa Monica \n", + "1532 Peninsula Corridor Joint Powers Board \n", + "2310 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "2307 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "704 City of Santa Monica \n", + "720 City of Santa Monica \n", + "711 City of Santa Monica \n", + "1247 Los Angeles County Metropolitan Transportation Authority \n", + "1249 Los Angeles County Metropolitan Transportation Authority \n", + "1248 Los Angeles County Metropolitan Transportation Authority \n", + "313 City and County of San Francisco \n", + "1246 Los Angeles County Metropolitan Transportation Authority \n", + "1245 Los Angeles County Metropolitan Transportation Authority \n", + "1250 Los Angeles County Metropolitan Transportation Authority \n", + "1243 Los Angeles County Metropolitan Transportation Authority \n", + "1242 Los Angeles County Metropolitan Transportation Authority \n", + "1244 Los Angeles County Metropolitan Transportation Authority \n", + "1252 Los Angeles County Metropolitan Transportation Authority \n", + "1251 Los Angeles County Metropolitan Transportation Authority \n", + "1240 Los Angeles County Metropolitan Transportation Authority \n", + "1253 Los Angeles County Metropolitan Transportation Authority \n", + "1254 Los Angeles County Metropolitan Transportation Authority \n", + "1255 Los Angeles County Metropolitan Transportation Authority \n", + "1256 Los Angeles County Metropolitan Transportation Authority \n", + "1257 Los Angeles County Metropolitan Transportation Authority \n", + "1258 Los Angeles County Metropolitan Transportation Authority \n", + "1259 Los Angeles County Metropolitan Transportation Authority \n", + "1265 Los Angeles County Metropolitan Transportation Authority \n", + "1266 Los Angeles County Metropolitan Transportation Authority \n", + "1268 Los Angeles County Metropolitan Transportation Authority \n", + "1241 Los Angeles County Metropolitan Transportation Authority \n", + "1237 Los Angeles County Metropolitan Transportation Authority \n", + "1239 Los Angeles County Metropolitan Transportation Authority \n", + "1225 Los Angeles County Metropolitan Transportation Authority \n", + "1214 Los Angeles County Metropolitan Transportation Authority \n", + "1215 Los Angeles County Metropolitan Transportation Authority \n", + "1216 Los Angeles County Metropolitan Transportation Authority \n", + "1217 Los Angeles County Metropolitan Transportation Authority \n", + "1218 Los Angeles County Metropolitan Transportation Authority \n", + "1219 Los Angeles County Metropolitan Transportation Authority \n", + "1220 Los Angeles County Metropolitan Transportation Authority \n", + "1221 Los Angeles County Metropolitan Transportation Authority \n", + "1222 Los Angeles County Metropolitan Transportation Authority \n", + "1223 Los Angeles County Metropolitan Transportation Authority \n", + "1224 Los Angeles County Metropolitan Transportation Authority \n", + "1226 Los Angeles County Metropolitan Transportation Authority \n", + "1238 Los Angeles County Metropolitan Transportation Authority \n", + "1227 Los Angeles County Metropolitan Transportation Authority \n", + "1228 Los Angeles County Metropolitan Transportation Authority \n", + "1229 Los Angeles County Metropolitan Transportation Authority \n", + "1230 Los Angeles County Metropolitan Transportation Authority \n", + "1231 Los Angeles County Metropolitan Transportation Authority \n", + "1232 Los Angeles County Metropolitan Transportation Authority \n", + "1233 Los Angeles County Metropolitan Transportation Authority \n", + "1234 Los Angeles County Metropolitan Transportation Authority \n", + "1235 Los Angeles County Metropolitan Transportation Authority \n", + "1236 Los Angeles County Metropolitan Transportation Authority \n", + "1273 Los Angeles World Airports \n", + "1272 Los Angeles World Airports \n", + "1360 Mountain View Transportation Management Association \n", + "1275 Los Angeles World Airports \n", + "1276 Los Angeles World Airports \n", + "1451 OmniTrans \n", + "1452 OmniTrans \n", + "1453 OmniTrans \n", + "1454 OmniTrans \n", + "1455 OmniTrans \n", + "1456 OmniTrans \n", + "1520 Palo Verde Valley Transit Agency \n", + "1521 Palo Verde Valley Transit Agency \n", + "1522 Palo Verde Valley Transit Agency \n", + "1523 Palo Verde Valley Transit Agency \n", + "1524 Palo Verde Valley Transit Agency \n", + "1772 San Francisco Bay Area Rapid Transit District \n", + "1773 San Francisco Bay Area Rapid Transit District \n", + "1774 San Francisco Bay Area Rapid Transit District \n", + "1775 San Francisco Bay Area Rapid Transit District \n", + "1776 San Francisco Bay Area Rapid Transit District \n", + "1777 San Francisco Bay Area Rapid Transit District \n", + "1778 San Francisco Bay Area Rapid Transit District \n", + "1870 San Luis Obispo Regional Transit Authority \n", + "2237 Tuolumne County Transit Agency \n", + "2306 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "2319 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "2320 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "1450 OmniTrans \n", + "1449 OmniTrans \n", + "1448 OmniTrans \n", + "1435 OmniTrans \n", + "1358 Mountain View Transportation Management Association \n", + "1359 Mountain View Transportation Management Association \n", + "1212 Los Angeles County Metropolitan Transportation Authority \n", + "1361 Mountain View Transportation Management Association \n", + "1428 OmniTrans \n", + "1429 OmniTrans \n", + "1430 OmniTrans \n", + "1431 OmniTrans \n", + "1432 OmniTrans \n", + "1433 OmniTrans \n", + "1436 OmniTrans \n", + "1447 OmniTrans \n", + "1437 OmniTrans \n", + "1438 OmniTrans \n", + "1439 OmniTrans \n", + "1440 OmniTrans \n", + "1441 OmniTrans \n", + "1442 OmniTrans \n", + "1443 OmniTrans \n", + "1444 OmniTrans \n", + "1445 OmniTrans \n", + "1446 OmniTrans \n", + "1213 Los Angeles County Metropolitan Transportation Authority \n", + "1209 Los Angeles County Metropolitan Transportation Authority \n", + "1211 Los Angeles County Metropolitan Transportation Authority \n", + "714 City of Santa Monica \n", + "628 City of Roseville \n", + "684 City of Santa Maria \n", + "694 City of Santa Monica \n", + "696 City of Santa Monica \n", + "698 City of Santa Monica \n", + "700 City of Santa Monica \n", + "702 City of Santa Monica \n", + "705 City of Santa Monica \n", + "707 City of Santa Monica \n", + "709 City of Santa Monica \n", + "712 City of Santa Monica \n", + "716 City of Santa Monica \n", + "1210 Los Angeles County Metropolitan Transportation Authority \n", + "718 City of Santa Monica \n", + "722 City of Santa Monica \n", + "724 City of Santa Monica \n", + "726 City of Santa Monica \n", + "765 City of Tracy \n", + "775 City of Tracy \n", + "777 City of Tracy \n", + "779 City of Tracy \n", + "791 City of Tracy \n", + "1153 Los Angeles County Metropolitan Transportation Authority \n", + "1154 Los Angeles County Metropolitan Transportation Authority \n", + "627 City of Roseville \n", + "626 City of Roseville \n", + "625 City of Roseville \n", + "624 City of Roseville \n", + "426 City of Fresno \n", + "427 City of Fresno \n", + "428 City of Fresno \n", + "429 City of Fresno \n", + "430 City of Fresno \n", + "431 City of Fresno \n", + "432 City of Fresno \n", + "433 City of Fresno \n", + "434 City of Fresno \n", + "435 City of Fresno \n", + "436 City of Fresno \n", + "437 City of Fresno \n", + "438 City of Fresno \n", + "439 City of Fresno \n", + "440 City of Fresno \n", + "441 City of Fresno \n", + "442 City of Fresno \n", + "443 City of Fresno \n", + "503 City of Los Angeles \n", + "620 City of Roseville \n", + "621 City of Roseville \n", + "622 City of Roseville \n", + "623 City of Roseville \n", + "1155 Los Angeles County Metropolitan Transportation Authority \n", + "1156 Los Angeles County Metropolitan Transportation Authority \n", + "1157 Los Angeles County Metropolitan Transportation Authority \n", + "1184 Los Angeles County Metropolitan Transportation Authority \n", + "1186 Los Angeles County Metropolitan Transportation Authority \n", + "1187 Los Angeles County Metropolitan Transportation Authority \n", + "1188 Los Angeles County Metropolitan Transportation Authority \n", + "1189 Los Angeles County Metropolitan Transportation Authority \n", + "1190 Los Angeles County Metropolitan Transportation Authority \n", + "1191 Los Angeles County Metropolitan Transportation Authority \n", + "1192 Los Angeles County Metropolitan Transportation Authority \n", + "1193 Los Angeles County Metropolitan Transportation Authority \n", + "1194 Los Angeles County Metropolitan Transportation Authority \n", + "1195 Los Angeles County Metropolitan Transportation Authority \n", + "1196 Los Angeles County Metropolitan Transportation Authority \n", + "1197 Los Angeles County Metropolitan Transportation Authority \n", + "1198 Los Angeles County Metropolitan Transportation Authority \n", + "1199 Los Angeles County Metropolitan Transportation Authority \n", + "1200 Los Angeles County Metropolitan Transportation Authority \n", + "1201 Los Angeles County Metropolitan Transportation Authority \n", + "1202 Los Angeles County Metropolitan Transportation Authority \n", + "1203 Los Angeles County Metropolitan Transportation Authority \n", + "1204 Los Angeles County Metropolitan Transportation Authority \n", + "1205 Los Angeles County Metropolitan Transportation Authority \n", + "1206 Los Angeles County Metropolitan Transportation Authority \n", + "1207 Los Angeles County Metropolitan Transportation Authority \n", + "1208 Los Angeles County Metropolitan Transportation Authority \n", + "1185 Los Angeles County Metropolitan Transportation Authority \n", + "1183 Los Angeles County Metropolitan Transportation Authority \n", + "1158 Los Angeles County Metropolitan Transportation Authority \n", + "1182 Los Angeles County Metropolitan Transportation Authority \n", + "1159 Los Angeles County Metropolitan Transportation Authority \n", + "1160 Los Angeles County Metropolitan Transportation Authority \n", + "1161 Los Angeles County Metropolitan Transportation Authority \n", + "1162 Los Angeles County Metropolitan Transportation Authority \n", + "1163 Los Angeles County Metropolitan Transportation Authority \n", + "1164 Los Angeles County Metropolitan Transportation Authority \n", + "1165 Los Angeles County Metropolitan Transportation Authority \n", + "1166 Los Angeles County Metropolitan Transportation Authority \n", + "1167 Los Angeles County Metropolitan Transportation Authority \n", + "1168 Los Angeles County Metropolitan Transportation Authority \n", + "1169 Los Angeles County Metropolitan Transportation Authority \n", + "1170 Los Angeles County Metropolitan Transportation Authority \n", + "1171 Los Angeles County Metropolitan Transportation Authority \n", + "1172 Los Angeles County Metropolitan Transportation Authority \n", + "1173 Los Angeles County Metropolitan Transportation Authority \n", + "1174 Los Angeles County Metropolitan Transportation Authority \n", + "1175 Los Angeles County Metropolitan Transportation Authority \n", + "1176 Los Angeles County Metropolitan Transportation Authority \n", + "1177 Los Angeles County Metropolitan Transportation Authority \n", + "1178 Los Angeles County Metropolitan Transportation Authority \n", + "1179 Los Angeles County Metropolitan Transportation Authority \n", + "1180 Los Angeles County Metropolitan Transportation Authority \n", + "1181 Los Angeles County Metropolitan Transportation Authority \n", + "2327 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "\n", + " recent_combined_name \\\n", + "2309 80-89 Coastal Express \n", + "418 Elk Grove Commuter Route \n", + "419 Elk Grove Local Route \n", + "721 R10 Downtown LA Freeway Express \n", + "1532 \n", + "2310 90-99 CSU Channel Islands \n", + "2307 70-74 East County \n", + "704 18 UCLA - Marina del Rey \n", + "720 9 Pacific Palisades \n", + "711 43 26th Street \n", + "1247 665 Metro Local Line \n", + "1249 70 Metro Local Line \n", + "1248 690 Metro Local Line \n", + "313 GGPS Golden Gate Park Shuttle \n", + "1246 662 Metro Local Line \n", + "1245 660 Metro Local Line \n", + "1250 720 Metro Rapid Line \n", + "1243 62 Metro Local Line \n", + "1242 617 Metro Local Line \n", + "1244 66 Metro Local Line \n", + "1252 76 Metro Local Line \n", + "1251 754 Metro Rapid Line \n", + "1240 605 Metro Local Line \n", + "1253 761 Metro Rapid Line \n", + "1254 78 Metro Local Line \n", + "1255 81 Metro Local Line \n", + "1256 857 Metro Local Line \n", + "1257 90 Metro Local Line \n", + "1258 92 Metro Local Line \n", + "1259 94 Metro Local Line \n", + "1265 Metro G Line (Orange) 901 \n", + "1266 Metro J Line (Silver) 910/950 \n", + "1268 South Bay Dodger Stadium Express \n", + "1241 611 Metro Local Line \n", + "1237 601 Metro Local Line \n", + "1239 603 Metro Local Line \n", + "1225 4 Metro Local Line \n", + "1214 266 Metro Local Line \n", + "1215 267 Metro Local Line \n", + "1216 268 Metro Local Line \n", + "1217 28 Metro Local Line \n", + "1218 287 Metro Local Line \n", + "1219 294 Metro Local Line \n", + "1220 296 Metro Local Line \n", + "1221 30 Metro Local Line \n", + "1222 33 Metro Local Line \n", + "1223 344 Metro Limited Line \n", + "1224 35/38 Metro Local Line \n", + "1226 40 Metro Local Line \n", + "1238 602 Metro Local Line \n", + "1227 45 Metro Local Line \n", + "1228 460 Metro Express Line \n", + "1229 487/489 Metro Express Line \n", + "1230 501 Metro Express Line \n", + "1231 51 Metro Local Line \n", + "1232 53 Metro Local Line \n", + "1233 55 Metro Local Line \n", + "1234 550 Metro Express Line \n", + "1235 577 Metro Express Line \n", + "1236 60 Metro Local Line \n", + "1273 LAX to VN FlyAway - LAX to Van Nuys \n", + "1272 LAX to US FlyAway - LAX to Union Station \n", + "1360 C - AM Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "1275 US to LAX FlyAway - Union Station to LAX \n", + "1276 VN to LAX FlyAway - Van Nuys to LAX \n", + "1451 82 Rancho Cucamonga - Fontana \n", + "1452 83 Chino - Euclid - Upland \n", + "1453 84 Chino - Mountain - Montclair \n", + "1454 85 Chino - Montclair - Chaffey College \n", + "1455 87 Chaffey College - Ontario -Eastvale \n", + "1456 88 Chino Hills - Ramona - Montclair \n", + "1520 1 Blue Route \n", + "1521 2 Gold Route \n", + "1522 3 Red Route \n", + "1523 4 Green Route \n", + "1524 6 Wellness Express \n", + "1772 Beige-N Oakland Airport to Coliseum \n", + "1773 Blue-S Dublin/Pleasanton to Daly City \n", + "1774 Green-N Daly City to Berryessa/North San Jose \n", + "1775 Grey-N Oakland Int'l Airport OAK to Coliseum \n", + "1776 Orange-N Berryessa/North San Jose to Richmond \n", + "1777 Red-S Richmond to SF Int'l Airport SFO/Millbrae \n", + "1778 Yellow-S Antioch to SF Int'l Airport SFO/Millbrae \n", + "1870 LT Laguna Tripper \n", + "2237 Groveland Route Groveland Columbia Express \n", + "2306 60-62 Hwy 126 \n", + "2319 Route 1 \n", + "2320 Route 10 \n", + "1450 81 Ontario - Haven - Chaffey College \n", + "1449 8 San Bdno - Mentone - Crafton Hills \n", + "1448 66 Fontana - Foothill - Montclair \n", + "1435 215 Riverside - San Bdno \n", + "1358 A - PM Middlefield, Clyde & Whisman \n", + "1359 B - PM Shoreline, Crittenden, La Avenida \n", + "1212 260/261 Metro Local Line \n", + "1361 D - AM San Antonio, Garcia & Charleston (Clockwise loop) \n", + "1428 1 ARMC - San Bdno - Del Rosa \n", + "1429 10 Fontana - Baseline - San Bdno \n", + "1430 14 Fontana - Foothill - San Bdno \n", + "1431 15 Fontana - San Bdno - Redlands \n", + "1432 19 Fontana - Colton - Yucaipa \n", + "1433 2 Cal State - Loma Linda \n", + "1436 22 North Rialto - Riverside Ave - ARMC \n", + "1447 61 Fontana -Ontario Mills -ONT- Pomona \n", + "1437 290 San Bdno - Ontario Mills -Montclair \n", + "1438 3 San Bdno - Baseline - Highland \n", + "1439 300 SB Connect \n", + "1440 305 San Bdno - Waterman - Grand Terrace \n", + "1441 312 Fontana - Muscoy - Cal State \n", + "1442 319 Yucaipa \n", + "1443 367 Fontana - Baseline -Chaffey College \n", + "1444 380 ONT Connect \n", + "1445 4 San Bdno - Baseline - Highland \n", + "1446 6 Cal State - Sierra Way - San Bdno \n", + "1213 265 Metro Local Line \n", + "1209 246 Metro Local Line \n", + "1211 258 Metro Local Line \n", + "714 5 Olympic Blvd \n", + "628 9_AM AM COMMUTER 9 \n", + "684 Rt 1. Transit Ctr to Preisker Park Via N. Broadway \n", + "694 1 Main St & Santa Monica Blvd/UCLA \n", + "696 14 Bundy Dr & Centinela Ave \n", + "698 15 Barrington Ave \n", + "700 16 Wilshire Bl/Bundy Dr-Playa del Rey \n", + "702 17 Culver City Sta - UCLA \n", + "705 2 Wilshire Blvd/UCLA \n", + "707 3 Lincoln Blvd/LAX \n", + "709 41 SMC- 17th St Station- Montana \n", + "712 44 17th St Sta - SMC Bundy Campus \n", + "716 7 Pico Blvd \n", + "1210 251 Metro Local Line \n", + "718 8 Ocean Park Blvd & Westwood Bl/UCLA \n", + "722 R12 Venice/Westwood Sta/UCLA Rapid \n", + "724 R3 Lincoln Blvd/LAX Rapid \n", + "726 R7 Pico Blvd Rapid \n", + "765 Arbor Arbor Shuttle \n", + "775 E_PM Commuter Route E PM \n", + "777 F_PM Commuter Route F PM \n", + "779 H_PM Commuter Route H PM \n", + "791 TH AM Tracy Hills Shuttle AM \n", + "1153 10/48 Metro Local Line \n", + "1154 102 Metro Local Line \n", + "627 7_AM AM COMMUTER 7 \n", + "626 6_AM AM COMMUTER 6 \n", + "625 5_AM AM COMMUTER 5 \n", + "624 4_PM PM COMMUTER 4 \n", + "426 01 FAX Q \n", + "427 03 HERNDON \n", + "428 09 SHAW \n", + "429 12 BRAWLEY / INSPIRATION PARK \n", + "430 20 HUGHES/MCKINLEY \n", + "431 22 WEST AVE/TULARE \n", + "432 26 PALM/BUTLER \n", + "433 28 DSS/MANCHESTER/WEST FRESNO \n", + "434 32 FRESNO ST \n", + "435 33 BELMONT \n", + "436 34 FIRST STREET \n", + "437 35 OLIVE \n", + "438 38 CEDAR \n", + "439 39 FYI/CLINTON \n", + "440 41 MALAGA/SHIELDS/CHESTNUT \n", + "441 45 ASHLAN \n", + "442 58 NE FRESNO \n", + "443 58E CHILDRENS HOSPITAL \n", + "503 CE438B \n", + "620 10_PM PM COMMUTER 10 \n", + "621 1_AM AM COMMUTER 1 \n", + "622 2_AM AM COMMUTER 2 \n", + "623 3_AM AM COMMUTER 3 \n", + "1155 105 Metro Local Line \n", + "1156 106 Metro Local Line \n", + "1157 108 Metro Local Line \n", + "1184 182 Metro Local Line \n", + "1186 20 Metro Local Line \n", + "1187 202 Metro Local Line \n", + "1188 204 Metro Local Line \n", + "1189 205 Metro Local Line \n", + "1190 206 Metro Local Line \n", + "1191 207 Metro Local Line \n", + "1192 209 Metro Local Line \n", + "1193 210 Metro Local Line \n", + "1194 211/215 Metro Local Line \n", + "1195 212 Metro Local Line \n", + "1196 217 Metro Local Line \n", + "1197 218 Metro Local Line \n", + "1198 222 Metro Local Line \n", + "1199 224 Metro Local Line \n", + "1200 230 Metro Local Line \n", + "1201 232 Metro Local Line \n", + "1202 233 Metro Local Line \n", + "1203 234 Metro Local Line \n", + "1204 235/236 Metro Local Line \n", + "1205 237 Metro Local Line \n", + "1206 240 Metro Local Line \n", + "1207 242/243 Metro Local Line \n", + "1208 244 Metro Local Line \n", + "1185 2 Metro Local Line \n", + "1183 180 Metro Local Line \n", + "1158 110 Metro Local Line \n", + "1182 18 Metro Local Line \n", + "1159 111 Metro Local Line \n", + "1160 115 Metro Local Line \n", + "1161 117 Metro Local Line \n", + "1162 120 Metro Local Line \n", + "1163 125 Metro Local Line \n", + "1164 127 Metro Local Line \n", + "1165 128 Metro Local Line \n", + "1166 134 Metro Local Line \n", + "1167 14/37 Metro Local Line \n", + "1168 150 Metro Local Line \n", + "1169 152 Metro Local Line \n", + "1170 154 Metro Local Line \n", + "1171 155 Metro Local Line \n", + "1172 158 Metro Local Line \n", + "1173 16 Metro Local Line \n", + "1174 161 Metro Local Line \n", + "1175 162 Metro Local Line \n", + "1176 164 Metro Local Line \n", + "1177 165 Metro Local Line \n", + "1178 166 Metro Local Line \n", + "1179 167 Metro Local Line \n", + "1180 169 Metro Local Line \n", + "1181 179 Metro Local Line \n", + "2327 Route 2 \n", + "\n", + " route_id \n", + "2309 12 \n", + "418 10 \n", + "419 7 \n", + "721 3 \n", + "1532 3 \n", + "2310 3 \n", + "2307 3 \n", + "704 3 \n", + "720 3 \n", + "711 3 \n", + "1247 2 \n", + "1249 2 \n", + "1248 2 \n", + "313 2 \n", + "1246 2 \n", + "1245 2 \n", + "1250 2 \n", + "1243 2 \n", + "1242 2 \n", + "1244 2 \n", + "1252 2 \n", + "1251 2 \n", + "1240 2 \n", + "1253 2 \n", + "1254 2 \n", + "1255 2 \n", + "1256 2 \n", + "1257 2 \n", + "1258 2 \n", + "1259 2 \n", + "1265 2 \n", + "1266 2 \n", + "1268 2 \n", + "1241 2 \n", + "1237 2 \n", + "1239 2 \n", + "1225 2 \n", + "1214 2 \n", + "1215 2 \n", + "1216 2 \n", + "1217 2 \n", + "1218 2 \n", + "1219 2 \n", + "1220 2 \n", + "1221 2 \n", + "1222 2 \n", + "1223 2 \n", + "1224 2 \n", + "1226 2 \n", + "1238 2 \n", + "1227 2 \n", + "1228 2 \n", + "1229 2 \n", + "1230 2 \n", + "1231 2 \n", + "1232 2 \n", + "1233 2 \n", + "1234 2 \n", + "1235 2 \n", + "1236 2 \n", + "1273 2 \n", + "1272 2 \n", + "1360 2 \n", + "1275 2 \n", + "1276 2 \n", + "1451 2 \n", + "1452 2 \n", + "1453 2 \n", + "1454 2 \n", + "1455 2 \n", + "1456 2 \n", + "1520 2 \n", + "1521 2 \n", + "1522 2 \n", + "1523 2 \n", + "1524 2 \n", + "1772 2 \n", + "1773 2 \n", + "1774 2 \n", + "1775 2 \n", + "1776 2 \n", + "1777 2 \n", + "1778 2 \n", + "1870 2 \n", + "2237 2 \n", + "2306 2 \n", + "2319 2 \n", + "2320 2 \n", + "1450 2 \n", + "1449 2 \n", + "1448 2 \n", + "1435 2 \n", + "1358 2 \n", + "1359 2 \n", + "1212 2 \n", + "1361 2 \n", + "1428 2 \n", + "1429 2 \n", + "1430 2 \n", + "1431 2 \n", + "1432 2 \n", + "1433 2 \n", + "1436 2 \n", + "1447 2 \n", + "1437 2 \n", + "1438 2 \n", + "1439 2 \n", + "1440 2 \n", + "1441 2 \n", + "1442 2 \n", + "1443 2 \n", + "1444 2 \n", + "1445 2 \n", + "1446 2 \n", + "1213 2 \n", + "1209 2 \n", + "1211 2 \n", + "714 2 \n", + "628 2 \n", + "684 2 \n", + "694 2 \n", + "696 2 \n", + "698 2 \n", + "700 2 \n", + "702 2 \n", + "705 2 \n", + "707 2 \n", + "709 2 \n", + "712 2 \n", + "716 2 \n", + "1210 2 \n", + "718 2 \n", + "722 2 \n", + "724 2 \n", + "726 2 \n", + "765 2 \n", + "775 2 \n", + "777 2 \n", + "779 2 \n", + "791 2 \n", + "1153 2 \n", + "1154 2 \n", + "627 2 \n", + "626 2 \n", + "625 2 \n", + "624 2 \n", + "426 2 \n", + "427 2 \n", + "428 2 \n", + "429 2 \n", + "430 2 \n", + "431 2 \n", + "432 2 \n", + "433 2 \n", + "434 2 \n", + "435 2 \n", + "436 2 \n", + "437 2 \n", + "438 2 \n", + "439 2 \n", + "440 2 \n", + "441 2 \n", + "442 2 \n", + "443 2 \n", + "503 2 \n", + "620 2 \n", + "621 2 \n", + "622 2 \n", + "623 2 \n", + "1155 2 \n", + "1156 2 \n", + "1157 2 \n", + "1184 2 \n", + "1186 2 \n", + "1187 2 \n", + "1188 2 \n", + "1189 2 \n", + "1190 2 \n", + "1191 2 \n", + "1192 2 \n", + "1193 2 \n", + "1194 2 \n", + "1195 2 \n", + "1196 2 \n", + "1197 2 \n", + "1198 2 \n", + "1199 2 \n", + "1200 2 \n", + "1201 2 \n", + "1202 2 \n", + "1203 2 \n", + "1204 2 \n", + "1205 2 \n", + "1206 2 \n", + "1207 2 \n", + "1208 2 \n", + "1185 2 \n", + "1183 2 \n", + "1158 2 \n", + "1182 2 \n", + "1159 2 \n", + "1160 2 \n", + "1161 2 \n", + "1162 2 \n", + "1163 2 \n", + "1164 2 \n", + "1165 2 \n", + "1166 2 \n", + "1167 2 \n", + "1168 2 \n", + "1169 2 \n", + "1170 2 \n", + "1171 2 \n", + "1172 2 \n", + "1173 2 \n", + "1174 2 \n", + "1175 2 \n", + "1176 2 \n", + "1177 2 \n", + "1178 2 \n", + "1179 2 \n", + "1180 2 \n", + "1181 2 \n", + "2327 2 " + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unique_route_ids2.sort_values(by=[\"route_id\"], ascending=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "746f2c9c-b2f7-47f3-bc6a-0ea58edbf005", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
nameschedule_gtfs_dataset_keyportfolio_organization_name
98030Elk Grove Schedule89b0a03002512a909fe8e1a5d00a78a5City of Elk Grove
\n", + "
" + ], + "text/plain": [ + " name schedule_gtfs_dataset_key \\\n", + "98030 Elk Grove Schedule 89b0a03002512a909fe8e1a5d00a78a5 \n", + "\n", + " portfolio_organization_name \n", + "98030 City of Elk Grove " + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2.loc[df2.portfolio_organization_name == \"City of Elk Grove\"][\n", + " [\"name\", \"schedule_gtfs_dataset_key\", \"portfolio_organization_name\"]\n", + "].drop_duplicates()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2595f49a-0970-4ea9-b271-bb85030fb437", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "df2.loc[(df2.recent_combined_name == \"18 UCLA - Marina del Rey\") & (df2.time_period == \"peak\") & (df2.direction_id == 0)][\n", + " [\n", + " \"portfolio_organization_name\",\n", + " \"recent_combined_name\",\n", + " \"route_id\",\n", + " \"direction_id\",\n", + " \"time_period\",\n", + " \"avg_scheduled_service_minutes\",\n", + " \"avg_stop_miles\",\n", + " \"n_scheduled_trips\",\n", + " \"frequency\",\n", + " \"route_primary_direction\",\n", + " # \"minutes_atleast1_vp\",\n", + " # \"minutes_atleast2_vp\",\n", + " # \"total_rt_service_minutes\",\n", + " # \"total_scheduled_service_minutes\",\n", + " # \"total_vp\",\n", + " # \"vp_in_shape\",\n", + " # \"is_early\",\n", + " # \"is_ontime\",\n", + " # \"is_late\",\n", + " # \"n_vp_trips\",\n", + " \"vp_per_minute\",\n", + " \"pct_in_shape\",\n", + " \"pct_rt_journey_atleast1_vp\",\n", + " \"pct_rt_journey_atleast2_vp\",\n", + " \"pct_sched_journey_atleast1_vp\",\n", + " \"pct_sched_journey_atleast2_vp\",\n", + " \"rt_sched_journey_ratio\",\n", + " \"avg_rt_service_minutes\",\n", + " \"speed_mph\",\n", + " ]\n", + "].T" + ] + }, + { + "cell_type": "markdown", + "id": "f28eefca-a5a3-4b70-97d6-48581cc330f0", + "metadata": { + "tags": [] + }, + "source": [ + "## De duplicating on key, name, and portfolio_organization_name" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cd779907-b92f-437c-8e71-5232bed3b1b5", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "df3 = df2.drop_duplicates(\n", + " subset=[\n", + " \"name\",\n", + " \"service_date\",\n", + " \"schedule_gtfs_dataset_key\",\n", + " \"portfolio_organization_name\",\n", + " \"recent_combined_name\",\n", + " \"route_id\",\n", + " \"time_period\",\n", + " \"direction_id\",\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "401b6301-cb97-42ae-ba3a-1ec47cb43cab", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Use only 80-89 Coastal Express\n", + "df3 = df3.loc[\n", + " (df3.portfolio_organization_name == portfolio_name)\n", + " & (df3.recent_combined_name == \"80-89 Coastal Express\")\n", + " & (df3.service_date == \"2025-05-14T00:00:00.000000000\")\n", + " & (df3.time_period == \"all_day\")\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eb88bb5b-33c4-4911-a844-14856b11f268", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "crosswalk_cols = [\n", + " \"schedule_gtfs_dataset_key\",\n", + " \"name\",\n", + " \"portfolio_organization_name\",\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "023dd283-efa9-4606-98f1-491d43fa1ff2", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "df3.columns" + ] + }, + { + "cell_type": "markdown", + "id": "f1362d85-3da7-48c2-8ba2-6d49539583f7", + "metadata": {}, + "source": [ + "## Aggregaate?\n", + "* `route_id`, `recent_route_id`, `combined_name`, and `sched_rt_category` all cause multiple rows to pop up for 80-89 Coastal Express\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a140d790-de57-492c-9e7d-4c716fbbe19b", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "groupby_cols = [\n", + " \"portfolio_organization_name\",\n", + " \"direction_id\",\n", + " \"service_date\",\n", + " \"recent_combined_name\",\n", + " \"time_period\",\n", + "]" + ] + }, + { + "cell_type": "markdown", + "id": "7a2ee1a1-1d26-4845-9477-5146116b520d", + "metadata": {}, + "source": [ + "### To Calculate again\n", + "* \tavg_rt_service_minutes\t\n", + "* 'avg_scheduled_service_minutes',\n", + " 'avg_stop_miles'," + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ebaa51b8-9f21-4c7d-8497-675ea1643b78", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from segment_speed_utils import segment_calcs, metrics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "182bc626-cca7-476d-a3c0-9209d45af2d7", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "to_sum = [\n", + " \"n_scheduled_trips\",\n", + " \"minutes_atleast1_vp\",\n", + " \"minutes_atleast2_vp\",\n", + " \"total_rt_service_minutes\",\n", + " \"total_scheduled_service_minutes\",\n", + " \"total_vp\",\n", + " \"vp_in_shape\",\n", + " \"is_early\",\n", + " \"is_ontime\",\n", + " \"is_late\",\n", + " \"n_vp_trips\",\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "65d2cf51-1981-47fd-9e18-738ec5753d9c", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "agg1 = (\n", + " df3.groupby(\n", + " [\n", + " \"schedule_gtfs_dataset_key\",\n", + " \"direction_id\",\n", + " \"time_period\",\n", + " \"service_date\",\n", + " \"is_express\",\n", + " \"is_ferry\",\n", + " \"is_rail\",\n", + " \"is_coverage\",\n", + " \"is_local\",\n", + " \"is_downtown_local\",\n", + " \"is_rapid\",\n", + " \"typology\",\n", + " \"recent_combined_name\",\n", + " \"route_primary_direction\",\n", + " \"schedule_source_record_id\",\n", + " \"base64_url\",\n", + " \"caltrans_district\",\n", + " \"portfolio_organization_name\",\n", + " ]\n", + " )\n", + " .agg({col: \"sum\" for col in to_sum})\n", + " .reset_index()\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "627ce0a2-53c2-4ab5-8bfb-5e43220f9e59", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "agg1 = (\n", + " agg1.rename(\n", + " columns={\n", + " \"total_rt_service_minutes\": \"rt_service_minutes\",\n", + " \"total_scheduled_service_minutes\": \"scheduled_service_minutes\",\n", + " }\n", + " )\n", + " .pipe(metrics.calculate_rt_vs_schedule_metrics)\n", + " .rename(\n", + " columns={\n", + " \"rt_service_minutes\": \"total_rt_service_minutes\",\n", + " \"scheduled_service_minutes\": \"total_scheduled_service_minutes\",\n", + " }\n", + " )\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b01ba61c-e1be-435c-8249-821fd30dde95", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "set(list(df3.columns)) - set(list(agg1.columns))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "24eb76d4-a4c7-4faa-a0cb-b34eeb760d0e", + "metadata": {}, + "outputs": [], + "source": [ + "schd_metric_cols = [\n", + " \"avg_scheduled_service_minutes\",\n", + " \"avg_stop_miles\",\n", + " \"frequency\",\n", + " \"total_scheduled_service_minutes\",\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8a93bd87-d49e-45df-974c-d31cf7d56f7e", + "metadata": {}, + "outputs": [], + "source": [ + "schd_metrics = segment_calcs.calculate_weighted_averages(\n", + " df=df3[groupby_cols + schd_metric_cols + [\"n_scheduled_trips\"]],\n", + " group_cols=groupby_cols,\n", + " metric_cols=schd_metric_cols,\n", + " weight_col=\"n_scheduled_trips\",\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c2681c31-1d45-4358-b780-5dc686de59e7", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "metrics.calculate_rt_vs_schedule_metrics??" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7ccc1e31-14cb-48bd-9ba2-6d3573220889", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "df3.loc[df3.direction_id == 1].minutes_atleast1_vp.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1a5ec264-3efb-4daf-b155-900668eb48ba", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "df3.loc[df3.direction_id == 1].total_scheduled_service_minutes.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3fd63d62-bc88-4bc2-8caf-009c3e600ff9", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "df3.loc[df3.direction_id == 1].minutes_atleast2_vp.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "11c66609-76d1-4c91-b605-635c73c1b2fb", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "df3.loc[df3.direction_id == 1][\n", + " [\"minutes_atleast1_vp\", \"total_scheduled_service_minutes\", \"minutes_atleast2_vp\"]\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9b1212c7-304a-4eb1-afc0-0934bff5db01", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "route_80_89_dedup.loc[\n", + " (route_80_89_dedup.time_period == \"all_day\") & (route_80_89_dedup.direction_id == 1)\n", + "][[\"minutes_atleast1_vp\", \"total_scheduled_service_minutes\", \"minutes_atleast2_vp\"]]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fd65fad6-9108-48a1-843e-a03eb3c8328e", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "route_80_89.loc[\n", + " (route_80_89.time_period == \"all_day\") & (route_80_89.direction_id == 1)\n", + "][[\"minutes_atleast1_vp\", \"total_scheduled_service_minutes\", \"minutes_atleast2_vp\"]]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bb67231c-52ce-4f54-88ac-784671a07387", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "agg1.T" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/gtfs_digest/24_route_dir_kernel_restarting.ipynb b/gtfs_digest/24_route_dir_kernel_restarting.ipynb deleted file mode 100644 index 55ef85cce5..0000000000 --- a/gtfs_digest/24_route_dir_kernel_restarting.ipynb +++ /dev/null @@ -1,1500 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "47f7e700-b49b-41ed-bc86-aedc43646fb9", - "metadata": {}, - "source": [ - "# Kernel keeps restarting when I want to run all of the charts in `_report_route_dir_visuals`\n", - "* To" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "34a55ec1-089d-45d1-982a-57aed8b6ab00", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "import altair as alt\n", - "import calitp_data_analysis.magics\n", - "import geopandas as gpd\n", - "import google.auth\n", - "import pandas as pd\n", - "from IPython.display import HTML, Image, Markdown, display, display_html\n", - "from omegaconf import OmegaConf\n", - "from update_vars import GTFS_DATA_DICT, RT_SCHED_GCS, SCHED_GCS, SEGMENT_GCS\n", - "\n", - "readable_dict = OmegaConf.load(\"readable2.yml\")\n", - "credentials, project = google.auth.default()\n", - "\n", - "import _report_route_dir_visuals" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "34c43c6a-68f4-4942-ad97-211c592a8184", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_columns = 100\n", - "pd.options.display.float_format = \"{:.2f}\".format\n", - "pd.set_option(\"display.max_rows\", None)\n", - "pd.set_option(\"display.max_colwidth\", None)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "182387c8-7b77-4747-a62d-573d05b69464", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# portfolio_name = \"City and County of San Francisco\"\n", - "portfolio_name = \"Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dacc3358-4f7e-45a8-8d85-29c19acca116", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "ROUTE_DIR_MONTH_FILE = GTFS_DATA_DICT.digest_tables.monthly_route_schedule_vp_report\n", - "ROUTE_DIR_QTR_FILE = \"digest/quarterly_schedule_vp_metrics_report\"\n", - "\n", - "month_df = pd.read_parquet(\n", - " f\"{RT_SCHED_GCS}{ROUTE_DIR_MONTH_FILE}.parquet\",\n", - " filters=[[(\"Portfolio Organization Name\", \"==\", portfolio_name)]],\n", - ")\n", - "\n", - "qtr_df = pd.read_parquet(\n", - " f\"{RT_SCHED_GCS}{ROUTE_DIR_QTR_FILE}.parquet\",\n", - " filters=[[(\"Portfolio Organization Name\", \"==\", portfolio_name)]],\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ea5a1e74-5827-468c-8536-0b8ef9e7a91f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "_report_route_dir_visuals.route_filter(qtr_df, month_df)" - ] - }, - { - "attachments": { - "c02ae481-96c3-4ab5-99ca-fee00f55d7af.png": { - "image/png": "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QmwOgRH8hyIEm5uWEvjYCByryJHXCxEB/D9a4abOx3NEIMLLE4USIUgd10PfuSp/pQiBj2h48uGJQi4KwbpyImUtgTj23NJ420FAhGA7tqqSdASDVgGhRk0IHKvIUSQUHBkcsg+LlwiBb8/kAo61ZssgNX6qv+jFR6kIQS0hQLtUwSKPnz/S6MlL0yRQ4+ERGMF/KEIw/DQXACUEjlXkCA6MC97A4fKqmeVBkaLUij8q+oNIAxc/4pwEw4PP7SN/AIWCrGAPSAQiEdbGF1PyuLYSAl/3AP2lChbl7KgIQWmW6/cSAiIEJYQ29vsIBt2YSTYh7rGKHBkY0ao2Sgb0SYVRyL6m6A+iBChvzAbxWxWt/R1KCPj6HAbQIXeCQIRgE7faqoUcwX8oQrDqKSjhhMB4CJzqeOJ4SEvjFgRECFrQ2kDbEQy6ATNIRCGQRUCEQBNkjQiM4D+GixCscaJJJiEgBISAEFg/Arfddtv6hTxAwqEIwQE46VIhIASEgBAQAl0jIELQtXmlnBAQAkJACAiBOgRECOpwUishIASEgBAQAl0jIELQtXmlnBAQAkJACAiBOgRECOpwUishIASEgBAQAl0jIELQtXmlnBAQAkJACAiBOgRECOpwUishIASEgBAQAl0jIELQtXmlnBAQAkJACAiBOgRECOpwUishIASEgBAQAl0jIELQtXmlnBAQAkJACAiBOgRECOpwUishIASEgBAQAl0jIELQtXmlnBAQAkJACAiBOgRECOpwUishIASEgBAQAl0jIELQtXmlnBAQAkJACAiBOgRECOpwUishIASEgBAQAl0jIELQtXmlnBAQAkJACAiBOgRECOpwUishIASEgBAQAl0jIELQtXmlnBAQAkJACAiBOgRECOpwUishIASEgBAQAl0jIELQtXmlnBAQAkJACAiBOgRECOpwUishIASEgBAQAl0jIELQtXmlnBAQAkJACAiBOgRECOpwUishIASEgBAQAl0jIELQtXnnUe6zn/3s7pOf/ORVnb3qVa/aPfzww/MMMlMvH/7wh3df+cpXznr7xje+sXvve987S+/AobXPqdeVhH73u9+9u//++/fNfvazn+1uu+220iXZ31N2totadc4NtBQeU5X/5je/uXvf+963+8xnPrP7xCc+ca4b/PahD31o9+Uvf/ncb8973vP2fz/77LNVuKYw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" - } - }, - "cell_type": "markdown", - "id": "38b88d1f-537b-45a6-8640-fa7314ff0aab", - "metadata": {}, - "source": [ - "### `text_charts` are also messed up \n", - "![image.png](attachment:c02ae481-96c3-4ab5-99ca-fee00f55d7af.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b642c744-2ed4-4255-b5ad-8b91749bde25", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "dir_0 = month_df.loc[month_df[\"Direction (0/1)\"] == 0]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "157748cd-e885-4f36-b588-98a6937b8993", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "text_table_dir_0 = _report_route_dir_visuals.reshape_df_text_table(dir_0)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ef853201-5c39-4176-8c0a-2224d9d29243", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "routes_list = month_df[\"Route\"].unique().tolist()\n", - "\n", - "route_dropdown = alt.binding_select(\n", - " options=routes_list,\n", - " name=\"Routes: \",\n", - ")\n", - "\n", - "# Column that controls the bar charts\n", - "xcol_param = alt.selection_point(\n", - " fields=[\"Route\"], value=routes_list[0], bind=route_dropdown\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a110e64c-fc20-48c6-913e-c791d3e95df2", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "(\n", - " _report_route_dir_visuals.text_chart(month_df, 1)\n", - " .add_params(xcol_param)\n", - " .transform_filter(xcol_param)\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a8d22e94-a633-482f-9cfe-a6c427220cac", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "ROUTE_DIR_MONTH_FILE" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "62c067e0-811f-45ac-abaf-e8330536d53f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "month_df = pd.read_parquet(\n", - " f\"{RT_SCHED_GCS}{ROUTE_DIR_MONTH_FILE}.parquet\",\n", - " filters=[[(\"Portfolio Organization Name\", \"==\", portfolio_name)]],\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e3d6bf1e-39e9-4d21-a48e-73ebf9cff770", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "portfolio_name" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a4793130-f70a-44c9-bca9-65021801d5f2", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "month_df.columns" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cac0b282-e9b3-4e4e-9abf-071378e427f9", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "month_80_89_df = month_df.loc[\n", - " (month_df[\"Route\"] == \"80-89 Coastal Express\")\n", - " & (month_df[\"Direction\"] == \"Eastbound\")\n", - " & (month_df.Date == \"2025-05-14\")\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3dd62a41-f7f9-4f61-ab61-f5e4f9bd50f3", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [], - "source": [ - "month_80_89_df.loc[month_80_89_df.Period == \"Peak\"][\n", - " [\"Portfolio Organization Name\", \"# Scheduled Trips\"]\n", - "].drop_duplicates()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2829ed8d-ffe4-4ff6-a3e7-54271ef47847", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "text_table_dir_0.head(2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7747a30b-7c68-42ac-ab2a-c87f45f5cfae", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "text_table_dir_0_one_route = text_table_dir_0.loc[\n", - " text_table_dir_0.Route == \"80-89 Coastal Express\"\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b9cb00f6-a63e-475a-af3b-bb097f4409a8", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "text_table_dir_0_one_route.shape" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "13261f07-15e0-4e9a-8a6a-b5d5d2b68985", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "text_table_dir_0_one_route.variable.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "90a98c41-cc1e-4254-b9de-9f753ad25c28", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [], - "source": [ - "text_table_dir_0_one_route" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4aa6f7df-5f1f-45b6-bc64-f5888b55c23a", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "text_table_dir_0_one_route.Date.unique()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7c70a239-c17e-4ede-b1f7-7a2d56ce0b1b", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "ROUTE_DIR_MONTH_FILE = (\n", - " GTFS_DATA_DICT.digest_tables.monthly_route_schedule_vp\n", - ") # Report by month\n", - "og_month_df = pd.read_parquet(f\"{RT_SCHED_GCS}{ROUTE_DIR_MONTH_FILE}.parquet\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ea43b0ff-eed2-48af-8217-791d96fc1319", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "month_80_89_og_df = og_month_df.loc[\n", - " (og_month_df[\"recent_combined_name\"] == \"80-89 Coastal Express\")\n", - " & (og_month_df[\"route_primary_direction\"] == \"Eastbound\")\n", - " & (og_month_df.service_date == \"2025-05-14\")\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f9ba66f6-bbcb-40a5-90a4-d547156b057e", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "month_80_89_og_df.route_id.unique()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9f49de5f-ef71-4108-a3a9-e57bd5437fcd", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [], - "source": [ - "month_80_89_og_df.loc[month_80_89_og_df.time_period == \"all_day\"][\n", - " [\n", - " \"route_primary_direction\",\n", - " \"organization_name\",\n", - " \"portfolio_organization_name\",\n", - " \"route_id\",\n", - " \"recent_combined_name\",\n", - " \"service_date\",\n", - " \"avg_stop_miles\",\n", - " \"n_scheduled_trips\",\n", - " \"time_period\",\n", - " ]\n", - "].sort_values(by=\"service_date\")" - ] - }, - { - "attachments": { - "c3102b90-68e9-45a9-9e0e-2b5f2e88b665.png": { - "image/png": "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" - } - }, - "cell_type": "markdown", - "id": "eb9cdf48-e357-4b33-ac85-496e0a5015d6", - "metadata": {}, - "source": [ - "### `sched_vp_per_min` is broken. It keeps displaying more than one route even when I have selected only one route from the dropdown menu\n", - "![image.png](attachment:c3102b90-68e9-45a9-9e0e-2b5f2e88b665.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f194e1f7-69ef-4439-a4b2-f170d71fcb85", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "pct_journey_with_vp_df = _report_route_dir_visuals.reshape_pct_journey_with_vp(month_df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "092872e1-4c30-4e4b-b001-2c5b4a399bbd", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "pct_journey_with_vp_df.columns" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5d1af6fd-6c96-4809-9984-fc0292c9bd90", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "pct_journey_with_vp_df.Date.unique()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "74327c2b-5a2b-4ca2-b9ca-ec2a9096c654", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "route_80_89 = pct_journey_with_vp_df.loc[\n", - " (pct_journey_with_vp_df.Route == \"80-89 Coastal Express\")\n", - " & (pct_journey_with_vp_df.Date == \"2025-05-14T00:00:00.000000000\")\n", - " & (pct_journey_with_vp_df.Direction == \"Westbound\")\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1327481e-6e9f-40a4-9540-e995b3fb0492", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [], - "source": [ - "route_80_89.sort_values(by=[\"Direction\", \"Period\"])" - ] - }, - { - "cell_type": "markdown", - "id": "ab424496-770b-499d-8d9f-c63fe27a410f", - "metadata": {}, - "source": [ - "#### This is only for direction 0 and service date of May 2025." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cbfc3498-778b-4189-93cd-f53cc998a6cc", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "month_80_89_df.columns" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e8fefbbc-6172-477e-a2c5-a0fd34753984", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "30e50c97-594b-463d-89f4-4c0663226008", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [], - "source": [ - "month_80_89_df.loc[month_80_89_df.time_period == \"all_day\"][\n", - " [\n", - " \"route_primary_direction\",\n", - " \"schedule_gtfs_dataset_key\",\n", - " \"time_period\",\n", - " \"route_id\",\n", - " \"recent_route_id\",\n", - " \"recent_combined_name\",\n", - " \"service_date\",\n", - " \"pct_sched_journey_atleast1_vp\",\n", - " \"pct_sched_journey_atleast2_vp\",\n", - " \"sched_rt_category\",\n", - " ]\n", - "].sort_values(by=[\"route_id\", \"time_period\"]).drop_duplicates()" - ] - }, - { - "cell_type": "markdown", - "id": "903bb22f-0e49-4311-9f08-497fef83e91f", - "metadata": {}, - "source": [ - "* May date, Westbound Offpeak for % Scheduled Trip w/ 1+ VP/Minute has two values: 0 and 100. This makes no sense. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b90adc46-82c1-4dc8-843c-d84728eec63b", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [], - "source": [ - "og_month_df.loc[\n", - " (og_month_df.recent_combined_name == \"80-89 Coastal Express\")\n", - " & (og_month_df.service_date == \"2024-10-16T00:00:00.000000000\",)\n", - "][\n", - " [\n", - " \"service_date\",\n", - " \"direction_id\",\n", - " \"time_period\",\n", - " \"pct_sched_journey_atleast1_vp\",\n", - " \"pct_sched_journey_atleast2_vp\",\n", - " ]\n", - "].sort_values(\n", - " by=[\"service_date\", \"direction_id\"]\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fc174f53-cfef-4a64-8a27-876997eafe0b", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "route_80_89.loc[route_80_89.Date == \"2024-10-16\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3079a7fe-8a7e-45da-91ee-3a11d456074a", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "route_80_89.Date.value_counts()" - ] - }, - { - "cell_type": "markdown", - "id": "f7b7f913-22b7-4361-8f5d-f21708fd89cc", - "metadata": {}, - "source": [ - "## The charts won't display -> The cell keeps buffering with the * sign." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e1a9b92a-85ca-40f5-aa81-b86238da6b37", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "routes_list = month_df[\"Route\"].unique().tolist()\n", - "\n", - "route_dropdown = alt.binding_select(\n", - " options=routes_list,\n", - " name=\"Routes: \",\n", - ")\n", - "# Column that controls the bar charts\n", - "xcol_param = alt.selection_point(\n", - " fields=[\"Route\"], value=routes_list[0], bind=route_dropdown\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3cc549e1-22bc-4cce-8ddd-b5b30479ed0a", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "len(month_df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7d9bf5a6-3307-4e23-a627-62d3b811dd62", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "month_df.Date.unique()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4d58ff4c-58ed-49b8-9935-5b74a353ffeb", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "len(qtr_df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "78723ac0-dfd3-42fa-84ce-6b85880e07f0", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# Charts\n", - "spatial_accuracy = (\n", - " _report_route_dir_visuals.spatial_accuracy_chart(qtr_df[qtr_df.Period == \"All Day\"])\n", - " .add_params(xcol_param)\n", - " .transform_filter(xcol_param)\n", - ")\n", - "\n", - "avg_scheduled_min = (\n", - " _report_route_dir_visuals.avg_scheduled_min_chart(\n", - " qtr_df[qtr_df.Period == \"All Day\"]\n", - " )\n", - " .add_params(xcol_param)\n", - " .transform_filter(xcol_param)\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ded20073-383e-4c58-8c1d-c916648f8b54", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "vp_per_minute = (\n", - " _report_route_dir_visuals.vp_per_minute_chart(qtr_df[qtr_df.Period == \"All Day\"])\n", - " .add_params(xcol_param)\n", - " .transform_filter(xcol_param)\n", - ")\n", - "speed = (\n", - " _report_route_dir_visuals.speed_chart(month_df)\n", - " .add_params(xcol_param)\n", - " .transform_filter(xcol_param)\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a622dcc3-f9a4-4137-bb90-c93d58346f2c", - "metadata": {}, - "outputs": [], - "source": [ - "sched_vp_per_min = (\n", - " _report_route_dir_visuals.sched_vp_per_min_chart(\n", - " month_df[month_df.Period == \"All Day\"]\n", - " )\n", - " .add_params(xcol_param)\n", - " .transform_filter(xcol_param)\n", - ")\n", - "\n", - "text_dir0 = (\n", - " _report_route_dir_visuals.text_chart(month_df, 0)\n", - " .add_params(xcol_param)\n", - " .transform_filter(xcol_param)\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7b1059d9-a75c-4a9e-a861-cb6f937a72c9", - "metadata": {}, - "outputs": [], - "source": [ - "text_dir1 = (\n", - " _report_route_dir_visuals.text_chart(month_df, 1)\n", - " .add_params(xcol_param)\n", - " .transform_filter(xcol_param)\n", - ")\n", - "\n", - "timeliness_dir0 = (\n", - " _report_route_dir_visuals.timeliness_chart(\n", - " month_df[month_df.Period == \"All Day\"], 0\n", - " )\n", - " .add_params(xcol_param)\n", - " .transform_filter(xcol_param)\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fc87e9da-21fe-4009-8faf-e563e2da4dd7", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "df2 = _report_route_dir_visuals.reshape_timeliness_trips(month_df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "35dd611e-588a-4022-a08c-840fb892b2ae", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "len(df2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ca48867b-fbdf-4201-8684-768f27d131ad", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "len(df2.drop_duplicates())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1ef94e70-0771-4211-b1e1-f6588b8cd4ca", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "text_dir1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8f0f314f-2fdb-47e7-b445-355cf54db983", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "timeliness_dir0" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "abc0f621-3e1c-494c-9031-251931f77d49", - "metadata": {}, - "outputs": [], - "source": [ - "timeliness_dir1 = (\n", - " _report_route_dir_visuals.timeliness_chart(\n", - " month_df[month_df.Period == \"All Day\"], 1\n", - " )\n", - " .add_params(xcol_param)\n", - " .transform_filter(xcol_param)\n", - ")\n", - "\n", - "n_scheduled_dir0 = (\n", - " _report_route_dir_visuals.total_scheduled_trips_chart(\n", - " month_df[month_df.Period == \"All Day\"], 0\n", - " )\n", - " .add_params(xcol_param)\n", - " .transform_filter(xcol_param)\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f0ead42e-9aa5-4c91-8c6b-ea54924c72b6", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "timeliness_dir1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e94ecf86-e47e-423b-b4bc-0083432f95aa", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "n_scheduled_dir0" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6fdb50d8-0873-4eff-9ad1-c3733e21994f", - "metadata": {}, - "outputs": [], - "source": [ - "n_scheduled_dir1 = (\n", - " _report_route_dir_visuals.total_scheduled_trips_chart(\n", - " month_df[month_df.Period == \"All Day\"], 1\n", - " )\n", - " .add_params(xcol_param)\n", - " .transform_filter(xcol_param)\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "89f78206-92c4-47a0-9572-d5a8552ff8b8", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "n_scheduled_dir1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b2bec5ce-1b2a-4549-9d17-d0291327b109", - "metadata": {}, - "outputs": [], - "source": [ - "n_freq_dir0 = (\n", - " _report_route_dir_visuals.headway_chart(month_df[month_df.Period != \"All Day\"], 0)\n", - " .add_params(xcol_param)\n", - " .transform_filter(xcol_param)\n", - ")\n", - "\n", - "n_freq_dir1 = (\n", - " _report_route_dir_visuals.headway_chart(month_df[month_df.Period != \"All Day\"], 1)\n", - " .add_params(xcol_param)\n", - " .transform_filter(xcol_param)\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "70b1fa77-9476-4c96-920c-8563720f8080", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "data_quality = _report_route_dir_visuals.divider_chart(\n", - " month_df, readable_dict.data_quality_graph.title\n", - ")\n", - "rider_quality = _report_route_dir_visuals.divider_chart(\n", - " month_df, readable_dict.rider_quality_graph.title\n", - ")\n", - "summary = _report_route_dir_visuals.divider_chart(\n", - " month_df, readable_dict.summary_graph.title\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c388e6ef-d6ca-4a9b-bc00-4538d260e9d1", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "chart_list = [\n", - " summary,\n", - " text_dir0,\n", - " text_dir1,\n", - " rider_quality,\n", - " avg_scheduled_min,\n", - " timeliness_dir0,\n", - " timeliness_dir1,\n", - " n_freq_dir0,\n", - " n_scheduled_dir0,\n", - " n_freq_dir1,\n", - " n_scheduled_dir1,\n", - " speed,\n", - " data_quality,\n", - " spatial_accuracy,\n", - " vp_per_minute,\n", - " sched_vp_per_min,\n", - "]\n", - "chart = alt.vconcat(*chart_list)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6da91b05-49bc-4b08-a818-f9785536eb51", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "chart" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "113bc43d-82eb-4a9f-a2fc-c99c95156e0e", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [], - "source": [ - "month_df.loc[month_df.Route == \"80-89 Coastal Express\"][\n", - " [\"Direction\", \"Date\", \"Average VP per Minute\"]\n", - "].sort_values(by=[\"Date\", \"Direction\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5d37a7a-c36d-44d8-9205-2aea8497217b", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [], - "source": [ - "qtr_df.loc[qtr_df.Route == \"80-89 Coastal Express\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "adf6eccc-65d0-47dd-b8ef-78f97b93c9e0", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# chart_summary_list = [summary, text_dir0, text_dir1]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "35d6d16e-0d35-4178-80ce-f079cbc3dfb4", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# summary_chart = alt.vconcat(*chart_summary_list)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d739e03a-dcd2-4b39-8c43-3f712132501f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# summary_chart" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fc3cf1f5-dfd3-4f62-b1d0-1c37b9651b5b", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "data_quality_list = [\n", - " data_quality,\n", - " spatial_accuracy,\n", - " vp_per_minute,\n", - " sched_vp_per_min,\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "697d6f0f-adbf-45a2-be83-e8fc58e5bcb4", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# sched_vp_per_min" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2a1bc534-1251-47b8-8fa6-1ee83b9bce94", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# data_quality_chart = alt.vconcat(*data_quality_list)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fc5b8595-2b25-456e-bbf7-18981194373d", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# data_quality_chart" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7eb109fd-0dcd-4818-90d0-dc4b3f8b09b9", - "metadata": {}, - "outputs": [], - "source": [ - "timeliness_dir1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a2efdd20-fb2e-4334-bf27-7ac235a44c94", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "rider_quality_list1 = [\n", - " rider_quality,\n", - " avg_scheduled_min,\n", - " timeliness_dir0,\n", - " timeliness_dir1,\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8dca4aba-d535-42c3-af59-c3cd0aff905b", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "rider_quality_chart1 = alt.vconcat(*rider_quality_list1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76329487-0406-43f6-acb3-73ddac185395", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# rider_quality_chart1" - ] - }, - { - "cell_type": "markdown", - "id": "a75f5bb3-94ca-42ab-82ee-cf38d1bb1a48", - "metadata": {}, - "source": [ - "### Something is wrong with # of Scheduled Trips" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0a92d5ce-ffb8-4718-ba4a-0bf80030008a", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [], - "source": [ - "route_subset = month_df.loc[\n", - " (month_df.Route == \"Route 15\") | (month_df.Route == \"Route 18\")\n", - "][[\"Direction\", \"Date\", \"Route\", \"# Scheduled Trips\", \"Period\"]].drop_duplicates()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "940bf105-1057-4620-b123-12bb432c4deb", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "route_subset.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "73318d54-d8f1-49cc-9a64-4abd5e0993f6", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "sched_trip_dict = readable_dict.n_scheduled_graph" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "312c2d6a-10b4-49f3-94e4-787881dac8d0", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "base = _report_route_dir_visuals.bar_chart(\n", - " x_col=\"Date:T\",\n", - " y_col=\"# Scheduled Trips\",\n", - " color_col=\"Period:N\",\n", - " color_scheme=[*sched_trip_dict.colors],\n", - " tooltip_cols=[*sched_trip_dict.tooltip],\n", - " date_format=\"%b %Y\",\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3d0a10d7-0ef8-4913-a6c5-f664ce4a15d2", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "chart = alt.layer(base, data=route_subset)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c39b8c0c-9036-4e45-bc66-6d5e32474985", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "chart.add_params(xcol_param).transform_filter(xcol_param)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fb1d46fb-51d2-45f3-957b-8ce6d50664fd", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "rider_quality_list2 = [\n", - " n_scheduled_dir0,\n", - " n_scheduled_dir1,\n", - " speed,\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "87148575-7bc9-42e2-bbee-b3672cf39348", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# rider_quality_chart2 = alt.vconcat(*rider_quality_list2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "34462ed6-872c-473d-8132-f340e21a4b7e", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [], - "source": [ - "month_df.loc[(month_df.Route == \"Route 17\")][\n", - " [\"Date\", \"# Scheduled Trips\"]\n", - "].drop_duplicates()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "528d6f9c-7f62-435f-b720-70e16ce26a91", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "rider_quality_chart2" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2edd84a7-a311-459c-96e0-4e66f17bb339", - "metadata": {}, - "outputs": [], - "source": [ - "# chart = (_report_route_dir_visuals.route_filter(route_dir_qtr_df,route_dir_month_df))" - ] - }, - { - "cell_type": "markdown", - "id": "21933ed4-c399-4407-8347-97a5df9037c9", - "metadata": {}, - "source": [ - "## Text charts are causing the kernel to die for some notebooks." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "60763e92-ff1a-41a2-9966-6d3d124f18cb", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# _report_route_dir_visuals.route_filter(route_dir_qtr_df, route_dir_month_df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "93d30339-076a-4d15-81d0-56f0fe8e4b38", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "route_dir_month_df.shape" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "eda4ae9b-a2b6-460b-84fd-00e365b0a88e", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "route_dir_month_df = route_dir_month_df.loc[route_dir_month_df[\"Direction (0/1)\"] == 0]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dc249fdd-beff-4bd5-9954-9c176dfaa7d2", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "len(route_dir_month_df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3b5d25a5-fc85-40d5-b5b7-d382a702bf83", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "route_dir_month_df.head(1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bf27c5e3-84a0-4313-aae6-36b1e2e03308", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "route_stats_df = _report_route_dir_visuals.reshape_route_stats(route_dir_month_df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5295d1d-f620-4e14-b1db-7292bbc135f8", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "len(route_stats_df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f52a7bd5-a03a-49d2-a776-e4727cc5263b", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "len(route_stats_df.drop_duplicates())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9b613c8d-9fbe-4332-b1c6-f6ad91c80369", - "metadata": {}, - "outputs": [], - "source": [ - "route_stats_df = route_stats_df.drop_duplicates()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "80b712d9-7d7c-481b-b8e5-048a51c20b22", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# Reshape dataframe before plotting\n", - "melt1 = route_stats_df.melt(\n", - " id_vars=[\n", - " \"Date\",\n", - " \"Route\",\n", - " \"Direction\",\n", - " \"Direction (0/1)\",\n", - " ],\n", - " value_vars=[\n", - " \"Average Stop Distance (Miles)\",\n", - " \"# Scheduled Trips\",\n", - " \"Gtfs Availability\",\n", - " \"Peak Avg Speed (Mph)\",\n", - " \"Peak Scheduled Trips\",\n", - " \"Peak Headway (Minutes)\",\n", - " \"Offpeak Avg Speed (Mph)\",\n", - " \"Offpeak Scheduled Trips\",\n", - " \"Offpeak Headway (Minutes)\",\n", - " ],\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4de793aa-43e4-4b5c-bc04-fe4fe9ab1bae", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "route_stats_df[\"Date\"].unique()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "85e91529-d1dd-4bad-9e86-7e262319bd0f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "len(melt1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b99bbe62-651c-4561-9d37-12f3affd833b", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "text_dir0 = _report_route_dir_visuals.text_chart(route_dir_month_df, 0)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "02213a5c-b8ca-4e1f-b817-dbc70712b352", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "text_dir0" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "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.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/gtfs_digest/25_correct_crosswalk.ipynb b/gtfs_digest/25_correct_crosswalk.ipynb deleted file mode 100644 index 010b54d41e..0000000000 --- a/gtfs_digest/25_correct_crosswalk.ipynb +++ /dev/null @@ -1,1791 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0a7220c0-eb1c-468c-a2d6-b0a7e765f66e", - "metadata": {}, - "source": [ - "# Correct Crosswalk\n", - "ok - rewind a lot. within merge_data, there's this comment. After having the portfolio_organization_names merged in, we looked at what made the grain correct, which is name-portfolio_organization_name-service_date. That means that if you back up the lines before that...reading in columns like organization_name to begin with was what created this 1:m issue, which we now know how to handle.\n", - " \n", - "```\n", - "df = df.assign(\n", - " caltrans_district = df.caltrans_district.map(\n", - " portfolio_utils.CALTRANS_DISTRICT_DICT\n", - " )\n", - " ).pipe(\n", - " portfolio_utils.standardize_portfolio_organization_names, \n", - " PORTFOLIO_ORGANIZATIONS_DICT\n", - " )\n", - " # to aggregate up to organization, \n", - " # group by name-service_date-portfolio_organization_name\n", - " # because name indicates different feeds, so we want to sum those.\n", - "```\n", - "Back up to this section right before: \n", - "\n", - "```\n", - "crosswalk_cols = [\n", - " \"schedule_gtfs_dataset_key\",\n", - " \"name\",\n", - " \"schedule_source_record_id\",\n", - " \"base64_url\",\n", - " #\"organization_source_record_id\", # remove this column which gave us 1:m issue\n", - " #\"organization_name\", # remove this column which gave us the 1:m issue\n", - " \"caltrans_district\"\n", - " ]\n", - " df = time_series_utils.concatenate_datasets_across_dates(\n", - " SCHED_GCS,\n", - " FILE,\n", - " date_list,\n", - " data_type = \"df\",\n", - " columns = crosswalk_cols\n", - " )\n", - "```\n", - "continue pipe for caltrans district, \n", - "continue pipe for portfolio_organization_name, which uses (schedule_gtfs_dataset)name to map the dictionary\n", - " \n", - "This change actually addresses the core issue after we looked at it and determined that (schedule_gtfs_dataset)_name-portfolio_organization_name-service_date is the correct grain. Make this change and check how your routes look.\n", - " \n", - "I got to this point because I looked at why your rows had City of Moorpark, City of Thousand Oaks, and that doesn't seem correct. \n", - "In the yaml, there is one entry: Thousand Oaks Flex: City of Thousand Oaks, but when I read in monthly_route_schedule_vp, I did find Thousand Oaks Flex in there at all. Flex is not the problem. \n", - "However, the presence of City of Thousand Oaks tells me organization_name is still somewhere, and that shouldn't be used because we've already moved away from it, hence never using it in the aggregation after.\n", - "It's showing up in merge_data because the crosswalk wasn't adjusted to remove it. We don't need those columns, it gave us issues already, and now it needs to be cleaned up and removed.\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "ea27c5ab-8392-4765-8148-18bce48f7126", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "import altair as alt\n", - "import calitp_data_analysis.magics\n", - "import geopandas as gpd\n", - "import google.auth\n", - "import pandas as pd\n", - "import yaml\n", - "from IPython.display import HTML, Image, Markdown, display, display_html\n", - "from omegaconf import OmegaConf\n", - "from update_vars import GTFS_DATA_DICT, RT_SCHED_GCS, SCHED_GCS, SEGMENT_GCS\n", - "from segment_speed_utils import gtfs_schedule_wrangling, time_series_utils\n", - "from shared_utils import gtfs_utils_v2, catalog_utils, rt_dates, rt_utils, publish_utils, portfolio_utils\n", - "readable_dict = OmegaConf.load(\"readable2.yml\")\n", - "credentials, project = google.auth.default()\n", - "\n", - "import _report_route_dir_visuals\n", - "import merge_data" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "98eb24df-5ceb-4d92-879e-4eafab6c3938", - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_columns = 100\n", - "pd.options.display.float_format = \"{:.2f}\".format\n", - "pd.set_option(\"display.max_rows\", None)\n", - "pd.set_option(\"display.max_colwidth\", None)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "15335106-fd89-40aa-8012-4d917293db1c", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# portfolio_name = \"City and County of San Francisco\"\n", - "portfolio_name = \"Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\"" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "3550f3cb-36fc-443e-9157-e4e5ff3c49e8", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "date_list = rt_dates.y2025_dates" - ] - }, - { - "cell_type": "markdown", - "id": "f34ac019-d424-4c95-890c-f24e5e28f9c2", - "metadata": {}, - "source": [ - "## `concatenate_crosswalk_organization`" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "e47a5a06-f984-40a3-ba2a-2922f65b47a0", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "FILE = GTFS_DATA_DICT.schedule_tables.gtfs_key_crosswalk\n", - " \n", - "crosswalk_cols = [\n", - " \"schedule_gtfs_dataset_key\",\n", - " \"name\",\n", - " \"schedule_source_record_id\",\n", - " \"base64_url\",\n", - " #\"organization_source_record_id\",\n", - " #\"organization_name\",\n", - " \"caltrans_district\"\n", - " ]" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "68dab544-18b2-41a4-8c09-c5a1d4b9fb21", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "df = time_series_utils.concatenate_datasets_across_dates(\n", - " SCHED_GCS,\n", - " FILE,\n", - " date_list,\n", - " data_type = \"df\",\n", - " columns = crosswalk_cols\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "efed2684-3b3f-4491-9a17-ca1f39f704d7", - "metadata": { - "tags": [] - }, - "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", - "
schedule_gtfs_dataset_keynameschedule_source_record_idbase64_urlcaltrans_districtservice_date
0ff1bc5dde661d62c877165421e9ca257Santa Ynez Mecatran SchedulerecuWhPXfxMatv6rLaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==05 - San Luis Obispo2025-01-15
1f4c3ea214214ee0d96f7646b3e9d69dcSLO Peak Transit Schedulerec0EeeizKvsEDfRQaHR0cDovL2RhdGEucGVha3RyYW5zaXQuY29tL3N0YXRpY2d0ZnMvMS9ndGZzLnppcA==05 - San Luis Obispo2025-01-15
\n", - "
" - ], - "text/plain": [ - " schedule_gtfs_dataset_key name \\\n", - "0 ff1bc5dde661d62c877165421e9ca257 Santa Ynez Mecatran Schedule \n", - "1 f4c3ea214214ee0d96f7646b3e9d69dc SLO Peak Transit Schedule \n", - "\n", - " schedule_source_record_id \\\n", - "0 recuWhPXfxMatv6rL \n", - "1 rec0EeeizKvsEDfRQ \n", - "\n", - " base64_url \\\n", - "0 aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA== \n", - "1 aHR0cDovL2RhdGEucGVha3RyYW5zaXQuY29tL3N0YXRpY2d0ZnMvMS9ndGZzLnppcA== \n", - "\n", - " caltrans_district service_date \n", - "0 05 - San Luis Obispo 2025-01-15 \n", - "1 05 - San Luis Obispo 2025-01-15 " - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.head(2)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "e2ae131e-9b86-423c-878d-73e80dc1912a", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "\n", - "with open(\n", - " \"../_shared_utils/shared_utils/portfolio_organization_name.yml\", \"r\"\n", - ") as f:\n", - " PORTFOLIO_ORGANIZATIONS_DICT = yaml.safe_load(f)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "78487a16-5ddb-4bb2-8222-f1b8b07a7169", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "df = df.assign(\n", - " caltrans_district = df.caltrans_district.map(\n", - " portfolio_utils.CALTRANS_DISTRICT_DICT\n", - " )\n", - " ).pipe(\n", - " portfolio_utils.standardize_portfolio_organization_names, \n", - " PORTFOLIO_ORGANIZATIONS_DICT\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "ccade4de-aa73-4e0f-9bed-eefda4b997fa", - "metadata": { - "tags": [] - }, - "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", - "
schedule_gtfs_dataset_keynameschedule_source_record_idbase64_urlcaltrans_districtservice_dateportfolio_organization_name
0ff1bc5dde661d62c877165421e9ca257Santa Ynez Mecatran SchedulerecuWhPXfxMatv6rLaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==05 - San Luis Obispo / Santa Barbara2025-01-15City of Solvang
1f4c3ea214214ee0d96f7646b3e9d69dcSLO Peak Transit Schedulerec0EeeizKvsEDfRQaHR0cDovL2RhdGEucGVha3RyYW5zaXQuY29tL3N0YXRpY2d0ZnMvMS9ndGZzLnppcA==05 - San Luis Obispo / Santa Barbara2025-01-15San Luis Obispo Regional Transit Authority
\n", - "
" - ], - "text/plain": [ - " schedule_gtfs_dataset_key name \\\n", - "0 ff1bc5dde661d62c877165421e9ca257 Santa Ynez Mecatran Schedule \n", - "1 f4c3ea214214ee0d96f7646b3e9d69dc SLO Peak Transit Schedule \n", - "\n", - " schedule_source_record_id \\\n", - "0 recuWhPXfxMatv6rL \n", - "1 rec0EeeizKvsEDfRQ \n", - "\n", - " base64_url \\\n", - "0 aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA== \n", - "1 aHR0cDovL2RhdGEucGVha3RyYW5zaXQuY29tL3N0YXRpY2d0ZnMvMS9ndGZzLnppcA== \n", - "\n", - " caltrans_district service_date \\\n", - "0 05 - San Luis Obispo / Santa Barbara 2025-01-15 \n", - "1 05 - San Luis Obispo / Santa Barbara 2025-01-15 \n", - "\n", - " portfolio_organization_name \n", - "0 City of Solvang \n", - "1 San Luis Obispo Regional Transit Authority " - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.head(2)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "c24c2442-e501-48c2-b153-3c4809c0f923", - "metadata": { - "tags": [] - }, - "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", - "
schedule_gtfs_dataset_keynameschedule_source_record_idbase64_urlcaltrans_districtservice_dateportfolio_organization_name
1621770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz07 - Los Angeles / Ventura2025-01-15Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1621770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz07 - Los Angeles / Ventura2025-02-12Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1591770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz07 - Los Angeles / Ventura2025-03-12Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1621770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz07 - Los Angeles / Ventura2025-04-16Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
1581770249a5a2e770ca90628434d4934b1VCTC GMV SchedulerecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz07 - Los Angeles / Ventura2025-05-14Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
\n", - "
" - ], - "text/plain": [ - " schedule_gtfs_dataset_key name \\\n", - "162 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", - "162 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", - "159 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", - "162 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", - "158 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule \n", - "\n", - " schedule_source_record_id base64_url \\\n", - "162 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", - "162 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", - "159 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", - "162 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", - "158 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", - "\n", - " caltrans_district service_date \\\n", - "162 07 - Los Angeles / Ventura 2025-01-15 \n", - "162 07 - Los Angeles / Ventura 2025-02-12 \n", - "159 07 - Los Angeles / Ventura 2025-03-12 \n", - "162 07 - Los Angeles / Ventura 2025-04-16 \n", - "158 07 - Los Angeles / Ventura 2025-05-14 \n", - "\n", - " portfolio_organization_name \n", - "162 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "162 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "159 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "162 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "158 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) " - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[df.portfolio_organization_name == portfolio_name]" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "d8697ac0-dc3f-451c-883c-16ecdbdf9e5f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "df_sched = merge_data.concatenate_schedule_by_route_direction(date_list)\n", - " \n", - "df_avg_speeds = merge_data.concatenate_speeds_by_route_direction(\n", - " date_list\n", - " )\n", - " \n", - "df_rt_sched = merge_data.concatenate_rt_vs_schedule_by_route_direction(\n", - " date_list\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "ff166e44-630b-4a59-badc-64df47aee00f", - "metadata": { - "tags": [] - }, - "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", - "
schedule_gtfs_dataset_keyroute_iddirection_idtime_periodavg_scheduled_service_minutesavg_stop_milesn_scheduled_tripsfrequencyservice_dateis_expressis_ferryis_railis_coverageis_localis_downtown_localis_rapidtypologynamecombined_namerecent_combined_namerecent_route_idroute_primary_direction
00139b1253130b33adcd4b3a4490530d20177a66b-9f33-407d-a72e-776429fb73d4NaNall_day63.500.9220.082025-01-150.000.000.001.000.000.000.00coverageTCRTA TripShot ScheduleC70 LOOP__70C70 LOOP 700177a66b-9f33-407d-a72e-776429fb73d4Eastbound
10139b1253130b33adcd4b3a4490530d20177a66b-9f33-407d-a72e-776429fb73d4NaNall_day63.505.9820.082025-02-120.000.000.001.000.000.000.00coverageTCRTA TripShot ScheduleC70 LOOP__70C70 LOOP 700177a66b-9f33-407d-a72e-776429fb73d4Eastbound
\n", - "
" - ], - "text/plain": [ - " schedule_gtfs_dataset_key route_id \\\n", - "0 0139b1253130b33adcd4b3a4490530d2 0177a66b-9f33-407d-a72e-776429fb73d4 \n", - "1 0139b1253130b33adcd4b3a4490530d2 0177a66b-9f33-407d-a72e-776429fb73d4 \n", - "\n", - " direction_id time_period avg_scheduled_service_minutes avg_stop_miles \\\n", - "0 NaN all_day 63.50 0.92 \n", - "1 NaN all_day 63.50 5.98 \n", - "\n", - " n_scheduled_trips frequency service_date is_express is_ferry is_rail \\\n", - "0 2 0.08 2025-01-15 0.00 0.00 0.00 \n", - "1 2 0.08 2025-02-12 0.00 0.00 0.00 \n", - "\n", - " is_coverage is_local is_downtown_local is_rapid typology \\\n", - "0 1.00 0.00 0.00 0.00 coverage \n", - "1 1.00 0.00 0.00 0.00 coverage \n", - "\n", - " name combined_name recent_combined_name \\\n", - "0 TCRTA TripShot Schedule C70 LOOP__70 C70 LOOP 70 \n", - "1 TCRTA TripShot Schedule C70 LOOP__70 C70 LOOP 70 \n", - "\n", - " recent_route_id route_primary_direction \n", - "0 0177a66b-9f33-407d-a72e-776429fb73d4 Eastbound \n", - "1 0177a66b-9f33-407d-a72e-776429fb73d4 Eastbound " - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_sched.head(2)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "271bb082-5ca3-4839-89be-8fe2686a90a4", - "metadata": { - "tags": [] - }, - "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", - "
schedule_gtfs_dataset_keyroute_iddirection_idtime_periodspeed_mphservice_date
00139b1253130b33adcd4b3a4490530d20177a66b-9f33-407d-a72e-776429fb73d4NaNall_day33.492025-04-16
10139b1253130b33adcd4b3a4490530d20177a66b-9f33-407d-a72e-776429fb73d4NaNpeak33.492025-04-16
\n", - "
" - ], - "text/plain": [ - " schedule_gtfs_dataset_key route_id \\\n", - "0 0139b1253130b33adcd4b3a4490530d2 0177a66b-9f33-407d-a72e-776429fb73d4 \n", - "1 0139b1253130b33adcd4b3a4490530d2 0177a66b-9f33-407d-a72e-776429fb73d4 \n", - "\n", - " direction_id time_period speed_mph service_date \n", - "0 NaN all_day 33.49 2025-04-16 \n", - "1 NaN peak 33.49 2025-04-16 " - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_avg_speeds.head(2)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "c40b3b6e-5d94-4573-8286-4b81f120cd8f", - "metadata": { - "tags": [] - }, - "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", - "
schedule_gtfs_dataset_keyroute_iddirection_idtime_periodminutes_atleast1_vpminutes_atleast2_vptotal_rt_service_minutestotal_scheduled_service_minutestotal_vpvp_in_shapeis_earlyis_ontimeis_laten_vp_tripsvp_per_minutepct_in_shapepct_rt_journey_atleast1_vppct_rt_journey_atleast2_vppct_sched_journey_atleast1_vppct_sched_journey_atleast2_vprt_sched_journey_ratioavg_rt_service_minutesservice_date
00139b1253130b33adcd4b3a4490530d20177a66b-9f33-407d-a72e-776429fb73d4NaNall_day159158156.95127.0047339001123.010.821.001.001.001.001.2478.472025-01-15
10139b1253130b33adcd4b3a4490530d20177a66b-9f33-407d-a72e-776429fb73d4NaNall_day161159158.92127.0047937801123.010.791.001.001.001.001.2579.462025-02-12
\n", - "
" - ], - "text/plain": [ - " schedule_gtfs_dataset_key route_id \\\n", - "0 0139b1253130b33adcd4b3a4490530d2 0177a66b-9f33-407d-a72e-776429fb73d4 \n", - "1 0139b1253130b33adcd4b3a4490530d2 0177a66b-9f33-407d-a72e-776429fb73d4 \n", - "\n", - " direction_id time_period minutes_atleast1_vp minutes_atleast2_vp \\\n", - "0 NaN all_day 159 158 \n", - "1 NaN all_day 161 159 \n", - "\n", - " total_rt_service_minutes total_scheduled_service_minutes total_vp \\\n", - "0 156.95 127.00 473 \n", - "1 158.92 127.00 479 \n", - "\n", - " vp_in_shape is_early is_ontime is_late n_vp_trips vp_per_minute \\\n", - "0 390 0 1 1 2 3.01 \n", - "1 378 0 1 1 2 3.01 \n", - "\n", - " pct_in_shape pct_rt_journey_atleast1_vp pct_rt_journey_atleast2_vp \\\n", - "0 0.82 1.00 1.00 \n", - "1 0.79 1.00 1.00 \n", - "\n", - " pct_sched_journey_atleast1_vp pct_sched_journey_atleast2_vp \\\n", - "0 1.00 1.00 \n", - "1 1.00 1.00 \n", - "\n", - " rt_sched_journey_ratio avg_rt_service_minutes service_date \n", - "0 1.24 78.47 2025-01-15 \n", - "1 1.25 79.46 2025-02-12 " - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_rt_sched.head(2)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "71157a5a-8f8c-4bc7-b285-b1db9f8b2fb9", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "df2 = merge_data.merge_data_sources_by_route_direction(\n", - " df_sched,\n", - " df_rt_sched,\n", - " df_avg_speeds,\n", - " df\n", - " )" - ] - }, - { - "cell_type": "markdown", - "id": "fa8911d1-73d6-4d5a-8f2c-d75f90b40583", - "metadata": {}, - "source": [ - "## Check Ventura County Route 80 " - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "09df4d30-fd24-46c1-8550-b5e46eb1cb2a", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['schedule_gtfs_dataset_key', 'route_id', 'direction_id', 'time_period',\n", - " 'avg_scheduled_service_minutes', 'avg_stop_miles', 'n_scheduled_trips',\n", - " 'frequency', 'service_date', 'is_express', 'is_ferry', 'is_rail',\n", - " 'is_coverage', 'is_local', 'is_downtown_local', 'is_rapid', 'typology',\n", - " 'name', 'combined_name', 'recent_combined_name', 'recent_route_id',\n", - " 'route_primary_direction', 'minutes_atleast1_vp', 'minutes_atleast2_vp',\n", - " 'total_rt_service_minutes', 'total_scheduled_service_minutes',\n", - " 'total_vp', 'vp_in_shape', 'is_early', 'is_ontime', 'is_late',\n", - " 'n_vp_trips', 'vp_per_minute', 'pct_in_shape',\n", - " 'pct_rt_journey_atleast1_vp', 'pct_rt_journey_atleast2_vp',\n", - " 'pct_sched_journey_atleast1_vp', 'pct_sched_journey_atleast2_vp',\n", - " 'rt_sched_journey_ratio', 'avg_rt_service_minutes', 'sched_rt_category',\n", - " 'speed_mph', 'schedule_source_record_id', 'base64_url',\n", - " 'caltrans_district', 'portfolio_organization_name'],\n", - " dtype='object')" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df2.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "aa888960-d4e5-458b-bfc5-6d7db44c8dde", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array(['2025-01-15T00:00:00.000000000', '2025-02-12T00:00:00.000000000',\n", - " '2025-03-12T00:00:00.000000000', '2025-04-16T00:00:00.000000000',\n", - " '2025-05-14T00:00:00.000000000'], dtype='datetime64[ns]')" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df2.service_date.unique()" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "f4deed07-728c-44b9-874d-947fe34428a8", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "route_80_89 = df2.loc[(df2.portfolio_organization_name == portfolio_name)\n", - " & (df2.recent_combined_name == \"80-89 Coastal Express\")\n", - " & (df2.service_date == '2025-05-14T00:00:00.000000000')]" - ] - }, - { - "cell_type": "markdown", - "id": "f207717f-b4be-4bfc-ad1a-a9dcad29cd47", - "metadata": {}, - "source": [ - "### There are two directions, 3 time periods so I should only see 6 rows per date?" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "575c71e8-c5eb-4a4d-bcab-d92e99b71d8b", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(239, 41)" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(route_80_89), len(route_80_89.drop_duplicates())" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "c4b109a3-9e08-4789-b810-ba12cfb0461d", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [], - "source": [ - "route_80_89_dedup = route_80_89.drop_duplicates()" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "5e901bac-49e6-46c0-b066-448195b6ceb7", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "all_day 19\n", - "offpeak 13\n", - "peak 9\n", - "Name: time_period, dtype: int64" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "route_80_89_dedup.time_period.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "1be84f1e-6b32-4367-8b43-cd0434b8d058", - "metadata": { - "scrolled": true, - "tags": [] - }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
schedule_gtfs_dataset_keyroute_iddirection_idtime_periodavg_scheduled_service_minutesavg_stop_milesn_scheduled_tripsfrequencyservice_dateis_expressis_ferryis_railis_coverageis_localis_downtown_localis_rapidtypologynamecombined_namerecent_combined_namerecent_route_idroute_primary_directionminutes_atleast1_vpminutes_atleast2_vptotal_rt_service_minutestotal_scheduled_service_minutestotal_vpvp_in_shapeis_earlyis_ontimeis_laten_vp_tripsvp_per_minutepct_in_shapepct_rt_journey_atleast1_vppct_rt_journey_atleast2_vppct_sched_journey_atleast1_vppct_sched_journey_atleast2_vprt_sched_journey_ratioavg_rt_service_minutessched_rt_categoryspeed_mphschedule_source_record_idbase64_urlcaltrans_districtportfolio_organization_name
130891770249a5a2e770ca90628434d4934b141340peak93.0029.0440.502025-05-141.000.000.000.000.000.000.00expressVCTC GMV Schedule80__80-89 Coastal Express80-89 Coastal Express4134Westbound999796.68181.00292020023.020.001.001.000.550.540.5348.34schedule_and_vp33.15recrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz07 - Los Angeles / VenturaVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
138351770249a5a2e770ca90628434d4934b141341peak86.807.7150.622025-05-141.000.000.000.000.000.000.00expressVCTC GMV Schedule80__80-89 Coastal Express80-89 Coastal Express4134Eastbound466455589.67346.001367000442.320.000.790.771.001.001.70147.42schedule_and_vp15.47recrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz07 - Los Angeles / VenturaVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
139341770249a5a2e770ca90628434d4934b141361peak50.0032.1010.122025-05-141.000.000.000.000.000.000.00expressVCTC GMV Schedule80X__80-89 Coastal Express80-89 Coastal Express4136Eastbound9085159.9250.00279000111.740.000.560.531.001.003.20159.92schedule_and_vpNaNrecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz07 - Los Angeles / VenturaVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
140041770249a5a2e770ca90628434d4934b141371peak125.5028.8820.252025-05-141.000.000.000.000.000.000.00expressVCTC GMV Schedule81__80-89 Coastal Express80-89 Coastal Express4137Eastbound787877.67134.00234010013.010.001.001.000.580.580.5877.67schedule_and_vp19.46recrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz07 - Los Angeles / VenturaVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
141091770249a5a2e770ca90628434d4934b141411peak128.0017.8220.252025-05-141.000.000.000.000.000.000.00expressVCTC GMV Schedule84__80-89 Coastal Express80-89 Coastal Express4141Eastbound309264375.40262.00816000222.170.000.820.701.001.001.43187.70schedule_and_vpNaNrecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz07 - Los Angeles / VenturaVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
141731770249a5a2e770ca90628434d4934b141431peak129.003.7010.122025-05-141.000.000.000.000.000.000.00expressVCTC GMV Schedule85__80-89 Coastal Express80-89 Coastal Express4143Eastbound00NaNNaN000000NaNNaNNaNNaNNaNNaNNaNNaNschedule_onlyNaNrecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz07 - Los Angeles / VenturaVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
142371770249a5a2e770ca90628434d4934b141451peak106.002.9120.252025-05-141.000.000.000.000.000.000.00expressVCTC GMV Schedule86__80-89 Coastal Express80-89 Coastal Express4145Eastbound3493411428.93212.001029000220.720.000.240.241.001.006.74714.46schedule_and_vp30.45recrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz07 - Los Angeles / VenturaVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
143071770249a5a2e770ca90628434d4934b141461peak129.0038.0610.122025-05-141.000.000.000.000.000.000.00expressVCTC GMV Schedule87__80-89 Coastal Express80-89 Coastal Express4146Eastbound263258579.38129.00777000111.340.000.450.451.001.004.49579.38schedule_and_vpNaNrecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz07 - Los Angeles / VenturaVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
143771770249a5a2e770ca90628434d4934b141481peak149.675.5730.382025-05-141.000.000.000.000.000.000.00expressVCTC GMV Schedule89__80-89 Coastal Express80-89 Coastal Express4148Eastbound622621974.28449.001858000331.910.000.640.641.001.002.17324.76schedule_and_vpNaNrecrAG7e0oOiR6FiPaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz07 - Los Angeles / VenturaVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
\n", - "
" - ], - "text/plain": [ - " schedule_gtfs_dataset_key route_id direction_id time_period \\\n", - "13089 1770249a5a2e770ca90628434d4934b1 4134 0 peak \n", - "13835 1770249a5a2e770ca90628434d4934b1 4134 1 peak \n", - "13934 1770249a5a2e770ca90628434d4934b1 4136 1 peak \n", - "14004 1770249a5a2e770ca90628434d4934b1 4137 1 peak \n", - "14109 1770249a5a2e770ca90628434d4934b1 4141 1 peak \n", - "14173 1770249a5a2e770ca90628434d4934b1 4143 1 peak \n", - "14237 1770249a5a2e770ca90628434d4934b1 4145 1 peak \n", - "14307 1770249a5a2e770ca90628434d4934b1 4146 1 peak \n", - "14377 1770249a5a2e770ca90628434d4934b1 4148 1 peak \n", - "\n", - " avg_scheduled_service_minutes avg_stop_miles n_scheduled_trips \\\n", - "13089 93.00 29.04 4 \n", - "13835 86.80 7.71 5 \n", - "13934 50.00 32.10 1 \n", - "14004 125.50 28.88 2 \n", - "14109 128.00 17.82 2 \n", - "14173 129.00 3.70 1 \n", - "14237 106.00 2.91 2 \n", - "14307 129.00 38.06 1 \n", - "14377 149.67 5.57 3 \n", - "\n", - " frequency service_date is_express is_ferry is_rail is_coverage \\\n", - "13089 0.50 2025-05-14 1.00 0.00 0.00 0.00 \n", - "13835 0.62 2025-05-14 1.00 0.00 0.00 0.00 \n", - "13934 0.12 2025-05-14 1.00 0.00 0.00 0.00 \n", - "14004 0.25 2025-05-14 1.00 0.00 0.00 0.00 \n", - "14109 0.25 2025-05-14 1.00 0.00 0.00 0.00 \n", - "14173 0.12 2025-05-14 1.00 0.00 0.00 0.00 \n", - "14237 0.25 2025-05-14 1.00 0.00 0.00 0.00 \n", - "14307 0.12 2025-05-14 1.00 0.00 0.00 0.00 \n", - "14377 0.38 2025-05-14 1.00 0.00 0.00 0.00 \n", - "\n", - " is_local is_downtown_local is_rapid typology name \\\n", - "13089 0.00 0.00 0.00 express VCTC GMV Schedule \n", - "13835 0.00 0.00 0.00 express VCTC GMV Schedule \n", - "13934 0.00 0.00 0.00 express VCTC GMV Schedule \n", - "14004 0.00 0.00 0.00 express VCTC GMV Schedule \n", - "14109 0.00 0.00 0.00 express VCTC GMV Schedule \n", - "14173 0.00 0.00 0.00 express VCTC GMV Schedule \n", - "14237 0.00 0.00 0.00 express VCTC GMV Schedule \n", - "14307 0.00 0.00 0.00 express VCTC GMV Schedule \n", - "14377 0.00 0.00 0.00 express VCTC GMV Schedule \n", - "\n", - " combined_name recent_combined_name recent_route_id \\\n", - "13089 80__80-89 Coastal Express 80-89 Coastal Express 4134 \n", - "13835 80__80-89 Coastal Express 80-89 Coastal Express 4134 \n", - "13934 80X__80-89 Coastal Express 80-89 Coastal Express 4136 \n", - "14004 81__80-89 Coastal Express 80-89 Coastal Express 4137 \n", - "14109 84__80-89 Coastal Express 80-89 Coastal Express 4141 \n", - "14173 85__80-89 Coastal Express 80-89 Coastal Express 4143 \n", - "14237 86__80-89 Coastal Express 80-89 Coastal Express 4145 \n", - "14307 87__80-89 Coastal Express 80-89 Coastal Express 4146 \n", - "14377 89__80-89 Coastal Express 80-89 Coastal Express 4148 \n", - "\n", - " route_primary_direction minutes_atleast1_vp minutes_atleast2_vp \\\n", - "13089 Westbound 99 97 \n", - "13835 Eastbound 466 455 \n", - "13934 Eastbound 90 85 \n", - "14004 Eastbound 78 78 \n", - "14109 Eastbound 309 264 \n", - "14173 Eastbound 0 0 \n", - "14237 Eastbound 349 341 \n", - "14307 Eastbound 263 258 \n", - "14377 Eastbound 622 621 \n", - "\n", - " total_rt_service_minutes total_scheduled_service_minutes total_vp \\\n", - "13089 96.68 181.00 292 \n", - "13835 589.67 346.00 1367 \n", - "13934 159.92 50.00 279 \n", - "14004 77.67 134.00 234 \n", - "14109 375.40 262.00 816 \n", - "14173 NaN NaN 0 \n", - "14237 1428.93 212.00 1029 \n", - "14307 579.38 129.00 777 \n", - "14377 974.28 449.00 1858 \n", - "\n", - " vp_in_shape is_early is_ontime is_late n_vp_trips vp_per_minute \\\n", - "13089 0 2 0 0 2 3.02 \n", - "13835 0 0 0 4 4 2.32 \n", - "13934 0 0 0 1 1 1.74 \n", - "14004 0 1 0 0 1 3.01 \n", - "14109 0 0 0 2 2 2.17 \n", - "14173 0 0 0 0 0 NaN \n", - "14237 0 0 0 2 2 0.72 \n", - "14307 0 0 0 1 1 1.34 \n", - "14377 0 0 0 3 3 1.91 \n", - "\n", - " pct_in_shape pct_rt_journey_atleast1_vp pct_rt_journey_atleast2_vp \\\n", - "13089 0.00 1.00 1.00 \n", - "13835 0.00 0.79 0.77 \n", - "13934 0.00 0.56 0.53 \n", - "14004 0.00 1.00 1.00 \n", - "14109 0.00 0.82 0.70 \n", - "14173 NaN NaN NaN \n", - "14237 0.00 0.24 0.24 \n", - "14307 0.00 0.45 0.45 \n", - "14377 0.00 0.64 0.64 \n", - "\n", - " pct_sched_journey_atleast1_vp pct_sched_journey_atleast2_vp \\\n", - "13089 0.55 0.54 \n", - "13835 1.00 1.00 \n", - "13934 1.00 1.00 \n", - "14004 0.58 0.58 \n", - "14109 1.00 1.00 \n", - "14173 NaN NaN \n", - "14237 1.00 1.00 \n", - "14307 1.00 1.00 \n", - "14377 1.00 1.00 \n", - "\n", - " rt_sched_journey_ratio avg_rt_service_minutes sched_rt_category \\\n", - "13089 0.53 48.34 schedule_and_vp \n", - "13835 1.70 147.42 schedule_and_vp \n", - "13934 3.20 159.92 schedule_and_vp \n", - "14004 0.58 77.67 schedule_and_vp \n", - "14109 1.43 187.70 schedule_and_vp \n", - "14173 NaN NaN schedule_only \n", - "14237 6.74 714.46 schedule_and_vp \n", - "14307 4.49 579.38 schedule_and_vp \n", - "14377 2.17 324.76 schedule_and_vp \n", - "\n", - " speed_mph schedule_source_record_id base64_url \\\n", - "13089 33.15 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", - "13835 15.47 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", - "13934 NaN recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", - "14004 19.46 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", - "14109 NaN recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", - "14173 NaN recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", - "14237 30.45 recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", - "14307 NaN recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", - "14377 NaN recrAG7e0oOiR6FiP aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", - "\n", - " caltrans_district \\\n", - "13089 07 - Los Angeles / Ventura \n", - "13835 07 - Los Angeles / Ventura \n", - "13934 07 - Los Angeles / Ventura \n", - "14004 07 - Los Angeles / Ventura \n", - "14109 07 - Los Angeles / Ventura \n", - "14173 07 - Los Angeles / Ventura \n", - "14237 07 - Los Angeles / Ventura \n", - "14307 07 - Los Angeles / Ventura \n", - "14377 07 - Los Angeles / Ventura \n", - "\n", - " portfolio_organization_name \n", - "13089 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "13835 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "13934 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "14004 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "14109 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "14173 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "14237 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "14307 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "14377 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) " - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "route_80_89_dedup.loc[route_80_89_dedup.time_period == \"peak\"]" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "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.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/gtfs_digest/25_route_names.ipynb b/gtfs_digest/25_route_names.ipynb new file mode 100644 index 0000000000..81932ff5fa --- /dev/null +++ b/gtfs_digest/25_route_names.ipynb @@ -0,0 +1,9563 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "1c75d453-f988-40ce-bb25-770f4d0bc773", + "metadata": {}, + "source": [ + "# `recent_combined_name`/`route_id` conundrum\n", + "**6/19/2025 Notes**\n", + "* City of Santa Maria looks the same with and without the pipes, but I can see multiple route_ids go with multiple `recent_combined_name`. Take a closer look\n", + "* Same thing with Yolobus" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "id": "3f3d3984-e41e-4bf0-a496-9f17c08b70bc", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import yaml\n", + "from segment_speed_utils import time_series_utils\n", + "from shared_utils import portfolio_utils, rt_dates, publish_utils\n", + "from update_vars import GTFS_DATA_DICT, SCHED_GCS\n", + "import merge_data\n", + "\n", + "with open(\"../_shared_utils/shared_utils/portfolio_organization_name.yml\", \"r\") as f:\n", + " PORTFOLIO_ORGANIZATIONS_DICT = yaml.safe_load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a3a0adca-b9ea-4238-9590-411d990386b4", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import google.auth\n", + "from update_vars import GTFS_DATA_DICT, RT_SCHED_GCS, SCHED_GCS, SEGMENT_GCS\n", + "\n", + "credentials, project = google.auth.default()\n", + "\n", + "import gcsfs\n", + "from calitp_data_analysis import geography_utils, utils\n", + "from shared_utils import gtfs_utils_v2, portfolio_utils, publish_utils" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "fcc3a1b8-e2ec-404c-a1bd-fd0360fb45ae", + "metadata": {}, + "outputs": [], + "source": [ + "CLEANED_ROUTE_NAMING = GTFS_DATA_DICT.schedule_tables.route_identification\n", + "\n", + "df = pd.read_parquet(f\"{SCHED_GCS}{CLEANED_ROUTE_NAMING}.parquet\").pipe(\n", + " portfolio_utils.standardize_portfolio_organization_names,\n", + " PORTFOLIO_ORGANIZATIONS_DICT,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "49652dbe-659a-400d-ba10-2a017a5af275", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "pd.options.display.max_columns = 100\n", + "pd.options.display.float_format = \"{:.2f}\".format\n", + "pd.set_option(\"display.max_rows\", None)\n", + "pd.set_option(\"display.max_colwidth\", None)" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "id": "37ba326b-84a8-42fd-b0a7-b975d0582581", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "date_list = rt_dates.y2025_dates" + ] + }, + { + "cell_type": "markdown", + "id": "135b761c-dcf4-4474-8e72-e5471fb79eb6", + "metadata": {}, + "source": [ + "## Find other routes in which their `route_short_name` , `route_long_name`, and `route_id` are different but they share the same `recent_combined_name`\n", + "* [Link](https://github.com/cal-itp/data-analyses/issues/1527#issuecomment-2982251267)\n", + "* It's ok for recent_combined_name to group multiple route_ids only when route_short_name and route_long_name are the same, see the LA Metro route_id example.\n", + "* It is not ok to group them when route_short_name and route_long_name are different, and the time_series_utils operators that get extra parsing only had that to handle cases like:\n", + "* https://github.com/cal-itp/data-analyses/blob/9505ad4445de05119b78d4ad35ac89c23ed8a7dc/rt_segment_speeds/segment_speed_utils/time_series_utils.py#L84-L105" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "5f4b2d8c-51bc-4811-9bbc-b6bcb88338d5", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "public_feeds = gtfs_utils_v2.filter_to_public_schedule_gtfs_dataset_keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "904e2d3f-8639-4186-9ab6-65a4b9a20795", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "df = df.pipe(\n", + " publish_utils.exclude_private_datasets, public_gtfs_dataset_keys=public_feeds\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "074b4e0e-d92f-41d6-90cf-195fd8dd79da", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "analysis_date_list = rt_dates.y2025_dates\n", + "FILE = GTFS_DATA_DICT.schedule_tables.gtfs_key_crosswalk\n", + "crosswalk_cols = [\n", + " \"schedule_gtfs_dataset_key\",\n", + " \"name\",\n", + " \"organization_name\",\n", + "]\n", + "\n", + "crosswalk_df = time_series_utils.concatenate_datasets_across_dates(\n", + " SCHED_GCS, FILE, analysis_date_list, data_type=\"df\", columns=crosswalk_cols\n", + ").drop_duplicates()" + ] + }, + { + "cell_type": "markdown", + "id": "e06904f4-8e7c-4dfd-82a0-728d46f2240a", + "metadata": {}, + "source": [ + "### City of Santa Maria `Santa Maria Schedule`" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "0df6ddef-b908-43ca-9d4c-fa19b08819f3", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "santa_maria = df.loc[\n", + " (df.portfolio_organization_name.str.contains(\"City of Santa Maria\"))\n", + " & (df.recent_combined_name == \"13X__13X Transit Center/PVHS/N. Broadway\")\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "c237c56d-3beb-46f2-a690-0d3ecb0c4763", + "metadata": { + "tags": [] + }, + "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", + "
schedule_gtfs_dataset_keynameorganization_nameservice_date
21173105f2d1cabc8170ab066d96863c5d5Santa Maria ScheduleCity of Santa Maria2025-01-15
21173105f2d1cabc8170ab066d96863c5d5Santa Maria ScheduleCity of Santa Maria2025-02-12
21073105f2d1cabc8170ab066d96863c5d5Santa Maria ScheduleCity of Santa Maria2025-03-12
21773105f2d1cabc8170ab066d96863c5d5Santa Maria ScheduleCity of Santa Maria2025-04-16
21673105f2d1cabc8170ab066d96863c5d5Santa Maria ScheduleCity of Santa Maria2025-05-14
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key name \\\n", + "211 73105f2d1cabc8170ab066d96863c5d5 Santa Maria Schedule \n", + "211 73105f2d1cabc8170ab066d96863c5d5 Santa Maria Schedule \n", + "210 73105f2d1cabc8170ab066d96863c5d5 Santa Maria Schedule \n", + "217 73105f2d1cabc8170ab066d96863c5d5 Santa Maria Schedule \n", + "216 73105f2d1cabc8170ab066d96863c5d5 Santa Maria Schedule \n", + "\n", + " organization_name service_date \n", + "211 City of Santa Maria 2025-01-15 \n", + "211 City of Santa Maria 2025-02-12 \n", + "210 City of Santa Maria 2025-03-12 \n", + "217 City of Santa Maria 2025-04-16 \n", + "216 City of Santa Maria 2025-05-14 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "crosswalk_df.loc[\n", + " crosswalk_df.organization_name.str.contains(\n", + " \"Santa Maria\",\n", + " )\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "b8ba491f-c038-4203-96da-948996b85540", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "35" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(santa_maria)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "dd4f53fc-1572-4982-9948-90e40c287355", + "metadata": { + "scrolled": true, + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
service_daterecent_combined_nameportfolio_organization_nameschedule_gtfs_dataset_keyroute_long_nameroute_short_nameroute_id
236162023-07-1213X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X5b894962-da2e-442f-b9ec-df43cd2f80d0
261292023-08-1513X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X5b894962-da2e-442f-b9ec-df43cd2f80d0
286922023-09-1313X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X5b894962-da2e-442f-b9ec-df43cd2f80d0
312302023-10-0913X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X5b894962-da2e-442f-b9ec-df43cd2f80d0
339772023-10-1013X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X5b894962-da2e-442f-b9ec-df43cd2f80d0
364662023-10-1113X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X5b894962-da2e-442f-b9ec-df43cd2f80d0
390312023-10-1213X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X5b894962-da2e-442f-b9ec-df43cd2f80d0
416192023-10-1313X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X5b894962-da2e-442f-b9ec-df43cd2f80d0
473782023-11-1513X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X5b894962-da2e-442f-b9ec-df43cd2f80d0
499432023-12-1313X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X5b894962-da2e-442f-b9ec-df43cd2f80d0
525372024-01-1713X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X5b894962-da2e-442f-b9ec-df43cd2f80d0
550702024-02-1413X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X5b894962-da2e-442f-b9ec-df43cd2f80d0
575342024-03-1313X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X5b894962-da2e-442f-b9ec-df43cd2f80d0
601082024-04-1513X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X5b894962-da2e-442f-b9ec-df43cd2f80d0
625302024-04-1613X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X5b894962-da2e-442f-b9ec-df43cd2f80d0
651762024-04-1713X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
675652024-04-1813X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
699522024-04-1913X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
752232024-05-2213X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
773452024-06-1213X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
794712024-07-1713X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
818582024-08-1413X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
844822024-09-1813X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
870012024-10-1413X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
894502024-10-1513X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
920412024-10-1613X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
946452024-10-1713X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
973652024-10-1813X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
1030672024-11-1313X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
1058522024-12-1113X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
1084752025-01-1513X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
1110872025-02-1213X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
1136112025-03-1213X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
1162342025-04-1613X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
1186512025-05-1413X__13X Transit Center/PVHS/N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d513X Transit Center/PVHS/N. Broadway13X13X
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name \\\n", + "23616 2023-07-12 13X__13X Transit Center/PVHS/N. Broadway \n", + "26129 2023-08-15 13X__13X Transit Center/PVHS/N. Broadway \n", + "28692 2023-09-13 13X__13X Transit Center/PVHS/N. Broadway \n", + "31230 2023-10-09 13X__13X Transit Center/PVHS/N. Broadway \n", + "33977 2023-10-10 13X__13X Transit Center/PVHS/N. Broadway \n", + "36466 2023-10-11 13X__13X Transit Center/PVHS/N. Broadway \n", + "39031 2023-10-12 13X__13X Transit Center/PVHS/N. Broadway \n", + "41619 2023-10-13 13X__13X Transit Center/PVHS/N. Broadway \n", + "47378 2023-11-15 13X__13X Transit Center/PVHS/N. Broadway \n", + "49943 2023-12-13 13X__13X Transit Center/PVHS/N. Broadway \n", + "52537 2024-01-17 13X__13X Transit Center/PVHS/N. Broadway \n", + "55070 2024-02-14 13X__13X Transit Center/PVHS/N. Broadway \n", + "57534 2024-03-13 13X__13X Transit Center/PVHS/N. Broadway \n", + "60108 2024-04-15 13X__13X Transit Center/PVHS/N. Broadway \n", + "62530 2024-04-16 13X__13X Transit Center/PVHS/N. Broadway \n", + "65176 2024-04-17 13X__13X Transit Center/PVHS/N. Broadway \n", + "67565 2024-04-18 13X__13X Transit Center/PVHS/N. Broadway \n", + "69952 2024-04-19 13X__13X Transit Center/PVHS/N. Broadway \n", + "75223 2024-05-22 13X__13X Transit Center/PVHS/N. Broadway \n", + "77345 2024-06-12 13X__13X Transit Center/PVHS/N. Broadway \n", + "79471 2024-07-17 13X__13X Transit Center/PVHS/N. Broadway \n", + "81858 2024-08-14 13X__13X Transit Center/PVHS/N. Broadway \n", + "84482 2024-09-18 13X__13X Transit Center/PVHS/N. Broadway \n", + "87001 2024-10-14 13X__13X Transit Center/PVHS/N. Broadway \n", + "89450 2024-10-15 13X__13X Transit Center/PVHS/N. Broadway \n", + "92041 2024-10-16 13X__13X Transit Center/PVHS/N. Broadway \n", + "94645 2024-10-17 13X__13X Transit Center/PVHS/N. Broadway \n", + "97365 2024-10-18 13X__13X Transit Center/PVHS/N. Broadway \n", + "103067 2024-11-13 13X__13X Transit Center/PVHS/N. Broadway \n", + "105852 2024-12-11 13X__13X Transit Center/PVHS/N. Broadway \n", + "108475 2025-01-15 13X__13X Transit Center/PVHS/N. Broadway \n", + "111087 2025-02-12 13X__13X Transit Center/PVHS/N. Broadway \n", + "113611 2025-03-12 13X__13X Transit Center/PVHS/N. Broadway \n", + "116234 2025-04-16 13X__13X Transit Center/PVHS/N. Broadway \n", + "118651 2025-05-14 13X__13X Transit Center/PVHS/N. Broadway \n", + "\n", + " portfolio_organization_name schedule_gtfs_dataset_key \\\n", + "23616 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "26129 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "28692 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "31230 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "33977 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "36466 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "39031 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "41619 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "47378 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "49943 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "52537 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "55070 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "57534 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "60108 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "62530 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "65176 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "67565 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "69952 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "75223 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "77345 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "79471 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "81858 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "84482 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "87001 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "89450 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "92041 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "94645 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "97365 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "103067 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "105852 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "108475 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "111087 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "113611 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "116234 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "118651 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "\n", + " route_long_name route_short_name \\\n", + "23616 13X Transit Center/PVHS/N. Broadway 13X \n", + "26129 13X Transit Center/PVHS/N. Broadway 13X \n", + "28692 13X Transit Center/PVHS/N. Broadway 13X \n", + "31230 13X Transit Center/PVHS/N. Broadway 13X \n", + "33977 13X Transit Center/PVHS/N. Broadway 13X \n", + "36466 13X Transit Center/PVHS/N. Broadway 13X \n", + "39031 13X Transit Center/PVHS/N. Broadway 13X \n", + "41619 13X Transit Center/PVHS/N. Broadway 13X \n", + "47378 13X Transit Center/PVHS/N. Broadway 13X \n", + "49943 13X Transit Center/PVHS/N. Broadway 13X \n", + "52537 13X Transit Center/PVHS/N. Broadway 13X \n", + "55070 13X Transit Center/PVHS/N. Broadway 13X \n", + "57534 13X Transit Center/PVHS/N. Broadway 13X \n", + "60108 13X Transit Center/PVHS/N. Broadway 13X \n", + "62530 13X Transit Center/PVHS/N. Broadway 13X \n", + "65176 13X Transit Center/PVHS/N. Broadway 13X \n", + "67565 13X Transit Center/PVHS/N. Broadway 13X \n", + "69952 13X Transit Center/PVHS/N. Broadway 13X \n", + "75223 13X Transit Center/PVHS/N. Broadway 13X \n", + "77345 13X Transit Center/PVHS/N. Broadway 13X \n", + "79471 13X Transit Center/PVHS/N. Broadway 13X \n", + "81858 13X Transit Center/PVHS/N. Broadway 13X \n", + "84482 13X Transit Center/PVHS/N. Broadway 13X \n", + "87001 13X Transit Center/PVHS/N. Broadway 13X \n", + "89450 13X Transit Center/PVHS/N. Broadway 13X \n", + "92041 13X Transit Center/PVHS/N. Broadway 13X \n", + "94645 13X Transit Center/PVHS/N. Broadway 13X \n", + "97365 13X Transit Center/PVHS/N. Broadway 13X \n", + "103067 13X Transit Center/PVHS/N. Broadway 13X \n", + "105852 13X Transit Center/PVHS/N. Broadway 13X \n", + "108475 13X Transit Center/PVHS/N. Broadway 13X \n", + "111087 13X Transit Center/PVHS/N. Broadway 13X \n", + "113611 13X Transit Center/PVHS/N. Broadway 13X \n", + "116234 13X Transit Center/PVHS/N. Broadway 13X \n", + "118651 13X Transit Center/PVHS/N. Broadway 13X \n", + "\n", + " route_id \n", + "23616 5b894962-da2e-442f-b9ec-df43cd2f80d0 \n", + "26129 5b894962-da2e-442f-b9ec-df43cd2f80d0 \n", + "28692 5b894962-da2e-442f-b9ec-df43cd2f80d0 \n", + "31230 5b894962-da2e-442f-b9ec-df43cd2f80d0 \n", + "33977 5b894962-da2e-442f-b9ec-df43cd2f80d0 \n", + "36466 5b894962-da2e-442f-b9ec-df43cd2f80d0 \n", + "39031 5b894962-da2e-442f-b9ec-df43cd2f80d0 \n", + "41619 5b894962-da2e-442f-b9ec-df43cd2f80d0 \n", + "47378 5b894962-da2e-442f-b9ec-df43cd2f80d0 \n", + "49943 5b894962-da2e-442f-b9ec-df43cd2f80d0 \n", + "52537 5b894962-da2e-442f-b9ec-df43cd2f80d0 \n", + "55070 5b894962-da2e-442f-b9ec-df43cd2f80d0 \n", + "57534 5b894962-da2e-442f-b9ec-df43cd2f80d0 \n", + "60108 5b894962-da2e-442f-b9ec-df43cd2f80d0 \n", + "62530 5b894962-da2e-442f-b9ec-df43cd2f80d0 \n", + "65176 13X \n", + "67565 13X \n", + "69952 13X \n", + "75223 13X \n", + "77345 13X \n", + "79471 13X \n", + "81858 13X \n", + "84482 13X \n", + "87001 13X \n", + "89450 13X \n", + "92041 13X \n", + "94645 13X \n", + "97365 13X \n", + "103067 13X \n", + "105852 13X \n", + "108475 13X \n", + "111087 13X \n", + "113611 13X \n", + "116234 13X \n", + "118651 13X " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "santa_maria[\n", + " [\n", + " \"service_date\",\n", + " \"recent_combined_name\",\n", + " \"portfolio_organization_name\",\n", + " \"schedule_gtfs_dataset_key\",\n", + " \"route_long_name\",\n", + " \"route_short_name\",\n", + " \"route_id\",\n", + " ]\n", + "].sort_values(by=[\"service_date\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "f3bee988-dd13-4d9f-ab41-30d038800283", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "santa_maria2 = df.loc[\n", + " (df.portfolio_organization_name.str.contains(\"City of Santa Maria\"))\n", + " & (df.recent_combined_name.str.contains(\"Orcutt Express\"))\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "0e3c308a-dd0c-4e45-9146-516a18cbf7e0", + "metadata": { + "scrolled": true, + "tags": [] + }, + "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", + "
service_daterecent_combined_nameportfolio_organization_nameroute_long_nameroute_short_nameroute_idschedule_gtfs_dataset_key
920432024-10-1612X__12X Broadway/Orcutt ExpressCity of Santa Maria12X Broadway/Orcutt Express12X12X73105f2d1cabc8170ab066d96863c5d5
946472024-10-1712X__12X Broadway/Orcutt ExpressCity of Santa Maria12X Broadway/Orcutt Express12X12X73105f2d1cabc8170ab066d96863c5d5
973672024-10-1812X__12X Broadway/Orcutt ExpressCity of Santa Maria12X Broadway/Orcutt Express12X12X73105f2d1cabc8170ab066d96863c5d5
1030692024-11-1312X__12X Broadway/Orcutt ExpressCity of Santa Maria12X Broadway/Orcutt Express12X12X73105f2d1cabc8170ab066d96863c5d5
1058542024-12-1112X__12X Broadway/Orcutt ExpressCity of Santa Maria12X Broadway/Orcutt Express12X12X73105f2d1cabc8170ab066d96863c5d5
1084762025-01-1512X__12X Broadway/Orcutt ExpressCity of Santa Maria12X Broadway/Orcutt Express12X12X73105f2d1cabc8170ab066d96863c5d5
1110882025-02-1212X__12X Broadway/Orcutt ExpressCity of Santa Maria12X Broadway/Orcutt Express12X12X73105f2d1cabc8170ab066d96863c5d5
1136122025-03-1212X__12X Broadway/Orcutt ExpressCity of Santa Maria12X Broadway/Orcutt Express12X12X73105f2d1cabc8170ab066d96863c5d5
1162352025-04-1612X__12X Broadway/Orcutt ExpressCity of Santa Maria12X Broadway/Orcutt Express12X12X73105f2d1cabc8170ab066d96863c5d5
1186522025-05-1412X__12X Broadway/Orcutt ExpressCity of Santa Maria12X Broadway/Orcutt Express12X12X73105f2d1cabc8170ab066d96863c5d5
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name \\\n", + "92043 2024-10-16 12X__12X Broadway/Orcutt Express \n", + "94647 2024-10-17 12X__12X Broadway/Orcutt Express \n", + "97367 2024-10-18 12X__12X Broadway/Orcutt Express \n", + "103069 2024-11-13 12X__12X Broadway/Orcutt Express \n", + "105854 2024-12-11 12X__12X Broadway/Orcutt Express \n", + "108476 2025-01-15 12X__12X Broadway/Orcutt Express \n", + "111088 2025-02-12 12X__12X Broadway/Orcutt Express \n", + "113612 2025-03-12 12X__12X Broadway/Orcutt Express \n", + "116235 2025-04-16 12X__12X Broadway/Orcutt Express \n", + "118652 2025-05-14 12X__12X Broadway/Orcutt Express \n", + "\n", + " portfolio_organization_name route_long_name \\\n", + "92043 City of Santa Maria 12X Broadway/Orcutt Express \n", + "94647 City of Santa Maria 12X Broadway/Orcutt Express \n", + "97367 City of Santa Maria 12X Broadway/Orcutt Express \n", + "103069 City of Santa Maria 12X Broadway/Orcutt Express \n", + "105854 City of Santa Maria 12X Broadway/Orcutt Express \n", + "108476 City of Santa Maria 12X Broadway/Orcutt Express \n", + "111088 City of Santa Maria 12X Broadway/Orcutt Express \n", + "113612 City of Santa Maria 12X Broadway/Orcutt Express \n", + "116235 City of Santa Maria 12X Broadway/Orcutt Express \n", + "118652 City of Santa Maria 12X Broadway/Orcutt Express \n", + "\n", + " route_short_name route_id schedule_gtfs_dataset_key \n", + "92043 12X 12X 73105f2d1cabc8170ab066d96863c5d5 \n", + "94647 12X 12X 73105f2d1cabc8170ab066d96863c5d5 \n", + "97367 12X 12X 73105f2d1cabc8170ab066d96863c5d5 \n", + "103069 12X 12X 73105f2d1cabc8170ab066d96863c5d5 \n", + "105854 12X 12X 73105f2d1cabc8170ab066d96863c5d5 \n", + "108476 12X 12X 73105f2d1cabc8170ab066d96863c5d5 \n", + "111088 12X 12X 73105f2d1cabc8170ab066d96863c5d5 \n", + "113612 12X 12X 73105f2d1cabc8170ab066d96863c5d5 \n", + "116235 12X 12X 73105f2d1cabc8170ab066d96863c5d5 \n", + "118652 12X 12X 73105f2d1cabc8170ab066d96863c5d5 " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "santa_maria2[\n", + " [\n", + " \"service_date\",\n", + " \"recent_combined_name\",\n", + " \"portfolio_organization_name\",\n", + " \"route_long_name\",\n", + " \"route_short_name\",\n", + " \"route_id\",\n", + " \"schedule_gtfs_dataset_key\",\n", + " ]\n", + "].sort_values(by=[\"service_date\"]).tail(10)" + ] + }, + { + "cell_type": "markdown", + "id": "6e50dfa0-872b-4fe2-b50f-e53cd50f9205", + "metadata": {}, + "source": [ + "### Yolo Bus" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "f26663d7-1328-4f46-8c50-3614a2b2e83e", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "yolo1 = df.loc[\n", + " (df.portfolio_organization_name.str.contains(\"Yolo County Transportation District\"))\n", + " & (df.recent_combined_name.str.contains(\"Causeway\"))\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "2bcae4cd-eb3c-4ff4-b568-6de484675743", + "metadata": { + "scrolled": true, + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
service_daterecent_combined_nameportfolio_organization_nameroute_long_nameroute_short_nameroute_idschedule_gtfs_dataset_key
4292023-03-15138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138ffc3845f-a0cf-4553-81c1-f53d0470f0f397b8c635bbc4cdd02bc5c27d0e83df3c
27322023-04-10138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138ffc3845f-a0cf-4553-81c1-f53d0470f0f397b8c635bbc4cdd02bc5c27d0e83df3c
50892023-04-11138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138ffc3845f-a0cf-4553-81c1-f53d0470f0f397b8c635bbc4cdd02bc5c27d0e83df3c
74442023-04-12138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138ffc3845f-a0cf-4553-81c1-f53d0470f0f397b8c635bbc4cdd02bc5c27d0e83df3c
98042023-04-13138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138ffc3845f-a0cf-4553-81c1-f53d0470f0f397b8c635bbc4cdd02bc5c27d0e83df3c
121812023-04-14138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138ffc3845f-a0cf-4553-81c1-f53d0470f0f397b8c635bbc4cdd02bc5c27d0e83df3c
171142023-05-17138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138b6bc2958-333f-4d1e-8579-b75b2698b6b497b8c635bbc4cdd02bc5c27d0e83df3c
195802023-06-14138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138b6bc2958-333f-4d1e-8579-b75b2698b6b497b8c635bbc4cdd02bc5c27d0e83df3c
219972023-07-12138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138b6bc2958-333f-4d1e-8579-b75b2698b6b497b8c635bbc4cdd02bc5c27d0e83df3c
243842023-08-15138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138b6bc2958-333f-4d1e-8579-b75b2698b6b497b8c635bbc4cdd02bc5c27d0e83df3c
269692023-09-13138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138b6bc2958-333f-4d1e-8579-b75b2698b6b43c62ad6ee589d56eca915ce291a5df0a
295502023-10-09138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138b6bc2958-333f-4d1e-8579-b75b2698b6b43c62ad6ee589d56eca915ce291a5df0a
321102023-10-10138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138b6bc2958-333f-4d1e-8579-b75b2698b6b43c62ad6ee589d56eca915ce291a5df0a
346802023-10-11138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138b6bc2958-333f-4d1e-8579-b75b2698b6b43c62ad6ee589d56eca915ce291a5df0a
373192023-10-12138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138b6bc2958-333f-4d1e-8579-b75b2698b6b43c62ad6ee589d56eca915ce291a5df0a
399012023-10-13138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138b6bc2958-333f-4d1e-8579-b75b2698b6b43c62ad6ee589d56eca915ce291a5df0a
455882023-11-15138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138b6bc2958-333f-4d1e-8579-b75b2698b6b43c62ad6ee589d56eca915ce291a5df0a
482292023-12-13138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection138b6bc2958-333f-4d1e-8579-b75b2698b6b43c62ad6ee589d56eca915ce291a5df0a
508462024-01-17138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1383ad667e2-f0d8-45fe-adf2-0a8b2ee47f683c62ad6ee589d56eca915ce291a5df0a
532202024-02-14138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1389cf77254-5a34-4478-9d00-eb863cdf1dd13c62ad6ee589d56eca915ce291a5df0a
557702024-03-13138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1389cf77254-5a34-4478-9d00-eb863cdf1dd13c62ad6ee589d56eca915ce291a5df0a
583062024-04-15138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1389cf77254-5a34-4478-9d00-eb863cdf1dd13c62ad6ee589d56eca915ce291a5df0a
608112024-04-16138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1389cf77254-5a34-4478-9d00-eb863cdf1dd13c62ad6ee589d56eca915ce291a5df0a
634252024-04-17138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1389cf77254-5a34-4478-9d00-eb863cdf1dd13c62ad6ee589d56eca915ce291a5df0a
659002024-04-18138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1389cf77254-5a34-4478-9d00-eb863cdf1dd13c62ad6ee589d56eca915ce291a5df0a
684012024-04-19138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1389cf77254-5a34-4478-9d00-eb863cdf1dd13c62ad6ee589d56eca915ce291a5df0a
736532024-05-22138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1389cf77254-5a34-4478-9d00-eb863cdf1dd13c62ad6ee589d56eca915ce291a5df0a
760152024-06-12138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1389cf77254-5a34-4478-9d00-eb863cdf1dd13c62ad6ee589d56eca915ce291a5df0a
780212024-07-17138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1381383c62ad6ee589d56eca915ce291a5df0a
802332024-08-14138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1381383c62ad6ee589d56eca915ce291a5df0a
826842024-09-18138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1381383c62ad6ee589d56eca915ce291a5df0a
852702024-10-14138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1381383c62ad6ee589d56eca915ce291a5df0a
877162024-10-15138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1381383c62ad6ee589d56eca915ce291a5df0a
903012024-10-16138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1381383c62ad6ee589d56eca915ce291a5df0a
929062024-10-17138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1381383c62ad6ee589d56eca915ce291a5df0a
955492024-10-18138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1381383c62ad6ee589d56eca915ce291a5df0a
1012622024-11-13138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1381383c62ad6ee589d56eca915ce291a5df0a
1039372024-12-11138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1381383c62ad6ee589d56eca915ce291a5df0a
1066962025-01-15138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1381383c62ad6ee589d56eca915ce291a5df0a
1093542025-02-12138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1381383c62ad6ee589d56eca915ce291a5df0a
1119282025-03-12138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1381383c62ad6ee589d56eca915ce291a5df0a
1143942025-04-16138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection13813824956c9535f71f462472e2a1ceb5567c
1168382025-05-14138__Causeway ConnectionYolo County Transportation DistrictCauseway Connection1381387535a7b8c19aeaef607abf014ee2fd3f
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name \\\n", + "429 2023-03-15 138__Causeway Connection \n", + "2732 2023-04-10 138__Causeway Connection \n", + "5089 2023-04-11 138__Causeway Connection \n", + "7444 2023-04-12 138__Causeway Connection \n", + "9804 2023-04-13 138__Causeway Connection \n", + "12181 2023-04-14 138__Causeway Connection \n", + "17114 2023-05-17 138__Causeway Connection \n", + "19580 2023-06-14 138__Causeway Connection \n", + "21997 2023-07-12 138__Causeway Connection \n", + "24384 2023-08-15 138__Causeway Connection \n", + "26969 2023-09-13 138__Causeway Connection \n", + "29550 2023-10-09 138__Causeway Connection \n", + "32110 2023-10-10 138__Causeway Connection \n", + "34680 2023-10-11 138__Causeway Connection \n", + "37319 2023-10-12 138__Causeway Connection \n", + "39901 2023-10-13 138__Causeway Connection \n", + "45588 2023-11-15 138__Causeway Connection \n", + "48229 2023-12-13 138__Causeway Connection \n", + "50846 2024-01-17 138__Causeway Connection \n", + "53220 2024-02-14 138__Causeway Connection \n", + "55770 2024-03-13 138__Causeway Connection \n", + "58306 2024-04-15 138__Causeway Connection \n", + "60811 2024-04-16 138__Causeway Connection \n", + "63425 2024-04-17 138__Causeway Connection \n", + "65900 2024-04-18 138__Causeway Connection \n", + "68401 2024-04-19 138__Causeway Connection \n", + "73653 2024-05-22 138__Causeway Connection \n", + "76015 2024-06-12 138__Causeway Connection \n", + "78021 2024-07-17 138__Causeway Connection \n", + "80233 2024-08-14 138__Causeway Connection \n", + "82684 2024-09-18 138__Causeway Connection \n", + "85270 2024-10-14 138__Causeway Connection \n", + "87716 2024-10-15 138__Causeway Connection \n", + "90301 2024-10-16 138__Causeway Connection \n", + "92906 2024-10-17 138__Causeway Connection \n", + "95549 2024-10-18 138__Causeway Connection \n", + "101262 2024-11-13 138__Causeway Connection \n", + "103937 2024-12-11 138__Causeway Connection \n", + "106696 2025-01-15 138__Causeway Connection \n", + "109354 2025-02-12 138__Causeway Connection \n", + "111928 2025-03-12 138__Causeway Connection \n", + "114394 2025-04-16 138__Causeway Connection \n", + "116838 2025-05-14 138__Causeway Connection \n", + "\n", + " portfolio_organization_name route_long_name \\\n", + "429 Yolo County Transportation District Causeway Connection \n", + "2732 Yolo County Transportation District Causeway Connection \n", + "5089 Yolo County Transportation District Causeway Connection \n", + "7444 Yolo County Transportation District Causeway Connection \n", + "9804 Yolo County Transportation District Causeway Connection \n", + "12181 Yolo County Transportation District Causeway Connection \n", + "17114 Yolo County Transportation District Causeway Connection \n", + "19580 Yolo County Transportation District Causeway Connection \n", + "21997 Yolo County Transportation District Causeway Connection \n", + "24384 Yolo County Transportation District Causeway Connection \n", + "26969 Yolo County Transportation District Causeway Connection \n", + "29550 Yolo County Transportation District Causeway Connection \n", + "32110 Yolo County Transportation District Causeway Connection \n", + "34680 Yolo County Transportation District Causeway Connection \n", + "37319 Yolo County Transportation District Causeway Connection \n", + "39901 Yolo County Transportation District Causeway Connection \n", + "45588 Yolo County Transportation District Causeway Connection \n", + "48229 Yolo County Transportation District Causeway Connection \n", + "50846 Yolo County Transportation District Causeway Connection \n", + "53220 Yolo County Transportation District Causeway Connection \n", + "55770 Yolo County Transportation District Causeway Connection \n", + "58306 Yolo County Transportation District Causeway Connection \n", + "60811 Yolo County Transportation District Causeway Connection \n", + "63425 Yolo County Transportation District Causeway Connection \n", + "65900 Yolo County Transportation District Causeway Connection \n", + "68401 Yolo County Transportation District Causeway Connection \n", + "73653 Yolo County Transportation District Causeway Connection \n", + "76015 Yolo County Transportation District Causeway Connection \n", + "78021 Yolo County Transportation District Causeway Connection \n", + "80233 Yolo County Transportation District Causeway Connection \n", + "82684 Yolo County Transportation District Causeway Connection \n", + "85270 Yolo County Transportation District Causeway Connection \n", + "87716 Yolo County Transportation District Causeway Connection \n", + "90301 Yolo County Transportation District Causeway Connection \n", + "92906 Yolo County Transportation District Causeway Connection \n", + "95549 Yolo County Transportation District Causeway Connection \n", + "101262 Yolo County Transportation District Causeway Connection \n", + "103937 Yolo County Transportation District Causeway Connection \n", + "106696 Yolo County Transportation District Causeway Connection \n", + "109354 Yolo County Transportation District Causeway Connection \n", + "111928 Yolo County Transportation District Causeway Connection \n", + "114394 Yolo County Transportation District Causeway Connection \n", + "116838 Yolo County Transportation District Causeway Connection \n", + "\n", + " route_short_name route_id \\\n", + "429 138 ffc3845f-a0cf-4553-81c1-f53d0470f0f3 \n", + "2732 138 ffc3845f-a0cf-4553-81c1-f53d0470f0f3 \n", + "5089 138 ffc3845f-a0cf-4553-81c1-f53d0470f0f3 \n", + "7444 138 ffc3845f-a0cf-4553-81c1-f53d0470f0f3 \n", + "9804 138 ffc3845f-a0cf-4553-81c1-f53d0470f0f3 \n", + "12181 138 ffc3845f-a0cf-4553-81c1-f53d0470f0f3 \n", + "17114 138 b6bc2958-333f-4d1e-8579-b75b2698b6b4 \n", + "19580 138 b6bc2958-333f-4d1e-8579-b75b2698b6b4 \n", + "21997 138 b6bc2958-333f-4d1e-8579-b75b2698b6b4 \n", + "24384 138 b6bc2958-333f-4d1e-8579-b75b2698b6b4 \n", + "26969 138 b6bc2958-333f-4d1e-8579-b75b2698b6b4 \n", + "29550 138 b6bc2958-333f-4d1e-8579-b75b2698b6b4 \n", + "32110 138 b6bc2958-333f-4d1e-8579-b75b2698b6b4 \n", + "34680 138 b6bc2958-333f-4d1e-8579-b75b2698b6b4 \n", + "37319 138 b6bc2958-333f-4d1e-8579-b75b2698b6b4 \n", + "39901 138 b6bc2958-333f-4d1e-8579-b75b2698b6b4 \n", + "45588 138 b6bc2958-333f-4d1e-8579-b75b2698b6b4 \n", + "48229 138 b6bc2958-333f-4d1e-8579-b75b2698b6b4 \n", + "50846 138 3ad667e2-f0d8-45fe-adf2-0a8b2ee47f68 \n", + "53220 138 9cf77254-5a34-4478-9d00-eb863cdf1dd1 \n", + "55770 138 9cf77254-5a34-4478-9d00-eb863cdf1dd1 \n", + "58306 138 9cf77254-5a34-4478-9d00-eb863cdf1dd1 \n", + "60811 138 9cf77254-5a34-4478-9d00-eb863cdf1dd1 \n", + "63425 138 9cf77254-5a34-4478-9d00-eb863cdf1dd1 \n", + "65900 138 9cf77254-5a34-4478-9d00-eb863cdf1dd1 \n", + "68401 138 9cf77254-5a34-4478-9d00-eb863cdf1dd1 \n", + "73653 138 9cf77254-5a34-4478-9d00-eb863cdf1dd1 \n", + "76015 138 9cf77254-5a34-4478-9d00-eb863cdf1dd1 \n", + "78021 138 138 \n", + "80233 138 138 \n", + "82684 138 138 \n", + "85270 138 138 \n", + "87716 138 138 \n", + "90301 138 138 \n", + "92906 138 138 \n", + "95549 138 138 \n", + "101262 138 138 \n", + "103937 138 138 \n", + "106696 138 138 \n", + "109354 138 138 \n", + "111928 138 138 \n", + "114394 138 138 \n", + "116838 138 138 \n", + "\n", + " schedule_gtfs_dataset_key \n", + "429 97b8c635bbc4cdd02bc5c27d0e83df3c \n", + "2732 97b8c635bbc4cdd02bc5c27d0e83df3c \n", + "5089 97b8c635bbc4cdd02bc5c27d0e83df3c \n", + "7444 97b8c635bbc4cdd02bc5c27d0e83df3c \n", + "9804 97b8c635bbc4cdd02bc5c27d0e83df3c \n", + "12181 97b8c635bbc4cdd02bc5c27d0e83df3c \n", + "17114 97b8c635bbc4cdd02bc5c27d0e83df3c \n", + "19580 97b8c635bbc4cdd02bc5c27d0e83df3c \n", + "21997 97b8c635bbc4cdd02bc5c27d0e83df3c \n", + "24384 97b8c635bbc4cdd02bc5c27d0e83df3c \n", + "26969 3c62ad6ee589d56eca915ce291a5df0a \n", + "29550 3c62ad6ee589d56eca915ce291a5df0a \n", + "32110 3c62ad6ee589d56eca915ce291a5df0a \n", + "34680 3c62ad6ee589d56eca915ce291a5df0a \n", + "37319 3c62ad6ee589d56eca915ce291a5df0a \n", + "39901 3c62ad6ee589d56eca915ce291a5df0a \n", + "45588 3c62ad6ee589d56eca915ce291a5df0a \n", + "48229 3c62ad6ee589d56eca915ce291a5df0a \n", + "50846 3c62ad6ee589d56eca915ce291a5df0a \n", + "53220 3c62ad6ee589d56eca915ce291a5df0a \n", + "55770 3c62ad6ee589d56eca915ce291a5df0a \n", + "58306 3c62ad6ee589d56eca915ce291a5df0a \n", + "60811 3c62ad6ee589d56eca915ce291a5df0a \n", + "63425 3c62ad6ee589d56eca915ce291a5df0a \n", + "65900 3c62ad6ee589d56eca915ce291a5df0a \n", + "68401 3c62ad6ee589d56eca915ce291a5df0a \n", + "73653 3c62ad6ee589d56eca915ce291a5df0a \n", + "76015 3c62ad6ee589d56eca915ce291a5df0a \n", + "78021 3c62ad6ee589d56eca915ce291a5df0a \n", + "80233 3c62ad6ee589d56eca915ce291a5df0a \n", + "82684 3c62ad6ee589d56eca915ce291a5df0a \n", + "85270 3c62ad6ee589d56eca915ce291a5df0a \n", + "87716 3c62ad6ee589d56eca915ce291a5df0a \n", + "90301 3c62ad6ee589d56eca915ce291a5df0a \n", + "92906 3c62ad6ee589d56eca915ce291a5df0a \n", + "95549 3c62ad6ee589d56eca915ce291a5df0a \n", + "101262 3c62ad6ee589d56eca915ce291a5df0a \n", + "103937 3c62ad6ee589d56eca915ce291a5df0a \n", + "106696 3c62ad6ee589d56eca915ce291a5df0a \n", + "109354 3c62ad6ee589d56eca915ce291a5df0a \n", + "111928 3c62ad6ee589d56eca915ce291a5df0a \n", + "114394 24956c9535f71f462472e2a1ceb5567c \n", + "116838 7535a7b8c19aeaef607abf014ee2fd3f " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "yolo1[\n", + " [\n", + " \"service_date\",\n", + " \"recent_combined_name\",\n", + " \"portfolio_organization_name\",\n", + " \"route_long_name\",\n", + " \"route_short_name\",\n", + " \"route_id\",\n", + " \"schedule_gtfs_dataset_key\",\n", + " ]\n", + "].sort_values(by=[\"service_date\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "91c3581b-0567-4c09-9b8b-1ec131c89686", + "metadata": { + "tags": [] + }, + "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", + "
schedule_gtfs_dataset_keynameorganization_nameservice_date
513c62ad6ee589d56eca915ce291a5df0aYolobus ScheduleYolo County Transportation District2025-01-15
523c62ad6ee589d56eca915ce291a5df0aYolobus ScheduleYolo County Transportation District2025-02-12
533c62ad6ee589d56eca915ce291a5df0aYolobus ScheduleYolo County Transportation District2025-03-12
5124956c9535f71f462472e2a1ceb5567cYolobus ScheduleYolo County Transportation District2025-04-16
497535a7b8c19aeaef607abf014ee2fd3fYolobus ScheduleYolo County Transportation District2025-05-14
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key name \\\n", + "51 3c62ad6ee589d56eca915ce291a5df0a Yolobus Schedule \n", + "52 3c62ad6ee589d56eca915ce291a5df0a Yolobus Schedule \n", + "53 3c62ad6ee589d56eca915ce291a5df0a Yolobus Schedule \n", + "51 24956c9535f71f462472e2a1ceb5567c Yolobus Schedule \n", + "49 7535a7b8c19aeaef607abf014ee2fd3f Yolobus Schedule \n", + "\n", + " organization_name service_date \n", + "51 Yolo County Transportation District 2025-01-15 \n", + "52 Yolo County Transportation District 2025-02-12 \n", + "53 Yolo County Transportation District 2025-03-12 \n", + "51 Yolo County Transportation District 2025-04-16 \n", + "49 Yolo County Transportation District 2025-05-14 " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "crosswalk_df.loc[\n", + " crosswalk_df.organization_name.str.contains(\n", + " \"Yolo\",\n", + " )\n", + "]" + ] + }, + { + "cell_type": "markdown", + "id": "cba877cc-31de-46f6-a534-b70797e1fc9b", + "metadata": {}, + "source": [ + "### Elk Grove - should genuinely remove this." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "44e4c68a-4a74-458a-b51e-fb55baaf5082", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "elkgrove1 = df.loc[\n", + " (df.portfolio_organization_name.str.contains(\"City of Elk Grove\"))\n", + " & (df.recent_combined_name.str.contains(\"Commuter\"))\n", + "]" + ] + }, + { + "cell_type": "markdown", + "id": "3ff72a78-31e3-4880-aa7b-f56d43ccee28", + "metadata": {}, + "source": [ + "#### Called Elk Grove Commuter Route" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "9752f391-231d-4840-be95-4c557188126e", + "metadata": { + "tags": [] + }, + "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", + "
service_daterecent_combined_nameportfolio_organization_nameroute_long_nameroute_short_nameroute_idschedule_gtfs_dataset_key
1182892025-05-14E10__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE10E1089b0a03002512a909fe8e1a5d00a78a5
1182902025-05-14E11__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE11E1189b0a03002512a909fe8e1a5d00a78a5
1182982025-05-14E12__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE12E1289b0a03002512a909fe8e1a5d00a78a5
1182992025-05-14E13__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE13E1389b0a03002512a909fe8e1a5d00a78a5
1183002025-05-14E14__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE14E1489b0a03002512a909fe8e1a5d00a78a5
1183012025-05-14E15__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE15E1589b0a03002512a909fe8e1a5d00a78a5
1183022025-05-14E16__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE16E1689b0a03002512a909fe8e1a5d00a78a5
1183032025-05-14E17__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE17E1789b0a03002512a909fe8e1a5d00a78a5
1183042025-05-14E19__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE19E1989b0a03002512a909fe8e1a5d00a78a5
1187062025-05-14E18__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE18E1889b0a03002512a909fe8e1a5d00a78a5
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name \\\n", + "118289 2025-05-14 E10__Elk Grove Commuter Route \n", + "118290 2025-05-14 E11__Elk Grove Commuter Route \n", + "118298 2025-05-14 E12__Elk Grove Commuter Route \n", + "118299 2025-05-14 E13__Elk Grove Commuter Route \n", + "118300 2025-05-14 E14__Elk Grove Commuter Route \n", + "118301 2025-05-14 E15__Elk Grove Commuter Route \n", + "118302 2025-05-14 E16__Elk Grove Commuter Route \n", + "118303 2025-05-14 E17__Elk Grove Commuter Route \n", + "118304 2025-05-14 E19__Elk Grove Commuter Route \n", + "118706 2025-05-14 E18__Elk Grove Commuter Route \n", + "\n", + " portfolio_organization_name route_long_name route_short_name \\\n", + "118289 City of Elk Grove Elk Grove Commuter Route E10 \n", + "118290 City of Elk Grove Elk Grove Commuter Route E11 \n", + "118298 City of Elk Grove Elk Grove Commuter Route E12 \n", + "118299 City of Elk Grove Elk Grove Commuter Route E13 \n", + "118300 City of Elk Grove Elk Grove Commuter Route E14 \n", + "118301 City of Elk Grove Elk Grove Commuter Route E15 \n", + "118302 City of Elk Grove Elk Grove Commuter Route E16 \n", + "118303 City of Elk Grove Elk Grove Commuter Route E17 \n", + "118304 City of Elk Grove Elk Grove Commuter Route E19 \n", + "118706 City of Elk Grove Elk Grove Commuter Route E18 \n", + "\n", + " route_id schedule_gtfs_dataset_key \n", + "118289 E10 89b0a03002512a909fe8e1a5d00a78a5 \n", + "118290 E11 89b0a03002512a909fe8e1a5d00a78a5 \n", + "118298 E12 89b0a03002512a909fe8e1a5d00a78a5 \n", + "118299 E13 89b0a03002512a909fe8e1a5d00a78a5 \n", + "118300 E14 89b0a03002512a909fe8e1a5d00a78a5 \n", + "118301 E15 89b0a03002512a909fe8e1a5d00a78a5 \n", + "118302 E16 89b0a03002512a909fe8e1a5d00a78a5 \n", + "118303 E17 89b0a03002512a909fe8e1a5d00a78a5 \n", + "118304 E19 89b0a03002512a909fe8e1a5d00a78a5 \n", + "118706 E18 89b0a03002512a909fe8e1a5d00a78a5 " + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "elkgrove1[\n", + " [\n", + " \"service_date\",\n", + " \"recent_combined_name\",\n", + " \"portfolio_organization_name\",\n", + " \"route_long_name\",\n", + " \"route_short_name\",\n", + " \"route_id\",\n", + " \"schedule_gtfs_dataset_key\",\n", + " ]\n", + "].sort_values(by=[\"service_date\"]).tail(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "902aad5e-4ceb-4241-9196-8c5c4c3d0bc6", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "elkgrove2 = df.loc[\n", + " (df.portfolio_organization_name.str.contains(\"City of Elk Grove\"))\n", + " & (df.recent_combined_name.str.contains(\"Local\"))\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "898f82b0-1d33-44a7-9bd3-85129846dba9", + "metadata": { + "tags": [] + }, + "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", + "
service_daterecent_combined_nameportfolio_organization_nameroute_long_nameroute_short_nameroute_idschedule_gtfs_dataset_key
1158802025-04-16E112__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE112E11289b0a03002512a909fe8e1a5d00a78a5
1158792025-04-16E111__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE111E11189b0a03002512a909fe8e1a5d00a78a5
1158782025-04-16E110__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE110E11089b0a03002512a909fe8e1a5d00a78a5
1182912025-05-14E110__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE110E11089b0a03002512a909fe8e1a5d00a78a5
1182922025-05-14E111__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE111E11189b0a03002512a909fe8e1a5d00a78a5
1182932025-05-14E112__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE112E11289b0a03002512a909fe8e1a5d00a78a5
1182942025-05-14E113__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE113E11389b0a03002512a909fe8e1a5d00a78a5
1182952025-05-14E114__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE114E11489b0a03002512a909fe8e1a5d00a78a5
1182962025-05-14E115__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE115E11589b0a03002512a909fe8e1a5d00a78a5
1182972025-05-14E116__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE116E11689b0a03002512a909fe8e1a5d00a78a5
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name portfolio_organization_name \\\n", + "115880 2025-04-16 E112__Elk Grove Local Route City of Elk Grove \n", + "115879 2025-04-16 E111__Elk Grove Local Route City of Elk Grove \n", + "115878 2025-04-16 E110__Elk Grove Local Route City of Elk Grove \n", + "118291 2025-05-14 E110__Elk Grove Local Route City of Elk Grove \n", + "118292 2025-05-14 E111__Elk Grove Local Route City of Elk Grove \n", + "118293 2025-05-14 E112__Elk Grove Local Route City of Elk Grove \n", + "118294 2025-05-14 E113__Elk Grove Local Route City of Elk Grove \n", + "118295 2025-05-14 E114__Elk Grove Local Route City of Elk Grove \n", + "118296 2025-05-14 E115__Elk Grove Local Route City of Elk Grove \n", + "118297 2025-05-14 E116__Elk Grove Local Route City of Elk Grove \n", + "\n", + " route_long_name route_short_name route_id \\\n", + "115880 Elk Grove Local Route E112 E112 \n", + "115879 Elk Grove Local Route E111 E111 \n", + "115878 Elk Grove Local Route E110 E110 \n", + "118291 Elk Grove Local Route E110 E110 \n", + "118292 Elk Grove Local Route E111 E111 \n", + "118293 Elk Grove Local Route E112 E112 \n", + "118294 Elk Grove Local Route E113 E113 \n", + "118295 Elk Grove Local Route E114 E114 \n", + "118296 Elk Grove Local Route E115 E115 \n", + "118297 Elk Grove Local Route E116 E116 \n", + "\n", + " schedule_gtfs_dataset_key \n", + "115880 89b0a03002512a909fe8e1a5d00a78a5 \n", + "115879 89b0a03002512a909fe8e1a5d00a78a5 \n", + "115878 89b0a03002512a909fe8e1a5d00a78a5 \n", + "118291 89b0a03002512a909fe8e1a5d00a78a5 \n", + "118292 89b0a03002512a909fe8e1a5d00a78a5 \n", + "118293 89b0a03002512a909fe8e1a5d00a78a5 \n", + "118294 89b0a03002512a909fe8e1a5d00a78a5 \n", + "118295 89b0a03002512a909fe8e1a5d00a78a5 \n", + "118296 89b0a03002512a909fe8e1a5d00a78a5 \n", + "118297 89b0a03002512a909fe8e1a5d00a78a5 " + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "elkgrove2[\n", + " [\n", + " \"service_date\",\n", + " \"recent_combined_name\",\n", + " \"portfolio_organization_name\",\n", + " \"route_long_name\",\n", + " \"route_short_name\",\n", + " \"route_id\",\n", + " \"schedule_gtfs_dataset_key\",\n", + " ]\n", + "].sort_values(by=[\"service_date\"]).tail(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "5b99c062-89fb-4744-8575-14cca08b903b", + "metadata": { + "tags": [] + }, + "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", + "
schedule_gtfs_dataset_keynameorganization_nameservice_date
17789b0a03002512a909fe8e1a5d00a78a5Elk Grove ScheduleCity of Elk Grove2025-03-12
18089b0a03002512a909fe8e1a5d00a78a5Elk Grove ScheduleCity of Elk Grove2025-04-16
17989b0a03002512a909fe8e1a5d00a78a5Elk Grove ScheduleCity of Elk Grove2025-05-14
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key name organization_name \\\n", + "177 89b0a03002512a909fe8e1a5d00a78a5 Elk Grove Schedule City of Elk Grove \n", + "180 89b0a03002512a909fe8e1a5d00a78a5 Elk Grove Schedule City of Elk Grove \n", + "179 89b0a03002512a909fe8e1a5d00a78a5 Elk Grove Schedule City of Elk Grove \n", + "\n", + " service_date \n", + "177 2025-03-12 \n", + "180 2025-04-16 \n", + "179 2025-05-14 " + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "crosswalk_df.loc[\n", + " crosswalk_df.organization_name.str.contains(\n", + " \"Elk Grove\",\n", + " )\n", + "]" + ] + }, + { + "cell_type": "markdown", + "id": "a9d1a092-59a5-43e4-ab07-84eae2d282b8", + "metadata": {}, + "source": [ + "## Caltrain we don't publish, so we don't have to look through it." + ] + }, + { + "cell_type": "markdown", + "id": "c9998f54-0072-4e28-8664-1c82ffddce3c", + "metadata": {}, + "source": [ + "## Find other routes like VCTC's Coastal Express" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "50e094e6-1f4e-4a66-89fa-19498a5143fa", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "with_pipe = df.pipe(time_series_utils.clean_standardized_route_names).astype(str)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "b1aa3465-d2ca-41d0-a1e3-a2e2c423bf7b", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "agg1 = (\n", + " with_pipe.groupby(\n", + " [\n", + " \"service_date\",\n", + " \"schedule_gtfs_dataset_key\",\n", + " \"portfolio_organization_name\",\n", + " \"recent_combined_name\",\n", + " ]\n", + " )\n", + " .agg(\n", + " {\n", + " \"route_id\": \"nunique\",\n", + " \"route_long_name\": \"nunique\",\n", + " \"route_short_name\": \"nunique\",\n", + " }\n", + " )\n", + " .reset_index()\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "eabcf323-0d47-4530-b8fb-3b2d4cd830c2", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "count 117170.00\n", + "mean 1.00\n", + "std 0.07\n", + "min 1.00\n", + "25% 1.00\n", + "50% 1.00\n", + "75% 1.00\n", + "max 2.00\n", + "Name: route_long_name, dtype: float64" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg1.route_long_name.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "45dcd28e-31f7-469e-ac71-546c7472dceb", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "count 117170.00\n", + "mean 1.00\n", + "std 0.07\n", + "min 1.00\n", + "25% 1.00\n", + "50% 1.00\n", + "75% 1.00\n", + "max 2.00\n", + "Name: route_short_name, dtype: float64" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg1.route_short_name.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "2ad02f1a-536c-4506-ab33-5525bb144c96", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Find the routes with more than one value for route_id and route_short_name\n", + "agg1_filtered = agg1.loc[(agg1.route_id > 1) & ((agg1.route_short_name > 1)|(agg1.route_long_name > 1))]" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "8c8c5c83-6d01-4373-a8ae-f844a8cf1b06", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(644, 7)" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg1_filtered.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "57d42123-d91d-46cd-8913-e52ada7b2a72", + "metadata": { + "tags": [] + }, + "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", + "
service_dateschedule_gtfs_dataset_keyportfolio_organization_namerecent_combined_nameroute_idroute_long_nameroute_short_name
250902023-08-15bd24573e82aa13be83eb7143179dd099Mountain View Transportation Management AssociationB - AM__Shoreline, La Avenida, Crittenden222
527172024-02-148a1405af8da1379acc062e346187ac98San Francisco Bay Area Rapid Transit DistrictGreen-N__Daly City to Berryessa/North San Jose222
82192023-04-128a1405af8da1379acc062e346187ac98San Francisco Bay Area Rapid Transit DistrictOrange-N__Berryessa/North San Jose to Richmond222
\n", + "
" + ], + "text/plain": [ + " service_date schedule_gtfs_dataset_key \\\n", + "25090 2023-08-15 bd24573e82aa13be83eb7143179dd099 \n", + "52717 2024-02-14 8a1405af8da1379acc062e346187ac98 \n", + "8219 2023-04-12 8a1405af8da1379acc062e346187ac98 \n", + "\n", + " portfolio_organization_name \\\n", + "25090 Mountain View Transportation Management Association \n", + "52717 San Francisco Bay Area Rapid Transit District \n", + "8219 San Francisco Bay Area Rapid Transit District \n", + "\n", + " recent_combined_name route_id \\\n", + "25090 B - AM__Shoreline, La Avenida, Crittenden 2 \n", + "52717 Green-N__Daly City to Berryessa/North San Jose 2 \n", + "8219 Orange-N__Berryessa/North San Jose to Richmond 2 \n", + "\n", + " route_long_name route_short_name \n", + "25090 2 2 \n", + "52717 2 2 \n", + "8219 2 2 " + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg1_filtered.sample(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "62936cf3-480c-4dd9-8e15-537f4abe92fe", + "metadata": { + "tags": [] + }, + "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", + "
service_dateschedule_gtfs_dataset_keyportfolio_organization_namerecent_combined_nameroute_idroute_long_nameroute_short_name
16072023-03-15bd24573e82aa13be83eb7143179dd099Mountain View Transportation Management AssociationC - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)212
16082023-03-15bd24573e82aa13be83eb7143179dd099Mountain View Transportation Management AssociationD - PM__San Antonio, Garcia & Charleston (Clockwise loop)212
39032023-04-10bd24573e82aa13be83eb7143179dd099Mountain View Transportation Management AssociationC - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)212
39042023-04-10bd24573e82aa13be83eb7143179dd099Mountain View Transportation Management AssociationD - PM__San Antonio, Garcia & Charleston (Clockwise loop)212
62042023-04-11bd24573e82aa13be83eb7143179dd099Mountain View Transportation Management AssociationC - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)212
\n", + "
" + ], + "text/plain": [ + " service_date schedule_gtfs_dataset_key \\\n", + "1607 2023-03-15 bd24573e82aa13be83eb7143179dd099 \n", + "1608 2023-03-15 bd24573e82aa13be83eb7143179dd099 \n", + "3903 2023-04-10 bd24573e82aa13be83eb7143179dd099 \n", + "3904 2023-04-10 bd24573e82aa13be83eb7143179dd099 \n", + "6204 2023-04-11 bd24573e82aa13be83eb7143179dd099 \n", + "\n", + " portfolio_organization_name \\\n", + "1607 Mountain View Transportation Management Association \n", + "1608 Mountain View Transportation Management Association \n", + "3903 Mountain View Transportation Management Association \n", + "3904 Mountain View Transportation Management Association \n", + "6204 Mountain View Transportation Management Association \n", + "\n", + " recent_combined_name \\\n", + "1607 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "1608 D - PM__San Antonio, Garcia & Charleston (Clockwise loop) \n", + "3903 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "3904 D - PM__San Antonio, Garcia & Charleston (Clockwise loop) \n", + "6204 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "\n", + " route_id route_long_name route_short_name \n", + "1607 2 1 2 \n", + "1608 2 1 2 \n", + "3903 2 1 2 \n", + "3904 2 1 2 \n", + "6204 2 1 2 " + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg1_filtered.loc[agg1_filtered.route_long_name == 1].head()" + ] + }, + { + "cell_type": "markdown", + "id": "1adabd14-5b89-497b-a5a7-6ce42365510f", + "metadata": {}, + "source": [ + "### Troubleshoot the operators below?\n", + "* Roseville: Same `recent_combined_name` has two different `route_id`?\n", + "* VCTC: done, commented them out of `time_series_utils`\n", + "* SF Bay Area Rapid Transit District: we don't publish any rt data\n", + "* Mountain View\n", + "* LA Metro: we already know \n", + "* City of Santa Maria: Situation in which the `recent_combined_name` should be the same -> the opposite of VCTC's problem of 80-89\n", + "* Peninsula Corridor: Only one route and the `recent_combined_name` is blank so maybe it's just a glitch?\n", + "* City of Elk Grove: done, commented them out of `time_series_utils`" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "202aff05-dea1-41f6-a015-f41716010621", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "routes_to_focus = agg1_filtered.sort_values(\n", + " by=[\"portfolio_organization_name\", \"service_date\", \"recent_combined_name\"],\n", + " ascending=[True, False, True],\n", + ")[\n", + " [\"portfolio_organization_name\", \"service_date\", \"recent_combined_name\"]\n", + "].drop_duplicates(\n", + " subset=[\"portfolio_organization_name\", \"recent_combined_name\"]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "02592a5a-f446-43d0-ae36-c3977c75ab05", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['City of Roseville', 'City of Santa Maria',\n", + " 'Los Angeles County Metropolitan Transportation Authority',\n", + " 'Mountain View Transportation Management Association',\n", + " 'San Francisco Bay Area Rapid Transit District'], dtype=object)" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "routes_to_focus.loc[\n", + " routes_to_focus.service_date >= \"2024-12-11\",\n", + "].portfolio_organization_name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "bec85291-540b-4300-a643-5a7c4524a052", + "metadata": { + "scrolled": true, + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
portfolio_organization_nameservice_daterecent_combined_name
115479City of Roseville2025-05-1410_PM__PM COMMUTER 10
115480City of Roseville2025-05-141_AM__AM COMMUTER 1
115481City of Roseville2025-05-142_AM__AM COMMUTER 2
115482City of Roseville2025-05-143_AM__AM COMMUTER 3
115483City of Roseville2025-05-144_PM__PM COMMUTER 4
115484City of Roseville2025-05-145_AM__AM COMMUTER 5
115485City of Roseville2025-05-146_AM__AM COMMUTER 6
115486City of Roseville2025-05-147_AM__AM COMMUTER 7
115487City of Roseville2025-05-149_AM__AM COMMUTER 9
104494City of Roseville2024-12-11__AM COMMUTER 5
104496City of Roseville2024-12-11__AM COMMUTER 9
104499City of Roseville2024-12-11__PM COMMUTER 2
115890City of Santa Maria2025-05-14Rt 1. Transit Ctr to Preisker Park Via N. Broadway
114965Los Angeles County Metropolitan Transportation Authority2025-05-14South Bay Dodger Stadium Express__
115819Mountain View Transportation Management Association2025-05-14A - PM__Middlefield, Clyde & Whisman
115820Mountain View Transportation Management Association2025-05-14B - PM__Shoreline, Crittenden, La Avenida
115821Mountain View Transportation Management Association2025-05-14C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)
115822Mountain View Transportation Management Association2025-05-14D - AM__San Antonio, Garcia & Charleston (Clockwise loop)
116144San Francisco Bay Area Rapid Transit District2025-05-14Blue-S__Dublin/Pleasanton to Daly City
116145San Francisco Bay Area Rapid Transit District2025-05-14Green-N__Daly City to Berryessa/North San Jose
116146San Francisco Bay Area Rapid Transit District2025-05-14Grey-N__Oakland Int'l Airport OAK to Coliseum
116147San Francisco Bay Area Rapid Transit District2025-05-14Orange-N__Berryessa/North San Jose to Richmond
116148San Francisco Bay Area Rapid Transit District2025-05-14Red-S__Richmond to SF Int'l Airport SFO/Millbrae
116149San Francisco Bay Area Rapid Transit District2025-05-14Yellow-S__Antioch to SF Int'l Airport SFO/Millbrae
110918San Francisco Bay Area Rapid Transit District2025-03-12Beige-N__Oakland Airport to Coliseum
\n", + "
" + ], + "text/plain": [ + " portfolio_organization_name service_date \\\n", + "115479 City of Roseville 2025-05-14 \n", + "115480 City of Roseville 2025-05-14 \n", + "115481 City of Roseville 2025-05-14 \n", + "115482 City of Roseville 2025-05-14 \n", + "115483 City of Roseville 2025-05-14 \n", + "115484 City of Roseville 2025-05-14 \n", + "115485 City of Roseville 2025-05-14 \n", + "115486 City of Roseville 2025-05-14 \n", + "115487 City of Roseville 2025-05-14 \n", + "104494 City of Roseville 2024-12-11 \n", + "104496 City of Roseville 2024-12-11 \n", + "104499 City of Roseville 2024-12-11 \n", + "115890 City of Santa Maria 2025-05-14 \n", + "114965 Los Angeles County Metropolitan Transportation Authority 2025-05-14 \n", + "115819 Mountain View Transportation Management Association 2025-05-14 \n", + "115820 Mountain View Transportation Management Association 2025-05-14 \n", + "115821 Mountain View Transportation Management Association 2025-05-14 \n", + "115822 Mountain View Transportation Management Association 2025-05-14 \n", + "116144 San Francisco Bay Area Rapid Transit District 2025-05-14 \n", + "116145 San Francisco Bay Area Rapid Transit District 2025-05-14 \n", + "116146 San Francisco Bay Area Rapid Transit District 2025-05-14 \n", + "116147 San Francisco Bay Area Rapid Transit District 2025-05-14 \n", + "116148 San Francisco Bay Area Rapid Transit District 2025-05-14 \n", + "116149 San Francisco Bay Area Rapid Transit District 2025-05-14 \n", + "110918 San Francisco Bay Area Rapid Transit District 2025-03-12 \n", + "\n", + " recent_combined_name \n", + "115479 10_PM__PM COMMUTER 10 \n", + "115480 1_AM__AM COMMUTER 1 \n", + "115481 2_AM__AM COMMUTER 2 \n", + "115482 3_AM__AM COMMUTER 3 \n", + "115483 4_PM__PM COMMUTER 4 \n", + "115484 5_AM__AM COMMUTER 5 \n", + "115485 6_AM__AM COMMUTER 6 \n", + "115486 7_AM__AM COMMUTER 7 \n", + "115487 9_AM__AM COMMUTER 9 \n", + "104494 __AM COMMUTER 5 \n", + "104496 __AM COMMUTER 9 \n", + "104499 __PM COMMUTER 2 \n", + "115890 Rt 1. Transit Ctr to Preisker Park Via N. Broadway \n", + "114965 South Bay Dodger Stadium Express__ \n", + "115819 A - PM__Middlefield, Clyde & Whisman \n", + "115820 B - PM__Shoreline, Crittenden, La Avenida \n", + "115821 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "115822 D - AM__San Antonio, Garcia & Charleston (Clockwise loop) \n", + "116144 Blue-S__Dublin/Pleasanton to Daly City \n", + "116145 Green-N__Daly City to Berryessa/North San Jose \n", + "116146 Grey-N__Oakland Int'l Airport OAK to Coliseum \n", + "116147 Orange-N__Berryessa/North San Jose to Richmond \n", + "116148 Red-S__Richmond to SF Int'l Airport SFO/Millbrae \n", + "116149 Yellow-S__Antioch to SF Int'l Airport SFO/Millbrae \n", + "110918 Beige-N__Oakland Airport to Coliseum " + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "routes_to_focus.loc[routes_to_focus.service_date >= \"2024-12-11\",]" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "35763818-2ef9-4b58-9314-556fe9d56e98", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['City of Roseville',\n", + " 'San Francisco Bay Area Rapid Transit District',\n", + " 'Mountain View Transportation Management Association', 'Amtrak',\n", + " 'Los Angeles County Metropolitan Transportation Authority',\n", + " 'City of Santa Maria'], dtype=object)" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg1_filtered.portfolio_organization_name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "id": "73cc1730-d5aa-46e9-a296-0a54eceb74a8", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "def inspect_recent_rows(df: pd.DataFrame, route_long_name: str):\n", + " df2 = (\n", + " df.loc[df.route_long_name == route_long_name][\n", + " [\n", + " \"service_date\",\n", + " \"recent_combined_name\",\n", + " \"portfolio_organization_name\",\n", + " \"name\",\n", + " \"schedule_gtfs_dataset_key\",\n", + " \"route_long_name\",\n", + " \"route_short_name\",\n", + " \"route_id\",\n", + " ]\n", + " ]\n", + " .sort_values(by=[\"service_date\"])\n", + " .drop_duplicates()\n", + " .tail(10)\n", + " )\n", + " display(df2)\n", + " return" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "718276dc-03e8-44ae-a39f-d315301371cb", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "def process_transit_routes() -> gpd.GeoDataFrame:\n", + " \"\"\"\n", + " Select the most recent transit route.\n", + " Also count how many routes there are for each operator.\n", + " \"\"\"\n", + " OPERATOR_ROUTE = GTFS_DATA_DICT.digest_tables.operator_routes_map\n", + "\n", + " op_geography_df = gpd.read_parquet(\n", + " f\"{RT_SCHED_GCS}{OPERATOR_ROUTE}.parquet\",\n", + " storage_options={\"token\": credentials.token},\n", + " )\n", + "\n", + " most_recent_routes = publish_utils.filter_to_recent_date(\n", + " df=op_geography_df,\n", + " group_cols=[\"portfolio_organization_name\", \"route_id\"],\n", + " )\n", + "\n", + " # Calc length of route\n", + " most_recent_routes = most_recent_routes.assign(\n", + " route_length_feet=most_recent_routes.geometry.to_crs(\n", + " geography_utils.CA_NAD83Albers_ft\n", + " ).length\n", + " )\n", + "\n", + " # Drop duplicates\n", + " most_recent_routes = most_recent_routes.drop_duplicates(\n", + " subset=[\n", + " \"portfolio_organization_name\",\n", + " \"recent_combined_name\",\n", + " \"service_date\",\n", + " \"route_id\",\n", + " ]\n", + " )\n", + " return most_recent_routes" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "95c1dead-df6d-463d-a1f2-a64d4f4a2b6b", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "routes = process_transit_routes()" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "cb4349c5-70f7-443f-bf6d-2590f769ed26", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Bullet', 'Local', 'LTD 3', 'LTD 4', 'LTD 5',\n", + " '8XX peak hour connector from/to Gilroy', '',\n", + " 'South Santa Clara County Connector'], dtype=object)" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "routes.loc[\n", + " routes.portfolio_organization_name == \"Peninsula Corridor Joint Powers Board\"\n", + "].recent_combined_name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "294fe25d-1a43-47e9-b51a-b9cf906eb305", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['A - PM Middlefield, Clyde & Whisman',\n", + " 'B - PM Shoreline, Crittenden, La Avenida',\n", + " 'C - AM Charleston, Garcia & San Antonio (Counterclockwise loop)',\n", + " 'D - AM San Antonio, Garcia & Charleston (Clockwise loop)'],\n", + " dtype=object)" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "routes.loc[\n", + " routes.portfolio_organization_name\n", + " == \"Mountain View Transportation Management Association\"\n", + "].recent_combined_name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "c368e93e-2993-4f80-b75a-30533ac0faaf", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Rt 7. A. H. College, Crossroads Shopping Center via Boone St, Bradley Rd.',\n", + " 'Rt 4. Transit Center to SMH school to VTC via Cook St., Thornburg., Betteravia Rd.',\n", + " 'Route 30 - Santa Maria Transit Center/Vandenberg/Lompoc',\n", + " '13X Transit Center/PVHS/N. Broadway',\n", + " 'Rt 1. Transit Ctr to Preisker Park Via N. Broadway',\n", + " 'Rt 6. Oak Knolls to Old Orcutt-East to West-Outbound',\n", + " 'Route 20 - Santa Maria Transit Center/Los Alamos/Buellton/Solvang-OB',\n", + " '12X Broadway/Orcutt Express',\n", + " 'Rt 3. Transit Center to Marian Hospital to PVH School, via E. Main, Suey Ln.',\n", + " \"Rt 5. Transit Center to Gov't Cntr to Evergreen Shopping Center via Miller St., S.M. Way\",\n", + " 'Rt 2. Transit Center to PVH School via Western., Donovan Rd',\n", + " 'Rt 8. Tanglewood to Crossroads Shopping Center via McCoy Ln.',\n", + " 'Rt 9. Transit Center to PVH via Alvin Ave.', 'Mall Shuttle',\n", + " \"R11. Transit Center to Gov't Center via S. Broadway\",\n", + " \"Rt 11. Transit Center to Gov't Center via S. Broadway\"],\n", + " dtype=object)" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "routes.loc[\n", + " routes.portfolio_organization_name == \"City of Santa Maria\",\n", + "].recent_combined_name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "68b65d15-5e7f-4a3b-821a-f5dad1d23c18", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['10_PM PM COMMUTER 10', '1_AM AM COMMUTER 1', '2_AM AM COMMUTER 2',\n", + " '3_AM AM COMMUTER 3', '4_PM PM COMMUTER 4', '5_AM AM COMMUTER 5',\n", + " '6_AM AM COMMUTER 6', '7_AM AM COMMUTER 7', '9_AM AM COMMUTER 9',\n", + " 'A ROUTE A', 'B ROUTE B', 'C ROUTE C', 'D ROUTE D', 'E ROUTE E',\n", + " 'F ROUTE F', 'L ROUTE L', 'M ROUTE M', 'R ROUTE R', 'S ROUTE S',\n", + " 'AM COMMUTER 8'], dtype=object)" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "routes.loc[\n", + " routes.portfolio_organization_name == \"City of Roseville\",\n", + "].recent_combined_name.unique()" + ] + }, + { + "cell_type": "markdown", + "id": "5d4fda5f-2fe5-4d87-95fc-bd2696618380", + "metadata": {}, + "source": [ + "#### Closer look at Santa Maria 'Rt 1. Transit Ctr to Preisker Park Via N. Broadway'" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "429759a8-2627-44f7-8a15-ea500b797b67", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "def display_map(gdf: gpd.GeoDataFrame, route: str):\n", + " gdf = gdf.loc[gdf.recent_combined_name.str.contains(route)][\n", + " [\"geometry\", \"route_id\"]\n", + " ]\n", + " display(gdf.explore(\"route_id\"))\n", + " return" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "6b602483-d7ce-43cc-a185-9f1ed0bc4d07", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_map(\n", + " routes,\n", + " \"Rt 1. Transit Ctr to Preisker Park Via N. Broadway\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "1186a320-737e-4ec7-a94b-9956473e4740", + "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", + "
service_daterecent_combined_nameportfolio_organization_nameschedule_gtfs_dataset_keyroute_long_nameroute_short_nameroute_id
1084782025-01-151B__Rt 1. Transit Ctr to Preisker Park Via N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d5Rt 1. Transit Ctr to Preisker Park Via N. Broadway1B1B
1084792025-01-151__Rt 1. Transit Ctr to Preisker Park Via N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d5Rt 1. Transit Ctr to Preisker Park Via N. Broadway11
1110912025-02-121B__Rt 1. Transit Ctr to Preisker Park Via N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d5Rt 1. Transit Ctr to Preisker Park Via N. Broadway1B1B
1110922025-02-121__Rt 1. Transit Ctr to Preisker Park Via N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d5Rt 1. Transit Ctr to Preisker Park Via N. Broadway11
1136142025-03-121B__Rt 1. Transit Ctr to Preisker Park Via N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d5Rt 1. Transit Ctr to Preisker Park Via N. Broadway1B1B
1136152025-03-121__Rt 1. Transit Ctr to Preisker Park Via N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d5Rt 1. Transit Ctr to Preisker Park Via N. Broadway11
1162382025-04-161B__Rt 1. Transit Ctr to Preisker Park Via N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d5Rt 1. Transit Ctr to Preisker Park Via N. Broadway1B1B
1162392025-04-161__Rt 1. Transit Ctr to Preisker Park Via N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d5Rt 1. Transit Ctr to Preisker Park Via N. Broadway11
1186552025-05-141B__Rt 1. Transit Ctr to Preisker Park Via N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d5Rt 1. Transit Ctr to Preisker Park Via N. Broadway1B1B
1186562025-05-141__Rt 1. Transit Ctr to Preisker Park Via N. BroadwayCity of Santa Maria73105f2d1cabc8170ab066d96863c5d5Rt 1. Transit Ctr to Preisker Park Via N. Broadway11
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name \\\n", + "108478 2025-01-15 1B__Rt 1. Transit Ctr to Preisker Park Via N. Broadway \n", + "108479 2025-01-15 1__Rt 1. Transit Ctr to Preisker Park Via N. Broadway \n", + "111091 2025-02-12 1B__Rt 1. Transit Ctr to Preisker Park Via N. Broadway \n", + "111092 2025-02-12 1__Rt 1. Transit Ctr to Preisker Park Via N. Broadway \n", + "113614 2025-03-12 1B__Rt 1. Transit Ctr to Preisker Park Via N. Broadway \n", + "113615 2025-03-12 1__Rt 1. Transit Ctr to Preisker Park Via N. Broadway \n", + "116238 2025-04-16 1B__Rt 1. Transit Ctr to Preisker Park Via N. Broadway \n", + "116239 2025-04-16 1__Rt 1. Transit Ctr to Preisker Park Via N. Broadway \n", + "118655 2025-05-14 1B__Rt 1. Transit Ctr to Preisker Park Via N. Broadway \n", + "118656 2025-05-14 1__Rt 1. Transit Ctr to Preisker Park Via N. Broadway \n", + "\n", + " portfolio_organization_name schedule_gtfs_dataset_key \\\n", + "108478 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "108479 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "111091 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "111092 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "113614 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "113615 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "116238 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "116239 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "118655 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "118656 City of Santa Maria 73105f2d1cabc8170ab066d96863c5d5 \n", + "\n", + " route_long_name route_short_name \\\n", + "108478 Rt 1. Transit Ctr to Preisker Park Via N. Broadway 1B \n", + "108479 Rt 1. Transit Ctr to Preisker Park Via N. Broadway 1 \n", + "111091 Rt 1. Transit Ctr to Preisker Park Via N. Broadway 1B \n", + "111092 Rt 1. Transit Ctr to Preisker Park Via N. Broadway 1 \n", + "113614 Rt 1. Transit Ctr to Preisker Park Via N. Broadway 1B \n", + "113615 Rt 1. Transit Ctr to Preisker Park Via N. Broadway 1 \n", + "116238 Rt 1. Transit Ctr to Preisker Park Via N. Broadway 1B \n", + "116239 Rt 1. Transit Ctr to Preisker Park Via N. Broadway 1 \n", + "118655 Rt 1. Transit Ctr to Preisker Park Via N. Broadway 1B \n", + "118656 Rt 1. Transit Ctr to Preisker Park Via N. Broadway 1 \n", + "\n", + " route_id \n", + "108478 1B \n", + "108479 1 \n", + "111091 1B \n", + "111092 1 \n", + "113614 1B \n", + "113615 1 \n", + "116238 1B \n", + "116239 1 \n", + "118655 1B \n", + "118656 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "inspect_recent_rows(\n", + " df,\n", + " \"Rt 1. Transit Ctr to Preisker Park Via N. Broadway\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "ecdef45f-3099-4e01-9938-cc1529924735", + "metadata": {}, + "source": [ + "#### Closer look at Roseville '1_AM AM COMMUTER 1'\n", + "* There are two separate routes that show up in the map." + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "ee79d500-6acc-41cd-acb2-8d6b897fa9bd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_map(\n", + " routes,\n", + " \"1_AM AM COMMUTER 1\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "85679418-bf4c-4cf3-babe-963cdc133280", + "metadata": { + "tags": [] + }, + "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", + "
service_daterecent_combined_nameportfolio_organization_nameschedule_gtfs_dataset_keyroute_long_nameroute_short_nameroute_id
1186952025-05-141_AM__AM COMMUTER 1City of Roseville3f420af2aea56d3ba5a1b10f488f0575AM COMMUTER 11_AM1_AM
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name portfolio_organization_name \\\n", + "118695 2025-05-14 1_AM__AM COMMUTER 1 City of Roseville \n", + "\n", + " schedule_gtfs_dataset_key route_long_name route_short_name \\\n", + "118695 3f420af2aea56d3ba5a1b10f488f0575 AM COMMUTER 1 1_AM \n", + "\n", + " route_id \n", + "118695 1_AM " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "inspect_recent_rows(df, \"AM COMMUTER 1\")" + ] + }, + { + "cell_type": "markdown", + "id": "0a0fc61c-2d9c-4eae-9685-424386e27a3e", + "metadata": {}, + "source": [ + "#### Closer look at Roseville '9_AM__AM COMMUTER 9'\n", + "* There are two separate routes that show up in the map.\n", + "* recent_combined_name was __AM COMMUTER 9 \t then this route disappeared for 5 months between Dec to May 2025 and popped up under a different name." + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "48024a5f-ffbe-4453-8d3f-790dab3fbf33", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_map(\n", + " routes,\n", + " \"9_AM AM COMMUTER 9\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "a9515fc2-ecbb-4bec-bd0a-afac994c260c", + "metadata": { + "tags": [] + }, + "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", + "
service_daterecent_combined_nameportfolio_organization_nameschedule_gtfs_dataset_keyroute_long_nameroute_short_nameroute_id
813352024-08-14__AM COMMUTER 9City of Roseville13ff8c918cc62f49169d93a04864d8e7AM COMMUTER 99_AM
837992024-09-18__AM COMMUTER 9City of Rosevillefb746afc72ff40405cfefa6d23ab58a0AM COMMUTER 99_AM
864532024-10-14__AM COMMUTER 9City of Rosevillefb746afc72ff40405cfefa6d23ab58a0AM COMMUTER 99_AM
896392024-10-15__AM COMMUTER 9City of Rosevillefb746afc72ff40405cfefa6d23ab58a0AM COMMUTER 99_AM
922332024-10-16__AM COMMUTER 9City of Rosevillefb746afc72ff40405cfefa6d23ab58a0AM COMMUTER 99_AM
948222024-10-17__AM COMMUTER 9City of Rosevillefb746afc72ff40405cfefa6d23ab58a0AM COMMUTER 99_AM
967772024-10-18__AM COMMUTER 9City of Rosevillefb746afc72ff40405cfefa6d23ab58a0AM COMMUTER 99_AM
1024972024-11-13__AM COMMUTER 9City of Rosevillefb746afc72ff40405cfefa6d23ab58a0AM COMMUTER 99_AM
1051642024-12-11__AM COMMUTER 9City of Rosevillefb746afc72ff40405cfefa6d23ab58a0AM COMMUTER 99_AM
1187012025-05-149_AM__AM COMMUTER 9City of Roseville3f420af2aea56d3ba5a1b10f488f0575AM COMMUTER 99_AM9_AM
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name portfolio_organization_name \\\n", + "81335 2024-08-14 __AM COMMUTER 9 City of Roseville \n", + "83799 2024-09-18 __AM COMMUTER 9 City of Roseville \n", + "86453 2024-10-14 __AM COMMUTER 9 City of Roseville \n", + "89639 2024-10-15 __AM COMMUTER 9 City of Roseville \n", + "92233 2024-10-16 __AM COMMUTER 9 City of Roseville \n", + "94822 2024-10-17 __AM COMMUTER 9 City of Roseville \n", + "96777 2024-10-18 __AM COMMUTER 9 City of Roseville \n", + "102497 2024-11-13 __AM COMMUTER 9 City of Roseville \n", + "105164 2024-12-11 __AM COMMUTER 9 City of Roseville \n", + "118701 2025-05-14 9_AM__AM COMMUTER 9 City of Roseville \n", + "\n", + " schedule_gtfs_dataset_key route_long_name route_short_name \\\n", + "81335 13ff8c918cc62f49169d93a04864d8e7 AM COMMUTER 9 \n", + "83799 fb746afc72ff40405cfefa6d23ab58a0 AM COMMUTER 9 \n", + "86453 fb746afc72ff40405cfefa6d23ab58a0 AM COMMUTER 9 \n", + "89639 fb746afc72ff40405cfefa6d23ab58a0 AM COMMUTER 9 \n", + "92233 fb746afc72ff40405cfefa6d23ab58a0 AM COMMUTER 9 \n", + "94822 fb746afc72ff40405cfefa6d23ab58a0 AM COMMUTER 9 \n", + "96777 fb746afc72ff40405cfefa6d23ab58a0 AM COMMUTER 9 \n", + "102497 fb746afc72ff40405cfefa6d23ab58a0 AM COMMUTER 9 \n", + "105164 fb746afc72ff40405cfefa6d23ab58a0 AM COMMUTER 9 \n", + "118701 3f420af2aea56d3ba5a1b10f488f0575 AM COMMUTER 9 9_AM \n", + "\n", + " route_id \n", + "81335 9_AM \n", + "83799 9_AM \n", + "86453 9_AM \n", + "89639 9_AM \n", + "92233 9_AM \n", + "94822 9_AM \n", + "96777 9_AM \n", + "102497 9_AM \n", + "105164 9_AM \n", + "118701 9_AM " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "inspect_recent_rows(df, \"AM COMMUTER 9\")" + ] + }, + { + "cell_type": "markdown", + "id": "9bd37556-5930-4d9a-9181-6ec865503dde", + "metadata": {}, + "source": [ + "### Mountain View C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)/'C - AM Charleston, Garcia & San Antonio (Counterclockwise loop)',\n", + "* 2 different route_id for the same route, just one for am/one for pm" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "a7740f72-2ccc-485d-9707-40aca3a16431", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "routes.loc[\n", + " routes.recent_combined_name\n", + " == \"C - AM Charleston, Garcia & San Antonio (Counterclockwise loop)\"\n", + "][[\"geometry\", \"route_id\"]].explore(\"route_id\")" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "1fd68927-8ba3-45cc-9ada-7a606e3fee8b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
service_daterecent_combined_nameportfolio_organization_nameschedule_gtfs_dataset_keyroute_long_nameroute_short_nameroute_id
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [service_date, recent_combined_name, portfolio_organization_name, schedule_gtfs_dataset_key, route_long_name, route_short_name, route_id]\n", + "Index: []" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "inspect_recent_rows(df, \"Charleston, Garcia & San Antonio\")" + ] + }, + { + "cell_type": "markdown", + "id": "4c2927c5-250e-466b-9c49-241020b54dca", + "metadata": {}, + "source": [ + "### Mountainview - 'A - PM Middlefield, Clyde & Whisman'," + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "340754ae-1a07-4442-8cb4-6eb1cbeaf3e3", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "routes.loc[routes.recent_combined_name == \"A - PM Middlefield, Clyde & Whisman\"][\n", + " [\"geometry\", \"route_id\"]\n", + "].explore(\"route_id\")" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "1a1ac488-9e6a-4185-93f0-f47f65fd2741", + "metadata": { + "tags": [] + }, + "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", + "
service_daterecent_combined_nameportfolio_organization_nameschedule_gtfs_dataset_keyroute_long_nameroute_short_nameroute_id
907512024-10-16A - PM__Middlefield, Clyde & WhismanMountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Middlefield, Clyde & WhismanA - PMA - PM
933562024-10-17A - PM__Middlefield, Clyde & WhismanMountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Middlefield, Clyde & WhismanA - PMA - PM
960172024-10-18A - PM__Middlefield, Clyde & WhismanMountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Middlefield, Clyde & WhismanA - PMA - PM
1017742024-11-13A - PM__Middlefield, Clyde & WhismanMountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Middlefield, Clyde & WhismanA - PMA - PM
1044422024-12-11A - PM__Middlefield, Clyde & WhismanMountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Middlefield, Clyde & WhismanA - PMA - PM
1069872025-01-15A - PM__Middlefield, Clyde & WhismanMountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Middlefield, Clyde & WhismanA - PMA - PM
1096622025-02-12A - PM__Middlefield, Clyde & WhismanMountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Middlefield, Clyde & WhismanA - PMA - PM
1122232025-03-12A - PM__Middlefield, Clyde & WhismanMountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Middlefield, Clyde & WhismanA - PMA - PM
1146822025-04-16A - PM__Middlefield, Clyde & WhismanMountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Middlefield, Clyde & WhismanA - PMA - PM
1171292025-05-14A - PM__Middlefield, Clyde & WhismanMountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Middlefield, Clyde & WhismanA - PMA - PM
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name \\\n", + "90751 2024-10-16 A - PM__Middlefield, Clyde & Whisman \n", + "93356 2024-10-17 A - PM__Middlefield, Clyde & Whisman \n", + "96017 2024-10-18 A - PM__Middlefield, Clyde & Whisman \n", + "101774 2024-11-13 A - PM__Middlefield, Clyde & Whisman \n", + "104442 2024-12-11 A - PM__Middlefield, Clyde & Whisman \n", + "106987 2025-01-15 A - PM__Middlefield, Clyde & Whisman \n", + "109662 2025-02-12 A - PM__Middlefield, Clyde & Whisman \n", + "112223 2025-03-12 A - PM__Middlefield, Clyde & Whisman \n", + "114682 2025-04-16 A - PM__Middlefield, Clyde & Whisman \n", + "117129 2025-05-14 A - PM__Middlefield, Clyde & Whisman \n", + "\n", + " portfolio_organization_name \\\n", + "90751 Mountain View Transportation Management Association \n", + "93356 Mountain View Transportation Management Association \n", + "96017 Mountain View Transportation Management Association \n", + "101774 Mountain View Transportation Management Association \n", + "104442 Mountain View Transportation Management Association \n", + "106987 Mountain View Transportation Management Association \n", + "109662 Mountain View Transportation Management Association \n", + "112223 Mountain View Transportation Management Association \n", + "114682 Mountain View Transportation Management Association \n", + "117129 Mountain View Transportation Management Association \n", + "\n", + " schedule_gtfs_dataset_key route_long_name \\\n", + "90751 6869ab0f62d858fcd5d070e651609224 Middlefield, Clyde & Whisman \n", + "93356 6869ab0f62d858fcd5d070e651609224 Middlefield, Clyde & Whisman \n", + "96017 6869ab0f62d858fcd5d070e651609224 Middlefield, Clyde & Whisman \n", + "101774 6869ab0f62d858fcd5d070e651609224 Middlefield, Clyde & Whisman \n", + "104442 6869ab0f62d858fcd5d070e651609224 Middlefield, Clyde & Whisman \n", + "106987 6869ab0f62d858fcd5d070e651609224 Middlefield, Clyde & Whisman \n", + "109662 6869ab0f62d858fcd5d070e651609224 Middlefield, Clyde & Whisman \n", + "112223 6869ab0f62d858fcd5d070e651609224 Middlefield, Clyde & Whisman \n", + "114682 6869ab0f62d858fcd5d070e651609224 Middlefield, Clyde & Whisman \n", + "117129 6869ab0f62d858fcd5d070e651609224 Middlefield, Clyde & Whisman \n", + "\n", + " route_short_name route_id \n", + "90751 A - PM A - PM \n", + "93356 A - PM A - PM \n", + "96017 A - PM A - PM \n", + "101774 A - PM A - PM \n", + "104442 A - PM A - PM \n", + "106987 A - PM A - PM \n", + "109662 A - PM A - PM \n", + "112223 A - PM A - PM \n", + "114682 A - PM A - PM \n", + "117129 A - PM A - PM " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "inspect_recent_rows(df, \"Middlefield, Clyde & Whisman\")" + ] + }, + { + "cell_type": "markdown", + "id": "0c45dd60-f0a2-4012-b6e3-e58da136cb8a", + "metadata": {}, + "source": [ + "## Check the feed keys for Palo Verde" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "b67dbb8b-9fae-4d14-894a-8948612b0388", + "metadata": { + "tags": [] + }, + "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", + "
schedule_gtfs_dataset_keynameorganization_nameservice_date
14696680f72c0c59208e055c81be87ad4a9Desert Roadrunner SchedulePalo Verde Valley Transit Agency2025-01-15
2054383eb1cca04093020f1583f57f32d9bDesert Roadrunner GMV SchedulePalo Verde Valley Transit Agency2025-01-15
14796680f72c0c59208e055c81be87ad4a9Desert Roadrunner SchedulePalo Verde Valley Transit Agency2025-02-12
2064383eb1cca04093020f1583f57f32d9bDesert Roadrunner GMV SchedulePalo Verde Valley Transit Agency2025-02-12
14596680f72c0c59208e055c81be87ad4a9Desert Roadrunner SchedulePalo Verde Valley Transit Agency2025-03-12
2054383eb1cca04093020f1583f57f32d9bDesert Roadrunner GMV SchedulePalo Verde Valley Transit Agency2025-03-12
14596680f72c0c59208e055c81be87ad4a9Desert Roadrunner SchedulePalo Verde Valley Transit Agency2025-04-16
2114383eb1cca04093020f1583f57f32d9bDesert Roadrunner GMV SchedulePalo Verde Valley Transit Agency2025-04-16
14296680f72c0c59208e055c81be87ad4a9Desert Roadrunner SchedulePalo Verde Valley Transit Agency2025-05-14
2104383eb1cca04093020f1583f57f32d9bDesert Roadrunner GMV SchedulePalo Verde Valley Transit Agency2025-05-14
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key name \\\n", + "146 96680f72c0c59208e055c81be87ad4a9 Desert Roadrunner Schedule \n", + "205 4383eb1cca04093020f1583f57f32d9b Desert Roadrunner GMV Schedule \n", + "147 96680f72c0c59208e055c81be87ad4a9 Desert Roadrunner Schedule \n", + "206 4383eb1cca04093020f1583f57f32d9b Desert Roadrunner GMV Schedule \n", + "145 96680f72c0c59208e055c81be87ad4a9 Desert Roadrunner Schedule \n", + "205 4383eb1cca04093020f1583f57f32d9b Desert Roadrunner GMV Schedule \n", + "145 96680f72c0c59208e055c81be87ad4a9 Desert Roadrunner Schedule \n", + "211 4383eb1cca04093020f1583f57f32d9b Desert Roadrunner GMV Schedule \n", + "142 96680f72c0c59208e055c81be87ad4a9 Desert Roadrunner Schedule \n", + "210 4383eb1cca04093020f1583f57f32d9b Desert Roadrunner GMV Schedule \n", + "\n", + " organization_name service_date \n", + "146 Palo Verde Valley Transit Agency 2025-01-15 \n", + "205 Palo Verde Valley Transit Agency 2025-01-15 \n", + "147 Palo Verde Valley Transit Agency 2025-02-12 \n", + "206 Palo Verde Valley Transit Agency 2025-02-12 \n", + "145 Palo Verde Valley Transit Agency 2025-03-12 \n", + "205 Palo Verde Valley Transit Agency 2025-03-12 \n", + "145 Palo Verde Valley Transit Agency 2025-04-16 \n", + "211 Palo Verde Valley Transit Agency 2025-04-16 \n", + "142 Palo Verde Valley Transit Agency 2025-05-14 \n", + "210 Palo Verde Valley Transit Agency 2025-05-14 " + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "crosswalk_df.loc[\n", + " crosswalk_df.organization_name.str.contains(\n", + " \"Palo Verde Valley Transit Agency\",\n", + " )\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "da87b227-1979-4164-9668-3ddf66357d6a", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['schedule_gtfs_dataset_key', 'name', 'route_id', 'route_long_name',\n", + " 'route_short_name', 'route_desc', 'service_date', 'combined_name',\n", + " 'route_id2', 'recent_combined_name', 'recent_route_id2',\n", + " 'portfolio_organization_name'],\n", + " dtype='object')" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "e74658ef-3f0a-4ea1-8edf-31136ff6f6c5", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "desert_roadrunner_schd = df.loc[(df.name.str.contains(\"Desert Roadrunner Schedule\"))]" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "ca72b496-bce1-4815-ab75-b0773f2bb29a", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(180, 12)" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "desert_roadrunner_schd.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "b45f77c0-6fae-4157-bf0e-f1fe9b695b62", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "desert_roadrunner_gmv_schd = df.loc[\n", + " (df.name.str.contains(\"Desert Roadrunner GMV Schedule\"))\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "599d225f-44c0-4a24-8c1b-3a62f85f081b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(162, 12)" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "desert_roadrunner_gmv_schd.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "id": "ce25095b-ec89-440e-aab9-75a5da4613dd", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'1__Blue Route',\n", + " '2__Gold Route',\n", + " '3__Red Route',\n", + " '4__Green Route',\n", + " '5__Silver Route',\n", + " '6__Wellness Express'}" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set(list(desert_roadrunner_schd.recent_combined_name.unique()))" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "6dfee5e1-a1a8-48f4-905d-aa2a13d5ad7d", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'1444', '358', '359', '360', '361', '6467'}" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set(list(desert_roadrunner_schd.route_id.unique()))" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "8acbefb6-386d-43c5-9a5e-907e45058d51", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'1__Blue Route',\n", + " '2__Gold Route',\n", + " '3__Red Route',\n", + " '4__Green Route',\n", + " '5__Silver Route',\n", + " '6__Wellness Express'}" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set(list(desert_roadrunner_gmv_schd.recent_combined_name.unique()))" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "id": "c3481e63-965a-45c9-b4a2-20ba4ee3bb82", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'5964', '5965', '5966', '5967', '5969', '5970'}" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set(list(desert_roadrunner_gmv_schd.route_id.unique()))" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "id": "2d370f97-d446-4444-a01f-74ad84eefda6", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Timestamp('2025-05-14 00:00:00')" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "desert_roadrunner_gmv_schd.service_date.max()" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "id": "14c5cd5c-b651-4ce3-ac3c-1eafa94f597b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Timestamp('2025-05-14 00:00:00')" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "desert_roadrunner_schd.service_date.max()" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "id": "623f3908-f8e4-41c4-bd10-04b8a1fbc9fb", + "metadata": { + "scrolled": true, + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
service_daterecent_combined_nameportfolio_organization_nameschedule_gtfs_dataset_keyroute_long_nameroute_short_nameroute_id
265082023-09-136__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
313302023-10-096__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
342232023-10-116__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
394192023-10-136__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
451622023-11-156__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
477582023-12-136__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
503162024-01-176__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
549262024-02-146__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
552932024-03-136__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
577592024-04-156__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
628912024-04-176__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
679082024-04-196__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
731752024-05-226__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
755492024-06-126__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
795542024-07-176__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
797662024-08-146__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
821772024-09-186__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
846992024-10-146__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
921252024-10-166__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
949702024-10-186__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1031502024-11-136__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1034142024-12-116__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1085252025-01-156__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1110222025-02-126__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1135492025-03-126__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1162832025-04-166__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1185872025-05-146__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name portfolio_organization_name \\\n", + "26508 2023-09-13 6__Wellness Express Palo Verde Valley Transit Agency \n", + "31330 2023-10-09 6__Wellness Express Palo Verde Valley Transit Agency \n", + "34223 2023-10-11 6__Wellness Express Palo Verde Valley Transit Agency \n", + "39419 2023-10-13 6__Wellness Express Palo Verde Valley Transit Agency \n", + "45162 2023-11-15 6__Wellness Express Palo Verde Valley Transit Agency \n", + "47758 2023-12-13 6__Wellness Express Palo Verde Valley Transit Agency \n", + "50316 2024-01-17 6__Wellness Express Palo Verde Valley Transit Agency \n", + "54926 2024-02-14 6__Wellness Express Palo Verde Valley Transit Agency \n", + "55293 2024-03-13 6__Wellness Express Palo Verde Valley Transit Agency \n", + "57759 2024-04-15 6__Wellness Express Palo Verde Valley Transit Agency \n", + "62891 2024-04-17 6__Wellness Express Palo Verde Valley Transit Agency \n", + "67908 2024-04-19 6__Wellness Express Palo Verde Valley Transit Agency \n", + "73175 2024-05-22 6__Wellness Express Palo Verde Valley Transit Agency \n", + "75549 2024-06-12 6__Wellness Express Palo Verde Valley Transit Agency \n", + "79554 2024-07-17 6__Wellness Express Palo Verde Valley Transit Agency \n", + "79766 2024-08-14 6__Wellness Express Palo Verde Valley Transit Agency \n", + "82177 2024-09-18 6__Wellness Express Palo Verde Valley Transit Agency \n", + "84699 2024-10-14 6__Wellness Express Palo Verde Valley Transit Agency \n", + "92125 2024-10-16 6__Wellness Express Palo Verde Valley Transit Agency \n", + "94970 2024-10-18 6__Wellness Express Palo Verde Valley Transit Agency \n", + "103150 2024-11-13 6__Wellness Express Palo Verde Valley Transit Agency \n", + "103414 2024-12-11 6__Wellness Express Palo Verde Valley Transit Agency \n", + "108525 2025-01-15 6__Wellness Express Palo Verde Valley Transit Agency \n", + "111022 2025-02-12 6__Wellness Express Palo Verde Valley Transit Agency \n", + "113549 2025-03-12 6__Wellness Express Palo Verde Valley Transit Agency \n", + "116283 2025-04-16 6__Wellness Express Palo Verde Valley Transit Agency \n", + "118587 2025-05-14 6__Wellness Express Palo Verde Valley Transit Agency \n", + "\n", + " schedule_gtfs_dataset_key route_long_name route_short_name \\\n", + "26508 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "31330 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "34223 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "39419 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "45162 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "47758 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "50316 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "54926 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "55293 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "57759 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "62891 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "67908 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "73175 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "75549 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "79554 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "79766 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "82177 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "84699 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "92125 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "94970 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "103150 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "103414 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "108525 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "111022 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "113549 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "116283 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "118587 4383eb1cca04093020f1583f57f32d9b Wellness Express 6 \n", + "\n", + " route_id \n", + "26508 5970 \n", + "31330 5970 \n", + "34223 5970 \n", + "39419 5970 \n", + "45162 5970 \n", + "47758 5970 \n", + "50316 5970 \n", + "54926 5970 \n", + "55293 5970 \n", + "57759 5970 \n", + "62891 5970 \n", + "67908 5970 \n", + "73175 5970 \n", + "75549 5970 \n", + "79554 5970 \n", + "79766 5970 \n", + "82177 5970 \n", + "84699 5970 \n", + "92125 5970 \n", + "94970 5970 \n", + "103150 5970 \n", + "103414 5970 \n", + "108525 5970 \n", + "111022 5970 \n", + "113549 5970 \n", + "116283 5970 \n", + "118587 5970 " + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "desert_roadrunner_gmv_schd.loc[\n", + " desert_roadrunner_gmv_schd.recent_combined_name == \"6__Wellness Express\"\n", + "][\n", + " [\n", + " \"service_date\",\n", + " \"recent_combined_name\",\n", + " \"portfolio_organization_name\",\n", + " \"schedule_gtfs_dataset_key\",\n", + " \"route_long_name\",\n", + " \"route_short_name\",\n", + " \"route_id\",\n", + " ]\n", + "].sort_values(\n", + " by=[\"service_date\"]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "id": "ddf61f87-25c0-4b14-aed5-71f001d602f8", + "metadata": { + "scrolled": true, + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
service_daterecent_combined_nameportfolio_organization_nameschedule_gtfs_dataset_keyroute_long_nameroute_short_nameroute_id
22952023-03-156__Wellness ExpressPalo Verde Valley Transit Agency69c28a761e7b8186ccfab752f38df2dcWellness Express66467
189992023-05-176__Wellness ExpressPalo Verde Valley Transit Agency69c28a761e7b8186ccfab752f38df2dcWellness Express66467
213872023-06-146__Wellness ExpressPalo Verde Valley Transit Agency69c28a761e7b8186ccfab752f38df2dcWellness Express66467
238102023-07-126__Wellness ExpressPalo Verde Valley Transit Agency69c28a761e7b8186ccfab752f38df2dcWellness Express66467
287202023-09-136__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
314562023-10-096__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
364932023-10-116__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
416472023-10-136__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
474062023-11-156__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
501752023-12-136__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
525652024-01-176__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
550982024-02-146__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
575612024-03-136__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
601352024-04-156__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
652032024-04-176__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
701612024-04-196__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
773652024-06-126__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
795002024-07-176__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
818882024-08-146__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
845652024-09-186__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
870322024-10-146__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
920722024-10-166__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
973962024-10-186__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
1032822024-11-136__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
1059402024-12-116__Wellness ExpressPalo Verde Valley Transit Agencya4fbbb85891191f714ec113dfe1a936bWellness Express66467
1080132025-01-156__Wellness ExpressPalo Verde Valley Transit Agency96680f72c0c59208e055c81be87ad4a9Wellness Express66467
1104282025-02-126__Wellness ExpressPalo Verde Valley Transit Agency96680f72c0c59208e055c81be87ad4a9Wellness Express66467
1128922025-03-126__Wellness ExpressPalo Verde Valley Transit Agency96680f72c0c59208e055c81be87ad4a9Wellness Express66467
1154172025-04-166__Wellness ExpressPalo Verde Valley Transit Agency96680f72c0c59208e055c81be87ad4a9Wellness Express66467
1182152025-05-146__Wellness ExpressPalo Verde Valley Transit Agency96680f72c0c59208e055c81be87ad4a9Wellness Express66467
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name portfolio_organization_name \\\n", + "2295 2023-03-15 6__Wellness Express Palo Verde Valley Transit Agency \n", + "18999 2023-05-17 6__Wellness Express Palo Verde Valley Transit Agency \n", + "21387 2023-06-14 6__Wellness Express Palo Verde Valley Transit Agency \n", + "23810 2023-07-12 6__Wellness Express Palo Verde Valley Transit Agency \n", + "28720 2023-09-13 6__Wellness Express Palo Verde Valley Transit Agency \n", + "31456 2023-10-09 6__Wellness Express Palo Verde Valley Transit Agency \n", + "36493 2023-10-11 6__Wellness Express Palo Verde Valley Transit Agency \n", + "41647 2023-10-13 6__Wellness Express Palo Verde Valley Transit Agency \n", + "47406 2023-11-15 6__Wellness Express Palo Verde Valley Transit Agency \n", + "50175 2023-12-13 6__Wellness Express Palo Verde Valley Transit Agency \n", + "52565 2024-01-17 6__Wellness Express Palo Verde Valley Transit Agency \n", + "55098 2024-02-14 6__Wellness Express Palo Verde Valley Transit Agency \n", + "57561 2024-03-13 6__Wellness Express Palo Verde Valley Transit Agency \n", + "60135 2024-04-15 6__Wellness Express Palo Verde Valley Transit Agency \n", + "65203 2024-04-17 6__Wellness Express Palo Verde Valley Transit Agency \n", + "70161 2024-04-19 6__Wellness Express Palo Verde Valley Transit Agency \n", + "77365 2024-06-12 6__Wellness Express Palo Verde Valley Transit Agency \n", + "79500 2024-07-17 6__Wellness Express Palo Verde Valley Transit Agency \n", + "81888 2024-08-14 6__Wellness Express Palo Verde Valley Transit Agency \n", + "84565 2024-09-18 6__Wellness Express Palo Verde Valley Transit Agency \n", + "87032 2024-10-14 6__Wellness Express Palo Verde Valley Transit Agency \n", + "92072 2024-10-16 6__Wellness Express Palo Verde Valley Transit Agency \n", + "97396 2024-10-18 6__Wellness Express Palo Verde Valley Transit Agency \n", + "103282 2024-11-13 6__Wellness Express Palo Verde Valley Transit Agency \n", + "105940 2024-12-11 6__Wellness Express Palo Verde Valley Transit Agency \n", + "108013 2025-01-15 6__Wellness Express Palo Verde Valley Transit Agency \n", + "110428 2025-02-12 6__Wellness Express Palo Verde Valley Transit Agency \n", + "112892 2025-03-12 6__Wellness Express Palo Verde Valley Transit Agency \n", + "115417 2025-04-16 6__Wellness Express Palo Verde Valley Transit Agency \n", + "118215 2025-05-14 6__Wellness Express Palo Verde Valley Transit Agency \n", + "\n", + " schedule_gtfs_dataset_key route_long_name route_short_name \\\n", + "2295 69c28a761e7b8186ccfab752f38df2dc Wellness Express 6 \n", + "18999 69c28a761e7b8186ccfab752f38df2dc Wellness Express 6 \n", + "21387 69c28a761e7b8186ccfab752f38df2dc Wellness Express 6 \n", + "23810 69c28a761e7b8186ccfab752f38df2dc Wellness Express 6 \n", + "28720 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "31456 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "36493 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "41647 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "47406 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "50175 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "52565 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "55098 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "57561 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "60135 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "65203 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "70161 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "77365 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "79500 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "81888 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "84565 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "87032 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "92072 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "97396 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "103282 ac9384d5e25378d1898ca522070cef66 Wellness Express 6 \n", + "105940 a4fbbb85891191f714ec113dfe1a936b Wellness Express 6 \n", + "108013 96680f72c0c59208e055c81be87ad4a9 Wellness Express 6 \n", + "110428 96680f72c0c59208e055c81be87ad4a9 Wellness Express 6 \n", + "112892 96680f72c0c59208e055c81be87ad4a9 Wellness Express 6 \n", + "115417 96680f72c0c59208e055c81be87ad4a9 Wellness Express 6 \n", + "118215 96680f72c0c59208e055c81be87ad4a9 Wellness Express 6 \n", + "\n", + " route_id \n", + "2295 6467 \n", + "18999 6467 \n", + "21387 6467 \n", + "23810 6467 \n", + "28720 6467 \n", + "31456 6467 \n", + "36493 6467 \n", + "41647 6467 \n", + "47406 6467 \n", + "50175 6467 \n", + "52565 6467 \n", + "55098 6467 \n", + "57561 6467 \n", + "60135 6467 \n", + "65203 6467 \n", + "70161 6467 \n", + "77365 6467 \n", + "79500 6467 \n", + "81888 6467 \n", + "84565 6467 \n", + "87032 6467 \n", + "92072 6467 \n", + "97396 6467 \n", + "103282 6467 \n", + "105940 6467 \n", + "108013 6467 \n", + "110428 6467 \n", + "112892 6467 \n", + "115417 6467 \n", + "118215 6467 " + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "desert_roadrunner_schd.loc[\n", + " desert_roadrunner_schd.recent_combined_name == \"6__Wellness Express\"\n", + "][\n", + " [\n", + " \"service_date\",\n", + " \"recent_combined_name\",\n", + " \"portfolio_organization_name\",\n", + " \"schedule_gtfs_dataset_key\",\n", + " \"route_long_name\",\n", + " \"route_short_name\",\n", + " \"route_id\",\n", + " ]\n", + "].sort_values(\n", + " by=[\"service_date\"]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "id": "a32139a0-fa6b-46b3-9ffc-41ed33d63dcb", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['shape_array_key', 'geometry', 'feed_key', 'schedule_gtfs_dataset_key',\n", + " 'route_id', 'direction_id', 'route_key', 'route_length',\n", + " 'route_length_miles', 'is_downtown_local', 'is_local', 'is_coverage',\n", + " 'is_rapid', 'is_express', 'is_rail', 'is_ferry',\n", + " 'organization_source_record_id', 'organization_name', 'service_date',\n", + " 'portfolio_organization_name', 'name', 'combined_name',\n", + " 'recent_combined_name', 'recent_route_id',\n", + " 'route_length_miles_percentile', 'percentile_group',\n", + " 'route_length_feet'],\n", + " dtype='object')" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "routes.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "acd52fe7-13cd-49cd-b1d8-5f267ebdd877", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['1 Blue Route', '2 Gold Route', '3 Red Route', '4 Green Route',\n", + " '6 Wellness Express'], dtype=object)" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "routes.loc[\n", + " routes.name.isin([\"Desert Roadrunner GMV Schedule\", \"Desert Roadrunner Schedule\"])\n", + "].recent_combined_name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "id": "e416e7c0-7c8c-4ab1-b925-8c7e552cff0b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'1 Blue Route'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'2 Gold Route'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'3 Red Route'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'4 Green Route'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'6 Wellness Express'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for route in list(\n", + " routes.loc[\n", + " routes.name.isin(\n", + " [\"Desert Roadrunner GMV Schedule\", \"Desert Roadrunner Schedule\"]\n", + " )\n", + " ].recent_combined_name.unique()\n", + "):\n", + " display(route)\n", + " display(\n", + " routes.loc[routes.recent_combined_name == route][[\"name\", \"geometry\"]].explore(\n", + " \"name\"\n", + " )\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "87bb71af-21dd-4237-86fb-c0ec6cb6ad03", + "metadata": {}, + "source": [ + "## Find which routes have the same `recent_combined_name`,`route_long_name`, `route_short_name` but different operator + route_id info" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "id": "a7755188-11fa-4018-952e-ab7b06893ead", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "agg2 = (\n", + " with_pipe.groupby(\n", + " [\n", + " \"service_date\",\n", + " \"recent_combined_name\",\n", + " \"portfolio_organization_name\",\n", + " \"route_long_name\",\n", + " \"route_short_name\",\n", + " ]\n", + " )\n", + " .agg({\"route_id\": \"nunique\"})\n", + " .reset_index()\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "id": "295b0f1f-59c6-4464-9b40-d2a8d3732c1e", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "agg2_filtered = agg2.loc[(agg2.route_id > 1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "id": "ad97c748-8a45-48ce-ac21-32ba2b6eaad5", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(329, 6)" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg2_filtered.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "id": "807625d0-88b2-4588-8dbd-9f1f5de7be3f", + "metadata": { + "tags": [] + }, + "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", + "
service_daterecent_combined_nameportfolio_organization_nameroute_long_nameroute_short_nameroute_id
995262024-10-20__Maple LeafAmtrakMaple Leaf2
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name portfolio_organization_name \\\n", + "99526 2024-10-20 __Maple Leaf Amtrak \n", + "\n", + " route_long_name route_short_name route_id \n", + "99526 Maple Leaf 2 " + ] + }, + "execution_count": 91, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg2_filtered.sample()" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "id": "b061b4ea-e038-43f3-b4a5-58f6e1dfdf48", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['City of Los Angeles', 'Amtrak',\n", + " 'Mission Bay Transportation Management Agency',\n", + " 'Palo Verde Valley Transit Agency',\n", + " 'San Luis Obispo Regional Transit Authority',\n", + " 'Los Angeles World Airports'], dtype=object)" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg2_filtered.portfolio_organization_name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "id": "828e72a5-8fc2-4121-9794-89c6478a0b64", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "agg2_filtered2 = agg2_filtered[\n", + " [\"service_date\", \"portfolio_organization_name\", \"recent_combined_name\", \"route_id\"]\n", + "].drop_duplicates().sort_values(\n", + " by=[\"portfolio_organization_name\", \"recent_combined_name\", \"service_date\"]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "id": "6b63ec6a-ae51-49e4-adc4-2caf49a18727", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['2023-03-15', '2023-04-10', '2023-04-11', '2023-04-12',\n", + " '2023-04-13', '2023-04-14', '2023-04-15', '2023-04-16',\n", + " '2023-05-17', '2023-06-14', '2023-07-12', '2023-08-15',\n", + " '2023-09-13', '2023-10-09', '2023-10-10', '2023-10-11',\n", + " '2023-10-12', '2023-10-13', '2023-10-14', '2023-10-15',\n", + " '2023-11-15', '2024-10-19', '2024-10-20', '2024-11-13',\n", + " '2024-12-11', '2025-01-15', '2025-02-12', '2025-03-12',\n", + " '2025-04-16', '2025-05-14', '2023-12-13', '2024-01-17',\n", + " '2024-02-14', '2024-03-13', '2024-04-15', '2024-04-16',\n", + " '2024-04-17', '2024-04-18', '2024-04-19', '2024-05-22',\n", + " '2024-06-12', '2024-07-17', '2024-08-14', '2024-09-18',\n", + " '2024-10-14', '2024-10-15', '2024-10-16', '2024-10-17',\n", + " '2024-10-18', '2024-04-20'], dtype=object)" + ] + }, + "execution_count": 94, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg2_filtered2.service_date.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "id": "849656c3-47ef-4af3-8f58-e4d16656c05c", + "metadata": { + "scrolled": true, + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
service_dateportfolio_organization_namerecent_combined_nameroute_id
1046082024-12-11Amtrak__Amtrak Thruway Connecting Service12
1072012025-01-15Amtrak__Amtrak Thruway Connecting Service12
1097782025-02-12Amtrak__Amtrak Thruway Connecting Service11
1122822025-03-12Amtrak__Amtrak Thruway Connecting Service12
1148942025-04-16Amtrak__Amtrak Thruway Connecting Service12
1172982025-05-14Amtrak__Amtrak Thruway Connecting Service12
1046502024-12-11Amtrak__Commuter Rail2
1072432025-01-15Amtrak__Commuter Rail2
1098192025-02-12Amtrak__Commuter Rail2
1123212025-03-12Amtrak__Commuter Rail2
1149342025-04-16Amtrak__Commuter Rail2
1173372025-05-14Amtrak__Commuter Rail2
1047212024-12-11Amtrak__Maple Leaf2
1073062025-01-15Amtrak__Maple Leaf2
1098822025-02-12Amtrak__Maple Leaf2
1123842025-03-12Amtrak__Maple Leaf2
1149962025-04-16Amtrak__Maple Leaf2
1173992025-05-14Amtrak__Maple Leaf2
1038992024-12-11City of Los AngelesCE438B2
1065032025-01-15City of Los AngelesCE438B2
1090852025-02-12City of Los AngelesCE438B2
1115742025-03-12City of Los AngelesCE438B2
1141482025-04-16City of Los AngelesCE438B2
1167512025-05-14City of Los AngelesCE438B2
1042562024-12-11Los Angeles World AirportsLAX to US__FlyAway - LAX to Union Station2
1068592025-01-15Los Angeles World AirportsLAX to US__FlyAway - LAX to Union Station2
1094402025-02-12Los Angeles World AirportsLAX to US__FlyAway - LAX to Union Station2
1119452025-03-12Los Angeles World AirportsLAX to US__FlyAway - LAX to Union Station2
1145392025-04-16Los Angeles World AirportsLAX to US__FlyAway - LAX to Union Station2
1169352025-05-14Los Angeles World AirportsLAX to US__FlyAway - LAX to Union Station2
1042572024-12-11Los Angeles World AirportsLAX to VN__FlyAway - LAX to Van Nuys2
1068602025-01-15Los Angeles World AirportsLAX to VN__FlyAway - LAX to Van Nuys2
1094412025-02-12Los Angeles World AirportsLAX to VN__FlyAway - LAX to Van Nuys2
1119462025-03-12Los Angeles World AirportsLAX to VN__FlyAway - LAX to Van Nuys2
1145402025-04-16Los Angeles World AirportsLAX to VN__FlyAway - LAX to Van Nuys2
1169362025-05-14Los Angeles World AirportsLAX to VN__FlyAway - LAX to Van Nuys2
1045542024-12-11Los Angeles World AirportsUS to LAX__FlyAway - Union Station to LAX2
1071532025-01-15Los Angeles World AirportsUS to LAX__FlyAway - Union Station to LAX2
1097312025-02-12Los Angeles World AirportsUS to LAX__FlyAway - Union Station to LAX2
1122292025-03-12Los Angeles World AirportsUS to LAX__FlyAway - Union Station to LAX2
1148422025-04-16Los Angeles World AirportsUS to LAX__FlyAway - Union Station to LAX2
1172462025-05-14Los Angeles World AirportsUS to LAX__FlyAway - Union Station to LAX2
1045592024-12-11Los Angeles World AirportsVN to LAX__FlyAway - Van Nuys to LAX2
1071582025-01-15Los Angeles World AirportsVN to LAX__FlyAway - Van Nuys to LAX2
1097362025-02-12Los Angeles World AirportsVN to LAX__FlyAway - Van Nuys to LAX2
1122342025-03-12Los Angeles World AirportsVN to LAX__FlyAway - Van Nuys to LAX2
1148472025-04-16Los Angeles World AirportsVN to LAX__FlyAway - Van Nuys to LAX2
1172512025-05-14Los Angeles World AirportsVN to LAX__FlyAway - Van Nuys to LAX2
1025192024-12-11Palo Verde Valley Transit Agency1__Blue Route2
1051372025-01-15Palo Verde Valley Transit Agency1__Blue Route2
1077032025-02-12Palo Verde Valley Transit Agency1__Blue Route2
1102652025-03-12Palo Verde Valley Transit Agency1__Blue Route2
1127832025-04-16Palo Verde Valley Transit Agency1__Blue Route2
1153922025-05-14Palo Verde Valley Transit Agency1__Blue Route2
1028352024-12-11Palo Verde Valley Transit Agency2__Gold Route2
1054492025-01-15Palo Verde Valley Transit Agency2__Gold Route2
1080172025-02-12Palo Verde Valley Transit Agency2__Gold Route2
1130942025-04-16Palo Verde Valley Transit Agency2__Gold Route2
1156962025-05-14Palo Verde Valley Transit Agency2__Gold Route2
1030312024-12-11Palo Verde Valley Transit Agency3__Red Route2
1056472025-01-15Palo Verde Valley Transit Agency3__Red Route2
1082192025-02-12Palo Verde Valley Transit Agency3__Red Route2
1107472025-03-12Palo Verde Valley Transit Agency3__Red Route2
1132922025-04-16Palo Verde Valley Transit Agency3__Red Route2
1158932025-05-14Palo Verde Valley Transit Agency3__Red Route2
1031742024-12-11Palo Verde Valley Transit Agency4__Green Route2
1057882025-01-15Palo Verde Valley Transit Agency4__Green Route2
1083602025-02-12Palo Verde Valley Transit Agency4__Green Route2
1108742025-03-12Palo Verde Valley Transit Agency4__Green Route2
1134302025-04-16Palo Verde Valley Transit Agency4__Green Route2
1160282025-05-14Palo Verde Valley Transit Agency4__Green Route2
1035212024-12-11Palo Verde Valley Transit Agency6__Wellness Express2
1061272025-01-15Palo Verde Valley Transit Agency6__Wellness Express2
1087062025-02-12Palo Verde Valley Transit Agency6__Wellness Express2
1112082025-03-12Palo Verde Valley Transit Agency6__Wellness Express2
1137722025-04-16Palo Verde Valley Transit Agency6__Wellness Express2
1163682025-05-14Palo Verde Valley Transit Agency6__Wellness Express2
1042642024-12-11San Luis Obispo Regional Transit AuthorityLT__Laguna Tripper2
1068682025-01-15San Luis Obispo Regional Transit AuthorityLT__Laguna Tripper2
1094472025-02-12San Luis Obispo Regional Transit AuthorityLT__Laguna Tripper2
1119522025-03-12San Luis Obispo Regional Transit AuthorityLT__Laguna Tripper2
1145472025-04-16San Luis Obispo Regional Transit AuthorityLT__Laguna Tripper2
1169432025-05-14San Luis Obispo Regional Transit AuthorityLT__Laguna Tripper2
\n", + "
" + ], + "text/plain": [ + " service_date portfolio_organization_name \\\n", + "104608 2024-12-11 Amtrak \n", + "107201 2025-01-15 Amtrak \n", + "109778 2025-02-12 Amtrak \n", + "112282 2025-03-12 Amtrak \n", + "114894 2025-04-16 Amtrak \n", + "117298 2025-05-14 Amtrak \n", + "104650 2024-12-11 Amtrak \n", + "107243 2025-01-15 Amtrak \n", + "109819 2025-02-12 Amtrak \n", + "112321 2025-03-12 Amtrak \n", + "114934 2025-04-16 Amtrak \n", + "117337 2025-05-14 Amtrak \n", + "104721 2024-12-11 Amtrak \n", + "107306 2025-01-15 Amtrak \n", + "109882 2025-02-12 Amtrak \n", + "112384 2025-03-12 Amtrak \n", + "114996 2025-04-16 Amtrak \n", + "117399 2025-05-14 Amtrak \n", + "103899 2024-12-11 City of Los Angeles \n", + "106503 2025-01-15 City of Los Angeles \n", + "109085 2025-02-12 City of Los Angeles \n", + "111574 2025-03-12 City of Los Angeles \n", + "114148 2025-04-16 City of Los Angeles \n", + "116751 2025-05-14 City of Los Angeles \n", + "104256 2024-12-11 Los Angeles World Airports \n", + "106859 2025-01-15 Los Angeles World Airports \n", + "109440 2025-02-12 Los Angeles World Airports \n", + "111945 2025-03-12 Los Angeles World Airports \n", + "114539 2025-04-16 Los Angeles World Airports \n", + "116935 2025-05-14 Los Angeles World Airports \n", + "104257 2024-12-11 Los Angeles World Airports \n", + "106860 2025-01-15 Los Angeles World Airports \n", + "109441 2025-02-12 Los Angeles World Airports \n", + "111946 2025-03-12 Los Angeles World Airports \n", + "114540 2025-04-16 Los Angeles World Airports \n", + "116936 2025-05-14 Los Angeles World Airports \n", + "104554 2024-12-11 Los Angeles World Airports \n", + "107153 2025-01-15 Los Angeles World Airports \n", + "109731 2025-02-12 Los Angeles World Airports \n", + "112229 2025-03-12 Los Angeles World Airports \n", + "114842 2025-04-16 Los Angeles World Airports \n", + "117246 2025-05-14 Los Angeles World Airports \n", + "104559 2024-12-11 Los Angeles World Airports \n", + "107158 2025-01-15 Los Angeles World Airports \n", + "109736 2025-02-12 Los Angeles World Airports \n", + "112234 2025-03-12 Los Angeles World Airports \n", + "114847 2025-04-16 Los Angeles World Airports \n", + "117251 2025-05-14 Los Angeles World Airports \n", + "102519 2024-12-11 Palo Verde Valley Transit Agency \n", + "105137 2025-01-15 Palo Verde Valley Transit Agency \n", + "107703 2025-02-12 Palo Verde Valley Transit Agency \n", + "110265 2025-03-12 Palo Verde Valley Transit Agency \n", + "112783 2025-04-16 Palo Verde Valley Transit Agency \n", + "115392 2025-05-14 Palo Verde Valley Transit Agency \n", + "102835 2024-12-11 Palo Verde Valley Transit Agency \n", + "105449 2025-01-15 Palo Verde Valley Transit Agency \n", + "108017 2025-02-12 Palo Verde Valley Transit Agency \n", + "113094 2025-04-16 Palo Verde Valley Transit Agency \n", + "115696 2025-05-14 Palo Verde Valley Transit Agency \n", + "103031 2024-12-11 Palo Verde Valley Transit Agency \n", + "105647 2025-01-15 Palo Verde Valley Transit Agency \n", + "108219 2025-02-12 Palo Verde Valley Transit Agency \n", + "110747 2025-03-12 Palo Verde Valley Transit Agency \n", + "113292 2025-04-16 Palo Verde Valley Transit Agency \n", + "115893 2025-05-14 Palo Verde Valley Transit Agency \n", + "103174 2024-12-11 Palo Verde Valley Transit Agency \n", + "105788 2025-01-15 Palo Verde Valley Transit Agency \n", + "108360 2025-02-12 Palo Verde Valley Transit Agency \n", + "110874 2025-03-12 Palo Verde Valley Transit Agency \n", + "113430 2025-04-16 Palo Verde Valley Transit Agency \n", + "116028 2025-05-14 Palo Verde Valley Transit Agency \n", + "103521 2024-12-11 Palo Verde Valley Transit Agency \n", + "106127 2025-01-15 Palo Verde Valley Transit Agency \n", + "108706 2025-02-12 Palo Verde Valley Transit Agency \n", + "111208 2025-03-12 Palo Verde Valley Transit Agency \n", + "113772 2025-04-16 Palo Verde Valley Transit Agency \n", + "116368 2025-05-14 Palo Verde Valley Transit Agency \n", + "104264 2024-12-11 San Luis Obispo Regional Transit Authority \n", + "106868 2025-01-15 San Luis Obispo Regional Transit Authority \n", + "109447 2025-02-12 San Luis Obispo Regional Transit Authority \n", + "111952 2025-03-12 San Luis Obispo Regional Transit Authority \n", + "114547 2025-04-16 San Luis Obispo Regional Transit Authority \n", + "116943 2025-05-14 San Luis Obispo Regional Transit Authority \n", + "\n", + " recent_combined_name route_id \n", + "104608 __Amtrak Thruway Connecting Service 12 \n", + "107201 __Amtrak Thruway Connecting Service 12 \n", + "109778 __Amtrak Thruway Connecting Service 11 \n", + "112282 __Amtrak Thruway Connecting Service 12 \n", + "114894 __Amtrak Thruway Connecting Service 12 \n", + "117298 __Amtrak Thruway Connecting Service 12 \n", + "104650 __Commuter Rail 2 \n", + "107243 __Commuter Rail 2 \n", + "109819 __Commuter Rail 2 \n", + "112321 __Commuter Rail 2 \n", + "114934 __Commuter Rail 2 \n", + "117337 __Commuter Rail 2 \n", + "104721 __Maple Leaf 2 \n", + "107306 __Maple Leaf 2 \n", + "109882 __Maple Leaf 2 \n", + "112384 __Maple Leaf 2 \n", + "114996 __Maple Leaf 2 \n", + "117399 __Maple Leaf 2 \n", + "103899 CE438B 2 \n", + "106503 CE438B 2 \n", + "109085 CE438B 2 \n", + "111574 CE438B 2 \n", + "114148 CE438B 2 \n", + "116751 CE438B 2 \n", + "104256 LAX to US__FlyAway - LAX to Union Station 2 \n", + "106859 LAX to US__FlyAway - LAX to Union Station 2 \n", + "109440 LAX to US__FlyAway - LAX to Union Station 2 \n", + "111945 LAX to US__FlyAway - LAX to Union Station 2 \n", + "114539 LAX to US__FlyAway - LAX to Union Station 2 \n", + "116935 LAX to US__FlyAway - LAX to Union Station 2 \n", + "104257 LAX to VN__FlyAway - LAX to Van Nuys 2 \n", + "106860 LAX to VN__FlyAway - LAX to Van Nuys 2 \n", + "109441 LAX to VN__FlyAway - LAX to Van Nuys 2 \n", + "111946 LAX to VN__FlyAway - LAX to Van Nuys 2 \n", + "114540 LAX to VN__FlyAway - LAX to Van Nuys 2 \n", + "116936 LAX to VN__FlyAway - LAX to Van Nuys 2 \n", + "104554 US to LAX__FlyAway - Union Station to LAX 2 \n", + "107153 US to LAX__FlyAway - Union Station to LAX 2 \n", + "109731 US to LAX__FlyAway - Union Station to LAX 2 \n", + "112229 US to LAX__FlyAway - Union Station to LAX 2 \n", + "114842 US to LAX__FlyAway - Union Station to LAX 2 \n", + "117246 US to LAX__FlyAway - Union Station to LAX 2 \n", + "104559 VN to LAX__FlyAway - Van Nuys to LAX 2 \n", + "107158 VN to LAX__FlyAway - Van Nuys to LAX 2 \n", + "109736 VN to LAX__FlyAway - Van Nuys to LAX 2 \n", + "112234 VN to LAX__FlyAway - Van Nuys to LAX 2 \n", + "114847 VN to LAX__FlyAway - Van Nuys to LAX 2 \n", + "117251 VN to LAX__FlyAway - Van Nuys to LAX 2 \n", + "102519 1__Blue Route 2 \n", + "105137 1__Blue Route 2 \n", + "107703 1__Blue Route 2 \n", + "110265 1__Blue Route 2 \n", + "112783 1__Blue Route 2 \n", + "115392 1__Blue Route 2 \n", + "102835 2__Gold Route 2 \n", + "105449 2__Gold Route 2 \n", + "108017 2__Gold Route 2 \n", + "113094 2__Gold Route 2 \n", + "115696 2__Gold Route 2 \n", + "103031 3__Red Route 2 \n", + "105647 3__Red Route 2 \n", + "108219 3__Red Route 2 \n", + "110747 3__Red Route 2 \n", + "113292 3__Red Route 2 \n", + "115893 3__Red Route 2 \n", + "103174 4__Green Route 2 \n", + "105788 4__Green Route 2 \n", + "108360 4__Green Route 2 \n", + "110874 4__Green Route 2 \n", + "113430 4__Green Route 2 \n", + "116028 4__Green Route 2 \n", + "103521 6__Wellness Express 2 \n", + "106127 6__Wellness Express 2 \n", + "108706 6__Wellness Express 2 \n", + "111208 6__Wellness Express 2 \n", + "113772 6__Wellness Express 2 \n", + "116368 6__Wellness Express 2 \n", + "104264 LT__Laguna Tripper 2 \n", + "106868 LT__Laguna Tripper 2 \n", + "109447 LT__Laguna Tripper 2 \n", + "111952 LT__Laguna Tripper 2 \n", + "114547 LT__Laguna Tripper 2 \n", + "116943 LT__Laguna Tripper 2 " + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg2_filtered2.loc[agg2_filtered2.service_date >= \"2024-12-11\"]" + ] + }, + { + "cell_type": "markdown", + "id": "40683acb-0a00-48b7-9c92-b1859cbb0609", + "metadata": {}, + "source": [ + "### City of Los Angeles CE438B" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "id": "b4b7e3d3-073f-4d7f-84b8-4b8522d35c4e", + "metadata": { + "scrolled": true, + "tags": [] + }, + "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", + "
schedule_gtfs_dataset_keynameorganization_nameservice_date
181cc53a0dbf5df90e3009b9cb5d89d80baLA DOT ScheduleCity of Los Angeles2025-01-15
182cc53a0dbf5df90e3009b9cb5d89d80baLA DOT ScheduleCity of Los Angeles2025-02-12
179cc53a0dbf5df90e3009b9cb5d89d80baLA DOT ScheduleCity of Los Angeles2025-03-12
185cc53a0dbf5df90e3009b9cb5d89d80baLA DOT ScheduleCity of Los Angeles2025-04-16
184cc53a0dbf5df90e3009b9cb5d89d80baLA DOT ScheduleCity of Los Angeles2025-05-14
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key name organization_name \\\n", + "181 cc53a0dbf5df90e3009b9cb5d89d80ba LA DOT Schedule City of Los Angeles \n", + "182 cc53a0dbf5df90e3009b9cb5d89d80ba LA DOT Schedule City of Los Angeles \n", + "179 cc53a0dbf5df90e3009b9cb5d89d80ba LA DOT Schedule City of Los Angeles \n", + "185 cc53a0dbf5df90e3009b9cb5d89d80ba LA DOT Schedule City of Los Angeles \n", + "184 cc53a0dbf5df90e3009b9cb5d89d80ba LA DOT Schedule City of Los Angeles \n", + "\n", + " service_date \n", + "181 2025-01-15 \n", + "182 2025-02-12 \n", + "179 2025-03-12 \n", + "185 2025-04-16 \n", + "184 2025-05-14 " + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "crosswalk_df.loc[\n", + " crosswalk_df.organization_name.str.contains(\n", + " \"City of Los Angeles\",\n", + " )\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "id": "611fc1fc-c321-492c-83bd-dd9da5276cd5", + "metadata": { + "tags": [] + }, + "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", + "
service_daterecent_combined_nameportfolio_organization_nameschedule_gtfs_dataset_keyroute_long_nameroute_short_nameroute_id
1082212025-01-15438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B1458
1082242025-01-15438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B4278
1108222025-02-12438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B1458
1108252025-02-12438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B4278
1132632025-03-12438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B1458
1134092025-03-12438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B4278
1159722025-04-16438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B1458
1159742025-04-16438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B4278
1183832025-05-14438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B1458
1183862025-05-14438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B4278
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name portfolio_organization_name \\\n", + "108221 2025-01-15 438B__CE438B City of Los Angeles \n", + "108224 2025-01-15 438B__CE438B City of Los Angeles \n", + "110822 2025-02-12 438B__CE438B City of Los Angeles \n", + "110825 2025-02-12 438B__CE438B City of Los Angeles \n", + "113263 2025-03-12 438B__CE438B City of Los Angeles \n", + "113409 2025-03-12 438B__CE438B City of Los Angeles \n", + "115972 2025-04-16 438B__CE438B City of Los Angeles \n", + "115974 2025-04-16 438B__CE438B City of Los Angeles \n", + "118383 2025-05-14 438B__CE438B City of Los Angeles \n", + "118386 2025-05-14 438B__CE438B City of Los Angeles \n", + "\n", + " schedule_gtfs_dataset_key route_long_name route_short_name \\\n", + "108221 cc53a0dbf5df90e3009b9cb5d89d80ba CE438B 438B \n", + "108224 cc53a0dbf5df90e3009b9cb5d89d80ba CE438B 438B \n", + "110822 cc53a0dbf5df90e3009b9cb5d89d80ba CE438B 438B \n", + "110825 cc53a0dbf5df90e3009b9cb5d89d80ba CE438B 438B \n", + "113263 cc53a0dbf5df90e3009b9cb5d89d80ba CE438B 438B \n", + "113409 cc53a0dbf5df90e3009b9cb5d89d80ba CE438B 438B \n", + "115972 cc53a0dbf5df90e3009b9cb5d89d80ba CE438B 438B \n", + "115974 cc53a0dbf5df90e3009b9cb5d89d80ba CE438B 438B \n", + "118383 cc53a0dbf5df90e3009b9cb5d89d80ba CE438B 438B \n", + "118386 cc53a0dbf5df90e3009b9cb5d89d80ba CE438B 438B \n", + "\n", + " route_id \n", + "108221 1458 \n", + "108224 4278 \n", + "110822 1458 \n", + "110825 4278 \n", + "113263 1458 \n", + "113409 4278 \n", + "115972 1458 \n", + "115974 4278 \n", + "118383 1458 \n", + "118386 4278 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "inspect_recent_rows(df, \"CE438B\")" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "id": "6dff3f23-99fb-4d65-98e5-cf54e987c345", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_map(routes, \"CE438B\")" + ] + }, + { + "cell_type": "markdown", + "id": "09ea2027-400f-43f9-aa10-33b1b165ce68", + "metadata": {}, + "source": [ + "### Amtrak __Amtrak Thruway Connecting Service\n", + "* Map isn't working b/c no geometry" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "id": "284601fd-f263-4e8a-96cc-1aad7a4b2537", + "metadata": { + "tags": [] + }, + "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", + "
service_daterecent_combined_nameportfolio_organization_nameschedule_gtfs_dataset_keyroute_long_nameroute_short_nameroute_id
1175672025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting Service42933
1175642025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting Service42920
1175632025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting Service18650
1175572025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting Service43
1175602025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting Service42896
1175552025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting Service42891
1175532025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting Service42954
1175712025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting Service42958
1175622025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting Service42912
1175742025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting Service42935
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name \\\n", + "117567 2025-05-14 __Amtrak Thruway Connecting Service \n", + "117564 2025-05-14 __Amtrak Thruway Connecting Service \n", + "117563 2025-05-14 __Amtrak Thruway Connecting Service \n", + "117557 2025-05-14 __Amtrak Thruway Connecting Service \n", + "117560 2025-05-14 __Amtrak Thruway Connecting Service \n", + "117555 2025-05-14 __Amtrak Thruway Connecting Service \n", + "117553 2025-05-14 __Amtrak Thruway Connecting Service \n", + "117571 2025-05-14 __Amtrak Thruway Connecting Service \n", + "117562 2025-05-14 __Amtrak Thruway Connecting Service \n", + "117574 2025-05-14 __Amtrak Thruway Connecting Service \n", + "\n", + " portfolio_organization_name schedule_gtfs_dataset_key \\\n", + "117567 Amtrak 48e137bc977da88970393f629c18432c \n", + "117564 Amtrak 48e137bc977da88970393f629c18432c \n", + "117563 Amtrak 48e137bc977da88970393f629c18432c \n", + "117557 Amtrak 48e137bc977da88970393f629c18432c \n", + "117560 Amtrak 48e137bc977da88970393f629c18432c \n", + "117555 Amtrak 48e137bc977da88970393f629c18432c \n", + "117553 Amtrak 48e137bc977da88970393f629c18432c \n", + "117571 Amtrak 48e137bc977da88970393f629c18432c \n", + "117562 Amtrak 48e137bc977da88970393f629c18432c \n", + "117574 Amtrak 48e137bc977da88970393f629c18432c \n", + "\n", + " route_long_name route_short_name route_id \n", + "117567 Amtrak Thruway Connecting Service 42933 \n", + "117564 Amtrak Thruway Connecting Service 42920 \n", + "117563 Amtrak Thruway Connecting Service 18650 \n", + "117557 Amtrak Thruway Connecting Service 43 \n", + "117560 Amtrak Thruway Connecting Service 42896 \n", + "117555 Amtrak Thruway Connecting Service 42891 \n", + "117553 Amtrak Thruway Connecting Service 42954 \n", + "117571 Amtrak Thruway Connecting Service 42958 \n", + "117562 Amtrak Thruway Connecting Service 42912 \n", + "117574 Amtrak Thruway Connecting Service 42935 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "inspect_recent_rows(df, \"Amtrak Thruway Connecting Service\")" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "id": "ca0569e4-58c2-403e-a867-c558084029bd", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "thruway_gdf = routes.loc[routes.recent_combined_name.str.contains(\"Thruway Connecting\")]" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "id": "38960eae-0ae8-4456-b0f2-224382a6d5bf", + "metadata": { + "tags": [] + }, + "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", + "
schedule_gtfs_dataset_keynameorganization_nameservice_date
10348e137bc977da88970393f629c18432cAmtrak ScheduleAmtrak2025-01-15
10448e137bc977da88970393f629c18432cAmtrak ScheduleAmtrak2025-02-12
10448e137bc977da88970393f629c18432cAmtrak ScheduleAmtrak2025-03-12
10348e137bc977da88970393f629c18432cAmtrak ScheduleAmtrak2025-04-16
10048e137bc977da88970393f629c18432cAmtrak ScheduleAmtrak2025-05-14
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key name organization_name \\\n", + "103 48e137bc977da88970393f629c18432c Amtrak Schedule Amtrak \n", + "104 48e137bc977da88970393f629c18432c Amtrak Schedule Amtrak \n", + "104 48e137bc977da88970393f629c18432c Amtrak Schedule Amtrak \n", + "103 48e137bc977da88970393f629c18432c Amtrak Schedule Amtrak \n", + "100 48e137bc977da88970393f629c18432c Amtrak Schedule Amtrak \n", + "\n", + " service_date \n", + "103 2025-01-15 \n", + "104 2025-02-12 \n", + "104 2025-03-12 \n", + "103 2025-04-16 \n", + "100 2025-05-14 " + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "crosswalk_df.loc[\n", + " crosswalk_df.organization_name.str.contains(\n", + " \"Amtrak\",\n", + " )\n", + "]" + ] + }, + { + "cell_type": "markdown", + "id": "0c72035e-48c7-47aa-9b4a-e9566dc09db6", + "metadata": {}, + "source": [ + "### Palo Verde Valley Transit Agency 2__Gold Route\n", + "* two different route_id corresponds with the same long_name, short_name, and recent_combined name. it looks the same on the map." + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "id": "ccb05355-2830-4787-9eca-10a83c144502", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['1 Blue Route', '2 Gold Route', '3 Red Route', '4 Green Route',\n", + " '6 Wellness Express'], dtype=object)" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "routes.loc[\n", + " routes.portfolio_organization_name == \"Palo Verde Valley Transit Agency\",\n", + "].recent_combined_name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "id": "65a30f08-9669-4b63-b114-43d9a901b792", + "metadata": { + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
service_daterecent_combined_nameportfolio_organization_namenameschedule_gtfs_dataset_keyroute_long_nameroute_short_nameroute_id
1034122024-12-112__Gold RoutePalo Verde Valley Transit AgencyDesert Roadrunner GMV Schedule4383eb1cca04093020f1583f57f32d9bGold Route25965
1077252025-01-152__Gold RoutePalo Verde Valley Transit AgencyDesert Roadrunner Schedule96680f72c0c59208e055c81be87ad4a9Gold Route2361
1084202025-01-152__Gold RoutePalo Verde Valley Transit AgencyDesert Roadrunner GMV Schedule4383eb1cca04093020f1583f57f32d9bGold Route25965
1104302025-02-122__Gold RoutePalo Verde Valley Transit AgencyDesert Roadrunner Schedule96680f72c0c59208e055c81be87ad4a9Gold Route2361
1110202025-02-122__Gold RoutePalo Verde Valley Transit AgencyDesert Roadrunner GMV Schedule4383eb1cca04093020f1583f57f32d9bGold Route25965
1135472025-03-122__Gold RoutePalo Verde Valley Transit AgencyDesert Roadrunner GMV Schedule4383eb1cca04093020f1583f57f32d9bGold Route25965
1154192025-04-162__Gold RoutePalo Verde Valley Transit AgencyDesert Roadrunner Schedule96680f72c0c59208e055c81be87ad4a9Gold Route2361
1161712025-04-162__Gold RoutePalo Verde Valley Transit AgencyDesert Roadrunner GMV Schedule4383eb1cca04093020f1583f57f32d9bGold Route25965
1178282025-05-142__Gold RoutePalo Verde Valley Transit AgencyDesert Roadrunner Schedule96680f72c0c59208e055c81be87ad4a9Gold Route2361
1185852025-05-142__Gold RoutePalo Verde Valley Transit AgencyDesert Roadrunner GMV Schedule4383eb1cca04093020f1583f57f32d9bGold Route25965
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name portfolio_organization_name \\\n", + "103412 2024-12-11 2__Gold Route Palo Verde Valley Transit Agency \n", + "107725 2025-01-15 2__Gold Route Palo Verde Valley Transit Agency \n", + "108420 2025-01-15 2__Gold Route Palo Verde Valley Transit Agency \n", + "110430 2025-02-12 2__Gold Route Palo Verde Valley Transit Agency \n", + "111020 2025-02-12 2__Gold Route Palo Verde Valley Transit Agency \n", + "113547 2025-03-12 2__Gold Route Palo Verde Valley Transit Agency \n", + "115419 2025-04-16 2__Gold Route Palo Verde Valley Transit Agency \n", + "116171 2025-04-16 2__Gold Route Palo Verde Valley Transit Agency \n", + "117828 2025-05-14 2__Gold Route Palo Verde Valley Transit Agency \n", + "118585 2025-05-14 2__Gold Route Palo Verde Valley Transit Agency \n", + "\n", + " name schedule_gtfs_dataset_key \\\n", + "103412 Desert Roadrunner GMV Schedule 4383eb1cca04093020f1583f57f32d9b \n", + "107725 Desert Roadrunner Schedule 96680f72c0c59208e055c81be87ad4a9 \n", + "108420 Desert Roadrunner GMV Schedule 4383eb1cca04093020f1583f57f32d9b \n", + "110430 Desert Roadrunner Schedule 96680f72c0c59208e055c81be87ad4a9 \n", + "111020 Desert Roadrunner GMV Schedule 4383eb1cca04093020f1583f57f32d9b \n", + "113547 Desert Roadrunner GMV Schedule 4383eb1cca04093020f1583f57f32d9b \n", + "115419 Desert Roadrunner Schedule 96680f72c0c59208e055c81be87ad4a9 \n", + "116171 Desert Roadrunner GMV Schedule 4383eb1cca04093020f1583f57f32d9b \n", + "117828 Desert Roadrunner Schedule 96680f72c0c59208e055c81be87ad4a9 \n", + "118585 Desert Roadrunner GMV Schedule 4383eb1cca04093020f1583f57f32d9b \n", + "\n", + " route_long_name route_short_name route_id \n", + "103412 Gold Route 2 5965 \n", + "107725 Gold Route 2 361 \n", + "108420 Gold Route 2 5965 \n", + "110430 Gold Route 2 361 \n", + "111020 Gold Route 2 5965 \n", + "113547 Gold Route 2 5965 \n", + "115419 Gold Route 2 361 \n", + "116171 Gold Route 2 5965 \n", + "117828 Gold Route 2 361 \n", + "118585 Gold Route 2 5965 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "inspect_recent_rows(df, \"Gold Route\")" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "id": "54815a33-ab49-45a1-be84-f2b321f38068", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_map(routes, \"2 Gold Route\")" + ] + }, + { + "cell_type": "markdown", + "id": "fbdcbb26-76a3-48ad-bddc-4df4d8bd425d", + "metadata": {}, + "source": [ + "### **San Luis Obispo LT Laguna Tripper**\n", + "* Slightly different route geographies when plotted.\n", + "* There are two separate gtfs keys. \n", + "* What to do? These aren't straight duplicates." + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "id": "f3e45243-2495-49e4-9939-c112b65e4851", + "metadata": { + "tags": [] + }, + "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", + "
schedule_gtfs_dataset_keynameorganization_nameservice_date
2107891c0d5e91c8dccf88536129dbac084SLORTA ScheduleSan Luis Obispo Regional Transit Authority2025-01-15
2107891c0d5e91c8dccf88536129dbac084SLORTA ScheduleSan Luis Obispo Regional Transit Authority2025-02-12
2097891c0d5e91c8dccf88536129dbac084SLORTA ScheduleSan Luis Obispo Regional Transit Authority2025-03-12
2167891c0d5e91c8dccf88536129dbac084SLORTA ScheduleSan Luis Obispo Regional Transit Authority2025-04-16
2157891c0d5e91c8dccf88536129dbac084SLORTA ScheduleSan Luis Obispo Regional Transit Authority2025-05-14
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key name \\\n", + "210 7891c0d5e91c8dccf88536129dbac084 SLORTA Schedule \n", + "210 7891c0d5e91c8dccf88536129dbac084 SLORTA Schedule \n", + "209 7891c0d5e91c8dccf88536129dbac084 SLORTA Schedule \n", + "216 7891c0d5e91c8dccf88536129dbac084 SLORTA Schedule \n", + "215 7891c0d5e91c8dccf88536129dbac084 SLORTA Schedule \n", + "\n", + " organization_name service_date \n", + "210 San Luis Obispo Regional Transit Authority 2025-01-15 \n", + "210 San Luis Obispo Regional Transit Authority 2025-02-12 \n", + "209 San Luis Obispo Regional Transit Authority 2025-03-12 \n", + "216 San Luis Obispo Regional Transit Authority 2025-04-16 \n", + "215 San Luis Obispo Regional Transit Authority 2025-05-14 " + ] + }, + "execution_count": 105, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "crosswalk_df.loc[\n", + " crosswalk_df.organization_name.str.contains(\n", + " \"San Luis Obispo Regional\",\n", + " )\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "id": "e16ebe50-f04b-4c92-8f3e-1489147e674b", + "metadata": { + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
service_daterecent_combined_nameportfolio_organization_namenameschedule_gtfs_dataset_keyroute_long_nameroute_short_nameroute_id
1059592025-01-15LT__Laguna TripperSan Luis Obispo Regional Transit AuthoritySLO Peak Transit Schedulef4c3ea214214ee0d96f7646b3e9d69dcLaguna TripperLT11806
1073762025-01-15LT__Laguna TripperSan Luis Obispo Regional Transit AuthoritySLO Scheduleb475cf3b7ceaae9fc30b22cb8d3a1e33Laguna TripperLT11096761
1085492025-02-12LT__Laguna TripperSan Luis Obispo Regional Transit AuthoritySLO Peak Transit Schedulef4c3ea214214ee0d96f7646b3e9d69dcLaguna TripperLT11806
1100682025-02-12LT__Laguna TripperSan Luis Obispo Regional Transit AuthoritySLO Scheduleb475cf3b7ceaae9fc30b22cb8d3a1e33Laguna TripperLT11096761
1111472025-03-12LT__Laguna TripperSan Luis Obispo Regional Transit AuthoritySLO Peak Transit Schedulef4c3ea214214ee0d96f7646b3e9d69dcLaguna TripperLT11806
1125522025-03-12LT__Laguna TripperSan Luis Obispo Regional Transit AuthoritySLO Scheduleb475cf3b7ceaae9fc30b22cb8d3a1e33Laguna TripperLT11096761
1156762025-04-16LT__Laguna TripperSan Luis Obispo Regional Transit AuthoritySLO Peak Transit Schedulef4c3ea214214ee0d96f7646b3e9d69dcLaguna TripperLT11806
1157372025-04-16LT__Laguna TripperSan Luis Obispo Regional Transit AuthoritySLO Scheduleb475cf3b7ceaae9fc30b22cb8d3a1e33Laguna TripperLT11096761
1163092025-05-14LT__Laguna TripperSan Luis Obispo Regional Transit AuthoritySLO Peak Transit Schedulef4c3ea214214ee0d96f7646b3e9d69dcLaguna TripperLT11806
1174892025-05-14LT__Laguna TripperSan Luis Obispo Regional Transit AuthoritySLO Scheduleb475cf3b7ceaae9fc30b22cb8d3a1e33Laguna TripperLT11096761
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name \\\n", + "105959 2025-01-15 LT__Laguna Tripper \n", + "107376 2025-01-15 LT__Laguna Tripper \n", + "108549 2025-02-12 LT__Laguna Tripper \n", + "110068 2025-02-12 LT__Laguna Tripper \n", + "111147 2025-03-12 LT__Laguna Tripper \n", + "112552 2025-03-12 LT__Laguna Tripper \n", + "115676 2025-04-16 LT__Laguna Tripper \n", + "115737 2025-04-16 LT__Laguna Tripper \n", + "116309 2025-05-14 LT__Laguna Tripper \n", + "117489 2025-05-14 LT__Laguna Tripper \n", + "\n", + " portfolio_organization_name name \\\n", + "105959 San Luis Obispo Regional Transit Authority SLO Peak Transit Schedule \n", + "107376 San Luis Obispo Regional Transit Authority SLO Schedule \n", + "108549 San Luis Obispo Regional Transit Authority SLO Peak Transit Schedule \n", + "110068 San Luis Obispo Regional Transit Authority SLO Schedule \n", + "111147 San Luis Obispo Regional Transit Authority SLO Peak Transit Schedule \n", + "112552 San Luis Obispo Regional Transit Authority SLO Schedule \n", + "115676 San Luis Obispo Regional Transit Authority SLO Peak Transit Schedule \n", + "115737 San Luis Obispo Regional Transit Authority SLO Schedule \n", + "116309 San Luis Obispo Regional Transit Authority SLO Peak Transit Schedule \n", + "117489 San Luis Obispo Regional Transit Authority SLO Schedule \n", + "\n", + " schedule_gtfs_dataset_key route_long_name route_short_name \\\n", + "105959 f4c3ea214214ee0d96f7646b3e9d69dc Laguna Tripper LT \n", + "107376 b475cf3b7ceaae9fc30b22cb8d3a1e33 Laguna Tripper LT \n", + "108549 f4c3ea214214ee0d96f7646b3e9d69dc Laguna Tripper LT \n", + "110068 b475cf3b7ceaae9fc30b22cb8d3a1e33 Laguna Tripper LT \n", + "111147 f4c3ea214214ee0d96f7646b3e9d69dc Laguna Tripper LT \n", + "112552 b475cf3b7ceaae9fc30b22cb8d3a1e33 Laguna Tripper LT \n", + "115676 f4c3ea214214ee0d96f7646b3e9d69dc Laguna Tripper LT \n", + "115737 b475cf3b7ceaae9fc30b22cb8d3a1e33 Laguna Tripper LT \n", + "116309 f4c3ea214214ee0d96f7646b3e9d69dc Laguna Tripper LT \n", + "117489 b475cf3b7ceaae9fc30b22cb8d3a1e33 Laguna Tripper LT \n", + "\n", + " route_id \n", + "105959 11806 \n", + "107376 11096761 \n", + "108549 11806 \n", + "110068 11096761 \n", + "111147 11806 \n", + "112552 11096761 \n", + "115676 11806 \n", + "115737 11096761 \n", + "116309 11806 \n", + "117489 11096761 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "inspect_recent_rows(df, \"Laguna Tripper\")" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "id": "69c798cd-d468-4218-9831-ceacf4a95201", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_map(routes, \"LT Laguna Tripper\")" + ] + }, + { + "cell_type": "markdown", + "id": "586f8489-873f-4c1c-a587-1e8f32811d21", + "metadata": {}, + "source": [ + "### Mission Bay Transportation Management Agency CCA/Adobe__\n", + "* Looks fine, I don't know why it was flagged considering it only has one unique row for each value" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "id": "3c5ad328-7531-4705-ba9e-edcbc7c61588", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['CCA/Adobe', 'East', 'TC Transbay-Caltrain', 'West'], dtype=object)" + ] + }, + "execution_count": 108, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "routes.loc[\n", + " routes.portfolio_organization_name\n", + " == \"Mission Bay Transportation Management Agency\",\n", + "].recent_combined_name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "id": "057e3081-947b-4f80-977a-a8915c3611e3", + "metadata": { + "tags": [] + }, + "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", + "
schedule_gtfs_dataset_keynameorganization_nameservice_date
68749380f1a9f225d9123762d83ea2f50dBay Area 511 Mission Bay ScheduleMission Bay Transportation Management Agency2025-01-15
70749380f1a9f225d9123762d83ea2f50dBay Area 511 Mission Bay ScheduleMission Bay Transportation Management Agency2025-02-12
71749380f1a9f225d9123762d83ea2f50dBay Area 511 Mission Bay ScheduleMission Bay Transportation Management Agency2025-03-12
69749380f1a9f225d9123762d83ea2f50dBay Area 511 Mission Bay ScheduleMission Bay Transportation Management Agency2025-04-16
68749380f1a9f225d9123762d83ea2f50dBay Area 511 Mission Bay ScheduleMission Bay Transportation Management Agency2025-05-14
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key name \\\n", + "68 749380f1a9f225d9123762d83ea2f50d Bay Area 511 Mission Bay Schedule \n", + "70 749380f1a9f225d9123762d83ea2f50d Bay Area 511 Mission Bay Schedule \n", + "71 749380f1a9f225d9123762d83ea2f50d Bay Area 511 Mission Bay Schedule \n", + "69 749380f1a9f225d9123762d83ea2f50d Bay Area 511 Mission Bay Schedule \n", + "68 749380f1a9f225d9123762d83ea2f50d Bay Area 511 Mission Bay Schedule \n", + "\n", + " organization_name service_date \n", + "68 Mission Bay Transportation Management Agency 2025-01-15 \n", + "70 Mission Bay Transportation Management Agency 2025-02-12 \n", + "71 Mission Bay Transportation Management Agency 2025-03-12 \n", + "69 Mission Bay Transportation Management Agency 2025-04-16 \n", + "68 Mission Bay Transportation Management Agency 2025-05-14 " + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "crosswalk_df.loc[\n", + " crosswalk_df.organization_name.str.contains(\n", + " \"Mission Bay\",\n", + " )\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "id": "e292f1b8-4e9c-407a-a56b-5cd84f3d09eb", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_map(routes, \"CCA/Adobe\")" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "id": "3a769df5-b5f3-4de4-8b2b-5587bd100f20", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['CE438B', '__Amtrak Thruway Connecting Service', '__Commuter Rail',\n", + " 'CCA/Adobe__', 'East__', 'TC__Transbay-Caltrain', 'West__',\n", + " '1__Blue Route', '2__Gold Route', '3__Red Route', '4__Green Route',\n", + " '6__Wellness Express', '5__Silver Route', 'LT__Laguna Tripper',\n", + " '__Maple Leaf', 'LAX to US__FlyAway - LAX to Union Station',\n", + " 'LAX to VN__FlyAway - LAX to Van Nuys',\n", + " 'US to LAX__FlyAway - Union Station to LAX',\n", + " 'VN to LAX__FlyAway - Van Nuys to LAX'], dtype=object)" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg2_filtered.recent_combined_name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "id": "5b2bcadf-d829-41b8-888a-0bb695777d09", + "metadata": { + "tags": [] + }, + "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", + "
service_daterecent_combined_nameportfolio_organization_nameschedule_gtfs_dataset_keyroute_long_nameroute_short_nameroute_id
907472024-10-16CCA/Adobe__Mission Bay Transportation Management Agency749380f1a9f225d9123762d83ea2f50dCCA/AdobeCCA/Adobe
933522024-10-17CCA/Adobe__Mission Bay Transportation Management Agency749380f1a9f225d9123762d83ea2f50dCCA/AdobeCCA/Adobe
960132024-10-18CCA/Adobe__Mission Bay Transportation Management Agency749380f1a9f225d9123762d83ea2f50dCCA/AdobeCCA/Adobe
1017682024-11-13CCA/Adobe__Mission Bay Transportation Management Agency749380f1a9f225d9123762d83ea2f50dCCA/AdobeCCA/Adobe
1044362024-12-11CCA/Adobe__Mission Bay Transportation Management Agency749380f1a9f225d9123762d83ea2f50dCCA/AdobeCCA/Adobe
1069802025-01-15CCA/Adobe__Mission Bay Transportation Management Agency749380f1a9f225d9123762d83ea2f50dCCA/AdobeCCA/Adobe
1096562025-02-12CCA/Adobe__Mission Bay Transportation Management Agency749380f1a9f225d9123762d83ea2f50dCCA/AdobeCCA/Adobe
1122192025-03-12CCA/Adobe__Mission Bay Transportation Management Agency749380f1a9f225d9123762d83ea2f50dCCA/AdobeCCA/Adobe
1146782025-04-16CCA/Adobe__Mission Bay Transportation Management Agency749380f1a9f225d9123762d83ea2f50dCCA/AdobeCCA/Adobe
1171252025-05-14CCA/Adobe__Mission Bay Transportation Management Agency749380f1a9f225d9123762d83ea2f50dCCA/AdobeCCA/Adobe
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name \\\n", + "90747 2024-10-16 CCA/Adobe__ \n", + "93352 2024-10-17 CCA/Adobe__ \n", + "96013 2024-10-18 CCA/Adobe__ \n", + "101768 2024-11-13 CCA/Adobe__ \n", + "104436 2024-12-11 CCA/Adobe__ \n", + "106980 2025-01-15 CCA/Adobe__ \n", + "109656 2025-02-12 CCA/Adobe__ \n", + "112219 2025-03-12 CCA/Adobe__ \n", + "114678 2025-04-16 CCA/Adobe__ \n", + "117125 2025-05-14 CCA/Adobe__ \n", + "\n", + " portfolio_organization_name \\\n", + "90747 Mission Bay Transportation Management Agency \n", + "93352 Mission Bay Transportation Management Agency \n", + "96013 Mission Bay Transportation Management Agency \n", + "101768 Mission Bay Transportation Management Agency \n", + "104436 Mission Bay Transportation Management Agency \n", + "106980 Mission Bay Transportation Management Agency \n", + "109656 Mission Bay Transportation Management Agency \n", + "112219 Mission Bay Transportation Management Agency \n", + "114678 Mission Bay Transportation Management Agency \n", + "117125 Mission Bay Transportation Management Agency \n", + "\n", + " schedule_gtfs_dataset_key route_long_name route_short_name \\\n", + "90747 749380f1a9f225d9123762d83ea2f50d CCA/Adobe \n", + "93352 749380f1a9f225d9123762d83ea2f50d CCA/Adobe \n", + "96013 749380f1a9f225d9123762d83ea2f50d CCA/Adobe \n", + "101768 749380f1a9f225d9123762d83ea2f50d CCA/Adobe \n", + "104436 749380f1a9f225d9123762d83ea2f50d CCA/Adobe \n", + "106980 749380f1a9f225d9123762d83ea2f50d CCA/Adobe \n", + "109656 749380f1a9f225d9123762d83ea2f50d CCA/Adobe \n", + "112219 749380f1a9f225d9123762d83ea2f50d CCA/Adobe \n", + "114678 749380f1a9f225d9123762d83ea2f50d CCA/Adobe \n", + "117125 749380f1a9f225d9123762d83ea2f50d CCA/Adobe \n", + "\n", + " route_id \n", + "90747 CCA/Adobe \n", + "93352 CCA/Adobe \n", + "96013 CCA/Adobe \n", + "101768 CCA/Adobe \n", + "104436 CCA/Adobe \n", + "106980 CCA/Adobe \n", + "109656 CCA/Adobe \n", + "112219 CCA/Adobe \n", + "114678 CCA/Adobe \n", + "117125 CCA/Adobe " + ] + }, + "execution_count": 112, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(\n", + " df.loc[df.recent_combined_name == \"CCA/Adobe__\"][\n", + " [\n", + " \"service_date\",\n", + " \"recent_combined_name\",\n", + " \"portfolio_organization_name\",\n", + " \"schedule_gtfs_dataset_key\",\n", + " \"route_long_name\",\n", + " \"route_short_name\",\n", + " \"route_id\",\n", + " ]\n", + " ]\n", + " .sort_values(by=[\"service_date\"])\n", + " .drop_duplicates()\n", + " .tail(10)\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "dcb75df9-5091-414e-a7cc-aece14bf7366", + "metadata": {}, + "source": [ + "## LA World Airports LAX to US__FlyAway - LAX to Union Station" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "id": "6c75aeb7-a744-45be-a923-0fd15df122c9", + "metadata": { + "tags": [] + }, + "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", + "
service_daterecent_combined_nameportfolio_organization_nameschedule_gtfs_dataset_keyroute_long_nameroute_short_nameroute_id
1064072025-01-15LAX to US__FlyAway - LAX to Union StationLos Angeles World Airports4a3f5fe2e305cc696684d11226ba9878FlyAway - LAX to Union StationLAX to US6
1082892025-01-15LAX to US__FlyAway - LAX to Union StationLos Angeles World Airports2f1c266fc20f9875777fb752af32a66eFlyAway - LAX to Union StationLAX to USTL-6
1090572025-02-12LAX to US__FlyAway - LAX to Union StationLos Angeles World Airports4a3f5fe2e305cc696684d11226ba9878FlyAway - LAX to Union StationLAX to US6
1108902025-02-12LAX to US__FlyAway - LAX to Union StationLos Angeles World Airports2f1c266fc20f9875777fb752af32a66eFlyAway - LAX to Union StationLAX to USTL-6
1116362025-03-12LAX to US__FlyAway - LAX to Union StationLos Angeles World Airports4a3f5fe2e305cc696684d11226ba9878FlyAway - LAX to Union StationLAX to US6
1134152025-03-12LAX to US__FlyAway - LAX to Union StationLos Angeles World Airports2f1c266fc20f9875777fb752af32a66eFlyAway - LAX to Union StationLAX to USTL-6
1141602025-04-16LAX to US__FlyAway - LAX to Union StationLos Angeles World Airports73e3164043eb7312454dd03413a6b310FlyAway - LAX to Union StationLAX to US6
1160402025-04-16LAX to US__FlyAway - LAX to Union StationLos Angeles World Airports2f1c266fc20f9875777fb752af32a66eFlyAway - LAX to Union StationLAX to USTL-6
1166072025-05-14LAX to US__FlyAway - LAX to Union StationLos Angeles World Airportsbe0f451de12b510fe2af5d47fe3cd0e7FlyAway - LAX to Union StationLAX to US6
1184532025-05-14LAX to US__FlyAway - LAX to Union StationLos Angeles World Airports2f1c266fc20f9875777fb752af32a66eFlyAway - LAX to Union StationLAX to USTL-6
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name \\\n", + "106407 2025-01-15 LAX to US__FlyAway - LAX to Union Station \n", + "108289 2025-01-15 LAX to US__FlyAway - LAX to Union Station \n", + "109057 2025-02-12 LAX to US__FlyAway - LAX to Union Station \n", + "110890 2025-02-12 LAX to US__FlyAway - LAX to Union Station \n", + "111636 2025-03-12 LAX to US__FlyAway - LAX to Union Station \n", + "113415 2025-03-12 LAX to US__FlyAway - LAX to Union Station \n", + "114160 2025-04-16 LAX to US__FlyAway - LAX to Union Station \n", + "116040 2025-04-16 LAX to US__FlyAway - LAX to Union Station \n", + "116607 2025-05-14 LAX to US__FlyAway - LAX to Union Station \n", + "118453 2025-05-14 LAX to US__FlyAway - LAX to Union Station \n", + "\n", + " portfolio_organization_name schedule_gtfs_dataset_key \\\n", + "106407 Los Angeles World Airports 4a3f5fe2e305cc696684d11226ba9878 \n", + "108289 Los Angeles World Airports 2f1c266fc20f9875777fb752af32a66e \n", + "109057 Los Angeles World Airports 4a3f5fe2e305cc696684d11226ba9878 \n", + "110890 Los Angeles World Airports 2f1c266fc20f9875777fb752af32a66e \n", + "111636 Los Angeles World Airports 4a3f5fe2e305cc696684d11226ba9878 \n", + "113415 Los Angeles World Airports 2f1c266fc20f9875777fb752af32a66e \n", + "114160 Los Angeles World Airports 73e3164043eb7312454dd03413a6b310 \n", + "116040 Los Angeles World Airports 2f1c266fc20f9875777fb752af32a66e \n", + "116607 Los Angeles World Airports be0f451de12b510fe2af5d47fe3cd0e7 \n", + "118453 Los Angeles World Airports 2f1c266fc20f9875777fb752af32a66e \n", + "\n", + " route_long_name route_short_name route_id \n", + "106407 FlyAway - LAX to Union Station LAX to US 6 \n", + "108289 FlyAway - LAX to Union Station LAX to US TL-6 \n", + "109057 FlyAway - LAX to Union Station LAX to US 6 \n", + "110890 FlyAway - LAX to Union Station LAX to US TL-6 \n", + "111636 FlyAway - LAX to Union Station LAX to US 6 \n", + "113415 FlyAway - LAX to Union Station LAX to US TL-6 \n", + "114160 FlyAway - LAX to Union Station LAX to US 6 \n", + "116040 FlyAway - LAX to Union Station LAX to US TL-6 \n", + "116607 FlyAway - LAX to Union Station LAX to US 6 \n", + "118453 FlyAway - LAX to Union Station LAX to US TL-6 " + ] + }, + "execution_count": 113, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(\n", + " df.loc[df.recent_combined_name.str.contains(\"LAX to Union Station\")][\n", + " [\n", + " \"service_date\",\n", + " \"recent_combined_name\",\n", + " \"portfolio_organization_name\",\n", + " \"schedule_gtfs_dataset_key\",\n", + " \"route_long_name\",\n", + " \"route_short_name\",\n", + " \"route_id\",\n", + " ]\n", + " ]\n", + " .sort_values(by=[\"service_date\"])\n", + " .drop_duplicates()\n", + " .tail(10)\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "0229d686-1ad1-484c-9f16-21766887da82", + "metadata": {}, + "source": [ + "## Los Angeles World Airports VN to LAX__FlyAway - Van Nuys to LAX\n", + "* Two different route_ids for the same short_name, long_name, recent_combined_name for May 2025." + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "id": "69cf30a9-6a82-4a4b-8c0a-fd973441dc7a", + "metadata": { + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
service_daterecent_combined_nameportfolio_organization_namenameschedule_gtfs_dataset_keyroute_long_nameroute_short_nameroute_id
1064042025-01-15VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsLAX FlyAway Schedule4a3f5fe2e305cc696684d11226ba9878FlyAway - Van Nuys to LAXVN to LAX1
1082862025-01-15VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsLAX Flyaway Bus Schedule2f1c266fc20f9875777fb752af32a66eFlyAway - Van Nuys to LAXVN to LAXTL-1
1090542025-02-12VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsLAX FlyAway Schedule4a3f5fe2e305cc696684d11226ba9878FlyAway - Van Nuys to LAXVN to LAX1
1108872025-02-12VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsLAX Flyaway Bus Schedule2f1c266fc20f9875777fb752af32a66eFlyAway - Van Nuys to LAXVN to LAXTL-1
1116332025-03-12VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsLAX FlyAway Schedule4a3f5fe2e305cc696684d11226ba9878FlyAway - Van Nuys to LAXVN to LAX1
1134122025-03-12VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsLAX Flyaway Bus Schedule2f1c266fc20f9875777fb752af32a66eFlyAway - Van Nuys to LAXVN to LAXTL-1
1141572025-04-16VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsLAX FlyAway Schedule73e3164043eb7312454dd03413a6b310FlyAway - Van Nuys to LAXVN to LAX1
1160372025-04-16VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsLAX Flyaway Bus Schedule2f1c266fc20f9875777fb752af32a66eFlyAway - Van Nuys to LAXVN to LAXTL-1
1166042025-05-14VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsLAX FlyAway Schedulebe0f451de12b510fe2af5d47fe3cd0e7FlyAway - Van Nuys to LAXVN to LAX1
1184502025-05-14VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsLAX Flyaway Bus Schedule2f1c266fc20f9875777fb752af32a66eFlyAway - Van Nuys to LAXVN to LAXTL-1
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name \\\n", + "106404 2025-01-15 VN to LAX__FlyAway - Van Nuys to LAX \n", + "108286 2025-01-15 VN to LAX__FlyAway - Van Nuys to LAX \n", + "109054 2025-02-12 VN to LAX__FlyAway - Van Nuys to LAX \n", + "110887 2025-02-12 VN to LAX__FlyAway - Van Nuys to LAX \n", + "111633 2025-03-12 VN to LAX__FlyAway - Van Nuys to LAX \n", + "113412 2025-03-12 VN to LAX__FlyAway - Van Nuys to LAX \n", + "114157 2025-04-16 VN to LAX__FlyAway - Van Nuys to LAX \n", + "116037 2025-04-16 VN to LAX__FlyAway - Van Nuys to LAX \n", + "116604 2025-05-14 VN to LAX__FlyAway - Van Nuys to LAX \n", + "118450 2025-05-14 VN to LAX__FlyAway - Van Nuys to LAX \n", + "\n", + " portfolio_organization_name name \\\n", + "106404 Los Angeles World Airports LAX FlyAway Schedule \n", + "108286 Los Angeles World Airports LAX Flyaway Bus Schedule \n", + "109054 Los Angeles World Airports LAX FlyAway Schedule \n", + "110887 Los Angeles World Airports LAX Flyaway Bus Schedule \n", + "111633 Los Angeles World Airports LAX FlyAway Schedule \n", + "113412 Los Angeles World Airports LAX Flyaway Bus Schedule \n", + "114157 Los Angeles World Airports LAX FlyAway Schedule \n", + "116037 Los Angeles World Airports LAX Flyaway Bus Schedule \n", + "116604 Los Angeles World Airports LAX FlyAway Schedule \n", + "118450 Los Angeles World Airports LAX Flyaway Bus Schedule \n", + "\n", + " schedule_gtfs_dataset_key route_long_name \\\n", + "106404 4a3f5fe2e305cc696684d11226ba9878 FlyAway - Van Nuys to LAX \n", + "108286 2f1c266fc20f9875777fb752af32a66e FlyAway - Van Nuys to LAX \n", + "109054 4a3f5fe2e305cc696684d11226ba9878 FlyAway - Van Nuys to LAX \n", + "110887 2f1c266fc20f9875777fb752af32a66e FlyAway - Van Nuys to LAX \n", + "111633 4a3f5fe2e305cc696684d11226ba9878 FlyAway - Van Nuys to LAX \n", + "113412 2f1c266fc20f9875777fb752af32a66e FlyAway - Van Nuys to LAX \n", + "114157 73e3164043eb7312454dd03413a6b310 FlyAway - Van Nuys to LAX \n", + "116037 2f1c266fc20f9875777fb752af32a66e FlyAway - Van Nuys to LAX \n", + "116604 be0f451de12b510fe2af5d47fe3cd0e7 FlyAway - Van Nuys to LAX \n", + "118450 2f1c266fc20f9875777fb752af32a66e FlyAway - Van Nuys to LAX \n", + "\n", + " route_short_name route_id \n", + "106404 VN to LAX 1 \n", + "108286 VN to LAX TL-1 \n", + "109054 VN to LAX 1 \n", + "110887 VN to LAX TL-1 \n", + "111633 VN to LAX 1 \n", + "113412 VN to LAX TL-1 \n", + "114157 VN to LAX 1 \n", + "116037 VN to LAX TL-1 \n", + "116604 VN to LAX 1 \n", + "118450 VN to LAX TL-1 " + ] + }, + "execution_count": 122, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(\n", + " df.loc[df.recent_combined_name.str.contains(\"Van Nuys to LAX\")][\n", + " [\n", + " \"service_date\",\n", + " \"recent_combined_name\",\n", + " \"portfolio_organization_name\",\n", + " \"name\",\n", + " \"schedule_gtfs_dataset_key\",\n", + " \"route_long_name\",\n", + " \"route_short_name\",\n", + " \"route_id\",\n", + " ]\n", + " ]\n", + " .sort_values(by=[\"service_date\"])\n", + " .drop_duplicates()\n", + " .tail(10)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "71c15525-ae73-47db-9d79-8e283495ec2f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 116, + "id": "02ae4e9e-9a11-433d-8858-69684d766817", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_map(routes, \"VN to LAX FlyAway - Van Nuys to LAX\")" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "id": "c01f27d5-0026-4d80-9924-86b5bfcabf0e", + "metadata": { + "tags": [] + }, + "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", + " \n", + " \n", + "
schedule_gtfs_dataset_keynameorganization_nameservice_date
294a3f5fe2e305cc696684d11226ba9878LAX FlyAway ScheduleLos Angeles World Airports2025-01-15
182723210f3a6d61ee3936df401e18a5636LAX Shuttles ScheduleLos Angeles World Airports2025-01-15
1832f1c266fc20f9875777fb752af32a66eLAX Flyaway Bus ScheduleLos Angeles World Airports2025-01-15
314a3f5fe2e305cc696684d11226ba9878LAX FlyAway ScheduleLos Angeles World Airports2025-02-12
183723210f3a6d61ee3936df401e18a5636LAX Shuttles ScheduleLos Angeles World Airports2025-02-12
1842f1c266fc20f9875777fb752af32a66eLAX Flyaway Bus ScheduleLos Angeles World Airports2025-02-12
324a3f5fe2e305cc696684d11226ba9878LAX FlyAway ScheduleLos Angeles World Airports2025-03-12
180723210f3a6d61ee3936df401e18a5636LAX Shuttles ScheduleLos Angeles World Airports2025-03-12
1812f1c266fc20f9875777fb752af32a66eLAX Flyaway Bus ScheduleLos Angeles World Airports2025-03-12
3273e3164043eb7312454dd03413a6b310LAX FlyAway ScheduleLos Angeles World Airports2025-04-16
186723210f3a6d61ee3936df401e18a5636LAX Shuttles ScheduleLos Angeles World Airports2025-04-16
1872f1c266fc20f9875777fb752af32a66eLAX Flyaway Bus ScheduleLos Angeles World Airports2025-04-16
30be0f451de12b510fe2af5d47fe3cd0e7LAX FlyAway ScheduleLos Angeles World Airports2025-05-14
185723210f3a6d61ee3936df401e18a5636LAX Shuttles ScheduleLos Angeles World Airports2025-05-14
1862f1c266fc20f9875777fb752af32a66eLAX Flyaway Bus ScheduleLos Angeles World Airports2025-05-14
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key name \\\n", + "29 4a3f5fe2e305cc696684d11226ba9878 LAX FlyAway Schedule \n", + "182 723210f3a6d61ee3936df401e18a5636 LAX Shuttles Schedule \n", + "183 2f1c266fc20f9875777fb752af32a66e LAX Flyaway Bus Schedule \n", + "31 4a3f5fe2e305cc696684d11226ba9878 LAX FlyAway Schedule \n", + "183 723210f3a6d61ee3936df401e18a5636 LAX Shuttles Schedule \n", + "184 2f1c266fc20f9875777fb752af32a66e LAX Flyaway Bus Schedule \n", + "32 4a3f5fe2e305cc696684d11226ba9878 LAX FlyAway Schedule \n", + "180 723210f3a6d61ee3936df401e18a5636 LAX Shuttles Schedule \n", + "181 2f1c266fc20f9875777fb752af32a66e LAX Flyaway Bus Schedule \n", + "32 73e3164043eb7312454dd03413a6b310 LAX FlyAway Schedule \n", + "186 723210f3a6d61ee3936df401e18a5636 LAX Shuttles Schedule \n", + "187 2f1c266fc20f9875777fb752af32a66e LAX Flyaway Bus Schedule \n", + "30 be0f451de12b510fe2af5d47fe3cd0e7 LAX FlyAway Schedule \n", + "185 723210f3a6d61ee3936df401e18a5636 LAX Shuttles Schedule \n", + "186 2f1c266fc20f9875777fb752af32a66e LAX Flyaway Bus Schedule \n", + "\n", + " organization_name service_date \n", + "29 Los Angeles World Airports 2025-01-15 \n", + "182 Los Angeles World Airports 2025-01-15 \n", + "183 Los Angeles World Airports 2025-01-15 \n", + "31 Los Angeles World Airports 2025-02-12 \n", + "183 Los Angeles World Airports 2025-02-12 \n", + "184 Los Angeles World Airports 2025-02-12 \n", + "32 Los Angeles World Airports 2025-03-12 \n", + "180 Los Angeles World Airports 2025-03-12 \n", + "181 Los Angeles World Airports 2025-03-12 \n", + "32 Los Angeles World Airports 2025-04-16 \n", + "186 Los Angeles World Airports 2025-04-16 \n", + "187 Los Angeles World Airports 2025-04-16 \n", + "30 Los Angeles World Airports 2025-05-14 \n", + "185 Los Angeles World Airports 2025-05-14 \n", + "186 Los Angeles World Airports 2025-05-14 " + ] + }, + "execution_count": 117, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "crosswalk_df.loc[\n", + " crosswalk_df.organization_name.str.contains(\n", + " \"Los Angeles World Airports\",\n", + " )\n", + "]" + ] + }, + { + "cell_type": "markdown", + "id": "9195ab63-d608-43c9-949d-51f6d73b6214", + "metadata": {}, + "source": [ + "## Check `gtfs_digest/merge_data.py/concatenate_schedule_by_route_direction`" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "id": "3888cf5a-6a6a-47e6-a695-1f3ee81c6a34", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "schd_route_dir = merge_data.concatenate_schedule_by_route_direction(date_list).pipe(\n", + " publish_utils.exclude_private_datasets, \n", + " public_gtfs_dataset_keys = public_feeds\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "id": "4caf3b05-f2cf-481a-bd9e-6790fc5ac4ac", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['2025-01-15T00:00:00.000000000', '2025-02-12T00:00:00.000000000',\n", + " '2025-03-12T00:00:00.000000000', '2025-04-16T00:00:00.000000000',\n", + " '2025-05-14T00:00:00.000000000'], dtype='datetime64[ns]')" + ] + }, + "execution_count": 135, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "schd_route_dir.service_date.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "id": "18ca954f-17cf-48ad-8d61-df61d6052364", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "schd_route_dir2 = schd_route_dir.loc[schd_route_dir.service_date == '2025-05-14T00:00:00.000000000']" + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "id": "78532c0b-b378-48c4-98a5-e02ab02cbcf5", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "schd_route_dir2 = schd_route_dir2.loc[schd_route_dir2.recent_combined_name.str.contains(\"Coastal Express\")]" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "id": "4f3edaf3-5473-4df5-af21-f95ebbd5267e", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Coastal Express 6\n", + "80 80-89 Coastal Express 5\n", + "80X 80-89 Coastal Express 5\n", + "84 80-89 Coastal Express 5\n", + "81 80-89 Coastal Express 4\n", + "85 80-89 Coastal Express 4\n", + "86 80-89 Coastal Express 4\n", + "87 80-89 Coastal Express 4\n", + "81B 80-89 Coastal Express 2\n", + "84U 80-89 Coastal Express 2\n", + "85C 80-89 Coastal Express 2\n", + "88 80-89 Coastal Express 2\n", + "89 80-89 Coastal Express 2\n", + "Name: recent_combined_name, dtype: int64" + ] + }, + "execution_count": 140, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "schd_route_dir2.recent_combined_name.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 141, + "id": "e0d4f599-7531-40c8-993a-7cc3e53d357d", + "metadata": { + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
7996800180068011
schedule_gtfs_dataset_key1770249a5a2e770ca90628434d4934b11770249a5a2e770ca90628434d4934b11770249a5a2e770ca90628434d4934b11770249a5a2e770ca90628434d4934b1
route_id4146414641464146
direction_id0.000.001.001.00
time_periodall_dayoffpeakall_daypeak
avg_scheduled_service_minutes102.00102.00129.00129.00
avg_stop_miles21.8821.8838.0638.06
n_scheduled_trips1111
frequency0.040.060.040.12
service_date2025-05-14 00:00:002025-05-14 00:00:002025-05-14 00:00:002025-05-14 00:00:00
is_express1.001.001.001.00
is_ferry0.000.000.000.00
is_rail0.000.000.000.00
is_coverage0.000.000.000.00
is_local0.000.000.000.00
is_downtown_local0.000.000.000.00
is_rapid0.000.000.000.00
typologyexpressexpressexpressexpress
nameVCTC GMV ScheduleVCTC GMV ScheduleVCTC GMV ScheduleVCTC GMV Schedule
combined_name87__80-89 Coastal Express87__80-89 Coastal Express87__80-89 Coastal Express87__80-89 Coastal Express
recent_combined_name87 80-89 Coastal Express87 80-89 Coastal Express87 80-89 Coastal Express87 80-89 Coastal Express
recent_route_id4146414641464146
route_primary_directionWestboundWestboundEastboundEastbound
\n", + "
" + ], + "text/plain": [ + " 7996 \\\n", + "schedule_gtfs_dataset_key 1770249a5a2e770ca90628434d4934b1 \n", + "route_id 4146 \n", + "direction_id 0.00 \n", + "time_period all_day \n", + "avg_scheduled_service_minutes 102.00 \n", + "avg_stop_miles 21.88 \n", + "n_scheduled_trips 1 \n", + "frequency 0.04 \n", + "service_date 2025-05-14 00:00:00 \n", + "is_express 1.00 \n", + "is_ferry 0.00 \n", + "is_rail 0.00 \n", + "is_coverage 0.00 \n", + "is_local 0.00 \n", + "is_downtown_local 0.00 \n", + "is_rapid 0.00 \n", + "typology express \n", + "name VCTC GMV Schedule \n", + "combined_name 87__80-89 Coastal Express \n", + "recent_combined_name 87 80-89 Coastal Express \n", + "recent_route_id 4146 \n", + "route_primary_direction Westbound \n", + "\n", + " 8001 \\\n", + "schedule_gtfs_dataset_key 1770249a5a2e770ca90628434d4934b1 \n", + "route_id 4146 \n", + "direction_id 0.00 \n", + "time_period offpeak \n", + "avg_scheduled_service_minutes 102.00 \n", + "avg_stop_miles 21.88 \n", + "n_scheduled_trips 1 \n", + "frequency 0.06 \n", + "service_date 2025-05-14 00:00:00 \n", + "is_express 1.00 \n", + "is_ferry 0.00 \n", + "is_rail 0.00 \n", + "is_coverage 0.00 \n", + "is_local 0.00 \n", + "is_downtown_local 0.00 \n", + "is_rapid 0.00 \n", + "typology express \n", + "name VCTC GMV Schedule \n", + "combined_name 87__80-89 Coastal Express \n", + "recent_combined_name 87 80-89 Coastal Express \n", + "recent_route_id 4146 \n", + "route_primary_direction Westbound \n", + "\n", + " 8006 \\\n", + "schedule_gtfs_dataset_key 1770249a5a2e770ca90628434d4934b1 \n", + "route_id 4146 \n", + "direction_id 1.00 \n", + "time_period all_day \n", + "avg_scheduled_service_minutes 129.00 \n", + "avg_stop_miles 38.06 \n", + "n_scheduled_trips 1 \n", + "frequency 0.04 \n", + "service_date 2025-05-14 00:00:00 \n", + "is_express 1.00 \n", + "is_ferry 0.00 \n", + "is_rail 0.00 \n", + "is_coverage 0.00 \n", + "is_local 0.00 \n", + "is_downtown_local 0.00 \n", + "is_rapid 0.00 \n", + "typology express \n", + "name VCTC GMV Schedule \n", + "combined_name 87__80-89 Coastal Express \n", + "recent_combined_name 87 80-89 Coastal Express \n", + "recent_route_id 4146 \n", + "route_primary_direction Eastbound \n", + "\n", + " 8011 \n", + "schedule_gtfs_dataset_key 1770249a5a2e770ca90628434d4934b1 \n", + "route_id 4146 \n", + "direction_id 1.00 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 129.00 \n", + "avg_stop_miles 38.06 \n", + "n_scheduled_trips 1 \n", + "frequency 0.12 \n", + "service_date 2025-05-14 00:00:00 \n", + "is_express 1.00 \n", + "is_ferry 0.00 \n", + "is_rail 0.00 \n", + "is_coverage 0.00 \n", + "is_local 0.00 \n", + "is_downtown_local 0.00 \n", + "is_rapid 0.00 \n", + "typology express \n", + "name VCTC GMV Schedule \n", + "combined_name 87__80-89 Coastal Express \n", + "recent_combined_name 87 80-89 Coastal Express \n", + "recent_route_id 4146 \n", + "route_primary_direction Eastbound " + ] + }, + "execution_count": 141, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "schd_route_dir2.loc[schd_route_dir2.recent_combined_name.str.contains(\"87\")].T" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/gtfs_digest/26_tiffany_route_id.ipynb b/gtfs_digest/26_tiffany_route_id.ipynb new file mode 100644 index 0000000000..a461724664 --- /dev/null +++ b/gtfs_digest/26_tiffany_route_id.ipynb @@ -0,0 +1,8780 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "1c75d453-f988-40ce-bb25-770f4d0bc773", + "metadata": {}, + "source": [ + "# Route identification (time-series)\n", + "\n", + "Over time, even `route_ids` change. Pick out a couple of examples of this." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3f3d3984-e41e-4bf0-a496-9f17c08b70bc", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import yaml\n", + "\n", + "from update_vars import SCHED_GCS, GTFS_DATA_DICT\n", + "from shared_utils import portfolio_utils\n", + "from segment_speed_utils import time_series_utils\n", + "\n", + "with open(\n", + " \"../_shared_utils/shared_utils/portfolio_organization_name.yml\", \"r\"\n", + ") as f:\n", + " PORTFOLIO_ORGANIZATIONS_DICT = yaml.safe_load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "fcc3a1b8-e2ec-404c-a1bd-fd0360fb45ae", + "metadata": {}, + "outputs": [], + "source": [ + "CLEANED_ROUTE_NAMING = GTFS_DATA_DICT.schedule_tables.route_identification\n", + "\n", + "df = pd.read_parquet(\n", + " f\"{SCHED_GCS}{CLEANED_ROUTE_NAMING}.parquet\"\n", + ").pipe(\n", + " portfolio_utils.standardize_portfolio_organization_names, \n", + " PORTFOLIO_ORGANIZATIONS_DICT\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "014fb670-dfa0-4b0d-ac90-a9f69e25e6b5", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['schedule_gtfs_dataset_key', 'name', 'route_id', 'route_long_name',\n", + " 'route_short_name', 'route_desc', 'service_date', 'combined_name',\n", + " 'route_id2', 'recent_combined_name', 'recent_route_id2',\n", + " 'portfolio_organization_name'],\n", + " dtype='object')" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns" + ] + }, + { + "cell_type": "markdown", + "id": "7d697087-c45f-43b1-a116-974b4f0e4571", + "metadata": {}, + "source": [ + "## LA Metro\n", + "\n", + "`route_id` has suffix added every time a new feed goes into effect." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "b1e13c5b-4e46-43c2-b105-7001c4ba8101", + "metadata": { + "scrolled": true, + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
nameportfolio_organization_nameroute_idservice_datecombined_namerecent_combined_namerecent_route_id2route_long_nameroute_short_name
99231LA Metro Bus ScheduleLos Angeles County Metropolitan Transportation...2-131832024-10-182__Metro Local Line2__Metro Local Line2Metro Local Line2
101311LA Metro Bus ScheduleLos Angeles County Metropolitan Transportation...2-131832024-10-192__Metro Local Line2__Metro Local Line2Metro Local Line2
102996LA Metro Bus ScheduleLos Angeles County Metropolitan Transportation...2-131832024-10-202__Metro Local Line2__Metro Local Line2Metro Local Line2
105242LA Metro Bus ScheduleLos Angeles County Metropolitan Transportation...2-131832024-11-132__Metro Local Line2__Metro Local Line2Metro Local Line2
108035LA Metro Bus ScheduleLos Angeles County Metropolitan Transportation...2-131832024-12-112__Metro Local Line2__Metro Local Line2Metro Local Line2
111088LA Metro Bus ScheduleLos Angeles County Metropolitan Transportation...2-131862025-01-152__Metro Local Line2__Metro Local Line2Metro Local Line2
113814LA Metro Bus ScheduleLos Angeles County Metropolitan Transportation...2-131912025-02-122__Metro Local Line2__Metro Local Line2Metro Local Line2
116376LA Metro Bus ScheduleLos Angeles County Metropolitan Transportation...2-131912025-03-122__Metro Local Line2__Metro Local Line2Metro Local Line2
119065LA Metro Bus ScheduleLos Angeles County Metropolitan Transportation...2-131912025-04-162__Metro Local Line2__Metro Local Line2Metro Local Line2
121607LA Metro Bus ScheduleLos Angeles County Metropolitan Transportation...2-131912025-05-142__Metro Local Line2__Metro Local Line2Metro Local Line2
\n", + "
" + ], + "text/plain": [ + " name \\\n", + "99231 LA Metro Bus Schedule \n", + "101311 LA Metro Bus Schedule \n", + "102996 LA Metro Bus Schedule \n", + "105242 LA Metro Bus Schedule \n", + "108035 LA Metro Bus Schedule \n", + "111088 LA Metro Bus Schedule \n", + "113814 LA Metro Bus Schedule \n", + "116376 LA Metro Bus Schedule \n", + "119065 LA Metro Bus Schedule \n", + "121607 LA Metro Bus Schedule \n", + "\n", + " portfolio_organization_name route_id \\\n", + "99231 Los Angeles County Metropolitan Transportation... 2-13183 \n", + "101311 Los Angeles County Metropolitan Transportation... 2-13183 \n", + "102996 Los Angeles County Metropolitan Transportation... 2-13183 \n", + "105242 Los Angeles County Metropolitan Transportation... 2-13183 \n", + "108035 Los Angeles County Metropolitan Transportation... 2-13183 \n", + "111088 Los Angeles County Metropolitan Transportation... 2-13186 \n", + "113814 Los Angeles County Metropolitan Transportation... 2-13191 \n", + "116376 Los Angeles County Metropolitan Transportation... 2-13191 \n", + "119065 Los Angeles County Metropolitan Transportation... 2-13191 \n", + "121607 Los Angeles County Metropolitan Transportation... 2-13191 \n", + "\n", + " service_date combined_name recent_combined_name \\\n", + "99231 2024-10-18 2__Metro Local Line 2__Metro Local Line \n", + "101311 2024-10-19 2__Metro Local Line 2__Metro Local Line \n", + "102996 2024-10-20 2__Metro Local Line 2__Metro Local Line \n", + "105242 2024-11-13 2__Metro Local Line 2__Metro Local Line \n", + "108035 2024-12-11 2__Metro Local Line 2__Metro Local Line \n", + "111088 2025-01-15 2__Metro Local Line 2__Metro Local Line \n", + "113814 2025-02-12 2__Metro Local Line 2__Metro Local Line \n", + "116376 2025-03-12 2__Metro Local Line 2__Metro Local Line \n", + "119065 2025-04-16 2__Metro Local Line 2__Metro Local Line \n", + "121607 2025-05-14 2__Metro Local Line 2__Metro Local Line \n", + "\n", + " recent_route_id2 route_long_name route_short_name \n", + "99231 2 Metro Local Line 2 \n", + "101311 2 Metro Local Line 2 \n", + "102996 2 Metro Local Line 2 \n", + "105242 2 Metro Local Line 2 \n", + "108035 2 Metro Local Line 2 \n", + "111088 2 Metro Local Line 2 \n", + "113814 2 Metro Local Line 2 \n", + "116376 2 Metro Local Line 2 \n", + "119065 2 Metro Local Line 2 \n", + "121607 2 Metro Local Line 2 " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "subset_cols = [\n", + " \"name\", \"portfolio_organization_name\", \n", + " \"route_id\", \"service_date\", \"combined_name\",\n", + " \"recent_combined_name\", \"recent_route_id2\", 'route_long_name',\n", + " 'route_short_name',\n", + "]\n", + "\n", + "df[(df.name.str.contains(\"LA Metro\")) & \n", + " (df.recent_combined_name == \"2__Metro Local Line\")\n", + "][subset_cols].tail(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "f392041d-9e3b-46bb-a265-3ff556c7b6e1", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2-13172 13\n", + "2-13183 12\n", + "2-13168 11\n", + "2-13167 10\n", + "2-13191 4\n", + "2-13186 1\n", + "Name: route_id, dtype: int64" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[(df.name.str.contains(\"LA Metro\")) & \n", + " (df.recent_combined_name == \"2__Metro Local Line\")\n", + " ].route_id.value_counts()" + ] + }, + { + "cell_type": "markdown", + "id": "cd18a6bf-4875-42c0-b2ee-d36c36f3c8d0", + "metadata": {}, + "source": [ + "## VCTC\n", + "\n", + "These were flagged as a complicated case where metrics were duplicated in GTFS Digest.\n", + "\n", + "Within [time_series_utils](https://github.com/cal-itp/data-analyses/blob/main/rt_segment_speeds/segment_speed_utils/time_series_utils.py#L84-L105), in Apr 2024, when this function was added, VCTC should only have route_long_names kept. \n", + "\n", + "Recently, since Sep 2024, it appears they've grouped a set of routes together, now it's appearing as 80-89 Coastal Express.\n", + "Given that, we should remove VCTC GMV from that list where we do extra route cleaning." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "504a670b-3dc9-4351-bd75-2fbb2d1d422e", + "metadata": { + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
nameportfolio_organization_nameroute_idservice_datecombined_namerecent_combined_namerecent_route_id2route_long_nameroute_short_name
14VCTC GMV ScheduleVentura County (VCTC, Gold Coast, Cities of Ca...41342023-03-1580__80-Coastal Express80__80-Coastal Express413480-Coastal Express80
15VCTC GMV ScheduleVentura County (VCTC, Gold Coast, Cities of Ca...41362023-03-1580X__80x-Coastal Express80X__80x-Coastal Express413680x-Coastal Express80X
16VCTC GMV ScheduleVentura County (VCTC, Gold Coast, Cities of Ca...41452023-03-1586__86-Coastal Express86__86-Coastal Express414586-Coastal Express86
21VCTC GMV ScheduleVentura County (VCTC, Gold Coast, Cities of Ca...41432023-03-1585__85-Coastal Express85__85-Coastal Express414385-Coastal Express85
22VCTC GMV ScheduleVentura County (VCTC, Gold Coast, Cities of Ca...41462023-03-1587__87-Coastal Express87__87-Coastal Express414687-Coastal Express87
..............................
121729VCTC GMV ScheduleVentura County (VCTC, Gold Coast, Cities of Ca...41462025-05-1487__80-89 Coastal Express87__80-89 Coastal Express414680-89 Coastal Express87
121818VCTC GMV ScheduleVentura County (VCTC, Gold Coast, Cities of Ca...41362025-05-1480X__80-89 Coastal Express80X__80-89 Coastal Express413680-89 Coastal Express80X
121821VCTC GMV ScheduleVentura County (VCTC, Gold Coast, Cities of Ca...41382025-05-1481B__80-89 Coastal Express81B__80-89 Coastal Express413880-89 Coastal Express81B
121822VCTC GMV ScheduleVentura County (VCTC, Gold Coast, Cities of Ca...41422025-05-1484U__80-89 Coastal Express84U__80-89 Coastal Express414280-89 Coastal Express84U
121823VCTC GMV ScheduleVentura County (VCTC, Gold Coast, Cities of Ca...41472025-05-1488__80-89 Coastal Express88__80-89 Coastal Express414780-89 Coastal Express88
\n", + "

534 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " name portfolio_organization_name \\\n", + "14 VCTC GMV Schedule Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "15 VCTC GMV Schedule Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "16 VCTC GMV Schedule Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "21 VCTC GMV Schedule Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "22 VCTC GMV Schedule Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "... ... ... \n", + "121729 VCTC GMV Schedule Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "121818 VCTC GMV Schedule Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "121821 VCTC GMV Schedule Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "121822 VCTC GMV Schedule Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "121823 VCTC GMV Schedule Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "\n", + " route_id service_date combined_name \\\n", + "14 4134 2023-03-15 80__80-Coastal Express \n", + "15 4136 2023-03-15 80X__80x-Coastal Express \n", + "16 4145 2023-03-15 86__86-Coastal Express \n", + "21 4143 2023-03-15 85__85-Coastal Express \n", + "22 4146 2023-03-15 87__87-Coastal Express \n", + "... ... ... ... \n", + "121729 4146 2025-05-14 87__80-89 Coastal Express \n", + "121818 4136 2025-05-14 80X__80-89 Coastal Express \n", + "121821 4138 2025-05-14 81B__80-89 Coastal Express \n", + "121822 4142 2025-05-14 84U__80-89 Coastal Express \n", + "121823 4147 2025-05-14 88__80-89 Coastal Express \n", + "\n", + " recent_combined_name recent_route_id2 route_long_name \\\n", + "14 80__80-Coastal Express 4134 80-Coastal Express \n", + "15 80X__80x-Coastal Express 4136 80x-Coastal Express \n", + "16 86__86-Coastal Express 4145 86-Coastal Express \n", + "21 85__85-Coastal Express 4143 85-Coastal Express \n", + "22 87__87-Coastal Express 4146 87-Coastal Express \n", + "... ... ... ... \n", + "121729 87__80-89 Coastal Express 4146 80-89 Coastal Express \n", + "121818 80X__80-89 Coastal Express 4136 80-89 Coastal Express \n", + "121821 81B__80-89 Coastal Express 4138 80-89 Coastal Express \n", + "121822 84U__80-89 Coastal Express 4142 80-89 Coastal Express \n", + "121823 88__80-89 Coastal Express 4147 80-89 Coastal Express \n", + "\n", + " route_short_name \n", + "14 80 \n", + "15 80X \n", + "16 86 \n", + "21 85 \n", + "22 87 \n", + "... ... \n", + "121729 87 \n", + "121818 80X \n", + "121821 81B \n", + "121822 84U \n", + "121823 88 \n", + "\n", + "[534 rows x 9 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vctc_df = df[(df.name==\"VCTC GMV Schedule\") & \n", + " (df.recent_combined_name.str.contains(\"Coastal Express\"))\n", + " ]\n", + "vctc_df[subset_cols]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "d38743ca-6775-422f-83a8-20568764e2f8", + "metadata": { + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
schedule_gtfs_dataset_keynameroute_idroute_long_nameroute_short_nameroute_descservice_datecombined_nameroute_id2recent_combined_namerecent_route_id2portfolio_organization_name
07e015887964432c82ce7e735c2753f86VCTC GMV Schedule413480-Coastal Express80802023-03-1580__80-Coastal Express413480-Coastal Express4134Ventura County (VCTC, Gold Coast, Cities of Ca...
17e015887964432c82ce7e735c2753f86VCTC GMV Schedule413680x-Coastal Express80X80x2023-03-1580X__80x-Coastal Express413680x-Coastal Express4136Ventura County (VCTC, Gold Coast, Cities of Ca...
27e015887964432c82ce7e735c2753f86VCTC GMV Schedule414586-Coastal Express86862023-03-1586__86-Coastal Express414586-Coastal Express4145Ventura County (VCTC, Gold Coast, Cities of Ca...
37e015887964432c82ce7e735c2753f86VCTC GMV Schedule414385-Coastal Express85852023-03-1585__85-Coastal Express414385-Coastal Express4143Ventura County (VCTC, Gold Coast, Cities of Ca...
47e015887964432c82ce7e735c2753f86VCTC GMV Schedule414687-Coastal Express87872023-03-1587__87-Coastal Express414687-Coastal Express4146Ventura County (VCTC, Gold Coast, Cities of Ca...
.......................................
5291770249a5a2e770ca90628434d4934b1VCTC GMV Schedule414680-89 Coastal Express87872025-05-1487__80-89 Coastal Express414680-89 Coastal Express4146Ventura County (VCTC, Gold Coast, Cities of Ca...
5301770249a5a2e770ca90628434d4934b1VCTC GMV Schedule413680-89 Coastal Express80X80x2025-05-1480X__80-89 Coastal Express413680-89 Coastal Express4136Ventura County (VCTC, Gold Coast, Cities of Ca...
5311770249a5a2e770ca90628434d4934b1VCTC GMV Schedule413880-89 Coastal Express81B81B2025-05-1481B__80-89 Coastal Express413880-89 Coastal Express4138Ventura County (VCTC, Gold Coast, Cities of Ca...
5321770249a5a2e770ca90628434d4934b1VCTC GMV Schedule414280-89 Coastal Express84U84U2025-05-1484U__80-89 Coastal Express414280-89 Coastal Express4142Ventura County (VCTC, Gold Coast, Cities of Ca...
5331770249a5a2e770ca90628434d4934b1VCTC GMV Schedule414780-89 Coastal Express88882025-05-1488__80-89 Coastal Express414780-89 Coastal Express4147Ventura County (VCTC, Gold Coast, Cities of Ca...
\n", + "

534 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key name route_id \\\n", + "0 7e015887964432c82ce7e735c2753f86 VCTC GMV Schedule 4134 \n", + "1 7e015887964432c82ce7e735c2753f86 VCTC GMV Schedule 4136 \n", + "2 7e015887964432c82ce7e735c2753f86 VCTC GMV Schedule 4145 \n", + "3 7e015887964432c82ce7e735c2753f86 VCTC GMV Schedule 4143 \n", + "4 7e015887964432c82ce7e735c2753f86 VCTC GMV Schedule 4146 \n", + ".. ... ... ... \n", + "529 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule 4146 \n", + "530 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule 4136 \n", + "531 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule 4138 \n", + "532 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule 4142 \n", + "533 1770249a5a2e770ca90628434d4934b1 VCTC GMV Schedule 4147 \n", + "\n", + " route_long_name route_short_name route_desc service_date \\\n", + "0 80-Coastal Express 80 80 2023-03-15 \n", + "1 80x-Coastal Express 80X 80x 2023-03-15 \n", + "2 86-Coastal Express 86 86 2023-03-15 \n", + "3 85-Coastal Express 85 85 2023-03-15 \n", + "4 87-Coastal Express 87 87 2023-03-15 \n", + ".. ... ... ... ... \n", + "529 80-89 Coastal Express 87 87 2025-05-14 \n", + "530 80-89 Coastal Express 80X 80x 2025-05-14 \n", + "531 80-89 Coastal Express 81B 81B 2025-05-14 \n", + "532 80-89 Coastal Express 84U 84U 2025-05-14 \n", + "533 80-89 Coastal Express 88 88 2025-05-14 \n", + "\n", + " combined_name route_id2 recent_combined_name \\\n", + "0 80__80-Coastal Express 4134 80-Coastal Express \n", + "1 80X__80x-Coastal Express 4136 80x-Coastal Express \n", + "2 86__86-Coastal Express 4145 86-Coastal Express \n", + "3 85__85-Coastal Express 4143 85-Coastal Express \n", + "4 87__87-Coastal Express 4146 87-Coastal Express \n", + ".. ... ... ... \n", + "529 87__80-89 Coastal Express 4146 80-89 Coastal Express \n", + "530 80X__80-89 Coastal Express 4136 80-89 Coastal Express \n", + "531 81B__80-89 Coastal Express 4138 80-89 Coastal Express \n", + "532 84U__80-89 Coastal Express 4142 80-89 Coastal Express \n", + "533 88__80-89 Coastal Express 4147 80-89 Coastal Express \n", + "\n", + " recent_route_id2 portfolio_organization_name \n", + "0 4134 Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "1 4136 Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "2 4145 Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "3 4143 Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "4 4146 Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + ".. ... ... \n", + "529 4146 Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "530 4136 Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "531 4138 Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "532 4142 Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "533 4147 Ventura County (VCTC, Gold Coast, Cities of Ca... \n", + "\n", + "[534 rows x 12 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vctc_df.pipe(\n", + " time_series_utils.clean_standardized_route_names\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "2a2a75ae-588d-4220-8d73-151c1e6f64d6", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "unique_routes = vctc_df.pipe(\n", + " time_series_utils.clean_standardized_route_names\n", + ").route_id.unique()" + ] + }, + { + "cell_type": "markdown", + "id": "13e3e1fb-f904-4045-bc41-f38ddd8d3d26", + "metadata": {}, + "source": [ + "The new `recent_combined_name` since Sep 2024-May 2025 is capturing so many route_ids!\n", + "\n", + "This confirms what was seen GTFS Digest." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "f2a02094-5a79-4d9d-8ac2-deab2b1a05b0", + "metadata": { + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
080-89 Coastal Express[4146, 4138, 4134, 4147, 4142, 4141, 4137, 414...2024-09-182025-05-14
180-Coastal Express[4134]2023-03-152024-06-12
280c-Coastal Express[4135]2023-03-152023-08-15
380x-Coastal Express[4136]2023-03-152024-06-12
481-Coastal Express[4137]2023-03-152024-06-12
581B-Coastal Express[4138]2023-03-152024-06-12
684-Coastal Express[4141]2023-03-152024-06-12
784u-Coastal Express[4142]2023-03-152024-06-12
885-Coastal Express[4143]2023-03-152024-06-12
985c-Coastal Express[4144]2023-03-152024-06-12
1086-Coastal Express[4145]2023-03-152024-06-12
1187-Coastal Express[4146]2023-03-152024-06-12
1288-Coastal Express[4147]2023-03-152024-06-12
1389-Coastal Express[4148]2023-03-152024-06-12
14Coastal Express[4146, 4138, 4134, 4147, 4142, 4141, 4137, 414...2024-07-172024-08-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id \\\n", + " \n", + "0 80-89 Coastal Express [4146, 4138, 4134, 4147, 4142, 4141, 4137, 414... \n", + "1 80-Coastal Express [4134] \n", + "2 80c-Coastal Express [4135] \n", + "3 80x-Coastal Express [4136] \n", + "4 81-Coastal Express [4137] \n", + "5 81B-Coastal Express [4138] \n", + "6 84-Coastal Express [4141] \n", + "7 84u-Coastal Express [4142] \n", + "8 85-Coastal Express [4143] \n", + "9 85c-Coastal Express [4144] \n", + "10 86-Coastal Express [4145] \n", + "11 87-Coastal Express [4146] \n", + "12 88-Coastal Express [4147] \n", + "13 89-Coastal Express [4148] \n", + "14 Coastal Express [4146, 4138, 4134, 4147, 4142, 4141, 4137, 414... \n", + "\n", + " service_date \n", + " min max \n", + "0 2024-09-18 2025-05-14 \n", + "1 2023-03-15 2024-06-12 \n", + "2 2023-03-15 2023-08-15 \n", + "3 2023-03-15 2024-06-12 \n", + "4 2023-03-15 2024-06-12 \n", + "5 2023-03-15 2024-06-12 \n", + "6 2023-03-15 2024-06-12 \n", + "7 2023-03-15 2024-06-12 \n", + "8 2023-03-15 2024-06-12 \n", + "9 2023-03-15 2024-06-12 \n", + "10 2023-03-15 2024-06-12 \n", + "11 2023-03-15 2024-06-12 \n", + "12 2023-03-15 2024-06-12 \n", + "13 2023-03-15 2024-06-12 \n", + "14 2024-07-17 2024-08-14 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vctc_df.pipe(\n", + " time_series_utils.clean_standardized_route_names\n", + ").astype(str).groupby(\n", + " [\"recent_combined_name\"]\n", + ").agg({\n", + " \"route_id\": lambda x: list(set(x)),\n", + " \"service_date\": [\"min\", \"max\"],\n", + "}).reset_index()" + ] + }, + { + "cell_type": "markdown", + "id": "fd558185-e6cd-4ea1-911a-744658c95c7e", + "metadata": {}, + "source": [ + "In Apr 2024, this looks ok, `recent_combined_name` is reasonable." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "6a0c5963-ec27-4789-b2c9-5fdfb4b89120", + "metadata": { + "tags": [] + }, + "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", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
080-Coastal Express[4134]2023-03-152024-03-13
180c-Coastal Express[4135]2023-03-152023-08-15
280x-Coastal Express[4136]2023-03-152024-03-13
381-Coastal Express[4137]2023-03-152024-03-13
481B-Coastal Express[4138]2023-03-152024-03-13
584-Coastal Express[4141]2023-03-152024-03-13
684u-Coastal Express[4142]2023-03-152024-03-13
785-Coastal Express[4143]2023-03-152024-03-13
885c-Coastal Express[4144]2023-03-152024-03-13
986-Coastal Express[4145]2023-03-152024-03-13
1087-Coastal Express[4146]2023-03-152024-03-13
1188-Coastal Express[4147]2023-03-152024-03-13
1289-Coastal Express[4148]2023-03-152024-03-13
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 80-Coastal Express [4134] 2023-03-15 2024-03-13\n", + "1 80c-Coastal Express [4135] 2023-03-15 2023-08-15\n", + "2 80x-Coastal Express [4136] 2023-03-15 2024-03-13\n", + "3 81-Coastal Express [4137] 2023-03-15 2024-03-13\n", + "4 81B-Coastal Express [4138] 2023-03-15 2024-03-13\n", + "5 84-Coastal Express [4141] 2023-03-15 2024-03-13\n", + "6 84u-Coastal Express [4142] 2023-03-15 2024-03-13\n", + "7 85-Coastal Express [4143] 2023-03-15 2024-03-13\n", + "8 85c-Coastal Express [4144] 2023-03-15 2024-03-13\n", + "9 86-Coastal Express [4145] 2023-03-15 2024-03-13\n", + "10 87-Coastal Express [4146] 2023-03-15 2024-03-13\n", + "11 88-Coastal Express [4147] 2023-03-15 2024-03-13\n", + "12 89-Coastal Express [4148] 2023-03-15 2024-03-13" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vctc_df[vctc_df.service_date <= pd.to_datetime(\"2024-04-01\")].pipe(\n", + " time_series_utils.clean_standardized_route_names\n", + ").astype(str).groupby(\n", + " [\"recent_combined_name\"]\n", + ").agg({\n", + " \"route_id\": lambda x: list(set(x)),\n", + " \"service_date\": [\"min\", \"max\"],\n", + "}).reset_index()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "dd589988-26ba-4176-a239-01d68bd87483", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "def display_subset(df: pd.DataFrame) -> tuple[pd.DataFrame]:\n", + " \"\"\"\n", + " Compare what happens when we pipe vs don't pipe for the operators in the list we\n", + " do extra data wrangling on.\n", + " \"\"\"\n", + " cols = [\"route_id\", \"route_short_name\", \"route_long_name\", \n", + " \"recent_combined_name\"\n", + " ]\n", + " with_pipe = df.pipe(\n", + " time_series_utils.clean_standardized_route_names\n", + " ).astype(str).groupby(\n", + " [\"recent_combined_name\"]\n", + " ).agg({\n", + " \"route_id\": lambda x: list(set(x)),\n", + " \"service_date\": [\"min\", \"max\"],\n", + " }).reset_index()\n", + "\n", + " no_pipe = df.astype(str).groupby(\n", + " [\"recent_combined_name\"]\n", + " ).agg({\n", + " \"route_id\": lambda x: list(set(x)),\n", + " \"service_date\": [\"min\", \"max\"],\n", + " }).reset_index()\n", + " \n", + " print(f\"status quo, with time_series_utils.pipe affecting it\")\n", + " display(with_pipe)\n", + " \n", + " print(f\"status quo, no pipe, no extra parsing affecting it\")\n", + " display(no_pipe)\n", + " \n", + " return" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "ccf192e2-4d41-40d5-b249-a3b2a4d22bac", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, with time_series_utils.pipe affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
080-89 Coastal Express[4146, 4138, 4134, 4147, 4142, 4141, 4137, 414...2024-09-182025-05-14
180-Coastal Express[4134]2023-03-152024-06-12
280c-Coastal Express[4135]2023-03-152023-08-15
380x-Coastal Express[4136]2023-03-152024-06-12
481-Coastal Express[4137]2023-03-152024-06-12
581B-Coastal Express[4138]2023-03-152024-06-12
684-Coastal Express[4141]2023-03-152024-06-12
784u-Coastal Express[4142]2023-03-152024-06-12
885-Coastal Express[4143]2023-03-152024-06-12
985c-Coastal Express[4144]2023-03-152024-06-12
1086-Coastal Express[4145]2023-03-152024-06-12
1187-Coastal Express[4146]2023-03-152024-06-12
1288-Coastal Express[4147]2023-03-152024-06-12
1389-Coastal Express[4148]2023-03-152024-06-12
14Coastal Express[4146, 4138, 4134, 4147, 4142, 4141, 4137, 414...2024-07-172024-08-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id \\\n", + " \n", + "0 80-89 Coastal Express [4146, 4138, 4134, 4147, 4142, 4141, 4137, 414... \n", + "1 80-Coastal Express [4134] \n", + "2 80c-Coastal Express [4135] \n", + "3 80x-Coastal Express [4136] \n", + "4 81-Coastal Express [4137] \n", + "5 81B-Coastal Express [4138] \n", + "6 84-Coastal Express [4141] \n", + "7 84u-Coastal Express [4142] \n", + "8 85-Coastal Express [4143] \n", + "9 85c-Coastal Express [4144] \n", + "10 86-Coastal Express [4145] \n", + "11 87-Coastal Express [4146] \n", + "12 88-Coastal Express [4147] \n", + "13 89-Coastal Express [4148] \n", + "14 Coastal Express [4146, 4138, 4134, 4147, 4142, 4141, 4137, 414... \n", + "\n", + " service_date \n", + " min max \n", + "0 2024-09-18 2025-05-14 \n", + "1 2023-03-15 2024-06-12 \n", + "2 2023-03-15 2023-08-15 \n", + "3 2023-03-15 2024-06-12 \n", + "4 2023-03-15 2024-06-12 \n", + "5 2023-03-15 2024-06-12 \n", + "6 2023-03-15 2024-06-12 \n", + "7 2023-03-15 2024-06-12 \n", + "8 2023-03-15 2024-06-12 \n", + "9 2023-03-15 2024-06-12 \n", + "10 2023-03-15 2024-06-12 \n", + "11 2023-03-15 2024-06-12 \n", + "12 2023-03-15 2024-06-12 \n", + "13 2023-03-15 2024-06-12 \n", + "14 2024-07-17 2024-08-14 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
080C__80c-Coastal Express[4135]2023-03-152023-08-15
180X__80-89 Coastal Express[4136]2023-04-102025-05-14
280X__80x-Coastal Express[4136]2023-03-152023-03-15
380__80-89 Coastal Express[4134]2023-04-102025-05-14
480__80-Coastal Express[4134]2023-03-152023-03-15
581B__80-89 Coastal Express[4138]2023-04-102025-05-14
681B__81B-Coastal Express[4138]2023-03-152023-03-15
781__80-89 Coastal Express[4137]2023-04-102025-05-14
881__81-Coastal Express[4137]2023-03-152023-03-15
984U__80-89 Coastal Express[4142]2023-04-102025-05-14
1084U__84u-Coastal Express[4142]2023-03-152023-03-15
1184__80-89 Coastal Express[4141]2023-04-102025-05-14
1284__84-Coastal Express[4141]2023-03-152023-03-15
1385C__80-89 Coastal Express[4144]2023-04-102025-05-14
1485C__85c-Coastal Express[4144]2023-03-152023-03-15
1585__80-89 Coastal Express[4143]2023-04-102025-05-14
1685__85-Coastal Express[4143]2023-03-152023-03-15
1786__80-89 Coastal Express[4145]2023-04-102025-05-14
1886__86-Coastal Express[4145]2023-03-152023-03-15
1987__80-89 Coastal Express[4146]2023-04-102025-05-14
2087__87-Coastal Express[4146]2023-03-152023-03-15
2188__80-89 Coastal Express[4147]2023-04-102025-05-14
2288__88-Coastal Express[4147]2023-03-152023-03-15
2389__80-89 Coastal Express[4148]2023-04-102025-05-14
2489__89-Coastal Express[4148]2023-03-152023-03-15
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 80C__80c-Coastal Express [4135] 2023-03-15 2023-08-15\n", + "1 80X__80-89 Coastal Express [4136] 2023-04-10 2025-05-14\n", + "2 80X__80x-Coastal Express [4136] 2023-03-15 2023-03-15\n", + "3 80__80-89 Coastal Express [4134] 2023-04-10 2025-05-14\n", + "4 80__80-Coastal Express [4134] 2023-03-15 2023-03-15\n", + "5 81B__80-89 Coastal Express [4138] 2023-04-10 2025-05-14\n", + "6 81B__81B-Coastal Express [4138] 2023-03-15 2023-03-15\n", + "7 81__80-89 Coastal Express [4137] 2023-04-10 2025-05-14\n", + "8 81__81-Coastal Express [4137] 2023-03-15 2023-03-15\n", + "9 84U__80-89 Coastal Express [4142] 2023-04-10 2025-05-14\n", + "10 84U__84u-Coastal Express [4142] 2023-03-15 2023-03-15\n", + "11 84__80-89 Coastal Express [4141] 2023-04-10 2025-05-14\n", + "12 84__84-Coastal Express [4141] 2023-03-15 2023-03-15\n", + "13 85C__80-89 Coastal Express [4144] 2023-04-10 2025-05-14\n", + "14 85C__85c-Coastal Express [4144] 2023-03-15 2023-03-15\n", + "15 85__80-89 Coastal Express [4143] 2023-04-10 2025-05-14\n", + "16 85__85-Coastal Express [4143] 2023-03-15 2023-03-15\n", + "17 86__80-89 Coastal Express [4145] 2023-04-10 2025-05-14\n", + "18 86__86-Coastal Express [4145] 2023-03-15 2023-03-15\n", + "19 87__80-89 Coastal Express [4146] 2023-04-10 2025-05-14\n", + "20 87__87-Coastal Express [4146] 2023-03-15 2023-03-15\n", + "21 88__80-89 Coastal Express [4147] 2023-04-10 2025-05-14\n", + "22 88__88-Coastal Express [4147] 2023-03-15 2023-03-15\n", + "23 89__80-89 Coastal Express [4148] 2023-04-10 2025-05-14\n", + "24 89__89-Coastal Express [4148] 2023-03-15 2023-03-15" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_subset(vctc_df)" + ] + }, + { + "cell_type": "markdown", + "id": "6a60ae23-c552-402e-9166-09e2a10d3dda", + "metadata": {}, + "source": [ + "## Check other operators\n", + "\n", + "Find other operators ones that might also have had changes and see if any can benefit from having extra parsing removed." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "0fc7f302-7419-4c6d-9654-a1c3ea53c619", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Antelope Valley Transit Authority Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0Route 1[1]2023-03-152025-05-14
1Route 11[11]2023-03-152025-05-14
2Route 12[12]2023-03-152025-05-14
3Route 2[2]2023-03-152025-05-14
4Route 3[3]2023-03-152025-05-14
5Route 4[4]2023-03-152025-05-14
6Route 5[5]2023-03-152025-05-14
7Route 50[50]2023-03-152025-05-14
8Route 51[51]2023-03-152025-05-14
9Route 52[52]2023-03-152025-05-14
10Route 7[7]2023-03-152025-05-14
11Route 785[785]2023-03-152025-05-14
12Route 786[786]2023-03-152025-05-14
13Route 787[787]2023-03-152025-05-14
14Route 790[790]2023-03-152025-05-14
15Route 8[8]2023-03-152025-05-14
16Route 9[9]2023-03-152025-05-14
17Route 94[94]2023-03-152025-05-14
18Route 97[97]2023-03-152025-05-14
19Route 98[98]2023-03-152025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 Route 1 [1] 2023-03-15 2025-05-14\n", + "1 Route 11 [11] 2023-03-15 2025-05-14\n", + "2 Route 12 [12] 2023-03-15 2025-05-14\n", + "3 Route 2 [2] 2023-03-15 2025-05-14\n", + "4 Route 3 [3] 2023-03-15 2025-05-14\n", + "5 Route 4 [4] 2023-03-15 2025-05-14\n", + "6 Route 5 [5] 2023-03-15 2025-05-14\n", + "7 Route 50 [50] 2023-03-15 2025-05-14\n", + "8 Route 51 [51] 2023-03-15 2025-05-14\n", + "9 Route 52 [52] 2023-03-15 2025-05-14\n", + "10 Route 7 [7] 2023-03-15 2025-05-14\n", + "11 Route 785 [785] 2023-03-15 2025-05-14\n", + "12 Route 786 [786] 2023-03-15 2025-05-14\n", + "13 Route 787 [787] 2023-03-15 2025-05-14\n", + "14 Route 790 [790] 2023-03-15 2025-05-14\n", + "15 Route 8 [8] 2023-03-15 2025-05-14\n", + "16 Route 9 [9] 2023-03-15 2025-05-14\n", + "17 Route 94 [94] 2023-03-15 2025-05-14\n", + "18 Route 97 [97] 2023-03-15 2025-05-14\n", + "19 Route 98 [98] 2023-03-15 2025-05-14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
011__Route 11[11]2023-03-152025-05-14
112__Route 12[12]2023-03-152025-05-14
21__Route 1[1]2023-03-152025-05-14
32__Route 2[2]2023-03-152025-05-14
43__Route 3[3]2023-03-152025-05-14
54__Route 4[4]2023-03-152025-05-14
650__Route 50[50]2023-03-152025-05-14
751__Route 51[51]2023-03-152025-05-14
852__Route 52[52]2023-03-152025-05-14
95__Route 5[5]2023-03-152025-05-14
10785__Route 785[785]2023-03-152025-05-14
11786__Route 786[786]2023-03-152025-05-14
12787__Route 787[787]2023-03-152025-05-14
13790__Route 790[790]2023-03-152025-05-14
147__Route 7[7]2023-03-152025-05-14
158__Route 8[8]2023-03-152025-05-14
1694__Route 94[94]2023-03-152025-05-14
1797__Route 97[97]2023-03-152025-05-14
1898__Route 98[98]2023-03-152025-05-14
199__Route 9[9]2023-03-152025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 11__Route 11 [11] 2023-03-15 2025-05-14\n", + "1 12__Route 12 [12] 2023-03-15 2025-05-14\n", + "2 1__Route 1 [1] 2023-03-15 2025-05-14\n", + "3 2__Route 2 [2] 2023-03-15 2025-05-14\n", + "4 3__Route 3 [3] 2023-03-15 2025-05-14\n", + "5 4__Route 4 [4] 2023-03-15 2025-05-14\n", + "6 50__Route 50 [50] 2023-03-15 2025-05-14\n", + "7 51__Route 51 [51] 2023-03-15 2025-05-14\n", + "8 52__Route 52 [52] 2023-03-15 2025-05-14\n", + "9 5__Route 5 [5] 2023-03-15 2025-05-14\n", + "10 785__Route 785 [785] 2023-03-15 2025-05-14\n", + "11 786__Route 786 [786] 2023-03-15 2025-05-14\n", + "12 787__Route 787 [787] 2023-03-15 2025-05-14\n", + "13 790__Route 790 [790] 2023-03-15 2025-05-14\n", + "14 7__Route 7 [7] 2023-03-15 2025-05-14\n", + "15 8__Route 8 [8] 2023-03-15 2025-05-14\n", + "16 94__Route 94 [94] 2023-03-15 2025-05-14\n", + "17 97__Route 97 [97] 2023-03-15 2025-05-14\n", + "18 98__Route 98 [98] 2023-03-15 2025-05-14\n", + "19 9__Route 9 [9] 2023-03-15 2025-05-14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Bay Area 511 ACE Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0ACE Train[ACETrain]2023-10-092025-05-14
1Altamont Corridor Express[ACE]2023-03-152023-09-13
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 ACE Train [ACETrain] 2023-10-09 2025-05-14\n", + "1 Altamont Corridor Express [ACE] 2023-03-15 2023-09-13" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0ACETrain__ACE Train[ACETrain]2023-10-092025-05-14
1ACE__Altamont Corridor Express[ACE]2023-03-152023-09-13
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 ACETrain__ACE Train [ACETrain] 2023-10-09 2025-05-14\n", + "1 ACE__Altamont Corridor Express [ACE] 2023-03-15 2023-09-13" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Bay Area 511 Caltrain Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0[Express, Local Weekday, Limited]2024-11-132025-05-14
11XX weekday local service[Local Weekday]2024-10-142024-10-18
24XX local service in Santa Clara county, limit...[Limited]2024-10-142024-10-18
35XX limited stops[Express]2024-10-142024-10-18
46XX weekend local service[Local Weekend]2024-10-192024-10-20
58XX peak hour connector from/to Gilroy[South County Connector]2024-10-142024-10-18
6Bullet[B7]2023-03-152024-09-18
7Caltrain Bus Bridge[Bus Bridge]2024-04-202024-04-21
8LTD 3[L3]2023-03-152024-09-18
9LTD 4[L4]2023-03-152024-09-18
10LTD 5[L5]2023-03-152024-09-18
11Local[L2, L1]2023-03-152024-09-18
12South Santa Clara County Connector[South County]2024-11-132025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name \\\n", + " \n", + "0 \n", + "1 1XX weekday local service \n", + "2 4XX local service in Santa Clara county, limit... \n", + "3 5XX limited stops \n", + "4 6XX weekend local service \n", + "5 8XX peak hour connector from/to Gilroy \n", + "6 Bullet \n", + "7 Caltrain Bus Bridge \n", + "8 LTD 3 \n", + "9 LTD 4 \n", + "10 LTD 5 \n", + "11 Local \n", + "12 South Santa Clara County Connector \n", + "\n", + " route_id service_date \n", + " min max \n", + "0 [Express, Local Weekday, Limited] 2024-11-13 2025-05-14 \n", + "1 [Local Weekday] 2024-10-14 2024-10-18 \n", + "2 [Limited] 2024-10-14 2024-10-18 \n", + "3 [Express] 2024-10-14 2024-10-18 \n", + "4 [Local Weekend] 2024-10-19 2024-10-20 \n", + "5 [South County Connector] 2024-10-14 2024-10-18 \n", + "6 [B7] 2023-03-15 2024-09-18 \n", + "7 [Bus Bridge] 2024-04-20 2024-04-21 \n", + "8 [L3] 2023-03-15 2024-09-18 \n", + "9 [L4] 2023-03-15 2024-09-18 \n", + "10 [L5] 2023-03-15 2024-09-18 \n", + "11 [L2, L1] 2023-03-15 2024-09-18 \n", + "12 [South County] 2024-11-13 2025-05-14 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0B7__Bullet[B7]2023-03-152024-09-18
1Bus Bridge__Caltrain Bus Bridge[Bus Bridge]2024-04-202024-04-21
2Express__[Express]2024-10-142025-05-14
3L1__Local[L1]2023-03-152024-09-18
4L2__Local[L2]2024-04-202024-04-21
5L3__LTD 3[L3]2023-03-152024-09-18
6L4__LTD 4[L4]2023-03-152024-09-18
7L5__LTD 5[L5]2023-03-152024-09-18
8Limited__[Limited]2024-10-142025-05-14
9Local Weekday__[Local Weekday]2024-10-142025-05-14
10Local Weekend__6XX weekend local service[Local Weekend]2024-10-192024-10-20
11South County Connector__8XX peak hour connecto...[South County Connector]2024-10-142024-10-18
12South County__South Santa Clara County Connector[South County]2024-11-132025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name \\\n", + " \n", + "0 B7__Bullet \n", + "1 Bus Bridge__Caltrain Bus Bridge \n", + "2 Express__ \n", + "3 L1__Local \n", + "4 L2__Local \n", + "5 L3__LTD 3 \n", + "6 L4__LTD 4 \n", + "7 L5__LTD 5 \n", + "8 Limited__ \n", + "9 Local Weekday__ \n", + "10 Local Weekend__6XX weekend local service \n", + "11 South County Connector__8XX peak hour connecto... \n", + "12 South County__South Santa Clara County Connector \n", + "\n", + " route_id service_date \n", + " min max \n", + "0 [B7] 2023-03-15 2024-09-18 \n", + "1 [Bus Bridge] 2024-04-20 2024-04-21 \n", + "2 [Express] 2024-10-14 2025-05-14 \n", + "3 [L1] 2023-03-15 2024-09-18 \n", + "4 [L2] 2024-04-20 2024-04-21 \n", + "5 [L3] 2023-03-15 2024-09-18 \n", + "6 [L4] 2023-03-15 2024-09-18 \n", + "7 [L5] 2023-03-15 2024-09-18 \n", + "8 [Limited] 2024-10-14 2025-05-14 \n", + "9 [Local Weekday] 2024-10-14 2025-05-14 \n", + "10 [Local Weekend] 2024-10-19 2024-10-20 \n", + "11 [South County Connector] 2024-10-14 2024-10-18 \n", + "12 [South County] 2024-11-13 2025-05-14 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Bay Area 511 Emery Go-Round Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0Hollis[Hollis]2023-03-152025-05-14
1Shellmound/Powell[Shellmound/Powell]2023-03-152024-01-17
2Shellmound/Powell Sat[Shell/Pow Sat]2024-04-202024-10-19
3Shellmound/Powell Sun[Shell/Pow Sun]2024-04-212024-10-20
4Shellmound/Powell WD[Shell/Pow]2024-02-142025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 Hollis [Hollis] 2023-03-15 2025-05-14\n", + "1 Shellmound/Powell [Shellmound/Powell] 2023-03-15 2024-01-17\n", + "2 Shellmound/Powell Sat [Shell/Pow Sat] 2024-04-20 2024-10-19\n", + "3 Shellmound/Powell Sun [Shell/Pow Sun] 2024-04-21 2024-10-20\n", + "4 Shellmound/Powell WD [Shell/Pow] 2024-02-14 2025-05-14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0Hollis__Hollis[Hollis]2023-03-152025-05-14
1Shell/Pow Sat__Shellmound/Powell Sat[Shell/Pow Sat]2024-04-202024-10-19
2Shell/Pow Sun__Shellmound/Powell Sun[Shell/Pow Sun]2024-04-212024-10-20
3Shell/Pow__Shellmound/Powell WD[Shell/Pow]2024-02-142025-05-14
4Shellmound/Powell__Shellmound/Powell[Shellmound/Powell]2023-03-152024-01-17
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \\\n", + " min \n", + "0 Hollis__Hollis [Hollis] 2023-03-15 \n", + "1 Shell/Pow Sat__Shellmound/Powell Sat [Shell/Pow Sat] 2024-04-20 \n", + "2 Shell/Pow Sun__Shellmound/Powell Sun [Shell/Pow Sun] 2024-04-21 \n", + "3 Shell/Pow__Shellmound/Powell WD [Shell/Pow] 2024-02-14 \n", + "4 Shellmound/Powell__Shellmound/Powell [Shellmound/Powell] 2023-03-15 \n", + "\n", + " \n", + " max \n", + "0 2025-05-14 \n", + "1 2024-10-19 \n", + "2 2024-10-20 \n", + "3 2025-05-14 \n", + "4 2024-01-17 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Bay Area 511 Petaluma Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
002 N. Mcdowell[2]2024-01-172025-05-14
103 Eastside Clockwise[3]2024-01-172025-05-14
210 Petaluma Blvd[10]2024-01-172025-05-14
311 Petaluma Crosstown[11]2024-01-172025-05-14
424 SMART - Lakeville -Kaiser Hospital[24]2024-01-172025-05-14
5302 KJHS/CGHS[302]2025-01-152025-05-14
6303 KJHS/CGHS[303]2024-01-172025-05-14
7311 Casa Grande High and Kenilworth Junior High[311]2024-01-172025-05-14
833 Eastside Counter-Clock[33]2024-01-172025-05-14
9501 Petaluma High and Junior High[501]2024-01-172025-05-14
10Cghs / Eastside Transit Center[312]2023-03-152023-12-13
11Crosstown[11]2023-03-152023-12-13
12Downtown Kjhs/cghs[311]2023-03-152023-12-13
13Eastside Clockwise[3]2023-03-152023-12-13
14Eastside Counter-Clock[33]2023-03-152023-12-13
15Kjhs/cghs[303]2023-03-152023-12-13
16N. Mcdowell[2]2023-03-152023-12-13
17Petaluma Blvd[10]2023-03-152023-12-13
18Pjhs/phs/smart[501]2023-03-152023-12-13
19Route 10[10]2023-04-102023-04-14
20Route 11[11]2023-04-102023-04-16
21Route 2[2]2023-04-102023-04-16
22Route 24[24]2023-04-102023-04-14
23Route 3[3]2023-04-102023-04-14
24Route 301[301]2023-04-102023-04-14
25Route 302[302]2023-04-102023-04-14
26Route 303[303]2023-04-102023-04-14
27Route 311[311]2023-04-102023-04-14
28Route 312[312]2023-04-102023-04-14
29Route 33[33]2023-04-102023-04-16
30Route 501[501]2023-04-102023-04-14
31Smart - Lakeville -Kaiser[24]2023-03-152023-12-13
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \\\n", + " min \n", + "0 02 N. Mcdowell [2] 2024-01-17 \n", + "1 03 Eastside Clockwise [3] 2024-01-17 \n", + "2 10 Petaluma Blvd [10] 2024-01-17 \n", + "3 11 Petaluma Crosstown [11] 2024-01-17 \n", + "4 24 SMART - Lakeville -Kaiser Hospital [24] 2024-01-17 \n", + "5 302 KJHS/CGHS [302] 2025-01-15 \n", + "6 303 KJHS/CGHS [303] 2024-01-17 \n", + "7 311 Casa Grande High and Kenilworth Junior High [311] 2024-01-17 \n", + "8 33 Eastside Counter-Clock [33] 2024-01-17 \n", + "9 501 Petaluma High and Junior High [501] 2024-01-17 \n", + "10 Cghs / Eastside Transit Center [312] 2023-03-15 \n", + "11 Crosstown [11] 2023-03-15 \n", + "12 Downtown Kjhs/cghs [311] 2023-03-15 \n", + "13 Eastside Clockwise [3] 2023-03-15 \n", + "14 Eastside Counter-Clock [33] 2023-03-15 \n", + "15 Kjhs/cghs [303] 2023-03-15 \n", + "16 N. Mcdowell [2] 2023-03-15 \n", + "17 Petaluma Blvd [10] 2023-03-15 \n", + "18 Pjhs/phs/smart [501] 2023-03-15 \n", + "19 Route 10 [10] 2023-04-10 \n", + "20 Route 11 [11] 2023-04-10 \n", + "21 Route 2 [2] 2023-04-10 \n", + "22 Route 24 [24] 2023-04-10 \n", + "23 Route 3 [3] 2023-04-10 \n", + "24 Route 301 [301] 2023-04-10 \n", + "25 Route 302 [302] 2023-04-10 \n", + "26 Route 303 [303] 2023-04-10 \n", + "27 Route 311 [311] 2023-04-10 \n", + "28 Route 312 [312] 2023-04-10 \n", + "29 Route 33 [33] 2023-04-10 \n", + "30 Route 501 [501] 2023-04-10 \n", + "31 Smart - Lakeville -Kaiser [24] 2023-03-15 \n", + "\n", + " \n", + " max \n", + "0 2025-05-14 \n", + "1 2025-05-14 \n", + "2 2025-05-14 \n", + "3 2025-05-14 \n", + "4 2025-05-14 \n", + "5 2025-05-14 \n", + "6 2025-05-14 \n", + "7 2025-05-14 \n", + "8 2025-05-14 \n", + "9 2025-05-14 \n", + "10 2023-12-13 \n", + "11 2023-12-13 \n", + "12 2023-12-13 \n", + "13 2023-12-13 \n", + "14 2023-12-13 \n", + "15 2023-12-13 \n", + "16 2023-12-13 \n", + "17 2023-12-13 \n", + "18 2023-12-13 \n", + "19 2023-04-14 \n", + "20 2023-04-16 \n", + "21 2023-04-16 \n", + "22 2023-04-14 \n", + "23 2023-04-14 \n", + "24 2023-04-14 \n", + "25 2023-04-14 \n", + "26 2023-04-14 \n", + "27 2023-04-14 \n", + "28 2023-04-14 \n", + "29 2023-04-16 \n", + "30 2023-04-14 \n", + "31 2023-12-13 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
010__10 Petaluma Blvd[10]2023-03-152025-05-14
111__11 Petaluma Crosstown[11]2023-03-152025-05-14
224__24 SMART - Lakeville -Kaiser Hospital[24]2023-03-152025-05-14
32__02 N. Mcdowell[2]2023-03-152025-05-14
4301__Route 301[301]2023-04-102023-04-14
5302__302 KJHS/CGHS[302]2023-04-102025-05-14
6303__303 KJHS/CGHS[303]2023-03-152025-05-14
7311__311 Casa Grande High and Kenilworth Junio...[311]2023-03-152025-05-14
8312__Cghs / Eastside Transit Center[312]2023-03-152023-12-13
933__33 Eastside Counter-Clock[33]2023-03-152025-05-14
103__03 Eastside Clockwise[3]2023-03-152025-05-14
11501__501 Petaluma High and Junior High[501]2023-03-152025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \\\n", + " min \n", + "0 10__10 Petaluma Blvd [10] 2023-03-15 \n", + "1 11__11 Petaluma Crosstown [11] 2023-03-15 \n", + "2 24__24 SMART - Lakeville -Kaiser Hospital [24] 2023-03-15 \n", + "3 2__02 N. Mcdowell [2] 2023-03-15 \n", + "4 301__Route 301 [301] 2023-04-10 \n", + "5 302__302 KJHS/CGHS [302] 2023-04-10 \n", + "6 303__303 KJHS/CGHS [303] 2023-03-15 \n", + "7 311__311 Casa Grande High and Kenilworth Junio... [311] 2023-03-15 \n", + "8 312__Cghs / Eastside Transit Center [312] 2023-03-15 \n", + "9 33__33 Eastside Counter-Clock [33] 2023-03-15 \n", + "10 3__03 Eastside Clockwise [3] 2023-03-15 \n", + "11 501__501 Petaluma High and Junior High [501] 2023-03-15 \n", + "\n", + " \n", + " max \n", + "0 2025-05-14 \n", + "1 2025-05-14 \n", + "2 2025-05-14 \n", + "3 2025-05-14 \n", + "4 2023-04-14 \n", + "5 2025-05-14 \n", + "6 2025-05-14 \n", + "7 2025-05-14 \n", + "8 2023-12-13 \n", + "9 2025-05-14 \n", + "10 2025-05-14 \n", + "11 2025-05-14 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Beach Cities GMV Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0102[4819]2023-03-152025-05-14
1109[4815]2023-03-152025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 102 [4819] 2023-03-15 2025-05-14\n", + "1 109 [4815] 2023-03-15 2025-05-14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0102__102[4819]2023-03-152025-05-14
1109__109[4815]2023-03-152025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 102__102 [4819] 2023-03-15 2025-05-14\n", + "1 109__109 [4815] 2023-03-15 2025-05-14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Bear Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0Central Campus[cent]2023-03-152025-05-14
1Hill[hill]2023-03-152025-05-14
2Night Safety North[ntsafens]2023-03-152025-05-14
3Night Safety South[ntsafess]2023-03-152025-05-14
4Perimeter[peri]2023-03-152025-05-14
5Reverse Perimeter[revperi]2023-03-152025-05-14
6Shared Services[shrdserv]2023-03-152025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 Central Campus [cent] 2023-03-15 2025-05-14\n", + "1 Hill [hill] 2023-03-15 2025-05-14\n", + "2 Night Safety North [ntsafens] 2023-03-15 2025-05-14\n", + "3 Night Safety South [ntsafess] 2023-03-15 2025-05-14\n", + "4 Perimeter [peri] 2023-03-15 2025-05-14\n", + "5 Reverse Perimeter [revperi] 2023-03-15 2025-05-14\n", + "6 Shared Services [shrdserv] 2023-03-15 2025-05-14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0Central Campus__Central Campus[cent]2023-03-152025-05-14
1Hill__Hill[hill]2023-03-152025-05-14
2Night Safety North__Night Safety North[ntsafens]2023-03-152025-05-14
3Night Safety South__Night Safety South[ntsafess]2023-03-152025-05-14
4Perimeter__Perimeter[peri]2023-03-152025-05-14
5Reverse Perimeter__Reverse Perimeter[revperi]2023-03-152025-05-14
6Shared Services__Shared Services[shrdserv]2023-03-152025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 Central Campus__Central Campus [cent] 2023-03-15 2025-05-14\n", + "1 Hill__Hill [hill] 2023-03-15 2025-05-14\n", + "2 Night Safety North__Night Safety North [ntsafens] 2023-03-15 2025-05-14\n", + "3 Night Safety South__Night Safety South [ntsafess] 2023-03-15 2025-05-14\n", + "4 Perimeter__Perimeter [peri] 2023-03-15 2025-05-14\n", + "5 Reverse Perimeter__Reverse Perimeter [revperi] 2023-03-15 2025-05-14\n", + "6 Shared Services__Shared Services [shrdserv] 2023-03-15 2025-05-14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Commerce Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0100[1693]2023-03-152025-05-14
1200[1692]2023-03-152025-05-14
2300[1694]2023-03-152025-05-14
3400[1690]2023-03-152025-05-14
4500[1691]2023-03-152025-05-14
5600[1695]2023-03-152025-05-14
6700[1697]2024-07-172025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 100 [1693] 2023-03-15 2025-05-14\n", + "1 200 [1692] 2023-03-15 2025-05-14\n", + "2 300 [1694] 2023-03-15 2025-05-14\n", + "3 400 [1690] 2023-03-15 2025-05-14\n", + "4 500 [1691] 2023-03-15 2025-05-14\n", + "5 600 [1695] 2023-03-15 2025-05-14\n", + "6 700 [1697] 2024-07-17 2025-05-14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0100__100[1693]2023-03-152025-05-14
1200__200[1692]2023-03-152025-05-14
2300__300[1694]2023-03-152025-05-14
3400__400[1690]2023-03-152025-05-14
4500__500[1691]2023-03-152025-05-14
5600__600[1695]2023-03-152025-05-14
6700__700[1697]2024-07-172025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 100__100 [1693] 2023-03-15 2025-05-14\n", + "1 200__200 [1692] 2023-03-15 2025-05-14\n", + "2 300__300 [1694] 2023-03-15 2025-05-14\n", + "3 400__400 [1690] 2023-03-15 2025-05-14\n", + "4 500__500 [1691] 2023-03-15 2025-05-14\n", + "5 600__600 [1695] 2023-03-15 2025-05-14\n", + "6 700__700 [1697] 2024-07-17 2025-05-14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Elk Grove Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0Elk Grove Commuter Route[E14, E16, E11, E18, E12, E15, E19, E10, E17, ...2025-03-122025-05-14
1Elk Grove Local Route[E110, E112, E113, E115, E111, E114, E116]2025-03-122025-05-14
2Route 10[3428]2023-03-152024-12-11
3Route 11[3429]2023-03-152024-12-11
4Route 110[3421]2023-03-152024-12-11
5Route 111[3422]2023-03-152024-12-11
6Route 112[3423]2023-03-152024-12-11
7Route 113[3424]2023-03-152024-12-11
8Route 114[3425]2023-03-152024-12-11
9Route 115[3426]2023-03-152024-12-11
10Route 116[3427]2023-03-152024-12-11
11Route 12[3430]2023-03-152024-12-11
12Route 13[3431]2023-03-152024-12-11
13Route 14[3432]2023-03-152024-12-11
14Route 15[3433]2023-03-152024-12-11
15Route 16[3434]2023-03-152024-12-11
16Route 17[3435]2023-03-152024-12-11
17Route 18[3438]2023-03-152024-12-11
18Route 19[3439]2023-03-152024-12-11
\n", + "
" + ], + "text/plain": [ + " recent_combined_name \\\n", + " \n", + "0 Elk Grove Commuter Route \n", + "1 Elk Grove Local Route \n", + "2 Route 10 \n", + "3 Route 11 \n", + "4 Route 110 \n", + "5 Route 111 \n", + "6 Route 112 \n", + "7 Route 113 \n", + "8 Route 114 \n", + "9 Route 115 \n", + "10 Route 116 \n", + "11 Route 12 \n", + "12 Route 13 \n", + "13 Route 14 \n", + "14 Route 15 \n", + "15 Route 16 \n", + "16 Route 17 \n", + "17 Route 18 \n", + "18 Route 19 \n", + "\n", + " route_id service_date \n", + " min max \n", + "0 [E14, E16, E11, E18, E12, E15, E19, E10, E17, ... 2025-03-12 2025-05-14 \n", + "1 [E110, E112, E113, E115, E111, E114, E116] 2025-03-12 2025-05-14 \n", + "2 [3428] 2023-03-15 2024-12-11 \n", + "3 [3429] 2023-03-15 2024-12-11 \n", + "4 [3421] 2023-03-15 2024-12-11 \n", + "5 [3422] 2023-03-15 2024-12-11 \n", + "6 [3423] 2023-03-15 2024-12-11 \n", + "7 [3424] 2023-03-15 2024-12-11 \n", + "8 [3425] 2023-03-15 2024-12-11 \n", + "9 [3426] 2023-03-15 2024-12-11 \n", + "10 [3427] 2023-03-15 2024-12-11 \n", + "11 [3430] 2023-03-15 2024-12-11 \n", + "12 [3431] 2023-03-15 2024-12-11 \n", + "13 [3432] 2023-03-15 2024-12-11 \n", + "14 [3433] 2023-03-15 2024-12-11 \n", + "15 [3434] 2023-03-15 2024-12-11 \n", + "16 [3435] 2023-03-15 2024-12-11 \n", + "17 [3438] 2023-03-15 2024-12-11 \n", + "18 [3439] 2023-03-15 2024-12-11 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
010__Route 10[3428]2023-03-152024-12-11
1110__Route 110[3421]2023-03-152024-12-11
2111__Route 111[3422]2023-03-152024-12-11
3112__Route 112[3423]2023-03-152024-12-11
4113__Route 113[3424]2023-03-152024-12-11
5114__Route 114[3425]2023-03-152024-12-11
6115__Route 115[3426]2023-03-152024-12-11
7116__Route 116[3427]2023-03-152024-12-11
811__Route 11[3429]2023-03-152024-12-11
912__Route 12[3430]2023-03-152024-12-11
1013__Route 13[3431]2023-03-152024-12-11
1114__Route 14[3432]2023-03-152024-12-11
1215__Route 15[3433]2023-03-152024-12-11
1316__Route 16[3434]2023-03-152024-12-11
1417__Route 17[3435]2023-03-152024-12-11
1518__Route 18[3438]2023-03-152024-12-11
1619__Route 19[3439]2023-03-152024-12-11
17E10__Elk Grove Commuter Route[E10]2025-03-122025-05-14
18E110__Elk Grove Local Route[E110]2025-03-122025-05-14
19E111__Elk Grove Local Route[E111]2025-03-122025-05-14
20E112__Elk Grove Local Route[E112]2025-03-122025-05-14
21E113__Elk Grove Local Route[E113]2025-03-122025-05-14
22E114__Elk Grove Local Route[E114]2025-03-122025-05-14
23E115__Elk Grove Local Route[E115]2025-03-122025-05-14
24E116__Elk Grove Local Route[E116]2025-03-122025-05-14
25E11__Elk Grove Commuter Route[E11]2025-03-122025-05-14
26E12__Elk Grove Commuter Route[E12]2025-03-122025-05-14
27E13__Elk Grove Commuter Route[E13]2025-03-122025-05-14
28E14__Elk Grove Commuter Route[E14]2025-03-122025-05-14
29E15__Elk Grove Commuter Route[E15]2025-03-122025-05-14
30E16__Elk Grove Commuter Route[E16]2025-03-122025-05-14
31E17__Elk Grove Commuter Route[E17]2025-03-122025-05-14
32E18__Elk Grove Commuter Route[E18]2025-03-122025-05-14
33E19__Elk Grove Commuter Route[E19]2025-03-122025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 10__Route 10 [3428] 2023-03-15 2024-12-11\n", + "1 110__Route 110 [3421] 2023-03-15 2024-12-11\n", + "2 111__Route 111 [3422] 2023-03-15 2024-12-11\n", + "3 112__Route 112 [3423] 2023-03-15 2024-12-11\n", + "4 113__Route 113 [3424] 2023-03-15 2024-12-11\n", + "5 114__Route 114 [3425] 2023-03-15 2024-12-11\n", + "6 115__Route 115 [3426] 2023-03-15 2024-12-11\n", + "7 116__Route 116 [3427] 2023-03-15 2024-12-11\n", + "8 11__Route 11 [3429] 2023-03-15 2024-12-11\n", + "9 12__Route 12 [3430] 2023-03-15 2024-12-11\n", + "10 13__Route 13 [3431] 2023-03-15 2024-12-11\n", + "11 14__Route 14 [3432] 2023-03-15 2024-12-11\n", + "12 15__Route 15 [3433] 2023-03-15 2024-12-11\n", + "13 16__Route 16 [3434] 2023-03-15 2024-12-11\n", + "14 17__Route 17 [3435] 2023-03-15 2024-12-11\n", + "15 18__Route 18 [3438] 2023-03-15 2024-12-11\n", + "16 19__Route 19 [3439] 2023-03-15 2024-12-11\n", + "17 E10__Elk Grove Commuter Route [E10] 2025-03-12 2025-05-14\n", + "18 E110__Elk Grove Local Route [E110] 2025-03-12 2025-05-14\n", + "19 E111__Elk Grove Local Route [E111] 2025-03-12 2025-05-14\n", + "20 E112__Elk Grove Local Route [E112] 2025-03-12 2025-05-14\n", + "21 E113__Elk Grove Local Route [E113] 2025-03-12 2025-05-14\n", + "22 E114__Elk Grove Local Route [E114] 2025-03-12 2025-05-14\n", + "23 E115__Elk Grove Local Route [E115] 2025-03-12 2025-05-14\n", + "24 E116__Elk Grove Local Route [E116] 2025-03-12 2025-05-14\n", + "25 E11__Elk Grove Commuter Route [E11] 2025-03-12 2025-05-14\n", + "26 E12__Elk Grove Commuter Route [E12] 2025-03-12 2025-05-14\n", + "27 E13__Elk Grove Commuter Route [E13] 2025-03-12 2025-05-14\n", + "28 E14__Elk Grove Commuter Route [E14] 2025-03-12 2025-05-14\n", + "29 E15__Elk Grove Commuter Route [E15] 2025-03-12 2025-05-14\n", + "30 E16__Elk Grove Commuter Route [E16] 2025-03-12 2025-05-14\n", + "31 E17__Elk Grove Commuter Route [E17] 2025-03-12 2025-05-14\n", + "32 E18__Elk Grove Commuter Route [E18] 2025-03-12 2025-05-14\n", + "33 E19__Elk Grove Commuter Route [E19] 2025-03-12 2025-05-14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Humboldt Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0AMRTS Gold Route[14]2023-10-092025-02-12
1AMRTS Green & Gold Route[76463]2023-10-092025-02-12
2AMRTS Orange Route[15]2023-10-092025-02-12
3AMRTS Red Route[13]2023-10-092025-02-12
4Arcata Gold Route[14]2025-03-122025-05-14
5Arcata Green & Gold Route[76463]2025-03-122025-05-14
6Arcata Orange Route[15]2025-03-122025-05-14
7Arcata Red Route[13]2025-03-122025-05-14
8Blue Lake[12416]2023-03-152023-09-13
9ETS Gold Route[5]2023-10-092025-02-12
10ETS Green Route[4]2023-10-092025-02-12
11ETS Purple Route[6]2023-10-092025-02-12
12ETS Rainbow Route[7]2023-10-142024-10-19
13ETS Red Route[3]2023-10-092025-02-12
14Eureka Gold Route[5]2025-03-122025-05-14
15Eureka Green Route[4]2025-03-122025-05-14
16Eureka Purple Route[6]2025-03-122025-05-14
17Eureka Red Route[3]2025-03-122025-05-14
18Gold[14]2023-03-152023-09-13
19Gold Route[5]2023-03-152023-09-13
20Green & Gold[76463]2023-09-132023-09-13
21Green Route[4]2023-03-152023-09-13
22HSU-College of the Redwoods[33023]2023-03-152023-09-13
23North State Express: 299[8]2025-03-122025-05-14
24North State Express: Route 101[76837]2024-10-142025-05-14
25Orange[15]2023-03-152023-09-13
26Purple Route[6]2023-03-152023-09-13
27RTS CalPoly-College of the Redwoods[33023]2023-10-092023-12-13
28Rainbow Route[7]2023-04-152023-04-15
29Red[13]2023-03-152023-09-13
30Red Route[3]2023-03-152023-09-13
31Redwood Coast Express[76837]2024-01-172024-09-18
32Redwood Transit System[76743]2024-01-172025-05-14
33Samoa Transit System[18689]2023-03-152023-07-12
34Southern Humboldt Intercity[822]2023-03-152025-02-12
35Southern Humboldt Line[822]2025-03-122025-05-14
36Trinidad-Scotia[1]2023-03-152023-12-13
37Willow Creek[8]2023-10-092025-02-12
38Willow Creek-Arcata[8]2023-03-152023-09-13
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 AMRTS Gold Route [14] 2023-10-09 2025-02-12\n", + "1 AMRTS Green & Gold Route [76463] 2023-10-09 2025-02-12\n", + "2 AMRTS Orange Route [15] 2023-10-09 2025-02-12\n", + "3 AMRTS Red Route [13] 2023-10-09 2025-02-12\n", + "4 Arcata Gold Route [14] 2025-03-12 2025-05-14\n", + "5 Arcata Green & Gold Route [76463] 2025-03-12 2025-05-14\n", + "6 Arcata Orange Route [15] 2025-03-12 2025-05-14\n", + "7 Arcata Red Route [13] 2025-03-12 2025-05-14\n", + "8 Blue Lake [12416] 2023-03-15 2023-09-13\n", + "9 ETS Gold Route [5] 2023-10-09 2025-02-12\n", + "10 ETS Green Route [4] 2023-10-09 2025-02-12\n", + "11 ETS Purple Route [6] 2023-10-09 2025-02-12\n", + "12 ETS Rainbow Route [7] 2023-10-14 2024-10-19\n", + "13 ETS Red Route [3] 2023-10-09 2025-02-12\n", + "14 Eureka Gold Route [5] 2025-03-12 2025-05-14\n", + "15 Eureka Green Route [4] 2025-03-12 2025-05-14\n", + "16 Eureka Purple Route [6] 2025-03-12 2025-05-14\n", + "17 Eureka Red Route [3] 2025-03-12 2025-05-14\n", + "18 Gold [14] 2023-03-15 2023-09-13\n", + "19 Gold Route [5] 2023-03-15 2023-09-13\n", + "20 Green & Gold [76463] 2023-09-13 2023-09-13\n", + "21 Green Route [4] 2023-03-15 2023-09-13\n", + "22 HSU-College of the Redwoods [33023] 2023-03-15 2023-09-13\n", + "23 North State Express: 299 [8] 2025-03-12 2025-05-14\n", + "24 North State Express: Route 101 [76837] 2024-10-14 2025-05-14\n", + "25 Orange [15] 2023-03-15 2023-09-13\n", + "26 Purple Route [6] 2023-03-15 2023-09-13\n", + "27 RTS CalPoly-College of the Redwoods [33023] 2023-10-09 2023-12-13\n", + "28 Rainbow Route [7] 2023-04-15 2023-04-15\n", + "29 Red [13] 2023-03-15 2023-09-13\n", + "30 Red Route [3] 2023-03-15 2023-09-13\n", + "31 Redwood Coast Express [76837] 2024-01-17 2024-09-18\n", + "32 Redwood Transit System [76743] 2024-01-17 2025-05-14\n", + "33 Samoa Transit System [18689] 2023-03-15 2023-07-12\n", + "34 Southern Humboldt Intercity [822] 2023-03-15 2025-02-12\n", + "35 Southern Humboldt Line [822] 2025-03-12 2025-05-14\n", + "36 Trinidad-Scotia [1] 2023-03-15 2023-12-13\n", + "37 Willow Creek [8] 2023-10-09 2025-02-12\n", + "38 Willow Creek-Arcata [8] 2023-03-15 2023-09-13" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0A G&G__Arcata Green & Gold Route[76463]2023-10-092025-05-14
1A Gold__Arcata Gold Route[14]2023-10-092025-05-14
2A Orng__Arcata Orange Route[15]2023-10-092025-05-14
3A Red__Arcata Red Route[13]2023-10-092025-05-14
4BLRTS__Blue Lake[12416]2023-03-152023-09-13
5E Gold__Eureka Gold Route[5]2023-10-092025-05-14
6E Grn__Eureka Green Route[4]2023-10-092025-05-14
7E Prpl__Eureka Purple Route[6]2023-10-092025-05-14
8E Red__Eureka Red Route[3]2023-10-092025-05-14
9E Rnbw__ETS Rainbow Route[7]2023-10-142024-10-19
10NSE101__North State Express: Route 101[76837]2024-01-172025-05-14
11NSE299__North State Express: 299[8]2023-10-092025-05-14
12RTS__HSU-College of the Redwoods[33023]2023-03-152023-09-13
13RTS__RTS CalPoly-College of the Redwoods[33023]2023-10-092023-12-13
14RTS__Redwood Transit System[76743]2024-01-172025-05-14
15RTS__Trinidad-Scotia[1]2023-03-152023-12-13
16SH__Southern Humboldt Line[822]2023-10-092025-05-14
17__Gold[14]2023-03-152023-09-13
18__Gold Route[5]2023-03-152023-09-13
19__Green & Gold[76463]2023-09-132023-09-13
20__Green Route[4]2023-03-152023-09-13
21__Orange[15]2023-03-152023-09-13
22__Purple Route[6]2023-03-152023-09-13
23__Rainbow Route[7]2023-04-152023-04-15
24__Red[13]2023-03-152023-09-13
25__Red Route[3]2023-03-152023-09-13
26__Samoa Transit System[18689]2023-03-152023-07-12
27__Southern Humboldt Intercity[822]2023-03-152023-09-13
28__Willow Creek-Arcata[8]2023-03-152023-09-13
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 A G&G__Arcata Green & Gold Route [76463] 2023-10-09 2025-05-14\n", + "1 A Gold__Arcata Gold Route [14] 2023-10-09 2025-05-14\n", + "2 A Orng__Arcata Orange Route [15] 2023-10-09 2025-05-14\n", + "3 A Red__Arcata Red Route [13] 2023-10-09 2025-05-14\n", + "4 BLRTS__Blue Lake [12416] 2023-03-15 2023-09-13\n", + "5 E Gold__Eureka Gold Route [5] 2023-10-09 2025-05-14\n", + "6 E Grn__Eureka Green Route [4] 2023-10-09 2025-05-14\n", + "7 E Prpl__Eureka Purple Route [6] 2023-10-09 2025-05-14\n", + "8 E Red__Eureka Red Route [3] 2023-10-09 2025-05-14\n", + "9 E Rnbw__ETS Rainbow Route [7] 2023-10-14 2024-10-19\n", + "10 NSE101__North State Express: Route 101 [76837] 2024-01-17 2025-05-14\n", + "11 NSE299__North State Express: 299 [8] 2023-10-09 2025-05-14\n", + "12 RTS__HSU-College of the Redwoods [33023] 2023-03-15 2023-09-13\n", + "13 RTS__RTS CalPoly-College of the Redwoods [33023] 2023-10-09 2023-12-13\n", + "14 RTS__Redwood Transit System [76743] 2024-01-17 2025-05-14\n", + "15 RTS__Trinidad-Scotia [1] 2023-03-15 2023-12-13\n", + "16 SH__Southern Humboldt Line [822] 2023-10-09 2025-05-14\n", + "17 __Gold [14] 2023-03-15 2023-09-13\n", + "18 __Gold Route [5] 2023-03-15 2023-09-13\n", + "19 __Green & Gold [76463] 2023-09-13 2023-09-13\n", + "20 __Green Route [4] 2023-03-15 2023-09-13\n", + "21 __Orange [15] 2023-03-15 2023-09-13\n", + "22 __Purple Route [6] 2023-03-15 2023-09-13\n", + "23 __Rainbow Route [7] 2023-04-15 2023-04-15\n", + "24 __Red [13] 2023-03-15 2023-09-13\n", + "25 __Red Route [3] 2023-03-15 2023-09-13\n", + "26 __Samoa Transit System [18689] 2023-03-15 2023-07-12\n", + "27 __Southern Humboldt Intercity [822] 2023-03-15 2023-09-13\n", + "28 __Willow Creek-Arcata [8] 2023-03-15 2023-09-13" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: LA DOT Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0CE Union Station/Bunker Hill Shuttle[900]2023-03-152025-05-14
1CE142[870]2023-03-152025-05-14
2CE409[29]2023-03-152025-05-14
3CE419[867]2023-03-152025-05-14
4CE422[30]2023-03-152025-05-14
...............
60DASH Watts Counterclockwise[714]2023-03-152025-05-14
61DASH Wilmington Clockwise[708]2023-03-152025-05-14
62DASH Wilmington Counterclockwise[710]2023-03-152025-05-14
63DASH Wilshire Center/Koreatown Clockwise[571]2023-03-152025-05-14
64DASH Wilshire Center/Koreatown Counterclockwise[572]2023-03-152025-05-14
\n", + "

65 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \\\n", + " min \n", + "0 CE Union Station/Bunker Hill Shuttle [900] 2023-03-15 \n", + "1 CE142 [870] 2023-03-15 \n", + "2 CE409 [29] 2023-03-15 \n", + "3 CE419 [867] 2023-03-15 \n", + "4 CE422 [30] 2023-03-15 \n", + ".. ... ... ... \n", + "60 DASH Watts Counterclockwise [714] 2023-03-15 \n", + "61 DASH Wilmington Clockwise [708] 2023-03-15 \n", + "62 DASH Wilmington Counterclockwise [710] 2023-03-15 \n", + "63 DASH Wilshire Center/Koreatown Clockwise [571] 2023-03-15 \n", + "64 DASH Wilshire Center/Koreatown Counterclockwise [572] 2023-03-15 \n", + "\n", + " \n", + " max \n", + "0 2025-05-14 \n", + "1 2025-05-14 \n", + "2 2025-05-14 \n", + "3 2025-05-14 \n", + "4 2025-05-14 \n", + ".. ... \n", + "60 2025-05-14 \n", + "61 2025-05-14 \n", + "62 2025-05-14 \n", + "63 2025-05-14 \n", + "64 2025-05-14 \n", + "\n", + "[65 rows x 4 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0142__CE142[870]2023-03-152025-05-14
1409__CE409[29]2023-03-152025-05-14
2419__CE419[867]2023-03-152025-05-14
3422__CE422[30]2023-03-152025-05-14
4423__CE423[31]2023-03-152025-05-14
...............
60Watts Counterclockwise__DASH Watts Countercloc...[714]2023-03-152025-05-14
61Wilmington Clockwise__DASH Wilmington Clockwise[708]2023-03-152025-05-14
62Wilmington Counterclockwise__DASH Wilmington C...[710]2023-03-152025-05-14
63Wilshire Center/Koreatown Clockwise__DASH Wils...[571]2023-03-152025-05-14
64Wilshire Center/Koreatown Counterclockwise__DA...[572]2023-03-152025-05-14
\n", + "

65 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \\\n", + " min \n", + "0 142__CE142 [870] 2023-03-15 \n", + "1 409__CE409 [29] 2023-03-15 \n", + "2 419__CE419 [867] 2023-03-15 \n", + "3 422__CE422 [30] 2023-03-15 \n", + "4 423__CE423 [31] 2023-03-15 \n", + ".. ... ... ... \n", + "60 Watts Counterclockwise__DASH Watts Countercloc... [714] 2023-03-15 \n", + "61 Wilmington Clockwise__DASH Wilmington Clockwise [708] 2023-03-15 \n", + "62 Wilmington Counterclockwise__DASH Wilmington C... [710] 2023-03-15 \n", + "63 Wilshire Center/Koreatown Clockwise__DASH Wils... [571] 2023-03-15 \n", + "64 Wilshire Center/Koreatown Counterclockwise__DA... [572] 2023-03-15 \n", + "\n", + " \n", + " max \n", + "0 2025-05-14 \n", + "1 2025-05-14 \n", + "2 2025-05-14 \n", + "3 2025-05-14 \n", + "4 2025-05-14 \n", + ".. ... \n", + "60 2025-05-14 \n", + "61 2025-05-14 \n", + "62 2025-05-14 \n", + "63 2025-05-14 \n", + "64 2025-05-14 \n", + "\n", + "[65 rows x 4 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Lawndale Beat GMV Schedule\n", + "status quo, with time_series_utils.pipe affecting it\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [(recent_combined_name, ), (route_id, ), (service_date, min), (service_date, max)]\n", + "Index: []" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [(recent_combined_name, ), (route_id, ), (service_date, min), (service_date, max)]\n", + "Index: []" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Redding Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0Anderson Commuter[6460]2023-03-152024-01-17
1Burney Express[161]2023-03-152023-12-13
2Churn Creek/Knightson/Airport[15]2024-01-172025-05-14
3Crosstown[6790]2024-01-172024-12-11
4Crosstown Express[6790]2023-03-152023-12-13
5Route 1[151]2023-03-152025-05-14
6Route 11[159]2023-03-152025-05-14
7Route 14[160]2023-03-152025-05-14
8Route 2 East[1887]2023-03-152024-11-13
9Route 2 West[1886]2023-03-152024-11-13
10Route 299X[161]2024-01-172025-05-14
11Route 3[153]2023-03-152025-05-14
12Route 4[154]2023-03-152025-05-14
13Route 5[155]2023-03-152024-11-13
14Route 6 North[1888]2023-03-152024-11-13
15Route 6 South[1889]2023-03-152024-11-13
16Route 7[157]2023-03-152025-05-14
17Route 9[6446]2023-03-152025-05-14
18Route 99X/Amtrak Thruway Route 3[24]2024-09-182025-05-14
19School Express[1885]2023-03-152023-05-17
20Shasta View/Shasta College[1885]2024-01-172025-05-14
21Shingletown Flex[44X]2024-12-112025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 Anderson Commuter [6460] 2023-03-15 2024-01-17\n", + "1 Burney Express [161] 2023-03-15 2023-12-13\n", + "2 Churn Creek/Knightson/Airport [15] 2024-01-17 2025-05-14\n", + "3 Crosstown [6790] 2024-01-17 2024-12-11\n", + "4 Crosstown Express [6790] 2023-03-15 2023-12-13\n", + "5 Route 1 [151] 2023-03-15 2025-05-14\n", + "6 Route 11 [159] 2023-03-15 2025-05-14\n", + "7 Route 14 [160] 2023-03-15 2025-05-14\n", + "8 Route 2 East [1887] 2023-03-15 2024-11-13\n", + "9 Route 2 West [1886] 2023-03-15 2024-11-13\n", + "10 Route 299X [161] 2024-01-17 2025-05-14\n", + "11 Route 3 [153] 2023-03-15 2025-05-14\n", + "12 Route 4 [154] 2023-03-15 2025-05-14\n", + "13 Route 5 [155] 2023-03-15 2024-11-13\n", + "14 Route 6 North [1888] 2023-03-15 2024-11-13\n", + "15 Route 6 South [1889] 2023-03-15 2024-11-13\n", + "16 Route 7 [157] 2023-03-15 2025-05-14\n", + "17 Route 9 [6446] 2023-03-15 2025-05-14\n", + "18 Route 99X/Amtrak Thruway Route 3 [24] 2024-09-18 2025-05-14\n", + "19 School Express [1885] 2023-03-15 2023-05-17\n", + "20 Shasta View/Shasta College [1885] 2024-01-17 2025-05-14\n", + "21 Shingletown Flex [44X] 2024-12-11 2025-05-14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
011__Route 11[159]2023-03-152025-05-14
112X__Anderson Commuter[6460]2024-01-172024-01-17
214__Route 14[160]2023-03-152025-05-14
315__Churn Creek/Knightson/Airport[15]2024-01-172025-05-14
417__Shasta View/Shasta College[1885]2024-01-172025-05-14
518__Crosstown[6790]2024-01-172024-12-11
61__Route 1[151]2023-03-152025-05-14
7299X__Route 299X[161]2024-01-172025-05-14
82E__Route 2 East[1887]2023-03-152024-11-13
92W__Route 2 West[1886]2023-03-152024-11-13
103__Route 3[153]2023-03-152025-05-14
1144X__Shingletown Flex[44X]2024-12-112025-05-14
124__Route 4[154]2023-03-152025-05-14
135__Route 5[155]2023-03-152024-11-13
146N__Route 6 North[1888]2023-03-152024-11-13
156S__Route 6 South[1889]2023-03-152024-11-13
167__Route 7[157]2023-03-152025-05-14
1799X__Route 99X/Amtrak Thruway Route 3[24]2024-09-182025-05-14
189__Route 9[6446]2023-03-152025-05-14
19AC__Anderson Commuter[6460]2023-03-152023-12-13
20BE__Burney Express[161]2023-03-152023-12-13
21CTE__Crosstown Express[6790]2023-03-152023-12-13
22SE__School Express[1885]2023-03-152023-05-17
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 11__Route 11 [159] 2023-03-15 2025-05-14\n", + "1 12X__Anderson Commuter [6460] 2024-01-17 2024-01-17\n", + "2 14__Route 14 [160] 2023-03-15 2025-05-14\n", + "3 15__Churn Creek/Knightson/Airport [15] 2024-01-17 2025-05-14\n", + "4 17__Shasta View/Shasta College [1885] 2024-01-17 2025-05-14\n", + "5 18__Crosstown [6790] 2024-01-17 2024-12-11\n", + "6 1__Route 1 [151] 2023-03-15 2025-05-14\n", + "7 299X__Route 299X [161] 2024-01-17 2025-05-14\n", + "8 2E__Route 2 East [1887] 2023-03-15 2024-11-13\n", + "9 2W__Route 2 West [1886] 2023-03-15 2024-11-13\n", + "10 3__Route 3 [153] 2023-03-15 2025-05-14\n", + "11 44X__Shingletown Flex [44X] 2024-12-11 2025-05-14\n", + "12 4__Route 4 [154] 2023-03-15 2025-05-14\n", + "13 5__Route 5 [155] 2023-03-15 2024-11-13\n", + "14 6N__Route 6 North [1888] 2023-03-15 2024-11-13\n", + "15 6S__Route 6 South [1889] 2023-03-15 2024-11-13\n", + "16 7__Route 7 [157] 2023-03-15 2025-05-14\n", + "17 99X__Route 99X/Amtrak Thruway Route 3 [24] 2024-09-18 2025-05-14\n", + "18 9__Route 9 [6446] 2023-03-15 2025-05-14\n", + "19 AC__Anderson Commuter [6460] 2023-03-15 2023-12-13\n", + "20 BE__Burney Express [161] 2023-03-15 2023-12-13\n", + "21 CTE__Crosstown Express [6790] 2023-03-15 2023-12-13\n", + "22 SE__School Express [1885] 2023-03-15 2023-05-17" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Redwood Coast Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
03 Route 3-Green 101 Northcrest[117]2023-08-152025-05-14
1300 PM DNHS Tripper[14242]2023-03-152025-05-14
2Route 1-Blue Wal-Mart / DNHS College[115]2023-08-152025-05-14
3Route 1-Blue Wal-Mart / El Dorado[115]2023-03-152023-07-12
4Route 199 Hiouchi / Gasquet[257]2023-03-152025-05-14
5Route 2-Red A / Inyo / DNHS/College / Wal-Mart[116]2023-08-152025-05-14
6Route 2-Red A / Inyo / Washington Loop[116]2023-03-152023-07-12
7Route 20 Smith River / Arcata[120]2023-03-152023-07-12
8Route 20 Smith River / Eureka[120]2023-08-152025-05-14
9Route 3-Green 101 Northcrest[117]2023-03-152023-07-12
10Route 300 - 300 DNHS AM Tripper[32532]2023-03-152023-08-15
11Route 4 - Orange Bertsch / Howland Hill Rd[118]2023-03-152025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \\\n", + " min \n", + "0 3 Route 3-Green 101 Northcrest [117] 2023-08-15 \n", + "1 300 PM DNHS Tripper [14242] 2023-03-15 \n", + "2 Route 1-Blue Wal-Mart / DNHS College [115] 2023-08-15 \n", + "3 Route 1-Blue Wal-Mart / El Dorado [115] 2023-03-15 \n", + "4 Route 199 Hiouchi / Gasquet [257] 2023-03-15 \n", + "5 Route 2-Red A / Inyo / DNHS/College / Wal-Mart [116] 2023-08-15 \n", + "6 Route 2-Red A / Inyo / Washington Loop [116] 2023-03-15 \n", + "7 Route 20 Smith River / Arcata [120] 2023-03-15 \n", + "8 Route 20 Smith River / Eureka [120] 2023-08-15 \n", + "9 Route 3-Green 101 Northcrest [117] 2023-03-15 \n", + "10 Route 300 - 300 DNHS AM Tripper [32532] 2023-03-15 \n", + "11 Route 4 - Orange Bertsch / Howland Hill Rd [118] 2023-03-15 \n", + "\n", + " \n", + " max \n", + "0 2025-05-14 \n", + "1 2025-05-14 \n", + "2 2025-05-14 \n", + "3 2023-07-12 \n", + "4 2025-05-14 \n", + "5 2025-05-14 \n", + "6 2023-07-12 \n", + "7 2023-07-12 \n", + "8 2025-05-14 \n", + "9 2023-07-12 \n", + "10 2023-08-15 \n", + "11 2025-05-14 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0199__Route 199 Hiouchi / Gasquet[257]2023-03-152025-05-14
11__Route 1-Blue Wal-Mart / DNHS College[115]2023-03-152025-05-14
220__Route 20 Smith River / Eureka[120]2023-03-152025-05-14
32__Route 2-Red A / Inyo / DNHS/College / Wal-Mart[116]2023-03-152025-05-14
4300 AM__Route 300 - 300 DNHS AM Tripper[32532]2023-03-152023-08-15
5300 PM__300 PM DNHS Tripper[14242]2023-03-152025-05-14
63__3 Route 3-Green 101 Northcrest[117]2023-03-152025-05-14
74__Route 4 - Orange Bertsch / Howland Hill Rd[118]2023-03-152025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \\\n", + " min \n", + "0 199__Route 199 Hiouchi / Gasquet [257] 2023-03-15 \n", + "1 1__Route 1-Blue Wal-Mart / DNHS College [115] 2023-03-15 \n", + "2 20__Route 20 Smith River / Eureka [120] 2023-03-15 \n", + "3 2__Route 2-Red A / Inyo / DNHS/College / Wal-Mart [116] 2023-03-15 \n", + "4 300 AM__Route 300 - 300 DNHS AM Tripper [32532] 2023-03-15 \n", + "5 300 PM__300 PM DNHS Tripper [14242] 2023-03-15 \n", + "6 3__3 Route 3-Green 101 Northcrest [117] 2023-03-15 \n", + "7 4__Route 4 - Orange Bertsch / Howland Hill Rd [118] 2023-03-15 \n", + "\n", + " \n", + " max \n", + "0 2025-05-14 \n", + "1 2025-05-14 \n", + "2 2025-05-14 \n", + "3 2025-05-14 \n", + "4 2023-08-15 \n", + "5 2025-05-14 \n", + "6 2025-05-14 \n", + "7 2025-05-14 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Santa Maria Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
012X Broadway/Orcutt Express[94db1732-e429-4508-b130-a7f3f9912f91, 12X]2023-03-152025-05-14
113X Transit Center/PVHS/N. Broadway[5b894962-da2e-442f-b9ec-df43cd2f80d0, 13X]2023-07-122025-05-14
2Breeze Route 100 - Santa Maria Transit Center/...[59f7afab-55b6-477a-b186-7b9444437515]2023-03-152023-09-13
3Breeze Route 200 - Santa Maria Transit Center/...[7b560260-9fa6-4cbe-8d1c-b3438646f072]2023-03-152023-09-13
4Mall Shuttle[Mall]2024-09-182024-12-11
5R11. Transit Center to Gov't Center via S. Bro...[11]2024-07-172025-05-14
6Route 20 - Santa Maria Transit Center/Los Alam...[7b560260-9fa6-4cbe-8d1c-b3438646f072, 20]2023-10-092025-05-14
7Route 30 - Santa Maria Transit Center/Vandenbe...[59f7afab-55b6-477a-b186-7b9444437515, 30]2023-10-092025-05-14
8Rt 1. Transit Ctr to Preisker Park Via N. Broa...[1B, 1, 63573d24-db1d-41e6-a47f-bd5f71657a90]2023-03-152025-05-14
9Rt 11. Transit Center to Gov't Center via S. B...[8a7c42f9-51e4-4848-bf88-30c210f149ad, 11]2023-03-152025-05-14
10Rt 2. Transit Center to PVH School via Western...[2, ca28f318-b7db-48a2-b2d2-57a59676587d]2023-03-152025-05-14
11Rt 3. Transit Center to Marian Hospital to PVH...[3, a9ea6924-c92b-4eaa-952e-0ca3f8acefa8]2023-03-152025-05-14
12Rt 4. Transit Center to SMH school to VTC via ...[4f228c92-63fd-41ba-a659-1cb32865c4bf, 4]2023-03-152025-05-14
13Rt 5. Transit Center to Gov't Cntr to Evergree...[b3848f93-d26b-48a9-b6a6-5de22a4eab47, 5]2023-03-152025-05-14
14Rt 6. Oak Knolls to Old Orcutt-East to West-Ou...[686ba0ef-c6e8-48bb-9085-551fc485d196, 6]2023-03-152025-05-14
15Rt 7. A. H. College, Crossroads Shopping Cente...[7, 022a7eb0-6ac6-449d-af39-00fd4f55b39f]2023-03-152025-05-14
16Rt 8. Tanglewood to Crossroads Shopping Center...[8, da7c0a2a-eec6-40ce-99d7-5f1f24a85800]2023-03-152025-05-14
17Rt 9. Transit Center to PVH via Alvin Ave.[e3c2cf68-8f7e-4492-9646-e9a43cf2cf30, 9]2023-03-152025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name \\\n", + " \n", + "0 12X Broadway/Orcutt Express \n", + "1 13X Transit Center/PVHS/N. Broadway \n", + "2 Breeze Route 100 - Santa Maria Transit Center/... \n", + "3 Breeze Route 200 - Santa Maria Transit Center/... \n", + "4 Mall Shuttle \n", + "5 R11. Transit Center to Gov't Center via S. Bro... \n", + "6 Route 20 - Santa Maria Transit Center/Los Alam... \n", + "7 Route 30 - Santa Maria Transit Center/Vandenbe... \n", + "8 Rt 1. Transit Ctr to Preisker Park Via N. Broa... \n", + "9 Rt 11. Transit Center to Gov't Center via S. B... \n", + "10 Rt 2. Transit Center to PVH School via Western... \n", + "11 Rt 3. Transit Center to Marian Hospital to PVH... \n", + "12 Rt 4. Transit Center to SMH school to VTC via ... \n", + "13 Rt 5. Transit Center to Gov't Cntr to Evergree... \n", + "14 Rt 6. Oak Knolls to Old Orcutt-East to West-Ou... \n", + "15 Rt 7. A. H. College, Crossroads Shopping Cente... \n", + "16 Rt 8. Tanglewood to Crossroads Shopping Center... \n", + "17 Rt 9. Transit Center to PVH via Alvin Ave. \n", + "\n", + " route_id service_date \n", + " min max \n", + "0 [94db1732-e429-4508-b130-a7f3f9912f91, 12X] 2023-03-15 2025-05-14 \n", + "1 [5b894962-da2e-442f-b9ec-df43cd2f80d0, 13X] 2023-07-12 2025-05-14 \n", + "2 [59f7afab-55b6-477a-b186-7b9444437515] 2023-03-15 2023-09-13 \n", + "3 [7b560260-9fa6-4cbe-8d1c-b3438646f072] 2023-03-15 2023-09-13 \n", + "4 [Mall] 2024-09-18 2024-12-11 \n", + "5 [11] 2024-07-17 2025-05-14 \n", + "6 [7b560260-9fa6-4cbe-8d1c-b3438646f072, 20] 2023-10-09 2025-05-14 \n", + "7 [59f7afab-55b6-477a-b186-7b9444437515, 30] 2023-10-09 2025-05-14 \n", + "8 [1B, 1, 63573d24-db1d-41e6-a47f-bd5f71657a90] 2023-03-15 2025-05-14 \n", + "9 [8a7c42f9-51e4-4848-bf88-30c210f149ad, 11] 2023-03-15 2025-05-14 \n", + "10 [2, ca28f318-b7db-48a2-b2d2-57a59676587d] 2023-03-15 2025-05-14 \n", + "11 [3, a9ea6924-c92b-4eaa-952e-0ca3f8acefa8] 2023-03-15 2025-05-14 \n", + "12 [4f228c92-63fd-41ba-a659-1cb32865c4bf, 4] 2023-03-15 2025-05-14 \n", + "13 [b3848f93-d26b-48a9-b6a6-5de22a4eab47, 5] 2023-03-15 2025-05-14 \n", + "14 [686ba0ef-c6e8-48bb-9085-551fc485d196, 6] 2023-03-15 2025-05-14 \n", + "15 [7, 022a7eb0-6ac6-449d-af39-00fd4f55b39f] 2023-03-15 2025-05-14 \n", + "16 [8, da7c0a2a-eec6-40ce-99d7-5f1f24a85800] 2023-03-15 2025-05-14 \n", + "17 [e3c2cf68-8f7e-4492-9646-e9a43cf2cf30, 9] 2023-03-15 2025-05-14 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
011B__R11. Transit Center to Gov't Center via S...[11]2024-04-172025-05-14
111__Rt 11. Transit Center to Gov't Center via ...[8a7c42f9-51e4-4848-bf88-30c210f149ad]2023-03-152025-05-14
212X__12X Broadway/Orcutt Express[94db1732-e429-4508-b130-a7f3f9912f91, 12X]2023-03-152025-05-14
313X__13X Transit Center/PVHS/N. Broadway[5b894962-da2e-442f-b9ec-df43cd2f80d0, 13X]2023-07-122025-05-14
41B__Rt 1. Transit Ctr to Preisker Park Via N. ...[1B]2024-07-172025-05-14
51__Rt 1. Transit Ctr to Preisker Park Via N. B...[1, 63573d24-db1d-41e6-a47f-bd5f71657a90]2023-03-152025-05-14
620__Route 20 - Santa Maria Transit Center/Los ...[7b560260-9fa6-4cbe-8d1c-b3438646f072, 20]2023-04-102025-05-14
72__Rt 2. Transit Center to PVH School via West...[2, ca28f318-b7db-48a2-b2d2-57a59676587d]2023-03-152025-05-14
830__Route 30 - Santa Maria Transit Center/Vand...[59f7afab-55b6-477a-b186-7b9444437515, 30]2023-04-102025-05-14
93__Rt 3. Transit Center to Marian Hospital to ...[3, a9ea6924-c92b-4eaa-952e-0ca3f8acefa8]2023-03-152025-05-14
104__Rt 4. Transit Center to SMH school to VTC v...[4f228c92-63fd-41ba-a659-1cb32865c4bf, 4]2023-03-152025-05-14
115__Rt 5. Transit Center to Gov't Cntr to Everg...[b3848f93-d26b-48a9-b6a6-5de22a4eab47, 5]2023-03-152025-05-14
126__Rt 6. Oak Knolls to Old Orcutt-East to West...[686ba0ef-c6e8-48bb-9085-551fc485d196, 6]2023-03-152025-05-14
137__Rt 7. A. H. College, Crossroads Shopping Ce...[7, 022a7eb0-6ac6-449d-af39-00fd4f55b39f]2023-03-152025-05-14
148__Rt 8. Tanglewood to Crossroads Shopping Cen...[8, da7c0a2a-eec6-40ce-99d7-5f1f24a85800]2023-03-152025-05-14
159__Rt 9. Transit Center to PVH via Alvin Ave.[e3c2cf68-8f7e-4492-9646-e9a43cf2cf30, 9]2023-03-152025-05-14
16B-100__Breeze Route 100 - Santa Maria Transit ...[59f7afab-55b6-477a-b186-7b9444437515]2023-03-152023-03-15
17B-200__Breeze Route 200 - Santa Maria Transit ...[7b560260-9fa6-4cbe-8d1c-b3438646f072]2023-03-152023-03-15
18Mall__Mall Shuttle[Mall]2024-09-182024-12-11
\n", + "
" + ], + "text/plain": [ + " recent_combined_name \\\n", + " \n", + "0 11B__R11. Transit Center to Gov't Center via S... \n", + "1 11__Rt 11. Transit Center to Gov't Center via ... \n", + "2 12X__12X Broadway/Orcutt Express \n", + "3 13X__13X Transit Center/PVHS/N. Broadway \n", + "4 1B__Rt 1. Transit Ctr to Preisker Park Via N. ... \n", + "5 1__Rt 1. Transit Ctr to Preisker Park Via N. B... \n", + "6 20__Route 20 - Santa Maria Transit Center/Los ... \n", + "7 2__Rt 2. Transit Center to PVH School via West... \n", + "8 30__Route 30 - Santa Maria Transit Center/Vand... \n", + "9 3__Rt 3. Transit Center to Marian Hospital to ... \n", + "10 4__Rt 4. Transit Center to SMH school to VTC v... \n", + "11 5__Rt 5. Transit Center to Gov't Cntr to Everg... \n", + "12 6__Rt 6. Oak Knolls to Old Orcutt-East to West... \n", + "13 7__Rt 7. A. H. College, Crossroads Shopping Ce... \n", + "14 8__Rt 8. Tanglewood to Crossroads Shopping Cen... \n", + "15 9__Rt 9. Transit Center to PVH via Alvin Ave. \n", + "16 B-100__Breeze Route 100 - Santa Maria Transit ... \n", + "17 B-200__Breeze Route 200 - Santa Maria Transit ... \n", + "18 Mall__Mall Shuttle \n", + "\n", + " route_id service_date \n", + " min max \n", + "0 [11] 2024-04-17 2025-05-14 \n", + "1 [8a7c42f9-51e4-4848-bf88-30c210f149ad] 2023-03-15 2025-05-14 \n", + "2 [94db1732-e429-4508-b130-a7f3f9912f91, 12X] 2023-03-15 2025-05-14 \n", + "3 [5b894962-da2e-442f-b9ec-df43cd2f80d0, 13X] 2023-07-12 2025-05-14 \n", + "4 [1B] 2024-07-17 2025-05-14 \n", + "5 [1, 63573d24-db1d-41e6-a47f-bd5f71657a90] 2023-03-15 2025-05-14 \n", + "6 [7b560260-9fa6-4cbe-8d1c-b3438646f072, 20] 2023-04-10 2025-05-14 \n", + "7 [2, ca28f318-b7db-48a2-b2d2-57a59676587d] 2023-03-15 2025-05-14 \n", + "8 [59f7afab-55b6-477a-b186-7b9444437515, 30] 2023-04-10 2025-05-14 \n", + "9 [3, a9ea6924-c92b-4eaa-952e-0ca3f8acefa8] 2023-03-15 2025-05-14 \n", + "10 [4f228c92-63fd-41ba-a659-1cb32865c4bf, 4] 2023-03-15 2025-05-14 \n", + "11 [b3848f93-d26b-48a9-b6a6-5de22a4eab47, 5] 2023-03-15 2025-05-14 \n", + "12 [686ba0ef-c6e8-48bb-9085-551fc485d196, 6] 2023-03-15 2025-05-14 \n", + "13 [7, 022a7eb0-6ac6-449d-af39-00fd4f55b39f] 2023-03-15 2025-05-14 \n", + "14 [8, da7c0a2a-eec6-40ce-99d7-5f1f24a85800] 2023-03-15 2025-05-14 \n", + "15 [e3c2cf68-8f7e-4492-9646-e9a43cf2cf30, 9] 2023-03-15 2025-05-14 \n", + "16 [59f7afab-55b6-477a-b186-7b9444437515] 2023-03-15 2023-03-15 \n", + "17 [7b560260-9fa6-4cbe-8d1c-b3438646f072] 2023-03-15 2023-03-15 \n", + "18 [Mall] 2024-09-18 2024-12-11 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: StanRTA Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0ACE Express[70]2023-11-152025-05-14
1Ace Express[70]2023-03-152023-10-13
2BART - Modesto[90]2023-11-152025-05-14
3BART- Turlock/Patterson[100]2023-11-152025-05-14
4Bart - Modesto[90]2023-03-152023-10-13
5Bart - Turlock/Patterson[100]2023-03-152023-10-13
6Route 10[10]2023-03-152025-05-14
7Route 15[15]2023-03-152023-10-15
8Route 21[21]2023-03-152025-05-14
9Route 22[22]2023-03-152025-05-14
10Route 23[23]2023-03-152025-05-14
11Route 24[24]2023-03-152025-05-14
12Route 25[25]2023-03-152025-05-14
13Route 26[26]2023-03-152025-05-14
14Route 29[29]2023-03-152025-05-14
15Route 29T[290]2023-11-152025-05-14
16Route 30[30]2023-03-152025-05-14
17Route 31[31]2023-03-152025-05-14
18Route 32[32]2023-03-152025-05-14
19Route 33[33]2023-03-152025-05-14
20Route 37[37]2023-03-152025-05-14
21Route 38[38]2023-03-152025-05-14
22Route 40[40]2023-03-152025-05-14
23Route 42[42]2023-03-152025-05-14
24Route 45[45]2023-03-152025-05-14
25Route 47[47]2023-03-152025-05-14
26Route 48[48]2023-03-152025-05-14
27Route 50[50]2023-03-152025-05-14
28Route 60[60]2023-03-152025-05-14
29Route 61[61]2023-03-152025-05-14
30Stockton Express[80]2023-03-152025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 ACE Express [70] 2023-11-15 2025-05-14\n", + "1 Ace Express [70] 2023-03-15 2023-10-13\n", + "2 BART - Modesto [90] 2023-11-15 2025-05-14\n", + "3 BART- Turlock/Patterson [100] 2023-11-15 2025-05-14\n", + "4 Bart - Modesto [90] 2023-03-15 2023-10-13\n", + "5 Bart - Turlock/Patterson [100] 2023-03-15 2023-10-13\n", + "6 Route 10 [10] 2023-03-15 2025-05-14\n", + "7 Route 15 [15] 2023-03-15 2023-10-15\n", + "8 Route 21 [21] 2023-03-15 2025-05-14\n", + "9 Route 22 [22] 2023-03-15 2025-05-14\n", + "10 Route 23 [23] 2023-03-15 2025-05-14\n", + "11 Route 24 [24] 2023-03-15 2025-05-14\n", + "12 Route 25 [25] 2023-03-15 2025-05-14\n", + "13 Route 26 [26] 2023-03-15 2025-05-14\n", + "14 Route 29 [29] 2023-03-15 2025-05-14\n", + "15 Route 29T [290] 2023-11-15 2025-05-14\n", + "16 Route 30 [30] 2023-03-15 2025-05-14\n", + "17 Route 31 [31] 2023-03-15 2025-05-14\n", + "18 Route 32 [32] 2023-03-15 2025-05-14\n", + "19 Route 33 [33] 2023-03-15 2025-05-14\n", + "20 Route 37 [37] 2023-03-15 2025-05-14\n", + "21 Route 38 [38] 2023-03-15 2025-05-14\n", + "22 Route 40 [40] 2023-03-15 2025-05-14\n", + "23 Route 42 [42] 2023-03-15 2025-05-14\n", + "24 Route 45 [45] 2023-03-15 2025-05-14\n", + "25 Route 47 [47] 2023-03-15 2025-05-14\n", + "26 Route 48 [48] 2023-03-15 2025-05-14\n", + "27 Route 50 [50] 2023-03-15 2025-05-14\n", + "28 Route 60 [60] 2023-03-15 2025-05-14\n", + "29 Route 61 [61] 2023-03-15 2025-05-14\n", + "30 Stockton Express [80] 2023-03-15 2025-05-14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0100__BART- Turlock/Patterson[100]2023-11-152025-05-14
1100__Bart - Turlock/Patterson[100]2023-03-152023-10-13
210__Route 10[10]2023-03-152025-05-14
315__Route 15[15]2023-03-152023-10-15
421__Route 21[21]2023-03-152025-05-14
522__Route 22[22]2023-03-152025-05-14
623__Route 23[23]2023-03-152025-05-14
724__Route 24[24]2023-03-152025-05-14
825__Route 25[25]2023-03-152025-05-14
926__Route 26[26]2023-03-152025-05-14
1029T__Route 29T[290]2023-11-152025-05-14
1129__Route 29[29]2023-03-152025-05-14
1230__Route 30[30]2023-03-152025-05-14
1331__Route 31[31]2023-03-152025-05-14
1432__Route 32[32]2023-03-152025-05-14
1533__Route 33[33]2023-03-152025-05-14
1637__Route 37[37]2023-03-152025-05-14
1738__Route 38[38]2023-03-152025-05-14
1840__Route 40[40]2023-03-152025-05-14
1942__Route 42[42]2023-03-152025-05-14
2045__Route 45[45]2023-03-152025-05-14
2147__Route 47[47]2023-03-152025-05-14
2248__Route 48[48]2023-03-152025-05-14
2350__Route 50[50]2023-03-152025-05-14
2460__Route 60[60]2023-03-152025-05-14
2561__Route 61[61]2023-03-152025-05-14
2670__ACE Express[70]2023-11-152025-05-14
2770__Ace Express[70]2023-03-152023-10-13
2880__Stockton Express[80]2023-03-152025-05-14
2990__BART - Modesto[90]2023-11-152025-05-14
3090__Bart - Modesto[90]2023-03-152023-10-13
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 100__BART- Turlock/Patterson [100] 2023-11-15 2025-05-14\n", + "1 100__Bart - Turlock/Patterson [100] 2023-03-15 2023-10-13\n", + "2 10__Route 10 [10] 2023-03-15 2025-05-14\n", + "3 15__Route 15 [15] 2023-03-15 2023-10-15\n", + "4 21__Route 21 [21] 2023-03-15 2025-05-14\n", + "5 22__Route 22 [22] 2023-03-15 2025-05-14\n", + "6 23__Route 23 [23] 2023-03-15 2025-05-14\n", + "7 24__Route 24 [24] 2023-03-15 2025-05-14\n", + "8 25__Route 25 [25] 2023-03-15 2025-05-14\n", + "9 26__Route 26 [26] 2023-03-15 2025-05-14\n", + "10 29T__Route 29T [290] 2023-11-15 2025-05-14\n", + "11 29__Route 29 [29] 2023-03-15 2025-05-14\n", + "12 30__Route 30 [30] 2023-03-15 2025-05-14\n", + "13 31__Route 31 [31] 2023-03-15 2025-05-14\n", + "14 32__Route 32 [32] 2023-03-15 2025-05-14\n", + "15 33__Route 33 [33] 2023-03-15 2025-05-14\n", + "16 37__Route 37 [37] 2023-03-15 2025-05-14\n", + "17 38__Route 38 [38] 2023-03-15 2025-05-14\n", + "18 40__Route 40 [40] 2023-03-15 2025-05-14\n", + "19 42__Route 42 [42] 2023-03-15 2025-05-14\n", + "20 45__Route 45 [45] 2023-03-15 2025-05-14\n", + "21 47__Route 47 [47] 2023-03-15 2025-05-14\n", + "22 48__Route 48 [48] 2023-03-15 2025-05-14\n", + "23 50__Route 50 [50] 2023-03-15 2025-05-14\n", + "24 60__Route 60 [60] 2023-03-15 2025-05-14\n", + "25 61__Route 61 [61] 2023-03-15 2025-05-14\n", + "26 70__ACE Express [70] 2023-11-15 2025-05-14\n", + "27 70__Ace Express [70] 2023-03-15 2023-10-13\n", + "28 80__Stockton Express [80] 2023-03-15 2025-05-14\n", + "29 90__BART - Modesto [90] 2023-11-15 2025-05-14\n", + "30 90__Bart - Modesto [90] 2023-03-15 2023-10-13" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: VCTC GMV Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
050 Hwy 101[4119]2024-09-182025-05-14
150-Hwy101[4119]2023-03-152024-06-12
255 Conejo Connection[4126]2024-09-182025-05-14
355X-Hwy101-Conejo Connection[4126]2023-09-132024-06-12
460 - Hwy 126[4127]2025-02-122025-05-14
...............
74Santa Paula School Tripper (AM)[4250]2024-09-182025-05-14
75Summer Beach Bus[5830]2023-07-122024-07-17
76Trolley[4109]2023-03-152025-05-14
77Trolley A[3547]2023-03-152025-05-14
78Trolley B[3548]2023-04-152024-10-20
\n", + "

79 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 50 Hwy 101 [4119] 2024-09-18 2025-05-14\n", + "1 50-Hwy101 [4119] 2023-03-15 2024-06-12\n", + "2 55 Conejo Connection [4126] 2024-09-18 2025-05-14\n", + "3 55X-Hwy101-Conejo Connection [4126] 2023-09-13 2024-06-12\n", + "4 60 - Hwy 126 [4127] 2025-02-12 2025-05-14\n", + ".. ... ... ... ...\n", + "74 Santa Paula School Tripper (AM) [4250] 2024-09-18 2025-05-14\n", + "75 Summer Beach Bus [5830] 2023-07-12 2024-07-17\n", + "76 Trolley [4109] 2023-03-15 2025-05-14\n", + "77 Trolley A [3547] 2023-03-15 2025-05-14\n", + "78 Trolley B [3548] 2023-04-15 2024-10-20\n", + "\n", + "[79 rows x 4 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
010__Route 10[4778]2023-03-152025-05-14
11__Route 1[3664]2023-03-152025-05-14
220__Route 20[4763]2023-03-152025-05-14
32__Route 2[3665]2023-03-152025-05-14
430__Route 30[4720]2023-03-152025-05-14
...............
85Santa Paula B__Santa Paula B Route (SP Hospital)[4252]2023-03-152025-05-14
86TA__Trolley A[3547]2023-03-152025-05-14
87TB__Trolley B[3548]2023-04-152024-10-20
88Tripper__Santa Paula School Tripper (AM)[4250]2024-09-182025-05-14
89Trolley__Trolley[4109]2023-03-152025-05-14
\n", + "

90 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \\\n", + " min \n", + "0 10__Route 10 [4778] 2023-03-15 \n", + "1 1__Route 1 [3664] 2023-03-15 \n", + "2 20__Route 20 [4763] 2023-03-15 \n", + "3 2__Route 2 [3665] 2023-03-15 \n", + "4 30__Route 30 [4720] 2023-03-15 \n", + ".. ... ... ... \n", + "85 Santa Paula B__Santa Paula B Route (SP Hospital) [4252] 2023-03-15 \n", + "86 TA__Trolley A [3547] 2023-03-15 \n", + "87 TB__Trolley B [3548] 2023-04-15 \n", + "88 Tripper__Santa Paula School Tripper (AM) [4250] 2024-09-18 \n", + "89 Trolley__Trolley [4109] 2023-03-15 \n", + "\n", + " \n", + " max \n", + "0 2025-05-14 \n", + "1 2025-05-14 \n", + "2 2025-05-14 \n", + "3 2025-05-14 \n", + "4 2025-05-14 \n", + ".. ... \n", + "85 2025-05-14 \n", + "86 2025-05-14 \n", + "87 2024-10-20 \n", + "88 2025-05-14 \n", + "89 2025-05-14 \n", + "\n", + "[90 rows x 4 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Victor Valley GMV Schedule\n", + "status quo, with time_series_utils.pipe affecting it\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [(recent_combined_name, ), (route_id, ), (service_date, min), (service_date, max)]\n", + "Index: []" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [(recent_combined_name, ), (route_id, ), (service_date, min), (service_date, max)]\n", + "Index: []" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Visalia Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0Route 1[2037]2023-03-152025-05-14
1Route 11X[2041]2023-03-152025-05-14
2Route 12[2043]2023-03-152025-05-14
3Route 15[2040]2023-03-152025-05-14
4Route 16[2144]2023-03-152025-05-14
5Route 17[5597]2023-03-152025-05-14
6Route 2[2035]2023-03-152025-05-14
7Route 4[2036]2023-03-152025-05-14
8Route 5[2032]2023-03-152025-05-14
9Route 6[2031]2023-03-152025-05-14
10Route 7[4769]2023-03-152025-05-14
11Route 8[4772]2023-03-152025-05-14
12Route 9[2042]2023-03-152025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 Route 1 [2037] 2023-03-15 2025-05-14\n", + "1 Route 11X [2041] 2023-03-15 2025-05-14\n", + "2 Route 12 [2043] 2023-03-15 2025-05-14\n", + "3 Route 15 [2040] 2023-03-15 2025-05-14\n", + "4 Route 16 [2144] 2023-03-15 2025-05-14\n", + "5 Route 17 [5597] 2023-03-15 2025-05-14\n", + "6 Route 2 [2035] 2023-03-15 2025-05-14\n", + "7 Route 4 [2036] 2023-03-15 2025-05-14\n", + "8 Route 5 [2032] 2023-03-15 2025-05-14\n", + "9 Route 6 [2031] 2023-03-15 2025-05-14\n", + "10 Route 7 [4769] 2023-03-15 2025-05-14\n", + "11 Route 8 [4772] 2023-03-15 2025-05-14\n", + "12 Route 9 [2042] 2023-03-15 2025-05-14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0Rt 11X__Route 11X[2041]2023-03-152025-05-14
1Rt 12__Route 12[2043]2023-03-152025-05-14
2Rt 15__Route 15[2040]2023-03-152025-05-14
3Rt 16__Route 16[2144]2023-03-152025-05-14
4Rt 17__Route 17[5597]2023-03-152025-05-14
5Rt 1__Route 1[2037]2023-03-152025-05-14
6Rt 2__Route 2[2035]2023-03-152025-05-14
7Rt 4__Route 4[2036]2023-03-152025-05-14
8Rt 5__Route 5[2032]2023-03-152025-05-14
9Rt 6__Route 6[2031]2023-03-152025-05-14
10Rt 7__Route 7[4769]2023-03-152025-05-14
11Rt 8__Route 8[4772]2023-03-152025-05-14
12Rt 9__Route 9[2042]2023-03-152025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id service_date \n", + " min max\n", + "0 Rt 11X__Route 11X [2041] 2023-03-15 2025-05-14\n", + "1 Rt 12__Route 12 [2043] 2023-03-15 2025-05-14\n", + "2 Rt 15__Route 15 [2040] 2023-03-15 2025-05-14\n", + "3 Rt 16__Route 16 [2144] 2023-03-15 2025-05-14\n", + "4 Rt 17__Route 17 [5597] 2023-03-15 2025-05-14\n", + "5 Rt 1__Route 1 [2037] 2023-03-15 2025-05-14\n", + "6 Rt 2__Route 2 [2035] 2023-03-15 2025-05-14\n", + "7 Rt 4__Route 4 [2036] 2023-03-15 2025-05-14\n", + "8 Rt 5__Route 5 [2032] 2023-03-15 2025-05-14\n", + "9 Rt 6__Route 6 [2031] 2023-03-15 2025-05-14\n", + "10 Rt 7__Route 7 [4769] 2023-03-15 2025-05-14\n", + "11 Rt 8__Route 8 [4772] 2023-03-15 2025-05-14\n", + "12 Rt 9__Route 9 [2042] 2023-03-15 2025-05-14" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operator: Yolobus Schedule\n", + "status quo, with time_series_utils.pipe affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0Causeway Connection[b6bc2958-333f-4d1e-8579-b75b2698b6b4, 9cf7725...2023-03-152025-05-14
1ROUTE 211[6ffe5400-193c-45b8-856a-e2316995d101, 6ebedf5...2023-03-152025-05-14
2ROUTE 212[e89fbda1-8475-4442-88ca-852d78d62e46, 3997325...2023-03-152025-05-14
3ROUTE 215[215]2024-07-172025-05-14
4ROUTE 215 EB[1ae28e33-41d5-41b3-a481-9f51490ec40e, 3bf6177...2023-03-152024-06-12
5ROUTE 215 WB[f92eae86-583c-4e18-8d51-bf7a435105cb, 3b5dff1...2023-03-152024-06-12
6ROUTE 230[230]2024-07-172025-05-14
7ROUTE 230 AM[ddf3b183-1d3a-4b20-89f1-0cca1119fc8c, 45abada...2023-03-152024-06-12
8ROUTE 230 PM[5a402a5e-1527-472a-bbe3-9ca39ef55293, 60bc879...2023-03-152024-06-12
9ROUTE 240[12a618d6-d441-4f89-be83-aa402b867ed8, 2b5c285...2023-03-152025-05-14
10ROUTE 37[9831f8e4-7142-4d62-8a86-2cf3ee52eae3, 178155d...2023-03-152025-05-14
11ROUTE 40[8bdcf7fa-0f8b-46c5-aa03-9c590f06ee93, 40, f88...2023-03-152025-05-14
12ROUTE 41[41, a76f7f34-9287-4ce9-bda1-7fdc66130e09, 332...2023-03-152025-05-14
13ROUTE 42A[08a6c620-4d4c-4be5-8dd9-9172952a13d8, fc37bce...2023-03-152025-05-14
14ROUTE 42B[c51c649f-0092-4961-919f-01e1afd0625f, 443c277...2023-03-152025-05-14
15ROUTE 43[43]2025-03-122025-05-14
16ROUTE 43 AM[f51d601d-4df7-4054-8c39-b44536d9c734, cc65411...2023-03-152025-02-12
17ROUTE 43 PM[ac8ab6d7-5799-4b80-bf7a-41b140cdc705, c1b5d90...2023-03-152025-02-12
18ROUTE 43-R[43R]2025-03-122025-05-14
19ROUTE 43-R AM[43RAM, af92ad39-d491-4c92-adff-2bf4a1de91fd, ...2023-03-152025-02-12
20ROUTE 43R PM[43RPM, f12acfcf-4456-43dd-9749-4a01514ba209, ...2023-03-152025-02-12
21ROUTE 44[44]2025-02-122025-05-14
22ROUTE 45[45]2025-02-122025-05-14
23ROUTE 45 AM[398bc159-24d1-4c5a-b0b3-501871c77335, 3e2bcbf...2023-03-152025-01-15
24ROUTE 45 PM[235c6366-5e82-4a56-8fb0-f574bd72c23c, 45PM, 2...2023-03-152025-01-15
\n", + "
" + ], + "text/plain": [ + " recent_combined_name route_id \\\n", + " \n", + "0 Causeway Connection [b6bc2958-333f-4d1e-8579-b75b2698b6b4, 9cf7725... \n", + "1 ROUTE 211 [6ffe5400-193c-45b8-856a-e2316995d101, 6ebedf5... \n", + "2 ROUTE 212 [e89fbda1-8475-4442-88ca-852d78d62e46, 3997325... \n", + "3 ROUTE 215 [215] \n", + "4 ROUTE 215 EB [1ae28e33-41d5-41b3-a481-9f51490ec40e, 3bf6177... \n", + "5 ROUTE 215 WB [f92eae86-583c-4e18-8d51-bf7a435105cb, 3b5dff1... \n", + "6 ROUTE 230 [230] \n", + "7 ROUTE 230 AM [ddf3b183-1d3a-4b20-89f1-0cca1119fc8c, 45abada... \n", + "8 ROUTE 230 PM [5a402a5e-1527-472a-bbe3-9ca39ef55293, 60bc879... \n", + "9 ROUTE 240 [12a618d6-d441-4f89-be83-aa402b867ed8, 2b5c285... \n", + "10 ROUTE 37 [9831f8e4-7142-4d62-8a86-2cf3ee52eae3, 178155d... \n", + "11 ROUTE 40 [8bdcf7fa-0f8b-46c5-aa03-9c590f06ee93, 40, f88... \n", + "12 ROUTE 41 [41, a76f7f34-9287-4ce9-bda1-7fdc66130e09, 332... \n", + "13 ROUTE 42A [08a6c620-4d4c-4be5-8dd9-9172952a13d8, fc37bce... \n", + "14 ROUTE 42B [c51c649f-0092-4961-919f-01e1afd0625f, 443c277... \n", + "15 ROUTE 43 [43] \n", + "16 ROUTE 43 AM [f51d601d-4df7-4054-8c39-b44536d9c734, cc65411... \n", + "17 ROUTE 43 PM [ac8ab6d7-5799-4b80-bf7a-41b140cdc705, c1b5d90... \n", + "18 ROUTE 43-R [43R] \n", + "19 ROUTE 43-R AM [43RAM, af92ad39-d491-4c92-adff-2bf4a1de91fd, ... \n", + "20 ROUTE 43R PM [43RPM, f12acfcf-4456-43dd-9749-4a01514ba209, ... \n", + "21 ROUTE 44 [44] \n", + "22 ROUTE 45 [45] \n", + "23 ROUTE 45 AM [398bc159-24d1-4c5a-b0b3-501871c77335, 3e2bcbf... \n", + "24 ROUTE 45 PM [235c6366-5e82-4a56-8fb0-f574bd72c23c, 45PM, 2... \n", + "\n", + " service_date \n", + " min max \n", + "0 2023-03-15 2025-05-14 \n", + "1 2023-03-15 2025-05-14 \n", + "2 2023-03-15 2025-05-14 \n", + "3 2024-07-17 2025-05-14 \n", + "4 2023-03-15 2024-06-12 \n", + "5 2023-03-15 2024-06-12 \n", + "6 2024-07-17 2025-05-14 \n", + "7 2023-03-15 2024-06-12 \n", + "8 2023-03-15 2024-06-12 \n", + "9 2023-03-15 2025-05-14 \n", + "10 2023-03-15 2025-05-14 \n", + "11 2023-03-15 2025-05-14 \n", + "12 2023-03-15 2025-05-14 \n", + "13 2023-03-15 2025-05-14 \n", + "14 2023-03-15 2025-05-14 \n", + "15 2025-03-12 2025-05-14 \n", + "16 2023-03-15 2025-02-12 \n", + "17 2023-03-15 2025-02-12 \n", + "18 2025-03-12 2025-05-14 \n", + "19 2023-03-15 2025-02-12 \n", + "20 2023-03-15 2025-02-12 \n", + "21 2025-02-12 2025-05-14 \n", + "22 2025-02-12 2025-05-14 \n", + "23 2023-03-15 2025-01-15 \n", + "24 2023-03-15 2025-01-15 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "status quo, no pipe, no extra parsing affecting it\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
recent_combined_nameroute_idservice_date
<lambda>minmax
0138__Causeway Connection[b6bc2958-333f-4d1e-8579-b75b2698b6b4, 9cf7725...2023-03-152025-05-14
1211__ROUTE 211[6ffe5400-193c-45b8-856a-e2316995d101, 6ebedf5...2023-03-152025-05-14
2212__ROUTE 212[e89fbda1-8475-4442-88ca-852d78d62e46, 3997325...2023-03-152025-05-14
3215EB__ROUTE 215 EB[1ae28e33-41d5-41b3-a481-9f51490ec40e, 3bf6177...2023-03-152024-06-12
4215WB__ROUTE 215 WB[f92eae86-583c-4e18-8d51-bf7a435105cb, 3b5dff1...2023-03-152024-06-12
5215__ROUTE 215[215]2024-07-172025-05-14
6230AM__ROUTE 230 AM[ddf3b183-1d3a-4b20-89f1-0cca1119fc8c, 45abada...2023-03-152024-06-12
7230PM__ROUTE 230 PM[5a402a5e-1527-472a-bbe3-9ca39ef55293, 60bc879...2023-03-152024-06-12
8230__ROUTE 230[230]2024-07-172025-05-14
9240__ROUTE 240[12a618d6-d441-4f89-be83-aa402b867ed8, 2b5c285...2023-03-152025-05-14
1037__ROUTE 37[9831f8e4-7142-4d62-8a86-2cf3ee52eae3, 178155d...2023-03-152025-05-14
1140__ROUTE 40[8bdcf7fa-0f8b-46c5-aa03-9c590f06ee93, 40, f88...2023-03-152025-05-14
1241__ROUTE 41[41, a76f7f34-9287-4ce9-bda1-7fdc66130e09, 332...2023-03-152025-05-14
1342A__ROUTE 42A[08a6c620-4d4c-4be5-8dd9-9172952a13d8, fc37bce...2023-03-152025-05-14
1442B__ROUTE 42B[c51c649f-0092-4961-919f-01e1afd0625f, 443c277...2023-03-152025-05-14
1543AM__ROUTE 43 AM[f51d601d-4df7-4054-8c39-b44536d9c734, cc65411...2023-03-152025-02-12
1643PM__ROUTE 43 PM[ac8ab6d7-5799-4b80-bf7a-41b140cdc705, c1b5d90...2023-03-152025-02-12
1743RAM__ROUTE 43-R AM[43RAM, af92ad39-d491-4c92-adff-2bf4a1de91fd, ...2023-03-152025-02-12
1843RPM__ROUTE 43R PM[43RPM, f12acfcf-4456-43dd-9749-4a01514ba209, ...2023-03-152025-02-12
1943R__ROUTE 43-R[43R]2025-03-122025-05-14
2043__ROUTE 43[43]2025-03-122025-05-14
2144__ROUTE 44[44]2025-02-122025-05-14
2245AM__ROUTE 45 AM[398bc159-24d1-4c5a-b0b3-501871c77335, 3e2bcbf...2023-03-152025-01-15
2345PM__ROUTE 45 PM[235c6366-5e82-4a56-8fb0-f574bd72c23c, 45PM, 2...2023-03-152025-01-15
2445__ROUTE 45[45]2025-02-122025-05-14
\n", + "
" + ], + "text/plain": [ + " recent_combined_name \\\n", + " \n", + "0 138__Causeway Connection \n", + "1 211__ROUTE 211 \n", + "2 212__ROUTE 212 \n", + "3 215EB__ROUTE 215 EB \n", + "4 215WB__ROUTE 215 WB \n", + "5 215__ROUTE 215 \n", + "6 230AM__ROUTE 230 AM \n", + "7 230PM__ROUTE 230 PM \n", + "8 230__ROUTE 230 \n", + "9 240__ROUTE 240 \n", + "10 37__ROUTE 37 \n", + "11 40__ROUTE 40 \n", + "12 41__ROUTE 41 \n", + "13 42A__ROUTE 42A \n", + "14 42B__ROUTE 42B \n", + "15 43AM__ROUTE 43 AM \n", + "16 43PM__ROUTE 43 PM \n", + "17 43RAM__ROUTE 43-R AM \n", + "18 43RPM__ROUTE 43R PM \n", + "19 43R__ROUTE 43-R \n", + "20 43__ROUTE 43 \n", + "21 44__ROUTE 44 \n", + "22 45AM__ROUTE 45 AM \n", + "23 45PM__ROUTE 45 PM \n", + "24 45__ROUTE 45 \n", + "\n", + " route_id service_date \n", + " min max \n", + "0 [b6bc2958-333f-4d1e-8579-b75b2698b6b4, 9cf7725... 2023-03-15 2025-05-14 \n", + "1 [6ffe5400-193c-45b8-856a-e2316995d101, 6ebedf5... 2023-03-15 2025-05-14 \n", + "2 [e89fbda1-8475-4442-88ca-852d78d62e46, 3997325... 2023-03-15 2025-05-14 \n", + "3 [1ae28e33-41d5-41b3-a481-9f51490ec40e, 3bf6177... 2023-03-15 2024-06-12 \n", + "4 [f92eae86-583c-4e18-8d51-bf7a435105cb, 3b5dff1... 2023-03-15 2024-06-12 \n", + "5 [215] 2024-07-17 2025-05-14 \n", + "6 [ddf3b183-1d3a-4b20-89f1-0cca1119fc8c, 45abada... 2023-03-15 2024-06-12 \n", + "7 [5a402a5e-1527-472a-bbe3-9ca39ef55293, 60bc879... 2023-03-15 2024-06-12 \n", + "8 [230] 2024-07-17 2025-05-14 \n", + "9 [12a618d6-d441-4f89-be83-aa402b867ed8, 2b5c285... 2023-03-15 2025-05-14 \n", + "10 [9831f8e4-7142-4d62-8a86-2cf3ee52eae3, 178155d... 2023-03-15 2025-05-14 \n", + "11 [8bdcf7fa-0f8b-46c5-aa03-9c590f06ee93, 40, f88... 2023-03-15 2025-05-14 \n", + "12 [41, a76f7f34-9287-4ce9-bda1-7fdc66130e09, 332... 2023-03-15 2025-05-14 \n", + "13 [08a6c620-4d4c-4be5-8dd9-9172952a13d8, fc37bce... 2023-03-15 2025-05-14 \n", + "14 [c51c649f-0092-4961-919f-01e1afd0625f, 443c277... 2023-03-15 2025-05-14 \n", + "15 [f51d601d-4df7-4054-8c39-b44536d9c734, cc65411... 2023-03-15 2025-02-12 \n", + "16 [ac8ab6d7-5799-4b80-bf7a-41b140cdc705, c1b5d90... 2023-03-15 2025-02-12 \n", + "17 [43RAM, af92ad39-d491-4c92-adff-2bf4a1de91fd, ... 2023-03-15 2025-02-12 \n", + "18 [43RPM, f12acfcf-4456-43dd-9749-4a01514ba209, ... 2023-03-15 2025-02-12 \n", + "19 [43R] 2025-03-12 2025-05-14 \n", + "20 [43] 2025-03-12 2025-05-14 \n", + "21 [44] 2025-02-12 2025-05-14 \n", + "22 [398bc159-24d1-4c5a-b0b3-501871c77335, 3e2bcbf... 2023-03-15 2025-01-15 \n", + "23 [235c6366-5e82-4a56-8fb0-f574bd72c23c, 45PM, 2... 2023-03-15 2025-01-15 \n", + "24 [45] 2025-02-12 2025-05-14 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for operator in time_series_utils.operators_only_route_long_name:\n", + " print(f\"Operator: {operator}\")\n", + " \n", + " display_subset(df[df.name==operator])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d0c3b83a-d8da-4b75-ada3-39d8bf06bda1", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/gtfs_digest/27_vp_chart.ipynb b/gtfs_digest/27_vp_chart.ipynb new file mode 100644 index 0000000000..f2757d5e46 --- /dev/null +++ b/gtfs_digest/27_vp_chart.ipynb @@ -0,0 +1,709 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "fe58e765-0891-4b70-a2ed-bb3a0d2b5d1d", + "metadata": {}, + "source": [ + "## Charts Exploratory" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "e1861f46-194e-4a36-ba75-98ca8d4aee20", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import altair as alt\n", + "import calitp_data_analysis.magics\n", + "import geopandas as gpd\n", + "import google.auth\n", + "import pandas as pd\n", + "from IPython.display import HTML, Image, Markdown, display, display_html\n", + "from omegaconf import OmegaConf\n", + "from update_vars import GTFS_DATA_DICT, RT_SCHED_GCS, SCHED_GCS, SEGMENT_GCS\n", + "from shared_utils import portfolio_utils, rt_dates, publish_utils\n", + "import merge_data\n", + "\n", + "readable_dict = OmegaConf.load(\"readable2.yml\")\n", + "credentials, project = google.auth.default()\n", + "\n", + "import _report_operator_visuals\n", + "import _report_route_dir_visuals\n", + "import _scheduled_service_hour_visuals" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b8bbe0c9-2cb1-4fd5-b7cb-74b05ae81267", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "pd.options.display.max_columns = 100\n", + "pd.options.display.float_format = \"{:.2f}\".format\n", + "pd.set_option(\"display.max_rows\", None)\n", + "pd.set_option(\"display.max_colwidth\", None)\n", + "\n", + "\n", + "def formatted(number):\n", + " return \"{:,}\".format(number)" + ] + }, + { + "cell_type": "markdown", + "id": "a3acb7e0-f8a1-4194-a1fa-380c7dfad8b8", + "metadata": {}, + "source": [ + "## why are there so few portfolio_names?" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "fce07f5e-e404-4e35-98fe-4e1458ef4cee", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "OPERATOR_PROFILE_REPORT = GTFS_DATA_DICT.digest_tables.operator_profiles_report" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a3a94f67-6fc8-4548-9f9a-30dc8cdc88cc", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "operator_df = pd.read_parquet(\n", + " f\"{RT_SCHED_GCS}{OPERATOR_PROFILE_REPORT}.parquet\",\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "cfbc0884-e4fc-4a82-853e-7996868c7f56", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['portfolio_organization_name', 'service_date', 'caltrans_district',\n", + " 'operator_n_routes', 'operator_n_trips', 'operator_n_shapes',\n", + " 'operator_n_stops', 'operator_n_arrivals',\n", + " 'operator_route_length_miles', 'n_downtown_local_routes',\n", + " 'n_local_routes', 'n_coverage_routes', 'n_rapid_routes',\n", + " 'n_express_routes', 'n_rail_routes', 'n_ferry_routes',\n", + " 'vp_per_min_agency', 'spatial_accuracy_agency', 'n_feeds',\n", + " 'operator_feeds', 'counties_served', 'service_area_pop',\n", + " 'service_area_sq_miles', 'hq_city', 'reporter_type',\n", + " 'primary_uza_name'],\n", + " dtype='object')" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "operator_df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "ea1dc1a8-1387-4a32-8573-4e3e6971d45a", + "metadata": { + "tags": [] + }, + "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", + "
portfolio_organization_name
caltrans_district
01 - Eureka2
02 - Redding1
03 - Marysville / Sacramento8
04 - Bay Area / Oakland22
05 - San Luis Obispo / Santa Barbara7
06 - Fresno / Bakersfield7
07 - Los Angeles / Ventura41
08 - San Bernardino / Riverside6
10 - Stockton8
11 - San Diego3
12 - Santa Ana3
\n", + "
" + ], + "text/plain": [ + " portfolio_organization_name\n", + "caltrans_district \n", + "01 - Eureka 2\n", + "02 - Redding 1\n", + "03 - Marysville / Sacramento 8\n", + "04 - Bay Area / Oakland 22\n", + "05 - San Luis Obispo / Santa Barbara 7\n", + "06 - Fresno / Bakersfield 7\n", + "07 - Los Angeles / Ventura 41\n", + "08 - San Bernardino / Riverside 6\n", + "10 - Stockton 8\n", + "11 - San Diego 3\n", + "12 - Santa Ana 3" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "operator_df.groupby([\"caltrans_district\"]).agg({\"portfolio_organization_name\":\"nunique\"})" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fd498927-a3c7-4fb6-b1bf-dc64f17fc120", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Comment out and leave this cell right below pandas\n", + "# portfolio_name = \"Curry Public Transit\"\n", + "portfolio_name = \"Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8705f7dd-4a4d-4984-8d87-98d4d941e1ba", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "ROUTE_DIR_MONTH_FILE = GTFS_DATA_DICT.digest_tables.monthly_route_schedule_vp_report" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d02d7352-957e-4cf7-9287-9710b4b9d62f", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "route_dir_month_df = pd.read_parquet(\n", + " f\"{RT_SCHED_GCS}{ROUTE_DIR_MONTH_FILE}.parquet\",\n", + " filters=[[(\"Portfolio Organization Name\", \"==\", portfolio_name)]],\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "22bbdbb5-b964-40cd-b6a8-0cf03f306af8", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "OG_ROUTE_DIR_MONTH_FILE = GTFS_DATA_DICT.digest_tables.monthly_route_schedule_vp\n", + "og_month_route_dir_df = pd.read_parquet(\n", + " f\"{RT_SCHED_GCS}{OG_ROUTE_DIR_MONTH_FILE}.parquet\",\n", + " filters=[[(\"portfolio_organization_name\", \"==\", portfolio_name)]]\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0988c75d-80e2-4510-85fd-05e91c29a062", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "ROUTE_DIR_QTR_FILE = 'digest/quarterly_schedule_vp_metrics_report'\n", + "route_dir_qtr_df = pd.read_parquet(\n", + " f\"{RT_SCHED_GCS}{ROUTE_DIR_QTR_FILE}.parquet\",\n", + " filters=[[(\"Portfolio Organization Name\", \"==\", portfolio_name)]],\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "18c7e4ac-38ab-47f3-bf29-c9455664c8c5", + "metadata": {}, + "source": [ + "### Some of the names are Route 1 Route 1, Route 16 Route 16...See what's up.\n", + "* When we combine `route_short_name` and `route_long_name` sometimes the values are the same for both columns so we get repeated values." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cc415d44-722f-4b7c-9100-2452f3d2986e", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import yaml\n", + "with open(\"../_shared_utils/shared_utils/portfolio_organization_name.yml\", \"r\") as f:\n", + " PORTFOLIO_ORGANIZATIONS_DICT = yaml.safe_load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4b990386-dbc2-4c67-9e90-d7d549bcf802", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "CLEANED_ROUTE_NAMING = GTFS_DATA_DICT.schedule_tables.route_identification\n", + "\n", + "clean_route_names = pd.read_parquet(f\"{SCHED_GCS}{CLEANED_ROUTE_NAMING}.parquet\").pipe(\n", + " portfolio_utils.standardize_portfolio_organization_names,\n", + " PORTFOLIO_ORGANIZATIONS_DICT,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "51385a1f-4526-4896-b4ed-9dba828e5b01", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "clean_route_names.columns" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f0823c34-e23e-4706-8395-8485865d9f06", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "clean_route_names= clean_route_names.loc[clean_route_names.portfolio_organization_name == portfolio_name]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e98a03df-a4df-4e2a-90cb-96f1e5082a72", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "clean_route_names[[\"recent_combined_name\", \"route_long_name\",\"route_short_name\"]].drop_duplicates()" + ] + }, + { + "cell_type": "markdown", + "id": "c9f0e80a-0938-4761-bdb9-b648f64183c6", + "metadata": {}, + "source": [ + "### Lots of duplicate rows are popping up...Fix that" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3e1cdd50-21d1-4052-a864-25cc92207f0d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "one_test_route = route_dir_month_df.loc[(route_dir_month_df.Date == '2025-05-14T00:00:00.000000000') & (route_dir_month_df.Route =='89 80-89 Coastal Express')]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a21a5686-fa9e-46f7-b5f8-51716e9b024d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "len(one_test_route)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "abf29b32-d050-4ce0-b693-83b542e59de0", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "len(one_test_route.drop_duplicates())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "316204a0-4242-4726-a693-4edeb0c7c176", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "one_test_route.drop_duplicates()" + ] + }, + { + "cell_type": "markdown", + "id": "99770696-a03a-4870-93e7-6cae4bb0baaf", + "metadata": {}, + "source": [ + "## " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f24dc976-29ee-4fc1-9a1a-dea8e97ccdf2", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# display(_report_route_dir_visuals.route_filter(route_dir_qtr_df,route_dir_month_df))" + ] + }, + { + "cell_type": "markdown", + "id": "a66dc0cc-fc51-44f7-a8c0-fe6dbb2f7e5a", + "metadata": {}, + "source": [ + "## Seeing where the duplicates come from " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e2f16933-fab6-4cc0-b790-83fa5fe7e6fb", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "date_list = rt_dates.y2025_dates" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7fb02efe-94b3-456b-9cdf-f26ccef5a010", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "schedule_route_dir_df = merge_data.concatenate_schedule_by_route_direction(date_list)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bdc9b2c5-f624-450f-8360-65a94869c813", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# \n", + "schedule_route_dir_df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fb04df31-a1c4-4a3c-8dfa-1ff8ec375cf2", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "def preview_one_route_one_date(df:pd.DataFrame):\n", + " try:\n", + " df2 = df.loc[(df.Date == '2025-05-14T00:00:00.000000000') & (df.Route == \"87__80-89 Coastal Express\")]\n", + " except:\n", + " df2 = df.loc[(df.service_date == '2025-05-14T00:00:00.000000000') & (df.route_id == \"4148\")]\n", + " return df2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cdb02d9b-a3e1-4ebf-bd80-48d2ebbf2a42", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "preview_one_route_one_date(schedule_route_dir_df)" + ] + }, + { + "cell_type": "markdown", + "id": "c537cf80-6c46-4f0a-b634-ba673fbd538e", + "metadata": {}, + "source": [ + "### Lots of repeated values in speed" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "79599760-1aea-4309-8dcc-4fb315ecae02", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "speeds_df = merge_data.concatenate_rt_vs_schedule_by_route_direction(date_list)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "974f912f-c30b-47e7-9371-5eaced1e8dfa", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "speeds_df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e2c85827-68b8-49a3-bf53-9f5c37229cf6", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "preview_one_route_one_date(speeds_df).shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a765b202-68c4-465d-bdc6-3e8d20a74a70", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "len(preview_one_route_one_date(speeds_df).drop_duplicates())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d8fc38fa-c65a-459b-a4e4-7d28c0b095d5", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# crosswalk_df = merge_data.concatenate_crosswalk_organization(date_list)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "51830d06-905a-43a7-b6e5-6402f9b15b23", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "crosswalk_df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "87aeb8e4-acf6-45c2-b9d7-3b0d7c1cf182", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# crosswalk has no route info\n", + "# preview_one_route_one_date(crosswalk_df)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21d4d2e2-818a-44a9-a708-948f70a1bb7f", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Applied to df\n", + "# standardized_name = merge_data.merge_in_standardized_route_names()\n", + "# but can grab the df w/in the func" + ] + }, + { + "cell_type": "markdown", + "id": "b8d0fbac-6984-4aa1-8cae-2dc57fce01cd", + "metadata": {}, + "source": [ + "### More duplicates for rt vs sched" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c31c795f-f685-4757-8d7c-953394354fbf", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "df_rt_sched = merge_data.concatenate_rt_vs_schedule_by_route_direction(\n", + " date_list\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0c0dbdf2-9f5a-40a5-9a3f-c1fe96dc61c2", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "(preview_one_route_one_date(df_rt_sched))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "206b720b-106a-4a78-9428-837885531632", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "len((preview_one_route_one_date(df_rt_sched)).drop_duplicates())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/gtfs_digest/_ct_district_data_prep.py b/gtfs_digest/_ct_district_data_prep.py new file mode 100644 index 0000000000..60302fec95 --- /dev/null +++ b/gtfs_digest/_ct_district_data_prep.py @@ -0,0 +1,231 @@ +import _report_utils +import deploy_portfolio_yaml +from update_vars import GTFS_DATA_DICT, RT_SCHED_GCS +import geopandas as gpd +import pandas as pd +import _transit_routes_on_shn + +import google.auth +credentials, project = google.auth.default() +import gcsfs +fs = gcsfs.GCSFileSystem() + +operator_route_gdf_readable_columns = {"portfolio_organization_name": "Portfolio Organization Name"} + +transit_shn_map_columns = { + "portfolio_organization_name": "Portfolio Organization Name", + "recent_combined_name": "Route", + "shn_route": "State Highway Network Route", + "pct_route_on_hwy_across_districts": "Percentage of Transit Route on SHN Across All Districts", +} + +shn_map_readable_columns = {"shn_route": "State Highway Network Route",} + +gtfs_table_readable_columns = { + "portfolio_organization_name": "Portfolio Organization Name", + "operator_n_trips": "# Trips", + "operator_n_stops": "# Stops", + "operator_n_arrivals": "# Arrivals", + "operator_route_length_miles": "Operator Service Miles", + "operator_n_routes": "# Routes", + "operator_n_shapes": "# Shapes", + "operator_feeds": "Operator Feeds", +} + +def data_wrangling_operator_profile(district:str)->pd.DataFrame: + """ + Display only values in the column portfolio_organization_names + that are in the organization grain GTFS Digest. Rename columns. + """ + OPERATOR_PROFILE_REPORT = GTFS_DATA_DICT.digest_tables.operator_profiles_report + # OPERATOR_PROFILE = GTFS_DATA_DICT.digest_tables.operator_profiles + + #portfolio_organization_names_to_keep = ( + #deploy_portfolio_yaml.generate_operator_grain_yaml(OPERATOR_PROFILE) + #)[["organization_name"]].drop_duplicates() + + #operator_df = pd.read_parquet( + #f"{RT_SCHED_GCS}{OPERATOR_PROFILE_REPORT}.parquet", + #filters=[[("caltrans_district", "==", district)]], + #) + + operator_df = pd.read_parquet( + f"{RT_SCHED_GCS}{OPERATOR_PROFILE_REPORT}.parquet", + ) + + #operator_df2 = pd.merge( + #operator_df, + #portfolio_organization_names_to_keep, + #left_on=["portfolio_organization_name"], + #right_on=["organization_name"], + #how="inner",) + + operator_df2 = operator_df.loc[operator_df.caltrans_district == district] + + # operator_df2 = operator_df2.rename(columns = operator_profile_report_readable_columns) + + return operator_df2 + +def data_wrangling_operator_map(portfolio_organization_names:list)->gpd.GeoDataFrame: + + OPERATOR_ROUTE = GTFS_DATA_DICT.digest_tables.operator_routes_map + + operator_route_gdf = gpd.read_parquet( + f"{RT_SCHED_GCS}{OPERATOR_ROUTE}.parquet", + storage_options={"token": credentials.token}, +)[["portfolio_organization_name", "service_date", "recent_combined_name", "geometry"]] + + operator_route_gdf = operator_route_gdf.loc[ + operator_route_gdf.portfolio_organization_name.isin(portfolio_organization_names)] + + operator_route_gdf = ( + operator_route_gdf.sort_values( + ["service_date", "portfolio_organization_name", "recent_combined_name"], + ascending=[False, True, True], + ) + .drop_duplicates(subset=["portfolio_organization_name", "recent_combined_name"]) + .drop( + columns=["service_date", "recent_combined_name"] + # drop route because after the dissolve, all operator routes are combined + # so route would hold only the first row's value + ) + .dissolve(by="portfolio_organization_name").reset_index() +) + + operator_route_gdf["portfolio_organization_name"] = operator_route_gdf[ + "portfolio_organization_name" +].str.replace(" Schedule", "") + + operator_route_gdf = operator_route_gdf.rename(columns = operator_route_gdf_readable_columns) + return operator_route_gdf + +def final_transit_route_shs_outputs( + pct_route_intersection: int, + district: str, +): + """ + Take the dataframes from prep_open_data_portal and routes_shn_intersection. + Prepare them for display on the GTFS Caltrans District Digest. + + intersecting_gdf: geodataframe created by + open_data_df: dataframe created by + pct_route_intersection: cutoff of the % of the transit route intersecting with the SHN + district: the Caltrans district we are interested in. + """ + GCS_PATH = "gs://calitp-analytics-data/data-analyses/state_highway_network/" + open_data_df = pd.read_parquet( + f"{GCS_PATH}transit_route_shn_open_data_portal_50.parquet") + + intersecting_gdf = gpd.read_parquet( + f"{GCS_PATH}transit_route_intersect_shn_50_gtfs_digest.parquet", + storage_options={"token": credentials.token}) + + # Filter out for any pct_route_on_hwy that we deem too low & for the relevant district. + open_data_df = open_data_df.loc[ + (open_data_df.pct_route_on_hwy_across_districts > pct_route_intersection) + & (open_data_df.District.str.contains(district)) + ] + intersecting_gdf = intersecting_gdf.loc[ + intersecting_gdf.District.astype(str).str.contains(district) + ] + + # Join back to get the long gdf with the transit route geometries and the names of the + # state highways these routes intersect with. This gdf will be used to + # display a map. + map_gdf = pd.merge( + intersecting_gdf[ + ["portfolio_organization_name", "recent_combined_name", "geometry"] + ].drop_duplicates(), + open_data_df, + on=["portfolio_organization_name", "recent_combined_name"], + ) + + + # We want a text table to display. + # Have to rejoin and to find only the SHN routes that are in the district + # we are interested in. + text_table_df = pd.merge( + intersecting_gdf[ + [ + "portfolio_organization_name", + "recent_combined_name", + "shn_route", + "District", + ] + ], + open_data_df[ + [ + "portfolio_organization_name", + "recent_combined_name", + "pct_route_on_hwy_across_districts", + ] + ], + on=["portfolio_organization_name", "recent_combined_name"], + ) + + # Now we have to aggregate again so each route will only have one row with the + # district and SHN route info delinated by commas if there are multiple values. + text_table = _transit_routes_on_shn.group_route_district(text_table_df, "max").drop(columns = ["District"]) + + # Rename for clarity + text_table = text_table.rename( + columns={ + "shn_route": f"State Highway Network Routes in District {district}", + } + ) + + text_table = text_table.rename(columns = transit_shn_map_columns) + map_gdf = map_gdf.rename(columns = transit_shn_map_columns).drop(columns = ["on_shs"]) + + return map_gdf, text_table + +def create_gtfs_stats(df:pd.DataFrame)->pd.DataFrame: + shared_cols = ["portfolio_organization_name"] + exclude_cols = [ + "schedule_gtfs_dataset_key", + "caltrans_district", + "organization_source_record_id", + "service_date", + "primary_uza",] + + gtfs_service_cols = [c for c in df.columns if "operator_" in c] + + gtfs_table_df = df[shared_cols + gtfs_service_cols].reset_index(drop=True) + + gtfs_table_df = gtfs_table_df.rename(columns=gtfs_table_readable_columns) + + gtfs_table_df["Avg Arrivals per Stop"] = gtfs_table_df["# Arrivals"]/gtfs_table_df["# Stops"] + + # string_cols = gtfs_table_df.select_dtypes(include="object").columns.tolist() + + return gtfs_table_df +""" +Functions to load maps +""" +def load_ct_district(district:int)->gpd.GeoDataFrame: + """ + Load in Caltrans Shape. + """ + caltrans_url = "https://gis.data.ca.gov/datasets/0144574f750f4ccc88749004aca6eb0c_0.geojson?outSR=%7B%22latestWkid%22%3A3857%2C%22wkid%22%3A102100%7D" + ca_geojson = (gpd.read_file(caltrans_url) + .to_crs(epsg=3310)) + district_geojson = ca_geojson.loc[ca_geojson.DISTRICT == district] + return district_geojson + +def load_buffered_shn_map(buffer_amount:int, district:int) -> gpd.GeoDataFrame: + """ + Overlay the most recent transit routes with a buffered version + of the SHN + """ + GCS_FILE_PATH = "gs://calitp-analytics-data/data-analyses/state_highway_network/" + + # Read in buffered shn here or re buffer if we don't have it available. + HWY_FILE = f"{GCS_FILE_PATH}shn_buffered_{buffer_amount}_gtfs_digest.parquet" + shn_routes_gdf = gpd.read_parquet( + HWY_FILE, storage_options={"token": credentials.token} + ) + + # Clean + shn_routes_gdf = shn_routes_gdf.loc[shn_routes_gdf.District == district] + shn_routes_gdf = shn_routes_gdf.rename(columns = shn_map_readable_columns) + return shn_routes_gdf \ No newline at end of file diff --git a/gtfs_digest/_ct_district_utils.py b/gtfs_digest/_ct_district_visuals.py similarity index 90% rename from gtfs_digest/_ct_district_utils.py rename to gtfs_digest/_ct_district_visuals.py index e658d3523d..9002af68b1 100644 --- a/gtfs_digest/_ct_district_utils.py +++ b/gtfs_digest/_ct_district_visuals.py @@ -1,5 +1,6 @@ import geopandas as gpd import pandas as pd +import _transit_routes_on_shn """ Functions for building Caltrans district GTFS Digest report @@ -13,4 +14,5 @@ def ct_district(district:int)->gpd.GeoDataFrame: ca_geojson = (gpd.read_file(caltrans_url) .to_crs(epsg=3310)) district_geojson = ca_geojson.loc[ca_geojson.DISTRICT == district] - return district_geojson \ No newline at end of file + return district_geojson + diff --git a/gtfs_digest/_operator_report.ipynb b/gtfs_digest/_operator_report.ipynb index b25241ecd1..b00d64b396 100644 --- a/gtfs_digest/_operator_report.ipynb +++ b/gtfs_digest/_operator_report.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "89102e7d-7aa7-4897-ba5d-e09d0bd08fac", "metadata": {}, "outputs": [], @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "0197abcb-ff23-4c97-b079-2275fb4ad817", "metadata": {}, "outputs": [], @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "5aecb5b1-1fe0-4c8f-89cd-9fb3ab058a8e", "metadata": { "tags": [ @@ -65,7 +65,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "5d03eacf-096b-41e0-908b-7ade510b3d64", "metadata": { "tags": [ @@ -80,12 +80,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "fe6e8ffd-78ca-41fa-98f0-5cdd99b68a45", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Set drop down menu to be on the upper right for the charts\n", "display(\n", @@ -105,7 +125,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "62509f92-7787-4769-a443-5fbcf3f546af", "metadata": { "tags": [] @@ -145,6 +165,30 @@ ")" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "82ac35e9-3efb-4683-8911-0fb64bd7c691", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "done with spatial & avg sched\n", + "done with vp and speed\n", + "done with sched vp\n", + "done with text\n" + ] + } + ], + "source": [ + "try:\n", + " display(_report_route_dir_visuals.route_filter(route_dir_qtr_df,route_dir_month_df))\n", + "except:\n", + " display(Markdown(f\"\"\"{portfolio_name} only has schedule data.\"\"\"))" + ] + }, { "cell_type": "markdown", "id": "78e95141-c977-4a2d-ad1d-ffeb866f3640", diff --git a/gtfs_digest/_report_utils.py b/gtfs_digest/_report_utils.py index 0ff1e0608c..7959980d20 100644 --- a/gtfs_digest/_report_utils.py +++ b/gtfs_digest/_report_utils.py @@ -64,11 +64,11 @@ def district_stats( df2 = (df.groupby(group_cols, observed=True, group_keys=False) .agg({ - "name": "nunique", + "portfolio_organization_name": "nunique", **{c:"sum" for c in sum_me}, }) .reset_index() - .rename(columns = {"name": "n_operators"}) + .rename(columns = {"portfolio_organization_name": "n_operators"}) ) # These need to be calculated again separately @@ -100,10 +100,10 @@ def transpose_summary_stats( subset_df2 = subset_df.rename( columns = { **{c: f"{c.replace('operator_n_', '# ')}" for c in subset_df.columns}, - "n_operators": "# operators", - "arrivals_per_stop": "arrivals per stop", - "trips_per_operator": "trips per operator" - }).T.reset_index().rename(columns = {0: "value"}) + "n_operators": "# Operators", + "arrivals_per_stop": "Arrivals per Stop", + "trips_per_operator": "Trips per Operator" + }).T.reset_index().rename(columns = {0: "Value"}) return subset_df2 diff --git a/gtfs_digest/_route_dir_data_prep.py b/gtfs_digest/_route_dir_data_prep.py index fa2e731f5a..791fd83343 100644 --- a/gtfs_digest/_route_dir_data_prep.py +++ b/gtfs_digest/_route_dir_data_prep.py @@ -127,6 +127,7 @@ def data_wrangling_for_visualizing( ROUTE_DIR_QTR_EXPORT = GTFS_DATA_DICT.digest_tables.quarterly_route_schedule_vp_report # Report by month + # Groupby recent combined name + portfolio org name + service date for _report month_route_dir_df = pd.read_parquet( f"{RT_SCHED_GCS}{ROUTE_DIR_MONTH_FILE}.parquet" ) @@ -139,7 +140,7 @@ def data_wrangling_for_visualizing( f"{RT_SCHED_GCS}{ROUTE_DIR_MONTH_REPORT}.parquet" ) - # Report by quarter + # Take the group by around 130 and aggregate up to quarterly qtr_route_dir_df = pd.read_parquet( f"{RT_SCHED_GCS}{ROUTE_DIR_QTR_FILE}.parquet" ) diff --git a/gtfs_digest/_transit_routes_on_shn.py b/gtfs_digest/_transit_routes_on_shn.py new file mode 100644 index 0000000000..6167ad8b80 --- /dev/null +++ b/gtfs_digest/_transit_routes_on_shn.py @@ -0,0 +1,354 @@ +import geopandas as gpd +import numpy as np +import pandas as pd + +import google.auth +credentials, project = google.auth.default() +import gcsfs +fs = gcsfs.GCSFileSystem() + +from calitp_data_analysis import geography_utils, utils +# from segment_speed_utils import gtfs_schedule_wrangling, helpers +from shared_utils import ( + #catalog_utils, + #dask_utils, + #gtfs_utils_v2, + #portfolio_utils, + publish_utils, + #rt_dates, + #rt_utils, +) +from update_vars import GTFS_DATA_DICT, RT_SCHED_GCS, SCHED_GCS, SEGMENT_GCS + +GCS_FILE_PATH = "gs://calitp-analytics-data/data-analyses/state_highway_network/" + +""" +Functions +""" +def process_transit_routes() -> gpd.GeoDataFrame: + """ + Select the most recent transit route to + figure out how much of it intersects with + the state highway network. + """ + # Load in the route shapes. + OPERATOR_ROUTE = GTFS_DATA_DICT.digest_tables.operator_routes_map + + subset = [ + "service_date", + "geometry", + "portfolio_organization_name", + "recent_combined_name", + # "route_id", + ] + op_geography_df = gpd.read_parquet( + f"{RT_SCHED_GCS}{OPERATOR_ROUTE}.parquet", + storage_options={"token": credentials.token}, + )[subset] + + # Keep the row for each portfolio_organization_name/recent_combined_name + # that is the most recent. + most_recent_routes = publish_utils.filter_to_recent_date( + df=op_geography_df, + group_cols=[ + "portfolio_organization_name", + ], + ) + + # Calculate the length of route, ensuring that it is in feet. + most_recent_routes = most_recent_routes.assign( + route_length_feet=most_recent_routes.geometry.to_crs( + geography_utils.CA_NAD83Albers_ft + ).length + ) + + # Drop any duplicates. + # This will probably be taken out once the 1:m recent_combined_name + # to route_id issue is resolved. + most_recent_routes = most_recent_routes.drop_duplicates( + subset=["portfolio_organization_name", "recent_combined_name", "service_date"] + ) + return most_recent_routes + +def dissolve_shn(columns_to_dissolve: list, file_name: str) -> gpd.GeoDataFrame: + """ + Dissolve State Highway Network so there will only be one row for each + route name and route type + """ + # Read in the dataset and change the CRS to one to feet. + SHN_FILE = catalog_utils.get_catalog( + "shared_data_catalog" + ).state_highway_network.urlpath + + shn = gpd.read_parquet( + SHN_FILE, + storage_options={"token": credentials.token}, + ).to_crs(geography_utils.CA_NAD83Albers_ft) + + # Dissolve by route which represents the the route's name and drop the other columns + # because they are no longer relevant. + shn_dissolved = (shn.dissolve(by=columns_to_dissolve).reset_index())[ + columns_to_dissolve + ["geometry"] + ] + + # Rename because I don't want any confusion between SHN route and + # transit route. + shn_dissolved = shn_dissolved.rename(columns={"Route": "shn_route"}) + + # Find the length of each highway. + shn_dissolved = shn_dissolved.assign( + highway_feet=shn_dissolved.geometry.length, + shn_route=shn_dissolved.shn_route.astype(int).astype(str), + ) + + # Save this out so I don't have to dissolve it each time. + shn_dissolved.to_parquet( + f"gs://calitp-analytics-data/data-analyses/state_highway_network/shn_dissolved_by_{file_name}.parquet", + filesystem=fs, + ) + return shn_dissolved + +def buffer_shn(buffer_amount: int, file_name: str) -> gpd.GeoDataFrame: + """ + Add a buffer to the SHN before overlaying it with + transit routes. + """ + # Read in the dissolved SHN file + shn_df = gpd.read_parquet( + f"{GCS_FILE_PATH}shn_dissolved_by_{file_name}.parquet", + storage_options={"token": credentials.token}, + ) + + # Buffer the state highway. + shn_df_buffered = shn_df.assign( + geometry=shn_df.geometry.buffer(buffer_amount), + ) + + # Save it out so we won't have to buffer over again and + # can just read it in. + shn_df_buffered.to_parquet( + f"{GCS_FILE_PATH}shn_buffered_{buffer_amount}_ft_{file_name}.parquet", + filesystem=fs, + ) + + return shn_df_buffered + +def routes_shn_intersection(buffer_amount: int, file_name: str) -> gpd.GeoDataFrame: + """ + Overlay the most recent transit routes with a buffered version + of the SHN + """ + # GCS_FILE_PATH = "gs://calitp-analytics-data/data-analyses/state_highway_network/" + + # Read in buffered shn here or re buffer if we don't have it available. + HWY_FILE = f"{GCS_FILE_PATH}shn_buffered_{buffer_amount}_ft_{file_name}.parquet" + + if fs.exists(HWY_FILE): + shn_routes_gdf = gpd.read_parquet( + HWY_FILE, storage_options={"token": credentials.token} + ) + else: + shn_routes_gdf = buffer_shn(buffer_amount) + + # Process the most recent transit route geographies and ensure the + # CRS matches the SHN routes' GDF so the overlay doesn't go wonky. + transit_routes_gdf = process_transit_routes().to_crs(shn_routes_gdf.crs) + + # Overlay transit routes with the SHN geographies. + gdf = gpd.overlay( + transit_routes_gdf, shn_routes_gdf, how="intersection", keep_geom_type=True + ) + + # Calcuate the percent of the transit route that runs on a highway, round it up and + # multiply it by 100. Drop the geometry because we want the original transit route + # shapes. + gdf = gdf.assign( + pct_route_on_hwy=(gdf.geometry.length / gdf.route_length_feet).round(3) * 100, + ).drop( + columns=[ + "geometry", + ] + ) + + # Join back the dataframe above with the original transit route dataframes + # so we can have the original transit route geographies. + gdf2 = pd.merge( + transit_routes_gdf, + gdf, + on=[ + "service_date", + "portfolio_organization_name", + "recent_combined_name", + "route_length_feet", + ], + how="left", + ) + + # Clean up + gdf2.District = gdf2.District.fillna(0).astype(int) + return gdf2 + +def group_route_district(df: pd.DataFrame, pct_route_on_hwy_agg: str) -> pd.DataFrame: + + # Aggregate by adding all the districts and SHN to a single row, rather than + # multiple and sum up the total % of SHN a transit route intersects with + agg1 = ( + df.groupby( + [ + "portfolio_organization_name", + "recent_combined_name", + ], + as_index=False, + )[["shn_route", "District", "pct_route_on_hwy_across_districts"]] + .agg( + { + "shn_route": lambda x: ", ".join(set(x.astype(str))), + "District": lambda x: ", ".join(set(x.astype(str))), + "pct_route_on_hwy_across_districts": pct_route_on_hwy_agg, + } + ) + .reset_index(drop=True) + ) + + # Clean up + agg1.pct_route_on_hwy_across_districts = ( + agg1.pct_route_on_hwy_across_districts.astype(float).round(2) + ) + return agg1 + +def create_on_shs_column(df): + df["on_shs"] = np.where(df["pct_route_on_hwy_across_districts"] == 0, "N", "Y") + return df + +def prep_open_data_portal(gdf: gpd.GeoDataFrame) -> pd.DataFrame: + """ + Prepare the gdf to join with the existing transit_routes + dataframe that is published on the Open Data Portal + """ + # Rename column + gdf = gdf.rename(columns={"pct_route_on_hwy": "pct_route_on_hwy_across_districts"}) + # Group the dataframe so that one route only has one + # row instead of multiple rows after finding its + # intersection with any SHN routes. + agg1 = group_route_district(gdf, "sum") + + # Add yes/no column to signify if a transit route intersects + # with a SHN route + agg1 = create_on_shs_column(agg1) + + return agg1 + +def dissolve_buffered_for_map(buffer_amount: str) -> gpd.GeoDataFrame: + # GCS_FILE_PATH = "gs://calitp-analytics-data/data-analyses/state_highway_network/" + # Read in buffered shn here + HWY_FILE = ( + f"{GCS_FILE_PATH}shn_buffered_{buffer_amount}_ft_ct_district_route.parquet" + ) + gdf = gpd.read_parquet(HWY_FILE, storage_options={"token": credentials.token}) + + # Dissolve by district + gdf2 = gdf.dissolve("District").reset_index()[["geometry", "District", "shn_route"]] + + # Save + gdf2.to_parquet( + f"{GCS_FILE_PATH}shn_buffered_{buffer_amount}_gtfs_digest.parquet", + filesystem=fs, + ) + +def final_transit_route_shs_outputs( + intersecting_gdf: gpd.GeoDataFrame, + open_data_df: pd.DataFrame, + pct_route_intersection: int, + district: str, +): + """ + Take the dataframes from prep_open_data_portal and routes_shn_intersection. + Prepare them for display on the GTFS Caltrans District Digest. + + intersecting_gdf: geodataframe created by + open_data_df: dataframe created by + pct_route_intersection: cutoff of the % of the transit route intersecting with the SHN + district: the Caltrans district we are interested in. + """ + # Filter out for any pct_route_on_hwy that we deem too low & for the relevant district. + open_data_df = open_data_df.loc[ + (open_data_df.pct_route_on_hwy_across_districts > pct_route_intersection) + & (open_data_df.District.str.contains(district)) + ] + # intersecting_gdf.District = intersecting_gdf.District + intersecting_gdf = intersecting_gdf.loc[ + intersecting_gdf.District.astype(str).str.contains(district) + ] + + # Join back to get the original transit route geometries and the names of the + # state highways these routes intersect with. This gdf will be used to + # display a map. + map_gdf = pd.merge( + intersecting_gdf[ + ["portfolio_organization_name", "recent_combined_name", "geometry"] + ].drop_duplicates(), + open_data_df, + on=["portfolio_organization_name", "recent_combined_name"], + ) + + # Add column for color scale when mapping + # map_gdf = categorize_percentiles(map_gdf) + + # We want a text table to display. + # Have to rejoin and to find only the SHN routes that are in the district + # we are interested in. + text_table_df = pd.merge( + intersecting_gdf[ + [ + "portfolio_organization_name", + "recent_combined_name", + "shn_route", + "District", + ] + ], + open_data_df[ + [ + "portfolio_organization_name", + "recent_combined_name", + "pct_route_on_hwy_across_districts", + ] + ], + on=["portfolio_organization_name", "recent_combined_name"], + ) + + # Now we have to aggregate again so each route will only have one row with the + # district and SHN route info delinated by commas if there are multiple values. + text_table = group_route_district(text_table_df, "max") + + # Rename for clarity + text_table = text_table.rename( + columns={ + "shn_route": f"shn_routes_in_d_{district}", + } + ) + + return map_gdf, text_table + +if __name__ == "__main__": + SHN_HWY_BUFFER_FEET = 50 + + # Load recent transit routes + recent_transit_routes = process_transit_routes() + + # Intersect with SHN + intersection_gdf = routes_shn_intersection(SHN_HWY_BUFFER_FEET, "ct_district_route") + + # Dataframe for the Open Data Portal + open_data_portal_df = prep_open_data_portal(intersection_gdf) + + # Save everything out for now + intersection_gdf.to_parquet( + f"{GCS_FILE_PATH}transit_route_intersect_shn_{SHN_HWY_BUFFER_FEET}_gtfs_digest.parquet", + filesystem=fs, + ) + + open_data_portal_df.to_parquet( + f"{GCS_FILE_PATH}transit_route_shn_open_data_portal_{SHN_HWY_BUFFER_FEET}.parquet", + filesystem=fs, + ) + diff --git a/gtfs_digest/deploy_district_yaml.py b/gtfs_digest/deploy_district_yaml.py index 8d90c3b860..79c14fa103 100644 --- a/gtfs_digest/deploy_district_yaml.py +++ b/gtfs_digest/deploy_district_yaml.py @@ -35,7 +35,7 @@ def overwrite_yaml( elif name == "district": - OPERATOR_FILE = GTFS_DATA_DICT.digest_tables.operator_profiles + OPERATOR_FILE = GTFS_DATA_DICT.digest_tables.operator_profiles_report df = pd.read_parquet( f"{RT_SCHED_GCS}{OPERATOR_FILE}.parquet", @@ -44,10 +44,10 @@ def overwrite_yaml( # We have several values for Caltrans District as the names slightly # change (ex: D7 Los Angeles is now Los Angeles / Ventura). - df = df.assign( - caltrans_district = df.caltrans_district.map( - portfolio_utils.CALTRANS_DISTRICT_DICT) - ) + #df = df.assign( + # caltrans_district = df.caltrans_district.map( + # portfolio_utils.CALTRANS_DISTRICT_DICT) + # ) portfolio_utils.create_portfolio_yaml_chapters_no_sections( DISTRICT_SITE, diff --git a/gtfs_digest/district_report.ipynb b/gtfs_digest/district_report.ipynb index c2f0de3908..59e0c8b76d 100644 --- a/gtfs_digest/district_report.ipynb +++ b/gtfs_digest/district_report.ipynb @@ -12,7 +12,8 @@ "import warnings\n", "\n", "warnings.filterwarnings(\"ignore\")\n", - "import _ct_district_utils\n", + "import _ct_district_data_prep\n", + "# import _ct_district_visuals\n", "import _report_utils\n", "import calitp_data_analysis.magics\n", "import geopandas as gpd\n", @@ -53,7 +54,7 @@ "outputs": [], "source": [ "# Comment out and leave this cell right below pandas\n", - "# district = \"08 - San Bernardino / Riverside\"" + "# district = '03 - Marysville / Sacramento'" ] }, { @@ -95,189 +96,52 @@ { "cell_type": "code", "execution_count": null, - "id": "d3d0d0a2-4543-4b30-b2f5-2350a2401bec", + "id": "b77581d4-cb70-42e9-9f3b-101db248dc64", "metadata": {}, "outputs": [], "source": [ - "# Read in all datasets here with GTFS_DATA_DICT\n", - "# Reran merge_operator_data.py to test this\n", - "OPERATOR_FILE = GTFS_DATA_DICT.digest_tables.operator_profiles\n", - "OPERATOR_ROUTE = GTFS_DATA_DICT.digest_tables.operator_routes_map\n", + "# Load Datasets\n", + "operator_df = _ct_district_data_prep.data_wrangling_operator_profile(district)\n", "\n", - "operator_df = pd.read_parquet(\n", - " f\"{RT_SCHED_GCS}{OPERATOR_FILE}.parquet\",\n", - " filters=[[(\"caltrans_district\", \"==\", district)]],\n", + "operator_gdf = _ct_district_data_prep.data_wrangling_operator_map(\n", + " list(operator_df.portfolio_organization_name.unique())\n", ")\n", "\n", - "# using name instead of schedule_gtfs_dataset_key allows us to get\n", - "# the last ones for LA Metro without keeping extraneous rows for LA Metro when keys changed\n", - "operator_df = (\n", - " operator_df.sort_values([\"service_date\", \"name\"], ascending=[False, True])\n", - " .drop_duplicates(subset=[\"name\"])\n", - " .reset_index(drop=True)\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e733cb10-3185-4468-9ebe-1c2cb854cd21", - "metadata": {}, - "outputs": [], - "source": [ - "# De duplicate\n", - "# First find any organizations_names with more than 2 names per\n", - "orgs_agg = (\n", - " operator_df.groupby([\"caltrans_district\", \"organization_name\"])\n", - " .agg({\"name\": \"nunique\"})\n", - " .reset_index()\n", + "ct_district_gdf = _ct_district_data_prep.load_ct_district(district_int)\n", + "\n", + "transit_route_shs_gdf, transit_route_shs_table = (\n", + " _ct_district_data_prep.final_transit_route_shs_outputs(20, str(district_int))\n", ")\n", - "orgs_agg2 = orgs_agg.loc[orgs_agg.name > 1]\n", - "orgs_with_2_names = list(orgs_agg2.organization_name.unique())" + "district_gdf = _ct_district_data_prep.load_ct_district(district_int)" ] }, { "cell_type": "code", "execution_count": null, - "id": "f2197f14-0623-46b4-bdda-a6da1581a9d2", - "metadata": {}, - "outputs": [], - "source": [ - "# Delete out these organizations from the original df so we can manipulate them.\n", - "operator_df2 = operator_df.loc[\n", - " ~operator_df.organization_name.isin(orgs_with_2_names)\n", - "].reset_index(drop=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e7ee27ca-fafc-41a5-b15c-eead1c11785f", - "metadata": {}, - "outputs": [], - "source": [ - "# Filter for these organizations with more than 2 names in their own df.\n", - "orgs_with_2_names_df = operator_df.loc[\n", - " operator_df.organization_name.isin(orgs_with_2_names)\n", - "].reset_index(drop=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ad8f31e7-f7b0-4f8e-9ee8-6479ea1af654", - "metadata": {}, - "outputs": [], - "source": [ - "three_month_reference = operator_df2[\"service_date\"].max() - pd.DateOffset(months=3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9d2e2807-801a-48f5-9933-3adaad4ebfef", - "metadata": {}, - "outputs": [], - "source": [ - "orgs_with_2_names_df = orgs_with_2_names_df[\n", - " orgs_with_2_names_df[\"service_date\"] >= three_month_reference\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c93e5f3d-1b87-495d-a63e-2454d7089754", - "metadata": {}, - "outputs": [], - "source": [ - "# Filter out any rows in which `vp_per_min_agency` and `spatial_accuracy_agency` is equal than 0\n", - "# and still has 2+ names\n", - "orgs_agg = (\n", - " orgs_with_2_names_df.groupby([\"organization_name\"])\n", - " .agg({\"name\": \"nunique\"})\n", - " .reset_index()\n", - " .rename(columns={\"name\": \"n_names\"})\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a81b77e8-90dd-4626-9077-45cb87ea2d0f", - "metadata": {}, - "outputs": [], - "source": [ - "orgs_with_2_names_df = pd.merge(\n", - " orgs_with_2_names_df, orgs_agg, on=\"organization_name\", how=\"left\"\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4f0eccf0-3731-4f93-9d7d-c4cc54617bbb", - "metadata": {}, - "outputs": [], - "source": [ - "orgs_with_2_names_df2 = orgs_with_2_names_df[\n", - " (orgs_with_2_names_df.vp_per_min_agency > 0)\n", - " & (orgs_with_2_names_df.spatial_accuracy_agency > 0)\n", - " & (orgs_with_2_names_df.n_names > 1)\n", - "].reset_index(drop=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "15712b8e-f547-4668-8f77-c9912207ef7b", - "metadata": {}, - "outputs": [], - "source": [ - "# Keep rows that meet service_date\n", - "service_date = operator_df2.service_date.max()\n", - "orgs_with_2_names_df3 = orgs_with_2_names_df2.loc[\n", - " orgs_with_2_names_df2.service_date == service_date\n", - "]\n", - "final_names = list(orgs_with_2_names_df3.organization_name.unique())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "67b1e0cd-7ecf-43ca-80eb-b9139f7f49f8", - "metadata": {}, - "outputs": [], - "source": [ - "## Concat back\n", - "orgs_with_2_names_df = orgs_with_2_names_df.loc[\n", - " ~orgs_with_2_names_df.organization_name.isin(final_names)\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d591e85f-18f4-4613-8330-c1c6978c0507", - "metadata": {}, + "id": "6c6afad3-b014-4e6d-ab51-f7d4e73269cb", + "metadata": { + "tags": [] + }, "outputs": [], "source": [ - "orgs_with_2_names_df_final = pd.concat([orgs_with_2_names_df, orgs_with_2_names_df3])" + "shn_gdf = _ct_district_data_prep.load_buffered_shn_map(50, district_int)" ] }, { "cell_type": "code", "execution_count": null, - "id": "fcf1647b-892e-4323-8b69-e7bed38951b7", - "metadata": {}, + "id": "e034955e-a731-49fc-8d11-799262c1b3e7", + "metadata": { + "tags": [] + }, "outputs": [], "source": [ - "operator_df2 = pd.concat([operator_df2, orgs_with_2_names_df_final])" + "gtfs_table_df = _ct_district_data_prep.create_gtfs_stats(operator_df)" ] }, { "cell_type": "markdown", - "id": "41f0a970-4646-4147-a596-d41d15517127", + "id": "5cd9fd3e-7808-4e65-9013-01647c695ff6", "metadata": {}, "source": [ "# District {district}\n", @@ -294,7 +158,7 @@ "metadata": {}, "outputs": [], "source": [ - "district_summary = _report_utils.district_stats(operator_df2, \"caltrans_district\")" + "district_summary = _report_utils.district_stats(operator_df, \"caltrans_district\")" ] }, { @@ -339,173 +203,162 @@ }, { "cell_type": "markdown", - "id": "b10ecb81-491e-4f65-af8d-0032d6e11d4e", + "id": "efa64a50-2658-42dd-be62-85305f39abdd", "metadata": {}, "source": [ - "## GTFS Stats by Operator" + "## Routes within the District" ] }, { "cell_type": "code", "execution_count": null, - "id": "e1fff887-8120-42ad-9a98-3dc90dd2e838", + "id": "b8018c74-7d56-4d6e-b11d-9fbce8984cf0", "metadata": {}, "outputs": [], "source": [ - "operators_in_district = operator_df2.name.unique()" + "m = district_gdf.explore(\n", + " name=\"District\",\n", + " tiles=\"CartoDB positron\",\n", + " style_kwds={\"color\": \"#9DA4A6\", \"opacity\": 0.5},\n", + " height=500,\n", + " width=1000,\n", + ")" ] }, { "cell_type": "code", "execution_count": null, - "id": "4d03de6d-54a7-4852-b054-587970bf813d", - "metadata": { - "tags": [] - }, + "id": "62d76c7a-8271-45c2-9dce-52b58b04f126", + "metadata": {}, "outputs": [], "source": [ - "operator_route_gdf = gpd.read_parquet(\n", - " f\"{RT_SCHED_GCS}{OPERATOR_ROUTE}.parquet\",\n", - " storage_options={\"token\": credentials.token},\n", + "m = operator_gdf.explore(\n", + " m=m,\n", + " column=\"Portfolio Organization Name\",\n", + " cmap=\"RdBu\",\n", + " categorical=True,\n", + " legend=True,\n", + " legend_kwds={\"width\": 200},\n", ")" ] }, { "cell_type": "code", "execution_count": null, - "id": "2a47bedb-7c8b-4367-bae3-ba332342e019", - "metadata": { - "tags": [] - }, + "id": "b7ba26f7-09b1-4b83-aab0-52c96a8c3a7d", + "metadata": {}, "outputs": [], "source": [ - "operator_route_gdf = operator_route_gdf.loc[\n", - " operator_route_gdf.name.isin(operators_in_district)\n", - "][[\"name\", \"service_date\", \"recent_combined_name\", \"geometry\"]]" + "display(m)" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "fe892ae8-179f-43e7-867e-f46c24dfbae3", + "cell_type": "markdown", + "id": "ffa88c8a-f34e-45de-ba5c-74fc9885e60e", "metadata": { "tags": [] }, - "outputs": [], "source": [ - "operator_route_gdf = operator_route_gdf.sort_values(\n", - " [\"service_date\", \"name\", \"recent_combined_name\"], \n", - " ascending=[False, True, True]\n", - ").drop_duplicates(\n", - " subset = [\"name\", \"recent_combined_name\"]\n", - ").drop(\n", - " columns = [\"service_date\", \"recent_combined_name\"]\n", - " # drop route because after the dissolve, all operator routes are combined\n", - " # so route would hold only the first row's value\n", - ").dissolve(by = \"name\").reset_index().pipe(_report_utils.replace_column_names)\n" + "## Transit Routes on the State Highway Network\n", + "**Only transit routes that have 20% or more if its length on one or more State Highway Network routes are included**" ] }, { "cell_type": "code", "execution_count": null, - "id": "f103bca4-d35e-43c2-b60a-19672ef6bf69", - "metadata": {}, + "id": "261f4311-6dd1-4e98-bfc2-c317363f8894", + "metadata": { + "tags": [] + }, "outputs": [], "source": [ - "operator_route_gdf[\"Transit Operator\"] = operator_route_gdf[\"Transit Operator\"].str.replace(\" Schedule\", \"\")" + "m2 = shn_gdf.loc[shn_gdf.District == district_int].explore(\n", + " height=500,\n", + " width=1000,\n", + " style_kwds={\"color\": \"#9DA4A6\", \"weight\": 6, \"opacity\": 0.5},\n", + " tiles=\"CartoDB positron\",\n", + " name=\"shs\",\n", + ")" ] }, { "cell_type": "code", "execution_count": null, - "id": "b4e22fd2-9f51-4f7a-b6ef-69e550d1378c", - "metadata": {}, + "id": "7fb3206d-516e-426f-bc9c-558eb5d4acd9", + "metadata": { + "tags": [] + }, "outputs": [], "source": [ - "district_gdf = _ct_district_utils.ct_district(district_int)" + "m2 = transit_route_shs_gdf.explore(\n", + " \"Percentage of Transit Route on SHN Across All Districts\",\n", + " m=m2,\n", + " cmap=\"Blues\",\n", + " legend=True,\n", + ")" ] }, { "cell_type": "code", "execution_count": null, - "id": "b8018c74-7d56-4d6e-b11d-9fbce8984cf0", - "metadata": {}, + "id": "904ddf93-b310-4824-9449-3cf86418efc4", + "metadata": { + "tags": [] + }, "outputs": [], "source": [ - "m = district_gdf.explore(name=\"District\")" + "display(m2)" ] }, { "cell_type": "code", "execution_count": null, - "id": "62d76c7a-8271-45c2-9dce-52b58b04f126", - "metadata": {}, + "id": "ec38b3ea-585b-441a-99b6-d7ddde3cb2e5", + "metadata": { + "tags": [] + }, "outputs": [], "source": [ - "m = operator_route_gdf.explore(\n", - " m=m,\n", - " column=\"Transit Operator\",\n", - " tiles=\"CartoDB Positron\",\n", - " categorical=True,\n", - " legend=True,\n", - " legend_kwds={\"width\": 200},\n", + "GT(\n", + " transit_route_shs_table.sort_values(\n", + " by=[\n", + " \"Portfolio Organization Name\",\n", + " \"Percentage of Transit Route on SHN Across All Districts\",\n", + " ],\n", + " ascending=[True, False],\n", + " )\n", ")" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "b7ba26f7-09b1-4b83-aab0-52c96a8c3a7d", - "metadata": {}, - "outputs": [], - "source": [ - "display(m)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d10e25ae-1904-4d0f-a670-f90232984952", + "cell_type": "markdown", + "id": "b10ecb81-491e-4f65-af8d-0032d6e11d4e", "metadata": {}, - "outputs": [], "source": [ - "shared_cols = [\"organization_name\", \"name\"]\n", - "exclude_cols = [\n", - " \"schedule_gtfs_dataset_key\",\n", - " \"caltrans_district\",\n", - " \"organization_source_record_id\",\n", - " \"service_date\",\n", - " \"primary_uza\",\n", - "]\n", - "\n", - "gtfs_service_cols = [c for c in operator_df.columns if \"operator_\" in c]" + "## GTFS Stats by Operator" ] }, { "cell_type": "code", "execution_count": null, - "id": "c9a2ceb0-3511-4161-9c0f-13659a1240c5", - "metadata": {}, + "id": "a34aa8c3-529e-4065-b16e-a6160097c5c3", + "metadata": { + "tags": [] + }, "outputs": [], "source": [ - "gtfs_table_df = (\n", - " operator_df2[shared_cols + gtfs_service_cols]\n", - " .pipe(_report_utils.replace_column_names)\n", - " .reset_index(drop=True)\n", - ")" + "string_cols = gtfs_table_df.select_dtypes(include=\"object\").columns.tolist()" ] }, { "cell_type": "code", "execution_count": null, - "id": "7f2b427a-c32c-4c2c-b4b3-5a30b0181855", + "id": "7e7c30ef-fd53-44a3-922f-e114409eeb6c", "metadata": { "tags": [] }, "outputs": [], "source": [ - "string_cols = gtfs_table_df.select_dtypes(include=\"object\").columns.tolist()\n", - "\n", "gtfs_table = (\n", " GT(gtfs_table_df.sort_values(\"# Trips\", ascending=False))\n", " .fmt_integer(\n", @@ -534,8 +387,18 @@ " ],\n", " align=\"center\",\n", " )\n", - ")\n", - "\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2c4d52a1-a579-40ae-89ad-432f862292d8", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ "gtfs_table = _report_utils.great_table_formatting(gtfs_table)\n", "gtfs_table" ] diff --git a/gtfs_digest/merge_data.py b/gtfs_digest/merge_data.py index b4904593c7..6be0f4a3f0 100644 --- a/gtfs_digest/merge_data.py +++ b/gtfs_digest/merge_data.py @@ -400,6 +400,7 @@ def merge_data_sources_by_route_direction( df.to_parquet( f"{RT_SCHED_GCS}{DIGEST_RT_SCHED}.parquet" ) + end = datetime.datetime.now() logger.info(f"concatenate route-direction: {end - start}") \ No newline at end of file diff --git a/gtfs_digest/og_district_report.ipynb b/gtfs_digest/og_district_report.ipynb new file mode 100644 index 0000000000..141c915218 --- /dev/null +++ b/gtfs_digest/og_district_report.ipynb @@ -0,0 +1,1055 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "feafca21-a1d4-45b5-87ae-5ac5c1b34532", + "metadata": {}, + "outputs": [], + "source": [ + "%%capture\n", + "\n", + "import warnings\n", + "\n", + "warnings.filterwarnings(\"ignore\")\n", + "import _ct_district_visuals as _ct_district_utils\n", + "import _report_utils\n", + "import calitp_data_analysis.magics\n", + "import geopandas as gpd\n", + "import pandas as pd\n", + "from great_tables import GT\n", + "from IPython.display import HTML, Image, Markdown, display, display_html\n", + "from slugify import slugify\n", + "from update_vars import GTFS_DATA_DICT, RT_SCHED_GCS" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "cea2360d-e143-4702-baa4-009417e96bcc", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import google.auth\n", + "\n", + "credentials, project = google.auth.default()\n", + "\n", + "import gcsfs\n", + "\n", + "fs = gcsfs.GCSFileSystem()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "c15333a6-138e-46ac-ba5e-1ba07947ac44", + "metadata": { + "tags": [ + "parameters" + ] + }, + "outputs": [], + "source": [ + "# Comment out and leave this cell right below pandas\n", + "district = \"08 - San Bernardino / Riverside\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f86359af-8cfe-42e8-8d10-0945dc70fded", + "metadata": {}, + "outputs": [], + "source": [ + "DISTRICT_DIGEST_URL = (\n", + " \"https://gtfs-digest--cal-itp-data-analyses.netlify.app/district_\"\n", + " f\"{slugify(district)}\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "9af945ff-0887-43d7-b12e-5866205773ba", + "metadata": {}, + "outputs": [], + "source": [ + "# %%capture_parameters\n", + "# district, DISTRICT_DIGEST_URL" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "cbafa165-4db8-4db2-bc5f-1cbbbe346a48", + "metadata": {}, + "outputs": [], + "source": [ + "# Extract district from district string when doing an sjoin\n", + "# between CT districts & routes\n", + "district_int = [int(s) for s in district.split() if s.isdigit()][0]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "d3d0d0a2-4543-4b30-b2f5-2350a2401bec", + "metadata": {}, + "outputs": [], + "source": [ + "# Read in all datasets here with GTFS_DATA_DICT\n", + "# Reran merge_operator_data.py to test this\n", + "OPERATOR_FILE = GTFS_DATA_DICT.digest_tables.operator_profiles\n", + "OPERATOR_ROUTE = GTFS_DATA_DICT.digest_tables.operator_routes_map\n", + "\n", + "operator_df = pd.read_parquet(\n", + " f\"{RT_SCHED_GCS}{OPERATOR_FILE}.parquet\",\n", + " filters=[[(\"caltrans_district\", \"==\", district)]],\n", + ")\n", + "\n", + "# using name instead of schedule_gtfs_dataset_key allows us to get\n", + "# the last ones for LA Metro without keeping extraneous rows for LA Metro when keys changed\n", + "operator_df = (\n", + " operator_df.sort_values([\"service_date\", \"name\"], ascending=[False, True])\n", + " .drop_duplicates(subset=[\"name\"])\n", + " .reset_index(drop=True)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e733cb10-3185-4468-9ebe-1c2cb854cd21", + "metadata": {}, + "outputs": [], + "source": [ + "# De duplicate\n", + "# First find any organizations_names with more than 2 names per\n", + "orgs_agg = (\n", + " operator_df.groupby([\"caltrans_district\", \"organization_name\"])\n", + " .agg({\"name\": \"nunique\"})\n", + " .reset_index()\n", + ")\n", + "orgs_agg2 = orgs_agg.loc[orgs_agg.name > 1]\n", + "orgs_with_2_names = list(orgs_agg2.organization_name.unique())" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "f2197f14-0623-46b4-bdda-a6da1581a9d2", + "metadata": {}, + "outputs": [], + "source": [ + "# Delete out these organizations from the original df so we can manipulate them.\n", + "operator_df2 = operator_df.loc[\n", + " ~operator_df.organization_name.isin(orgs_with_2_names)\n", + "].reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "e7ee27ca-fafc-41a5-b15c-eead1c11785f", + "metadata": {}, + "outputs": [], + "source": [ + "# Filter for these organizations with more than 2 names in their own df.\n", + "orgs_with_2_names_df = operator_df.loc[\n", + " operator_df.organization_name.isin(orgs_with_2_names)\n", + "].reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ad8f31e7-f7b0-4f8e-9ee8-6479ea1af654", + "metadata": {}, + "outputs": [], + "source": [ + "three_month_reference = operator_df2[\"service_date\"].max() - pd.DateOffset(months=3)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "9d2e2807-801a-48f5-9933-3adaad4ebfef", + "metadata": {}, + "outputs": [], + "source": [ + "orgs_with_2_names_df = orgs_with_2_names_df[\n", + " orgs_with_2_names_df[\"service_date\"] >= three_month_reference\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "c93e5f3d-1b87-495d-a63e-2454d7089754", + "metadata": {}, + "outputs": [], + "source": [ + "# Filter out any rows in which `vp_per_min_agency` and `spatial_accuracy_agency` is equal than 0\n", + "# and still has 2+ names\n", + "orgs_agg = (\n", + " orgs_with_2_names_df.groupby([\"organization_name\"])\n", + " .agg({\"name\": \"nunique\"})\n", + " .reset_index()\n", + " .rename(columns={\"name\": \"n_names\"})\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "a81b77e8-90dd-4626-9077-45cb87ea2d0f", + "metadata": {}, + "outputs": [], + "source": [ + "orgs_with_2_names_df = pd.merge(\n", + " orgs_with_2_names_df, orgs_agg, on=\"organization_name\", how=\"left\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "4f0eccf0-3731-4f93-9d7d-c4cc54617bbb", + "metadata": {}, + "outputs": [], + "source": [ + "orgs_with_2_names_df2 = orgs_with_2_names_df[\n", + " (orgs_with_2_names_df.vp_per_min_agency > 0)\n", + " & (orgs_with_2_names_df.spatial_accuracy_agency > 0)\n", + " & (orgs_with_2_names_df.n_names > 1)\n", + "].reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "15712b8e-f547-4668-8f77-c9912207ef7b", + "metadata": {}, + "outputs": [], + "source": [ + "# Keep rows that meet service_date\n", + "service_date = operator_df2.service_date.max()\n", + "orgs_with_2_names_df3 = orgs_with_2_names_df2.loc[\n", + " orgs_with_2_names_df2.service_date == service_date\n", + "]\n", + "final_names = list(orgs_with_2_names_df3.organization_name.unique())" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "67b1e0cd-7ecf-43ca-80eb-b9139f7f49f8", + "metadata": {}, + "outputs": [], + "source": [ + "## Concat back\n", + "orgs_with_2_names_df = orgs_with_2_names_df.loc[\n", + " ~orgs_with_2_names_df.organization_name.isin(final_names)\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "d591e85f-18f4-4613-8330-c1c6978c0507", + "metadata": {}, + "outputs": [], + "source": [ + "orgs_with_2_names_df_final = pd.concat([orgs_with_2_names_df, orgs_with_2_names_df3])" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "fcf1647b-892e-4323-8b69-e7bed38951b7", + "metadata": {}, + "outputs": [], + "source": [ + "operator_df2 = pd.concat([operator_df2, orgs_with_2_names_df_final])" + ] + }, + { + "cell_type": "markdown", + "id": "41f0a970-4646-4147-a596-d41d15517127", + "metadata": {}, + "source": [ + "# District {district}\n", + "\n", + "These are district summaries for [GTFS Digest](https://gtfs-digest--cal-itp-data-analyses.netlify.app/). \n", + "\n", + "Individual transit operators have their pages at: **[{DISTRICT_DIGEST_URL}]({DISTRICT_DIGEST_URL})**" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "06069f65-3a0c-40a7-86dc-ec1321213ccd", + "metadata": {}, + "outputs": [], + "source": [ + "district_summary = _report_utils.district_stats(operator_df2, \"caltrans_district\")" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "8eb3a4cc-09a5-49ac-af0c-9e84cfed3d05", + "metadata": {}, + "outputs": [], + "source": [ + "summary_table1 = (\n", + " GT(\n", + " district_summary.drop(columns=[\"arrivals_per_stop\", \"trips_per_operator\"]).pipe(\n", + " _report_utils.transpose_summary_stats, district_col=\"caltrans_district\"\n", + " )\n", + " )\n", + " .fmt_integer(columns=\"value\")\n", + " .cols_label(index=\"\")\n", + " .tab_header(title=f\"District {district} GTFS summary stats\")\n", + ")\n", + "\n", + "summary_table2 = (\n", + " GT(\n", + " district_summary[\n", + " [\"caltrans_district\", \"arrivals_per_stop\", \"trips_per_operator\"]\n", + " ].pipe(_report_utils.transpose_summary_stats, district_col=\"caltrans_district\")\n", + " )\n", + " .fmt_number(\"value\", decimals=1)\n", + " .cols_label(index=\"\")\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "496f6d82-227e-468d-af9b-b65bc2d0ec57", + "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", + "
District 08 - San Bernardino / Riverside GTFS summary stats
Value
# Operators12
# routes149
# trips4771
# stops6738
# arrivals180294
\n", + "\n", + "
\n", + " " + ], + "text/plain": [ + "GT(_tbl_data= index Value\n", + "0 # Operators 12\n", + "1 # routes 149\n", + "2 # trips 4771\n", + "3 # stops 6738\n", + "4 # arrivals 180294, _body=, _boxhead=Boxhead([ColInfo(var='index', type=, column_label='', column_align='left', column_width=None), ColInfo(var='Value', type=, column_label='Value', column_align='right', column_width=None)]), _stub=, _spanners=Spanners([]), _heading=Heading(title='District 08 - San Bernardino / Riverside GTFS summary stats', subtitle=None, preheader=None), _stubhead=None, _source_notes=[], _footnotes=[], _styles=[], _locale=, _formats=[], _substitutions=[], _options=Options(table_id=OptionsInfo(scss=False, category='table', type='value', value=None), table_caption=OptionsInfo(scss=False, category='table', type='value', value=None), table_width=OptionsInfo(scss=True, category='table', type='px', value='auto'), table_layout=OptionsInfo(scss=True, category='table', type='value', value='fixed'), table_margin_left=OptionsInfo(scss=True, category='table', type='px', value='auto'), table_margin_right=OptionsInfo(scss=True, category='table', type='px', value='auto'), table_background_color=OptionsInfo(scss=True, category='table', type='value', value='#FFFFFF'), table_additional_css=OptionsInfo(scss=False, category='table', type='values', value=[]), table_font_names=OptionsInfo(scss=False, category='table', type='values', value=['-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Helvetica Neue', 'Fira Sans', 'Droid Sans', 'Arial', 'sans-serif']), table_font_size=OptionsInfo(scss=True, category='table', type='px', value='16px'), table_font_weight=OptionsInfo(scss=True, category='table', type='value', value='normal'), table_font_style=OptionsInfo(scss=True, category='table', type='value', value='normal'), table_font_color=OptionsInfo(scss=True, category='table', type='value', value='#333333'), table_font_color_light=OptionsInfo(scss=True, category='table', type='value', value='#FFFFFF'), table_border_top_include=OptionsInfo(scss=False, category='table', type='boolean', value=True), table_border_top_style=OptionsInfo(scss=True, category='table', type='value', value='solid'), table_border_top_width=OptionsInfo(scss=True, category='table', type='px', value='2px'), table_border_top_color=OptionsInfo(scss=True, category='table', type='value', value='#A8A8A8'), table_border_right_style=OptionsInfo(scss=True, category='table', type='value', value='none'), table_border_right_width=OptionsInfo(scss=True, category='table', type='px', value='2px'), table_border_right_color=OptionsInfo(scss=True, category='table', type='value', value='#D3D3D3'), table_border_bottom_include=OptionsInfo(scss=False, category='table', type='boolean', value=True), table_border_bottom_style=OptionsInfo(scss=True, category='table', type='value', value='solid'), table_border_bottom_width=OptionsInfo(scss=True, category='table', type='px', value='2px'), table_border_bottom_color=OptionsInfo(scss=True, category='table', type='value', value='#A8A8A8'), table_border_left_style=OptionsInfo(scss=True, category='table', type='value', value='none'), table_border_left_width=OptionsInfo(scss=True, category='table', type='px', value='2px'), table_border_left_color=OptionsInfo(scss=True, category='table', type='value', value='#D3D3D3'), heading_background_color=OptionsInfo(scss=True, category='heading', type='value', value=None), heading_align=OptionsInfo(scss=True, category='heading', type='value', value='center'), heading_title_font_size=OptionsInfo(scss=True, category='heading', type='px', value='125%'), heading_title_font_weight=OptionsInfo(scss=True, category='heading', type='value', value='initial'), heading_subtitle_font_size=OptionsInfo(scss=True, category='heading', type='px', value='85%'), heading_subtitle_font_weight=OptionsInfo(scss=True, category='heading', type='value', value='initial'), heading_padding=OptionsInfo(scss=True, category='heading', type='px', value='4px'), heading_padding_horizontal=OptionsInfo(scss=True, category='heading', type='px', value='5px'), heading_border_bottom_style=OptionsInfo(scss=True, category='heading', type='value', value='solid'), heading_border_bottom_width=OptionsInfo(scss=True, category='heading', type='px', value='2px'), heading_border_bottom_color=OptionsInfo(scss=True, category='heading', type='value', value='#D3D3D3'), heading_border_lr_style=OptionsInfo(scss=True, category='heading', type='value', value='none'), heading_border_lr_width=OptionsInfo(scss=True, category='heading', type='px', value='1px'), heading_border_lr_color=OptionsInfo(scss=True, category='heading', type='value', value='#D3D3D3'), column_labels_background_color=OptionsInfo(scss=True, category='column_labels', type='value', value=None), column_labels_font_size=OptionsInfo(scss=True, category='column_labels', type='px', value='100%'), column_labels_font_weight=OptionsInfo(scss=True, category='column_labels', type='value', value='normal'), column_labels_text_transform=OptionsInfo(scss=True, category='column_labels', type='value', value='inherit'), column_labels_padding=OptionsInfo(scss=True, category='column_labels', type='px', value='5px'), column_labels_padding_horizontal=OptionsInfo(scss=True, category='column_labels', type='px', value='5px'), column_labels_vlines_style=OptionsInfo(scss=True, category='table_body', type='value', value='none'), column_labels_vlines_width=OptionsInfo(scss=True, category='table_body', type='px', value='1px'), column_labels_vlines_color=OptionsInfo(scss=True, category='table_body', type='value', value='#D3D3D3'), column_labels_border_top_style=OptionsInfo(scss=True, category='column_labels', type='value', value='solid'), column_labels_border_top_width=OptionsInfo(scss=True, category='column_labels', type='px', value='2px'), column_labels_border_top_color=OptionsInfo(scss=True, category='column_labels', type='value', value='#D3D3D3'), column_labels_border_bottom_style=OptionsInfo(scss=True, category='column_labels', type='value', value='solid'), column_labels_border_bottom_width=OptionsInfo(scss=True, category='column_labels', type='px', value='2px'), column_labels_border_bottom_color=OptionsInfo(scss=True, category='column_labels', type='value', value='#D3D3D3'), column_labels_border_lr_style=OptionsInfo(scss=True, category='column_labels', type='value', value='none'), column_labels_border_lr_width=OptionsInfo(scss=True, category='column_labels', type='px', value='1px'), column_labels_border_lr_color=OptionsInfo(scss=True, category='column_labels', type='value', value='#D3D3D3'), column_labels_hidden=OptionsInfo(scss=False, category='column_labels', type='boolean', value=False), row_group_background_color=OptionsInfo(scss=True, category='row_group', type='value', value=None), row_group_font_size=OptionsInfo(scss=True, category='row_group', type='px', value='100%'), row_group_font_weight=OptionsInfo(scss=True, category='row_group', type='value', value='initial'), row_group_text_transform=OptionsInfo(scss=True, category='row_group', type='value', value='inherit'), row_group_padding=OptionsInfo(scss=True, category='row_group', type='px', value='8px'), row_group_padding_horizontal=OptionsInfo(scss=True, category='row_group', type='px', value='5px'), row_group_border_top_style=OptionsInfo(scss=True, category='row_group', type='value', value='solid'), row_group_border_top_width=OptionsInfo(scss=True, category='row_group', type='px', value='2px'), row_group_border_top_color=OptionsInfo(scss=True, category='row_group', type='value', value='#D3D3D3'), row_group_border_right_style=OptionsInfo(scss=True, category='row_group', type='value', value='none'), row_group_border_right_width=OptionsInfo(scss=True, category='row_group', type='px', value='1px'), row_group_border_right_color=OptionsInfo(scss=True, category='row_group', type='value', value='#D3D3D3'), row_group_border_bottom_style=OptionsInfo(scss=True, category='row_group', type='value', value='solid'), row_group_border_bottom_width=OptionsInfo(scss=True, category='row_group', type='px', value='2px'), row_group_border_bottom_color=OptionsInfo(scss=True, category='row_group', type='value', value='#D3D3D3'), row_group_border_left_style=OptionsInfo(scss=True, category='row_group', type='value', value='none'), row_group_border_left_width=OptionsInfo(scss=True, category='row_group', type='px', value='1px'), row_group_border_left_color=OptionsInfo(scss=True, category='row_group', type='value', value='#D3D3D3'), row_group_as_column=OptionsInfo(scss=False, category='row_group', type='boolean', value=False), table_body_hlines_style=OptionsInfo(scss=True, category='table_body', type='value', value='solid'), table_body_hlines_width=OptionsInfo(scss=True, category='table_body', type='px', value='1px'), table_body_hlines_color=OptionsInfo(scss=True, category='table_body', type='value', value='#D3D3D3'), table_body_vlines_style=OptionsInfo(scss=True, category='table_body', type='value', value='none'), table_body_vlines_width=OptionsInfo(scss=True, category='table_body', type='px', value='1px'), table_body_vlines_color=OptionsInfo(scss=True, category='table_body', type='value', value='#D3D3D3'), table_body_border_top_style=OptionsInfo(scss=True, category='table_body', type='value', value='solid'), table_body_border_top_width=OptionsInfo(scss=True, category='table_body', type='px', value='2px'), table_body_border_top_color=OptionsInfo(scss=True, category='table_body', type='value', value='#D3D3D3'), table_body_border_bottom_style=OptionsInfo(scss=True, category='table_body', type='value', value='solid'), table_body_border_bottom_width=OptionsInfo(scss=True, category='table_body', type='px', value='2px'), table_body_border_bottom_color=OptionsInfo(scss=True, category='table_body', type='value', value='#D3D3D3'), data_row_padding=OptionsInfo(scss=True, category='data_row', type='px', value='8px'), data_row_padding_horizontal=OptionsInfo(scss=True, category='data_row', type='px', value='5px'), stub_background_color=OptionsInfo(scss=True, category='stub', type='value', value=None), stub_font_size=OptionsInfo(scss=True, category='stub', type='px', value='100%'), stub_font_weight=OptionsInfo(scss=True, category='stub', type='value', value='initial'), stub_text_transform=OptionsInfo(scss=True, category='stub', type='value', value='inherit'), stub_border_style=OptionsInfo(scss=True, category='stub', type='value', value='solid'), stub_border_width=OptionsInfo(scss=True, category='stub', type='px', value='2px'), stub_border_color=OptionsInfo(scss=True, category='stub', type='value', value='#D3D3D3'), stub_row_group_background_color=OptionsInfo(scss=True, category='stub', type='value', value=None), stub_row_group_font_size=OptionsInfo(scss=True, category='stub', type='px', value='100%'), stub_row_group_font_weight=OptionsInfo(scss=True, category='stub', type='value', value='initial'), stub_row_group_text_transform=OptionsInfo(scss=True, category='stub', type='value', value='inherit'), stub_row_group_border_style=OptionsInfo(scss=True, category='stub', type='value', value='solid'), stub_row_group_border_width=OptionsInfo(scss=True, category='stub', type='px', value='2px'), stub_row_group_border_color=OptionsInfo(scss=True, category='stub', type='value', value='#D3D3D3'), source_notes_padding=OptionsInfo(scss=True, category='source_notes', type='px', value='4px'), source_notes_padding_horizontal=OptionsInfo(scss=True, category='source_notes', type='px', value='5px'), source_notes_background_color=OptionsInfo(scss=True, category='source_notes', type='value', value=None), source_notes_font_size=OptionsInfo(scss=True, category='source_notes', type='px', value='90%'), source_notes_border_bottom_style=OptionsInfo(scss=True, category='source_notes', type='value', value='none'), source_notes_border_bottom_width=OptionsInfo(scss=True, category='source_notes', type='px', value='2px'), source_notes_border_bottom_color=OptionsInfo(scss=True, category='source_notes', type='value', value='#D3D3D3'), source_notes_border_lr_style=OptionsInfo(scss=True, category='source_notes', type='value', value='none'), source_notes_border_lr_width=OptionsInfo(scss=True, category='source_notes', type='px', value='2px'), source_notes_border_lr_color=OptionsInfo(scss=True, category='source_notes', type='value', value='#D3D3D3'), source_notes_multiline=OptionsInfo(scss=False, category='source_notes', type='boolean', value=True), source_notes_sep=OptionsInfo(scss=False, category='source_notes', type='value', value=' '), row_striping_background_color=OptionsInfo(scss=True, category='row', type='value', value='rgba(128,128,128,0.05)'), row_striping_include_stub=OptionsInfo(scss=False, category='row', type='boolean', value=False), row_striping_include_table_body=OptionsInfo(scss=False, category='row', type='boolean', value=False), container_width=OptionsInfo(scss=False, category='container', type='px', value='auto'), container_height=OptionsInfo(scss=False, category='container', type='px', value='auto'), container_padding_x=OptionsInfo(scss=False, category='container', type='px', value='0px'), container_padding_y=OptionsInfo(scss=False, category='container', type='px', value='10px'), container_overflow_x=OptionsInfo(scss=False, category='container', type='overflow', value='auto'), container_overflow_y=OptionsInfo(scss=False, category='container', type='overflow', value='auto'), quarto_disable_processing=OptionsInfo(scss=False, category='quarto', type='logical', value=False), quarto_use_bootstrap=OptionsInfo(scss=False, category='quarto', type='logical', value=False)), _has_built=False)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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", + "
Value
Arrivals per Stop26.76
Trips per Operator397.58
\n", + "\n", + "
\n", + " " + ], + "text/plain": [ + "GT(_tbl_data= index Value\n", + "0 Arrivals per Stop 26.76\n", + "1 Trips per Operator 397.58, _body=, _boxhead=Boxhead([ColInfo(var='index', type=, column_label='', column_align='left', column_width=None), ColInfo(var='Value', type=, column_label='Value', column_align='right', column_width=None)]), _stub=, _spanners=Spanners([]), _heading=Heading(title=None, subtitle=None, preheader=None), _stubhead=None, _source_notes=[], _footnotes=[], _styles=[], _locale=, _formats=[], _substitutions=[], _options=Options(table_id=OptionsInfo(scss=False, category='table', type='value', value=None), table_caption=OptionsInfo(scss=False, category='table', type='value', value=None), table_width=OptionsInfo(scss=True, category='table', type='px', value='auto'), table_layout=OptionsInfo(scss=True, category='table', type='value', value='fixed'), table_margin_left=OptionsInfo(scss=True, category='table', type='px', value='auto'), table_margin_right=OptionsInfo(scss=True, category='table', type='px', value='auto'), table_background_color=OptionsInfo(scss=True, category='table', type='value', value='#FFFFFF'), table_additional_css=OptionsInfo(scss=False, category='table', type='values', value=[]), table_font_names=OptionsInfo(scss=False, category='table', type='values', value=['-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Helvetica Neue', 'Fira Sans', 'Droid Sans', 'Arial', 'sans-serif']), table_font_size=OptionsInfo(scss=True, category='table', type='px', value='16px'), table_font_weight=OptionsInfo(scss=True, category='table', type='value', value='normal'), table_font_style=OptionsInfo(scss=True, category='table', type='value', value='normal'), table_font_color=OptionsInfo(scss=True, category='table', type='value', value='#333333'), table_font_color_light=OptionsInfo(scss=True, category='table', type='value', value='#FFFFFF'), table_border_top_include=OptionsInfo(scss=False, category='table', type='boolean', value=True), table_border_top_style=OptionsInfo(scss=True, category='table', type='value', value='solid'), table_border_top_width=OptionsInfo(scss=True, category='table', type='px', value='2px'), table_border_top_color=OptionsInfo(scss=True, category='table', type='value', value='#A8A8A8'), table_border_right_style=OptionsInfo(scss=True, category='table', type='value', value='none'), table_border_right_width=OptionsInfo(scss=True, category='table', type='px', value='2px'), table_border_right_color=OptionsInfo(scss=True, category='table', type='value', value='#D3D3D3'), table_border_bottom_include=OptionsInfo(scss=False, category='table', type='boolean', value=True), table_border_bottom_style=OptionsInfo(scss=True, category='table', type='value', value='solid'), table_border_bottom_width=OptionsInfo(scss=True, category='table', type='px', value='2px'), table_border_bottom_color=OptionsInfo(scss=True, category='table', type='value', value='#A8A8A8'), table_border_left_style=OptionsInfo(scss=True, category='table', type='value', value='none'), table_border_left_width=OptionsInfo(scss=True, category='table', type='px', value='2px'), table_border_left_color=OptionsInfo(scss=True, category='table', type='value', value='#D3D3D3'), heading_background_color=OptionsInfo(scss=True, category='heading', type='value', value=None), heading_align=OptionsInfo(scss=True, category='heading', type='value', value='center'), heading_title_font_size=OptionsInfo(scss=True, category='heading', type='px', value='125%'), heading_title_font_weight=OptionsInfo(scss=True, category='heading', type='value', value='initial'), heading_subtitle_font_size=OptionsInfo(scss=True, category='heading', type='px', value='85%'), heading_subtitle_font_weight=OptionsInfo(scss=True, category='heading', type='value', value='initial'), heading_padding=OptionsInfo(scss=True, category='heading', type='px', value='4px'), heading_padding_horizontal=OptionsInfo(scss=True, category='heading', type='px', value='5px'), heading_border_bottom_style=OptionsInfo(scss=True, category='heading', type='value', value='solid'), heading_border_bottom_width=OptionsInfo(scss=True, category='heading', type='px', value='2px'), heading_border_bottom_color=OptionsInfo(scss=True, category='heading', type='value', value='#D3D3D3'), heading_border_lr_style=OptionsInfo(scss=True, category='heading', type='value', value='none'), heading_border_lr_width=OptionsInfo(scss=True, category='heading', type='px', value='1px'), heading_border_lr_color=OptionsInfo(scss=True, category='heading', type='value', value='#D3D3D3'), column_labels_background_color=OptionsInfo(scss=True, category='column_labels', type='value', value=None), column_labels_font_size=OptionsInfo(scss=True, category='column_labels', type='px', value='100%'), column_labels_font_weight=OptionsInfo(scss=True, category='column_labels', type='value', value='normal'), column_labels_text_transform=OptionsInfo(scss=True, category='column_labels', type='value', value='inherit'), column_labels_padding=OptionsInfo(scss=True, category='column_labels', type='px', value='5px'), column_labels_padding_horizontal=OptionsInfo(scss=True, category='column_labels', type='px', value='5px'), column_labels_vlines_style=OptionsInfo(scss=True, category='table_body', type='value', value='none'), column_labels_vlines_width=OptionsInfo(scss=True, category='table_body', type='px', value='1px'), column_labels_vlines_color=OptionsInfo(scss=True, category='table_body', type='value', value='#D3D3D3'), column_labels_border_top_style=OptionsInfo(scss=True, category='column_labels', type='value', value='solid'), column_labels_border_top_width=OptionsInfo(scss=True, category='column_labels', type='px', value='2px'), column_labels_border_top_color=OptionsInfo(scss=True, category='column_labels', type='value', value='#D3D3D3'), column_labels_border_bottom_style=OptionsInfo(scss=True, category='column_labels', type='value', value='solid'), column_labels_border_bottom_width=OptionsInfo(scss=True, category='column_labels', type='px', value='2px'), column_labels_border_bottom_color=OptionsInfo(scss=True, category='column_labels', type='value', value='#D3D3D3'), column_labels_border_lr_style=OptionsInfo(scss=True, category='column_labels', type='value', value='none'), column_labels_border_lr_width=OptionsInfo(scss=True, category='column_labels', type='px', value='1px'), column_labels_border_lr_color=OptionsInfo(scss=True, category='column_labels', type='value', value='#D3D3D3'), column_labels_hidden=OptionsInfo(scss=False, category='column_labels', type='boolean', value=False), row_group_background_color=OptionsInfo(scss=True, category='row_group', type='value', value=None), row_group_font_size=OptionsInfo(scss=True, category='row_group', type='px', value='100%'), row_group_font_weight=OptionsInfo(scss=True, category='row_group', type='value', value='initial'), row_group_text_transform=OptionsInfo(scss=True, category='row_group', type='value', value='inherit'), row_group_padding=OptionsInfo(scss=True, category='row_group', type='px', value='8px'), row_group_padding_horizontal=OptionsInfo(scss=True, category='row_group', type='px', value='5px'), row_group_border_top_style=OptionsInfo(scss=True, category='row_group', type='value', value='solid'), row_group_border_top_width=OptionsInfo(scss=True, category='row_group', type='px', value='2px'), row_group_border_top_color=OptionsInfo(scss=True, category='row_group', type='value', value='#D3D3D3'), row_group_border_right_style=OptionsInfo(scss=True, category='row_group', type='value', value='none'), row_group_border_right_width=OptionsInfo(scss=True, category='row_group', type='px', value='1px'), row_group_border_right_color=OptionsInfo(scss=True, category='row_group', type='value', value='#D3D3D3'), row_group_border_bottom_style=OptionsInfo(scss=True, category='row_group', type='value', value='solid'), row_group_border_bottom_width=OptionsInfo(scss=True, category='row_group', type='px', value='2px'), row_group_border_bottom_color=OptionsInfo(scss=True, category='row_group', type='value', value='#D3D3D3'), row_group_border_left_style=OptionsInfo(scss=True, category='row_group', type='value', value='none'), row_group_border_left_width=OptionsInfo(scss=True, category='row_group', type='px', value='1px'), row_group_border_left_color=OptionsInfo(scss=True, category='row_group', type='value', value='#D3D3D3'), row_group_as_column=OptionsInfo(scss=False, category='row_group', type='boolean', value=False), table_body_hlines_style=OptionsInfo(scss=True, category='table_body', type='value', value='solid'), table_body_hlines_width=OptionsInfo(scss=True, category='table_body', type='px', value='1px'), table_body_hlines_color=OptionsInfo(scss=True, category='table_body', type='value', value='#D3D3D3'), table_body_vlines_style=OptionsInfo(scss=True, category='table_body', type='value', value='none'), table_body_vlines_width=OptionsInfo(scss=True, category='table_body', type='px', value='1px'), table_body_vlines_color=OptionsInfo(scss=True, category='table_body', type='value', value='#D3D3D3'), table_body_border_top_style=OptionsInfo(scss=True, category='table_body', type='value', value='solid'), table_body_border_top_width=OptionsInfo(scss=True, category='table_body', type='px', value='2px'), table_body_border_top_color=OptionsInfo(scss=True, category='table_body', type='value', value='#D3D3D3'), table_body_border_bottom_style=OptionsInfo(scss=True, category='table_body', type='value', value='solid'), table_body_border_bottom_width=OptionsInfo(scss=True, category='table_body', type='px', value='2px'), table_body_border_bottom_color=OptionsInfo(scss=True, category='table_body', type='value', value='#D3D3D3'), data_row_padding=OptionsInfo(scss=True, category='data_row', type='px', value='8px'), data_row_padding_horizontal=OptionsInfo(scss=True, category='data_row', type='px', value='5px'), stub_background_color=OptionsInfo(scss=True, category='stub', type='value', value=None), stub_font_size=OptionsInfo(scss=True, category='stub', type='px', value='100%'), stub_font_weight=OptionsInfo(scss=True, category='stub', type='value', value='initial'), stub_text_transform=OptionsInfo(scss=True, category='stub', type='value', value='inherit'), stub_border_style=OptionsInfo(scss=True, category='stub', type='value', value='solid'), stub_border_width=OptionsInfo(scss=True, category='stub', type='px', value='2px'), stub_border_color=OptionsInfo(scss=True, category='stub', type='value', value='#D3D3D3'), stub_row_group_background_color=OptionsInfo(scss=True, category='stub', type='value', value=None), stub_row_group_font_size=OptionsInfo(scss=True, category='stub', type='px', value='100%'), stub_row_group_font_weight=OptionsInfo(scss=True, category='stub', type='value', value='initial'), stub_row_group_text_transform=OptionsInfo(scss=True, category='stub', type='value', value='inherit'), stub_row_group_border_style=OptionsInfo(scss=True, category='stub', type='value', value='solid'), stub_row_group_border_width=OptionsInfo(scss=True, category='stub', type='px', value='2px'), stub_row_group_border_color=OptionsInfo(scss=True, category='stub', type='value', value='#D3D3D3'), source_notes_padding=OptionsInfo(scss=True, category='source_notes', type='px', value='4px'), source_notes_padding_horizontal=OptionsInfo(scss=True, category='source_notes', type='px', value='5px'), source_notes_background_color=OptionsInfo(scss=True, category='source_notes', type='value', value=None), source_notes_font_size=OptionsInfo(scss=True, category='source_notes', type='px', value='90%'), source_notes_border_bottom_style=OptionsInfo(scss=True, category='source_notes', type='value', value='none'), source_notes_border_bottom_width=OptionsInfo(scss=True, category='source_notes', type='px', value='2px'), source_notes_border_bottom_color=OptionsInfo(scss=True, category='source_notes', type='value', value='#D3D3D3'), source_notes_border_lr_style=OptionsInfo(scss=True, category='source_notes', type='value', value='none'), source_notes_border_lr_width=OptionsInfo(scss=True, category='source_notes', type='px', value='2px'), source_notes_border_lr_color=OptionsInfo(scss=True, category='source_notes', type='value', value='#D3D3D3'), source_notes_multiline=OptionsInfo(scss=False, category='source_notes', type='boolean', value=True), source_notes_sep=OptionsInfo(scss=False, category='source_notes', type='value', value=' '), row_striping_background_color=OptionsInfo(scss=True, category='row', type='value', value='rgba(128,128,128,0.05)'), row_striping_include_stub=OptionsInfo(scss=False, category='row', type='boolean', value=False), row_striping_include_table_body=OptionsInfo(scss=False, category='row', type='boolean', value=False), container_width=OptionsInfo(scss=False, category='container', type='px', value='auto'), container_height=OptionsInfo(scss=False, category='container', type='px', value='auto'), container_padding_x=OptionsInfo(scss=False, category='container', type='px', value='0px'), container_padding_y=OptionsInfo(scss=False, category='container', type='px', value='10px'), container_overflow_x=OptionsInfo(scss=False, category='container', type='overflow', value='auto'), container_overflow_y=OptionsInfo(scss=False, category='container', type='overflow', value='auto'), quarto_disable_processing=OptionsInfo(scss=False, category='quarto', type='logical', value=False), quarto_use_bootstrap=OptionsInfo(scss=False, category='quarto', type='logical', value=False)), _has_built=False)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(summary_table1)\n", + "display(summary_table2)" + ] + }, + { + "cell_type": "markdown", + "id": "b10ecb81-491e-4f65-af8d-0032d6e11d4e", + "metadata": {}, + "source": [ + "## GTFS Stats by Operator" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "e1fff887-8120-42ad-9a98-3dc90dd2e838", + "metadata": {}, + "outputs": [], + "source": [ + "operators_in_district = operator_df2.name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "4d03de6d-54a7-4852-b054-587970bf813d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "operator_route_gdf = gpd.read_parquet(\n", + " f\"{RT_SCHED_GCS}{OPERATOR_ROUTE}.parquet\",\n", + " storage_options={\"token\": credentials.token},\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "2a47bedb-7c8b-4367-bae3-ba332342e019", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "operator_route_gdf = operator_route_gdf.loc[\n", + " operator_route_gdf.name.isin(operators_in_district)\n", + "][[\"name\", \"service_date\", \"recent_combined_name\", \"geometry\"]]" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "fe892ae8-179f-43e7-867e-f46c24dfbae3", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "operator_route_gdf = operator_route_gdf.sort_values(\n", + " [\"service_date\", \"name\", \"recent_combined_name\"], \n", + " ascending=[False, True, True]\n", + ").drop_duplicates(\n", + " subset = [\"name\", \"recent_combined_name\"]\n", + ").drop(\n", + " columns = [\"service_date\", \"recent_combined_name\"]\n", + " # drop route because after the dissolve, all operator routes are combined\n", + " # so route would hold only the first row's value\n", + ").dissolve(by = \"name\").reset_index().pipe(_report_utils.replace_column_names)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "f103bca4-d35e-43c2-b60a-19672ef6bf69", + "metadata": {}, + "outputs": [], + "source": [ + "operator_route_gdf[\"Transit Operator\"] = operator_route_gdf[\"Transit Operator\"].str.replace(\" Schedule\", \"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "b4e22fd2-9f51-4f7a-b6ef-69e550d1378c", + "metadata": {}, + "outputs": [], + "source": [ + "district_gdf = _ct_district_utils.ct_district(district_int)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "b8018c74-7d56-4d6e-b11d-9fbce8984cf0", + "metadata": {}, + "outputs": [], + "source": [ + "m = district_gdf.explore(name=\"District\")" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "62d76c7a-8271-45c2-9dce-52b58b04f126", + "metadata": {}, + "outputs": [], + "source": [ + "m = operator_route_gdf.explore(\n", + " m=m,\n", + " column=\"Transit Operator\",\n", + " tiles=\"CartoDB Positron\",\n", + " categorical=True,\n", + " legend=True,\n", + " legend_kwds={\"width\": 200},\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "b7ba26f7-09b1-4b83-aab0-52c96a8c3a7d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(m)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "d10e25ae-1904-4d0f-a670-f90232984952", + "metadata": {}, + "outputs": [], + "source": [ + "shared_cols = [\"organization_name\", \"name\"]\n", + "exclude_cols = [\n", + " \"schedule_gtfs_dataset_key\",\n", + " \"caltrans_district\",\n", + " \"organization_source_record_id\",\n", + " \"service_date\",\n", + " \"primary_uza\",\n", + "]\n", + "\n", + "gtfs_service_cols = [c for c in operator_df.columns if \"operator_\" in c]" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "c9a2ceb0-3511-4161-9c0f-13659a1240c5", + "metadata": {}, + "outputs": [], + "source": [ + "gtfs_table_df = (\n", + " operator_df2[shared_cols + gtfs_service_cols]\n", + " .pipe(_report_utils.replace_column_names)\n", + " .reset_index(drop=True)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "7c15a943-b480-407d-9b4f-4c29b968ac8d", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Organization', 'Transit Operator', '# Routes', '# Trips', '# Shapes',\n", + " '# Stops', '# Arrivals', 'Operator Service Miles',\n", + " 'Avg Arrivals per Stop'],\n", + " dtype='object')" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gtfs_table_df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "7f2b427a-c32c-4c2c-b4b3-5a30b0181855", + "metadata": { + "tags": [] + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "
District 08 - San Bernardino / Riverside
Daily GTFS schedule statistics by operator
OrganizationTransit Operator# Routes# Trips# Shapes# Stops# ArrivalsOperator Service MilesAvg Arrivals per Stop
OmniTransOmniTrans Schedule291,682862,28579,380476.834.7
Riverside Transit AgencyRiverside Schedule351,1931072,13553,626713.825.1
Victor Valley Transit AuthorityVictor Valley Schedule33866751,05721,141850.020.0
SunLine Transit AgencySunLine Avail Schedule194763556615,339426.727.1
Mountain Area Regional Transit AuthorityMountain Transit Schedule7138271363,121150.822.9
City of BeaumontBeaumont Transit Schedule8123291281,548126.512.1
Basin TransitMorongo Basin Schedule789241692,457181.514.5
Palo Verde Valley Transit AgencyDesert Roadrunner GMV Schedule554939472220.112.1
City of BanningBanning Pass Schedule25382241948.819.1
City of CoronaCorona Schedule25181672,33926.314.0
Chemehuevi Indian TribeHavasu Landing Ferry Schedule13422683.534.0
City of NeedlesNeedles Schedule11213238414.112.0
\n", + "\n", + "
\n", + " " + ], + "text/plain": [ + "GT(_tbl_data= Organization Transit Operator \\\n", + "6 OmniTrans OmniTrans Schedule \n", + "7 Riverside Transit Agency Riverside Schedule \n", + "8 Victor Valley Transit Authority Victor Valley Schedule \n", + "9 SunLine Transit Agency SunLine Avail Schedule \n", + "4 Mountain Area Regional Transit Authority Mountain Transit Schedule \n", + "10 City of Beaumont Beaumont Transit Schedule \n", + "3 Basin Transit Morongo Basin Schedule \n", + "11 Palo Verde Valley Transit Agency Desert Roadrunner GMV Schedule \n", + "0 City of Banning Banning Pass Schedule \n", + "1 City of Corona Corona Schedule \n", + "2 Chemehuevi Indian Tribe Havasu Landing Ferry Schedule \n", + "5 City of Needles Needles Schedule \n", + "\n", + " # Routes # Trips # Shapes # Stops # Arrivals Operator Service Miles \\\n", + "6 29 1682 86 2285 79380 476.83 \n", + "7 35 1193 107 2135 53626 713.75 \n", + "8 33 866 75 1057 21141 849.99 \n", + "9 19 476 35 566 15339 426.67 \n", + "4 7 138 27 136 3121 150.85 \n", + "10 8 123 29 128 1548 126.48 \n", + "3 7 89 24 169 2457 181.54 \n", + "11 5 54 9 39 472 220.10 \n", + "0 2 53 8 22 419 48.84 \n", + "1 2 51 8 167 2339 26.29 \n", + "2 1 34 2 2 68 3.47 \n", + "5 1 12 1 32 384 14.05 \n", + "\n", + " Avg Arrivals per Stop \n", + "6 34.74 \n", + "7 25.12 \n", + "8 20.00 \n", + "9 27.10 \n", + "4 22.95 \n", + "10 12.09 \n", + "3 14.54 \n", + "11 12.10 \n", + "0 19.05 \n", + "1 14.01 \n", + "2 34.00 \n", + "5 12.00 , _body=, _boxhead=Boxhead([ColInfo(var='Organization', type=, column_label='Organization', column_align='left', column_width=None), ColInfo(var='Transit Operator', type=, column_label='Transit Operator', column_align='left', column_width=None), ColInfo(var='# Routes', type=, column_label='# Routes', column_align='center', column_width=None), ColInfo(var='# Trips', type=, column_label='# Trips', column_align='center', column_width=None), ColInfo(var='# Shapes', type=, column_label='# Shapes', column_align='center', column_width=None), ColInfo(var='# Stops', type=, column_label='# Stops', column_align='center', column_width=None), ColInfo(var='# Arrivals', type=, column_label='# Arrivals', column_align='center', column_width=None), ColInfo(var='Operator Service Miles', type=, column_label='Operator Service Miles', column_align='center', column_width=None), ColInfo(var='Avg Arrivals per Stop', type=, column_label='Avg Arrivals per Stop', column_align='center', column_width=None)]), _stub=, _spanners=Spanners([]), _heading=Heading(title='District 08 - San Bernardino / Riverside', subtitle='Daily GTFS schedule statistics by operator', preheader=None), _stubhead=None, _source_notes=[], _footnotes=[], _styles=[StyleInfo(locname=LocBody(columns='# Trips', rows=[0], mask=None), grpname=None, colname='# Trips', rownum=0, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#f9fcf9')]), StyleInfo(locname=LocBody(columns='# Trips', rows=[1], mask=None), grpname=None, colname='# Trips', rownum=1, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#f9fcf9')]), StyleInfo(locname=LocBody(columns='# Trips', rows=[2], mask=None), grpname=None, colname='# Trips', rownum=2, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#fcfdfc')]), StyleInfo(locname=LocBody(columns='# Trips', rows=[3], mask=None), grpname=None, colname='# Trips', rownum=3, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#f3f9f3')]), StyleInfo(locname=LocBody(columns='# Trips', rows=[4], mask=None), grpname=None, colname='# Trips', rownum=4, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#ecf5ec')]), StyleInfo(locname=LocBody(columns='# Trips', rows=[5], mask=None), grpname=None, colname='# Trips', rownum=5, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#ffffff')]), StyleInfo(locname=LocBody(columns='# Trips', rows=[6], mask=None), grpname=None, colname='# Trips', rownum=6, colnum=None, styles=[CellStyleText(color='#FFFFFF', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#008000')]), StyleInfo(locname=LocBody(columns='# Trips', rows=[7], mask=None), grpname=None, colname='# Trips', rownum=7, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#4ba54b')]), StyleInfo(locname=LocBody(columns='# Trips', rows=[8], mask=None), grpname=None, colname='# Trips', rownum=8, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#7dbe7d')]), StyleInfo(locname=LocBody(columns='# Trips', rows=[9], mask=None), grpname=None, colname='# Trips', rownum=9, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#b8dcb8')]), StyleInfo(locname=LocBody(columns='# Trips', rows=[10], mask=None), grpname=None, colname='# Trips', rownum=10, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#eef7ee')]), StyleInfo(locname=LocBody(columns='# Trips', rows=[11], mask=None), grpname=None, colname='# Trips', rownum=11, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#f9fcf9')]), StyleInfo(locname=LocBody(columns='Avg Arrivals per Stop', rows=[0], mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=0, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#b0d8b0')]), StyleInfo(locname=LocBody(columns='Avg Arrivals per Stop', rows=[1], mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=1, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#e8f4e8')]), StyleInfo(locname=LocBody(columns='Avg Arrivals per Stop', rows=[2], mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=2, colnum=None, styles=[CellStyleText(color='#FFFFFF', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#088408')]), StyleInfo(locname=LocBody(columns='Avg Arrivals per Stop', rows=[3], mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=3, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#e3f1e3')]), StyleInfo(locname=LocBody(columns='Avg Arrivals per Stop', rows=[4], mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=4, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#84c284')]), StyleInfo(locname=LocBody(columns='Avg Arrivals per Stop', rows=[5], mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=5, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#ffffff')]), StyleInfo(locname=LocBody(columns='Avg Arrivals per Stop', rows=[6], mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=6, colnum=None, styles=[CellStyleText(color='#FFFFFF', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#008000')]), StyleInfo(locname=LocBody(columns='Avg Arrivals per Stop', rows=[7], mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=7, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#6cb66c')]), StyleInfo(locname=LocBody(columns='Avg Arrivals per Stop', rows=[8], mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=8, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#a5d2a5')]), StyleInfo(locname=LocBody(columns='Avg Arrivals per Stop', rows=[9], mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=9, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#56ab56')]), StyleInfo(locname=LocBody(columns='Avg Arrivals per Stop', rows=[10], mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=10, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#fefefe')]), StyleInfo(locname=LocBody(columns='Avg Arrivals per Stop', rows=[11], mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=11, colnum=None, styles=[CellStyleText(color='#000000', font=None, size=None, align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None), CellStyleFill(color='#fefefe')]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Organization', rownum=0, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Organization', rownum=1, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Organization', rownum=2, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Organization', rownum=3, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Organization', rownum=4, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Organization', rownum=5, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Organization', rownum=6, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Organization', rownum=7, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Organization', rownum=8, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Organization', rownum=9, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Organization', rownum=10, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Organization', rownum=11, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Transit Operator', rownum=0, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Transit Operator', rownum=1, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Transit Operator', rownum=2, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Transit Operator', rownum=3, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Transit Operator', rownum=4, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Transit Operator', rownum=5, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Transit Operator', rownum=6, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Transit Operator', rownum=7, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Transit Operator', rownum=8, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Transit Operator', rownum=9, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Transit Operator', rownum=10, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Transit Operator', rownum=11, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Routes', rownum=0, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Routes', rownum=1, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Routes', rownum=2, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Routes', rownum=3, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Routes', rownum=4, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Routes', rownum=5, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Routes', rownum=6, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Routes', rownum=7, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Routes', rownum=8, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Routes', rownum=9, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Routes', rownum=10, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Routes', rownum=11, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Trips', rownum=0, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Trips', rownum=1, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Trips', rownum=2, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Trips', rownum=3, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Trips', rownum=4, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Trips', rownum=5, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Trips', rownum=6, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Trips', rownum=7, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Trips', rownum=8, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Trips', rownum=9, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Trips', rownum=10, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Trips', rownum=11, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Shapes', rownum=0, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Shapes', rownum=1, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Shapes', rownum=2, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Shapes', rownum=3, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Shapes', rownum=4, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Shapes', rownum=5, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Shapes', rownum=6, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Shapes', rownum=7, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Shapes', rownum=8, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Shapes', rownum=9, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Shapes', rownum=10, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Shapes', rownum=11, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Stops', rownum=0, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Stops', rownum=1, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Stops', rownum=2, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Stops', rownum=3, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Stops', rownum=4, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Stops', rownum=5, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Stops', rownum=6, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Stops', rownum=7, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Stops', rownum=8, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Stops', rownum=9, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Stops', rownum=10, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Stops', rownum=11, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Arrivals', rownum=0, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Arrivals', rownum=1, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Arrivals', rownum=2, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Arrivals', rownum=3, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Arrivals', rownum=4, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Arrivals', rownum=5, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Arrivals', rownum=6, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Arrivals', rownum=7, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Arrivals', rownum=8, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Arrivals', rownum=9, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Arrivals', rownum=10, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='# Arrivals', rownum=11, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Operator Service Miles', rownum=0, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Operator Service Miles', rownum=1, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Operator Service Miles', rownum=2, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Operator Service Miles', rownum=3, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Operator Service Miles', rownum=4, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Operator Service Miles', rownum=5, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Operator Service Miles', rownum=6, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Operator Service Miles', rownum=7, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Operator Service Miles', rownum=8, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Operator Service Miles', rownum=9, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Operator Service Miles', rownum=10, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Operator Service Miles', rownum=11, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=0, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=1, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=2, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=3, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=4, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=5, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=6, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=7, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=8, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=9, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=10, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)]), StyleInfo(locname=LocBody(columns=None, rows=None, mask=None), grpname=None, colname='Avg Arrivals per Stop', rownum=11, colnum=None, styles=[CellStyleText(color=None, font=None, size='14px', align=None, v_align=None, style=None, weight=None, stretch=None, decorate=None, transform=None, whitespace=None)])], _locale=, _formats=[, ], _substitutions=[], _options=Options(table_id=OptionsInfo(scss=False, category='table', type='value', value=None), table_caption=OptionsInfo(scss=False, category='table', type='value', value=None), table_width=OptionsInfo(scss=True, category='table', type='px', value='auto'), table_layout=OptionsInfo(scss=True, category='table', type='value', value='fixed'), table_margin_left=OptionsInfo(scss=True, category='table', type='px', value='auto'), table_margin_right=OptionsInfo(scss=True, category='table', type='px', value='auto'), table_background_color=OptionsInfo(scss=True, category='table', type='value', value='white'), table_additional_css=OptionsInfo(scss=False, category='table', type='values', value=[]), table_font_names=OptionsInfo(scss=False, category='table', type='values', value=['-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Helvetica Neue', 'Fira Sans', 'Droid Sans', 'Arial', 'sans-serif']), table_font_size=OptionsInfo(scss=True, category='table', type='px', value='16px'), table_font_weight=OptionsInfo(scss=True, category='table', type='value', value='normal'), table_font_style=OptionsInfo(scss=True, category='table', type='value', value='normal'), table_font_color=OptionsInfo(scss=True, category='table', type='value', value='#333333'), table_font_color_light=OptionsInfo(scss=True, category='table', type='value', value='#FFFFFF'), table_border_top_include=OptionsInfo(scss=False, category='table', type='boolean', value=True), table_border_top_style=OptionsInfo(scss=True, category='table', type='value', value='solid'), table_border_top_width=OptionsInfo(scss=True, category='table', type='px', value='2px'), table_border_top_color=OptionsInfo(scss=True, category='table', type='value', value='#A8A8A8'), table_border_right_style=OptionsInfo(scss=True, category='table', type='value', value='none'), table_border_right_width=OptionsInfo(scss=True, category='table', type='px', value='2px'), table_border_right_color=OptionsInfo(scss=True, category='table', type='value', value='#D3D3D3'), table_border_bottom_include=OptionsInfo(scss=False, category='table', type='boolean', value=True), table_border_bottom_style=OptionsInfo(scss=True, category='table', type='value', value='solid'), table_border_bottom_width=OptionsInfo(scss=True, category='table', type='px', value='2px'), table_border_bottom_color=OptionsInfo(scss=True, category='table', type='value', value='#A8A8A8'), table_border_left_style=OptionsInfo(scss=True, category='table', type='value', value='none'), table_border_left_width=OptionsInfo(scss=True, category='table', type='px', value='2px'), table_border_left_color=OptionsInfo(scss=True, category='table', type='value', value='#D3D3D3'), heading_background_color=OptionsInfo(scss=True, category='heading', type='value', value='white'), heading_align=OptionsInfo(scss=True, category='heading', type='value', value='center'), heading_title_font_size=OptionsInfo(scss=True, category='heading', type='px', value='125%'), heading_title_font_weight=OptionsInfo(scss=True, category='heading', type='value', value='initial'), heading_subtitle_font_size=OptionsInfo(scss=True, category='heading', type='px', value='85%'), heading_subtitle_font_weight=OptionsInfo(scss=True, category='heading', type='value', value='initial'), heading_padding=OptionsInfo(scss=True, category='heading', type='px', value='4px'), heading_padding_horizontal=OptionsInfo(scss=True, category='heading', type='px', value='5px'), heading_border_bottom_style=OptionsInfo(scss=True, category='heading', type='value', value='solid'), heading_border_bottom_width=OptionsInfo(scss=True, category='heading', type='px', value='2px'), heading_border_bottom_color=OptionsInfo(scss=True, category='heading', type='value', value='#D3D3D3'), heading_border_lr_style=OptionsInfo(scss=True, category='heading', type='value', value='none'), heading_border_lr_width=OptionsInfo(scss=True, category='heading', type='px', value='1px'), heading_border_lr_color=OptionsInfo(scss=True, category='heading', type='value', value='#D3D3D3'), column_labels_background_color=OptionsInfo(scss=True, category='column_labels', type='value', value='white'), column_labels_font_size=OptionsInfo(scss=True, category='column_labels', type='px', value='100%'), column_labels_font_weight=OptionsInfo(scss=True, category='column_labels', type='value', value='normal'), column_labels_text_transform=OptionsInfo(scss=True, category='column_labels', type='value', value='inherit'), column_labels_padding=OptionsInfo(scss=True, category='column_labels', type='px', value='5px'), column_labels_padding_horizontal=OptionsInfo(scss=True, category='column_labels', type='px', value='5px'), column_labels_vlines_style=OptionsInfo(scss=True, category='table_body', type='value', value='none'), column_labels_vlines_width=OptionsInfo(scss=True, category='table_body', type='px', value='1px'), column_labels_vlines_color=OptionsInfo(scss=True, category='table_body', type='value', value='#D3D3D3'), column_labels_border_top_style=OptionsInfo(scss=True, category='column_labels', type='value', value='solid'), column_labels_border_top_width=OptionsInfo(scss=True, category='column_labels', type='px', value='2px'), column_labels_border_top_color=OptionsInfo(scss=True, category='column_labels', type='value', value='#D3D3D3'), column_labels_border_bottom_style=OptionsInfo(scss=True, category='column_labels', type='value', value='solid'), column_labels_border_bottom_width=OptionsInfo(scss=True, category='column_labels', type='px', value='2px'), column_labels_border_bottom_color=OptionsInfo(scss=True, category='column_labels', type='value', value='#D3D3D3'), column_labels_border_lr_style=OptionsInfo(scss=True, category='column_labels', type='value', value='none'), column_labels_border_lr_width=OptionsInfo(scss=True, category='column_labels', type='px', value='1px'), column_labels_border_lr_color=OptionsInfo(scss=True, category='column_labels', type='value', value='#D3D3D3'), column_labels_hidden=OptionsInfo(scss=False, category='column_labels', type='boolean', value=False), row_group_background_color=OptionsInfo(scss=True, category='row_group', type='value', value='white'), row_group_font_size=OptionsInfo(scss=True, category='row_group', type='px', value='100%'), row_group_font_weight=OptionsInfo(scss=True, category='row_group', type='value', value='initial'), row_group_text_transform=OptionsInfo(scss=True, category='row_group', type='value', value='inherit'), row_group_padding=OptionsInfo(scss=True, category='row_group', type='px', value='8px'), row_group_padding_horizontal=OptionsInfo(scss=True, category='row_group', type='px', value='5px'), row_group_border_top_style=OptionsInfo(scss=True, category='row_group', type='value', value='solid'), row_group_border_top_width=OptionsInfo(scss=True, category='row_group', type='px', value='2px'), row_group_border_top_color=OptionsInfo(scss=True, category='row_group', type='value', value='#D3D3D3'), row_group_border_right_style=OptionsInfo(scss=True, category='row_group', type='value', value='none'), row_group_border_right_width=OptionsInfo(scss=True, category='row_group', type='px', value='1px'), row_group_border_right_color=OptionsInfo(scss=True, category='row_group', type='value', value='#D3D3D3'), row_group_border_bottom_style=OptionsInfo(scss=True, category='row_group', type='value', value='solid'), row_group_border_bottom_width=OptionsInfo(scss=True, category='row_group', type='px', value='2px'), row_group_border_bottom_color=OptionsInfo(scss=True, category='row_group', type='value', value='#D3D3D3'), row_group_border_left_style=OptionsInfo(scss=True, category='row_group', type='value', value='none'), row_group_border_left_width=OptionsInfo(scss=True, category='row_group', type='px', value='1px'), row_group_border_left_color=OptionsInfo(scss=True, category='row_group', type='value', value='#D3D3D3'), row_group_as_column=OptionsInfo(scss=False, category='row_group', type='boolean', value=False), table_body_hlines_style=OptionsInfo(scss=True, category='table_body', type='value', value='none'), table_body_hlines_width=OptionsInfo(scss=True, category='table_body', type='px', value='1px'), table_body_hlines_color=OptionsInfo(scss=True, category='table_body', type='value', value='#D3D3D3'), table_body_vlines_style=OptionsInfo(scss=True, category='table_body', type='value', value='none'), table_body_vlines_width=OptionsInfo(scss=True, category='table_body', type='px', value='1px'), table_body_vlines_color=OptionsInfo(scss=True, category='table_body', type='value', value='#D3D3D3'), table_body_border_top_style=OptionsInfo(scss=True, category='table_body', type='value', value='solid'), table_body_border_top_width=OptionsInfo(scss=True, category='table_body', type='px', value='2px'), table_body_border_top_color=OptionsInfo(scss=True, category='table_body', type='value', value='#D3D3D3'), table_body_border_bottom_style=OptionsInfo(scss=True, category='table_body', type='value', value='solid'), table_body_border_bottom_width=OptionsInfo(scss=True, category='table_body', type='px', value='2px'), table_body_border_bottom_color=OptionsInfo(scss=True, category='table_body', type='value', value='#D3D3D3'), data_row_padding=OptionsInfo(scss=True, category='data_row', type='px', value='8px'), data_row_padding_horizontal=OptionsInfo(scss=True, category='data_row', type='px', value='5px'), stub_background_color=OptionsInfo(scss=True, category='stub', type='value', value='white'), stub_font_size=OptionsInfo(scss=True, category='stub', type='px', value='100%'), stub_font_weight=OptionsInfo(scss=True, category='stub', type='value', value='initial'), stub_text_transform=OptionsInfo(scss=True, category='stub', type='value', value='inherit'), stub_border_style=OptionsInfo(scss=True, category='stub', type='value', value='solid'), stub_border_width=OptionsInfo(scss=True, category='stub', type='px', value='2px'), stub_border_color=OptionsInfo(scss=True, category='stub', type='value', value='#D3D3D3'), stub_row_group_background_color=OptionsInfo(scss=True, category='stub', type='value', value=None), stub_row_group_font_size=OptionsInfo(scss=True, category='stub', type='px', value='100%'), stub_row_group_font_weight=OptionsInfo(scss=True, category='stub', type='value', value='initial'), stub_row_group_text_transform=OptionsInfo(scss=True, category='stub', type='value', value='inherit'), stub_row_group_border_style=OptionsInfo(scss=True, category='stub', type='value', value='solid'), stub_row_group_border_width=OptionsInfo(scss=True, category='stub', type='px', value='2px'), stub_row_group_border_color=OptionsInfo(scss=True, category='stub', type='value', value='#D3D3D3'), source_notes_padding=OptionsInfo(scss=True, category='source_notes', type='px', value='4px'), source_notes_padding_horizontal=OptionsInfo(scss=True, category='source_notes', type='px', value='5px'), source_notes_background_color=OptionsInfo(scss=True, category='source_notes', type='value', value='white'), source_notes_font_size=OptionsInfo(scss=True, category='source_notes', type='px', value='90%'), source_notes_border_bottom_style=OptionsInfo(scss=True, category='source_notes', type='value', value='none'), source_notes_border_bottom_width=OptionsInfo(scss=True, category='source_notes', type='px', value='2px'), source_notes_border_bottom_color=OptionsInfo(scss=True, category='source_notes', type='value', value='#D3D3D3'), source_notes_border_lr_style=OptionsInfo(scss=True, category='source_notes', type='value', value='none'), source_notes_border_lr_width=OptionsInfo(scss=True, category='source_notes', type='px', value='2px'), source_notes_border_lr_color=OptionsInfo(scss=True, category='source_notes', type='value', value='#D3D3D3'), source_notes_multiline=OptionsInfo(scss=False, category='source_notes', type='boolean', value=True), source_notes_sep=OptionsInfo(scss=False, category='source_notes', type='value', value=' '), row_striping_background_color=OptionsInfo(scss=True, category='row', type='value', value='rgba(128,128,128,0.05)'), row_striping_include_stub=OptionsInfo(scss=False, category='row', type='boolean', value=False), row_striping_include_table_body=OptionsInfo(scss=False, category='row', type='boolean', value=False), container_width=OptionsInfo(scss=False, category='container', type='px', value='100%'), container_height=OptionsInfo(scss=False, category='container', type='px', value='auto'), container_padding_x=OptionsInfo(scss=False, category='container', type='px', value='0px'), container_padding_y=OptionsInfo(scss=False, category='container', type='px', value='10px'), container_overflow_x=OptionsInfo(scss=False, category='container', type='overflow', value='auto'), container_overflow_y=OptionsInfo(scss=False, category='container', type='overflow', value='auto'), quarto_disable_processing=OptionsInfo(scss=False, category='quarto', type='logical', value=False), quarto_use_bootstrap=OptionsInfo(scss=False, category='quarto', type='logical', value=False)), _has_built=False)" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "string_cols = gtfs_table_df.select_dtypes(include=\"object\").columns.tolist()\n", + "\n", + "gtfs_table = (\n", + " GT(gtfs_table_df.sort_values(\"# Trips\", ascending=False))\n", + " .fmt_integer(\n", + " columns=[\n", + " c\n", + " for c in gtfs_table_df.columns\n", + " if c not in [\"Operator Service Miles\", \"Avg Arrivals per Stop\"]\n", + " and (c not in string_cols)\n", + " ]\n", + " )\n", + " .fmt_number(columns=[\"Operator Service Miles\", \"Avg Arrivals per Stop\"], decimals=1)\n", + " .data_color(\n", + " columns=[\"# Trips\", \"Avg Arrivals per Stop\"],\n", + " palette=[\"white\", \"green\"],\n", + " na_color=\"lightgray\",\n", + " )\n", + " .tab_header(\n", + " title=f\"District {district}\",\n", + " subtitle=\"Daily GTFS schedule statistics by operator\",\n", + " )\n", + " .cols_align(\n", + " columns=[\n", + " c\n", + " for c in gtfs_table_df.columns\n", + " if c not in [\"Organization\", \"Transit Operator\"]\n", + " ],\n", + " align=\"center\",\n", + " )\n", + ")\n", + "\n", + "gtfs_table = _report_utils.great_table_formatting(gtfs_table)\n", + "gtfs_table" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/gtfs_digest/quarterly_rollup.py b/gtfs_digest/quarterly_rollup.py index 1b565838c9..cb66757cca 100644 --- a/gtfs_digest/quarterly_rollup.py +++ b/gtfs_digest/quarterly_rollup.py @@ -14,7 +14,7 @@ ] groupby_cols = [ - "schedule_gtfs_dataset_key", + "portfolio_organization_name", "year_quarter", "direction_id", "time_period", @@ -36,9 +36,7 @@ ] crosswalk_cols = [ "base64_url", - "organization_source_record_id", "portfolio_organization_name", - "organization_name", "caltrans_district", "route_primary_direction", "name", diff --git a/portfolio/district_digest/_config.yml b/portfolio/district_digest/_config.yml index 25f5274589..6b6b63e106 100644 --- a/portfolio/district_digest/_config.yml +++ b/portfolio/district_digest/_config.yml @@ -3,7 +3,7 @@ title: District GTFS Digest author: Cal-ITP -copyright: "2024" +copyright: "2025" #logo: calitp_logo_MAIN.png # Force re-execution of notebooks on each build. diff --git a/portfolio/district_digest/_toc.yml b/portfolio/district_digest/_toc.yml index 72f134342f..fe0b5dadcf 100644 --- a/portfolio/district_digest/_toc.yml +++ b/portfolio/district_digest/_toc.yml @@ -4,14 +4,13 @@ parts: chapters: - file: district_01-eureka/00__district_report__district_01-eureka.ipynb - file: district_02-redding/00__district_report__district_02-redding.ipynb - - file: district_03-marysville/00__district_report__district_03-marysville.ipynb - - file: district_04-oakland/00__district_report__district_04-oakland.ipynb - - file: district_05-san-luis-obispo/00__district_report__district_05-san-luis-obispo.ipynb - - file: district_06-fresno/00__district_report__district_06-fresno.ipynb - - file: district_07-los-angeles/00__district_report__district_07-los-angeles.ipynb - - file: district_08-san-bernardino/00__district_report__district_08-san-bernardino.ipynb - - file: district_09-bishop/00__district_report__district_09-bishop.ipynb + - file: district_03-marysville-sacramento/00__district_report__district_03-marysville-sacramento.ipynb + - file: district_04-bay-area-oakland/00__district_report__district_04-bay-area-oakland.ipynb + - file: district_05-san-luis-obispo-santa-barbara/00__district_report__district_05-san-luis-obispo-santa-barbara.ipynb + - file: district_06-fresno-bakersfield/00__district_report__district_06-fresno-bakersfield.ipynb + - file: district_07-los-angeles-ventura/00__district_report__district_07-los-angeles-ventura.ipynb + - file: district_08-san-bernardino-riverside/00__district_report__district_08-san-bernardino-riverside.ipynb - file: district_10-stockton/00__district_report__district_10-stockton.ipynb - file: district_11-san-diego/00__district_report__district_11-san-diego.ipynb - - file: district_12-irvine/00__district_report__district_12-irvine.ipynb + - file: district_12-santa-ana/00__district_report__district_12-santa-ana.ipynb root: README diff --git a/portfolio/district_digest/district_01-eureka/00__district_report__district_01-eureka.ipynb b/portfolio/district_digest/district_01-eureka/00__district_report__district_01-eureka.ipynb index f86225556f..7da189dadc 100644 --- a/portfolio/district_digest/district_01-eureka/00__district_report__district_01-eureka.ipynb +++ b/portfolio/district_digest/district_01-eureka/00__district_report__district_01-eureka.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7992b1592066f102280a8f52dd9a4e27e49d87aef444ebf029fe17bfe239809c -size 3448222 +oid sha256:1cc6fb43472211e836969210c6323b9ff4c3798a26ef4ad9d3ca0d2cd9fca2fd +size 20848049 diff --git a/portfolio/district_digest/district_02-redding/00__district_report__district_02-redding.ipynb b/portfolio/district_digest/district_02-redding/00__district_report__district_02-redding.ipynb index a386f3a8ba..8940d251be 100644 --- a/portfolio/district_digest/district_02-redding/00__district_report__district_02-redding.ipynb +++ b/portfolio/district_digest/district_02-redding/00__district_report__district_02-redding.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a185a0ab0d01aa57a5f9f67ef860a0567edeaa2ec819c1cc76f0ce5fecbafc19 -size 2429604 +oid sha256:0b2f310e30e2c0876bb5112f66365fa21c8be781e2c61581f4de937032932bfc +size 18432222 diff --git a/portfolio/district_digest/district_03-marysville-sacramento/00__district_report__district_03-marysville-sacramento.ipynb b/portfolio/district_digest/district_03-marysville-sacramento/00__district_report__district_03-marysville-sacramento.ipynb new file mode 100644 index 0000000000..05942cfab9 --- /dev/null +++ b/portfolio/district_digest/district_03-marysville-sacramento/00__district_report__district_03-marysville-sacramento.ipynb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:157820f58cb8c05b6b83889fd3b3bf7c7dc9880c6eb61ff7ca3104cc1341430d +size 21695763 diff --git a/portfolio/district_digest/district_04-bay-area-oakland/00__district_report__district_04-bay-area-oakland.ipynb b/portfolio/district_digest/district_04-bay-area-oakland/00__district_report__district_04-bay-area-oakland.ipynb new file mode 100644 index 0000000000..f1c14791ca --- /dev/null +++ b/portfolio/district_digest/district_04-bay-area-oakland/00__district_report__district_04-bay-area-oakland.ipynb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ded930cb7ecbae4639af37a6980ba9d30ca289fb8a85c883d1d8d006d51a22e6 +size 47206247 diff --git a/portfolio/district_digest/district_05-san-luis-obispo-santa-barbara/00__district_report__district_05-san-luis-obispo-santa-barbara.ipynb b/portfolio/district_digest/district_05-san-luis-obispo-santa-barbara/00__district_report__district_05-san-luis-obispo-santa-barbara.ipynb new file mode 100644 index 0000000000..bd07fb80db --- /dev/null +++ b/portfolio/district_digest/district_05-san-luis-obispo-santa-barbara/00__district_report__district_05-san-luis-obispo-santa-barbara.ipynb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edc0ebaeff332c0df9650f80db6656e5da3cae8bd93c0bcf575c200a59caf90b +size 23689006 diff --git a/portfolio/district_digest/district_06-fresno-bakersfield/00__district_report__district_06-fresno-bakersfield.ipynb b/portfolio/district_digest/district_06-fresno-bakersfield/00__district_report__district_06-fresno-bakersfield.ipynb new file mode 100644 index 0000000000..fb11e8cc99 --- /dev/null +++ b/portfolio/district_digest/district_06-fresno-bakersfield/00__district_report__district_06-fresno-bakersfield.ipynb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de331da1961cf2df3dcd2f7251771ae9af2c65cda443084ce20646d50ece18fb +size 17848877 diff --git a/portfolio/district_digest/district_07-los-angeles-ventura/00__district_report__district_07-los-angeles-ventura.ipynb b/portfolio/district_digest/district_07-los-angeles-ventura/00__district_report__district_07-los-angeles-ventura.ipynb new file mode 100644 index 0000000000..87fc41f284 --- /dev/null +++ b/portfolio/district_digest/district_07-los-angeles-ventura/00__district_report__district_07-los-angeles-ventura.ipynb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a0212d1ea5f82706c12ebe8d9e583bc0a8cbe2510ead832f2ed7e5ec9241068 +size 34602935 diff --git a/portfolio/district_digest/district_08-san-bernardino-riverside/00__district_report__district_08-san-bernardino-riverside.ipynb b/portfolio/district_digest/district_08-san-bernardino-riverside/00__district_report__district_08-san-bernardino-riverside.ipynb new file mode 100644 index 0000000000..6ffe5897fc --- /dev/null +++ b/portfolio/district_digest/district_08-san-bernardino-riverside/00__district_report__district_08-san-bernardino-riverside.ipynb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:504351028a4076f7d549d9ac080db5accf2d1ee06f15ff25008382105e55afff +size 22967871 diff --git a/portfolio/district_digest/district_10-stockton/00__district_report__district_10-stockton.ipynb b/portfolio/district_digest/district_10-stockton/00__district_report__district_10-stockton.ipynb index b94e81fbcf..c66b27b903 100644 --- a/portfolio/district_digest/district_10-stockton/00__district_report__district_10-stockton.ipynb +++ b/portfolio/district_digest/district_10-stockton/00__district_report__district_10-stockton.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f32ff68817e139c998465df746c7d6cde82fdc20372dd30410eebb3bd744fc47 -size 5488401 +oid sha256:b4e854511ffc73d565a1cb8b90f833132925a0a0e7fa96d2762cd8c7748c646b +size 19453212 diff --git a/portfolio/district_digest/district_11-san-diego/00__district_report__district_11-san-diego.ipynb b/portfolio/district_digest/district_11-san-diego/00__district_report__district_11-san-diego.ipynb index ac4a5b2823..cac404e12b 100644 --- a/portfolio/district_digest/district_11-san-diego/00__district_report__district_11-san-diego.ipynb +++ b/portfolio/district_digest/district_11-san-diego/00__district_report__district_11-san-diego.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db76286484708914fcaed913b10ea0c8b1575908cebbcae08c90237573e4123c -size 2605681 +oid sha256:7ecf4f0edb9ff50cfbc18cf856d8459f491d251bd7140dd761e6440ba8f2f16f +size 9482223 diff --git a/portfolio/district_digest/district_12-santa-ana/00__district_report__district_12-santa-ana.ipynb b/portfolio/district_digest/district_12-santa-ana/00__district_report__district_12-santa-ana.ipynb new file mode 100644 index 0000000000..28dbc26fb3 --- /dev/null +++ b/portfolio/district_digest/district_12-santa-ana/00__district_report__district_12-santa-ana.ipynb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:657b83d5321e1a4e2a8910e3e3838f7bd07c2024cdb5d3334ce6eb0893e09b87 +size 7194137 diff --git a/portfolio/legislative_district_digest/_config.yml b/portfolio/legislative_district_digest/_config.yml index 0da1fd3815..99e0b8e0b9 100644 --- a/portfolio/legislative_district_digest/_config.yml +++ b/portfolio/legislative_district_digest/_config.yml @@ -3,7 +3,7 @@ title: Legislative District GTFS Digest author: Cal-ITP -copyright: "2024" +copyright: "2025" #logo: calitp_logo_MAIN.png # Force re-execution of notebooks on each build. diff --git a/portfolio/legislative_district_digest/district_ad-01/00__legislative_district_report__district_ad-01.ipynb b/portfolio/legislative_district_digest/district_ad-01/00__legislative_district_report__district_ad-01.ipynb index f613d7558d..02452d8c50 100644 --- a/portfolio/legislative_district_digest/district_ad-01/00__legislative_district_report__district_ad-01.ipynb +++ b/portfolio/legislative_district_digest/district_ad-01/00__legislative_district_report__district_ad-01.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70a4bd77f75b18a40a72fd520cabdd5d0ba2ee69f6ec64a45ee287df588e098f -size 23361158 +oid sha256:08dcbb30a94d64780e481972a48199d07660b5045a0c7e2a4dec0ac7e05ff0a4 +size 165398 diff --git a/portfolio/legislative_district_digest/district_ad-02/00__legislative_district_report__district_ad-02.ipynb b/portfolio/legislative_district_digest/district_ad-02/00__legislative_district_report__district_ad-02.ipynb index eea5c35dfa..50bff8b049 100644 --- a/portfolio/legislative_district_digest/district_ad-02/00__legislative_district_report__district_ad-02.ipynb +++ b/portfolio/legislative_district_digest/district_ad-02/00__legislative_district_report__district_ad-02.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b85db08510ef46bf3105256778c5519a8075ece0c0bafdd1c6d8e48407e94c30 -size 24261389 +oid sha256:eda8ee2510c75b5371c734cff46f5388a765545646c624f9d63506c24e09da09 +size 156981 diff --git a/portfolio/legislative_district_digest/district_ad-03/00__legislative_district_report__district_ad-03.ipynb b/portfolio/legislative_district_digest/district_ad-03/00__legislative_district_report__district_ad-03.ipynb index 8709a0bac3..cd8d849c23 100644 --- a/portfolio/legislative_district_digest/district_ad-03/00__legislative_district_report__district_ad-03.ipynb +++ b/portfolio/legislative_district_digest/district_ad-03/00__legislative_district_report__district_ad-03.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:914bc9140b2888156b2924b9027d2300aeac0989c77ca86525ed1469e96c5292 -size 20365045 +oid sha256:44928d0361cf8c98ac66568eab8da4eecc4a1c07585a76c8665929e15799ae65 +size 128927 diff --git a/portfolio/legislative_district_digest/district_ad-04/00__legislative_district_report__district_ad-04.ipynb b/portfolio/legislative_district_digest/district_ad-04/00__legislative_district_report__district_ad-04.ipynb index df5470b76f..4d1fafbbb8 100644 --- a/portfolio/legislative_district_digest/district_ad-04/00__legislative_district_report__district_ad-04.ipynb +++ b/portfolio/legislative_district_digest/district_ad-04/00__legislative_district_report__district_ad-04.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:41ae0442453e23e87f22be946d1f0e7487484a7d9ac88678a06a6cccff30f3f5 -size 24408892 +oid sha256:1a22b6057fa3e0bba580ce65a14e3a29c6f0ee38c6e6badb4a7cdc4fb74f3c0b +size 142899 diff --git a/portfolio/legislative_district_digest/district_ad-05/00__legislative_district_report__district_ad-05.ipynb b/portfolio/legislative_district_digest/district_ad-05/00__legislative_district_report__district_ad-05.ipynb index d20b0768ca..febb0d97d0 100644 --- a/portfolio/legislative_district_digest/district_ad-05/00__legislative_district_report__district_ad-05.ipynb +++ b/portfolio/legislative_district_digest/district_ad-05/00__legislative_district_report__district_ad-05.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7412ee824b11bfc21793f1b6c8b365b0d606d6b4cc3756380065afa4c7b9f020 -size 24646017 +oid sha256:6813c05509a18a3682e08ff1806862398cc50725f9280d7f4684f4dbcb437be7 +size 133642 diff --git a/portfolio/legislative_district_digest/district_ad-06/00__legislative_district_report__district_ad-06.ipynb b/portfolio/legislative_district_digest/district_ad-06/00__legislative_district_report__district_ad-06.ipynb index d31e7d56f8..58a75f4797 100644 --- a/portfolio/legislative_district_digest/district_ad-06/00__legislative_district_report__district_ad-06.ipynb +++ b/portfolio/legislative_district_digest/district_ad-06/00__legislative_district_report__district_ad-06.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f898aeb3a878cf7a7ec19b3775cc5abca41d79238dcc88cce22e34d23ad6c51f -size 29026078 +oid sha256:6414a5ed852d1ee0ac79b45077560f91c16630f3bdfb964387dd04172c42a509 +size 156374 diff --git a/portfolio/legislative_district_digest/district_ad-07/00__legislative_district_report__district_ad-07.ipynb b/portfolio/legislative_district_digest/district_ad-07/00__legislative_district_report__district_ad-07.ipynb index 881623610e..0426bfa33d 100644 --- a/portfolio/legislative_district_digest/district_ad-07/00__legislative_district_report__district_ad-07.ipynb +++ b/portfolio/legislative_district_digest/district_ad-07/00__legislative_district_report__district_ad-07.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b1609237693eaa0622d334bdb1d801216f07c885f242d23164c511c8f788dbfe -size 25326401 +oid sha256:8134328a4ca39db1545a11ffeb3b1336beb5a9b545ec77cc3d04f96892cefd59 +size 133663 diff --git a/portfolio/legislative_district_digest/district_ad-08/00__legislative_district_report__district_ad-08.ipynb b/portfolio/legislative_district_digest/district_ad-08/00__legislative_district_report__district_ad-08.ipynb index d4085f4b03..958af96434 100644 --- a/portfolio/legislative_district_digest/district_ad-08/00__legislative_district_report__district_ad-08.ipynb +++ b/portfolio/legislative_district_digest/district_ad-08/00__legislative_district_report__district_ad-08.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:043516a8bbd9a871bfd005942be6824f740bef74aeb10eb7a63e545628813a25 -size 20642868 +oid sha256:6f430e6c37484f00e5a63e3a2eb977b16fdd66fed4b7a56363d8ac3e24d22ea6 +size 156295 diff --git a/portfolio/legislative_district_digest/district_ad-09/00__legislative_district_report__district_ad-09.ipynb b/portfolio/legislative_district_digest/district_ad-09/00__legislative_district_report__district_ad-09.ipynb index 3f2b99c6d3..42af765641 100644 --- a/portfolio/legislative_district_digest/district_ad-09/00__legislative_district_report__district_ad-09.ipynb +++ b/portfolio/legislative_district_digest/district_ad-09/00__legislative_district_report__district_ad-09.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44abe0d4bc73244db073e862ea94ce73e8134379604e660eee94f9783791e34b -size 22157003 +oid sha256:40562cd7b1f970fd0fcd23f1e6f7f9b4f567d44c4868b35ad7912d06984843fe +size 147135 diff --git a/portfolio/legislative_district_digest/district_ad-10/00__legislative_district_report__district_ad-10.ipynb b/portfolio/legislative_district_digest/district_ad-10/00__legislative_district_report__district_ad-10.ipynb index e2f480b436..4a080e3cfc 100644 --- a/portfolio/legislative_district_digest/district_ad-10/00__legislative_district_report__district_ad-10.ipynb +++ b/portfolio/legislative_district_digest/district_ad-10/00__legislative_district_report__district_ad-10.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8d14692049342fdf1346668816771dccf42c4adc0f9c5dcadff29c499898456 -size 23377004 +oid sha256:c5df9d7a81652d197ba6fb10d572cfdbb1b814306540f74ef4e1855a3e0b1513 +size 124594 diff --git a/portfolio/legislative_district_digest/district_ad-11/00__legislative_district_report__district_ad-11.ipynb b/portfolio/legislative_district_digest/district_ad-11/00__legislative_district_report__district_ad-11.ipynb index a27c220729..34c85a6c73 100644 --- a/portfolio/legislative_district_digest/district_ad-11/00__legislative_district_report__district_ad-11.ipynb +++ b/portfolio/legislative_district_digest/district_ad-11/00__legislative_district_report__district_ad-11.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09eeac8740d17aa9c192ce647468907d95dad45be4b12477ee787531c99e50b4 -size 23715144 +oid sha256:a42e577b92ae1b267202dc724b250ff904a2e709f2c639c66b96d4ac4cb36311 +size 152381 diff --git a/portfolio/legislative_district_digest/district_ad-12/00__legislative_district_report__district_ad-12.ipynb b/portfolio/legislative_district_digest/district_ad-12/00__legislative_district_report__district_ad-12.ipynb index c4ebf652c2..cfbd38c1d8 100644 --- a/portfolio/legislative_district_digest/district_ad-12/00__legislative_district_report__district_ad-12.ipynb +++ b/portfolio/legislative_district_digest/district_ad-12/00__legislative_district_report__district_ad-12.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ba551af0529fa674c941a136b8f23099c716ecc0d5d3565e12e07c258c57106a -size 23756087 +oid sha256:9d76de4f6aa53b4c649f4c3aeaebf07bf95b48ca54df287611b96775d1cb0efd +size 134251 diff --git a/portfolio/legislative_district_digest/district_ad-13/00__legislative_district_report__district_ad-13.ipynb b/portfolio/legislative_district_digest/district_ad-13/00__legislative_district_report__district_ad-13.ipynb index 90e0328e8d..2a1bfb0b50 100644 --- a/portfolio/legislative_district_digest/district_ad-13/00__legislative_district_report__district_ad-13.ipynb +++ b/portfolio/legislative_district_digest/district_ad-13/00__legislative_district_report__district_ad-13.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b4822f1539ba89fdbeef90199e373465f5328713fc3162bd58a437620f0f971 -size 21128456 +oid sha256:50577f3d8b95d40db3dd1e7db8a106a8aefb47219ac098adee0feb617facaf48 +size 120026 diff --git a/portfolio/legislative_district_digest/district_ad-14/00__legislative_district_report__district_ad-14.ipynb b/portfolio/legislative_district_digest/district_ad-14/00__legislative_district_report__district_ad-14.ipynb index 46dec053de..51e7d1005c 100644 --- a/portfolio/legislative_district_digest/district_ad-14/00__legislative_district_report__district_ad-14.ipynb +++ b/portfolio/legislative_district_digest/district_ad-14/00__legislative_district_report__district_ad-14.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a103e8cf27cfbab8ab30a39a75a97949b0408a334d440e03f8cc019d30a23aa0 -size 29869478 +oid sha256:8e9d5a818059a915a6a4873c011e1760b8df2ac8adb71d2f7a183cc361755c43 +size 147995 diff --git a/portfolio/legislative_district_digest/district_ad-15/00__legislative_district_report__district_ad-15.ipynb b/portfolio/legislative_district_digest/district_ad-15/00__legislative_district_report__district_ad-15.ipynb index ddd8f3e555..5beee2eeb0 100644 --- a/portfolio/legislative_district_digest/district_ad-15/00__legislative_district_report__district_ad-15.ipynb +++ b/portfolio/legislative_district_digest/district_ad-15/00__legislative_district_report__district_ad-15.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c2ce74d9115b6ffcdfe177c7582ca9b12dd80a3fb4c1e8e264ead4da3bfbfd7f -size 30401834 +oid sha256:7eb716730521852b50c77bae87cd4c8b6aca4691ca20ae7141846315aa530fce +size 138483 diff --git a/portfolio/legislative_district_digest/district_ad-16/00__legislative_district_report__district_ad-16.ipynb b/portfolio/legislative_district_digest/district_ad-16/00__legislative_district_report__district_ad-16.ipynb index 05811be005..e922300091 100644 --- a/portfolio/legislative_district_digest/district_ad-16/00__legislative_district_report__district_ad-16.ipynb +++ b/portfolio/legislative_district_digest/district_ad-16/00__legislative_district_report__district_ad-16.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:17dbdab0a8bf2eb3f5c13ce39904567bde03a56c7d23088b2d0a47e305a36a58 -size 32039775 +oid sha256:d080b448e1d95db79d6044ef14c52dc9063185bc6b91cec720ed6dbc02d01590 +size 138451 diff --git a/portfolio/legislative_district_digest/district_ad-17/00__legislative_district_report__district_ad-17.ipynb b/portfolio/legislative_district_digest/district_ad-17/00__legislative_district_report__district_ad-17.ipynb index 3acaf197a8..33ba3cc435 100644 --- a/portfolio/legislative_district_digest/district_ad-17/00__legislative_district_report__district_ad-17.ipynb +++ b/portfolio/legislative_district_digest/district_ad-17/00__legislative_district_report__district_ad-17.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72ef5dbc86c538cf176e0fd242bf5eaf3393547b562de354b8cc84f97d8cf550 -size 32291053 +oid sha256:10c915b91ceddef578209ec857f7e8c5ef89dd3d8b2465b1be3545768a81fa6d +size 170949 diff --git a/portfolio/legislative_district_digest/district_ad-18/00__legislative_district_report__district_ad-18.ipynb b/portfolio/legislative_district_digest/district_ad-18/00__legislative_district_report__district_ad-18.ipynb index 8dd8a3e9ec..9348c459eb 100644 --- a/portfolio/legislative_district_digest/district_ad-18/00__legislative_district_report__district_ad-18.ipynb +++ b/portfolio/legislative_district_digest/district_ad-18/00__legislative_district_report__district_ad-18.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fcc86a570d05df9e6afcd28aff18adfd02227db8fd230bde2c15a74048ac2f62 -size 29361146 +oid sha256:1b23825c4a4e4117bec761bcd1671d761791b209684b767e2a7b5f2922aafd9d +size 138590 diff --git a/portfolio/legislative_district_digest/district_ad-19/00__legislative_district_report__district_ad-19.ipynb b/portfolio/legislative_district_digest/district_ad-19/00__legislative_district_report__district_ad-19.ipynb index 8e9fa1a2bd..b18a7172d1 100644 --- a/portfolio/legislative_district_digest/district_ad-19/00__legislative_district_report__district_ad-19.ipynb +++ b/portfolio/legislative_district_digest/district_ad-19/00__legislative_district_report__district_ad-19.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b61b92df205141e6e9732acdc9b5b2796fce75f1f2d0f17aa2d087d5407def06 -size 23630804 +oid sha256:7e016a0e8c36bdaf804586021363d6576aa097cfd014dc3707137c3a807dc9b9 +size 129668 diff --git a/portfolio/legislative_district_digest/district_ad-20/00__legislative_district_report__district_ad-20.ipynb b/portfolio/legislative_district_digest/district_ad-20/00__legislative_district_report__district_ad-20.ipynb index 8d605cecc2..77b8f26463 100644 --- a/portfolio/legislative_district_digest/district_ad-20/00__legislative_district_report__district_ad-20.ipynb +++ b/portfolio/legislative_district_digest/district_ad-20/00__legislative_district_report__district_ad-20.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a8f07c3e51053647c79a1252f0cd7703e304c2b87ff713f86f654f770dc1b320 -size 29697408 +oid sha256:ffb19674e5b7a0f3338ed2f26767b56591023259e18c16f9935237dd2113d38f +size 143080 diff --git a/portfolio/legislative_district_digest/district_ad-21/00__legislative_district_report__district_ad-21.ipynb b/portfolio/legislative_district_digest/district_ad-21/00__legislative_district_report__district_ad-21.ipynb index c0fabfe260..50e1f4a101 100644 --- a/portfolio/legislative_district_digest/district_ad-21/00__legislative_district_report__district_ad-21.ipynb +++ b/portfolio/legislative_district_digest/district_ad-21/00__legislative_district_report__district_ad-21.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c5b85278b08fe213b45d9ffd75423e6f47881d443e910ade6f4be06a640515c6 -size 29879788 +oid sha256:d3945a20227c92d653906cf51ea60065b8e9e7dc609bebfee1723e259e7e6c3e +size 143429 diff --git a/portfolio/legislative_district_digest/district_ad-22/00__legislative_district_report__district_ad-22.ipynb b/portfolio/legislative_district_digest/district_ad-22/00__legislative_district_report__district_ad-22.ipynb index 59ad8c8108..af88c3ebd9 100644 --- a/portfolio/legislative_district_digest/district_ad-22/00__legislative_district_report__district_ad-22.ipynb +++ b/portfolio/legislative_district_digest/district_ad-22/00__legislative_district_report__district_ad-22.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fb63fb25cd7c66c70d7f32a68b2e9284b32e63bd8189a2c329f2a0535118834f -size 19892212 +oid sha256:5a6557a77be0238ece0a155167ba73851c7daf92d1c3923eb9f228163945cd16 +size 124566 diff --git a/portfolio/legislative_district_digest/district_ad-23/00__legislative_district_report__district_ad-23.ipynb b/portfolio/legislative_district_digest/district_ad-23/00__legislative_district_report__district_ad-23.ipynb index ac712aae6a..9b84874db4 100644 --- a/portfolio/legislative_district_digest/district_ad-23/00__legislative_district_report__district_ad-23.ipynb +++ b/portfolio/legislative_district_digest/district_ad-23/00__legislative_district_report__district_ad-23.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:437572769ec286ecae4811faf6a743c228d316740b73f078b5810153c6534135 -size 32600488 +oid sha256:ea764fec2294e3227d0d48950ec9fe6176f54bb68f636d44e6763d689d9638db +size 143106 diff --git a/portfolio/legislative_district_digest/district_ad-24/00__legislative_district_report__district_ad-24.ipynb b/portfolio/legislative_district_digest/district_ad-24/00__legislative_district_report__district_ad-24.ipynb index 0c25d390f1..48ca1333dd 100644 --- a/portfolio/legislative_district_digest/district_ad-24/00__legislative_district_report__district_ad-24.ipynb +++ b/portfolio/legislative_district_digest/district_ad-24/00__legislative_district_report__district_ad-24.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:169fe10ed92372d04c793cc7f528fd0f843fb68506730bfc21f7d88a1352cc88 -size 29887945 +oid sha256:cbfbefb74d52cc48af22a92f92cf7dcb1d5d3f05b6de14589672fe7c8ca411e0 +size 133956 diff --git a/portfolio/legislative_district_digest/district_ad-25/00__legislative_district_report__district_ad-25.ipynb b/portfolio/legislative_district_digest/district_ad-25/00__legislative_district_report__district_ad-25.ipynb index 98f0cc970f..87e371ff58 100644 --- a/portfolio/legislative_district_digest/district_ad-25/00__legislative_district_report__district_ad-25.ipynb +++ b/portfolio/legislative_district_digest/district_ad-25/00__legislative_district_report__district_ad-25.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e7dc4311ebeb4a5b403a67577127fd8334a936720c9d4b9cc23cc94f6c374ce -size 22470502 +oid sha256:d30121e2050b23f7059e02be778e9c4ae12e45c9334dc6c06e72a01a0ae030ac +size 124811 diff --git a/portfolio/legislative_district_digest/district_ad-26/00__legislative_district_report__district_ad-26.ipynb b/portfolio/legislative_district_digest/district_ad-26/00__legislative_district_report__district_ad-26.ipynb index 060fa60456..3c4c3ae54b 100644 --- a/portfolio/legislative_district_digest/district_ad-26/00__legislative_district_report__district_ad-26.ipynb +++ b/portfolio/legislative_district_digest/district_ad-26/00__legislative_district_report__district_ad-26.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:360f16bf6a2b9ca1be0f812eff53b59252af661e649dae7e5a166dc4f1d45d09 -size 22470504 +oid sha256:2bfefa94da889dcbaffd7fff9d430e304a2fa02fb77d05f92d9dabd164ea871a +size 124811 diff --git a/portfolio/legislative_district_digest/district_ad-27/00__legislative_district_report__district_ad-27.ipynb b/portfolio/legislative_district_digest/district_ad-27/00__legislative_district_report__district_ad-27.ipynb index 93cd0302e1..7df14e9182 100644 --- a/portfolio/legislative_district_digest/district_ad-27/00__legislative_district_report__district_ad-27.ipynb +++ b/portfolio/legislative_district_digest/district_ad-27/00__legislative_district_report__district_ad-27.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:13236fbc91d7a48324c6a78fb39754574b09dac11db5d76f0ec8591a6187ee31 -size 21220508 +oid sha256:6614cb6a59c60a8d9171e164b4e8ae820f3899f007062177877481e8eb8a08a2 +size 133708 diff --git a/portfolio/legislative_district_digest/district_ad-28/00__legislative_district_report__district_ad-28.ipynb b/portfolio/legislative_district_digest/district_ad-28/00__legislative_district_report__district_ad-28.ipynb index 5976fd43ee..793466a83f 100644 --- a/portfolio/legislative_district_digest/district_ad-28/00__legislative_district_report__district_ad-28.ipynb +++ b/portfolio/legislative_district_digest/district_ad-28/00__legislative_district_report__district_ad-28.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e7dd06fe03c4c6d5581c6a7b6248a6d34d629b96e234a477c33d30e53c343a5f -size 22460445 +oid sha256:41b047a06e19f71d73b7f6d5578099d082b456db830ea6912e6995136da16904 +size 120244 diff --git a/portfolio/legislative_district_digest/district_ad-29/00__legislative_district_report__district_ad-29.ipynb b/portfolio/legislative_district_digest/district_ad-29/00__legislative_district_report__district_ad-29.ipynb index 6bbcb45fae..388e518a91 100644 --- a/portfolio/legislative_district_digest/district_ad-29/00__legislative_district_report__district_ad-29.ipynb +++ b/portfolio/legislative_district_digest/district_ad-29/00__legislative_district_report__district_ad-29.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f39aa71e603cc79cbb2ffb81aae6b5af28d1d82d4c8d2b70ae221f03a175d8b7 -size 23321659 +oid sha256:85b7651365e534c9a618ad3b09af3225f8de251261fc3b309af3831815c17fb2 +size 124847 diff --git a/portfolio/legislative_district_digest/district_ad-30/00__legislative_district_report__district_ad-30.ipynb b/portfolio/legislative_district_digest/district_ad-30/00__legislative_district_report__district_ad-30.ipynb index 34f488ab78..916c0b9fb8 100644 --- a/portfolio/legislative_district_digest/district_ad-30/00__legislative_district_report__district_ad-30.ipynb +++ b/portfolio/legislative_district_digest/district_ad-30/00__legislative_district_report__district_ad-30.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b478d7d6b4c8781e5af70f031d650e8a945550b7bbded17041fd201b0f43123b -size 3442011 +oid sha256:2ca72cacade6c21e1f8806d99f58975dbb317cffdd50efaf984282076bfdab9e +size 120084 diff --git a/portfolio/legislative_district_digest/district_ad-31/00__legislative_district_report__district_ad-31.ipynb b/portfolio/legislative_district_digest/district_ad-31/00__legislative_district_report__district_ad-31.ipynb index 6770339fe6..86466d775d 100644 --- a/portfolio/legislative_district_digest/district_ad-31/00__legislative_district_report__district_ad-31.ipynb +++ b/portfolio/legislative_district_digest/district_ad-31/00__legislative_district_report__district_ad-31.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dd20172d45becca18c11a0edee221ccfeea141e11803d63af04c0b4fec9745bc -size 21820718 +oid sha256:f2f6b98a7f2c08c4b204845ffa8cf8758bd319c7df09fe3dec9beff1a03a7c4a +size 129065 diff --git a/portfolio/legislative_district_digest/district_ad-32/00__legislative_district_report__district_ad-32.ipynb b/portfolio/legislative_district_digest/district_ad-32/00__legislative_district_report__district_ad-32.ipynb index 74ea238968..ba1a428173 100644 --- a/portfolio/legislative_district_digest/district_ad-32/00__legislative_district_report__district_ad-32.ipynb +++ b/portfolio/legislative_district_digest/district_ad-32/00__legislative_district_report__district_ad-32.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:843c557234b257871bc5415ff0742694323d61fc0308a21174b497bcce12e422 -size 22288107 +oid sha256:d20a3f9eae2f13d7207c9eaac4846fdc922db307ee984d80f839a82f389cfcb1 +size 137993 diff --git a/portfolio/legislative_district_digest/district_ad-33/00__legislative_district_report__district_ad-33.ipynb b/portfolio/legislative_district_digest/district_ad-33/00__legislative_district_report__district_ad-33.ipynb index 3db731eec8..52797e20aa 100644 --- a/portfolio/legislative_district_digest/district_ad-33/00__legislative_district_report__district_ad-33.ipynb +++ b/portfolio/legislative_district_digest/district_ad-33/00__legislative_district_report__district_ad-33.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:25f7bdfb178069eb750ae88dfbe4f2d3f4d0954f56a0a6a388782cea85ec7457 -size 20995456 +oid sha256:c2817bc682f5be7259e8d1e0bddb30e51bc1d672593537a87908aec9ead6394a +size 129014 diff --git a/portfolio/legislative_district_digest/district_ad-34/00__legislative_district_report__district_ad-34.ipynb b/portfolio/legislative_district_digest/district_ad-34/00__legislative_district_report__district_ad-34.ipynb index b5fa794e7e..a904228609 100644 --- a/portfolio/legislative_district_digest/district_ad-34/00__legislative_district_report__district_ad-34.ipynb +++ b/portfolio/legislative_district_digest/district_ad-34/00__legislative_district_report__district_ad-34.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15f513957145714cb6ce46afe9d8e518fc5f31d54949b86e8bbe535eed89cc59 -size 25222454 +oid sha256:d8518e2f459f3f88f63fd3d4e0c994f8fd51e7559d244b6f021ea50c462700b5 +size 142822 diff --git a/portfolio/legislative_district_digest/district_ad-35/00__legislative_district_report__district_ad-35.ipynb b/portfolio/legislative_district_digest/district_ad-35/00__legislative_district_report__district_ad-35.ipynb index fe49efc508..8b019f4935 100644 --- a/portfolio/legislative_district_digest/district_ad-35/00__legislative_district_report__district_ad-35.ipynb +++ b/portfolio/legislative_district_digest/district_ad-35/00__legislative_district_report__district_ad-35.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49662b251be3ca75fa90efde34e1bb2086bff8a691309e666accd50138a499d3 -size 21033882 +oid sha256:c7e6046735b4f4192b1ec066bd172fe0216938494a6cf71a98b76a1ef2ee4ca1 +size 124447 diff --git a/portfolio/legislative_district_digest/district_ad-36/00__legislative_district_report__district_ad-36.ipynb b/portfolio/legislative_district_digest/district_ad-36/00__legislative_district_report__district_ad-36.ipynb index 1815ae3aa3..2797a78f61 100644 --- a/portfolio/legislative_district_digest/district_ad-36/00__legislative_district_report__district_ad-36.ipynb +++ b/portfolio/legislative_district_digest/district_ad-36/00__legislative_district_report__district_ad-36.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c018d23a81897ecbe733ad242b410625adfca29082cbc344f3d47d623d7176ec -size 23106652 +oid sha256:a2987d0c642161e6c07d293ba99482c31f50d4c126125851fb31823ef12bd87b +size 138280 diff --git a/portfolio/legislative_district_digest/district_ad-37/00__legislative_district_report__district_ad-37.ipynb b/portfolio/legislative_district_digest/district_ad-37/00__legislative_district_report__district_ad-37.ipynb index 8eafe597f6..39eae166a4 100644 --- a/portfolio/legislative_district_digest/district_ad-37/00__legislative_district_report__district_ad-37.ipynb +++ b/portfolio/legislative_district_digest/district_ad-37/00__legislative_district_report__district_ad-37.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:82256f7751e2bdba698bfe1416e2aa8d68e49f100ad81300ebf5993698bad2f5 -size 25591781 +oid sha256:162085471a8ed1d041d9adc340349968b57aa763027c6c55893bb66f8b0b1e48 +size 138176 diff --git a/portfolio/legislative_district_digest/district_ad-38/00__legislative_district_report__district_ad-38.ipynb b/portfolio/legislative_district_digest/district_ad-38/00__legislative_district_report__district_ad-38.ipynb index e0d765fcd2..d5061b617f 100644 --- a/portfolio/legislative_district_digest/district_ad-38/00__legislative_district_report__district_ad-38.ipynb +++ b/portfolio/legislative_district_digest/district_ad-38/00__legislative_district_report__district_ad-38.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:811febfcfc25590580f864c4e13de49fb5642e82643982682305176d3b1afb95 -size 21791035 +oid sha256:f93bc3e6ed4cb3a0a090fdadb4e5f72f78c79a04069bcf5f76a0cf0e7771b0ed +size 106512 diff --git a/portfolio/legislative_district_digest/district_ad-39/00__legislative_district_report__district_ad-39.ipynb b/portfolio/legislative_district_digest/district_ad-39/00__legislative_district_report__district_ad-39.ipynb index f69553ed28..6897e8f86c 100644 --- a/portfolio/legislative_district_digest/district_ad-39/00__legislative_district_report__district_ad-39.ipynb +++ b/portfolio/legislative_district_digest/district_ad-39/00__legislative_district_report__district_ad-39.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f50ad433187d0cd1f39c08280261fa2b5037e1f1c73612744d655b539ec86ac7 -size 22787806 +oid sha256:3a22a12ef7e33736eb33b02a5f0cf55662a6be23f9057e7f98ec7351d0c7e0fe +size 120137 diff --git a/portfolio/legislative_district_digest/district_ad-40/00__legislative_district_report__district_ad-40.ipynb b/portfolio/legislative_district_digest/district_ad-40/00__legislative_district_report__district_ad-40.ipynb index c3f02f8eb8..3637fa2d08 100644 --- a/portfolio/legislative_district_digest/district_ad-40/00__legislative_district_report__district_ad-40.ipynb +++ b/portfolio/legislative_district_digest/district_ad-40/00__legislative_district_report__district_ad-40.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8bd63266b9f4dd262a93f9c37e858db81cb0ddfd5db18432ad0a9820c8893930 -size 28477485 +oid sha256:c5e753469697c54c2319049cb8379f99459bb42d9dc5ac76bf5cba175c613055 +size 133879 diff --git a/portfolio/legislative_district_digest/district_ad-41/00__legislative_district_report__district_ad-41.ipynb b/portfolio/legislative_district_digest/district_ad-41/00__legislative_district_report__district_ad-41.ipynb index 8687aa326f..7ea529d8bf 100644 --- a/portfolio/legislative_district_digest/district_ad-41/00__legislative_district_report__district_ad-41.ipynb +++ b/portfolio/legislative_district_digest/district_ad-41/00__legislative_district_report__district_ad-41.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f41137860891e0c5e848461a589771b0f30b1dcc2dd1a9fa0c3310f64a83bded -size 29398577 +oid sha256:38bb7e0df29a81a66be776d59d28193c98af13a7bacbc17c281dd97af0e4d5db +size 142718 diff --git a/portfolio/legislative_district_digest/district_ad-42/00__legislative_district_report__district_ad-42.ipynb b/portfolio/legislative_district_digest/district_ad-42/00__legislative_district_report__district_ad-42.ipynb index bba0f9211f..18bb7e5062 100644 --- a/portfolio/legislative_district_digest/district_ad-42/00__legislative_district_report__district_ad-42.ipynb +++ b/portfolio/legislative_district_digest/district_ad-42/00__legislative_district_report__district_ad-42.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ebf044d2838f3a5e9782cd8575d0d93b3cde84d027f03483111899dcd46eae4f -size 31764451 +oid sha256:1b837153e48bd5dd15f9159f32859db44fc80d5dda67ac026602b5e0e1cd4a5b +size 161171 diff --git a/portfolio/legislative_district_digest/district_ad-43/00__legislative_district_report__district_ad-43.ipynb b/portfolio/legislative_district_digest/district_ad-43/00__legislative_district_report__district_ad-43.ipynb index 9233c70a80..ea0266957c 100644 --- a/portfolio/legislative_district_digest/district_ad-43/00__legislative_district_report__district_ad-43.ipynb +++ b/portfolio/legislative_district_digest/district_ad-43/00__legislative_district_report__district_ad-43.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a4a9fb0ea1b916064d792369427273679b70fb6a37277bc51b8300fc7cf7fd54 -size 24241229 +oid sha256:ea307d0c929b428d8f6a02763f9cedf5204917617f7732791cc285b3b34d0577 +size 120303 diff --git a/portfolio/legislative_district_digest/district_ad-44/00__legislative_district_report__district_ad-44.ipynb b/portfolio/legislative_district_digest/district_ad-44/00__legislative_district_report__district_ad-44.ipynb index 0986d1a1bb..8dbbf1f3b1 100644 --- a/portfolio/legislative_district_digest/district_ad-44/00__legislative_district_report__district_ad-44.ipynb +++ b/portfolio/legislative_district_digest/district_ad-44/00__legislative_district_report__district_ad-44.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f1229ef4d92ca78df11725f5e1e2a55ebee582cc16dcacd6dc97d7f48b44bce0 -size 27191542 +oid sha256:cab6d29051ba03f8549b106ed9bcf1122cf410dc3db761b5f44bb112beac6d5b +size 143011 diff --git a/portfolio/legislative_district_digest/district_ad-45/00__legislative_district_report__district_ad-45.ipynb b/portfolio/legislative_district_digest/district_ad-45/00__legislative_district_report__district_ad-45.ipynb index d9f611422c..190bd11cd8 100644 --- a/portfolio/legislative_district_digest/district_ad-45/00__legislative_district_report__district_ad-45.ipynb +++ b/portfolio/legislative_district_digest/district_ad-45/00__legislative_district_report__district_ad-45.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b49a49b5626878031b06f688721ebdf19272bf48a1b8dac49d4ad3a1ba64f7d -size 27299601 +oid sha256:ab6a51f0ccf6e727d0219d3e06942dd99c72050ce7d09a4dd3c03e3a55474994 +size 129058 diff --git a/portfolio/legislative_district_digest/district_ad-46/00__legislative_district_report__district_ad-46.ipynb b/portfolio/legislative_district_digest/district_ad-46/00__legislative_district_report__district_ad-46.ipynb index 8a9383508b..124c17f3be 100644 --- a/portfolio/legislative_district_digest/district_ad-46/00__legislative_district_report__district_ad-46.ipynb +++ b/portfolio/legislative_district_digest/district_ad-46/00__legislative_district_report__district_ad-46.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:887b9d4af25713b1fa715aa9f9f51566dda6b4becd385c2718afdd173a14b38f -size 29736941 +oid sha256:6a582f9f9e925dc33ec619591104ef070e295af5b48f8b4a38ab626243f644c6 +size 142996 diff --git a/portfolio/legislative_district_digest/district_ad-47/00__legislative_district_report__district_ad-47.ipynb b/portfolio/legislative_district_digest/district_ad-47/00__legislative_district_report__district_ad-47.ipynb index 0080299dd2..26f70f5029 100644 --- a/portfolio/legislative_district_digest/district_ad-47/00__legislative_district_report__district_ad-47.ipynb +++ b/portfolio/legislative_district_digest/district_ad-47/00__legislative_district_report__district_ad-47.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79ef790527bf7717a1b8771f2c49bcb50b4132a819d8cb45b3e5f9488c960aa7 -size 24073160 +oid sha256:a29af9cddd7493e7487e263c6b0ab13749969fa0283026f5a14d8f2f7acd2393 +size 137998 diff --git a/portfolio/legislative_district_digest/district_ad-48/00__legislative_district_report__district_ad-48.ipynb b/portfolio/legislative_district_digest/district_ad-48/00__legislative_district_report__district_ad-48.ipynb index 7d2d9bc6ca..ef5daa4065 100644 --- a/portfolio/legislative_district_digest/district_ad-48/00__legislative_district_report__district_ad-48.ipynb +++ b/portfolio/legislative_district_digest/district_ad-48/00__legislative_district_report__district_ad-48.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:54778c5f03856f2f1b299dc90a12309fe4630dda1d24ee6b3513ef7f22394549 -size 23684808 +oid sha256:0997c9b927fc5b56c4908eb37d0e839d251310e5b2801c751aa82c98e5c57640 +size 138127 diff --git a/portfolio/legislative_district_digest/district_ad-49/00__legislative_district_report__district_ad-49.ipynb b/portfolio/legislative_district_digest/district_ad-49/00__legislative_district_report__district_ad-49.ipynb index 503fc6406c..4034783202 100644 --- a/portfolio/legislative_district_digest/district_ad-49/00__legislative_district_report__district_ad-49.ipynb +++ b/portfolio/legislative_district_digest/district_ad-49/00__legislative_district_report__district_ad-49.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8a406012d7733151c5d93565983915437d83d65bcb50d3a5c0b711cbe438dd34 -size 24379552 +oid sha256:9ab93d8910a84f1cbb893533ddd1b52af1f5ee09ef249a82686dd94db0060cfd +size 169840 diff --git a/portfolio/legislative_district_digest/district_ad-50/00__legislative_district_report__district_ad-50.ipynb b/portfolio/legislative_district_digest/district_ad-50/00__legislative_district_report__district_ad-50.ipynb index bfa1e14fef..93634a57e6 100644 --- a/portfolio/legislative_district_digest/district_ad-50/00__legislative_district_report__district_ad-50.ipynb +++ b/portfolio/legislative_district_digest/district_ad-50/00__legislative_district_report__district_ad-50.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c9487465f17017e43a744335bc4479466ee34203b1d33b29b2951bb0bceeb512 -size 26454107 +oid sha256:c8cb117480ba98989f3c24f791cb11f3e3268f211cdfd42047be5ab60f1b44c9 +size 124439 diff --git a/portfolio/legislative_district_digest/district_ad-51/00__legislative_district_report__district_ad-51.ipynb b/portfolio/legislative_district_digest/district_ad-51/00__legislative_district_report__district_ad-51.ipynb index b5ce845d12..e95f78daf2 100644 --- a/portfolio/legislative_district_digest/district_ad-51/00__legislative_district_report__district_ad-51.ipynb +++ b/portfolio/legislative_district_digest/district_ad-51/00__legislative_district_report__district_ad-51.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:981191a1ee982dbe5e6cff597d3df712520823419f397255e5702fe9210c0692 -size 29608509 +oid sha256:344ebfa57e1b82d76d615681fee6250031cecd1564be7bde1abb8ff6fb4a2f8a +size 170248 diff --git a/portfolio/legislative_district_digest/district_ad-52/00__legislative_district_report__district_ad-52.ipynb b/portfolio/legislative_district_digest/district_ad-52/00__legislative_district_report__district_ad-52.ipynb index 03486b90ce..fdece9011d 100644 --- a/portfolio/legislative_district_digest/district_ad-52/00__legislative_district_report__district_ad-52.ipynb +++ b/portfolio/legislative_district_digest/district_ad-52/00__legislative_district_report__district_ad-52.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3631c22e27054fefbd342417ec492bb84b5938917decbfc5cc421d5262cfa8d0 -size 27729190 +oid sha256:07cfc9ef5b7845c415aa10548c09cbe86f1be4b2cab7288a4eeb195733be8a35 +size 161138 diff --git a/portfolio/legislative_district_digest/district_ad-53/00__legislative_district_report__district_ad-53.ipynb b/portfolio/legislative_district_digest/district_ad-53/00__legislative_district_report__district_ad-53.ipynb index 588a6f2397..bf7811b7a1 100644 --- a/portfolio/legislative_district_digest/district_ad-53/00__legislative_district_report__district_ad-53.ipynb +++ b/portfolio/legislative_district_digest/district_ad-53/00__legislative_district_report__district_ad-53.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c78f5372c643834dd86ae317873376c3c7c19b92efb64450954b9157babbc86 -size 24406122 +oid sha256:8d551899fc85d86ecca1330a007e512c3f4ccb9390635424d27dd321fc39ffce +size 115269 diff --git a/portfolio/legislative_district_digest/district_ad-54/00__legislative_district_report__district_ad-54.ipynb b/portfolio/legislative_district_digest/district_ad-54/00__legislative_district_report__district_ad-54.ipynb index 965e795ba7..218cf4739d 100644 --- a/portfolio/legislative_district_digest/district_ad-54/00__legislative_district_report__district_ad-54.ipynb +++ b/portfolio/legislative_district_digest/district_ad-54/00__legislative_district_report__district_ad-54.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d604352d8fc8a9c404775ace49d4caa18e88028eb36cc3844c46ca25f7d74f4 -size 29791873 +oid sha256:e7230f62127950f191ab652595e6ffa7ab425d307c8808362285ac8cb07b3e41 +size 179295 diff --git a/portfolio/legislative_district_digest/district_ad-55/00__legislative_district_report__district_ad-55.ipynb b/portfolio/legislative_district_digest/district_ad-55/00__legislative_district_report__district_ad-55.ipynb index 482f37f5a3..eb445ef60d 100644 --- a/portfolio/legislative_district_digest/district_ad-55/00__legislative_district_report__district_ad-55.ipynb +++ b/portfolio/legislative_district_digest/district_ad-55/00__legislative_district_report__district_ad-55.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e3e7e60ad9875df0f4af6a240003b07ee0bba062d3839c8bbc5d91a7f1d267b -size 28253127 +oid sha256:3e29964ac6db0f761f079cf004f82cee79c1026c598e7b7b6dbf59b630135462 +size 152129 diff --git a/portfolio/legislative_district_digest/district_ad-56/00__legislative_district_report__district_ad-56.ipynb b/portfolio/legislative_district_digest/district_ad-56/00__legislative_district_report__district_ad-56.ipynb index 1c3f63749e..69e960d2c0 100644 --- a/portfolio/legislative_district_digest/district_ad-56/00__legislative_district_report__district_ad-56.ipynb +++ b/portfolio/legislative_district_digest/district_ad-56/00__legislative_district_report__district_ad-56.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1133b426b07ecbd5071e09987cd2ab4d7b7c2c846d0e0012c57d21d6bb3860c -size 24026286 +oid sha256:a3b55478e1511a46217aa0794bf3f623efe4c9413283e7f746d09e3e53be58be +size 156198 diff --git a/portfolio/legislative_district_digest/district_ad-57/00__legislative_district_report__district_ad-57.ipynb b/portfolio/legislative_district_digest/district_ad-57/00__legislative_district_report__district_ad-57.ipynb index 3c895fadb2..0b3896090a 100644 --- a/portfolio/legislative_district_digest/district_ad-57/00__legislative_district_report__district_ad-57.ipynb +++ b/portfolio/legislative_district_digest/district_ad-57/00__legislative_district_report__district_ad-57.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1d9bf262569d5ffa7145b16a69745a2d3af1c3dfb102155817e3c97099ee73f4 -size 30037391 +oid sha256:1b9629f239a03f92af95867d67d8e6a2f090c999e8fce195a112db3af9ab6139 +size 165709 diff --git a/portfolio/legislative_district_digest/district_ad-58/00__legislative_district_report__district_ad-58.ipynb b/portfolio/legislative_district_digest/district_ad-58/00__legislative_district_report__district_ad-58.ipynb index 9dadb93476..e556f0de6d 100644 --- a/portfolio/legislative_district_digest/district_ad-58/00__legislative_district_report__district_ad-58.ipynb +++ b/portfolio/legislative_district_digest/district_ad-58/00__legislative_district_report__district_ad-58.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f1441da26d896d0c1ed1e064198280f01e98925cd32451b015447a228659e725 -size 23263824 +oid sha256:92a6c67286296b64e2700f5b1c6ea60869a6cc26529b003693a8aa9f4d839089 +size 115251 diff --git a/portfolio/legislative_district_digest/district_ad-59/00__legislative_district_report__district_ad-59.ipynb b/portfolio/legislative_district_digest/district_ad-59/00__legislative_district_report__district_ad-59.ipynb index a62c8709cf..5a4005171a 100644 --- a/portfolio/legislative_district_digest/district_ad-59/00__legislative_district_report__district_ad-59.ipynb +++ b/portfolio/legislative_district_digest/district_ad-59/00__legislative_district_report__district_ad-59.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09069386109fea9f216b8643573b3a54e61a6b75810f69a38a6e0a3aedc84828 -size 26795053 +oid sha256:eb27535affb901ce57119741053508c8803a568e6886064258fbfe7583130e17 +size 124525 diff --git a/portfolio/legislative_district_digest/district_ad-60/00__legislative_district_report__district_ad-60.ipynb b/portfolio/legislative_district_digest/district_ad-60/00__legislative_district_report__district_ad-60.ipynb index 56e82574ae..92578deacc 100644 --- a/portfolio/legislative_district_digest/district_ad-60/00__legislative_district_report__district_ad-60.ipynb +++ b/portfolio/legislative_district_digest/district_ad-60/00__legislative_district_report__district_ad-60.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e04ff19cd0f55d63e55b32e85cb011d7b6540d4e3f586c11d2b869f1e685fc92 -size 23359183 +oid sha256:2bd26f326a1aa2ff33b677b3b56708de0e5a8c4e0004041e02b0a66d2caef8fc +size 115405 diff --git a/portfolio/legislative_district_digest/district_ad-61/00__legislative_district_report__district_ad-61.ipynb b/portfolio/legislative_district_digest/district_ad-61/00__legislative_district_report__district_ad-61.ipynb index de67a279f6..b67616cdd9 100644 --- a/portfolio/legislative_district_digest/district_ad-61/00__legislative_district_report__district_ad-61.ipynb +++ b/portfolio/legislative_district_digest/district_ad-61/00__legislative_district_report__district_ad-61.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:550c8393e3d72a14a84af979baee3d3f93f406080c5b70e23a37641803108090 -size 28993696 +oid sha256:13073adb6a14acf1d1c4f398e727544b39aef8b402a0729ac221727b3ffb44f9 +size 165387 diff --git a/portfolio/legislative_district_digest/district_ad-62/00__legislative_district_report__district_ad-62.ipynb b/portfolio/legislative_district_digest/district_ad-62/00__legislative_district_report__district_ad-62.ipynb index f24f5fa3f3..29a337ea82 100644 --- a/portfolio/legislative_district_digest/district_ad-62/00__legislative_district_report__district_ad-62.ipynb +++ b/portfolio/legislative_district_digest/district_ad-62/00__legislative_district_report__district_ad-62.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:657a5902fe681f882ac86f0b31c5f524e940baf9ebeff1e450e64eac3a30a9c7 -size 27263335 +oid sha256:48f6777c3cf40dd9b05057dbf470d9302b3517e28b2ef1be7f5cc8194103a0cf +size 183628 diff --git a/portfolio/legislative_district_digest/district_ad-63/00__legislative_district_report__district_ad-63.ipynb b/portfolio/legislative_district_digest/district_ad-63/00__legislative_district_report__district_ad-63.ipynb index ace86c8ee7..1c2d6437bc 100644 --- a/portfolio/legislative_district_digest/district_ad-63/00__legislative_district_report__district_ad-63.ipynb +++ b/portfolio/legislative_district_digest/district_ad-63/00__legislative_district_report__district_ad-63.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:245747ca580333aa33ec41e7e4b84a4c0d4bc6b3b8c87a6137f9f5c8da6032fa -size 22369648 +oid sha256:a84a969975dcd448efefba8e71a844884846616b7771fee9c7363de7e5b53d18 +size 110794 diff --git a/portfolio/legislative_district_digest/district_ad-64/00__legislative_district_report__district_ad-64.ipynb b/portfolio/legislative_district_digest/district_ad-64/00__legislative_district_report__district_ad-64.ipynb index 6d6cd9c622..8d621ec3f6 100644 --- a/portfolio/legislative_district_digest/district_ad-64/00__legislative_district_report__district_ad-64.ipynb +++ b/portfolio/legislative_district_digest/district_ad-64/00__legislative_district_report__district_ad-64.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fbbe886c5b630c746434d404e0757285b4b5fb7ea9f933b10d0c9f518484325c -size 27136063 +oid sha256:9f5dbbc37fafaefcc04c0b0bec73b2dcf88c6ed8680c043bf32aed06819bd0e3 +size 183627 diff --git a/portfolio/legislative_district_digest/district_ad-65/00__legislative_district_report__district_ad-65.ipynb b/portfolio/legislative_district_digest/district_ad-65/00__legislative_district_report__district_ad-65.ipynb index 1d0130f377..3c41f3edb5 100644 --- a/portfolio/legislative_district_digest/district_ad-65/00__legislative_district_report__district_ad-65.ipynb +++ b/portfolio/legislative_district_digest/district_ad-65/00__legislative_district_report__district_ad-65.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ad590d41785303835aee55dba71ec046c299f8f5a34247d77f91de8bc7c9f318 -size 28361463 +oid sha256:9f969afb3dca0605d034e96ab3e4094eb8bd86de75e25861a50de47141b2902b +size 147306 diff --git a/portfolio/legislative_district_digest/district_ad-66/00__legislative_district_report__district_ad-66.ipynb b/portfolio/legislative_district_digest/district_ad-66/00__legislative_district_report__district_ad-66.ipynb index 3eb88c2ea8..27e3df9d41 100644 --- a/portfolio/legislative_district_digest/district_ad-66/00__legislative_district_report__district_ad-66.ipynb +++ b/portfolio/legislative_district_digest/district_ad-66/00__legislative_district_report__district_ad-66.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9dfe518d0295b25c2fe5999edc6511db4a4c2ea913b192270214aa476c1ae100 -size 9763167 +oid sha256:70bdae0aa766835c9e0695b0f186561a1944f70ae3a36f35c68cb68dc920c759 +size 147318 diff --git a/portfolio/legislative_district_digest/district_ad-67/00__legislative_district_report__district_ad-67.ipynb b/portfolio/legislative_district_digest/district_ad-67/00__legislative_district_report__district_ad-67.ipynb index 773379ae33..871f0ab5ab 100644 --- a/portfolio/legislative_district_digest/district_ad-67/00__legislative_district_report__district_ad-67.ipynb +++ b/portfolio/legislative_district_digest/district_ad-67/00__legislative_district_report__district_ad-67.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5543ad707a4c2ccb4f90908172485d8f2d0436da66ce122abe08afc4ec19e11 -size 29177351 +oid sha256:9cc413b8d4252295db856eff1747dd66662af53b837ab86d2565a90251bad136 +size 142889 diff --git a/portfolio/legislative_district_digest/district_ad-68/00__legislative_district_report__district_ad-68.ipynb b/portfolio/legislative_district_digest/district_ad-68/00__legislative_district_report__district_ad-68.ipynb index 0694cad097..07e0dddc9c 100644 --- a/portfolio/legislative_district_digest/district_ad-68/00__legislative_district_report__district_ad-68.ipynb +++ b/portfolio/legislative_district_digest/district_ad-68/00__legislative_district_report__district_ad-68.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca76ce2af495e0a6f5c14685034a8c86367743e9f3142c409db6160a94437a11 -size 27795358 +oid sha256:ba919397df1bc4ef0944760c85fa99a86f0e9402680553b6ed8179a6604a76be +size 120171 diff --git a/portfolio/legislative_district_digest/district_ad-69/00__legislative_district_report__district_ad-69.ipynb b/portfolio/legislative_district_digest/district_ad-69/00__legislative_district_report__district_ad-69.ipynb index 1a0d9ef22d..bfab06a64c 100644 --- a/portfolio/legislative_district_digest/district_ad-69/00__legislative_district_report__district_ad-69.ipynb +++ b/portfolio/legislative_district_digest/district_ad-69/00__legislative_district_report__district_ad-69.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fcbee849f355af785cb18d540dff2aa6050cdef6e1acb1462e484b48750b325f -size 27324775 +oid sha256:7e9729138728fc69126c830e06618a0c76e725bb0546b133d42a6b98d48c19ab +size 129186 diff --git a/portfolio/legislative_district_digest/district_ad-70/00__legislative_district_report__district_ad-70.ipynb b/portfolio/legislative_district_digest/district_ad-70/00__legislative_district_report__district_ad-70.ipynb index c96e97a29c..fe5993c72e 100644 --- a/portfolio/legislative_district_digest/district_ad-70/00__legislative_district_report__district_ad-70.ipynb +++ b/portfolio/legislative_district_digest/district_ad-70/00__legislative_district_report__district_ad-70.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c158dc6ce8b996b32124524d03eb841224b3bcd49780b691b8f6e6f8a09ab7d -size 25031820 +oid sha256:a23d28e225143762a4188d8b0cf5e674e4f87815901e00cc3308a73c68333c3c +size 115679 diff --git a/portfolio/legislative_district_digest/district_ad-71/00__legislative_district_report__district_ad-71.ipynb b/portfolio/legislative_district_digest/district_ad-71/00__legislative_district_report__district_ad-71.ipynb index c295fba564..2479fff91c 100644 --- a/portfolio/legislative_district_digest/district_ad-71/00__legislative_district_report__district_ad-71.ipynb +++ b/portfolio/legislative_district_digest/district_ad-71/00__legislative_district_report__district_ad-71.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b4903c459ab65ac0634c311d068e35d43ffdbc3fcae8661acf4a14f1a83e4876 -size 24136169 +oid sha256:0b4a2996cb2b5a2d89baca167bb7065d5ddc62f5e1caef549480a6008765c8b9 +size 115497 diff --git a/portfolio/legislative_district_digest/district_ad-72/00__legislative_district_report__district_ad-72.ipynb b/portfolio/legislative_district_digest/district_ad-72/00__legislative_district_report__district_ad-72.ipynb index 7f6a1332e0..87bccc081a 100644 --- a/portfolio/legislative_district_digest/district_ad-72/00__legislative_district_report__district_ad-72.ipynb +++ b/portfolio/legislative_district_digest/district_ad-72/00__legislative_district_report__district_ad-72.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:af51203b203012bf1e9e2607d93caa92f65ce115eda4353c1db19c4295ce540b -size 24420693 +oid sha256:ca8d0c4787084a7fcbabebb58cc1ce6411d1946d78587e59c47d604fdb521d8f +size 120136 diff --git a/portfolio/legislative_district_digest/district_ad-73/00__legislative_district_report__district_ad-73.ipynb b/portfolio/legislative_district_digest/district_ad-73/00__legislative_district_report__district_ad-73.ipynb index 7caf753048..067b47a4b5 100644 --- a/portfolio/legislative_district_digest/district_ad-73/00__legislative_district_report__district_ad-73.ipynb +++ b/portfolio/legislative_district_digest/district_ad-73/00__legislative_district_report__district_ad-73.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:be5fd7ff96e7ca0f88cda123f40a2206689322d3c98ee6b495ccc1ca1dc55529 -size 20271566 +oid sha256:7fd333a8bee7ae1f02e03763c8184ce2dc896fa46ebb8ea35129567e6d4bbd91 +size 115538 diff --git a/portfolio/legislative_district_digest/district_ad-74/00__legislative_district_report__district_ad-74.ipynb b/portfolio/legislative_district_digest/district_ad-74/00__legislative_district_report__district_ad-74.ipynb index 98016b9598..7bc1085fed 100644 --- a/portfolio/legislative_district_digest/district_ad-74/00__legislative_district_report__district_ad-74.ipynb +++ b/portfolio/legislative_district_digest/district_ad-74/00__legislative_district_report__district_ad-74.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d121bf4b3031e3dfdc947c3d142bc7485bd93a51bf5acf67e739ebfe042375bd -size 21272945 +oid sha256:a303f54bb907118cecec5064177ee1832624f7a566b3bb3205733a8a596fd4ca +size 133649 diff --git a/portfolio/legislative_district_digest/district_ad-75/00__legislative_district_report__district_ad-75.ipynb b/portfolio/legislative_district_digest/district_ad-75/00__legislative_district_report__district_ad-75.ipynb index 63c699a4a0..82d5227578 100644 --- a/portfolio/legislative_district_digest/district_ad-75/00__legislative_district_report__district_ad-75.ipynb +++ b/portfolio/legislative_district_digest/district_ad-75/00__legislative_district_report__district_ad-75.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4efd163b2dc69ad7c09751dfbe6b8e762a27f50f7a3d4ecde1375523359f44f5 -size 20538782 +oid sha256:e0bb5cbfd6d8ab5b4deb942cd8f16353ecb359306f3b0f9b7927f2fb4d1d7e13 +size 106535 diff --git a/portfolio/legislative_district_digest/district_ad-76/00__legislative_district_report__district_ad-76.ipynb b/portfolio/legislative_district_digest/district_ad-76/00__legislative_district_report__district_ad-76.ipynb index 63c749a368..0cab19060e 100644 --- a/portfolio/legislative_district_digest/district_ad-76/00__legislative_district_report__district_ad-76.ipynb +++ b/portfolio/legislative_district_digest/district_ad-76/00__legislative_district_report__district_ad-76.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f517abc2e6fef3f66e93739caa3c1e3077f3f20d0c1de83b39c9e1e097ea0d5 -size 20538786 +oid sha256:2a5a3466f444aa8e40036535bf350b34bbec7fdbc57bd9fe50dc992c9071b9e7 +size 106537 diff --git a/portfolio/legislative_district_digest/district_ad-77/00__legislative_district_report__district_ad-77.ipynb b/portfolio/legislative_district_digest/district_ad-77/00__legislative_district_report__district_ad-77.ipynb index a3476bd476..a0a01c7258 100644 --- a/portfolio/legislative_district_digest/district_ad-77/00__legislative_district_report__district_ad-77.ipynb +++ b/portfolio/legislative_district_digest/district_ad-77/00__legislative_district_report__district_ad-77.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7e451fe1bb7683141fc5029830d10aaaaddda23654a48c91393a2047f276af01 -size 20538786 +oid sha256:8a6c1cb0141fbaa282834d36f20f186cf5dfec90219c180d076cb65e8511a0aa +size 111007 diff --git a/portfolio/legislative_district_digest/district_ad-78/00__legislative_district_report__district_ad-78.ipynb b/portfolio/legislative_district_digest/district_ad-78/00__legislative_district_report__district_ad-78.ipynb index 66c880ee68..bf47b120bf 100644 --- a/portfolio/legislative_district_digest/district_ad-78/00__legislative_district_report__district_ad-78.ipynb +++ b/portfolio/legislative_district_digest/district_ad-78/00__legislative_district_report__district_ad-78.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15fca6ec2069c24bc3e14b84ad8ba09c4083183d86c3d90e6a0243fc13bd2767 -size 20538786 +oid sha256:25500995682b7ce7f64fadb9ea4a956b046e48b5f48a55eba1ab8dc8b02708ea +size 111007 diff --git a/portfolio/legislative_district_digest/district_ad-79/00__legislative_district_report__district_ad-79.ipynb b/portfolio/legislative_district_digest/district_ad-79/00__legislative_district_report__district_ad-79.ipynb index 7f3e2dbbd4..1633f6ae3d 100644 --- a/portfolio/legislative_district_digest/district_ad-79/00__legislative_district_report__district_ad-79.ipynb +++ b/portfolio/legislative_district_digest/district_ad-79/00__legislative_district_report__district_ad-79.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d46f90ac0cb1f709bdd5206e133280a1e24f07e5b11f19a168f1815a21f4945 -size 19826757 +oid sha256:7465634b8d3d3fd4b06c64e331dce1b192365f08d98e966c774f483faec5baf8 +size 102021 diff --git a/portfolio/legislative_district_digest/district_ad-80/00__legislative_district_report__district_ad-80.ipynb b/portfolio/legislative_district_digest/district_ad-80/00__legislative_district_report__district_ad-80.ipynb index 5c1d613be0..53e20406ce 100644 --- a/portfolio/legislative_district_digest/district_ad-80/00__legislative_district_report__district_ad-80.ipynb +++ b/portfolio/legislative_district_digest/district_ad-80/00__legislative_district_report__district_ad-80.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d879e073c3e6ad7184872b94abed1fc1e3eb3d7acaf6c3cc2489e0f818ec61f4 -size 19826758 +oid sha256:c4342d87ffcc53f241b2bb0e1c95251624941ff919016a8f87e2c59361ba92ca +size 102025 diff --git a/portfolio/legislative_district_digest/district_sd-01/00__legislative_district_report__district_sd-01.ipynb b/portfolio/legislative_district_digest/district_sd-01/00__legislative_district_report__district_sd-01.ipynb index 596a5e730d..b37587cafc 100644 --- a/portfolio/legislative_district_digest/district_sd-01/00__legislative_district_report__district_sd-01.ipynb +++ b/portfolio/legislative_district_digest/district_sd-01/00__legislative_district_report__district_sd-01.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8da7ee87d5e202ad9e123ac07de6020b5334972b01b40143abfa35e8f581169a -size 22880785 +oid sha256:d0176976f228e17bb43e56c169ed60d738368fbfa0d4f65f5bfe53a01b87352d +size 169865 diff --git a/portfolio/legislative_district_digest/district_sd-02/00__legislative_district_report__district_sd-02.ipynb b/portfolio/legislative_district_digest/district_sd-02/00__legislative_district_report__district_sd-02.ipynb index 303fbdcd9d..7f271ccd20 100644 --- a/portfolio/legislative_district_digest/district_sd-02/00__legislative_district_report__district_sd-02.ipynb +++ b/portfolio/legislative_district_digest/district_sd-02/00__legislative_district_report__district_sd-02.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c33f2f0b8b29ab3bdebde78913ce31b947e39c3a4a4ff9713088d08c860041b7 -size 26291931 +oid sha256:9a9f822479a4b65f9a0e217ebb6ed81f0807971c56d3376d4870c2d361e2a9dc +size 170742 diff --git a/portfolio/legislative_district_digest/district_sd-03/00__legislative_district_report__district_sd-03.ipynb b/portfolio/legislative_district_digest/district_sd-03/00__legislative_district_report__district_sd-03.ipynb index b1cf3c7364..bd8a25acd9 100644 --- a/portfolio/legislative_district_digest/district_sd-03/00__legislative_district_report__district_sd-03.ipynb +++ b/portfolio/legislative_district_digest/district_sd-03/00__legislative_district_report__district_sd-03.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:68127c646b9a0f566cee491ad800d5d4cb107e8aff4fd7629bfbc821aaabb160 -size 26922902 +oid sha256:f95c6a89bcb0585abffb987f24f414444bbad21690acee52912d342e957c0633 +size 184595 diff --git a/portfolio/legislative_district_digest/district_sd-04/00__legislative_district_report__district_sd-04.ipynb b/portfolio/legislative_district_digest/district_sd-04/00__legislative_district_report__district_sd-04.ipynb index 0312986289..97a1dd1840 100644 --- a/portfolio/legislative_district_digest/district_sd-04/00__legislative_district_report__district_sd-04.ipynb +++ b/portfolio/legislative_district_digest/district_sd-04/00__legislative_district_report__district_sd-04.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a8779c75c4d41f88f49c34d95bfef21bb3b93514264b119a771dea097870039e -size 23905648 +oid sha256:9f92e751ba55c0f51c362a2764955343edb72cf41f20af7b442cec5e5ab8534d +size 188240 diff --git a/portfolio/legislative_district_digest/district_sd-05/00__legislative_district_report__district_sd-05.ipynb b/portfolio/legislative_district_digest/district_sd-05/00__legislative_district_report__district_sd-05.ipynb index 2382c61e6a..a1d1605c97 100644 --- a/portfolio/legislative_district_digest/district_sd-05/00__legislative_district_report__district_sd-05.ipynb +++ b/portfolio/legislative_district_digest/district_sd-05/00__legislative_district_report__district_sd-05.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dab655475ceda6a0119423e2f182e5376d925064c6180056f69b85b77fcf3493 -size 32399119 +oid sha256:878bf24ec318cba12efe4b3c03ebc689cd2e23b0bdc9dbdca1c24a0a75ec9f35 +size 161050 diff --git a/portfolio/legislative_district_digest/district_sd-06/00__legislative_district_report__district_sd-06.ipynb b/portfolio/legislative_district_digest/district_sd-06/00__legislative_district_report__district_sd-06.ipynb index 1b94a1661c..d62387c0d9 100644 --- a/portfolio/legislative_district_digest/district_sd-06/00__legislative_district_report__district_sd-06.ipynb +++ b/portfolio/legislative_district_digest/district_sd-06/00__legislative_district_report__district_sd-06.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f91d95a654eb19180446122940d0c904be5ce48060a9dd65236987026d446af -size 27565440 +oid sha256:1511743121e6aea1535cf2ee6234e7a835996523d4cabc08aafd4193473011b9 +size 151774 diff --git a/portfolio/legislative_district_digest/district_sd-07/00__legislative_district_report__district_sd-07.ipynb b/portfolio/legislative_district_digest/district_sd-07/00__legislative_district_report__district_sd-07.ipynb index 9af08bfd3d..d92166ec5b 100644 --- a/portfolio/legislative_district_digest/district_sd-07/00__legislative_district_report__district_sd-07.ipynb +++ b/portfolio/legislative_district_digest/district_sd-07/00__legislative_district_report__district_sd-07.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e862009367e27bcfb2ba229dd9530e195d7acfdea04e86f20d80e7e3d9e678b7 -size 29869472 +oid sha256:8145581c21a6ca49eeb934a49cc2a58c6bad515a0b5fca38b0a6a64a725cc5eb +size 147986 diff --git a/portfolio/legislative_district_digest/district_sd-08/00__legislative_district_report__district_sd-08.ipynb b/portfolio/legislative_district_digest/district_sd-08/00__legislative_district_report__district_sd-08.ipynb index 310a74dd23..aa3a5b3ad3 100644 --- a/portfolio/legislative_district_digest/district_sd-08/00__legislative_district_report__district_sd-08.ipynb +++ b/portfolio/legislative_district_digest/district_sd-08/00__legislative_district_report__district_sd-08.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fffd3827e1c891bdeee57826ac4fc5feef96344ea9b57fc604d3914118019fbe -size 29026069 +oid sha256:2e7dbd5c77de9e40847d46d3e31dc27f481aa96c5e2fd7ffc3b9b06dfbd89c47 +size 156365 diff --git a/portfolio/legislative_district_digest/district_sd-09/00__legislative_district_report__district_sd-09.ipynb b/portfolio/legislative_district_digest/district_sd-09/00__legislative_district_report__district_sd-09.ipynb index 43e15b6ad4..e65edd9351 100644 --- a/portfolio/legislative_district_digest/district_sd-09/00__legislative_district_report__district_sd-09.ipynb +++ b/portfolio/legislative_district_digest/district_sd-09/00__legislative_district_report__district_sd-09.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1f5dc6ae0e3bafafff5ea7e4526ea601be922bf8b2a4e832eb0e68d6b600b22 -size 31126578 +oid sha256:384ed21e63f20f0a5b3034094cf41785931fd666a45a7c05c40ee096e90ba59f +size 143080 diff --git a/portfolio/legislative_district_digest/district_sd-10/00__legislative_district_report__district_sd-10.ipynb b/portfolio/legislative_district_digest/district_sd-10/00__legislative_district_report__district_sd-10.ipynb index 75221b3c92..5c392ba899 100644 --- a/portfolio/legislative_district_digest/district_sd-10/00__legislative_district_report__district_sd-10.ipynb +++ b/portfolio/legislative_district_digest/district_sd-10/00__legislative_district_report__district_sd-10.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3edb2ac00273c439587a85b93e2a79fd3f3e20063d56d6f0a80151ee7c36e1f9 -size 30723046 +oid sha256:78b3d48c29959c640921c9bc76383034c6412c73ed77463b5ae837c119d1fd7c +size 147659 diff --git a/portfolio/legislative_district_digest/district_sd-11/00__legislative_district_report__district_sd-11.ipynb b/portfolio/legislative_district_digest/district_sd-11/00__legislative_district_report__district_sd-11.ipynb index 1dbecd1aa4..fbf48634ed 100644 --- a/portfolio/legislative_district_digest/district_sd-11/00__legislative_district_report__district_sd-11.ipynb +++ b/portfolio/legislative_district_digest/district_sd-11/00__legislative_district_report__district_sd-11.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e6b93966a15a2df63f7fa319bf4590e3b52e69b08c27515b08f9522f492f36ce -size 32345382 +oid sha256:d951d4d443e972a8f3f7edc13df03d7cacefdcfe1f00620a30662c98ddc97dce +size 175610 diff --git a/portfolio/legislative_district_digest/district_sd-12/00__legislative_district_report__district_sd-12.ipynb b/portfolio/legislative_district_digest/district_sd-12/00__legislative_district_report__district_sd-12.ipynb index 8a83e257aa..267adf28a4 100644 --- a/portfolio/legislative_district_digest/district_sd-12/00__legislative_district_report__district_sd-12.ipynb +++ b/portfolio/legislative_district_digest/district_sd-12/00__legislative_district_report__district_sd-12.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c1859a99f1fc6814287521482188122ccbbe842742ccb318fac53051a829469 -size 23548019 +oid sha256:187b35344ff41ccd8adb88e3612de510b203a6464b8d1d1e4ac54f4c10173910 +size 156144 diff --git a/portfolio/legislative_district_digest/district_sd-13/00__legislative_district_report__district_sd-13.ipynb b/portfolio/legislative_district_digest/district_sd-13/00__legislative_district_report__district_sd-13.ipynb index 10eb010726..f50a95880c 100644 --- a/portfolio/legislative_district_digest/district_sd-13/00__legislative_district_report__district_sd-13.ipynb +++ b/portfolio/legislative_district_digest/district_sd-13/00__legislative_district_report__district_sd-13.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed6df39d4ecb67e65c09c3f755993a3fd96780a43e7aa2ab5ffb264861a39a70 -size 33988913 +oid sha256:472640022f976e5d271d383d6f83aa76937ca1dae084e9d7096caaf9f5d63fc7 +size 161791 diff --git a/portfolio/legislative_district_digest/district_sd-14/00__legislative_district_report__district_sd-14.ipynb b/portfolio/legislative_district_digest/district_sd-14/00__legislative_district_report__district_sd-14.ipynb index dcc6d25d9c..320678d15f 100644 --- a/portfolio/legislative_district_digest/district_sd-14/00__legislative_district_report__district_sd-14.ipynb +++ b/portfolio/legislative_district_digest/district_sd-14/00__legislative_district_report__district_sd-14.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b91cca75d120d401fa47b83d2c0330f20d83c3e2ce6cc82ba69d1a032d621dbc -size 22916744 +oid sha256:8cde7f9a9f18ca27d5a96991d279617633629a13a4eaabc67de87c1f6740c9c8 +size 142787 diff --git a/portfolio/legislative_district_digest/district_sd-15/00__legislative_district_report__district_sd-15.ipynb b/portfolio/legislative_district_digest/district_sd-15/00__legislative_district_report__district_sd-15.ipynb index 3b57f1717b..37be5338df 100644 --- a/portfolio/legislative_district_digest/district_sd-15/00__legislative_district_report__district_sd-15.ipynb +++ b/portfolio/legislative_district_digest/district_sd-15/00__legislative_district_report__district_sd-15.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:401783074e8bdc886dd6b57b76b7b306093bfe64dccb4342072b3629f147b03d -size 23396212 +oid sha256:f70363f0b153b983719db7c265f4b355711c6daedc1262c94de0251be6328d48 +size 133918 diff --git a/portfolio/legislative_district_digest/district_sd-16/00__legislative_district_report__district_sd-16.ipynb b/portfolio/legislative_district_digest/district_sd-16/00__legislative_district_report__district_sd-16.ipynb index 0eea7b9b1c..9c584af1ae 100644 --- a/portfolio/legislative_district_digest/district_sd-16/00__legislative_district_report__district_sd-16.ipynb +++ b/portfolio/legislative_district_digest/district_sd-16/00__legislative_district_report__district_sd-16.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fd0cdd2803a3cc0a94474dbea2863913d048412753773d43c138124c0df92336 -size 21895936 +oid sha256:bfd85ebf5705881ba7dc00fff087106ebff68b30ff3b5a430e8a9d215e0a74c0 +size 142511 diff --git a/portfolio/legislative_district_digest/district_sd-17/00__legislative_district_report__district_sd-17.ipynb b/portfolio/legislative_district_digest/district_sd-17/00__legislative_district_report__district_sd-17.ipynb index 8e6e15e843..43a15df6b7 100644 --- a/portfolio/legislative_district_digest/district_sd-17/00__legislative_district_report__district_sd-17.ipynb +++ b/portfolio/legislative_district_digest/district_sd-17/00__legislative_district_report__district_sd-17.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:37fecb0d620c52b73c60b1f9b1b2d064fafcfef78e6d99e0eeaaf18a3bda0bd9 -size 21933018 +oid sha256:2fc49c3e9b4a113775e53d10846c9c8830952fe30e8ddc4294fde929e55578ed +size 133640 diff --git a/portfolio/legislative_district_digest/district_sd-18/00__legislative_district_report__district_sd-18.ipynb b/portfolio/legislative_district_digest/district_sd-18/00__legislative_district_report__district_sd-18.ipynb index a85036e0e3..df1b39d1bd 100644 --- a/portfolio/legislative_district_digest/district_sd-18/00__legislative_district_report__district_sd-18.ipynb +++ b/portfolio/legislative_district_digest/district_sd-18/00__legislative_district_report__district_sd-18.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4cecffb89940bf6925d93dbfe342a1e6a6cfef67c6d7f7bc1a2df7fa4be445e5 -size 20623220 +oid sha256:fbb0937771c41f4d95670f8e3b73c93614495bff80666c666225920a08d5bfc6 +size 138295 diff --git a/portfolio/legislative_district_digest/district_sd-19/00__legislative_district_report__district_sd-19.ipynb b/portfolio/legislative_district_digest/district_sd-19/00__legislative_district_report__district_sd-19.ipynb index 20a7ab74e7..5b65a76d36 100644 --- a/portfolio/legislative_district_digest/district_sd-19/00__legislative_district_report__district_sd-19.ipynb +++ b/portfolio/legislative_district_digest/district_sd-19/00__legislative_district_report__district_sd-19.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c15975d78dd787fc74518a5e37ee5939d16db0f9a61aeb3d050f4ce31aeef3f -size 27841396 +oid sha256:8600356ab0f9d343ee97cb53bcf9ba429eb7d1c44aeba46125dedce6eda247d7 +size 147190 diff --git a/portfolio/legislative_district_digest/district_sd-20/00__legislative_district_report__district_sd-20.ipynb b/portfolio/legislative_district_digest/district_sd-20/00__legislative_district_report__district_sd-20.ipynb index bb23b6b021..88164e3358 100644 --- a/portfolio/legislative_district_digest/district_sd-20/00__legislative_district_report__district_sd-20.ipynb +++ b/portfolio/legislative_district_digest/district_sd-20/00__legislative_district_report__district_sd-20.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1556a720b97c4d20f0588b33b33dfbdd9b0d122e1b0ef50e76f74498f5b65094 -size 30552855 +oid sha256:4f1c8f4295fb0b068b59fe4e9210bcc4cf87a086c0197f2dc260497640f4969c +size 147519 diff --git a/portfolio/legislative_district_digest/district_sd-21/00__legislative_district_report__district_sd-21.ipynb b/portfolio/legislative_district_digest/district_sd-21/00__legislative_district_report__district_sd-21.ipynb index aa5d18f217..73216be379 100644 --- a/portfolio/legislative_district_digest/district_sd-21/00__legislative_district_report__district_sd-21.ipynb +++ b/portfolio/legislative_district_digest/district_sd-21/00__legislative_district_report__district_sd-21.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dd8bbfa8e66e3ac20a7c3cbf6b1f4ab224795ec0f174e4cdcfaf85aa2c4b91a7 -size 25591774 +oid sha256:71fab90ff66f20f0456bb84ad8ea6053a5c0b7f1efde7ddeafddda3a45077bff +size 138172 diff --git a/portfolio/legislative_district_digest/district_sd-22/00__legislative_district_report__district_sd-22.ipynb b/portfolio/legislative_district_digest/district_sd-22/00__legislative_district_report__district_sd-22.ipynb index 3c599cbd17..4f4c81620e 100644 --- a/portfolio/legislative_district_digest/district_sd-22/00__legislative_district_report__district_sd-22.ipynb +++ b/portfolio/legislative_district_digest/district_sd-22/00__legislative_district_report__district_sd-22.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cfa144652ceece9a8573b060a5c4418ffe12315402858a4c09931ce336a683a3 -size 28879280 +oid sha256:c0e7f80c7eac796641438b1f96efc73c01b79036778508167becc5e5d08b1a61 +size 165289 diff --git a/portfolio/legislative_district_digest/district_sd-23/00__legislative_district_report__district_sd-23.ipynb b/portfolio/legislative_district_digest/district_sd-23/00__legislative_district_report__district_sd-23.ipynb index e173245cac..b98bf7b6d4 100644 --- a/portfolio/legislative_district_digest/district_sd-23/00__legislative_district_report__district_sd-23.ipynb +++ b/portfolio/legislative_district_digest/district_sd-23/00__legislative_district_report__district_sd-23.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cc881fe0c1b990a73e5578f748f2d89414abe2bcc2da8e2b76b50c6cbfbfaf50 -size 27442601 +oid sha256:75c4a46ed9e8eb70dae3e05299592a8e48065e92159837a349c53e547dc454be +size 133751 diff --git a/portfolio/legislative_district_digest/district_sd-24/00__legislative_district_report__district_sd-24.ipynb b/portfolio/legislative_district_digest/district_sd-24/00__legislative_district_report__district_sd-24.ipynb index 9aff68911d..100c3a987f 100644 --- a/portfolio/legislative_district_digest/district_sd-24/00__legislative_district_report__district_sd-24.ipynb +++ b/portfolio/legislative_district_digest/district_sd-24/00__legislative_district_report__district_sd-24.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c2b110feb5065fcec1095d5736ad68d8e03d8bc1f72dd4c6dbec1cee46bbe31 -size 34265588 +oid sha256:d08f138cad8c34a1c0188361ac452986c9d983455fe45421cc4a5494cb605530 +size 197492 diff --git a/portfolio/legislative_district_digest/district_sd-25/00__legislative_district_report__district_sd-25.ipynb b/portfolio/legislative_district_digest/district_sd-25/00__legislative_district_report__district_sd-25.ipynb index e88666c5b2..b965edc979 100644 --- a/portfolio/legislative_district_digest/district_sd-25/00__legislative_district_report__district_sd-25.ipynb +++ b/portfolio/legislative_district_digest/district_sd-25/00__legislative_district_report__district_sd-25.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:118c0ee2703a5824effc28be9c77d8a377f44538dc9df24cf6fcfa79f9a802a5 -size 28591383 +oid sha256:9ecc77b0620bba135d30ab3bb9126c2f776f0bec3f668b257240de3fbccae5ef +size 187911 diff --git a/portfolio/legislative_district_digest/district_sd-26/00__legislative_district_report__district_sd-26.ipynb b/portfolio/legislative_district_digest/district_sd-26/00__legislative_district_report__district_sd-26.ipynb index 65eec10f43..0890befa5b 100644 --- a/portfolio/legislative_district_digest/district_sd-26/00__legislative_district_report__district_sd-26.ipynb +++ b/portfolio/legislative_district_digest/district_sd-26/00__legislative_district_report__district_sd-26.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee44ec98d0aac9f356f2f48eac0e67b0851a76810adefdbd4d6ff7865254aeb4 -size 30921129 +oid sha256:da9fd1d9ab1ef43183a73f6ecb9899f01f191e639f34cae543f632a82c0a5e1b +size 183836 diff --git a/portfolio/legislative_district_digest/district_sd-27/00__legislative_district_report__district_sd-27.ipynb b/portfolio/legislative_district_digest/district_sd-27/00__legislative_district_report__district_sd-27.ipynb index a3069ac9fe..f1659effff 100644 --- a/portfolio/legislative_district_digest/district_sd-27/00__legislative_district_report__district_sd-27.ipynb +++ b/portfolio/legislative_district_digest/district_sd-27/00__legislative_district_report__district_sd-27.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06b24ca0e06809f3d30b310b88ce22160e60e12d899a214d88c7a8c457024fb5 -size 30078958 +oid sha256:7aaca4a64d0299e41a8797c441d7374ad7319db2b0f0a5388760d0cacd22c8d7 +size 152094 diff --git a/portfolio/legislative_district_digest/district_sd-28/00__legislative_district_report__district_sd-28.ipynb b/portfolio/legislative_district_digest/district_sd-28/00__legislative_district_report__district_sd-28.ipynb index 0248bc54ff..9ea8cfc97f 100644 --- a/portfolio/legislative_district_digest/district_sd-28/00__legislative_district_report__district_sd-28.ipynb +++ b/portfolio/legislative_district_digest/district_sd-28/00__legislative_district_report__district_sd-28.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f7849584db34f941f715d4281d07040788d83e40a8dda411066709ab203c60f1 -size 31346484 +oid sha256:1796fa567b662b63e9fdc8026c13cca88a2e4a83bf5a08881ad056a3045ed705 +size 174816 diff --git a/portfolio/legislative_district_digest/district_sd-29/00__legislative_district_report__district_sd-29.ipynb b/portfolio/legislative_district_digest/district_sd-29/00__legislative_district_report__district_sd-29.ipynb index 758223a805..b6788d6a01 100644 --- a/portfolio/legislative_district_digest/district_sd-29/00__legislative_district_report__district_sd-29.ipynb +++ b/portfolio/legislative_district_digest/district_sd-29/00__legislative_district_report__district_sd-29.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:920e27b8c60914be729e0ee9a646e48a8a6fded5f38d1318929387fc32acf66c -size 28501507 +oid sha256:4211ac63dbf3a4ae6ed916f4e03457871c195d4daf17edf31a760b2a31da9c6f +size 133544 diff --git a/portfolio/legislative_district_digest/district_sd-30/00__legislative_district_report__district_sd-30.ipynb b/portfolio/legislative_district_digest/district_sd-30/00__legislative_district_report__district_sd-30.ipynb index b8993aaa1b..9633b83358 100644 --- a/portfolio/legislative_district_digest/district_sd-30/00__legislative_district_report__district_sd-30.ipynb +++ b/portfolio/legislative_district_digest/district_sd-30/00__legislative_district_report__district_sd-30.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:03d1e5ad488b5415b48f34bec1844bbabd8b57c844e04baeb355aab5aa900c0f -size 27353175 +oid sha256:ad7c3c5a63f27017847b6c48c88301a67581138c87fad9d42ddd22db678a9307 +size 192692 diff --git a/portfolio/legislative_district_digest/district_sd-31/00__legislative_district_report__district_sd-31.ipynb b/portfolio/legislative_district_digest/district_sd-31/00__legislative_district_report__district_sd-31.ipynb index 9d483b5c50..cb3e44e551 100644 --- a/portfolio/legislative_district_digest/district_sd-31/00__legislative_district_report__district_sd-31.ipynb +++ b/portfolio/legislative_district_digest/district_sd-31/00__legislative_district_report__district_sd-31.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fb2c650350e144cff833addbe84fa3524aaa5fe0bfd622687738a34354e368e2 -size 23263817 +oid sha256:295d52b5ebfd11062b6f2687eb5c0137aef1eeddb9de1789bf65a0651154b6fe +size 115243 diff --git a/portfolio/legislative_district_digest/district_sd-32/00__legislative_district_report__district_sd-32.ipynb b/portfolio/legislative_district_digest/district_sd-32/00__legislative_district_report__district_sd-32.ipynb index bf08909718..ec00613178 100644 --- a/portfolio/legislative_district_digest/district_sd-32/00__legislative_district_report__district_sd-32.ipynb +++ b/portfolio/legislative_district_digest/district_sd-32/00__legislative_district_report__district_sd-32.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:358398a034e48394e3802cf22a8a2997f2eb417c110ef93940372dae85f54350 -size 24933006 +oid sha256:b62764dd3e01f2e348ff6a8a469b23258faf8634843d1ce3e45e0a3e54679565 +size 119958 diff --git a/portfolio/legislative_district_digest/district_sd-33/00__legislative_district_report__district_sd-33.ipynb b/portfolio/legislative_district_digest/district_sd-33/00__legislative_district_report__district_sd-33.ipynb index 2ab35e992b..8486fc1924 100644 --- a/portfolio/legislative_district_digest/district_sd-33/00__legislative_district_report__district_sd-33.ipynb +++ b/portfolio/legislative_district_digest/district_sd-33/00__legislative_district_report__district_sd-33.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:663e1b05e3993cb18122a53f32bafbc86682d10e5e3c50457d1f56fcd5eb0bae -size 28613969 +oid sha256:bdd5a8496cd07429ebe9feed7975a6e34ae3c566bc7f8f0ff0c628552e509bb6 +size 201693 diff --git a/portfolio/legislative_district_digest/district_sd-34/00__legislative_district_report__district_sd-34.ipynb b/portfolio/legislative_district_digest/district_sd-34/00__legislative_district_report__district_sd-34.ipynb index 2cad8e7172..acbe9276e0 100644 --- a/portfolio/legislative_district_digest/district_sd-34/00__legislative_district_report__district_sd-34.ipynb +++ b/portfolio/legislative_district_digest/district_sd-34/00__legislative_district_report__district_sd-34.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc9615995f6fcc48edf5b98a954d40403e82ed22abfdb69ed56062487d7baa36 -size 29596878 +oid sha256:1860c3dfee1155e73ff85eb97ef2e898ffd9325de33f20fac086a30b72049a41 +size 138168 diff --git a/portfolio/legislative_district_digest/district_sd-35/00__legislative_district_report__district_sd-35.ipynb b/portfolio/legislative_district_digest/district_sd-35/00__legislative_district_report__district_sd-35.ipynb index 32b601c5b1..8950e20aa2 100644 --- a/portfolio/legislative_district_digest/district_sd-35/00__legislative_district_report__district_sd-35.ipynb +++ b/portfolio/legislative_district_digest/district_sd-35/00__legislative_district_report__district_sd-35.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4775e1b892099d27ea9952dadb46634849c1c7593f802db3947d88bb8ffb4b3e -size 29343068 +oid sha256:9086b267554678d98553ad4320a870780ff58d7ddd354a0111cf403108cbc76f +size 174429 diff --git a/portfolio/legislative_district_digest/district_sd-36/00__legislative_district_report__district_sd-36.ipynb b/portfolio/legislative_district_digest/district_sd-36/00__legislative_district_report__district_sd-36.ipynb index be9c5ca4d6..a4c1826f49 100644 --- a/portfolio/legislative_district_digest/district_sd-36/00__legislative_district_report__district_sd-36.ipynb +++ b/portfolio/legislative_district_digest/district_sd-36/00__legislative_district_report__district_sd-36.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3bf79b72ec7927aa2e9aa57689ba068acb3df6b84e2cba628bb4096ecec37348 -size 24882380 +oid sha256:73095493a783d2d7128284dee56730f0918b1fbd9c0f29c2034a58dba0cd5066 +size 151946 diff --git a/portfolio/legislative_district_digest/district_sd-37/00__legislative_district_report__district_sd-37.ipynb b/portfolio/legislative_district_digest/district_sd-37/00__legislative_district_report__district_sd-37.ipynb index 1440802550..ab86ea3a95 100644 --- a/portfolio/legislative_district_digest/district_sd-37/00__legislative_district_report__district_sd-37.ipynb +++ b/portfolio/legislative_district_digest/district_sd-37/00__legislative_district_report__district_sd-37.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:daea64e60b1ddef8a0a9eca4882b020fabfc2b309d24bf71fc4a86ba88c5cd76 -size 25085385 +oid sha256:fb0cd1ef03d7432df37f5aa7cda797f950b7e605a902308e3ef921811e2daf5a +size 133552 diff --git a/portfolio/legislative_district_digest/district_sd-38/00__legislative_district_report__district_sd-38.ipynb b/portfolio/legislative_district_digest/district_sd-38/00__legislative_district_report__district_sd-38.ipynb index 2589dc7cd0..e37b9cf3f2 100644 --- a/portfolio/legislative_district_digest/district_sd-38/00__legislative_district_report__district_sd-38.ipynb +++ b/portfolio/legislative_district_digest/district_sd-38/00__legislative_district_report__district_sd-38.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1128013f3f684f0ebcdc845a1a50e9705f8a88910ee05bbaf963b6a401437e3b -size 22392112 +oid sha256:544f6aaa75f17792ff360771ca70d9e558f9a245a1348615bd8b629c2815dbd9 +size 124651 diff --git a/portfolio/legislative_district_digest/district_sd-39/00__legislative_district_report__district_sd-39.ipynb b/portfolio/legislative_district_digest/district_sd-39/00__legislative_district_report__district_sd-39.ipynb index 7bf15c924b..04e458e3d4 100644 --- a/portfolio/legislative_district_digest/district_sd-39/00__legislative_district_report__district_sd-39.ipynb +++ b/portfolio/legislative_district_digest/district_sd-39/00__legislative_district_report__district_sd-39.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ad9b2ee29ca03f9caf2cd939bdee1ee993ba59841f52f095c432018ed7eacbf1 -size 20538778 +oid sha256:a45dc8bd6bcc071a40b1e343bebff0e5125dc36c7fc0ad479f5f1b78c33ef5a8 +size 110997 diff --git a/portfolio/legislative_district_digest/district_sd-40/00__legislative_district_report__district_sd-40.ipynb b/portfolio/legislative_district_digest/district_sd-40/00__legislative_district_report__district_sd-40.ipynb index 1a6f77bd96..d3786b14a0 100644 --- a/portfolio/legislative_district_digest/district_sd-40/00__legislative_district_report__district_sd-40.ipynb +++ b/portfolio/legislative_district_digest/district_sd-40/00__legislative_district_report__district_sd-40.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:13b7bfc1fececf79ef2bf9f7f9bee813e0e9b0e03a4028ef4441ac6048dfdc36 -size 20538778 +oid sha256:cc5dac5a0eed28f2f7812887a3bd7ac4d5d81d16ebf2452545236a58fcdf7a2a +size 111000 diff --git a/portfolio/sites/district_digest.yml b/portfolio/sites/district_digest.yml index 169a6f38a9..bf554a23b2 100644 --- a/portfolio/sites/district_digest.yml +++ b/portfolio/sites/district_digest.yml @@ -8,24 +8,22 @@ parts: - params: district: 02 - Redding - params: - district: 03 - Marysville + district: 03 - Marysville / Sacramento - params: - district: 04 - Oakland + district: 04 - Bay Area / Oakland - params: - district: 05 - San Luis Obispo + district: 05 - San Luis Obispo / Santa Barbara - params: - district: 06 - Fresno + district: 06 - Fresno / Bakersfield - params: - district: 07 - Los Angeles + district: 07 - Los Angeles / Ventura - params: - district: 08 - San Bernardino - - params: - district: 09 - Bishop + district: 08 - San Bernardino / Riverside - params: district: 10 - Stockton - params: district: 11 - San Diego - params: - district: 12 - Irvine + district: 12 - Santa Ana readme: ./gtfs_digest/README.md title: District GTFS Digest diff --git a/rt_segment_speeds/segment_speed_utils/time_series_utils.py b/rt_segment_speeds/segment_speed_utils/time_series_utils.py index 7584e6f3f7..70e7190928 100644 --- a/rt_segment_speeds/segment_speed_utils/time_series_utils.py +++ b/rt_segment_speeds/segment_speed_utils/time_series_utils.py @@ -84,13 +84,13 @@ def parse_route_combined_name(df: pd.DataFrame) -> pd.DataFrame: operators_only_route_long_name = [ "Antelope Valley Transit Authority Schedule", "Bay Area 511 ACE Schedule", - "Bay Area 511 Caltrain Schedule", + #"Bay Area 511 Caltrain Schedule", "Bay Area 511 Emery Go-Round Schedule", "Bay Area 511 Petaluma Schedule", "Beach Cities GMV Schedule", "Bear Schedule", "Commerce Schedule", - "Elk Grove Schedule", + #"Elk Grove Schedule", "Humboldt Schedule", "LA DOT Schedule", "Lawndale Beat GMV Schedule", @@ -98,7 +98,7 @@ def parse_route_combined_name(df: pd.DataFrame) -> pd.DataFrame: "Redwood Coast Schedule", "Santa Maria Schedule", "StanRTA Schedule", - "VCTC GMV Schedule", + #"VCTC GMV Schedule", "Victor Valley GMV Schedule", "Visalia Schedule", "Yolobus Schedule",