From b863ad74e0e9881f07e84a3dc66620710101d9bc Mon Sep 17 00:00:00 2001 From: amandaha8 Date: Mon, 16 Jun 2025 16:38:01 +0000 Subject: [PATCH 01/10] changed where i filter so i only return routes above threshold --- .../18_shs_routes_ct_district_report.ipynb | 562 +++--------------- 1 file changed, 77 insertions(+), 485 deletions(-) diff --git a/gtfs_digest/18_shs_routes_ct_district_report.ipynb b/gtfs_digest/18_shs_routes_ct_district_report.ipynb index e131178cf..1320030d0 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": null, "id": "f6b01cd8-ccda-4d2a-9c64-9cca36e0713c", "metadata": {}, "outputs": [], @@ -30,13 +30,15 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "ec246873-6121-4544-8d62-f71dec06352e", "metadata": { "tags": [] }, "outputs": [], "source": [ + "\n", + "\n", "from calitp_data_analysis import geography_utils, utils\n", "from segment_speed_utils import gtfs_schedule_wrangling, helpers\n", "from shared_utils import (\n", @@ -48,12 +50,13 @@ " rt_dates,\n", " rt_utils,\n", ")\n", - "from update_vars import GTFS_DATA_DICT, RT_SCHED_GCS, SCHED_GCS, SEGMENT_GCS" + "from update_vars import GTFS_DATA_DICT, RT_SCHED_GCS, SCHED_GCS, SEGMENT_GCS\n", + "\n" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "ffeaad35-64a6-4b16-a93d-ac4a0759288a", "metadata": { "tags": [] @@ -68,7 +71,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "fac679d2-4c02-409f-9550-4334664c631a", "metadata": { "tags": [] @@ -80,7 +83,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "48e01cac-bde0-49bf-bfed-304f83f8fc10", "metadata": { "tags": [] @@ -92,7 +95,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "1771ea96-ce3b-415f-88f5-8ed54a9b6a5c", "metadata": { "tags": [] @@ -141,7 +144,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "c7a5c057-9789-447c-a0e4-20ca56bddea0", "metadata": { "tags": [] @@ -164,7 +167,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "id": "3e081d5e-43f5-4298-b98a-cd89390117be", "metadata": { "tags": [] @@ -210,14 +213,14 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "id": "b2d43e08-f0d0-4c17-b55b-2c7d509c2ddb", "metadata": { "tags": [] }, "outputs": [], "source": [ - "dissolved = dissolve_shn()" + "# dissolved = dissolve_shn()" ] }, { @@ -284,7 +287,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "id": "d3dc507a-7bb1-4d6b-81b2-b2e1b250cd05", "metadata": { "tags": [] @@ -317,7 +320,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "id": "495541e6-2344-4dab-95e9-00d9c66be124", "metadata": { "tags": [] @@ -330,60 +333,38 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "0598e1da-3f56-4415-b68b-63e12ff5109d", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "(242, 4)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "intersecting_buffer.shape" + "# intersecting_buffer.shape" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "id": "7011b56d-a411-4178-8d9d-5aed53dae8b2", "metadata": { "tags": [] }, "outputs": [], "source": [ - "buffered_df = buffer_shn(SHN_HWY_BUFFER_FEET)" + "# buffered_df = buffer_shn(SHN_HWY_BUFFER_FEET)" ] }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "id": "95d188c3-bdd6-4405-874b-f257a4a0d213", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['shn_route', 'geometry', 'highway_feet'], dtype='object')" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "buffered_df.columns" + "# buffered_df.columns" ] }, { @@ -396,7 +377,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "id": "e58e7e81-684e-46b9-96cb-3c9f0643e113", "metadata": { "tags": [] @@ -466,7 +447,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "id": "385b204c-1215-4fdb-8063-023618b85077", "metadata": { "tags": [] @@ -478,31 +459,12 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "id": "1dfaf6d4-a7e7-44ef-84fb-6bd2f691a615", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "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" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "intersecting.pct_route_on_hwy.describe()" ] @@ -553,21 +515,7 @@ }, { "cell_type": "code", - "execution_count": 36, - "id": "5b2d690d-9339-4589-ae73-fe2dcd103cea", - "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, + "execution_count": null, "id": "31c72996-a662-4278-9bad-f71f9d4c440e", "metadata": { "tags": [] @@ -591,12 +539,11 @@ " .reset_index()\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", + " # Filter out for any pct_route_on_hwy that we deem too low. \n", + " map_gdf = map_gdf.loc[map_gdf.pct_route_on_hwy > pct_route_intersection]\n", + " \n", " # Join back to get the original transit route geometries.\n", - " map_gdf = pd.merge(\n", + " map_gdf2 = pd.merge(\n", " gdf[\n", " [\"schedule_gtfs_dataset_key\", \"recent_combined_name\", \"geometry\"]\n", " ].drop_duplicates(),\n", @@ -604,12 +551,11 @@ " 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", + " \n", " text_df = pd.merge(\n", - " gdf.drop(columns=[\"pct_route_on_hwy\"]), filtered_gdf, how=\"inner\"\n", + " gdf.drop(columns=[\"pct_route_on_hwy\"]), map_gdf2.drop(columns = [\"geometry\"]), how=\"inner\"\n", " )\n", " text_df = (\n", " (\n", @@ -627,12 +573,12 @@ " .reset_index(drop=True)\n", " )\n", "\n", - " return map_gdf, text_df" + " return map_gdf2, text_df" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": null, "id": "9ce2810a-c58d-4f0e-8a06-d10e39cac140", "metadata": { "tags": [] @@ -642,526 +588,172 @@ "map_gdf, text_df = prep_transit_route_shs(intersecting, 20)" ] }, - { - "cell_type": "code", - "execution_count": 39, - "id": "f1c26505-554d-4822-ae77-105feb8423a1", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Y 2021\n", - "N 600\n", - "Name: on_shs, dtype: int64" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "map_gdf.on_shs.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "0e31fbcd-caf4-40b5-9c7b-a36652e4dac2", - "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, dtype: float64" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "map_gdf.loc[map_gdf.on_shs == \"N\"].pct_route_on_hwy.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "d2cff860-550b-4031-9665-dd931437e853", - "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, dtype: float64" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "map_gdf.loc[map_gdf.on_shs == \"Y\"].pct_route_on_hwy.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "78e83524-d55d-4029-8e45-f12cc705dfef", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "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)'" - ] - }, - "execution_count": 44, - "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", - ")\"\"\"" - ] - }, - { - "cell_type": "markdown", - "id": "9189c1a5-6b68-4f2b-a975-70314c96d3e2", - "metadata": {}, - "source": [ - "### Need one dataframe with one row per unique transit route + a boolean column that says \"on_shn\"" - ] - }, { "cell_type": "code", "execution_count": null, - "id": "d707ed64-1098-4c23-823a-52a922d71b80", + "id": "aa0e7234-950e-453b-9b8a-2c2b5ce51ddf", "metadata": { "tags": [] }, "outputs": [], "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", - ")" + "len(map_gdf)" ] }, { "cell_type": "code", "execution_count": null, - "id": "f48a5343-ec0e-4f58-a577-13f7f38c7518", + "id": "9b0224b6-fbec-4ece-9105-7c0ff4659b60", "metadata": { "tags": [] }, "outputs": [], "source": [ - "df1.recent_combined_name.value_counts().head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bd8e2e70-f44e-4abf-9136-c104d2d314e5", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "df1.loc[\n", - " df1.recent_combined_name == \"FlixBus 2015 San Diego - San Bernardino - Los Angeles\"\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ad98c1b0-e2d4-45be-98dc-bf23ed401af7", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "df1.columns" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fa0713cf-02b6-4ee9-b37e-2e1ed6ffcb9f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "df1 = (\n", - " df1.groupby(\n", - " [\n", - " \"portfolio_organization_name\",\n", - " \"recent_combined_name\",\n", - " \"schedule_gtfs_dataset_key\",\n", - " ]\n", - " )\n", - " .agg({\"pct_route_on_hwy\": \"sum\"})\n", - " .reset_index()\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "878224eb-d8e0-4eba-85b5-d61d1434e698", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "df1.pct_route_on_hwy.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "90d16bf5-0e86-4b27-b281-f64b536993da", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "len(df1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5083f717-caba-4a87-ba65-d79b0794dcd5", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "df1 = create_on_shs_column(df1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d0e3accc-1c06-42f0-9397-1aa7b2c3e39b", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "df1.sample(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fb004cc0-5d4d-49d2-859c-e6caef5e09f4", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "df1.on_shs_y_n.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2c8e1644-64bd-4651-adea-76a68b858824", - "metadata": { - "tags": [] - }, - "outputs": [], - "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", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e231fe14-c84c-4463-9fb0-1b217ac5ff55", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "final_df1.on_shs_y_n.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bcce6789-14e7-41f6-860a-a9d61597c281", - "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", + "\n", + "# Read in buffered shn here or re buffer\n", "HWY_FILE = f\"{GCS_FILE_PATH}shn_buffered_{SHN_HWY_BUFFER_FEET}_ft.parquet\"" ] }, { "cell_type": "code", "execution_count": null, - "id": "32dacb1a-4078-4c25-882f-ff56496cfee3", + "id": "cfb4fbe1-abf0-47f7-84ad-715272cd07fa", "metadata": { "tags": [] }, "outputs": [], "source": [ - "shn_dissolved = gpd.read_parquet(HWY_FILE, storage_options={\"token\": credentials.token})" + "shn_gdf = gpd.read_parquet(HWY_FILE, storage_options={\"token\": credentials.token})" ] }, { "cell_type": "code", "execution_count": null, - "id": "cdd1099a-c631-4280-9c65-e9b0ceaad9d1", + "id": "b40e60f9-d716-4dac-b038-9329667003a2", "metadata": { "tags": [] }, "outputs": [], "source": [ - "len(shn_dissolved)" + "len(shn_gdf)" ] }, { "cell_type": "code", "execution_count": null, - "id": "1803ecff-4e3d-4c30-b756-bea973d45fe7", + "id": "784c6f22-2e5c-4096-8196-b90e06b70393", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# shn_dissolved2 = shn_dissolved.dissolve()" + "shn_gdf2 = shn_gdf.dissolve()" ] }, { "cell_type": "code", "execution_count": null, - "id": "344d2399-d50e-4968-a15f-d547d171ebe7", + "id": "aa3d418c-cecd-4606-8265-b8db2d80c623", "metadata": { "tags": [] }, "outputs": [], "source": [ - "len(shn_dissolved2)" + "len(shn_gdf2)" ] }, { "cell_type": "code", "execution_count": null, - "id": "fc1011ee-f1a7-409b-a220-65fac76368af", + "id": "bf641b85-801b-45fe-8702-44758f1fdabe", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# shn_dissolved2.explore()" + "m = shn_gdf2.explore(height=250, width=500, name=\"shs\")" ] }, { "cell_type": "code", "execution_count": null, - "id": "061158b7-c40c-453b-b1d5-3c8e103e909c", + "id": "78c024e7-4089-4c5f-b7a7-ec759a2ae2b0", "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" ] }, { "cell_type": "code", "execution_count": null, - "id": "f0868168-a197-4fe0-adc6-980a5a43208a", + "id": "973623a7-b4e1-4719-9449-d79cad9ce189", "metadata": { "tags": [] }, "outputs": [], "source": [ - "intersecting.columns" + "m = map_gdf.explore(\"recent_combined_name\", m=m, name=\"transit_routes\")" ] }, { "cell_type": "code", "execution_count": null, - "id": "2b09f297-1f1a-4fc1-b997-4392a31cb873", + "id": "13168275-fdc3-4374-a13f-a48c6b569447", "metadata": { "tags": [] }, "outputs": [], "source": [ - "intersecting.shn_route = intersecting.shn_route.fillna(\"Doesn't intersect w/ SHN\")" + "# m" ] }, { "cell_type": "code", "execution_count": null, - "id": "dd81ea01-e974-419a-babc-87781ba30fd0", + "id": "78e83524-d55d-4029-8e45-f12cc705dfef", "metadata": { "tags": [] }, "outputs": [], "source": [ - "df1.head(3)" + "\"\"\" map_gdf.explore(\n", + " \"recent_combined_name\",\n", + " tiles=\"CartoDB positron\",\n", + " width=1000,\n", + " height=600,\n", + " style_kwds={\"weight\": 3},\n", + " legend=False,\n", + ")\"\"\"" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "8183fbaa-57cf-4622-ac83-4b925e103f3b", - "metadata": { - "tags": [] + "attachments": { + "01b2ee15-8222-4283-b89c-2743213736aa.png": { + "image/png": "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AAIQgAAEIAABCEAAAhCAAAQujQCJs0vrMeSFAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhDYhQCJs12wUikEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMClESBxdmk9hrwQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAK7ECBxtgtWKoUABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACELg0AiTOLq3HkBcCEIAABCAAAQhAAAIQgAAEIOAIfP/73z+89tprh5/97GfXV375y18efve73139/oMf/ODw29/+9vraX//618MLL7xw/ftf/vKXIVOpW3/+8Ic/HB577LE2/0iuqu1ue91yVthf//rXh3feeef6Tz/+8Y8Pwin6WVK/1hPpnV2rmFj5lsiV6X3str2tdfSRMr/61a8OP/zhDzfrK88kGgOjfuzILIJ2y43sz49pKfenP/3p8POf//xb4/qUtj3yNVZWq2Ok11687LizNrQ3r1OOucoPVXaZ+S9b95bPBe/jth7va/xvxWsNk44fWlN/pnfV9p56r7XRvZhk86Zj2aj6wq3HQNXf2q73z3vPEUa20Hl+7G2jJM7CKRd/hAAEIAABCEAAAhCAAAQgAAEInD8BDYRIoEN+bOJMrunvmhzS//7kJz+5Cr5LIkKCExKgsYk11dyXk3uyJJvel8klgQ5NwPm2u+11y/keFLkef/zxYQJmT70zJsfoj5Hee7ctNqd2JwwePHhw/XunH5XbKIjYqSMayZlcM301GhNL5crazsbqqW175Gssew3ARj5kD17eH/nE2d6+YFR/5gMtrz2YZHVmtre3XFlf7d125gO7fdAt531R5of21nutbxb5lup9rj42mzftbaN717/0mXdKf5U9P7q21y0XzRNInJ3/exASQgACEIAABCAAAQhAAAIQgAAEUgIS7JEfmzizN0jA/ZNPPrlOWEggxAav/e9yrwS5f/GLXzySULMBiE6XeLm8HBp4e/vtt6+q67S3Ri4JHD333HNp4mxN/TbwNeqPqK/27o9M773b9oEv7eMOZy3zve99L+y3Th0dO43qkft8X3Xb65bLZIvsRMZflOCWes7BtkWOaIyrniMZ9+Jl/Zi3ob15jerPfKDdzbsHk26d2fOkW8esbWd9pXXt1fbIB3bb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" + } }, - "outputs": [], + "cell_type": "markdown", + "id": "d7e0e78a-54ff-4112-a906-550cc4049979", + "metadata": {}, "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", - ")" + "![image.png](attachment:01b2ee15-8222-4283-b89c-2743213736aa.png)" ] }, { "cell_type": "code", "execution_count": null, - "id": "2550bdb2-9138-4fa0-9d8f-2f0191b0a70e", + "id": "9f908efe-e646-492b-b4e9-52747ae2a79b", "metadata": { "scrolled": true, "tags": [] }, "outputs": [], "source": [ - "# agg1.shn_route.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b08d65c7-a729-4eac-9a96-a71fa669073c", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "agg1.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5d12f49e-974c-4987-a2c5-6ac89f41f846", - "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", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "25b00cd2-a428-4742-b2d7-b68285109a4d", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "len(text_table), len(df1), len(agg1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "127a957d-b13a-4da0-ac82-600c5e0ec29f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "text_table.head()" + "text_df.sort_values(by = [\"pct_route_on_hwy\"], ascending = False)" ] } ], From b41cb448c84e6c4c2f4f7aff0dc05e8977cb68b8 Mon Sep 17 00:00:00 2001 From: amandaha8 Date: Mon, 16 Jun 2025 23:08:05 +0000 Subject: [PATCH 02/10] troubleshooting why coastal 80 89 has more min w vp than scheduled --- .../17_route_direction_viz_wrangling.ipynb | 2306 +++-------------- gtfs_digest/25_correct_crosswalk.ipynb | 2293 +++++++++++++--- gtfs_digest/quarterly_rollup.py | 2 +- 3 files changed, 2305 insertions(+), 2296 deletions(-) diff --git a/gtfs_digest/17_route_direction_viz_wrangling.ipynb b/gtfs_digest/17_route_direction_viz_wrangling.ipynb index 06979ed9b..0f8e4224a 100644 --- a/gtfs_digest/17_route_direction_viz_wrangling.ipynb +++ b/gtfs_digest/17_route_direction_viz_wrangling.ipynb @@ -10,14 +10,14 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "id": "4d4a0ed5-7956-4129-9488-a12cd32605cf", "metadata": { "tags": [] }, "outputs": [], "source": [ - "import _report_visuals_utils\n", + "\n", "import altair as alt\n", "import merge_data\n", "import numpy as np\n", @@ -38,7 +38,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "id": "4584e1f3-da28-4fa0-aff8-8598f773e3d0", "metadata": { "tags": [] @@ -51,7 +51,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "id": "891d7c5d-2440-4e24-8433-cf51274827f6", "metadata": { "tags": [] @@ -66,7 +66,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "id": "8fd523df-7869-4ac8-b5df-245d367da5b7", "metadata": { "tags": [] @@ -78,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "id": "97c1c3d5-de4c-4e10-ab32-69b5426359e1", "metadata": { "scrolled": true, @@ -196,27 +196,281 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "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": 8, + "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": 9, "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": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# df2.loc[df2.name.str.contains(\"Foothill\")].columns" + "df.loc[df.name.str.contains(\"Foothill\")].columns" ] }, { @@ -234,7 +488,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "id": "1b1be4fb-56ab-4339-b906-c4e674808bda", "metadata": { "scrolled": true, @@ -242,20 +496,25 @@ }, "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" + "ename": "KeyError", + "evalue": "'portfolio_organization_name'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipykernel_1288/3216236862.py\u001b[0m in \u001b[0;36m?\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m df.loc[df.organization_name.str.contains(\"Basin\")].sort_values(\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mby\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"portfolio_organization_name\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"service_date\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m )\n", + "\u001b[0;32m/opt/conda/lib/python3.11/site-packages/pandas/util/_decorators.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 327\u001b[0m \u001b[0mmsg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marguments\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0m_format_argument_list\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mallow_args\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 328\u001b[0m \u001b[0mFutureWarning\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 329\u001b[0m \u001b[0mstacklevel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfind_stack_level\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 330\u001b[0m )\n\u001b[0;32m--> 331\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/opt/conda/lib/python3.11/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, by, axis, ascending, inplace, kind, na_position, ignore_index, key)\u001b[0m\n\u001b[1;32m 6890\u001b[0m \u001b[0;34mf\" != length of by ({len(by)})\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6891\u001b[0m )\n\u001b[1;32m 6892\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mby\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6893\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 6894\u001b[0;31m \u001b[0mkeys\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_label_or_level_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mby\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6895\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6896\u001b[0m \u001b[0;31m# need to rewrap columns in Series to apply key function\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6897\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mkey\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/conda/lib/python3.11/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(.0)\u001b[0m\n\u001b[0;32m-> 6894\u001b[0;31m def sort_values( # type: ignore[override]\n\u001b[0m\u001b[1;32m 6895\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6896\u001b[0m \u001b[0mby\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mIndexLabel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6897\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mAxis\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/conda/lib/python3.11/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1846\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mget_level_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[assignment]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1847\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0m_values\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1848\u001b[0m )\n\u001b[1;32m 1849\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1850\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1851\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1852\u001b[0m \u001b[0;31m# Check for duplicates\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1853\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyError\u001b[0m: 'portfolio_organization_name'" + ] } ], "source": [ - "\"\"\"df2.loc[df2.organization_name.str.contains(\"Basin\")].sort_values(\n", + "df.loc[df.organization_name.str.contains(\"Basin\")].sort_values(\n", " by=[\"portfolio_organization_name\", \"service_date\"]\n", - ")\"\"\"" + ")" ] }, { @@ -268,7 +527,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "21a2c871-a007-4c5d-bbb1-e60840677934", "metadata": { "tags": [] @@ -280,7 +539,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "f0af1d32-4a16-45ac-8b5b-49a0cebc40b1", "metadata": { "tags": [] @@ -292,7 +551,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "5885a1d4-8b23-45bf-8e02-ca43ee56dda3", "metadata": { "tags": [] @@ -323,7 +582,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "5271c024-814b-44b1-a6c1-66f14ec2f587", "metadata": { "tags": [] @@ -335,1496 +594,125 @@ ] }, { - "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": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \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
4912792023-11-15b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
4912802023-12-13b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
4912812024-01-17b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
4912822024-02-14b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
4912832024-03-13b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
4912842024-04-17b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
4912852024-05-22b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
4912862024-06-12b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
4912872024-07-17b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
4912882024-08-14b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
4912892024-09-18b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
4912902024-10-16b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
4874952024-11-13a7f5522d7690161fc2be75857d7e2f79Basin Transit GMV ScheduleBasin Transit
4912912024-11-13b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
4874962024-12-11a7f5522d7690161fc2be75857d7e2f79Basin Transit GMV ScheduleBasin Transit
4912922024-12-11b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
4874972025-01-15a7f5522d7690161fc2be75857d7e2f79Basin Transit GMV ScheduleBasin Transit
4912932025-01-15b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
4874982025-02-12a7f5522d7690161fc2be75857d7e2f79Basin Transit GMV ScheduleBasin Transit
4912942025-02-12b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
4874992025-03-12a7f5522d7690161fc2be75857d7e2f79Basin Transit GMV ScheduleBasin Transit
4912952025-03-12b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit
\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", - "\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 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "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 +722,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 +748,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "800165a0-2145-4c65-8779-1d188a62297e", "metadata": { "tags": [] @@ -1905,7 +781,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "id": "a9715cd5-7575-4e99-ada3-8af07f90db36", "metadata": { "tags": [] @@ -1967,230 +843,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 +915,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "id": "c821a415-dc4d-4588-bbf8-a66e8c3f11ea", "metadata": { "tags": [] @@ -2263,7 +940,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "id": "6011fc21-f93f-44b9-89fc-fc1c2cf6c514", "metadata": { "tags": [] @@ -2289,7 +966,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "id": "0ea77378-f1ea-439a-a524-9d57d2a9786e", "metadata": { "tags": [] @@ -2324,7 +1001,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "id": "863d3dc3-0989-40ad-a6c4-bae1c76f638b", "metadata": { "tags": [] @@ -2345,105 +1022,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 +1050,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "id": "253acd03-9899-4105-8074-697c6a7a4c78", "metadata": { "tags": [] @@ -2511,7 +1095,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "id": "52cba1cf-d525-4bef-8a10-2ab283950f22", "metadata": { "tags": [] @@ -2552,7 +1136,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "id": "4a5b3147-0ae0-4e12-8896-ce30342f1737", "metadata": { "tags": [] @@ -2579,7 +1163,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "id": "4e4916d6-f056-4491-8cf8-5fabd4b66747", "metadata": { "tags": [] @@ -2617,7 +1201,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": null, "id": "c1af7311-1343-4afc-9e43-31d37f984f59", "metadata": { "tags": [] @@ -2631,7 +1215,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": null, "id": "cfc16f88-d708-4935-af52-41d68724b11d", "metadata": { "tags": [] @@ -2672,39 +1256,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 +1347,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "id": "efd20ba2-8537-43aa-a973-e8dd4c7d6ced", "metadata": { "tags": [] @@ -2827,33 +1384,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/25_correct_crosswalk.ipynb b/gtfs_digest/25_correct_crosswalk.ipynb index 010b54d41..edec9b4a6 100644 --- a/gtfs_digest/25_correct_crosswalk.ipynb +++ b/gtfs_digest/25_correct_crosswalk.ipynb @@ -55,7 +55,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 1, "id": "ea27c5ab-8392-4765-8148-18bce48f7126", "metadata": { "tags": [] @@ -70,9 +70,17 @@ "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", + "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", @@ -108,7 +116,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 4, "id": "3550f3cb-36fc-443e-9157-e4e5ff3c49e8", "metadata": { "tags": [] @@ -123,12 +131,12 @@ "id": "f34ac019-d424-4c95-890c-f24e5e28f9c2", "metadata": {}, "source": [ - "## `concatenate_crosswalk_organization`" + "## `concatenate_crosswalk_organization` in `merge_data`" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "id": "e47a5a06-f984-40a3-ba2a-2922f65b47a0", "metadata": { "tags": [] @@ -136,21 +144,21 @@ "outputs": [], "source": [ "FILE = GTFS_DATA_DICT.schedule_tables.gtfs_key_crosswalk\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\",\n", - " #\"organization_name\",\n", - " \"caltrans_district\"\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, + "execution_count": 6, "id": "68dab544-18b2-41a4-8c09-c5a1d4b9fb21", "metadata": { "tags": [] @@ -158,17 +166,13 @@ "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", - " )" + " SCHED_GCS, FILE, date_list, data_type=\"df\", columns=crosswalk_cols\n", + ")" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 7, "id": "efed2684-3b3f-4491-9a17-ca1f39f704d7", "metadata": { "tags": [] @@ -244,7 +248,7 @@ "1 05 - San Luis Obispo 2025-01-15 " ] }, - "execution_count": 13, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -255,23 +259,20 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 8, "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", + "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": 18, + "execution_count": 9, "id": "78487a16-5ddb-4bb2-8222-f1b8b07a7169", "metadata": { "tags": [] @@ -279,18 +280,16 @@ "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", - " )" + " 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": 19, + "execution_count": 10, "id": "ccade4de-aa73-4e0f-9bed-eefda4b997fa", "metadata": { "tags": [] @@ -373,7 +372,7 @@ "1 San Luis Obispo Regional Transit Authority " ] }, - "execution_count": 19, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -384,7 +383,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 11, "id": "c24c2442-e501-48c2-b153-3c4809c0f923", "metadata": { "tags": [] @@ -505,7 +504,7 @@ "158 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) " ] }, - "execution_count": 20, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -516,7 +515,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 12, "id": "d8697ac0-dc3f-451c-883c-16ecdbdf9e5f", "metadata": { "tags": [] @@ -524,19 +523,15 @@ "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", - " )" + "\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": 22, + "execution_count": 13, "id": "ff166e44-630b-4a59-badc-64df47aee00f", "metadata": { "tags": [] @@ -668,7 +663,7 @@ "1 0177a66b-9f33-407d-a72e-776429fb73d4 Eastbound " ] }, - "execution_count": 22, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -679,7 +674,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 14, "id": "271bb082-5ca3-4839-89be-8fe2686a90a4", "metadata": { "tags": [] @@ -747,7 +742,7 @@ "1 NaN peak 33.49 2025-04-16 " ] }, - "execution_count": 23, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -758,7 +753,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 15, "id": "c40b3b6e-5d94-4573-8286-4b81f120cd8f", "metadata": { "tags": [] @@ -897,7 +892,7 @@ "1 1.25 79.46 2025-02-12 " ] }, - "execution_count": 24, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -908,7 +903,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 16, "id": "71157a5a-8f8c-4bc7-b285-b1db9f8b2fb9", "metadata": { "tags": [] @@ -916,11 +911,45 @@ "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", - " )" + " df_sched, df_rt_sched, df_avg_speeds, df\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "a06dfdff-d91a-4479-89b8-07238c2a48cd", + "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": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2.columns" ] }, { @@ -933,7 +962,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 18, "id": "09df4d30-fd24-46c1-8550-b5e46eb1cb2a", "metadata": { "tags": [] @@ -959,7 +988,7 @@ " dtype='object')" ] }, - "execution_count": 27, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -970,7 +999,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 19, "id": "aa888960-d4e5-458b-bfc5-6d7db44c8dde", "metadata": { "tags": [] @@ -984,7 +1013,7 @@ " '2025-05-14T00:00:00.000000000'], dtype='datetime64[ns]')" ] }, - "execution_count": 30, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -995,16 +1024,42 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 20, "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')]" + "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 239\n", + "Name: name, dtype: int64" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "route_80_89.name.value_counts()" ] }, { @@ -1017,7 +1072,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 22, "id": "575c71e8-c5eb-4a4d-bcab-d92e99b71d8b", "metadata": { "tags": [] @@ -1029,7 +1084,7 @@ "(239, 41)" ] }, - "execution_count": 33, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -1040,7 +1095,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 23, "id": "c4b109a3-9e08-4789-b810-ba12cfb0461d", "metadata": { "scrolled": true, @@ -1053,7 +1108,44 @@ }, { "cell_type": "code", - "execution_count": 36, + "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", + " '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": [] @@ -1068,7 +1160,7 @@ "Name: time_period, dtype: int64" ] }, - "execution_count": 36, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -1077,9 +1169,17 @@ "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": 37, + "execution_count": 26, "id": "1be84f1e-6b32-4367-8b43-cd0434b8d058", "metadata": { "scrolled": true, @@ -1107,7 +1207,7 @@ " \n", " \n", " \n", - " schedule_gtfs_dataset_key\n", + " recent_combined_name\n", " route_id\n", " direction_id\n", " time_period\n", @@ -1115,19 +1215,6 @@ " avg_stop_miles\n", " n_scheduled_trips\n", " frequency\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", - " name\n", - " combined_name\n", - " recent_combined_name\n", - " recent_route_id\n", " route_primary_direction\n", " minutes_atleast1_vp\n", " minutes_atleast2_vp\n", @@ -1147,67 +1234,14 @@ " pct_sched_journey_atleast2_vp\n", " rt_sched_journey_ratio\n", " avg_rt_service_minutes\n", - " sched_rt_category\n", " speed_mph\n", - " schedule_source_record_id\n", - " base64_url\n", - " caltrans_district\n", " portfolio_organization_name\n", " \n", " \n", " \n", " \n", - " 13089\n", - " 1770249a5a2e770ca90628434d4934b1\n", - " 4134\n", - " 0\n", - " peak\n", - " 93.00\n", - " 29.04\n", - " 4\n", - " 0.50\n", - " 2025-05-14\n", - " 1.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " express\n", - " VCTC GMV Schedule\n", - " 80__80-89 Coastal Express\n", - " 80-89 Coastal Express\n", - " 4134\n", - " Westbound\n", - " 99\n", - " 97\n", - " 96.68\n", - " 181.00\n", - " 292\n", - " 0\n", - " 2\n", - " 0\n", - " 0\n", - " 2\n", - " 3.02\n", - " 0.00\n", - " 1.00\n", - " 1.00\n", - " 0.55\n", - " 0.54\n", - " 0.53\n", - " 48.34\n", - " schedule_and_vp\n", - " 33.15\n", - " recrAG7e0oOiR6FiP\n", - " aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz\n", - " 07 - Los Angeles / Ventura\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " \n", - " \n", " 13835\n", - " 1770249a5a2e770ca90628434d4934b1\n", + " 80-89 Coastal Express\n", " 4134\n", " 1\n", " peak\n", @@ -1215,19 +1249,6 @@ " 7.71\n", " 5\n", " 0.62\n", - " 2025-05-14\n", - " 1.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " express\n", - " VCTC GMV Schedule\n", - " 80__80-89 Coastal Express\n", - " 80-89 Coastal Express\n", - " 4134\n", " Eastbound\n", " 466\n", " 455\n", @@ -1247,16 +1268,12 @@ " 1.00\n", " 1.70\n", " 147.42\n", - " schedule_and_vp\n", " 15.47\n", - " recrAG7e0oOiR6FiP\n", - " aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz\n", - " 07 - Los Angeles / Ventura\n", " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", " \n", " \n", " 13934\n", - " 1770249a5a2e770ca90628434d4934b1\n", + " 80-89 Coastal Express\n", " 4136\n", " 1\n", " peak\n", @@ -1264,19 +1281,6 @@ " 32.10\n", " 1\n", " 0.12\n", - " 2025-05-14\n", - " 1.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " express\n", - " VCTC GMV Schedule\n", - " 80X__80-89 Coastal Express\n", - " 80-89 Coastal Express\n", - " 4136\n", " Eastbound\n", " 90\n", " 85\n", @@ -1296,16 +1300,12 @@ " 1.00\n", " 3.20\n", " 159.92\n", - " schedule_and_vp\n", " NaN\n", - " recrAG7e0oOiR6FiP\n", - " aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz\n", - " 07 - Los Angeles / Ventura\n", " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", " \n", " \n", " 14004\n", - " 1770249a5a2e770ca90628434d4934b1\n", + " 80-89 Coastal Express\n", " 4137\n", " 1\n", " peak\n", @@ -1313,19 +1313,6 @@ " 28.88\n", " 2\n", " 0.25\n", - " 2025-05-14\n", - " 1.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " express\n", - " VCTC GMV Schedule\n", - " 81__80-89 Coastal Express\n", - " 80-89 Coastal Express\n", - " 4137\n", " Eastbound\n", " 78\n", " 78\n", @@ -1345,16 +1332,12 @@ " 0.58\n", " 0.58\n", " 77.67\n", - " schedule_and_vp\n", " 19.46\n", - " recrAG7e0oOiR6FiP\n", - " aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz\n", - " 07 - Los Angeles / Ventura\n", " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", " \n", " \n", " 14109\n", - " 1770249a5a2e770ca90628434d4934b1\n", + " 80-89 Coastal Express\n", " 4141\n", " 1\n", " peak\n", @@ -1362,19 +1345,6 @@ " 17.82\n", " 2\n", " 0.25\n", - " 2025-05-14\n", - " 1.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " express\n", - " VCTC GMV Schedule\n", - " 84__80-89 Coastal Express\n", - " 80-89 Coastal Express\n", - " 4141\n", " Eastbound\n", " 309\n", " 264\n", @@ -1394,16 +1364,12 @@ " 1.00\n", " 1.43\n", " 187.70\n", - " schedule_and_vp\n", " NaN\n", - " recrAG7e0oOiR6FiP\n", - " aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz\n", - " 07 - Los Angeles / Ventura\n", " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", " \n", " \n", " 14173\n", - " 1770249a5a2e770ca90628434d4934b1\n", + " 80-89 Coastal Express\n", " 4143\n", " 1\n", " peak\n", @@ -1411,19 +1377,6 @@ " 3.70\n", " 1\n", " 0.12\n", - " 2025-05-14\n", - " 1.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " express\n", - " VCTC GMV Schedule\n", - " 85__80-89 Coastal Express\n", - " 80-89 Coastal Express\n", - " 4143\n", " Eastbound\n", " 0\n", " 0\n", @@ -1443,16 +1396,12 @@ " NaN\n", " NaN\n", " NaN\n", - " schedule_only\n", " NaN\n", - " recrAG7e0oOiR6FiP\n", - " aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz\n", - " 07 - Los Angeles / Ventura\n", " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", " \n", " \n", " 14237\n", - " 1770249a5a2e770ca90628434d4934b1\n", + " 80-89 Coastal Express\n", " 4145\n", " 1\n", " peak\n", @@ -1460,19 +1409,6 @@ " 2.91\n", " 2\n", " 0.25\n", - " 2025-05-14\n", - " 1.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " express\n", - " VCTC GMV Schedule\n", - " 86__80-89 Coastal Express\n", - " 80-89 Coastal Express\n", - " 4145\n", " Eastbound\n", " 349\n", " 341\n", @@ -1492,16 +1428,12 @@ " 1.00\n", " 6.74\n", " 714.46\n", - " schedule_and_vp\n", " 30.45\n", - " recrAG7e0oOiR6FiP\n", - " aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz\n", - " 07 - Los Angeles / Ventura\n", " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", " \n", " \n", " 14307\n", - " 1770249a5a2e770ca90628434d4934b1\n", + " 80-89 Coastal Express\n", " 4146\n", " 1\n", " peak\n", @@ -1509,19 +1441,6 @@ " 38.06\n", " 1\n", " 0.12\n", - " 2025-05-14\n", - " 1.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " express\n", - " VCTC GMV Schedule\n", - " 87__80-89 Coastal Express\n", - " 80-89 Coastal Express\n", - " 4146\n", " Eastbound\n", " 263\n", " 258\n", @@ -1541,16 +1460,12 @@ " 1.00\n", " 4.49\n", " 579.38\n", - " schedule_and_vp\n", " NaN\n", - " recrAG7e0oOiR6FiP\n", - " aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz\n", - " 07 - Los Angeles / Ventura\n", " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", " \n", " \n", " 14377\n", - " 1770249a5a2e770ca90628434d4934b1\n", + " 80-89 Coastal Express\n", " 4148\n", " 1\n", " peak\n", @@ -1558,19 +1473,6 @@ " 5.57\n", " 3\n", " 0.38\n", - " 2025-05-14\n", - " 1.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " 0.00\n", - " express\n", - " VCTC GMV Schedule\n", - " 89__80-89 Coastal Express\n", - " 80-89 Coastal Express\n", - " 4148\n", " Eastbound\n", " 622\n", " 621\n", @@ -1590,11 +1492,7 @@ " 1.00\n", " 2.17\n", " 324.76\n", - " schedule_and_vp\n", " NaN\n", - " recrAG7e0oOiR6FiP\n", - " aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz\n", - " 07 - Los Angeles / Ventura\n", " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", " \n", " \n", @@ -1602,19 +1500,17 @@ "" ], "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", + " recent_combined_name route_id direction_id time_period \\\n", + "13835 80-89 Coastal Express 4134 1 peak \n", + "13934 80-89 Coastal Express 4136 1 peak \n", + "14004 80-89 Coastal Express 4137 1 peak \n", + "14109 80-89 Coastal Express 4141 1 peak \n", + "14173 80-89 Coastal Express 4143 1 peak \n", + "14237 80-89 Coastal Express 4145 1 peak \n", + "14307 80-89 Coastal Express 4146 1 peak \n", + "14377 80-89 Coastal Express 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", @@ -1624,85 +1520,57 @@ "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", + " frequency route_primary_direction minutes_atleast1_vp \\\n", + "13835 0.62 Eastbound 466 \n", + "13934 0.12 Eastbound 90 \n", + "14004 0.25 Eastbound 78 \n", + "14109 0.25 Eastbound 309 \n", + "14173 0.12 Eastbound 0 \n", + "14237 0.25 Eastbound 349 \n", + "14307 0.12 Eastbound 263 \n", + "14377 0.38 Eastbound 622 \n", + "\n", + " minutes_atleast2_vp total_rt_service_minutes \\\n", + "13835 455 589.67 \n", + "13934 85 159.92 \n", + "14004 78 77.67 \n", + "14109 264 375.40 \n", + "14173 0 NaN \n", + "14237 341 1428.93 \n", + "14307 258 579.38 \n", + "14377 621 974.28 \n", + "\n", + " total_scheduled_service_minutes total_vp vp_in_shape is_early \\\n", + "13835 346.00 1367 0 0 \n", + "13934 50.00 279 0 0 \n", + "14004 134.00 234 0 1 \n", + "14109 262.00 816 0 0 \n", + "14173 NaN 0 0 0 \n", + "14237 212.00 1029 0 0 \n", + "14307 129.00 777 0 0 \n", + "14377 449.00 1858 0 0 \n", + "\n", + " is_ontime is_late n_vp_trips vp_per_minute pct_in_shape \\\n", + "13835 0 4 4 2.32 0.00 \n", + "13934 0 1 1 1.74 0.00 \n", + "14004 0 0 1 3.01 0.00 \n", + "14109 0 2 2 2.17 0.00 \n", + "14173 0 0 0 NaN NaN \n", + "14237 0 2 2 0.72 0.00 \n", + "14307 0 1 1 1.34 0.00 \n", + "14377 0 3 3 1.91 0.00 \n", + "\n", + " pct_rt_journey_atleast1_vp pct_rt_journey_atleast2_vp \\\n", + "13835 0.79 0.77 \n", + "13934 0.56 0.53 \n", + "14004 1.00 1.00 \n", + "14109 0.82 0.70 \n", + "14173 NaN NaN \n", + "14237 0.24 0.24 \n", + "14307 0.45 0.45 \n", + "14377 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", @@ -1712,41 +1580,17 @@ "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", + " rt_sched_journey_ratio avg_rt_service_minutes speed_mph \\\n", + "13835 1.70 147.42 15.47 \n", + "13934 3.20 159.92 NaN \n", + "14004 0.58 77.67 19.46 \n", + "14109 1.43 187.70 NaN \n", + "14173 NaN NaN NaN \n", + "14237 6.74 714.46 30.45 \n", + "14307 4.49 579.38 NaN \n", + "14377 2.17 324.76 NaN \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", @@ -1757,13 +1601,1642 @@ "14377 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) " ] }, - "execution_count": 37, + "execution_count": 26, + "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", + " \"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", + " \"portfolio_organization_name\",\n", + " ]\n", + "]" + ] + }, + { + "cell_type": "markdown", + "id": "7de2bc8b-07fa-42b5-8068-d46888022742", + "metadata": {}, + "source": [ + "# Aggregation per my notebook #17" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "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", + "
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
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_cmVnaW9uSWQ9Q0E1NThEREMtRDdGMi00QjQ4LTlDQUMtREVFQTExMzRGODIw06 - 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", + " caltrans_district portfolio_organization_name \n", + "0 06 - Fresno / Bakersfield Tulare County Regional Transit Agency " + ] + }, + "execution_count": 27, + "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": 28, + "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": 29, + "id": "73009687-4db1-4ef1-9476-82f31b675de3", + "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_name
02025-01-151
12025-01-1501 City Hall - Armory + Arbor0
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name portfolio_organization_name\n", + "0 2025-01-15 1\n", + "1 2025-01-15 01 City Hall - Armory + Arbor 0" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unique_route_names.head(2)" + ] + }, + { + "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([\"service_date\", \"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": "870bb884-c57f-4af8-924f-9c77d3ad8014", + "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", + "
service_daterecent_combined_nameroute_id
14082025-01-1580-89 Coastal Express12
60032025-03-1280-89 Coastal Express12
83212025-04-1680-89 Coastal Express12
106482025-05-1480-89 Coastal Express12
37352025-02-1280-89 Coastal Express12
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name route_id\n", + "1408 2025-01-15 80-89 Coastal Express 12\n", + "6003 2025-03-12 80-89 Coastal Express 12\n", + "8321 2025-04-16 80-89 Coastal Express 12\n", + "10648 2025-05-14 80-89 Coastal Express 12\n", + "3735 2025-02-12 80-89 Coastal Express 12" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unique_route_ids2.sort_values(by=[\"route_id\"], ascending=False).head()" + ] + }, + { + "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": 38, + "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": 43, + "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": 40, + "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": "markdown", + "id": "f1362d85-3da7-48c2-8ba2-6d49539583f7", + "metadata": {}, + "source": [ + "## Aggregate similar to quarterly rollup?\n", + "* `route_id`, `recent_route_id`, and `combined_name` all cause multiple rows to pop up for 80-89 Coastal Express\n" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "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": 58, + "id": "3f1dd963-efd3-4d62-bd0a-ea5aa02a0604", + "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": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df3.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "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", + " \"frequency\",\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "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", + " )\n", + " .agg({col: \"sum\" for col in to_sum})\n", + " .reset_index()\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "627ce0a2-53c2-4ab5-8bfb-5e43220f9e59", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "agg1 = agg1.rename(\n", + " columns={\n", + " \"total_rt_service_minutes\": \"rt_service_minutes\",\n", + " \"total_scheduled_service_minutes\": \"scheduled_service_minutes\",\n", + " }).pipe(\n", + " 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", + " })" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "b01ba61c-e1be-435c-8249-821fd30dde95", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'avg_rt_service_minutes',\n", + " 'avg_scheduled_service_minutes',\n", + " 'avg_stop_miles',\n", + " 'combined_name',\n", + " 'name',\n", + " 'recent_route_id',\n", + " 'route_id',\n", + " 'rt_sched_journey_ratio',\n", + " 'sched_rt_category',\n", + " 'speed_mph'}" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set(list(df3.columns))-set(list(agg1.columns))" + ] + }, + { + "cell_type": "markdown", + "id": "32591008-bcf9-426a-88e9-3d18a68f7369", + "metadata": {}, + "source": [ + "### Directin 1's `pct_sched_journey_atleast1_vp ` and `pct_sched_journey_atleast2_vp ` are more than 1, which is wrong" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "c2681c31-1d45-4358-b780-5dc686de59e7", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[0;31mSignature:\u001b[0m \u001b[0mmetrics\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcalculate_rt_vs_schedule_metrics\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mpandas\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mframe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mpandas\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mframe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mSource:\u001b[0m \n", + "\u001b[0;32mdef\u001b[0m \u001b[0mcalculate_rt_vs_schedule_metrics\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m->\u001b[0m\u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"\u001b[0m\n", + "\u001b[0;34m Calculate RT vs schedule metrics\u001b[0m\n", + "\u001b[0;34m \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0massign\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mvp_per_minute\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtotal_vp\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrt_service_minutes\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mpct_in_shape\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvp_in_shape\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtotal_vp\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mpct_rt_journey_atleast1_vp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mminutes_atleast1_vp\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrt_service_minutes\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mpct_rt_journey_atleast2_vp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mminutes_atleast2_vp\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrt_service_minutes\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mpct_sched_journey_atleast1_vp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mminutes_atleast1_vp\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscheduled_service_minutes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mpct_sched_journey_atleast2_vp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mminutes_atleast2_vp\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscheduled_service_minutes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mFile:\u001b[0m ~/data-analyses/rt_segment_speeds/segment_speed_utils/metrics.py\n", + "\u001b[0;31mType:\u001b[0m function" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "metrics.calculate_rt_vs_schedule_metrics??" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "id": "7ccc1e31-14cb-48bd-9ba2-6d3573220889", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2309" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df3.loc[df3.direction_id == 1].minutes_atleast1_vp.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "id": "1a5ec264-3efb-4daf-b155-900668eb48ba", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1704.0" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df3.loc[df3.direction_id == 1].total_scheduled_service_minutes.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "id": "3fd63d62-bc88-4bc2-8caf-009c3e600ff9", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2232" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df3.loc[df3.direction_id == 1].minutes_atleast2_vp.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "id": "11c66609-76d1-4c91-b605-635c73c1b2fb", + "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", + "
minutes_atleast1_vptotal_scheduled_service_minutesminutes_atleast2_vp
13800466346.00455
138709050.0085
1396978134.0078
14039441384.00394
141440NaN0
14202349212.00341
14272263129.00258
14342622449.00621
\n", + "
" + ], + "text/plain": [ + " minutes_atleast1_vp total_scheduled_service_minutes \\\n", + "13800 466 346.00 \n", + "13870 90 50.00 \n", + "13969 78 134.00 \n", + "14039 441 384.00 \n", + "14144 0 NaN \n", + "14202 349 212.00 \n", + "14272 263 129.00 \n", + "14342 622 449.00 \n", + "\n", + " minutes_atleast2_vp \n", + "13800 455 \n", + "13870 85 \n", + "13969 78 \n", + "14039 394 \n", + "14144 0 \n", + "14202 341 \n", + "14272 258 \n", + "14342 621 " + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df3.loc[df3.direction_id == 1][[\"minutes_atleast1_vp\", \"total_scheduled_service_minutes\", \"minutes_atleast2_vp\"]]" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "id": "9b1212c7-304a-4eb1-afc0-0934bff5db01", + "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", + "
minutes_atleast1_vptotal_scheduled_service_minutesminutes_atleast2_vp
13800466346.00455
138709050.0085
1396978134.0078
14039441384.00394
141440NaN0
14202349212.00341
14272263129.00258
14342622449.00621
\n", + "
" + ], + "text/plain": [ + " minutes_atleast1_vp total_scheduled_service_minutes \\\n", + "13800 466 346.00 \n", + "13870 90 50.00 \n", + "13969 78 134.00 \n", + "14039 441 384.00 \n", + "14144 0 NaN \n", + "14202 349 212.00 \n", + "14272 263 129.00 \n", + "14342 622 449.00 \n", + "\n", + " minutes_atleast2_vp \n", + "13800 455 \n", + "13870 85 \n", + "13969 78 \n", + "14039 394 \n", + "14144 0 \n", + "14202 341 \n", + "14272 258 \n", + "14342 621 " + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "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": 88, + "id": "fd65fad6-9108-48a1-843e-a03eb3c8328e", + "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", + "
minutes_atleast1_vptotal_scheduled_service_minutesminutes_atleast2_vp
13800466346.00455
138709050.0085
1396978134.0078
14039441384.00394
141440NaN0
14202349212.00341
14272263129.00258
14342622449.00621
\n", + "
" + ], + "text/plain": [ + " minutes_atleast1_vp total_scheduled_service_minutes \\\n", + "13800 466 346.00 \n", + "13870 90 50.00 \n", + "13969 78 134.00 \n", + "14039 441 384.00 \n", + "14144 0 NaN \n", + "14202 349 212.00 \n", + "14272 263 129.00 \n", + "14342 622 449.00 \n", + "\n", + " minutes_atleast2_vp \n", + "13800 455 \n", + "13870 85 \n", + "13969 78 \n", + "14039 394 \n", + "14144 0 \n", + "14202 341 \n", + "14272 258 \n", + "14342 621 " + ] + }, + "execution_count": 88, + "metadata": {}, + "output_type": "execute_result" + } + ], + "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": 78, + "id": "bb67231c-52ce-4f54-88ac-784671a07387", + "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", + "
01
schedule_gtfs_dataset_key1770249a5a2e770ca90628434d4934b11770249a5a2e770ca90628434d4934b1
direction_id01
time_periodall_dayall_day
service_date2025-05-14 00:00:002025-05-14 00:00:00
is_express1.001.00
is_ferry0.000.00
is_rail0.000.00
is_coverage0.000.00
is_local0.000.00
is_downtown_local0.000.00
is_rapid0.000.00
typologyexpressexpress
recent_combined_name80-89 Coastal Express80-89 Coastal Express
route_primary_directionWestboundEastbound
schedule_source_record_idrecrAG7e0oOiR6FiPrecrAG7e0oOiR6FiP
base64_urlaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz
caltrans_district07 - Los Angeles / Ventura07 - Los Angeles / Ventura
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)
n_scheduled_trips1819
minutes_atleast1_vp12012309
minutes_atleast2_vp11752232
total_rt_service_minutes2022.504340.28
total_scheduled_service_minutes1337.001704.00
total_vp35416751
vp_in_shape00
is_early41
is_ontime20
is_late614
n_vp_trips1215
frequency0.730.77
vp_per_minute1.751.56
pct_in_shape0.000.00
pct_rt_journey_atleast1_vp0.590.53
pct_rt_journey_atleast2_vp0.580.51
pct_sched_journey_atleast1_vp0.901.36
pct_sched_journey_atleast2_vp0.881.31
\n", + "
" + ], + "text/plain": [ + " 0 \\\n", + "schedule_gtfs_dataset_key 1770249a5a2e770ca90628434d4934b1 \n", + "direction_id 0 \n", + "time_period all_day \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", + "recent_combined_name 80-89 Coastal Express \n", + "route_primary_direction Westbound \n", + "schedule_source_record_id recrAG7e0oOiR6FiP \n", + "base64_url aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "caltrans_district 07 - Los Angeles / Ventura \n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "n_scheduled_trips 18 \n", + "minutes_atleast1_vp 1201 \n", + "minutes_atleast2_vp 1175 \n", + "total_rt_service_minutes 2022.50 \n", + "total_scheduled_service_minutes 1337.00 \n", + "total_vp 3541 \n", + "vp_in_shape 0 \n", + "is_early 4 \n", + "is_ontime 2 \n", + "is_late 6 \n", + "n_vp_trips 12 \n", + "frequency 0.73 \n", + "vp_per_minute 1.75 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.59 \n", + "pct_rt_journey_atleast2_vp 0.58 \n", + "pct_sched_journey_atleast1_vp 0.90 \n", + "pct_sched_journey_atleast2_vp 0.88 \n", + "\n", + " 1 \n", + "schedule_gtfs_dataset_key 1770249a5a2e770ca90628434d4934b1 \n", + "direction_id 1 \n", + "time_period all_day \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", + "recent_combined_name 80-89 Coastal Express \n", + "route_primary_direction Eastbound \n", + "schedule_source_record_id recrAG7e0oOiR6FiP \n", + "base64_url aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", + "caltrans_district 07 - Los Angeles / Ventura \n", + "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "n_scheduled_trips 19 \n", + "minutes_atleast1_vp 2309 \n", + "minutes_atleast2_vp 2232 \n", + "total_rt_service_minutes 4340.28 \n", + "total_scheduled_service_minutes 1704.00 \n", + "total_vp 6751 \n", + "vp_in_shape 0 \n", + "is_early 1 \n", + "is_ontime 0 \n", + "is_late 14 \n", + "n_vp_trips 15 \n", + "frequency 0.77 \n", + "vp_per_minute 1.56 \n", + "pct_in_shape 0.00 \n", + "pct_rt_journey_atleast1_vp 0.53 \n", + "pct_rt_journey_atleast2_vp 0.51 \n", + "pct_sched_journey_atleast1_vp 1.36 \n", + "pct_sched_journey_atleast2_vp 1.31 " + ] + }, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "route_80_89_dedup.loc[route_80_89_dedup.time_period == \"peak\"]" + "agg1.T" ] } ], diff --git a/gtfs_digest/quarterly_rollup.py b/gtfs_digest/quarterly_rollup.py index 1b565838c..70a261f76 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", From 386e96ffedfdbfb5cae77f370450241f47f2cfcd Mon Sep 17 00:00:00 2001 From: amandaha8 Date: Wed, 18 Jun 2025 00:10:13 +0000 Subject: [PATCH 03/10] added more comments to the shs routes file --- .../17_route_direction_viz_wrangling.ipynb | 321 +- .../18_shs_routes_ct_district_report.ipynb | 230 +- gtfs_digest/25_correct_crosswalk.ipynb | 3302 +++++++++-------- gtfs_digest/_route_dir_data_prep.py | 3 +- gtfs_digest/merge_data.py | 1 + gtfs_digest/quarterly_rollup.py | 2 - 6 files changed, 2232 insertions(+), 1627 deletions(-) diff --git a/gtfs_digest/17_route_direction_viz_wrangling.ipynb b/gtfs_digest/17_route_direction_viz_wrangling.ipynb index 0f8e4224a..f1f5bcf2e 100644 --- a/gtfs_digest/17_route_direction_viz_wrangling.ipynb +++ b/gtfs_digest/17_route_direction_viz_wrangling.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "id": "4d4a0ed5-7956-4129-9488-a12cd32605cf", "metadata": { "tags": [] @@ -38,7 +38,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "id": "4584e1f3-da28-4fa0-aff8-8598f773e3d0", "metadata": { "tags": [] @@ -51,7 +51,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "id": "891d7c5d-2440-4e24-8433-cf51274827f6", "metadata": { "tags": [] @@ -66,7 +66,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "id": "8fd523df-7869-4ac8-b5df-245d367da5b7", "metadata": { "tags": [] @@ -78,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "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,9 +294,17 @@ "* 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": 8, + "execution_count": 7, "id": "2591e737-e2b5-4846-b34d-1b9220ec7e9b", "metadata": { "scrolled": true, @@ -439,7 +547,7 @@ "121 2024-12-11 " ] }, - "execution_count": 8, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -450,7 +558,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "id": "e913de41-a8b7-4a06-98e8-1e4a46f4b71c", "metadata": { "tags": [] @@ -464,7 +572,7 @@ " dtype='object')" ] }, - "execution_count": 9, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -478,12 +586,24 @@ "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." ] }, { @@ -496,24 +616,177 @@ }, "outputs": [ { - "ename": "KeyError", - "evalue": "'portfolio_organization_name'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m/tmp/ipykernel_1288/3216236862.py\u001b[0m in \u001b[0;36m?\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m df.loc[df.organization_name.str.contains(\"Basin\")].sort_values(\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mby\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"portfolio_organization_name\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"service_date\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m )\n", - "\u001b[0;32m/opt/conda/lib/python3.11/site-packages/pandas/util/_decorators.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 327\u001b[0m \u001b[0mmsg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marguments\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0m_format_argument_list\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mallow_args\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 328\u001b[0m \u001b[0mFutureWarning\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 329\u001b[0m \u001b[0mstacklevel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfind_stack_level\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 330\u001b[0m )\n\u001b[0;32m--> 331\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m/opt/conda/lib/python3.11/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, by, axis, ascending, inplace, kind, na_position, ignore_index, key)\u001b[0m\n\u001b[1;32m 6890\u001b[0m \u001b[0;34mf\" != length of by ({len(by)})\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6891\u001b[0m )\n\u001b[1;32m 6892\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mby\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6893\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 6894\u001b[0;31m \u001b[0mkeys\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_label_or_level_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mby\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6895\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6896\u001b[0m \u001b[0;31m# need to rewrap columns in Series to apply key function\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6897\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mkey\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/opt/conda/lib/python3.11/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(.0)\u001b[0m\n\u001b[0;32m-> 6894\u001b[0;31m def sort_values( # type: ignore[override]\n\u001b[0m\u001b[1;32m 6895\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6896\u001b[0m \u001b[0mby\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mIndexLabel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6897\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mAxis\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/opt/conda/lib/python3.11/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1846\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mget_level_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[assignment]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1847\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0m_values\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1848\u001b[0m )\n\u001b[1;32m 1849\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1850\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1851\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1852\u001b[0m \u001b[0;31m# Check for duplicates\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1853\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyError\u001b[0m: 'portfolio_organization_name'" - ] + "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", + "
schedule_gtfs_dataset_keynameorganization_nameservice_date
15a7f5522d7690161fc2be75857d7e2f79Basin Transit GMV ScheduleBasin Transit2024-11-13
15a7f5522d7690161fc2be75857d7e2f79Basin Transit GMV ScheduleBasin Transit2024-12-11
152b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit2024-01-17
158b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit2024-02-14
157b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit2024-03-13
160b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit2024-04-17
154b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit2024-05-22
145b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit2024-06-12
160b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit2024-07-17
174b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit2024-08-14
178b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit2024-09-18
179b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit2024-10-16
187b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit2024-11-13
189b0760015c9fcd0500c4fddd5b9bb115bMorongo Basin ScheduleBasin Transit2024-12-11
\n", + "
" + ], + "text/plain": [ + " 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", + " 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": "execute_result" } ], "source": [ "df.loc[df.organization_name.str.contains(\"Basin\")].sort_values(\n", - " by=[\"portfolio_organization_name\", \"service_date\"]\n", + " by=[\"organization_name\",\"name\", \"service_date\"]\n", ")" ] }, diff --git a/gtfs_digest/18_shs_routes_ct_district_report.ipynb b/gtfs_digest/18_shs_routes_ct_district_report.ipynb index 1320030d0..fe5d8a946 100644 --- a/gtfs_digest/18_shs_routes_ct_district_report.ipynb +++ b/gtfs_digest/18_shs_routes_ct_district_report.ipynb @@ -18,7 +18,6 @@ "source": [ "import geopandas as gpd\n", "import google.auth\n", - "import numpy as np\n", "import pandas as pd\n", "\n", "credentials, project = google.auth.default()\n", @@ -69,30 +68,6 @@ "pd.set_option(\"display.max_colwidth\", None)" ] }, - { - "cell_type": "code", - "execution_count": null, - "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": null, - "id": "48e01cac-bde0-49bf-bfed-304f83f8fc10", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "analysis_date = \"2025-03-12\"" - ] - }, { "cell_type": "code", "execution_count": null, @@ -104,9 +79,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", @@ -120,7 +97,9 @@ " f\"{RT_SCHED_GCS}{OPERATOR_ROUTE}.parquet\",\n", " storage_options={\"token\": credentials.token},\n", " )[subset]\n", - "\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", @@ -128,20 +107,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": null, + "id": "dc878ec3-d196-4e85-bd5d-9960874476ed", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "transit_routes = process_transit_routes()" + ] + }, { "cell_type": "code", "execution_count": null, @@ -151,7 +144,43 @@ }, "outputs": [], "source": [ - "# transit_routes.drop(columns=[\"geometry\"]).sample(3)" + "transit_routes.drop(columns=[\"geometry\"]).sample(3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b0490311-308d-4894-9776-301cb4cad658", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "len(transit_routes)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "15c7b3ee-b927-49ed-a5be-43918c97bfdf", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "transit_routes.recent_combined_name.value_counts().head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c190ae33-bf44-4e94-a614-b4f01ead288b", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "transit_routes.portfolio_organization_name.value_counts().head()" ] }, { @@ -161,8 +190,7 @@ "tags": [] }, "source": [ - "## Load in SHS \n", - "* Saving it out isn't working" + "## Load in SHS \n" ] }, { @@ -176,11 +204,10 @@ "source": [ "def dissolve_shn() -> 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", @@ -190,20 +217,25 @@ " storage_options={\"token\": credentials.token},\n", " ).to_crs(geography_utils.CA_NAD83Albers_ft)\n", "\n", - " # Dissolve\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 = (\n", " shn.dissolve(by=[\"Route\"])\n", " .reset_index()\n", " .drop(columns=[\"County\", \"District\", \"Direction\", \"RouteType\"])\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", " )\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", " filesystem=fs,\n", @@ -282,7 +314,7 @@ }, "outputs": [], "source": [ - "# len(shn_dissolved)" + "# len(dissolved)" ] }, { @@ -296,20 +328,24 @@ "source": [ "def buffer_shn(buffer_amount: int) -> 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", " 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", @@ -387,10 +423,13 @@ "def routes_shn_intersection(\n", " buffer_amount: int,\n", ") -> gpd.GeoDataFrame:\n", - "\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", + " # 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.parquet\"\n", "\n", " if fs.exists(HWY_FILE):\n", @@ -400,25 +439,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", @@ -429,22 +471,12 @@ " \"schedule_gtfs_dataset_key\",\n", " \"route_length_feet\",\n", " ],\n", - " how=\"left\",\n", + " how=\"inner\",\n", " )\n", "\n", " return gdf2" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "9b72f225-6ab2-4967-b95c-f206a2e1a3f5", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": null, @@ -522,7 +554,12 @@ }, "outputs": [], "source": [ - "def prep_transit_route_shs(gdf: gpd.GeoDataFrame, pct_route_intersection: int):\n", + "def final_transit_route_shs_outputs(gdf: gpd.GeoDataFrame, pct_route_intersection: int):\n", + " \"\"\"\n", + " Take the gdf with the transit routes overlaid with state highway\n", + " network routes, aggregate it to find the pct filter it to meet a certain threshold, and\n", + " clean it into dataframes to use for display. \n", + " \"\"\"\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", @@ -532,7 +569,6 @@ " [\n", " \"portfolio_organization_name\",\n", " \"recent_combined_name\",\n", - " \"schedule_gtfs_dataset_key\",\n", " ]\n", " )\n", " .agg({\"pct_route_on_hwy\": \"sum\"})\n", @@ -542,18 +578,19 @@ " # Filter out for any pct_route_on_hwy that we deem too low. \n", " map_gdf = map_gdf.loc[map_gdf.pct_route_on_hwy > pct_route_intersection]\n", " \n", - " # Join back to get the original transit route geometries.\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_gdf2 = pd.merge(\n", " gdf[\n", - " [\"schedule_gtfs_dataset_key\", \"recent_combined_name\", \"geometry\"]\n", + " [\"portfolio_organization_name\", \"recent_combined_name\", \"geometry\"]\n", " ].drop_duplicates(),\n", " map_gdf,\n", - " on=[\"schedule_gtfs_dataset_key\", \"recent_combined_name\"],\n", + " on=[\"portfolio_organization_name\", \"recent_combined_name\"],\n", " )\n", " # We want a text table to display.\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", - " \n", + " # together so there will be one row for each unique route.\n", " text_df = pd.merge(\n", " gdf.drop(columns=[\"pct_route_on_hwy\"]), map_gdf2.drop(columns = [\"geometry\"]), how=\"inner\"\n", " )\n", @@ -585,7 +622,16 @@ }, "outputs": [], "source": [ - "map_gdf, text_df = prep_transit_route_shs(intersecting, 20)" + "map_gdf, text_df = final_transit_route_shs_outputs(intersecting, 20)" + ] + }, + { + "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." ] }, { @@ -600,6 +646,14 @@ "len(map_gdf)" ] }, + { + "cell_type": "markdown", + "id": "fee82333-2d3d-420c-ba47-b424634dc5d0", + "metadata": {}, + "source": [ + "* 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." + ] + }, { "cell_type": "code", "execution_count": null, @@ -675,18 +729,6 @@ "m = shn_gdf2.explore(height=250, width=500, name=\"shs\")" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "78c024e7-4089-4c5f-b7a7-ec759a2ae2b0", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "m" - ] - }, { "cell_type": "code", "execution_count": null, @@ -708,39 +750,17 @@ }, "outputs": [], "source": [ - "# m" + " m" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "78e83524-d55d-4029-8e45-f12cc705dfef", + "cell_type": "markdown", + "id": "cfaab31a-f770-4c72-bedc-5e6201cdfabe", "metadata": { "tags": [] }, - "outputs": [], - "source": [ - "\"\"\" map_gdf.explore(\n", - " \"recent_combined_name\",\n", - " tiles=\"CartoDB positron\",\n", - " width=1000,\n", - " height=600,\n", - " style_kwds={\"weight\": 3},\n", - " legend=False,\n", - ")\"\"\"" - ] - }, - { - "attachments": { - "01b2ee15-8222-4283-b89c-2743213736aa.png": { - "image/png": "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AAIQgAAEIAABCEAAAhCAAAQujQCJs0vrMeSFAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhDYhQCJs12wUikEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMClESBxdmk9hrwQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAK7ECBxtgtWKoUABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACELg0AiTOLq3HkBcCEIAABCAAAQhAAAIQgAAEIOAIfP/73z+89tprh5/97GfXV375y18efve73139/oMf/ODw29/+9vraX//618MLL7xw/ftf/vKXIVOpW3/+8Ic/HB577LE2/0iuqu1ue91yVthf//rXh3feeef6Tz/+8Y8Pwin6WVK/1hPpnV2rmFj5lsiV6X3str2tdfSRMr/61a8OP/zhDzfrK88kGgOjfuzILIJ2y43sz49pKfenP/3p8POf//xb4/qUtj3yNVZWq2Ok11687LizNrQ3r1OOucoPVXaZ+S9b95bPBe/jth7va/xvxWsNk44fWlN/pnfV9p56r7XRvZhk86Zj2aj6wq3HQNXf2q73z3vPEUa20Hl+7G2jJM7CKRd/hAAEIAABCEAAAhCAAAQgAAEInD8BDYRIoEN+bOJMrunvmhzS//7kJz+5Cr5LIkKCExKgsYk11dyXk3uyJJvel8klgQ5NwPm2u+11y/keFLkef/zxYQJmT70zJsfoj5Hee7ctNqd2JwwePHhw/XunH5XbKIjYqSMayZlcM301GhNL5crazsbqqW175Gssew3ARj5kD17eH/nE2d6+YFR/5gMtrz2YZHVmtre3XFlf7d125gO7fdAt531R5of21nutbxb5lup9rj42mzftbaN717/0mXdKf5U9P7q21y0XzRNInJ3/exASQgACEIAABCAAAQhAAAIQgAAEUgIS7JEfmzizN0jA/ZNPPrlOWEggxAav/e9yrwS5f/GLXzySULMBiE6XeLm8HBp4e/vtt6+q67S3Ri4JHD333HNp4mxN/TbwNeqPqK/27o9M773b9oEv7eMOZy3zve99L+y3Th0dO43qkft8X3Xb65bLZIvsRMZflOCWes7BtkWOaIyrniMZ9+Jl/Zi3ob15jerPfKDdzbsHk26d2fOkW8esbWd9pXXt1fbIB3bb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" - } - }, - "cell_type": "markdown", - "id": "d7e0e78a-54ff-4112-a906-550cc4049979", - "metadata": {}, "source": [ - "![image.png](attachment:01b2ee15-8222-4283-b89c-2743213736aa.png)" + "### Sample Text Table" ] }, { diff --git a/gtfs_digest/25_correct_crosswalk.ipynb b/gtfs_digest/25_correct_crosswalk.ipynb index edec9b4a6..a1b95028f 100644 --- a/gtfs_digest/25_correct_crosswalk.ipynb +++ b/gtfs_digest/25_correct_crosswalk.ipynb @@ -136,7 +136,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 60, "id": "e47a5a06-f984-40a3-ba2a-2922f65b47a0", "metadata": { "tags": [] @@ -150,15 +150,15 @@ " \"name\",\n", " \"schedule_source_record_id\",\n", " \"base64_url\",\n", - " # \"organization_source_record_id\",\n", - " # \"organization_name\",\n", + " \"organization_source_record_id\",\n", + " \"organization_name\",\n", " \"caltrans_district\",\n", "]" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 61, "id": "68dab544-18b2-41a4-8c09-c5a1d4b9fb21", "metadata": { "tags": [] @@ -172,9 +172,10 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 65, "id": "efed2684-3b3f-4491-9a17-ca1f39f704d7", "metadata": { + "scrolled": true, "tags": [] }, "outputs": [ @@ -199,62 +200,236 @@ " \n", " \n", " \n", - " schedule_gtfs_dataset_key\n", " name\n", - " schedule_source_record_id\n", - " base64_url\n", - " caltrans_district\n", - " service_date\n", + " organization_name\n", " \n", " \n", " \n", " \n", - " 0\n", - " ff1bc5dde661d62c877165421e9ca257\n", - " Santa Ynez Mecatran Schedule\n", - " recuWhPXfxMatv6rL\n", - " aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==\n", - " 05 - San Luis Obispo\n", - " 2025-01-15\n", + " 162\n", + " VCTC GMV Schedule\n", + " City of Camarillo\n", " \n", " \n", - " 1\n", - " f4c3ea214214ee0d96f7646b3e9d69dc\n", - " SLO Peak Transit Schedule\n", - " rec0EeeizKvsEDfRQ\n", - " aHR0cDovL2RhdGEucGVha3RyYW5zaXQuY29tL3N0YXRpY2d0ZnMvMS9ndGZzLnppcA==\n", - " 05 - San Luis Obispo\n", - " 2025-01-15\n", + " 163\n", + " VCTC GMV Schedule\n", + " Gold Coast Transit District\n", + " \n", + " \n", + " 164\n", + " VCTC GMV Schedule\n", + " City of Moorpark\n", + " \n", + " \n", + " 165\n", + " VCTC GMV Schedule\n", + " City of Ojai\n", + " \n", + " \n", + " 166\n", + " VCTC GMV Schedule\n", + " City of Simi Valley\n", + " \n", + " \n", + " 167\n", + " VCTC GMV Schedule\n", + " City of Thousand Oaks\n", + " \n", + " \n", + " 168\n", + " VCTC GMV Schedule\n", + " Ventura County Transportation Commission\n", + " \n", + " \n", + " 162\n", + " VCTC GMV Schedule\n", + " City of Camarillo\n", + " \n", + " \n", + " 163\n", + " VCTC GMV Schedule\n", + " Gold Coast Transit District\n", + " \n", + " \n", + " 164\n", + " VCTC GMV Schedule\n", + " City of Moorpark\n", + " \n", + " \n", + " 165\n", + " VCTC GMV Schedule\n", + " City of Ojai\n", + " \n", + " \n", + " 166\n", + " VCTC GMV Schedule\n", + " City of Simi Valley\n", + " \n", + " \n", + " 167\n", + " VCTC GMV Schedule\n", + " City of Thousand Oaks\n", + " \n", + " \n", + " 168\n", + " VCTC GMV Schedule\n", + " Ventura County Transportation Commission\n", + " \n", + " \n", + " 159\n", + " VCTC GMV Schedule\n", + " City of Thousand Oaks\n", + " \n", + " \n", + " 160\n", + " VCTC GMV Schedule\n", + " City of Camarillo\n", + " \n", + " \n", + " 161\n", + " VCTC GMV Schedule\n", + " Gold Coast Transit District\n", + " \n", + " \n", + " 162\n", + " VCTC GMV Schedule\n", + " City of Moorpark\n", + " \n", + " \n", + " 163\n", + " VCTC GMV Schedule\n", + " City of Ojai\n", + " \n", + " \n", + " 164\n", + " VCTC GMV Schedule\n", + " City of Simi Valley\n", + " \n", + " \n", + " 165\n", + " VCTC GMV Schedule\n", + " Ventura County Transportation Commission\n", + " \n", + " \n", + " 162\n", + " VCTC GMV Schedule\n", + " Ventura County Transportation Commission\n", + " \n", + " \n", + " 163\n", + " VCTC GMV Schedule\n", + " City of Thousand Oaks\n", + " \n", + " \n", + " 164\n", + " VCTC GMV Schedule\n", + " City of Camarillo\n", + " \n", + " \n", + " 165\n", + " VCTC GMV Schedule\n", + " Gold Coast Transit District\n", + " \n", + " \n", + " 166\n", + " VCTC GMV Schedule\n", + " City of Moorpark\n", + " \n", + " \n", + " 167\n", + " VCTC GMV Schedule\n", + " City of Ojai\n", + " \n", + " \n", + " 168\n", + " VCTC GMV Schedule\n", + " City of Simi Valley\n", + " \n", + " \n", + " 158\n", + " VCTC GMV Schedule\n", + " Ventura County Transportation Commission\n", + " \n", + " \n", + " 159\n", + " VCTC GMV Schedule\n", + " City of Thousand Oaks\n", + " \n", + " \n", + " 160\n", + " VCTC GMV Schedule\n", + " City of Camarillo\n", + " \n", + " \n", + " 161\n", + " VCTC GMV Schedule\n", + " Gold Coast Transit District\n", + " \n", + " \n", + " 162\n", + " VCTC GMV Schedule\n", + " City of Moorpark\n", + " \n", + " \n", + " 163\n", + " VCTC GMV Schedule\n", + " City of Ojai\n", + " \n", + " \n", + " 164\n", + " VCTC GMV Schedule\n", + " City of Simi Valley\n", " \n", " \n", "\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 " + " 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, + "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df.head(2)" + "df.loc[df.name.str.contains(\"VCTC\")][[\"name\",\"organization_name\"]]" ] }, { @@ -917,52 +1092,161 @@ }, { "cell_type": "code", - "execution_count": 17, - "id": "a06dfdff-d91a-4479-89b8-07238c2a48cd", + "execution_count": 59, + "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", + "
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": [ - "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": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df2.columns" - ] - }, - { - "cell_type": "markdown", - "id": "fa8911d1-73d6-4d5a-8f2c-d75f90b40583", - "metadata": {}, - "source": [ - "## Check Ventura County Route 80 " + " 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": 59, + "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, + "execution_count": 17, "id": "09df4d30-fd24-46c1-8550-b5e46eb1cb2a", "metadata": { "tags": [] @@ -988,7 +1272,7 @@ " dtype='object')" ] }, - "execution_count": 18, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -999,7 +1283,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "id": "aa888960-d4e5-458b-bfc5-6d7db44c8dde", "metadata": { "tags": [] @@ -1013,7 +1297,7 @@ " '2025-05-14T00:00:00.000000000'], dtype='datetime64[ns]')" ] }, - "execution_count": 19, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -1024,7 +1308,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 19, "id": "f4deed07-728c-44b9-874d-947fe34428a8", "metadata": { "tags": [] @@ -1040,7 +1324,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 20, "id": "78efc372-7911-4f87-937a-3ba129eefbd9", "metadata": { "tags": [] @@ -1053,7 +1337,7 @@ "Name: name, dtype: int64" ] }, - "execution_count": 21, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -1067,12 +1351,12 @@ "id": "f207717f-b4be-4bfc-ad1a-a9dcad29cd47", "metadata": {}, "source": [ - "### There are two directions, 3 time periods so I should only see 6 rows per date?" + "### 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, + "execution_count": 21, "id": "575c71e8-c5eb-4a4d-bcab-d92e99b71d8b", "metadata": { "tags": [] @@ -1084,7 +1368,7 @@ "(239, 41)" ] }, - "execution_count": 22, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -1095,7 +1379,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 22, "id": "c4b109a3-9e08-4789-b810-ba12cfb0461d", "metadata": { "scrolled": true, @@ -1108,7 +1392,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 23, "id": "3c76cf03-2825-4378-a8a9-61632628eb30", "metadata": { "tags": [] @@ -1134,7 +1418,7 @@ " dtype='object')" ] }, - "execution_count": 24, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -1145,7 +1429,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 24, "id": "5e901bac-49e6-46c0-b066-448195b6ceb7", "metadata": { "tags": [] @@ -1160,7 +1444,7 @@ "Name: time_period, dtype: int64" ] }, - "execution_count": 25, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -1174,15 +1458,36 @@ "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?" + "### 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": 67, + "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": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "route_80_89_dedup.route_id.unique()" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 66, "id": "1be84f1e-6b32-4367-8b43-cd0434b8d058", "metadata": { - "scrolled": true, "tags": [] }, "outputs": [ @@ -1207,401 +1512,420 @@ " \n", " \n", " \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", - " portfolio_organization_name\n", + " 13835\n", + " 13934\n", + " 14004\n", + " 14109\n", + " 14173\n", + " 14237\n", + " 14307\n", + " 14377\n", " \n", " \n", " \n", " \n", - " 13835\n", - " 80-89 Coastal Express\n", - " 4134\n", - " 1\n", - " peak\n", - " 86.80\n", - " 7.71\n", - " 5\n", - " 0.62\n", - " Eastbound\n", - " 466\n", - " 455\n", - " 589.67\n", - " 346.00\n", - " 1367\n", - " 0\n", - " 0\n", - " 0\n", - " 4\n", - " 4\n", - " 2.32\n", - " 0.00\n", - " 0.79\n", - " 0.77\n", - " 1.00\n", - " 1.00\n", - " 1.70\n", - " 147.42\n", - " 15.47\n", + " portfolio_organization_name\n", + " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", + " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", + " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", + " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", + " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", + " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", + " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", " \n", " \n", - " 13934\n", + " recent_combined_name\n", + " 80-89 Coastal Express\n", + " 80-89 Coastal Express\n", " 80-89 Coastal Express\n", + " 80-89 Coastal Express\n", + " 80-89 Coastal Express\n", + " 80-89 Coastal Express\n", + " 80-89 Coastal Express\n", + " 80-89 Coastal Express\n", + " \n", + " \n", + " route_id\n", + " 4134\n", + " 4136\n", + " 4137\n", + " 4141\n", + " 4143\n", + " 4145\n", + " 4146\n", + " 4148\n", + " \n", + " \n", + " recent_route_id\n", + " 4134\n", " 4136\n", + " 4137\n", + " 4141\n", + " 4143\n", + " 4145\n", + " 4146\n", + " 4148\n", + " \n", + " \n", + " direction_id\n", + " 1\n", " 1\n", - " peak\n", - " 50.00\n", - " 32.10\n", " 1\n", - " 0.12\n", - " Eastbound\n", - " 90\n", - " 85\n", - " 159.92\n", - " 50.00\n", - " 279\n", - " 0\n", - " 0\n", - " 0\n", " 1\n", " 1\n", - " 1.74\n", - " 0.00\n", - " 0.56\n", - " 0.53\n", - " 1.00\n", - " 1.00\n", - " 3.20\n", - " 159.92\n", - " NaN\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " \n", - " \n", - " 14004\n", - " 80-89 Coastal Express\n", - " 4137\n", " 1\n", - " peak\n", - " 125.50\n", - " 28.88\n", - " 2\n", - " 0.25\n", - " Eastbound\n", - " 78\n", - " 78\n", - " 77.67\n", - " 134.00\n", - " 234\n", - " 0\n", " 1\n", - " 0\n", - " 0\n", " 1\n", - " 3.01\n", - " 0.00\n", - " 1.00\n", - " 1.00\n", - " 0.58\n", - " 0.58\n", - " 0.58\n", - " 77.67\n", - " 19.46\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", " \n", " \n", - " 14109\n", - " 80-89 Coastal Express\n", - " 4141\n", - " 1\n", + " time_period\n", " peak\n", + " peak\n", + " peak\n", + " peak\n", + " peak\n", + " peak\n", + " peak\n", + " peak\n", + " \n", + " \n", + " avg_scheduled_service_minutes\n", + " 86.80\n", + " 50.00\n", + " 125.50\n", " 128.00\n", - " 17.82\n", - " 2\n", - " 0.25\n", - " Eastbound\n", - " 309\n", - " 264\n", - " 375.40\n", - " 262.00\n", - " 816\n", - " 0\n", - " 0\n", - " 0\n", - " 2\n", - " 2\n", - " 2.17\n", - " 0.00\n", - " 0.82\n", - " 0.70\n", - " 1.00\n", - " 1.00\n", - " 1.43\n", - " 187.70\n", - " NaN\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", + " 129.00\n", + " 106.00\n", + " 129.00\n", + " 149.67\n", " \n", " \n", - " 14173\n", - " 80-89 Coastal Express\n", - " 4143\n", - " 1\n", - " peak\n", - " 129.00\n", + " avg_stop_miles\n", + " 7.71\n", + " 32.10\n", + " 28.88\n", + " 17.82\n", " 3.70\n", - " 1\n", - " 0.12\n", - " Eastbound\n", - " 0\n", - " 0\n", - " NaN\n", - " NaN\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", + " 2.91\n", + " 38.06\n", + " 5.57\n", " \n", " \n", - " 14237\n", - " 80-89 Coastal Express\n", - " 4145\n", + " n_scheduled_trips\n", + " 5\n", " 1\n", - " peak\n", - " 106.00\n", - " 2.91\n", " 2\n", - " 0.25\n", - " Eastbound\n", - " 349\n", - " 341\n", - " 1428.93\n", - " 212.00\n", - " 1029\n", - " 0\n", - " 0\n", - " 0\n", " 2\n", + " 1\n", " 2\n", - " 0.72\n", - " 0.00\n", - " 0.24\n", - " 0.24\n", - " 1.00\n", - " 1.00\n", - " 6.74\n", - " 714.46\n", - " 30.45\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", + " 1\n", + " 3\n", " \n", " \n", - " 14307\n", - " 80-89 Coastal Express\n", - " 4146\n", - " 1\n", - " peak\n", - " 129.00\n", - " 38.06\n", - " 1\n", + " frequency\n", + " 0.62\n", + " 0.12\n", + " 0.25\n", + " 0.25\n", " 0.12\n", + " 0.25\n", + " 0.12\n", + " 0.38\n", + " \n", + " \n", + " route_primary_direction\n", " Eastbound\n", - " 263\n", - " 258\n", - " 579.38\n", - " 129.00\n", - " 777\n", - " 0\n", - " 0\n", - " 0\n", - " 1\n", - " 1\n", + " Eastbound\n", + " Eastbound\n", + " Eastbound\n", + " Eastbound\n", + " Eastbound\n", + " Eastbound\n", + " Eastbound\n", + " \n", + " \n", + " vp_per_minute\n", + " 2.32\n", + " 1.74\n", + " 3.01\n", + " 2.17\n", + " NaN\n", + " 0.72\n", " 1.34\n", + " 1.91\n", + " \n", + " \n", + " pct_in_shape\n", + " 0.00\n", + " 0.00\n", + " 0.00\n", + " 0.00\n", + " NaN\n", + " 0.00\n", + " 0.00\n", " 0.00\n", + " \n", + " \n", + " pct_rt_journey_atleast1_vp\n", + " 0.79\n", + " 0.56\n", + " 1.00\n", + " 0.82\n", + " NaN\n", + " 0.24\n", " 0.45\n", + " 0.64\n", + " \n", + " \n", + " pct_rt_journey_atleast2_vp\n", + " 0.77\n", + " 0.53\n", + " 1.00\n", + " 0.70\n", + " NaN\n", + " 0.24\n", " 0.45\n", + " 0.64\n", + " \n", + " \n", + " pct_sched_journey_atleast1_vp\n", " 1.00\n", " 1.00\n", - " 4.49\n", - " 579.38\n", + " 0.58\n", + " 1.00\n", " NaN\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", + " 1.00\n", + " 1.00\n", + " 1.00\n", " \n", " \n", - " 14377\n", - " 80-89 Coastal Express\n", - " 4148\n", - " 1\n", - " peak\n", - " 149.67\n", - " 5.57\n", - " 3\n", - " 0.38\n", - " Eastbound\n", - " 622\n", - " 621\n", - " 974.28\n", - " 449.00\n", - " 1858\n", - " 0\n", - " 0\n", - " 0\n", - " 3\n", - " 3\n", - " 1.91\n", - " 0.00\n", - " 0.64\n", - " 0.64\n", + " pct_sched_journey_atleast2_vp\n", + " 1.00\n", + " 1.00\n", + " 0.58\n", + " 1.00\n", + " NaN\n", " 1.00\n", " 1.00\n", + " 1.00\n", + " \n", + " \n", + " rt_sched_journey_ratio\n", + " 1.70\n", + " 3.20\n", + " 0.58\n", + " 1.43\n", + " NaN\n", + " 6.74\n", + " 4.49\n", " 2.17\n", + " \n", + " \n", + " avg_rt_service_minutes\n", + " 147.42\n", + " 159.92\n", + " 77.67\n", + " 187.70\n", + " NaN\n", + " 714.46\n", + " 579.38\n", " 324.76\n", + " \n", + " \n", + " speed_mph\n", + " 15.47\n", + " NaN\n", + " 19.46\n", + " NaN\n", + " NaN\n", + " 30.45\n", + " NaN\n", " NaN\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", " \n", " \n", "\n", "" ], "text/plain": [ - " recent_combined_name route_id direction_id time_period \\\n", - "13835 80-89 Coastal Express 4134 1 peak \n", - "13934 80-89 Coastal Express 4136 1 peak \n", - "14004 80-89 Coastal Express 4137 1 peak \n", - "14109 80-89 Coastal Express 4141 1 peak \n", - "14173 80-89 Coastal Express 4143 1 peak \n", - "14237 80-89 Coastal Express 4145 1 peak \n", - "14307 80-89 Coastal Express 4146 1 peak \n", - "14377 80-89 Coastal Express 4148 1 peak \n", - "\n", - " avg_scheduled_service_minutes avg_stop_miles n_scheduled_trips \\\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 route_primary_direction minutes_atleast1_vp \\\n", - "13835 0.62 Eastbound 466 \n", - "13934 0.12 Eastbound 90 \n", - "14004 0.25 Eastbound 78 \n", - "14109 0.25 Eastbound 309 \n", - "14173 0.12 Eastbound 0 \n", - "14237 0.25 Eastbound 349 \n", - "14307 0.12 Eastbound 263 \n", - "14377 0.38 Eastbound 622 \n", - "\n", - " minutes_atleast2_vp total_rt_service_minutes \\\n", - "13835 455 589.67 \n", - "13934 85 159.92 \n", - "14004 78 77.67 \n", - "14109 264 375.40 \n", - "14173 0 NaN \n", - "14237 341 1428.93 \n", - "14307 258 579.38 \n", - "14377 621 974.28 \n", - "\n", - " total_scheduled_service_minutes total_vp vp_in_shape is_early \\\n", - "13835 346.00 1367 0 0 \n", - "13934 50.00 279 0 0 \n", - "14004 134.00 234 0 1 \n", - "14109 262.00 816 0 0 \n", - "14173 NaN 0 0 0 \n", - "14237 212.00 1029 0 0 \n", - "14307 129.00 777 0 0 \n", - "14377 449.00 1858 0 0 \n", - "\n", - " is_ontime is_late n_vp_trips vp_per_minute pct_in_shape \\\n", - "13835 0 4 4 2.32 0.00 \n", - "13934 0 1 1 1.74 0.00 \n", - "14004 0 0 1 3.01 0.00 \n", - "14109 0 2 2 2.17 0.00 \n", - "14173 0 0 0 NaN NaN \n", - "14237 0 2 2 0.72 0.00 \n", - "14307 0 1 1 1.34 0.00 \n", - "14377 0 3 3 1.91 0.00 \n", - "\n", - " pct_rt_journey_atleast1_vp pct_rt_journey_atleast2_vp \\\n", - "13835 0.79 0.77 \n", - "13934 0.56 0.53 \n", - "14004 1.00 1.00 \n", - "14109 0.82 0.70 \n", - "14173 NaN NaN \n", - "14237 0.24 0.24 \n", - "14307 0.45 0.45 \n", - "14377 0.64 0.64 \n", - "\n", - " pct_sched_journey_atleast1_vp pct_sched_journey_atleast2_vp \\\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 speed_mph \\\n", - "13835 1.70 147.42 15.47 \n", - "13934 3.20 159.92 NaN \n", - "14004 0.58 77.67 19.46 \n", - "14109 1.43 187.70 NaN \n", - "14173 NaN NaN NaN \n", - "14237 6.74 714.46 30.45 \n", - "14307 4.49 579.38 NaN \n", - "14377 2.17 324.76 NaN \n", - "\n", - " portfolio_organization_name \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) " + " 13835 \\\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", + " 13934 \\\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", + " 14004 \\\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", + " 14109 \\\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", + " 14173 \\\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", + " 14237 \\\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", + " 14307 \\\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", + " 14377 \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": 26, + "execution_count": 66, "metadata": {}, "output_type": "execute_result" } @@ -1611,8 +1935,10 @@ " (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", @@ -1620,16 +1946,16 @@ " \"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", + " # \"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", @@ -1639,17 +1965,24 @@ " \"rt_sched_journey_ratio\",\n", " \"avg_rt_service_minutes\",\n", " \"speed_mph\",\n", - " \"portfolio_organization_name\",\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" + "# 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. " ] }, { @@ -1867,87 +2200,21 @@ { "cell_type": "code", "execution_count": 29, - "id": "73009687-4db1-4ef1-9476-82f31b675de3", - "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_name
02025-01-151
12025-01-1501 City Hall - Armory + Arbor0
\n", - "
" - ], - "text/plain": [ - " service_date recent_combined_name portfolio_organization_name\n", - "0 2025-01-15 1\n", - "1 2025-01-15 01 City Hall - Armory + Arbor 0" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "unique_route_names.head(2)" - ] - }, - { - "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", + "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": 30, + "id": "8434d6cc-ff97-484d-afd2-2229defaa355", "metadata": { "tags": [] }, @@ -1958,7 +2225,7 @@ "(193, 3)" ] }, - "execution_count": 31, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -1969,7 +2236,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 31, "id": "4f1499a6-3ba5-4581-97ae-76e88ee07f82", "metadata": { "scrolled": true, @@ -2046,7 +2313,7 @@ "6694 2025-03-12 Route 4 6" ] }, - "execution_count": 32, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -2059,7 +2326,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 32, "id": "b8e30aff-0c5d-4a4d-b4a6-e6d6ee40c6a2", "metadata": { "tags": [] @@ -2074,7 +2341,7 @@ " 'City of Monterey Park'], dtype=object)" ] }, - "execution_count": 33, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -2085,7 +2352,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 48, "id": "219472cd-bcee-454e-905a-fadd6678a85a", "metadata": { "tags": [] @@ -2093,7 +2360,7 @@ "outputs": [], "source": [ "unique_route_ids = (\n", - " df2.groupby([\"service_date\", \"recent_combined_name\"])\n", + " df2.groupby([ \"portfolio_organization_name\", \"recent_combined_name\"])\n", " .agg({\"route_id\": \"nunique\"})\n", " .reset_index()\n", ")" @@ -2101,7 +2368,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 49, "id": "ec03e507-5d2c-40eb-ad69-7bc3528cf16c", "metadata": { "tags": [] @@ -2113,9 +2380,33 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 51, + "id": "e73094d3-4aab-4e37-8573-4daf653424fb", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "224" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(unique_route_ids2)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, "id": "870bb884-c57f-4af8-924f-9c77d3ad8014", "metadata": { + "scrolled": true, "tags": [] }, "outputs": [ @@ -2140,446 +2431,179 @@ " \n", " \n", " \n", - " service_date\n", + " portfolio_organization_name\n", " recent_combined_name\n", " route_id\n", " \n", " \n", " \n", " \n", - " 1408\n", - " 2025-01-15\n", + " 2309\n", + " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", " 80-89 Coastal Express\n", " 12\n", " \n", " \n", - " 6003\n", - " 2025-03-12\n", - " 80-89 Coastal Express\n", - " 12\n", + " 418\n", + " City of Elk Grove\n", + " Elk Grove Commuter Route\n", + " 10\n", " \n", " \n", - " 8321\n", - " 2025-04-16\n", - " 80-89 Coastal Express\n", - " 12\n", + " 419\n", + " City of Elk Grove\n", + " Elk Grove Local Route\n", + " 7\n", " \n", " \n", - " 10648\n", - " 2025-05-14\n", - " 80-89 Coastal Express\n", - " 12\n", + " 721\n", + " City of Santa Monica\n", + " R10 Downtown LA Freeway Express\n", + " 3\n", " \n", " \n", - " 3735\n", - " 2025-02-12\n", - " 80-89 Coastal Express\n", - " 12\n", + " 1532\n", + " Peninsula Corridor Joint Powers Board\n", + " \n", + " 3\n", + " \n", + " \n", + " 2310\n", + " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", + " 90-99 CSU Channel Islands\n", + " 3\n", + " \n", + " \n", + " 2307\n", + " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", + " 70-74 East County\n", + " 3\n", + " \n", + " \n", + " 704\n", + " City of Santa Monica\n", + " 18 UCLA - Marina del Rey\n", + " 3\n", + " \n", + " \n", + " 720\n", + " City of Santa Monica\n", + " 9 Pacific Palisades\n", + " 3\n", + " \n", + " \n", + " 711\n", + " City of Santa Monica\n", + " 43 26th Street\n", + " 3\n", " \n", " \n", "\n", "" ], "text/plain": [ - " service_date recent_combined_name route_id\n", - "1408 2025-01-15 80-89 Coastal Express 12\n", - "6003 2025-03-12 80-89 Coastal Express 12\n", - "8321 2025-04-16 80-89 Coastal Express 12\n", - "10648 2025-05-14 80-89 Coastal Express 12\n", - "3735 2025-02-12 80-89 Coastal Express 12" + " 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", + "\n", + " recent_combined_name route_id \n", + "2309 80-89 Coastal Express 12 \n", + "418 Elk Grove Commuter Route 10 \n", + "419 Elk Grove Local Route 7 \n", + "721 R10 Downtown LA Freeway Express 3 \n", + "1532 3 \n", + "2310 90-99 CSU Channel Islands 3 \n", + "2307 70-74 East County 3 \n", + "704 18 UCLA - Marina del Rey 3 \n", + "720 9 Pacific Palisades 3 \n", + "711 43 26th Street 3 " ] }, - "execution_count": 36, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "unique_route_ids2.sort_values(by=[\"route_id\"], ascending=False).head()" - ] - }, - { - "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": 38, - "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": 43, - "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", - "]" + "unique_route_ids2.sort_values(by=[\"route_id\"], ascending=False).head(10)" ] }, { "cell_type": "code", - "execution_count": 40, - "id": "eb88bb5b-33c4-4911-a844-14856b11f268", + "execution_count": 42, + "id": "746f2c9c-b2f7-47f3-bc6a-0ea58edbf005", "metadata": { "tags": [] }, - "outputs": [], - "source": [ - "crosswalk_cols = [\n", - " \"schedule_gtfs_dataset_key\",\n", - " \"name\",\n", - " \"portfolio_organization_name\",\n", - "]" - ] - }, - { - "cell_type": "markdown", - "id": "f1362d85-3da7-48c2-8ba2-6d49539583f7", - "metadata": {}, + "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
39149Elk Grove Schedule89b0a03002512a909fe8e1a5d00a78a5City of Elk Grove
\n", + "
" + ], + "text/plain": [ + " name schedule_gtfs_dataset_key \\\n", + "39149 Elk Grove Schedule 89b0a03002512a909fe8e1a5d00a78a5 \n", + "\n", + " portfolio_organization_name \n", + "39149 City of Elk Grove " + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "## Aggregate similar to quarterly rollup?\n", - "* `route_id`, `recent_route_id`, and `combined_name` all cause multiple rows to pop up for 80-89 Coastal Express\n" + "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": 41, - "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": 58, - "id": "3f1dd963-efd3-4d62-bd0a-ea5aa02a0604", - "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": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df3.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "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", - " \"frequency\",\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "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", - " )\n", - " .agg({col: \"sum\" for col in to_sum})\n", - " .reset_index()\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "627ce0a2-53c2-4ab5-8bfb-5e43220f9e59", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "agg1 = agg1.rename(\n", - " columns={\n", - " \"total_rt_service_minutes\": \"rt_service_minutes\",\n", - " \"total_scheduled_service_minutes\": \"scheduled_service_minutes\",\n", - " }).pipe(\n", - " 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", - " })" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "b01ba61c-e1be-435c-8249-821fd30dde95", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'avg_rt_service_minutes',\n", - " 'avg_scheduled_service_minutes',\n", - " 'avg_stop_miles',\n", - " 'combined_name',\n", - " 'name',\n", - " 'recent_route_id',\n", - " 'route_id',\n", - " 'rt_sched_journey_ratio',\n", - " 'sched_rt_category',\n", - " 'speed_mph'}" - ] - }, - "execution_count": 76, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "set(list(df3.columns))-set(list(agg1.columns))" - ] - }, - { - "cell_type": "markdown", - "id": "32591008-bcf9-426a-88e9-3d18a68f7369", - "metadata": {}, - "source": [ - "### Directin 1's `pct_sched_journey_atleast1_vp ` and `pct_sched_journey_atleast2_vp ` are more than 1, which is wrong" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "c2681c31-1d45-4358-b780-5dc686de59e7", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[0;31mSignature:\u001b[0m \u001b[0mmetrics\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcalculate_rt_vs_schedule_metrics\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mpandas\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mframe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mpandas\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mframe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mSource:\u001b[0m \n", - "\u001b[0;32mdef\u001b[0m \u001b[0mcalculate_rt_vs_schedule_metrics\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m->\u001b[0m\u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"\u001b[0m\n", - "\u001b[0;34m Calculate RT vs schedule metrics\u001b[0m\n", - "\u001b[0;34m \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0massign\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mvp_per_minute\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtotal_vp\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrt_service_minutes\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mpct_in_shape\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvp_in_shape\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtotal_vp\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mpct_rt_journey_atleast1_vp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mminutes_atleast1_vp\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrt_service_minutes\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mpct_rt_journey_atleast2_vp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mminutes_atleast2_vp\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrt_service_minutes\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mpct_sched_journey_atleast1_vp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mminutes_atleast1_vp\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscheduled_service_minutes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mpct_sched_journey_atleast2_vp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mminutes_atleast2_vp\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscheduled_service_minutes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mFile:\u001b[0m ~/data-analyses/rt_segment_speeds/segment_speed_utils/metrics.py\n", - "\u001b[0;31mType:\u001b[0m function" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "metrics.calculate_rt_vs_schedule_metrics??" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "7ccc1e31-14cb-48bd-9ba2-6d3573220889", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2309" - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df3.loc[df3.direction_id == 1].minutes_atleast1_vp.sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "1a5ec264-3efb-4daf-b155-900668eb48ba", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "1704.0" - ] - }, - "execution_count": 84, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df3.loc[df3.direction_id == 1].total_scheduled_service_minutes.sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "3fd63d62-bc88-4bc2-8caf-009c3e600ff9", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2232" - ] - }, - "execution_count": 85, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df3.loc[df3.direction_id == 1].minutes_atleast2_vp.sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "11c66609-76d1-4c91-b605-635c73c1b2fb", + "execution_count": 52, + "id": "2595f49a-0970-4ea9-b271-bb85030fb437", "metadata": { "tags": [] }, @@ -2605,636 +2629,924 @@ " \n", " \n", " \n", - " minutes_atleast1_vp\n", - " total_scheduled_service_minutes\n", - " minutes_atleast2_vp\n", + " 18662\n", + " 45129\n", + " 56021\n", + " 56022\n", + " 56023\n", + " 56028\n", + " 56029\n", + " 60235\n", + " 69005\n", + " 69006\n", " \n", " \n", " \n", " \n", - " 13800\n", - " 466\n", - " 346.00\n", - " 455\n", - " \n", - " \n", - " 13870\n", - " 90\n", - " 50.00\n", - " 85\n", + " portfolio_organization_name\n", + " City of Santa Monica\n", + " City of Santa Monica\n", + " City of Santa Monica\n", + " City of Santa Monica\n", + " City of Santa Monica\n", + " City of Santa Monica\n", + " City of Santa Monica\n", + " City of Santa Monica\n", + " City of Santa Monica\n", + " City of Santa Monica\n", " \n", " \n", - " 13969\n", - " 78\n", - " 134.00\n", - " 78\n", + " recent_combined_name\n", + " 18 UCLA - Marina del Rey\n", + " 18 UCLA - Marina del Rey\n", + " 18 UCLA - Marina del Rey\n", + " 18 UCLA - Marina del Rey\n", + " 18 UCLA - Marina del Rey\n", + " 18 UCLA - Marina del Rey\n", + " 18 UCLA - Marina del Rey\n", + " 18 UCLA - Marina del Rey\n", + " 18 UCLA - Marina del Rey\n", + " 18 UCLA - Marina del Rey\n", " \n", " \n", - " 14039\n", - " 441\n", - " 384.00\n", - " 394\n", + " route_id\n", + " 18\n", + " 18\n", + " 3820\n", + " 3820\n", + " 3820\n", + " 3919\n", + " 3919\n", + " 18\n", + " 3820\n", + " 3820\n", " \n", " \n", - " 14144\n", + " direction_id\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", " 0\n", - " NaN\n", " 0\n", " \n", " \n", - " 14202\n", - " 349\n", - " 212.00\n", - " 341\n", - " \n", - " \n", - " 14272\n", - " 263\n", - " 129.00\n", - " 258\n", - " \n", - " \n", - " 14342\n", - " 622\n", - " 449.00\n", - " 621\n", - " \n", - " \n", - "\n", - "" - ], - "text/plain": [ - " minutes_atleast1_vp total_scheduled_service_minutes \\\n", - "13800 466 346.00 \n", - "13870 90 50.00 \n", - "13969 78 134.00 \n", - "14039 441 384.00 \n", - "14144 0 NaN \n", - "14202 349 212.00 \n", - "14272 263 129.00 \n", - "14342 622 449.00 \n", - "\n", - " minutes_atleast2_vp \n", - "13800 455 \n", - "13870 85 \n", - "13969 78 \n", - "14039 394 \n", - "14144 0 \n", - "14202 341 \n", - "14272 258 \n", - "14342 621 " - ] - }, - "execution_count": 82, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df3.loc[df3.direction_id == 1][[\"minutes_atleast1_vp\", \"total_scheduled_service_minutes\", \"minutes_atleast2_vp\"]]" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "9b1212c7-304a-4eb1-afc0-0934bff5db01", - "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", - "
minutes_atleast1_vptotal_scheduled_service_minutesminutes_atleast2_vp
13800466346.00455
138709050.0085time_periodpeakpeakpeakpeakpeakpeakpeakpeakpeakpeak
1396978134.0078avg_scheduled_service_minutes56.6556.6566.0766.0766.0766.0766.0757.2466.0766.07
14039441384.00394avg_stop_miles5.565.561.606.066.066.196.195.635.966.06
141440NaN0n_scheduled_trips16161515151515151515
14202349212.00341frequency2.002.001.881.881.881.881.881.881.881.88
14272263129.00258route_primary_directionSouthboundSouthboundNorthboundNorthboundNorthboundNorthboundNorthboundSouthboundNorthboundNorthbound
14342622449.00621
\n", - "
" - ], - "text/plain": [ - " minutes_atleast1_vp total_scheduled_service_minutes \\\n", - "13800 466 346.00 \n", - "13870 90 50.00 \n", - "13969 78 134.00 \n", - "14039 441 384.00 \n", - "14144 0 NaN \n", - "14202 349 212.00 \n", - "14272 263 129.00 \n", - "14342 622 449.00 \n", - "\n", - " minutes_atleast2_vp \n", - "13800 455 \n", - "13870 85 \n", - "13969 78 \n", - "14039 394 \n", - "14144 0 \n", - "14202 341 \n", - "14272 258 \n", - "14342 621 " - ] - }, - "execution_count": 87, - "metadata": {}, - "output_type": "execute_result" - } - ], - "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": 88, - "id": "fd65fad6-9108-48a1-843e-a03eb3c8328e", - "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", "
minutes_atleast1_vptotal_scheduled_service_minutesminutes_atleast2_vpvp_per_minute1.952.001.011.00NaNNaNNaN1.99NaNNaN
13800466346.00455pct_in_shape1.001.000.740.84NaNNaNNaN1.00NaNNaN
138709050.0085pct_rt_journey_atleast1_vp0.981.001.000.99NaNNaNNaN1.00NaNNaN
1396978134.0078pct_rt_journey_atleast2_vp0.880.900.000.00NaNNaNNaN0.92NaNNaN
14039441384.00394pct_sched_journey_atleast1_vp1.001.001.001.00NaNNaNNaN1.00NaNNaN
141440pct_sched_journey_atleast2_vp1.001.000.000.00NaNNaNNaN1.00NaNNaN0
14202349212.00341rt_sched_journey_ratio1.211.271.161.24NaNNaNNaN1.28NaNNaN
14272263129.00258avg_rt_service_minutes67.6670.8978.2783.27NaNNaNNaN72.83NaNNaN
14342622449.00621speed_mphNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", "
" ], "text/plain": [ - " minutes_atleast1_vp total_scheduled_service_minutes \\\n", - "13800 466 346.00 \n", - "13870 90 50.00 \n", - "13969 78 134.00 \n", - "14039 441 384.00 \n", - "14144 0 NaN \n", - "14202 349 212.00 \n", - "14272 263 129.00 \n", - "14342 622 449.00 \n", - "\n", - " minutes_atleast2_vp \n", - "13800 455 \n", - "13870 85 \n", - "13969 78 \n", - "14039 394 \n", - "14144 0 \n", - "14202 341 \n", - "14272 258 \n", - "14342 621 " + " 18662 \\\n", + "portfolio_organization_name City of Santa Monica \n", + "recent_combined_name 18 UCLA - Marina del Rey \n", + "route_id 18 \n", + "direction_id 0 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 56.65 \n", + "avg_stop_miles 5.56 \n", + "n_scheduled_trips 16 \n", + "frequency 2.00 \n", + "route_primary_direction Southbound \n", + "vp_per_minute 1.95 \n", + "pct_in_shape 1.00 \n", + "pct_rt_journey_atleast1_vp 0.98 \n", + "pct_rt_journey_atleast2_vp 0.88 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.21 \n", + "avg_rt_service_minutes 67.66 \n", + "speed_mph NaN \n", + "\n", + " 45129 \\\n", + "portfolio_organization_name City of Santa Monica \n", + "recent_combined_name 18 UCLA - Marina del Rey \n", + "route_id 18 \n", + "direction_id 0 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 56.65 \n", + "avg_stop_miles 5.56 \n", + "n_scheduled_trips 16 \n", + "frequency 2.00 \n", + "route_primary_direction Southbound \n", + "vp_per_minute 2.00 \n", + "pct_in_shape 1.00 \n", + "pct_rt_journey_atleast1_vp 1.00 \n", + "pct_rt_journey_atleast2_vp 0.90 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.27 \n", + "avg_rt_service_minutes 70.89 \n", + "speed_mph NaN \n", + "\n", + " 56021 \\\n", + "portfolio_organization_name City of Santa Monica \n", + "recent_combined_name 18 UCLA - Marina del Rey \n", + "route_id 3820 \n", + "direction_id 0 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 66.07 \n", + "avg_stop_miles 1.60 \n", + "n_scheduled_trips 15 \n", + "frequency 1.88 \n", + "route_primary_direction Northbound \n", + "vp_per_minute 1.01 \n", + "pct_in_shape 0.74 \n", + "pct_rt_journey_atleast1_vp 1.00 \n", + "pct_rt_journey_atleast2_vp 0.00 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 0.00 \n", + "rt_sched_journey_ratio 1.16 \n", + "avg_rt_service_minutes 78.27 \n", + "speed_mph NaN \n", + "\n", + " 56022 \\\n", + "portfolio_organization_name City of Santa Monica \n", + "recent_combined_name 18 UCLA - Marina del Rey \n", + "route_id 3820 \n", + "direction_id 0 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 66.07 \n", + "avg_stop_miles 6.06 \n", + "n_scheduled_trips 15 \n", + "frequency 1.88 \n", + "route_primary_direction Northbound \n", + "vp_per_minute 1.00 \n", + "pct_in_shape 0.84 \n", + "pct_rt_journey_atleast1_vp 0.99 \n", + "pct_rt_journey_atleast2_vp 0.00 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 0.00 \n", + "rt_sched_journey_ratio 1.24 \n", + "avg_rt_service_minutes 83.27 \n", + "speed_mph NaN \n", + "\n", + " 56023 \\\n", + "portfolio_organization_name City of Santa Monica \n", + "recent_combined_name 18 UCLA - Marina del Rey \n", + "route_id 3820 \n", + "direction_id 0 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 66.07 \n", + "avg_stop_miles 6.06 \n", + "n_scheduled_trips 15 \n", + "frequency 1.88 \n", + "route_primary_direction Northbound \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", + " 56028 \\\n", + "portfolio_organization_name City of Santa Monica \n", + "recent_combined_name 18 UCLA - Marina del Rey \n", + "route_id 3919 \n", + "direction_id 0 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 66.07 \n", + "avg_stop_miles 6.19 \n", + "n_scheduled_trips 15 \n", + "frequency 1.88 \n", + "route_primary_direction Northbound \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", + " 56029 \\\n", + "portfolio_organization_name City of Santa Monica \n", + "recent_combined_name 18 UCLA - Marina del Rey \n", + "route_id 3919 \n", + "direction_id 0 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 66.07 \n", + "avg_stop_miles 6.19 \n", + "n_scheduled_trips 15 \n", + "frequency 1.88 \n", + "route_primary_direction Northbound \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", + " 60235 \\\n", + "portfolio_organization_name City of Santa Monica \n", + "recent_combined_name 18 UCLA - Marina del Rey \n", + "route_id 18 \n", + "direction_id 0 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 57.24 \n", + "avg_stop_miles 5.63 \n", + "n_scheduled_trips 15 \n", + "frequency 1.88 \n", + "route_primary_direction Southbound \n", + "vp_per_minute 1.99 \n", + "pct_in_shape 1.00 \n", + "pct_rt_journey_atleast1_vp 1.00 \n", + "pct_rt_journey_atleast2_vp 0.92 \n", + "pct_sched_journey_atleast1_vp 1.00 \n", + "pct_sched_journey_atleast2_vp 1.00 \n", + "rt_sched_journey_ratio 1.28 \n", + "avg_rt_service_minutes 72.83 \n", + "speed_mph NaN \n", + "\n", + " 69005 \\\n", + "portfolio_organization_name City of Santa Monica \n", + "recent_combined_name 18 UCLA - Marina del Rey \n", + "route_id 3820 \n", + "direction_id 0 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 66.07 \n", + "avg_stop_miles 5.96 \n", + "n_scheduled_trips 15 \n", + "frequency 1.88 \n", + "route_primary_direction Northbound \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", + " 69006 \n", + "portfolio_organization_name City of Santa Monica \n", + "recent_combined_name 18 UCLA - Marina del Rey \n", + "route_id 3820 \n", + "direction_id 0 \n", + "time_period peak \n", + "avg_scheduled_service_minutes 66.07 \n", + "avg_stop_miles 6.06 \n", + "n_scheduled_trips 15 \n", + "frequency 1.88 \n", + "route_primary_direction Northbound \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 " ] }, - "execution_count": 88, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "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\"]]" + "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": 78, - "id": "bb67231c-52ce-4f54-88ac-784671a07387", + "execution_count": 43, + "id": "cd779907-b92f-437c-8e71-5232bed3b1b5", "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", - "
01
schedule_gtfs_dataset_key1770249a5a2e770ca90628434d4934b11770249a5a2e770ca90628434d4934b1
direction_id01
time_periodall_dayall_day
service_date2025-05-14 00:00:002025-05-14 00:00:00
is_express1.001.00
is_ferry0.000.00
is_rail0.000.00
is_coverage0.000.00
is_local0.000.00
is_downtown_local0.000.00
is_rapid0.000.00
typologyexpressexpress
recent_combined_name80-89 Coastal Express80-89 Coastal Express
route_primary_directionWestboundEastbound
schedule_source_record_idrecrAG7e0oOiR6FiPrecrAG7e0oOiR6FiP
base64_urlaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZzaHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz
caltrans_district07 - Los Angeles / Ventura07 - Los Angeles / Ventura
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)
n_scheduled_trips1819
minutes_atleast1_vp12012309
minutes_atleast2_vp11752232
total_rt_service_minutes2022.504340.28
total_scheduled_service_minutes1337.001704.00
total_vp35416751
vp_in_shape00
is_early41
is_ontime20
is_late614
n_vp_trips1215
frequency0.730.77
vp_per_minute1.751.56
pct_in_shape0.000.00
pct_rt_journey_atleast1_vp0.590.53
pct_rt_journey_atleast2_vp0.580.51
pct_sched_journey_atleast1_vp0.901.36
pct_sched_journey_atleast2_vp0.881.31
\n", - "
" - ], + "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": 44, + "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": 45, + "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": 46, + "id": "023dd283-efa9-4606-98f1-491d43fa1ff2", + "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": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "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": 47, + "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": 56, + "id": "ebaa51b8-9f21-4c7d-8497-675ea1643b78", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from segment_speed_utils import segment_calcs, metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "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": 54, + "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": 57, + "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": 58, + "id": "b01ba61c-e1be-435c-8249-821fd30dde95", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { "text/plain": [ - " 0 \\\n", - "schedule_gtfs_dataset_key 1770249a5a2e770ca90628434d4934b1 \n", - "direction_id 0 \n", - "time_period all_day \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", - "recent_combined_name 80-89 Coastal Express \n", - "route_primary_direction Westbound \n", - "schedule_source_record_id recrAG7e0oOiR6FiP \n", - "base64_url aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", - "caltrans_district 07 - Los Angeles / Ventura \n", - "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "n_scheduled_trips 18 \n", - "minutes_atleast1_vp 1201 \n", - "minutes_atleast2_vp 1175 \n", - "total_rt_service_minutes 2022.50 \n", - "total_scheduled_service_minutes 1337.00 \n", - "total_vp 3541 \n", - "vp_in_shape 0 \n", - "is_early 4 \n", - "is_ontime 2 \n", - "is_late 6 \n", - "n_vp_trips 12 \n", - "frequency 0.73 \n", - "vp_per_minute 1.75 \n", - "pct_in_shape 0.00 \n", - "pct_rt_journey_atleast1_vp 0.59 \n", - "pct_rt_journey_atleast2_vp 0.58 \n", - "pct_sched_journey_atleast1_vp 0.90 \n", - "pct_sched_journey_atleast2_vp 0.88 \n", - "\n", - " 1 \n", - "schedule_gtfs_dataset_key 1770249a5a2e770ca90628434d4934b1 \n", - "direction_id 1 \n", - "time_period all_day \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", - "recent_combined_name 80-89 Coastal Express \n", - "route_primary_direction Eastbound \n", - "schedule_source_record_id recrAG7e0oOiR6FiP \n", - "base64_url aHR0cHM6Ly9nb3ZjYnVzLmNvbS9ndGZz \n", - "caltrans_district 07 - Los Angeles / Ventura \n", - "portfolio_organization_name Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "n_scheduled_trips 19 \n", - "minutes_atleast1_vp 2309 \n", - "minutes_atleast2_vp 2232 \n", - "total_rt_service_minutes 4340.28 \n", - "total_scheduled_service_minutes 1704.00 \n", - "total_vp 6751 \n", - "vp_in_shape 0 \n", - "is_early 1 \n", - "is_ontime 0 \n", - "is_late 14 \n", - "n_vp_trips 15 \n", - "frequency 0.77 \n", - "vp_per_minute 1.56 \n", - "pct_in_shape 0.00 \n", - "pct_rt_journey_atleast1_vp 0.53 \n", - "pct_rt_journey_atleast2_vp 0.51 \n", - "pct_sched_journey_atleast1_vp 1.36 \n", - "pct_sched_journey_atleast2_vp 1.31 " + "{'avg_rt_service_minutes',\n", + " 'avg_scheduled_service_minutes',\n", + " 'avg_stop_miles',\n", + " 'combined_name',\n", + " 'name',\n", + " 'recent_route_id',\n", + " 'route_id',\n", + " 'rt_sched_journey_ratio',\n", + " 'sched_rt_category',\n", + " 'speed_mph'}" ] }, - "execution_count": 78, + "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], + "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" ] diff --git a/gtfs_digest/_route_dir_data_prep.py b/gtfs_digest/_route_dir_data_prep.py index fa2e731f5..791fd8334 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/merge_data.py b/gtfs_digest/merge_data.py index b4904593c..6be0f4a3f 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/quarterly_rollup.py b/gtfs_digest/quarterly_rollup.py index 70a261f76..cb66757cc 100644 --- a/gtfs_digest/quarterly_rollup.py +++ b/gtfs_digest/quarterly_rollup.py @@ -36,9 +36,7 @@ ] crosswalk_cols = [ "base64_url", - "organization_source_record_id", "portfolio_organization_name", - "organization_name", "caltrans_district", "route_primary_direction", "name", From eaab09345230b8a2a23ddb81b6faed4baf93233e Mon Sep 17 00:00:00 2001 From: amandaha8 Date: Wed, 18 Jun 2025 21:34:40 +0000 Subject: [PATCH 04/10] nb to look at routes w diff short and long names --- gtfs_digest/24_correct_crosswalk.ipynb | 7644 +++++++++++++++++ .../24_route_dir_kernel_restarting.ipynb | 1500 ---- gtfs_digest/25_correct_crosswalk.ipynb | 47 +- gtfs_digest/25_route_names.ipynb | 5430 ++++++++++++ 4 files changed, 13075 insertions(+), 1546 deletions(-) create mode 100644 gtfs_digest/24_correct_crosswalk.ipynb delete mode 100644 gtfs_digest/24_route_dir_kernel_restarting.ipynb create mode 100644 gtfs_digest/25_route_names.ipynb diff --git a/gtfs_digest/24_correct_crosswalk.ipynb b/gtfs_digest/24_correct_crosswalk.ipynb new file mode 100644 index 000000000..f979c42fb --- /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 55ef85cce..000000000 --- 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": "iVBORw0KGgoAAAANSUhEUgAAAgQAAAJ5CAYAAADRviiJAAAgAElEQVR4Xux9XchtV3X21vxhEoX6k5Zgq8QUvbGC2oqgIkLVu5IrldLolaBRvBG9EXrjjeKN+Ae5MgH/INBbk4IISotWBUsvkhLF+MlB0RiIJpKTc5LPsU+fN887zph/a6+191pzPhtCzrv3XHOO8Yy51njmmGOO9bxn//zZ6SMEhIAQEAJCQAgMjcDzRAiGtr+UFwJCQAgIASGwR0CEQBNBCAgBISAEhIAQECHQHBACQkAICAEhIAQUIdAcEAJCQAgIASEgBLRloDkgBISAEBACQkAIKIdAc0AICAEhIASEgBDYI6CkQk0EISAEhIAQEAJCQIRAc0AICAEhIASEgBBQhEBzQAgIASEgBISAENCWgeaAEBACQkAICAEhoBwCzQEhIASEgBAQAkJgj4CSCjURhIAQEAJCQAgIARECzQEhIASEgBAQAkJAEQLNASEgBISAEBACQkBbBpoDQkAICAEhIASEgHIINAeEgBAQAkJACAiBPQJKKtREEAJCQAgIASEgBEQINAeEgBAQAkJACAgBRQg0B4SAEBACQkAICAFtGWgOCAEhIASEgBAQAsoh0BwQAkJACAgBISAE9ggoqVATQQgIASEgBISAEBAh0BwQAkJACAgBISAEFCHQHBACQkAICAEhIAS0ZaA5IASEgBAQAkJACCiHQHNACAgBISAEhIAQ2COgpEJNBCEgBISAEBACQkCEQHNACAgBISAEhIAQUIRAcyCDwPOe97zw12984xu79773vavB7uc///nuVa961Zk89u+HH354NvkMhyl9Tr0uJ/j3v//93Vvf+tZ9kw996EO7L3/5ywfpefvtt+9+9rOf7Z599tmzfmB3tvOHP/zh3Ve+8pXd9773vd1b3vKWg8bki5fA6BDhIjzQH34zvG677bazYT772c/uPvnJT+4+85nP7D7xiU9khy/pW/p9zdgdgruuXQcC2jJYhx1WKUX0cFrCMdiD9hAHbtfbf9/+9rd3cJjeWbaOwe1bHtJTr6udAO9+97t3999//zkHXntt1M7bM0U4co6ydfylMWqVh9vn9Ew5ftikhiyV5lLpdxGCQ6yra0sIiBCUEBr49+jh9M1vfnP3vve9r2o1VANdywMw6g/RgdxquXWM1vaQa+p1NTj5VSqv6Fuu9229k8Pf1g5REWD8rne9a0+6Dvl4jI6BWYu8OUIAsuRxaNGhpW1J7jn7Ko2l38dAQIRgDDtP0rKWEOAhyk4k5ST5gcvXWXtbYdkHIXH7d2l7grcLIlIQjfGrX/1qT2rw4eui9iYPbxmw07Q+LFR8991370Pv+Jgu/jr7jbdh2LFEffrwcySbhe9r8LexTT4f7vYRFVvtWrTmne98536LwNpfuHBhrwuHxDmSENmpFSPTwSIfmAe8LVGjHyJM3qFjDkMf37+PiDzwwANXbaHwzeP7B0HGHCrhAnn8XIG+0T2XmjO+bWnsmjk26UGhi7pBQISgG1POr0j0cEJ4FI7Ft0k9kEsPbPvdr/bxACuFYhH2ZmfMDoVlxBhwbtEYuVWsl5FD7p4ARP2ABHA/H//4x/eEA04lty0zBV+QAd735tnCctq/TY63ve1te9JkhOyXv/zlfo8cdijZqRUjdtJ+n36O+QX97f+Gs4984G92qKkIDGwDosq2uvXWW8/ZMTW32B6liIn9Hs0Zyx2J5jXmkB87Z5M5c0Lmfwqpx2MiIEJwTLQ3NhavTFh0kAGsjngV779reaCXHmI5+Pzqh1f9EbHJraZyD2m+rhQ65n4irKBPrk+vMxOCKfhHGPIeuJEas+c//MM/nDk3cya2eofdS3aaipHJhr5NBvuAlCCJ9ZD5Zf0ZfvYxAhptf5VyJXxEgNuXcLFxo/sB8vjfc3PGty2N3TLHNvaYkrgzIiBCMCOYvXUVObQodB4RAqzApxACj2NLNj2cm/WBVV60krLfzcHdd999+9Uv61BatfmIBMbKXceOLjqhkeozRwiiPr2Tq9lnxthGcNjxw3lCBkR5PPnC72ynFoyYWLETRGRirvkFQoBTFZHDLRECdsRf/epX91spflWem79T7ofUthn3dYhNentuSZ/pCIgQTMeu+yv9w4sdhyWXTVmh+gcur9hqtwhKwPtM/NwYkVPl9tGqjsdHFMWcgu0/l1Z7tUfTrJ9cToSRnSn4R9ihH/uNCR87dZal1U61GNn4x4gQeELANqkhBJhfIFBw2DW4tBCCUgJvRAhK22uwP9vk0KOrpftRv28HARGC7djq6JJGq0s8SPAQLIVA+QEb7dGy8/XZ7KVVtQESPTR53xWrQjhqn1UP+XgVliMEfjzohMTCFCHwxIJ1/cAHPnDu5Ab3mUosjKIfXtcSmcGESiVmMlFgfEp2asXI5IAjq8mRYIxL86vFAdfkEPCcA36wRQmXyB4lfaPoFiIqud/8vZOzSal2wtEfPBrwZAiIEJwM+vUPHBECdhJ4EOaywLk9VtFcCIdDndEpg5oVtQ+X+iJCfgxzwMjyNpksmz5aAcNR+WRB1sna4AHtxymdMmA5U336WRKtYFuy8FOzLiJGTBRSpxPQn7dTK0ZTTxmU5leJEPi9ddsW8YWaPGaMi88j8bkpHpeSPDkSbnLwnPFtS2PXzrH1P5kk4VIIiBAshaz6FQJCQAgIASGwIQRECDZkLIkqBISAEBACQmApBEQIlkJW/QoBISAEhIAQ2BACIgQbMpZEFQJCQAgIASGwFAIiBEshq36FgBAQAkJACGwIARGCDRlLogoBISAEhIAQWAoBEYKlkF1xv1FJ4tJLhFgdu762AAquq7kGx6b8Ebe5oPSFlebqN9UPdLbf7QjiUnrNqUeNneYcr6avGpkwd2reAlnTX41caBPNK8jjj8DaNf59DS1jcVtfDdLrjvvcy5C7zh/hneMNl1P103XHR0CE4PiYn3xE/0DEuepaUjDlgVpzzdKEwB7EVm72WC9zESGYZ6q3zJ1TEIJoXjEhsAqWeLGU3Wv25sXozZMtaFlNAZvLeB21OXnrG39bNcV3vOMdOys6ZL/ZxyoStlzXIo/a9oGACEEfdmzSInrA2srgO9/5ztkDxRcxAVngIjj2UPvhD3947lXCEamovcYTAryKl9+ECEXx4OfX91qBIftE0QuWAcWIUHrW+uJiM9aH798KzNg7D+xjetuqyz6p9yzweN/61rd273nPe/ZtIxlTY7NRuXphjRy5Pvl9D6lXP3M0A2PX4AWZOQrlK/m12NDPHX5jo391sWGLsWrnr8kCW7Ld/Q2VwpPl47nP9rK+UA3Q7rNf/OIXZ6+WTt0/7NDteruO+/Hymb6f+tSn9i9tgqywYS56wtdZn8cmzU0PLjVeHAERgsUhXt8AESHgh4Z/oNjD6O67794/bOyD6/G6V34LHrdjzWuuYULwuc99bn856qzb9fzKWayGfJlfv1JiGexh9+lPf3r38pe/fB/C9+WKP/jBD56tqFL98+ufL1y4kN0K8BECVK3zMqZ0SxECcy4lOUzXSB+/QvQOIDc3/AugInvAqRjO9hInOEC8rneKDVMRAo8bCEHt/LVIUQ320CnC0+sLm2FeGjk1LLByxxy0tzh+97vf3b397W8/9xZJ3D+RnTjS4J8qTOg9AfB48LV+IeC3E2siLut7wkmiqQiIEExFbsPXlQhBbvXBhMCH3v1qIyIEuWt4tc9kwL63csMgJPyA8045J4MnBKkVVK7/yJmn8ilSWwYsY063aDUMmXNy5ByCrUixkoymcG5uMF4le7AjMTzNTqVr+LXaLGPNfG1ZBbNdUjJF2PtIB+TFvOK3WLI8Nh5KZdt2gTl2i0r4nBI/d/k6szdIhbcbkw+7v2oJQeo6nmMmK+67DT/yJHolAiIElUD11KzmAesTj3wNdTjBXLsUIUhd48P/qfAv+rUH1xyEAOHl6IHv+5+bEPjQNus2lRDk9LE+OXHMb3nUEIKczMDLryxrrmkhBCkdMW7N/P3Vr351brsrhX0JzxIhMFne9ra37ex1zrZd8PGPf/yMEFgkDNtINr5/2ySus9+ilxBF+T81hKAmbygXWejpeShdnkNAhGDA2VDKIfAPlGjlwi8iYsedWn361XJ0DW8Z3HffffuHp4Wa/SqaTebzDrYeIUhNR6/n1AgBkwwbq2XLIBUhiOzhCcEhNqwhsDxnW+YvRwhK2E+NECD8b/3b/YGtNuSWpO4f0+PrX//6PifA7gNvO7/Ch/ylHILUdV5/EYLxnIMIwXg2P8sBQPgeNz5W/X5FFL0O2NpihcVvPTQ4oxAjHuq5a7zTY0fAe70s3xyEAI6R94gRKm1xxH4q1WwZ2DUp3XLEpxSp8DkE0If39KcSgpLMbDfOP5lqw1QOgdcROQS189fnEPjrGP8UnsAQORO4JsrJsd84gfXzn//87mMf+9hZIqS/z4BzdHSx5KxTpwxy13kyncvHGfCxOYTKIgRDmPm8kj5xyH71++CcPW2/8Tl6JLTZ9/wqYd+OR625Jgr/W/JVdArA7/+nws3+oc5JhbyHWzplULN376cSdP7Sl760u+uuu872jP2D148d1StoJSa5UwZsW/96XrYTCKMf2/TMyZwaO3VNidRFMnkZcIIjeiV3bv5itQ7bpWpFlPDMEQLr23Swj+UBsFPGEUTcg75ehTnlV77ylVdtF/gtEcjPkRnc534bgrco/HW8nRQRkQEfl0OpLEIwlLmlrBAQAltCAImFfrtgSzpI1u0gIEKwHVtJUiEgBAZBgBNscfR2ENWl5gkRECE4IfgaWggIASEgBITAWhAQIViLJSSHEBACQkAICIETIiBCcELwNbQQEAJCQAgIgbUgIEKwFktIDiEgBISAEBACJ0RAhOCE4GtoISAEhIAQEAJrQWAoQmDnf/URAkshYOf77Rz4Nddcs7t8+fJZ/Xoej9+sZ99b2//93/9NimTt7ejZlHrykAd19KNBWvqP+vvbv/3b3TPPPBPK78dtGavFRjV6tvSntkIghUDvxz+HIwS9G1S38ukQMMeN/8xJ+vK9KBSD75///Ofv2+TeKMf9tWo2d/+l/g6RtVU3tIdM9rfezDcVRV1Xg4AtKHv3HyIENTNBbYRABgF2StzMHCSvnj0h4LbXXnvtPqqAD5ybryrJffJvFmm4dOnSPuLgV+zWFztrduz8fUt/ERyeEHB/NqbJZd9BHtbRfvM4MnGy8bxeaI8+RQh0my6JgAjBkuieoO8RDHoCWDXk/yHAzs6cFTt4gMRO0peZhbOPnLS1TTlykADv+JmAlAgBrjWnW9NfCyFgxw+MsKL3OgG3lmhDKXKhCSoE5kBgBP+hCMEcM0V9DI+Ad6Kl1aoPdZsDxCrfRxlAFLzz9KAjdwH9pAhE9H0kb66/WkLgIxpMmrDit+8QQfARkpqJJUJQg5LaHIqACMGhCK7s+hEMujLIhxCndssg5UThDFsJgY9CYNvBbx/UbBkgAsFRjVx/SxACjI3Iht9ySU0mEYIhbrOTKzmC/1CE4OTTTAL0gABWuUgSjFbcPoeAHa45Q94yQEg9F+pPhd1T/XCfvn/Im9uayOVAWH9RDkEqQpCS3W8vpE4w8JwRIejhDlq/DiIE67dRk4QjGLQJEDWeDQGE/Nmxp1bR3pnZNbmkwmjLAA4YfSFa4PuB461JNvRJgJFc6O/QCEGEQWtSIeteOq0xm6HV0bAIjOA/FCEYdnpLcSFwGgRaEgZPI6FGFQJXIyBC0NmsGMGgnZlsU+pghWsFeKwoT27bAIpZ21zRoUOcZ00ovaX/qL8bbrhhd/HixdBOUR2GKKlwqpH92Ndff/3uqaeemtqdrhMCWQRG8B+KEOgmEAIzIQDnet111+2dpAoTzQRsohvDG4SqhvwsK4167x0BEYLOLDyCQTsz2SbUqT1lkEvKs/K7XOq3tTARHGO0Yq85ZYCiQT5ykeovMkyUVIh2tno3ksQRgkMLE7EMwK903HMTE0pCrhKBEfyHIgSrnHoSaosIsLNLha85cW+uwkRw2nMVJqrpr4UQtBQmAm4tWxkmiyIEW7xjtiWzCMG27FWUdgSDFkFQg0UQ8E60tFKNChNF+QSlY4esjG1VPP3002EYPdcPiIwHJtdfLSGoLUyECAL6LeHH44sMLDKl1alDYAT/oQiBpr0QOBCB2i2DlBOFM2wlBD4KgbC53z6o2TKwNi39LUEIkBDYUphIZODAyavLqxEQIaiGahsNRzDoNizRn5TmxMyh2go9dSbe5xCwA7f8ARUmuvLiI/vUbBkYGbBPTfGi/macNDo2AiP4D0UIjj2rNF6XCCDjnR17ahXN32NVnksqrClMlOrHxjInW5NsyPkNpf4OjRBEGLQUJvJ4ob+WrYYuJ6KUWgwBEYLFoD1NxyMY9DTIalQhUI9Azeq/vje1FALHQWAE/6EIwXHmkkYRAkLg/xAQIdBU2CICIgRbtFpG5hEM2pnJNqXOi170ot0f/vCH3Z133rm79957qyoVWtt77rknqSfekXDp0qVmLCBPLoxu/b/whS/cPf7448X+o/5e85rX7B566KHw2qgwU+1YRWH+3OD973//Hmf+aMugBjm1mYLACP5DEYIpM0PXCIEAATjXW2+9de8kS5UK8SKiksOOXotcY4BjEAKW4xDyUqOPb1Oj35R+dY0QiBAQIehsXoxg0M5Mtgl1ojcMmuDekecqFfrVbqpSIa+wOQkQkYZoxY5jh5CHHSlHCFr6iwzjCQH39+pXv3pPkkx+i6KYLPY2RftAp9QbH+17+/goSQ7PTUwcCbkpBEbwH4oQbGpKStg1I8CVCs0BPvjgg1eJm6tUCIfNjpWdHkcU2JGDBHjHz9dynxEhMCcNx1zTXwshYHIDQmDX2/deFuBWs5XBWFp/KczXPGck23YQECHYjq2qJB3BoFVAqNHsCHgnWtrL5tUwHHmUT5Bz5F4JvGUR/Xhnm4sQGCFo6a+WEHCUBE6eyYf1Y98jgoB+S/j58bV9MPuUVocOgRH8hyIEmvZC4EAEarcMUk4UzrCVEPgVMbYd/PZBzZaBOemW/pYgBIioYOXfkoDodT/QpLpcCFyFgAhBZ5NiBIN2ZrLNqINV7oULF/Z75NEK1+95sxOzbHneMjDFS44cbVKRAL9lwH3yv0th/EiuQwlBSnbeXiglUwJzIxI1CZqbmUwSdJUIjOA/FCFY5dSTUFtDwJwTjhvmVrapfe9cUmEU6keoHThhdZ86ipdLNoS8PgnQHG3L0b4oqTC1ZcD2hewgNvgN5CCVVOhlKx3h3NqckrzrQkCEYF32OFiaEQx6MEjqQAgsjMCxjycurI66HwSBEfyHIgSDTGapKQTWgoAIwVosITlaEBAhaEFrA21HMOgGzDCLiHi5jTmXLbztLvVyIYT+o1cftwCVe9lPzSuCDcdDZWiRl9va2PymSPuNczAgPx/rTL1RMicDbFBzgsFv7aTqQkR98UuatjI/p9pupOtG8B+KEIw0ozvSlR+6NQ/4U6oOZ403CIIEmLO47bbbdvaGxEOdMb9K+eGHH96rW1u4J7r2WHjxK4xTNoUecK41BCclf80rk33/Ni5jWXpFMwjOX//1X89i22PZQuPkERAh6GyGjGDQzkyWVAcrWu9M8fBG1ID/jl6v61fuyOzngVOrQ++gcI0nKDmHyytRu65GRr+Ctr9TY0B/rKh5PBAUL0O0Oi5FOKA7r4hTrzP20QGQIW4fvX45ihCkxoj0ZJzYpiVC6ecU6+ojAD4Kkbp2lPu0Jz1H8B+KEPQ0YwfRhR+6fsXHqztul3pQX3fddbuLFy/uQ9ZPPfXUHkHrwxMKOGFzHrxdgetLq8ZUGJkduY1hBIcdtTkUjAHnEzmZGkIAh8rEg/Vhx+z19zhBBta/Bm/e3oHMwI63BgwLawv7gqjx/w0ns53Hnm0VRRNat0dS7aPvU9GFLWxrDfL4mKymCMFk6NZ54QgGXSfy80rFJMA7FRsJD2qzNzuWaCXonQqv/vjfuDblfLyGuVUnh8B5y8Dk5b1xOBcvY+TkaggB+gFGcFK57Qa0TREfdr6MgV+54zfGxZM0XIOKi3D+kNtHCPC3xz6lJ9uTCWBudrZEB0Am2YaKEMx775+ytxH8hyIEp5xhGnsSAj6kbZ1E+/P2YMb3qX1n75R8siKH3OH84CQhx5QEN+/8zAkuTQjgjDn87yMEpptFKXw0YiohyBGjFCHwRAB/pwhBagyvZyshsPEi4pD63vrXlsGkW3oTF4kQbMJM9UKOYNB6NLbZMsoU984+cgT4DmHxKOTtH+i4xjv+aMvA98shYnb+PuEPq2H7P5xxasvAfx+F3zk5kSMRnBth1zGOHCH4f//v/52F4Vn/FCHg76N+criktgx8LkWKECAS4MfAzPZ6MiEoJXGmog+p7/luAmGw72xLozTWNu/E8aQewX8oQjDevN60xrX751G7XMIerzKjCAQ7VHYs2Ofm66MVaxRC5+0HRB8OTSr0xvX5AqwbogCIeECGVAQm2q83/VN9Tk0qNJlBRjwJ4hwCTxx8BMfbyf72JCRy8JH+OYIADHwuBHBV/sCmHzlnwosQ9GHHoQzamclWqU50jHBJQVvOzy8pxxJ91xwDnHPcY483p+zq67QIiBCcFv/ZRx/BoLODttIOUce+5Y14h6jiV7u8uq7pN/UuAawic3X4awhB9M4BrJhrXg1s+pzqXQA2tuF700037V8MxSt9+zdeXIRVOl7GlMtPiGxi71Ww1XrNdT5K4K/JvUyJ38lwrPlZMwfV5jAERvAf2jI4bI7o6hMhwK8crnnAn0jM/bBw1vx6YXM45qD++Z//eWdvOjzUGUev/+Xch5z+p3x1sDnPJ598cnfp0qUdO9JoCwfOtYbgpPS1eXPjjTfuHn/88SQk3tnDViYj29MTF3Ro7c3Wb3rTm2ax7SnnrsZ+DgERgs5mwwgG7cxkSXWwovXO1D+87W84EiYReJj7lXuUK+D3+iFUrl8WPOdweSVq40Rv/MtFFzBOagysvrEy5vFAULwM0eq4FOHwmPDKHr9FxI0jE6x79PbGKEIQ2dTGi/RkZ842LRHKaE4Zmbt8+fJV0QbgxP0rStDHU2kE/6EIQR9zdSgt+KHrX43Lq0dul3pQ33rrrbuHHnpov6Kz1/3ax/rAChKEwr63cLY96Hm7AteXHAA7Ln4lMDtyG8MIDjtqa2s5CyYjv6aY+2BH5yMNSK40+diJMU6eTET6e5yAC+tfgzevzDEusINMJqd9bEUO+5rz9YTAcDJcPPYWcYCzjqIJrdsj3B7yWJQB84FvPj8eE9KhbtIOlRUh6MyoIxi0M5OF6nDY1zsVrA7NMX7ta18751jMSfiPdyr4nVeY2LO231LOx/ebW3Wib+v3jjvuOAsr/9u//ds5JwMS4WWM9q9zEQI4UvRjsvKqNbfdgLYp4sPOlzHwK3f8xrh4kgZnarYzYoRoDeT2hAAEJ2VTryfblglg7p5hh85zLbVtIULQ7xNoBP+hCEG/87dbzXxI2xT1+/Nw4vg+lQTmnRIe+liBwyH4ZDd8n3KIJfAhD5yf/X8pQmC1Ap5++ukzMsPhf454mAz2MWfs9Z9KCHLEKEUIPBHA3ylCkBrD69lKCJALgMjRFJKjCEHpTtjO7yIE27FVlaQjGLQKiA038k7EVPHOPnIE+A4hdewLIxwPpxKFvY1c2Ce3ZeD7RQKaXccr33vuuWffF0gNEwI449SWgf+ex8it8kGOOBTPevK1P/jBD87C8Ghj16cIAX8f9ZPDJbVlYLbwSaO89cFkz7YM/BiY3oZPNF9qtgxAPlK3Si6xEUTCrmX5NnzbSfQ/IzCC/1CEQFN9Uwj4BC8TPuUM/T57LqkwympnYKJkw9qkQiYtvk8mB3MkFXpjcp9eB942AEGJ9LQ+U/v1lhPAERvGPJXwxzJGSYUmAxw5k6CpSYXR9kguqTCKQPm5FG0N+FwI01MJhZt6vGSFFSHox5Z7TUYwaGcmW6U60THCJQWNVrlLjnfMvvnY4THGrTl2eAw5NMb2EBjBfyhCsL15KYlPgIA/DuhXjEuK1DMhQISkNsnvEJx7x/EQbHRtGQERgjJGm2oxgkE3ZZADhD12pcIDRN1fWjrHP1dhIi+n3zJI6VGzr34oBrmxjRBcuHBh0UqFLYTAbxtEtShSpFCVCpeaKaftdwT/oQjBaeeYRp+IgCoVngdOlQrrJlLNlkGqUiFqD3ASYxTZQFKhKhXW2WQrrUQItmKpSjlHMGglFJtvhhWtKhVeMaUqFV7BIVrJs9P2JxtKpwmsTySy2r+5OmGU4KpKhZt/tCQVGMF/KELQ7/ztVjNVKrzyHoTSsUM4Mzg9VSq8cku0bo+gva8TwSczcLOpMFG3j50hktJFCPqdv91qpkqF115VR1+VCp+b7qmKjGjhCw7lbhRfWCg6kshHVkUIun3siBD0ZtoRQj692SzSR5UK2wiBKhU+t5WACEHNqYYScdCWwQhPm+d0HMF/KEIw1pzevLaqVPjg2Z52acsAxEmVCp97AVLtlkGUW5Cq7ojqkz4CYX+rUuHmHzlnCogQ9GPLvSYjGLQzk12ljioVXoHE1+/HloEHTJUK4xc5Ta1UyNEpX+lRlQr7fvqM4D8UIeh7Dku7BRBQpcL5QFWlwvmwVE/LIiBCsCy+R+99BIMeHdRBBlSlwuUMXdqrn2vklsJEc42pfvpBYAT/oQhBP/N1KE1UqfC8uWu3DFKTpPUo3pyTDYRgrZUK+YinT2iNkhNVqXDO2bGevkQI1mOLWSQZwaCzALWBTlSpMCYEXAI5OicfmTZ1ZPEY04C3DNiRRm+fxJ597tXDJZlrKhXmkgf9McRoPFUqLFlhm7+P4D8UIdjm3BxealUqfPbcHFClwitwzFGp0LDEyQGubFhDnFSpsN9HkwhBZ7YdwaCdmSxUR5UKVanwD3/4ww4FiJgEWBThySefPCvcFEUTardHEGHBlkHuBYpSrFMAACAASURBVFWYqCpM1O8TaAT/oQhBv/O3W81UqbCtMBHO1Kcq+OVejGSTyJzsrbfeuj9Tn3O+POF4S4e/560Av5qGM7VtD3tHhbVF+N3Ghh5cV8HeLeA/c1YqtL6jo66p70UIun3sDHFsXYSg3/nbrWaqVNhGCFSpcFqlQtxAqVyM6HttGXT72BEh6M20I4R8erOZ10eVClWpEBECRAL4dcQW3sfHKjlG86W0ZZBa5Vu/tlXhoySPP/74uWmKqIZ9qUqF/TyRRvAfihD0M1+H0ESVCq+YWZUKrzhmvzURJRVyRcHa1x/7KFTUL9uBSx3r2GGfjyIRgs7sOoJBOzPZKtVRpcL5zKJKhfNhqZ6WRWAE/6EIwbJzSL0vhMCxCxMdWqkwl6FeCmHXVNjbemGi66+/fnfDDTfsQ/I+AoIogE8q9FGS0lSz/i9evHhVdCW6jiMEXJjI2zGSQRGCkiW2+bsIwTbtlpR6BIN2ZrKkOipMdB6a3EmBkuOsOV+/1LzaYmEiVCdMFSlSYaKlZstp+x3BfyhCcNo5ptEnIqDCRCpMVJtDwOWFa3IIUoWJaiI1OmUw8YbewGUiBBswUouIIxi0BY+ttlVhIhUmOkVhIr9t5Lc27G/VIdjqU6Us9wj+QxGC8jxQi5UhoMJEbXUIVJgoPhb44IMPVs1snGy58cYb9zkO/pijHW/ER4SgCtJNNhIh2KTZ0kKPYNDOTBaqo8JEbYRAhYnmKUyE+gf+CGKu+mLNy5BGuGd70HEE/6EIQQ8zdSAdVJhIhYlOVZjojjvu2JdU5ggB1zjAbajCRH0+kEQIOrPrCAbtzGRXqaPCRFcgUWGi0xQmSh07VGGi3p88O5Uu7s3EIgS9WfQ0+qgw0Xy4qzDRfFiqp2URGMF/aMtg2Tmk3jtB4NDCRIfAUHPc7ZD+T30tQuy1SX5T5e0dx6m46Lo6BEQI6nDaTKsRDLoZY8wo6LGrFh4q+iFVC2vG3nrVQqsbcOHChUWrFk4hByiGpeqENbOwvzYj+A9FCPqbt8NppKqF502uqoV1twAfXy1dwSQrIgSqTlhCcPu/ixBs34bnNBjBoJ2ZrEodVS1U1cKlqhZiAiKZ9fLly1cldKo6YdVtuvlGI/gPRQg2P03HVkBVC1W1cOmqhRZJsA8KE/kIgYoRjfEMEiHozM4jGLQzkxXVUdXCtiJFqlrYVrWQ333gHT8mpwhB8TbtosEI/kMRgi6m6rhKqGphGyFQ1cK2qoWcn8J3maoTjvfMESHozOYjGLQzk2XVUdVCVS1cumohT8BUhMDaqDph/0+eEfyHIgT9z+NuNVTVwiumVdXCZasW5rYGgD3XqYjKGXd7Ew6kmAhBZ8YewaCdmWz16qhq4XwmUtXC+bBUT/MjMIL/UIRg/nmjHo+AwCmLEU2pWjhXMaJUQR0VIypPOsauVJjI56ZYsSSrpJh6l0G0tWDfKVpQtstWWogQbMVSlXKOYNBKKDbfTMWIzptQxYjqpnRtMaLUa4u5zHKpzZve9KZzb0esk1Ct1orACP5DEYK1zj7JlUVAxYhUjGipYkQRubLJWIoqRG1SpEG39/YQECHYns2yEo9g0M5MFqqjYkQqRrRkMaLU9o7fKrLJqSJFIzxxrug4gv9QhGCc+dyNpipG1FZ7QMWI2ooR+RsFp1lQqfDOO+/c3XPPPfujhtdcc83u0qVLZ5eoSFE3j5mrFBEh6My2Ixi0M5OF6qgYURshUDGitmJEESGw71DzAFEBzEMVKRrhqaMIQXdWFiHYvklVjEjFiJYuRpRa5d9xxx3nkgRLSYV2tz300EM7RBS2f/eNrcEI/kNbBmPP8c1pr2JEV0ymYkTLFiPyUSjgnTp2iG0Zs42KFG3usVIlsAhBFUzbaTSCQbdjje1KqmJE89lOxYjmw1I9LYvACP5DEYJl55B67wSBKcWI5lK95rjbXGOdoh8+27/k+L3juCR26ls5BN3NgREYXndGSyh0ykqFUzCeq1JhamxVKixbpYUQRJUKH3744d3ly5evGih19NAaqlJh2S5baTGC/1CEYCuzUXKeQ0CVCs9PCFUqrLtBDq1UyKOgOJYdQfTfW6ljVSqss8lWWokQbMVSlXKOYNBKKDbfTJUKVanw2JUKvdP3NQjsdx+FUKXCzT9qzhQYwX8oQtDPfB1GE1UqVKXCU1QqxA2GaIzfKrDfVZio38eQCEFnth3BoJ2ZLFRHlQrbChOpUuE8lQpRkTA6+oqJKkLQ7xNoBP+hCEG/87dbzVSpsI0QqFLhPJUKuUJhqtiQtgy6fezoXQa9mXYEhtebzbw+qlSoSoWnqlT4+OOP73LbBZirOEZpf6tSYT9PpBH8hyIE/czXITRRpcIrZlalwtNWKvT4q1Jh/48fEYLObDyCQTsz2SrVUaXC+cyiSoXzYamelkVgBP+hCMGyc0i9d4KAKhUuZ0hVKlwOW/U8HwIiBPNhuYqeRjDoKoD+sxBcOAgyWZjVzm4/88wzTWLadT6RMDoDznu4UVi9adA/N7YxEQq2/6fktt+e//znX1XFzl/Peti/o2NrNTK2YGH9QY5W3O1a06sk6yH91+iLNilZoiTTqfaHLrgeNsvZv0WHSNZS3zU2aJFBbachMIL/UIRg2tzQVRkE4PTZSUYPNe9IovfLw6HxA770gEQ/kZOeYriSw0sRAiYo/NBP6Vkjm7+2hMVIhIAJVslmKayZxE0lFTk7evuBOJcI5xKy1Mw3tXkOARGCzmbDCAZdg8lSD2OfEDiVEOR0hIPEyh5OAiQFf7Mj9dEMPJz9Ct8TDG7HMqFdKkLAx9d49c14WB/28av6HJnwevA4LF9ETux3RF2iKI5fKTN+LDevgKMoTg7rSMaULL6td5iMUyRTjc1BpqA7/59/gyw+khXpH9kPWFp7fleCbxsRz1J0YQ3Pg15kGMF/KELQy2xdkR6lFXNp5cyq4KHKD/VcqJ3HBing8byzNodr38HxRo6OH/SpdnBIueu9Q8HfLFNuK4T1YCcU4Rk5aRsv5ciZMKWu9YQFZMYTH8PIEzDImMM6h6H1mSJD0fclmWpsDnm4Ly+j1xMOOqV/jhCwc/d24nGjObii279bUUQIOjPtCAZdg8k8IWBn7len0Wo15/DxoPQrQnaKvDLOPWR5nGh1HTmVXDs8qKE/nFhqhQkHjdWmtW/JK/BY2LipVSlwiByNJ2C2SkU/KQKRIj5+/tVECVLRB6yYI1miCIEfO8o9sTbor2TziBBEOObyYrz+OUJg8qZk4vmeigSt4d7vWYYR/IciBD3P4BPpxitJ/+A+lBBEq31efUYOFd/xfq0P1deu8EurWDh3rEARpfD/Rz8sk303JfGPCUgrIfDbIJDHbx/UbBmA4ESvCGa7lTD0IfRIlogQREQwFa1ix5wjN6w3/o2oEuYQE4JS3kqOEECnKJLD5CTC70S3+lDDihB0Zu4RDLoGk+EByc4/Sp7yxKE2JOydVo4k+FUzxkgRE5bBRwjYIfh2tYQCxIBXfOirZbvAkxyspqFXpId3ZCWn6MP0KZ0Zp5KzYpvXyhjplCMEmB+8LZDbLknZfGqEwI/VImvKfl6W3BbKGp4BPcowgv9QhKDHmbsSnfCg5RW8T5ryjpkdZfQgTfVVu2cbZeVz6B0Omx0sh555FWr/9olgJl8pqZAf7t5Js36piEEK11xSIXD2+nNfkLvlyKiPHET9sR1LWHs8UrLknCxsAMfMURfoWJKDbeS3fFIRAr9FEUULvO1sHG8bfIf5ha0kT5h5ruLFSyu59bsUQ4SgM7OOYNDOTDaEOj5SMoTSUlIIbAyBEfyHIgQbm5QSdzoCfnX2zne+c3f//ffvO+Tf/EqvJdEvJ91f/dVf7X7zm9+cSxz0qz67/l3vetfugQce2F1//fW7p556arrC7kqMz1/PpVskpOmW0sF++8u//MvdY489trt48eL+cpYFK/jU9RGW1kfq+0i+G2644Wzs1Dg1bWYzkDpaNQIiBKs2T7twIxi0HZUxrvCOF47DnNKvf/3rPSHAv0EQ+O85UKp1VqWTFFNkAcnwOvKWzZR+c9ekCIE52aeffnqfQMkOlwkB7NVKCEwew89e+VwiU7D56173uj0BY4IIvWrazI2b+lsnAiP4D0UI1jn3JNWMCMAZ+gd+tJ9rbcw54GN///SnP92v7KOVNTtvXuX6vs3ZMSGAI0w5Icjhoxg+5wIO04/nHWkKA15Vt+hXq3fk0E1W6MWEAGQFsoKY+SgGYxnJjOt9vge39eQsIi81bWacpupq5QiIEKzcQK3ijWDQVkxGaJ9amcMZYYsgFSHA9ex8zYHccsst57YA2KlY31ih4vu/+Iu/2Le3fixMHoXrWVZzuvZBUhzLG5EL6y+33eAT6dBvq37Qgx2u6WQf6OX7xDzzzho6gdAgYQ/kColzKez5eyYfTDqiOc5Ygnh48lLTZoT7RzpeQWAE/6EIgWZ79wjMRQjgAOFY4aw8gOwo8Zs5GzhS+y61HcHhbu884bhsdf3v//7vZ2Qhyj4v5R9wSN47+JJ+Kb2hqycKHLr3tuBIiUVmmJwZecJYHnvDj/Mx/ArfbwF5G9U4+5o23d88UvAMARGCzibDCAbtzGSzqFPaMqiNEKQIgV/pYzyE932EwDszVjLaxvCRC0QYOP8BK+rUajcCEo7fy+MJgdcvOrqJcUtypAiBJwJ8nNH+PTchqNkOqGkzywRVJ5tAYAT/oQjBJqaihDwUgUOSCqMERN4ywH64fee3Ejh0zitxtOUz8lEkwztfPikAJ8kr2dSWQZSzAExACJhg1Ojn9bZEPmwZpORIbRmgZgB08oQgJVsqGlHaMgCBsX7tY9GGXFJhrs2hc1PXbwMBEYJt2KlayhEMWg3GgA396tsn7JVyCBgyv2LFb9F2AX7jlXht1n8U3YjIRCmp0GTwiYBYzeeOI6aSB+dOKuREQe/8c0mFESGoSSo03VNHCnlLRMcOB3xQJFQewX8oQqD5LgQKCNQeF1wDkBHRKMl1bP342OESstUeOyyNrd+FACMgQtDZfBjBoJ2ZbBXqHNthtirNq1i7lo8m1vR1Cv1KSX+Qu1W21vY1+KiNEDAERvAfihBorneNQGmbAMpjz5r/ngOYWgel6oTPbWm0FiOqxRhkie0abfGkCJW2D+a4I7bbhwjBdm0XSj6CQTsz2UHqHJJIeNDAdHGts1J1wufKR7cSAoO7ZpsgerGTTwLNFXBCVCNX2XCueaN+1ofACP5DEYL1zTtJNAMCpaOGPISqE15Bo5QoOXcioY15zOqEflohOfMf//Efz95pEdV+sOt0BHGGm3LjXYgQbNyAXvwRDNqZySarM1cxIlUnvPKCoh6qE0aEIHrBVbRloCJFk2/Fbi4cwX8oQtDNdJUijMBchEDVCa+g2kN1Qp4fvrKh/82TAhECPV9ECDqbAyMYtDOTTVantGWg6oTnS/+OUJ0Qk6l0wsHnnmjLYPJt2NWFI/gPRQi6mrJSxq/07G+s8qOKg6ViRK3V+7jAjg+1qzrhs3vz8GrbJ1MCI8NxqeqEvtBR7eofRMJ0SFU21B3YLwIiBJ3ZdgSDdmayg9UpHTssEQIWoJR0l3oPAV7Co+qE79wn70VvbTxGdcLIPtga8L/xcURfItrmROnlUQdPXHWwOgRG8B+KEKxu2kmgNSBQe1xwDbKqOmHdscM12EoybBcBEYLt2i6UfASDdmayg9UpRQgwgC9MlHsjYYtQtcSitTBRbXXC1HsKauVq0dXalpL1bIvg2muv3b8EyT4cvi/lMaRkvuaaa3b2kii/FRDJHkUConc8eNnsbxUmap0NfbUfwX8oQtDXnJU2hIAKE71r98ADD5ztxcNht5Y2bplUKULA7y9gx8pOHPY6dmEifuMkMMq9+VCFiVpmRD9tRQj6seVekxEM2pnJJqtTOmXAHasw0RU0SjkSvRYmYkIQJX4aNipMNPlW7ObCEfyHIgTdTFcpwgjMVYdAhYnGKUyUqlLI2wXR65Z1542BgAhBZ3YewaCdmWyyOnMRAhUmumKCEQoTpaIDIgSTb8OuLhzBfyhC0NWUlTJAoLRloMJEKkz061//+twNY4Qgyh3QloGeK4aACEFn82AEg3ZmsoPUOSSpMCpixG/Gg+PAqvKWW27ZF6tRYaIHrjqj70PxaytMZJMst12ASajCRAfdjpu/eAT/oQjB5qepFMghUDp2qMJEz6F37KRCJk+nLkyU2mLirRIdOxz7WSNC0Jn9RzBoZyY7mTpLndNfQiEVJlJhoiXmlfo8j8AI/kMRAs16IRAgsHZCUFuYKGXcU+hXeqkQZG2VrbW9JrwQmIKACMEU1FZ8zQgGXTH8JxGttGUAoXylwpqqdzUK1Tqr1kqFNWNbm1SlwtrrW9uVKhXa1sBjjz2WrVTYWpioFmPThecDCjSpUmGrlcdsP4L/UIRgzLk9hNaHJBXOBVCts/Jv/Ztj/NqXKc0xFvpYc6VCtkXqFApIgyoVzjkr+uhLhKAPO55pMYJBOzPZZHVKxw65Y1UqvILGsZMKbUwkE8JecMg+QsMJiGw7tPOnBKK6CdbG3rZon9SpAlUqnHzLdX/hCP5DEYLup/GYCs5VmEiVCvurVIjIkX+ngyoVjvmsqNVahKAWqY20G8GgGzHF4mLORQhUqfCKqXqrVAidmBSoUuHit+WmBxjBfyhCsOkpKuFTCJS2DFSpcNxKhZgzPsdElQr1PMkhIELQ2fwYwaCdmewgdQ5JKlSlwnfu99t9JUZfofG6667bnxgwgpU6KbGWSoVcIRERAmwJqVLhQbfaEBeP4D8UIRhiKo+rZOnYoSoVPjc3jp1UeOxKhSABfDdAZ1UqHPcZUau5CEEtUhtpN4JBN2KK1YtZe1xwDYqoUqEqFa5hHvYuwwj+QxGC3mex9JuEwNoJgSoVPmfWtdtq0gTURatDQIRgdSY5TKARDHoYQv1dXdoygMaqVDiP7bdYqdA099UKo0qVernRPHNkq72M4D8UIdjq7JTcRQQOSSosdl7ZoHb1qkqFz5UVbi1dDIduCY5PPfVU0jKpSoV2wQMPPLDjhEnOLUGHeBfD6173unPtK6eCmm0cARGCjRvQiz+CQTsz2WR1SscOuWNVKryCxrGTCm3MNVQq9HMlegmTJ3a5SMjkSasLV43ACP5DEYJVT0EJNxWBuQoTqVLhOJUKfUSJ517uyOLUOarrtoWACMG27FWUdgSDFkEYpMFchECVCq9MmJ4rFd5yyy273/zmN+e2DPy2hQjBIA+OjJoj+A9FCDTPu0SgtGWgSoWqVMjvNLD5APIXRQq0ZdDlY6JJKRGCJrjW33gEg67fCseT8JCkQlUqHKdSoc1IVFtENMS/+AjfW86DfTiicLwZrZFOicAI/kMRglPOMI29OAKlY4eqVPicCY6dVLimSoWpY4e8VaJjh4vfrqseQIRg1eZpF24Eg7ajoisiBGqPC64BPVUqVKXCNczD3mUYwX8oQtD7LB5cv1KEAPD4wkQWObCwcFSgpgXSWmKRejFQaqzaSoUYn/vhlfmh+nn5SoWJbCV+7bXX7kP09uHxsUrHqtzLlsLymmuu2T3zzDNNtsJYfozU9yarIgQtM7+/tiIEndl0BIN2ZrKD1Dkkh+CggeniWkKgwkTLFyaCWUC+PCFJfY/rVJhorrtim/2M4D8UIdjm3JTUBQRKpwz4chUmuoLGsXMIbMxjFiZixx5FIfCqZz5xgGt0ykCPHBGCzubACAbtzGST1ZmrDoEKE/VVmMgiMfaxMsd8siD1PSag6hBMvhW7uXAE/6EIQTfTVYowAnMRAhUmuoJqD4WJEDUym7KDT33P80mEQM8XEYLO5sAIBu3MZJPVKW0ZqDDReIWJ/NFC3kKIkiv5O20ZTL4Vu7lwBP+hCEE301WKeAQOSSpUYaL+ChPlVvyprQG+BkmF9p0KE433vBEh6MzmIxi0M5MdrE7p2KEKEz0H8bGTCk9RmKjk+KOtAeCiY4cH346b7mAE/6EIwaanqIRfCoHa44JLjd/SrwoTqTBRy3xR22kIiBBMw221V41g0NWCvzHB1k4IagsTpWA/hX4Iuf/617/OzoZW2Vrbb2wqStyVIDCC/1CEYCWTTWIsg0BpywCj+kqFc1Xwq3VWrZUKa9FKVSqsvb61XalSoW3RPPbYY9lKhf7Vw5AhhWUtxtaPnw/YMuLvoxcb2bXaMmidDX21FyHoy567EQzamckOUueQpMKDBqaLa52VKhUep1JhRFjg6K1A1f33378nDZxbAnOqUuFcd8U2+xnBfyhCsM25KakLCJSOHfLlqlR4BY1jJxXamMesVJiaE/79BahYaO9HSEUncpEQ3Zx9IiBC0JldRzBoZyabrM5chYlUqbCfSoWp7ZPoZAETJN4uAGkSIZh8a272whH8hyIEm52eEjyHwFyEQJUKr6DcQ6VCP184EuBzC0QI9HzxCIgQdDYnRjBoZyabrE5py0CVCserVBgRAu/4QX58YqEqFU6+Fbu5cAT/oQhBN9NVipQe+FH1wVJhIs5CNydxyy23nKtSh1UmvudiO7bd8Bd/8Rf79iAgJUdjOvg9bQ51+yI59nfqhIJPloOzs/+bXiZXq36ceGe68EuCUnLwuwJ8+N0nU/IbB1OypcL2di3ki+6G1PsI2EYpIgnsTCb7qFLheM8bEYLObD6CQTsz2cHqlI4dlggBC1BKuovCznC87Lj9mJ4kRE4pSnTz40XH9aL6/UxaWvTzfbFj5n4iOdhZs2NOlYj2xz5Z5ogQeNKR2uLwmEU6sPzcj44dHnw7brqDEfyHIgSbnqISfikEao8LLjV+S7+qVKhKhS3zRW2nISBCMA231V41gkFXC/7GBFs7IVClwucm1NpttbGpL3ETCIzgPxQh0PTfHAI+7HvNNdfsLl26tNeDf1uq+qCNZ2fUU9UMr7322t3ly5d3LFf03RTgo62DKf20XGNj+rwG1h2/Ibw+pcqjXct41cpXskXUD/QxG9mHt0J4+6b1ex4rdW2tXmq3PgRECNZnk4MkGsGgBwG0gYvh8OF04BDsAWwPeP+w93/PoWLJCfVECAxX+xgBSlVThE18LkQt1oeSJZaxNCZkxXwBibS/7Tcmcpg7td/z2KlrS/Lp9/UiMIL/UIRgvfNPkjkEUo4jSuYzp40VoHVjfxuJ4Opz9n1roqC1Z0IAJ1mKBrDsPrqQSs5LfY+VOBwwRw38Sh4Oj6H0Jx4gW7Sy55U7EwI4VFyLcawP+y3C2RMpyM3j4nr/ndeDHbqXP5dQiHmB61MyAVu2AePsv2d9U316THSDbwsBEYJt2aso7QgGLYKw4QaplTk7wVyEANd7R5p6+GNVjAc5HAJfb47BO1J2kh5uOMvIobAjxVggLUxE2OHxtoh39Bi71G9EIuxa72h5a4CjBpARcmE8jtrknCk7Z5A2jw/jkCI9tVsOPEd8XxHuICMcncoRglSfIgQbfvj8WfQR/IciBNueo0NJPxch8FGB1IoyWqGzYzPweaUKY+S2DFrHggwpB8mREBCCyDFyFMUTGq8T9PB4czTEoi8YDwTAE4La1XVqtc6T25Ma71w9EczdGCIEQz02ZlNWhGA2KNfR0QgGXQfSy0hR2jJgB4XtAn74pxwcHFlqpZ+KKPjVfgshqB0rRQh49c1o+4gFMIu2F4BNKkEyhZcnAhyZ4C2DQwhBtH1hekImRAyg+1RCoC2DZe7VHnsdwX8oQtDjzO1YJw7bsoOoSSqMEhB5dYyVtd8a8OF63mKIVte5CAFIRO1YHCqPnDswQKjdO0p2eH7LJOVcPbHxERU4fSYrwKGGENi49vFJoJzn4fGBTEZeokiRjT9ly8D6BZmwf6N/O7XS+j3fdqlrO741u1dNhKAzE49g0M5MFqrD4W84RD52GGWQI3v80KRCG48jA3DSUZJbKtGwNqkQzt3ry6t9JgCp0L+/vuYaXnlDD94bT5GrHCEwvWt04eRFLyvLBVvWJhXytWwvHg/Yws4c5cB4qfa8HZRqM8L92auOI/gPRQh6nb3S6yoEUjkIo0KVO10ATMyxYeW8Vpy2IONasZNc9QiIENRjtYmWIxh0E4aYUUi/4nzpS1+6++1vf7sfgX/jbHxedR4qSolkvOxlL9v97ne/27Fc0XdT5EhFBGr68tsHuWt4fx7/5lwF3u/nkwg+n6FGLtiN8cpdF22JpPIPuB8/bxAxaI0WcJ+KCtRaeJvtRvAfihBsc25KanL4cABRGDu1fTAXgFslBFP055U4Oz92wHC0HHpvGetQslQbLchtr1gfL37xi88RORAh/70nGdG1Lfqr7XoRECFYr20mSTaCQScBs8GLUo4j2i+31aat0vGxv3//+98vVqSoFA1g2R999NFzdQyio44c0Yj24BH9wB49nLE/D++jJuiXnSNki1bZ1g66MSEA6cK1GIfzCXiKcZKmP4nA4/rkxRQOTPq8/LyvDxlSc6f1xIGKEW3wwXGAyCP4D0UIDpgguvR0CMxVk4AT9Ngxekc1tUgRO0mPlj+2yOP7c/cgAgjDc8jfZ/tHjh5jl/qNSIRd6x0tbw3Y78CHx2ZCwKdAcji/5CUvOVuZg7R5W2AMJgw+SpHbcuDTFcAl6gty8nggOz4C4nE7ZDvndHeVRs4hIELQ2fwYwaCdmSypzlyEwB+pi1aUqZWpf+jzSjW3GoVzbR2LHT87JsjHkRBEDSLHyFEGJkS4Jgr3p2oSYExcC8IB3VKkB2N4Z8+EwEdPUqTmkCJFEY45AiJCMMoT5mo9R/AfihCMO783rXlpy4Ad1BxFitiJc2iew/NRgZ9cUiGcpg/Pp8ZKEQI4Ub+d4JP6Uv1CH++8eYIcq0hRRAhSSYJzFCmCg7f/t5IXbRls+hHSLLwIQTNk675gBIOu2wLzSsdhdOu5JamwVKQIK2tEAXhFy+F6/j4KE+cIARxQ7Vgcuo6cu/3u1oPeeAAAIABJREFU8yPYmR5SpCi1ZeD3+TnKwFsGftUN3Exe+1iOh30XbRl4fDCLckWKclsGufC+ycCJiTx29D3P6NS188569XYqBEbwH4oQnGp2adxZEPCrYn/sMHXKILWPjJWiT27jlSQLzqtKOM0oyS2VaFibVAgy4PXlkD/aQNYo9O+vr7kG+tq1PqmQEwR9nkCOECxVpKgmqTCypd86QhsVI5rlNu2iExGCLsz4nBIjGLQzky2mTum44GIDr7Tj3OkCiFx7pO+UKm5BxlPio7GnIzCC/1CEYPr80JUbRkCE4DnjTS1StDbzy6Zrs0hf8ogQ9GXPId5n3ZnJFlMHZXt5AISNeTuBX7hjbWtfoFMjeM3RNB/iL41f02dKttSRQ27f0n/UX7RVg/598mDLWDV4c6TDJ1x6HVMytYyjtn0hIELQlz1FCDqz51R1/FsDrR9OUPSOrMZRTpGl5PB80mSNHKU+c3LO3X+pv0NknYK3XcMFlaLTCyyzx3/qmLquDwRECPqw45kWIxi0M5Mtok70oGeS4Ivc+ARDODLOnEfyGa/osZr30QhOBEwlBXqS4oHwfbIsfrWbky2VXMnO2jtJL7ONB11zyZpeB08IGDtfz8B+83izc7e+OTHQ/vb1CbiYUipCkNJ7kYmoTjeFwAj+QzkEm5qSEnYOBFIrU3wP5+Izz73T5SN3vqgP72fDufEKNTqeh3oJ3qHjb09USsQi5chZNsaCiVKJEEB+f/Qv1V9ktxQh8EcUuf6C18mfbPAkIBo3F7lgmZSTMMfd1k8fIgT92HKvyQgG7cxki6gzByGAM8ZKnp0+C52KEsChRs4+58RAVmz8KJ8g58h9v3a9kRD0kyIQ0fdRuD3XXy0h8LgiMlDCO1W8SIRgkVtoyE5H8B+KEAw5tcdWOrdlwKvCXIQg5aC4BgFQ5vFSzpX7y1nH2oF8tBICLxu2HXy430c7UjK39LcEIeAKlCBmc0YISjkQY99F42kvQtCZzUcwaGcmW0SdQ5MKcw4eK/jSvjs7XZCBKMse/dn/2YGbM4zyD0oRgtw2h98y4GgE/5v382v7O5QQpHD12wuHEgIlFS5yy3XR6Qj+QxGCLqaqlGhFIHfssHTKgJPfbFxeKfvEOHPcnPwGZ4rweuTUWZfUWLmkQvTp9YhkS+FQk2zY0t8chAB9AO/WpEK+npMKrR/7RMmXLVsRrXNQ7beFgAjBtuxVlHYEgxZBUIODEUjlIBzcsToIERDemhhrQGAE/6EIwRpmmmQ4OgIo1csDR4WJ/MuC8Lrf2j3/nGI1js5HCHIv7bGxavpMyVSzZ97Sf9TflMJEfKLhkInix47yPYAhxlGE4BDE+7pWhKAve+qUQWf2nKqOf1MgOwG/J26/1TjKKbKUnKtPfqyRo9RnTs65+y/1d4isU/GOXs7EfSmHYAqyY1wjQtCZnUcwaGcmW0Sd6JQBk4S5ChPB+fhoBOcN5HIIIjkBiO+ztTARZKvJFSglSJpMpf4iQ3pC4HMS8EZERAgOLUzEMqRe5pRKylxkIqrTTSEwgv/QlsGmpqSEnQOB1MoU39sYPumM/2ZHXVP8h2sU1B7hg57sJFWY6Nlz0RrDBmH/1mhDKnrB/agw0Rx3Wz99iBD0Y8u9JiMYtDOTLaLOHISAcwjgmKIjb6kowRyFiaJ8gtQK1+ciGLA46RCF0XP92G+5wkSlsDyTHY9j9LfPIYjwbtnrz21liBAscst10ekI/kMRgi6mqpRoQSC3ZWDO7NFHHy1GCFKE4JiFiVoJgZcNYXMf7p9amCjXX+2WQQshmFKYqCWvodS2Zc6p7fYRECHYvg3PaTCCQTsz2SLqHJpUmNsywHZDad99SmEidri/+93vVJjIvfCIyUQ0cXy9gVQbbA/lcjgWmZjqdNUIjOA/FCFY9RSUcEshkDt2eIzCRP74Ysr5+FA/Vvm5pEI4xprCRCkcapINfRKgrdhzuHpbRkmFqQgBXzulMFEkF5M3+7cKEy11t/XRrwhBH3Y802IEg3ZmslWq05rAtkolNiSU8N6QsToWdQT/oQhBxxNYqi2DgBzUMrimehXex8Vbo8UIiBB0NjNGMGhnJltMnaiGP0LILYPWHk2LXqjUMk6qbSq0P0ffUR8554zsfz6iydn/2MJI7fWnsKzF2OTlbQy//QB9UuP7d07UvChpKZzV7/oQGMF/KEKwvnkniY6AgH/1LzuTliNstc6KnU1L/zkooAOfHlh6NZ3qnxP2UrrCWbcSAsOgJiGQbcH2NbzNudv/I7szUbBxTD7Lh4heL32EqakhVoqACMFKDTNVrBEMOhWb0a6LHAOvYNlpp6oA2vfshHB95EjMyeDcP/+eS6zzCYXekeacWy5ywA6boyKp70tygExBL+4HZIUjMtafJ0WMJc9FtMP1bAvfh7W5dOnS/nJun/qex/HEbmliNdr91oO+I/gPRQh6mKnSoRmBXISAnSQ7Bq44iO/hpOHkUgV7sEL1K10+CRCRC17VRivrVJgbfbF8rAs71tz3wIIddoqYoE8mVna96Q69uQxxSjb/PWf/16zaU5GIXIQiOpGRimQ0TzZd0AUCIgRdmPE5JUYwaGcmW0ydVA5BtHr1BIFDzOw0oqJE1pZJgF/p8uoajg81/FPEJAUKOzzIFTnpiLSk9MZYnkDw/rpfXXOkxELvIAEgVJ48oT1+T41l16UwjjBJrfKj70UIFrvVuul4BP+hCEE301WKtCCQCrd7x4A+fVKgjxB4Z8ay+JA7SAJX2oOThMPDNTlHHOmbcq5+O8STgpTeNXKkCIEnAlyMiRMPlyQETKqYyPnvtWXQcveM2VaEoDO7j2DQzky2mDopQgDHgNC0d/w+dM4r8WjlGSUdeufL+/1+RZ/bMohyFuDAQVCYYLB8Kf3893CcOTl81IP14y0NTwhSsuUiBLktg9Qqn3VARCbaDkAEwtpYBKRme2KxCaqOV4fACP5DEYLVTTsJdAwEcgl57MR82N7LxpGB2qz/VP6Cd1I+shA5MS8r5F1DUiGTJ+/8c0mFESGoSSqEs2cb5RJC0d6TMHyvY4fHuBO3M4YIwXZsVSXpCAatAkKNNoVARDRKCtQehyz1U/s750mUrpkiW0v/pfH1uxCYgsAI/kMRgikzQ9cIgYUR8Cv/1oz3KU73UJVqk/5aZWttf6geul4IRAiIEHQ2L0YwaGcmm6zOsSoRRuH/3HZEi0KpLPmWPlrbwqlz0h+H90vJiTXj2RhT9uenEANPUvw2TMt2AZO0VoJWg4varBuBEfyHIgTrnoOSbiICx6pE2BMh4LC8TwaEGfho45Q99kPJUsvWASdY2omO3NFCEAf7f6pKYU2bidNVl20AARGCDRipRcQRDNqCR89tj1WJsEQIUJAIWNckubFdcBwRK1KOGkRHBaMVMF8T1UFgZ99abRBJlSwzJxP6BEGONti/axI4kZBoY7QkF6IyJF/vsWVsWmotnCJ60/P9ugXdRvAfihBsYSZKxmYEjlWJMLU1YQL72gTemXMFPj7v7482wlHh2J71zUf4eKXODhrjoT07YJ/lnzo6CLlS1QZLxxu9k4VzNmdtvzFhqpW3Zcshl9eAfiBDjhDkogvNk1MXbBIBEYJNmi0t9AgG7cxkk9U5ViXCXIQAq3uvRBQl4LbeMcGhY8XLhCD13gRe9aPyYYpEWNup1QZTpAcRjRwh8NETyOxJjd+aqE1etP5SbXORlmj1L0Iw+Vbs5sIR/IciBN1MVynCCByrEmENIUitxv02AEcC4MzYoUXbAdx3qpoiCIF33ozX1GqDcxACjw/kigo25Zx8dAdEhMB/V1OlsKaN7sC+ERAh6My+Ixi0M5NNVudYlQhzhADOsrbqIYf2I+eOlTxC7WjvHajfckDVPay0Iwd8SLXBKOwPsmO628cS9dgR85ZBVB3RrmG5WeZDtgxSURvIxuPizYkcbeGkxiknJSZPaF14cgRG8B+KEJx8mkmAJRA4ViXCuZIK4dx9FICjCEwAUklt/vqaa9jh+aRCJhdRtcFcnkSNLjVJhcDA5KxNKvROHITEzzX0nTpSyARCxw6XuFO306cIwXZsVSXpCAatAkKNhkMgd7oAYLQc6TsVgFuQ8VTYaNxlERjBfyhCsOwcUu8dIHCsIkcGVe4dBBGUNcV60IZX2ryC5u/9/np0tDFn0ihyEUUtrA8vT2msGl1TspX67mCaSoWFERAhWBjgY3c/gkGPjekI4x27yBGfm09tDQD3Q5wknHJEFDhqwFULS/bOyXuorKWxU78zoUslME7tW9eNg8AI/kMRgnHmszSdiMApixyxyLzS5qQ9fywvKsdr/aSKIrETTx15rC0iFK38U+TFR0OwX58qdoS+maxYbgC+Tzl76NdCbCZOFV3WMQIiBJ0ZdwSDdmayVahzrCJHpmwqcY1X19G//RFG/J1z8LyVUGqfSh4E0YhONnjj+QgB/kZEBLpjLK8Tj1W7BYCcA752FZNKQmwOgRH8hyIEm5uWEvjYCByryJHXCxEB/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 index a1b95028f..cee470d1a 100644 --- a/gtfs_digest/25_correct_crosswalk.ipynb +++ b/gtfs_digest/25_correct_crosswalk.ipynb @@ -5,52 +5,7 @@ "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", - " " + "## Correct Crosswalk" ] }, { diff --git a/gtfs_digest/25_route_names.ipynb b/gtfs_digest/25_route_names.ipynb new file mode 100644 index 000000000..8f46a4d71 --- /dev/null +++ b/gtfs_digest/25_route_names.ipynb @@ -0,0 +1,5430 @@ +{ + "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", + "from segment_speed_utils import time_series_utils\n", + "from shared_utils import portfolio_utils\n", + "from update_vars import GTFS_DATA_DICT, SCHED_GCS\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": null, + "id": "a3a0adca-b9ea-4238-9590-411d990386b4", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "from update_vars import GTFS_DATA_DICT, RT_SCHED_GCS, SCHED_GCS, SEGMENT_GCS\n", + "import google.auth\n", + "\n", + "credentials, project = google.auth.default()\n", + "\n", + "import gcsfs\n", + "from shared_utils import (\n", + " portfolio_utils,\n", + " publish_utils,\n", + ")\n", + "from calitp_data_analysis import geography_utils, utils" + ] + }, + { + "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(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": 3, + "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": "markdown", + "id": "135b761c-dcf4-4474-8e72-e5471fb79eb6", + "metadata": {}, + "source": [ + "## Find other routes with this issue\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": 4, + "id": "904e2d3f-8639-4186-9ab6-65a4b9a20795", + "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", + "
schedule_gtfs_dataset_keynameroute_idroute_long_nameroute_short_nameroute_descservice_datecombined_nameroute_id2recent_combined_namerecent_route_id2portfolio_organization_name
07e015887964432c82ce7e735c2753f86VCTC GMV Schedule3402Route 11Route 11PACIFIC VIEW MALL via TELEPHONE RD2023-03-15Route 11__Route 113402Route 11__Route 113402Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
17e015887964432c82ce7e735c2753f86VCTC GMV Schedule3407Route 18Route 18OHS TRIPPER - C ST - DORIS ST2023-03-15Route 18__Route 183407Route 18__Route 183407Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key name route_id \\\n", + "0 7e015887964432c82ce7e735c2753f86 VCTC GMV Schedule 3402 \n", + "1 7e015887964432c82ce7e735c2753f86 VCTC GMV Schedule 3407 \n", + "\n", + " route_long_name route_short_name route_desc \\\n", + "0 Route 11 Route 11 PACIFIC VIEW MALL via TELEPHONE RD \n", + "1 Route 18 Route 18 OHS TRIPPER - C ST - DORIS ST \n", + "\n", + " service_date combined_name route_id2 recent_combined_name \\\n", + "0 2023-03-15 Route 11__Route 11 3402 Route 11__Route 11 \n", + "1 2023-03-15 Route 18__Route 18 3407 Route 18__Route 18 \n", + "\n", + " recent_route_id2 \\\n", + "0 3402 \n", + "1 3407 \n", + "\n", + " portfolio_organization_name \n", + "0 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "1 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "f26663d7-1328-4f46-8c50-3614a2b2e83e", + "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", + "
service_daterecent_combined_nameportfolio_organization_nameroute_long_nameroute_short_name
1192892025-04-1681B__80-89 Coastal ExpressVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express81B
1192902025-04-1684U__80-89 Coastal ExpressVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express84U
1192912025-04-1685C__80-89 Coastal ExpressVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express85C
1196332025-04-16__Coastal ExpressCurry Public TransitCoastal Express
1213672025-05-14__Long CoastalCity of Laguna BeachLong Coastal
1213682025-05-14__Short CoastalCity of Laguna BeachShort Coastal
1213692025-05-14__Coastal TrolleyCity of Laguna BeachCoastal Trolley
1216862025-05-1480__80-89 Coastal ExpressVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express80
1216872025-05-1486__80-89 Coastal ExpressVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express86
1216932025-05-1485__80-89 Coastal ExpressVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express85
1216952025-05-1481__80-89 Coastal ExpressVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express81
1217102025-05-1484__80-89 Coastal ExpressVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express84
1217272025-05-1489__80-89 Coastal ExpressVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express89
1217282025-05-1485C__80-89 Coastal ExpressVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express85C
1217292025-05-1487__80-89 Coastal ExpressVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express87
1218182025-05-1480X__80-89 Coastal ExpressVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express80X
1218212025-05-1481B__80-89 Coastal ExpressVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express81B
1218222025-05-1484U__80-89 Coastal ExpressVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express84U
1218232025-05-1488__80-89 Coastal ExpressVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)80-89 Coastal Express88
1221792025-05-14__Coastal ExpressCurry Public TransitCoastal Express
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name \\\n", + "119289 2025-04-16 81B__80-89 Coastal Express \n", + "119290 2025-04-16 84U__80-89 Coastal Express \n", + "119291 2025-04-16 85C__80-89 Coastal Express \n", + "119633 2025-04-16 __Coastal Express \n", + "121367 2025-05-14 __Long Coastal \n", + "121368 2025-05-14 __Short Coastal \n", + "121369 2025-05-14 __Coastal Trolley \n", + "121686 2025-05-14 80__80-89 Coastal Express \n", + "121687 2025-05-14 86__80-89 Coastal Express \n", + "121693 2025-05-14 85__80-89 Coastal Express \n", + "121695 2025-05-14 81__80-89 Coastal Express \n", + "121710 2025-05-14 84__80-89 Coastal Express \n", + "121727 2025-05-14 89__80-89 Coastal Express \n", + "121728 2025-05-14 85C__80-89 Coastal Express \n", + "121729 2025-05-14 87__80-89 Coastal Express \n", + "121818 2025-05-14 80X__80-89 Coastal Express \n", + "121821 2025-05-14 81B__80-89 Coastal Express \n", + "121822 2025-05-14 84U__80-89 Coastal Express \n", + "121823 2025-05-14 88__80-89 Coastal Express \n", + "122179 2025-05-14 __Coastal Express \n", + "\n", + " portfolio_organization_name \\\n", + "119289 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "119290 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "119291 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "119633 Curry Public Transit \n", + "121367 City of Laguna Beach \n", + "121368 City of Laguna Beach \n", + "121369 City of Laguna Beach \n", + "121686 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "121687 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "121693 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "121695 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "121710 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "121727 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "121728 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "121729 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "121818 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "121821 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "121822 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "121823 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "122179 Curry Public Transit \n", + "\n", + " route_long_name route_short_name \n", + "119289 80-89 Coastal Express 81B \n", + "119290 80-89 Coastal Express 84U \n", + "119291 80-89 Coastal Express 85C \n", + "119633 Coastal Express \n", + "121367 Long Coastal \n", + "121368 Short Coastal \n", + "121369 Coastal Trolley \n", + "121686 80-89 Coastal Express 80 \n", + "121687 80-89 Coastal Express 86 \n", + "121693 80-89 Coastal Express 85 \n", + "121695 80-89 Coastal Express 81 \n", + "121710 80-89 Coastal Express 84 \n", + "121727 80-89 Coastal Express 89 \n", + "121728 80-89 Coastal Express 85C \n", + "121729 80-89 Coastal Express 87 \n", + "121818 80-89 Coastal Express 80X \n", + "121821 80-89 Coastal Express 81B \n", + "121822 80-89 Coastal Express 84U \n", + "121823 80-89 Coastal Express 88 \n", + "122179 Coastal Express " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[df.recent_combined_name.str.contains(\"Coastal\")][[\n", + " \"service_date\",\n", + " \"recent_combined_name\",\n", + " \"portfolio_organization_name\",\n", + " \"route_long_name\",\n", + " \"route_short_name\",\n", + " ]].tail(20)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b1aa3465-d2ca-41d0-a1e3-a2e2c423bf7b", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "m_route_ids_1_recent_combined_name = (\n", + " df.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": 7, + "id": "4154d02e-c688-4d38-91e8-2c939d020ab4", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "m_route_ids_1_recent_combined_name[\"same_name\"] = (\n", + " m_route_ids_1_recent_combined_name.route_long_name\n", + " == m_route_ids_1_recent_combined_name.route_short_name\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "da315f15-0bda-41bb-b50b-a460eecdeae4", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "m_route_ids_1_recent_combined_name2 = m_route_ids_1_recent_combined_name.loc[\n", + " (m_route_ids_1_recent_combined_name.route_id > 1)\n", + " & (m_route_ids_1_recent_combined_name.same_name == False)\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "9377e82b-024a-4223-a1e5-b1fd2ddeb1d4", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "341" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(m_route_ids_1_recent_combined_name2)" + ] + }, + { + "cell_type": "markdown", + "id": "6cff6733-945a-4742-bb9e-b8c715ac4c31", + "metadata": {}, + "source": [ + "### Amtrak doesn't have any `route_short_name` values." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "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", + " \"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": 11, + "id": "41bb081a-f4b1-4109-9f61-05a009858c07", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['', 'THRU', 'CMTR'], dtype=object)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m_route_ids_1_recent_combined_name2.loc[\n", + " m_route_ids_1_recent_combined_name2.portfolio_organization_name == \"Amtrak\"\n", + "].route_short_name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "91dc7c44-4dae-46df-ba66-b75bc2903615", + "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_daterecent_combined_nameportfolio_organization_nameroute_long_nameroute_short_nameroute_id
1211622025-05-14__Amtrak Thruway Connecting ServiceAmtrakAmtrak Thruway Connecting Service42933
1211592025-05-14__Amtrak Thruway Connecting ServiceAmtrakAmtrak Thruway Connecting Service42920
1211582025-05-14__Amtrak Thruway Connecting ServiceAmtrakAmtrak Thruway Connecting Service18650
1211522025-05-14__Amtrak Thruway Connecting ServiceAmtrakAmtrak Thruway Connecting Service43
1211552025-05-14__Amtrak Thruway Connecting ServiceAmtrakAmtrak Thruway Connecting Service42896
1211502025-05-14__Amtrak Thruway Connecting ServiceAmtrakAmtrak Thruway Connecting Service42891
1211482025-05-14__Amtrak Thruway Connecting ServiceAmtrakAmtrak Thruway Connecting Service42954
1211662025-05-14__Amtrak Thruway Connecting ServiceAmtrakAmtrak Thruway Connecting Service42958
1211572025-05-14__Amtrak Thruway Connecting ServiceAmtrakAmtrak Thruway Connecting Service42912
1211692025-05-14__Amtrak Thruway Connecting ServiceAmtrakAmtrak Thruway Connecting Service42935
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name \\\n", + "121162 2025-05-14 __Amtrak Thruway Connecting Service \n", + "121159 2025-05-14 __Amtrak Thruway Connecting Service \n", + "121158 2025-05-14 __Amtrak Thruway Connecting Service \n", + "121152 2025-05-14 __Amtrak Thruway Connecting Service \n", + "121155 2025-05-14 __Amtrak Thruway Connecting Service \n", + "121150 2025-05-14 __Amtrak Thruway Connecting Service \n", + "121148 2025-05-14 __Amtrak Thruway Connecting Service \n", + "121166 2025-05-14 __Amtrak Thruway Connecting Service \n", + "121157 2025-05-14 __Amtrak Thruway Connecting Service \n", + "121169 2025-05-14 __Amtrak Thruway Connecting Service \n", + "\n", + " portfolio_organization_name route_long_name \\\n", + "121162 Amtrak Amtrak Thruway Connecting Service \n", + "121159 Amtrak Amtrak Thruway Connecting Service \n", + "121158 Amtrak Amtrak Thruway Connecting Service \n", + "121152 Amtrak Amtrak Thruway Connecting Service \n", + "121155 Amtrak Amtrak Thruway Connecting Service \n", + "121150 Amtrak Amtrak Thruway Connecting Service \n", + "121148 Amtrak Amtrak Thruway Connecting Service \n", + "121166 Amtrak Amtrak Thruway Connecting Service \n", + "121157 Amtrak Amtrak Thruway Connecting Service \n", + "121169 Amtrak Amtrak Thruway Connecting Service \n", + "\n", + " route_short_name route_id \n", + "121162 42933 \n", + "121159 42920 \n", + "121158 18650 \n", + "121152 43 \n", + "121155 42896 \n", + "121150 42891 \n", + "121148 42954 \n", + "121166 42958 \n", + "121157 42912 \n", + "121169 42935 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "inspect_recent_rows(df, \"Amtrak Thruway Connecting Service\")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "abcc4bd1-f387-4d0b-84f6-ada0609b18e2", + "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_daterecent_combined_nameportfolio_organization_nameroute_long_nameroute_short_nameroute_id
1105072025-01-15__Commuter RailAmtrakCommuter Rail42948
1105112025-01-15__Commuter RailAmtrakCommuter Rail42985
1133382025-02-12__Commuter RailAmtrakCommuter Rail42948
1133412025-02-12__Commuter RailAmtrakCommuter Rail42985
1159522025-03-12__Commuter RailAmtrakCommuter Rail42985
1159602025-03-12__Commuter RailAmtrakCommuter Rail42948
1186012025-04-16__Commuter RailAmtrakCommuter Rail42985
1186032025-04-16__Commuter RailAmtrakCommuter Rail42948
1211492025-05-14__Commuter RailAmtrakCommuter Rail42985
1211512025-05-14__Commuter RailAmtrakCommuter Rail42948
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name portfolio_organization_name \\\n", + "110507 2025-01-15 __Commuter Rail Amtrak \n", + "110511 2025-01-15 __Commuter Rail Amtrak \n", + "113338 2025-02-12 __Commuter Rail Amtrak \n", + "113341 2025-02-12 __Commuter Rail Amtrak \n", + "115952 2025-03-12 __Commuter Rail Amtrak \n", + "115960 2025-03-12 __Commuter Rail Amtrak \n", + "118601 2025-04-16 __Commuter Rail Amtrak \n", + "118603 2025-04-16 __Commuter Rail Amtrak \n", + "121149 2025-05-14 __Commuter Rail Amtrak \n", + "121151 2025-05-14 __Commuter Rail Amtrak \n", + "\n", + " route_long_name route_short_name route_id \n", + "110507 Commuter Rail 42948 \n", + "110511 Commuter Rail 42985 \n", + "113338 Commuter Rail 42948 \n", + "113341 Commuter Rail 42985 \n", + "115952 Commuter Rail 42985 \n", + "115960 Commuter Rail 42948 \n", + "118601 Commuter Rail 42985 \n", + "118603 Commuter Rail 42948 \n", + "121149 Commuter Rail 42985 \n", + "121151 Commuter Rail 42948 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "inspect_recent_rows(df, \"Commuter Rail\")" + ] + }, + { + "cell_type": "markdown", + "id": "cb2586c8-da81-40c7-8f53-4a56c7ffaea4", + "metadata": {}, + "source": [ + "### Check routes that aren't run by Amtrak" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "7ddca2ae-cc8b-4930-b471-e44037916518", + "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', 'City of Santa Monica'], dtype=object)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m_route_ids_1_recent_combined_name2.portfolio_organization_name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "92d273c2-fe53-405f-a4f6-6a17f72c4e5a", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['CE438B', 'Amtrak Thruway Connecting Service', 'Commuter Rail', '',\n", + " 'Transbay-Caltrain', 'Blue Route', 'Gold Route', 'Red Route',\n", + " 'Green Route', 'Wellness Express', 'Silver Route',\n", + " 'Laguna Tripper', 'Maple Leaf', 'FlyAway - LAX to Union Station',\n", + " 'FlyAway - LAX to Van Nuys', 'FlyAway - Union Station to LAX',\n", + " 'FlyAway - Van Nuys to LAX', 'UCLA - Marina del Rey',\n", + " '26th Street', 'Pacific Palisades', 'Downtown LA Freeway Express'],\n", + " dtype=object)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m_route_ids_1_recent_combined_name2.route_long_name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "dc8d6b35-6dac-4fdf-9535-fb225d777ec0", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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_idsame_name
1153992025-05-1418__UCLA - Marina del ReyCity of Santa MonicaUCLA - Marina del Rey182False
1154372025-05-141__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
1157632025-05-142__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
1159742025-05-143__Red RoutePalo Verde Valley Transit AgencyRed Route32False
1160412025-05-14438B__CE438BCity of Los AngelesCE438B438B2False
1160452025-05-1443__26th StreetCity of Santa Monica26th Street432False
1161402025-05-144__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
1164982025-05-146__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
1168042025-05-149__Pacific PalisadesCity of Santa MonicaPacific Palisades92False
1170342025-05-14LAX to US__FlyAway - LAX to Union StationLos Angeles World AirportsFlyAway - LAX to Union StationLAX to US2False
1170352025-05-14LAX to VN__FlyAway - LAX to Van NuysLos Angeles World AirportsFlyAway - LAX to Van NuysLAX to VN2False
1170422025-05-14LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False
1171342025-05-14R10__Downtown LA Freeway ExpressCity of Santa MonicaDowntown LA Freeway ExpressR102False
1172792025-05-14US to LAX__FlyAway - Union Station to LAXLos Angeles World AirportsFlyAway - Union Station to LAXUS to LAX2False
1172852025-05-14VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsFlyAway - Van Nuys to LAXVN to LAX2False
1127772025-04-1618__UCLA - Marina del ReyCity of Santa MonicaUCLA - Marina del Rey182False
1128142025-04-161__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
1131472025-04-162__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
1133592025-04-163__Red RoutePalo Verde Valley Transit AgencyRed Route32False
1134292025-04-16438B__CE438BCity of Los AngelesCE438B438B2False
1134332025-04-1643__26th StreetCity of Santa Monica26th Street432False
1135272025-04-164__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
1138872025-04-166__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
1141882025-04-169__Pacific PalisadesCity of Santa MonicaPacific Palisades92False
1146252025-04-16LAX to US__FlyAway - LAX to Union StationLos Angeles World AirportsFlyAway - LAX to Union StationLAX to US2False
1146262025-04-16LAX to VN__FlyAway - LAX to Van NuysLos Angeles World AirportsFlyAway - LAX to Van NuysLAX to VN2False
1146332025-04-16LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False
1147212025-04-16R10__Downtown LA Freeway ExpressCity of Santa MonicaDowntown LA Freeway ExpressR102False
1148602025-04-16US to LAX__FlyAway - Union Station to LAXLos Angeles World AirportsFlyAway - Union Station to LAXUS to LAX2False
1148662025-04-16VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsFlyAway - Van Nuys to LAXVN to LAX2False
1102492025-03-1218__UCLA - Marina del ReyCity of Santa MonicaUCLA - Marina del Rey182False
1102812025-03-121__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
1107992025-03-123__Red RoutePalo Verde Valley Transit AgencyRed Route32False
1108702025-03-12438B__CE438BCity of Los AngelesCE438B438B2False
1108742025-03-1243__26th StreetCity of Santa Monica26th Street432False
1109572025-03-124__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
1113092025-03-126__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
1116002025-03-129__Pacific PalisadesCity of Santa MonicaPacific Palisades92False
1120172025-03-12LAX to US__FlyAway - LAX to Union StationLos Angeles World AirportsFlyAway - LAX to Union StationLAX to US2False
1120182025-03-12LAX to VN__FlyAway - LAX to Van NuysLos Angeles World AirportsFlyAway - LAX to Van NuysLAX to VN2False
1120242025-03-12LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False
1121052025-03-12R10__Downtown LA Freeway ExpressCity of Santa MonicaDowntown LA Freeway ExpressR102False
1122332025-03-12US to LAX__FlyAway - Union Station to LAXLos Angeles World AirportsFlyAway - Union Station to LAXUS to LAX2False
1122392025-03-12VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsFlyAway - Van Nuys to LAXVN to LAX2False
1077152025-02-121__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
1080502025-02-122__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
1082642025-02-123__Red RoutePalo Verde Valley Transit AgencyRed Route32False
1083332025-02-12438B__CE438BCity of Los AngelesCE438B438B2False
1084362025-02-124__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
1087992025-02-126__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
1095022025-02-12LAX to US__FlyAway - LAX to Union StationLos Angeles World AirportsFlyAway - LAX to Union StationLAX to US2False
1095032025-02-12LAX to VN__FlyAway - LAX to Van NuysLos Angeles World AirportsFlyAway - LAX to Van NuysLAX to VN2False
1095092025-02-12LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False
1097212025-02-12US to LAX__FlyAway - Union Station to LAXLos Angeles World AirportsFlyAway - Union Station to LAXUS to LAX2False
1097272025-02-12VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsFlyAway - Van Nuys to LAXVN to LAX2False
1051492025-01-151__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
1054822025-01-152__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
1056922025-01-153__Red RoutePalo Verde Valley Transit AgencyRed Route32False
1057622025-01-15438B__CE438BCity of Los AngelesCE438B438B2False
1058642025-01-154__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
1062202025-01-156__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
1069212025-01-15LAX to US__FlyAway - LAX to Union StationLos Angeles World AirportsFlyAway - LAX to Union StationLAX to US2False
1069222025-01-15LAX to VN__FlyAway - LAX to Van NuysLos Angeles World AirportsFlyAway - LAX to Van NuysLAX to VN2False
1069302025-01-15LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False
1071432025-01-15US to LAX__FlyAway - Union Station to LAXLos Angeles World AirportsFlyAway - Union Station to LAXUS to LAX2False
1071492025-01-15VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsFlyAway - Van Nuys to LAXVN to LAX2False
1025322024-12-111__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
1028692024-12-112__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
1030772024-12-113__Red RoutePalo Verde Valley Transit AgencyRed Route32False
1031462024-12-11438B__CE438BCity of Los AngelesCE438B438B2False
1032512024-12-114__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
1036152024-12-116__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
1043182024-12-11LAX to US__FlyAway - LAX to Union StationLos Angeles World AirportsFlyAway - LAX to Union StationLAX to US2False
1043192024-12-11LAX to VN__FlyAway - LAX to Van NuysLos Angeles World AirportsFlyAway - LAX to Van NuysLAX to VN2False
1043262024-12-11LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False
1045442024-12-11US to LAX__FlyAway - Union Station to LAXLos Angeles World AirportsFlyAway - Union Station to LAXUS to LAX2False
1045502024-12-11VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsFlyAway - Van Nuys to LAXVN to LAX2False
998942024-11-131__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
1002322024-11-132__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
1004382024-11-133__Red RoutePalo Verde Valley Transit AgencyRed Route32False
1005072024-11-13438B__CE438BCity of Los AngelesCE438B438B2False
1006112024-11-134__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
1009752024-11-136__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
1016922024-11-13LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False
971992024-10-195__Silver RoutePalo Verde Valley Transit AgencySilver Route52False
941572024-10-181__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
944942024-10-182__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
946942024-10-183__Red RoutePalo Verde Valley Transit AgencyRed Route32False
947632024-10-18438B__CE438BCity of Los AngelesCE438B438B2False
948642024-10-184__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
952252024-10-186__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
959602024-10-18LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False
915742024-10-171__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
919082024-10-172__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
921082024-10-173__Red RoutePalo Verde Valley Transit AgencyRed Route32False
921772024-10-17438B__CE438BCity of Los AngelesCE438B438B2False
922782024-10-174__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
933702024-10-17LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False
890002024-10-161__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
893372024-10-162__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
895372024-10-163__Red RoutePalo Verde Valley Transit AgencyRed Route32False
896062024-10-16438B__CE438BCity of Los AngelesCE438B438B2False
897082024-10-164__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
900692024-10-166__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
907852024-10-16LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False
864262024-10-151__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
867612024-10-152__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
869642024-10-153__Red RoutePalo Verde Valley Transit AgencyRed Route32False
870332024-10-15438B__CE438BCity of Los AngelesCE438B438B2False
871362024-10-154__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
882202024-10-15LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False
839262024-10-141__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
842602024-10-142__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
844552024-10-143__Red RoutePalo Verde Valley Transit AgencyRed Route32False
845232024-10-14438B__CE438BCity of Los AngelesCE438B438B2False
846262024-10-144__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
849432024-10-146__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
856682024-10-14LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False
813932024-09-181__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
817062024-09-182__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
819042024-09-183__Red RoutePalo Verde Valley Transit AgencyRed Route32False
819712024-09-18438B__CE438BCity of Los AngelesCE438B438B2False
820722024-09-184__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
824312024-09-186__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
789712024-08-141__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
792562024-08-142__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
794532024-08-143__Red RoutePalo Verde Valley Transit AgencyRed Route32False
795202024-08-14438B__CE438BCity of Los AngelesCE438B438B2False
796182024-08-144__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
799522024-08-146__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
767452024-07-171__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
770142024-07-172__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
772022024-07-173__Red RoutePalo Verde Valley Transit AgencyRed Route32False
772632024-07-17438B__CE438BCity of Los AngelesCE438B438B2False
773562024-07-174__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
776062024-07-176__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
747282024-06-121__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
749542024-06-122__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
751152024-06-123__Red RoutePalo Verde Valley Transit AgencyRed Route32False
751722024-06-12438B__CE438BCity of Los AngelesCE438B438B2False
752562024-06-124__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
754492024-06-126__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
729422024-05-22438B__CE438BCity of Los AngelesCE438B438B2False
699372024-04-205__Silver RoutePalo Verde Valley Transit AgencySilver Route52False
671622024-04-191__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
674572024-04-192__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
676482024-04-193__Red RoutePalo Verde Valley Transit AgencyRed Route32False
677132024-04-19438B__CE438BCity of Los AngelesCE438B438B2False
677912024-04-194__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
680952024-04-196__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
646642024-04-181__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
649692024-04-182__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
651662024-04-183__Red RoutePalo Verde Valley Transit AgencyRed Route32False
652332024-04-18438B__CE438BCity of Los AngelesCE438B438B2False
653132024-04-184__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
621702024-04-171__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
624902024-04-172__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
626842024-04-173__Red RoutePalo Verde Valley Transit AgencyRed Route32False
627512024-04-17438B__CE438BCity of Los AngelesCE438B438B2False
628402024-04-174__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
632012024-04-176__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
596212024-04-161__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
599472024-04-162__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
601502024-04-163__Red RoutePalo Verde Valley Transit AgencyRed Route32False
602192024-04-16438B__CE438BCity of Los AngelesCE438B438B2False
603122024-04-164__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
570562024-04-151__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
573852024-04-152__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
575882024-04-153__Red RoutePalo Verde Valley Transit AgencyRed Route32False
576572024-04-15438B__CE438BCity of Los AngelesCE438B438B2False
577502024-04-154__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
581122024-04-156__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
545762024-03-131__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
548842024-03-132__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
550802024-03-133__Red RoutePalo Verde Valley Transit AgencyRed Route32False
551502024-03-13438B__CE438BCity of Los AngelesCE438B438B2False
552422024-03-134__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
555992024-03-136__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
520652024-02-141__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
523892024-02-142__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
525902024-02-143__Red RoutePalo Verde Valley Transit AgencyRed Route32False
526592024-02-14438B__CE438BCity of Los AngelesCE438B438B2False
527512024-02-144__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
531192024-02-146__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
496132024-01-171__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
499142024-01-172__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
501082024-01-173__Red RoutePalo Verde Valley Transit AgencyRed Route32False
501722024-01-17438B__CE438BCity of Los AngelesCE438B438B2False
502522024-01-174__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
506112024-01-176__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
470932023-12-131__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
474162023-12-132__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
476202023-12-133__Red RoutePalo Verde Valley Transit AgencyRed Route32False
476882023-12-13438B__CE438BCity of Los AngelesCE438B438B2False
477822023-12-134__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
481532023-12-136__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
445352023-11-151__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
448332023-11-152__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
450362023-11-153__Red RoutePalo Verde Valley Transit AgencyRed Route32False
451042023-11-15438B__CE438BCity of Los AngelesCE438B438B2False
451982023-11-154__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
455662023-11-156__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
459562023-11-15CCA/Adobe__Mission Bay Transportation Management AgencyCCA/Adobe2False
459972023-11-15East__Mission Bay Transportation Management AgencyEast2False
464542023-11-15TC__Transbay-CaltrainMission Bay Transportation Management AgencyTransbay-CaltrainTC2False
464852023-11-15West__Mission Bay Transportation Management AgencyWest2False
418922023-10-145__Silver RoutePalo Verde Valley Transit AgencySilver Route52False
389052023-10-131__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
392162023-10-132__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
394072023-10-133__Red RoutePalo Verde Valley Transit AgencyRed Route32False
394762023-10-13438B__CE438BCity of Los AngelesCE438B438B2False
395642023-10-134__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
399152023-10-136__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
402972023-10-13CCA/Adobe__Mission Bay Transportation Management AgencyCCA/Adobe2False
403382023-10-13East__Mission Bay Transportation Management AgencyEast2False
407942023-10-13TC__Transbay-CaltrainMission Bay Transportation Management AgencyTransbay-CaltrainTC2False
408242023-10-13West__Mission Bay Transportation Management AgencyWest2False
363802023-10-121__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
366872023-10-122__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
368782023-10-123__Red RoutePalo Verde Valley Transit AgencyRed Route32False
369462023-10-12438B__CE438BCity of Los AngelesCE438B438B2False
370342023-10-124__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
377732023-10-12CCA/Adobe__Mission Bay Transportation Management AgencyCCA/Adobe2False
378142023-10-12East__Mission Bay Transportation Management AgencyEast2False
382642023-10-12TC__Transbay-CaltrainMission Bay Transportation Management AgencyTransbay-CaltrainTC2False
382952023-10-12West__Mission Bay Transportation Management AgencyWest2False
338062023-10-111__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
341262023-10-112__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
343252023-10-113__Red RoutePalo Verde Valley Transit AgencyRed Route32False
343932023-10-11438B__CE438BCity of Los AngelesCE438B438B2False
344862023-10-114__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
348502023-10-116__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
352422023-10-11CCA/Adobe__Mission Bay Transportation Management AgencyCCA/Adobe2False
352832023-10-11East__Mission Bay Transportation Management AgencyEast2False
357372023-10-11TC__Transbay-CaltrainMission Bay Transportation Management AgencyTransbay-CaltrainTC2False
357692023-10-11West__Mission Bay Transportation Management AgencyWest2False
312222023-10-101__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
315392023-10-102__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
317392023-10-103__Red RoutePalo Verde Valley Transit AgencyRed Route32False
318072023-10-10438B__CE438BCity of Los AngelesCE438B438B2False
319012023-10-104__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
326582023-10-10CCA/Adobe__Mission Bay Transportation Management AgencyCCA/Adobe2False
326992023-10-10East__Mission Bay Transportation Management AgencyEast2False
331592023-10-10TC__Transbay-CaltrainMission Bay Transportation Management AgencyTransbay-CaltrainTC2False
331902023-10-10West__Mission Bay Transportation Management AgencyWest2False
287392023-10-091__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
290542023-10-092__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
292442023-10-093__Red RoutePalo Verde Valley Transit AgencyRed Route32False
293122023-10-09438B__CE438BCity of Los AngelesCE438B438B2False
294032023-10-094__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
297232023-10-096__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
301082023-10-09CCA/Adobe__Mission Bay Transportation Management AgencyCCA/Adobe2False
301482023-10-09East__Mission Bay Transportation Management AgencyEast2False
306042023-10-09TC__Transbay-CaltrainMission Bay Transportation Management AgencyTransbay-CaltrainTC2False
306352023-10-09West__Mission Bay Transportation Management AgencyWest2False
262122023-09-131__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
265262023-09-132__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
267202023-09-133__Red RoutePalo Verde Valley Transit AgencyRed Route32False
267892023-09-13438B__CE438BCity of Los AngelesCE438B438B2False
268792023-09-134__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
272392023-09-136__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
276222023-09-13CCA/Adobe__Mission Bay Transportation Management AgencyCCA/Adobe2False
276592023-09-13East__Mission Bay Transportation Management AgencyEast2False
280962023-09-13TC__Transbay-CaltrainMission Bay Transportation Management AgencyTransbay-CaltrainTC2False
281262023-09-13West__Mission Bay Transportation Management AgencyWest2False
242722023-08-15438B__CE438BCity of Los AngelesCE438B438B2False
251052023-08-15CCA/Adobe__Mission Bay Transportation Management AgencyCCA/Adobe2False
251402023-08-15East__Mission Bay Transportation Management AgencyEast2False
255842023-08-15TC__Transbay-CaltrainMission Bay Transportation Management AgencyTransbay-CaltrainTC2False
256152023-08-15West__Mission Bay Transportation Management AgencyWest2False
218932023-07-12438B__CE438BCity of Los AngelesCE438B438B2False
195132023-06-14438B__CE438BCity of Los AngelesCE438B438B2False
172602023-05-17438B__CE438BCity of Los AngelesCE438B438B2False
124422023-04-14438B__CE438BCity of Los AngelesCE438B438B2False
101112023-04-13438B__CE438BCity of Los AngelesCE438B438B2False
77902023-04-12438B__CE438BCity of Los AngelesCE438B438B2False
54692023-04-11438B__CE438BCity of Los AngelesCE438B438B2False
31572023-04-10438B__CE438BCity of Los AngelesCE438B438B2False
8452023-03-15438B__CE438BCity of Los AngelesCE438B438B2False
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name \\\n", + "115399 2025-05-14 18__UCLA - Marina del Rey \n", + "115437 2025-05-14 1__Blue Route \n", + "115763 2025-05-14 2__Gold Route \n", + "115974 2025-05-14 3__Red Route \n", + "116041 2025-05-14 438B__CE438B \n", + "116045 2025-05-14 43__26th Street \n", + "116140 2025-05-14 4__Green Route \n", + "116498 2025-05-14 6__Wellness Express \n", + "116804 2025-05-14 9__Pacific Palisades \n", + "117034 2025-05-14 LAX to US__FlyAway - LAX to Union Station \n", + "117035 2025-05-14 LAX to VN__FlyAway - LAX to Van Nuys \n", + "117042 2025-05-14 LT__Laguna Tripper \n", + "117134 2025-05-14 R10__Downtown LA Freeway Express \n", + "117279 2025-05-14 US to LAX__FlyAway - Union Station to LAX \n", + "117285 2025-05-14 VN to LAX__FlyAway - Van Nuys to LAX \n", + "112777 2025-04-16 18__UCLA - Marina del Rey \n", + "112814 2025-04-16 1__Blue Route \n", + "113147 2025-04-16 2__Gold Route \n", + "113359 2025-04-16 3__Red Route \n", + "113429 2025-04-16 438B__CE438B \n", + "113433 2025-04-16 43__26th Street \n", + "113527 2025-04-16 4__Green Route \n", + "113887 2025-04-16 6__Wellness Express \n", + "114188 2025-04-16 9__Pacific Palisades \n", + "114625 2025-04-16 LAX to US__FlyAway - LAX to Union Station \n", + "114626 2025-04-16 LAX to VN__FlyAway - LAX to Van Nuys \n", + "114633 2025-04-16 LT__Laguna Tripper \n", + "114721 2025-04-16 R10__Downtown LA Freeway Express \n", + "114860 2025-04-16 US to LAX__FlyAway - Union Station to LAX \n", + "114866 2025-04-16 VN to LAX__FlyAway - Van Nuys to LAX \n", + "110249 2025-03-12 18__UCLA - Marina del Rey \n", + "110281 2025-03-12 1__Blue Route \n", + "110799 2025-03-12 3__Red Route \n", + "110870 2025-03-12 438B__CE438B \n", + "110874 2025-03-12 43__26th Street \n", + "110957 2025-03-12 4__Green Route \n", + "111309 2025-03-12 6__Wellness Express \n", + "111600 2025-03-12 9__Pacific Palisades \n", + "112017 2025-03-12 LAX to US__FlyAway - LAX to Union Station \n", + "112018 2025-03-12 LAX to VN__FlyAway - LAX to Van Nuys \n", + "112024 2025-03-12 LT__Laguna Tripper \n", + "112105 2025-03-12 R10__Downtown LA Freeway Express \n", + "112233 2025-03-12 US to LAX__FlyAway - Union Station to LAX \n", + "112239 2025-03-12 VN to LAX__FlyAway - Van Nuys to LAX \n", + "107715 2025-02-12 1__Blue Route \n", + "108050 2025-02-12 2__Gold Route \n", + "108264 2025-02-12 3__Red Route \n", + "108333 2025-02-12 438B__CE438B \n", + "108436 2025-02-12 4__Green Route \n", + "108799 2025-02-12 6__Wellness Express \n", + "109502 2025-02-12 LAX to US__FlyAway - LAX to Union Station \n", + "109503 2025-02-12 LAX to VN__FlyAway - LAX to Van Nuys \n", + "109509 2025-02-12 LT__Laguna Tripper \n", + "109721 2025-02-12 US to LAX__FlyAway - Union Station to LAX \n", + "109727 2025-02-12 VN to LAX__FlyAway - Van Nuys to LAX \n", + "105149 2025-01-15 1__Blue Route \n", + "105482 2025-01-15 2__Gold Route \n", + "105692 2025-01-15 3__Red Route \n", + "105762 2025-01-15 438B__CE438B \n", + "105864 2025-01-15 4__Green Route \n", + "106220 2025-01-15 6__Wellness Express \n", + "106921 2025-01-15 LAX to US__FlyAway - LAX to Union Station \n", + "106922 2025-01-15 LAX to VN__FlyAway - LAX to Van Nuys \n", + "106930 2025-01-15 LT__Laguna Tripper \n", + "107143 2025-01-15 US to LAX__FlyAway - Union Station to LAX \n", + "107149 2025-01-15 VN to LAX__FlyAway - Van Nuys to LAX \n", + "102532 2024-12-11 1__Blue Route \n", + "102869 2024-12-11 2__Gold Route \n", + "103077 2024-12-11 3__Red Route \n", + "103146 2024-12-11 438B__CE438B \n", + "103251 2024-12-11 4__Green Route \n", + "103615 2024-12-11 6__Wellness Express \n", + "104318 2024-12-11 LAX to US__FlyAway - LAX to Union Station \n", + "104319 2024-12-11 LAX to VN__FlyAway - LAX to Van Nuys \n", + "104326 2024-12-11 LT__Laguna Tripper \n", + "104544 2024-12-11 US to LAX__FlyAway - Union Station to LAX \n", + "104550 2024-12-11 VN to LAX__FlyAway - Van Nuys to LAX \n", + "99894 2024-11-13 1__Blue Route \n", + "100232 2024-11-13 2__Gold Route \n", + "100438 2024-11-13 3__Red Route \n", + "100507 2024-11-13 438B__CE438B \n", + "100611 2024-11-13 4__Green Route \n", + "100975 2024-11-13 6__Wellness Express \n", + "101692 2024-11-13 LT__Laguna Tripper \n", + "97199 2024-10-19 5__Silver Route \n", + "94157 2024-10-18 1__Blue Route \n", + "94494 2024-10-18 2__Gold Route \n", + "94694 2024-10-18 3__Red Route \n", + "94763 2024-10-18 438B__CE438B \n", + "94864 2024-10-18 4__Green Route \n", + "95225 2024-10-18 6__Wellness Express \n", + "95960 2024-10-18 LT__Laguna Tripper \n", + "91574 2024-10-17 1__Blue Route \n", + "91908 2024-10-17 2__Gold Route \n", + "92108 2024-10-17 3__Red Route \n", + "92177 2024-10-17 438B__CE438B \n", + "92278 2024-10-17 4__Green Route \n", + "93370 2024-10-17 LT__Laguna Tripper \n", + "89000 2024-10-16 1__Blue Route \n", + "89337 2024-10-16 2__Gold Route \n", + "89537 2024-10-16 3__Red Route \n", + "89606 2024-10-16 438B__CE438B \n", + "89708 2024-10-16 4__Green Route \n", + "90069 2024-10-16 6__Wellness Express \n", + "90785 2024-10-16 LT__Laguna Tripper \n", + "86426 2024-10-15 1__Blue Route \n", + "86761 2024-10-15 2__Gold Route \n", + "86964 2024-10-15 3__Red Route \n", + "87033 2024-10-15 438B__CE438B \n", + "87136 2024-10-15 4__Green Route \n", + "88220 2024-10-15 LT__Laguna Tripper \n", + "83926 2024-10-14 1__Blue Route \n", + "84260 2024-10-14 2__Gold Route \n", + "84455 2024-10-14 3__Red Route \n", + "84523 2024-10-14 438B__CE438B \n", + "84626 2024-10-14 4__Green Route \n", + "84943 2024-10-14 6__Wellness Express \n", + "85668 2024-10-14 LT__Laguna Tripper \n", + "81393 2024-09-18 1__Blue Route \n", + "81706 2024-09-18 2__Gold Route \n", + "81904 2024-09-18 3__Red Route \n", + "81971 2024-09-18 438B__CE438B \n", + "82072 2024-09-18 4__Green Route \n", + "82431 2024-09-18 6__Wellness Express \n", + "78971 2024-08-14 1__Blue Route \n", + "79256 2024-08-14 2__Gold Route \n", + "79453 2024-08-14 3__Red Route \n", + "79520 2024-08-14 438B__CE438B \n", + "79618 2024-08-14 4__Green Route \n", + "79952 2024-08-14 6__Wellness Express \n", + "76745 2024-07-17 1__Blue Route \n", + "77014 2024-07-17 2__Gold Route \n", + "77202 2024-07-17 3__Red Route \n", + "77263 2024-07-17 438B__CE438B \n", + "77356 2024-07-17 4__Green Route \n", + "77606 2024-07-17 6__Wellness Express \n", + "74728 2024-06-12 1__Blue Route \n", + "74954 2024-06-12 2__Gold Route \n", + "75115 2024-06-12 3__Red Route \n", + "75172 2024-06-12 438B__CE438B \n", + "75256 2024-06-12 4__Green Route \n", + "75449 2024-06-12 6__Wellness Express \n", + "72942 2024-05-22 438B__CE438B \n", + "69937 2024-04-20 5__Silver Route \n", + "67162 2024-04-19 1__Blue Route \n", + "67457 2024-04-19 2__Gold Route \n", + "67648 2024-04-19 3__Red Route \n", + "67713 2024-04-19 438B__CE438B \n", + "67791 2024-04-19 4__Green Route \n", + "68095 2024-04-19 6__Wellness Express \n", + "64664 2024-04-18 1__Blue Route \n", + "64969 2024-04-18 2__Gold Route \n", + "65166 2024-04-18 3__Red Route \n", + "65233 2024-04-18 438B__CE438B \n", + "65313 2024-04-18 4__Green Route \n", + "62170 2024-04-17 1__Blue Route \n", + "62490 2024-04-17 2__Gold Route \n", + "62684 2024-04-17 3__Red Route \n", + "62751 2024-04-17 438B__CE438B \n", + "62840 2024-04-17 4__Green Route \n", + "63201 2024-04-17 6__Wellness Express \n", + "59621 2024-04-16 1__Blue Route \n", + "59947 2024-04-16 2__Gold Route \n", + "60150 2024-04-16 3__Red Route \n", + "60219 2024-04-16 438B__CE438B \n", + "60312 2024-04-16 4__Green Route \n", + "57056 2024-04-15 1__Blue Route \n", + "57385 2024-04-15 2__Gold Route \n", + "57588 2024-04-15 3__Red Route \n", + "57657 2024-04-15 438B__CE438B \n", + "57750 2024-04-15 4__Green Route \n", + "58112 2024-04-15 6__Wellness Express \n", + "54576 2024-03-13 1__Blue Route \n", + "54884 2024-03-13 2__Gold Route \n", + "55080 2024-03-13 3__Red Route \n", + "55150 2024-03-13 438B__CE438B \n", + "55242 2024-03-13 4__Green Route \n", + "55599 2024-03-13 6__Wellness Express \n", + "52065 2024-02-14 1__Blue Route \n", + "52389 2024-02-14 2__Gold Route \n", + "52590 2024-02-14 3__Red Route \n", + "52659 2024-02-14 438B__CE438B \n", + "52751 2024-02-14 4__Green Route \n", + "53119 2024-02-14 6__Wellness Express \n", + "49613 2024-01-17 1__Blue Route \n", + "49914 2024-01-17 2__Gold Route \n", + "50108 2024-01-17 3__Red Route \n", + "50172 2024-01-17 438B__CE438B \n", + "50252 2024-01-17 4__Green Route \n", + "50611 2024-01-17 6__Wellness Express \n", + "47093 2023-12-13 1__Blue Route \n", + "47416 2023-12-13 2__Gold Route \n", + "47620 2023-12-13 3__Red Route \n", + "47688 2023-12-13 438B__CE438B \n", + "47782 2023-12-13 4__Green Route \n", + "48153 2023-12-13 6__Wellness Express \n", + "44535 2023-11-15 1__Blue Route \n", + "44833 2023-11-15 2__Gold Route \n", + "45036 2023-11-15 3__Red Route \n", + "45104 2023-11-15 438B__CE438B \n", + "45198 2023-11-15 4__Green Route \n", + "45566 2023-11-15 6__Wellness Express \n", + "45956 2023-11-15 CCA/Adobe__ \n", + "45997 2023-11-15 East__ \n", + "46454 2023-11-15 TC__Transbay-Caltrain \n", + "46485 2023-11-15 West__ \n", + "41892 2023-10-14 5__Silver Route \n", + "38905 2023-10-13 1__Blue Route \n", + "39216 2023-10-13 2__Gold Route \n", + "39407 2023-10-13 3__Red Route \n", + "39476 2023-10-13 438B__CE438B \n", + "39564 2023-10-13 4__Green Route \n", + "39915 2023-10-13 6__Wellness Express \n", + "40297 2023-10-13 CCA/Adobe__ \n", + "40338 2023-10-13 East__ \n", + "40794 2023-10-13 TC__Transbay-Caltrain \n", + "40824 2023-10-13 West__ \n", + "36380 2023-10-12 1__Blue Route \n", + "36687 2023-10-12 2__Gold Route \n", + "36878 2023-10-12 3__Red Route \n", + "36946 2023-10-12 438B__CE438B \n", + "37034 2023-10-12 4__Green Route \n", + "37773 2023-10-12 CCA/Adobe__ \n", + "37814 2023-10-12 East__ \n", + "38264 2023-10-12 TC__Transbay-Caltrain \n", + "38295 2023-10-12 West__ \n", + "33806 2023-10-11 1__Blue Route \n", + "34126 2023-10-11 2__Gold Route \n", + "34325 2023-10-11 3__Red Route \n", + "34393 2023-10-11 438B__CE438B \n", + "34486 2023-10-11 4__Green Route \n", + "34850 2023-10-11 6__Wellness Express \n", + "35242 2023-10-11 CCA/Adobe__ \n", + "35283 2023-10-11 East__ \n", + "35737 2023-10-11 TC__Transbay-Caltrain \n", + "35769 2023-10-11 West__ \n", + "31222 2023-10-10 1__Blue Route \n", + "31539 2023-10-10 2__Gold Route \n", + "31739 2023-10-10 3__Red Route \n", + "31807 2023-10-10 438B__CE438B \n", + "31901 2023-10-10 4__Green Route \n", + "32658 2023-10-10 CCA/Adobe__ \n", + "32699 2023-10-10 East__ \n", + "33159 2023-10-10 TC__Transbay-Caltrain \n", + "33190 2023-10-10 West__ \n", + "28739 2023-10-09 1__Blue Route \n", + "29054 2023-10-09 2__Gold Route \n", + "29244 2023-10-09 3__Red Route \n", + "29312 2023-10-09 438B__CE438B \n", + "29403 2023-10-09 4__Green Route \n", + "29723 2023-10-09 6__Wellness Express \n", + "30108 2023-10-09 CCA/Adobe__ \n", + "30148 2023-10-09 East__ \n", + "30604 2023-10-09 TC__Transbay-Caltrain \n", + "30635 2023-10-09 West__ \n", + "26212 2023-09-13 1__Blue Route \n", + "26526 2023-09-13 2__Gold Route \n", + "26720 2023-09-13 3__Red Route \n", + "26789 2023-09-13 438B__CE438B \n", + "26879 2023-09-13 4__Green Route \n", + "27239 2023-09-13 6__Wellness Express \n", + "27622 2023-09-13 CCA/Adobe__ \n", + "27659 2023-09-13 East__ \n", + "28096 2023-09-13 TC__Transbay-Caltrain \n", + "28126 2023-09-13 West__ \n", + "24272 2023-08-15 438B__CE438B \n", + "25105 2023-08-15 CCA/Adobe__ \n", + "25140 2023-08-15 East__ \n", + "25584 2023-08-15 TC__Transbay-Caltrain \n", + "25615 2023-08-15 West__ \n", + "21893 2023-07-12 438B__CE438B \n", + "19513 2023-06-14 438B__CE438B \n", + "17260 2023-05-17 438B__CE438B \n", + "12442 2023-04-14 438B__CE438B \n", + "10111 2023-04-13 438B__CE438B \n", + "7790 2023-04-12 438B__CE438B \n", + "5469 2023-04-11 438B__CE438B \n", + "3157 2023-04-10 438B__CE438B \n", + "845 2023-03-15 438B__CE438B \n", + "\n", + " portfolio_organization_name \\\n", + "115399 City of Santa Monica \n", + "115437 Palo Verde Valley Transit Agency \n", + "115763 Palo Verde Valley Transit Agency \n", + "115974 Palo Verde Valley Transit Agency \n", + "116041 City of Los Angeles \n", + "116045 City of Santa Monica \n", + "116140 Palo Verde Valley Transit Agency \n", + "116498 Palo Verde Valley Transit Agency \n", + "116804 City of Santa Monica \n", + "117034 Los Angeles World Airports \n", + "117035 Los Angeles World Airports \n", + "117042 San Luis Obispo Regional Transit Authority \n", + "117134 City of Santa Monica \n", + "117279 Los Angeles World Airports \n", + "117285 Los Angeles World Airports \n", + "112777 City of Santa Monica \n", + "112814 Palo Verde Valley Transit Agency \n", + "113147 Palo Verde Valley Transit Agency \n", + "113359 Palo Verde Valley Transit Agency \n", + "113429 City of Los Angeles \n", + "113433 City of Santa Monica \n", + "113527 Palo Verde Valley Transit Agency \n", + "113887 Palo Verde Valley Transit Agency \n", + "114188 City of Santa Monica \n", + "114625 Los Angeles World Airports \n", + "114626 Los Angeles World Airports \n", + "114633 San Luis Obispo Regional Transit Authority \n", + "114721 City of Santa Monica \n", + "114860 Los Angeles World Airports \n", + "114866 Los Angeles World Airports \n", + "110249 City of Santa Monica \n", + "110281 Palo Verde Valley Transit Agency \n", + "110799 Palo Verde Valley Transit Agency \n", + "110870 City of Los Angeles \n", + "110874 City of Santa Monica \n", + "110957 Palo Verde Valley Transit Agency \n", + "111309 Palo Verde Valley Transit Agency \n", + "111600 City of Santa Monica \n", + "112017 Los Angeles World Airports \n", + "112018 Los Angeles World Airports \n", + "112024 San Luis Obispo Regional Transit Authority \n", + "112105 City of Santa Monica \n", + "112233 Los Angeles World Airports \n", + "112239 Los Angeles World Airports \n", + "107715 Palo Verde Valley Transit Agency \n", + "108050 Palo Verde Valley Transit Agency \n", + "108264 Palo Verde Valley Transit Agency \n", + "108333 City of Los Angeles \n", + "108436 Palo Verde Valley Transit Agency \n", + "108799 Palo Verde Valley Transit Agency \n", + "109502 Los Angeles World Airports \n", + "109503 Los Angeles World Airports \n", + "109509 San Luis Obispo Regional Transit Authority \n", + "109721 Los Angeles World Airports \n", + "109727 Los Angeles World Airports \n", + "105149 Palo Verde Valley Transit Agency \n", + "105482 Palo Verde Valley Transit Agency \n", + "105692 Palo Verde Valley Transit Agency \n", + "105762 City of Los Angeles \n", + "105864 Palo Verde Valley Transit Agency \n", + "106220 Palo Verde Valley Transit Agency \n", + "106921 Los Angeles World Airports \n", + "106922 Los Angeles World Airports \n", + "106930 San Luis Obispo Regional Transit Authority \n", + "107143 Los Angeles World Airports \n", + "107149 Los Angeles World Airports \n", + "102532 Palo Verde Valley Transit Agency \n", + "102869 Palo Verde Valley Transit Agency \n", + "103077 Palo Verde Valley Transit Agency \n", + "103146 City of Los Angeles \n", + "103251 Palo Verde Valley Transit Agency \n", + "103615 Palo Verde Valley Transit Agency \n", + "104318 Los Angeles World Airports \n", + "104319 Los Angeles World Airports \n", + "104326 San Luis Obispo Regional Transit Authority \n", + "104544 Los Angeles World Airports \n", + "104550 Los Angeles World Airports \n", + "99894 Palo Verde Valley Transit Agency \n", + "100232 Palo Verde Valley Transit Agency \n", + "100438 Palo Verde Valley Transit Agency \n", + "100507 City of Los Angeles \n", + "100611 Palo Verde Valley Transit Agency \n", + "100975 Palo Verde Valley Transit Agency \n", + "101692 San Luis Obispo Regional Transit Authority \n", + "97199 Palo Verde Valley Transit Agency \n", + "94157 Palo Verde Valley Transit Agency \n", + "94494 Palo Verde Valley Transit Agency \n", + "94694 Palo Verde Valley Transit Agency \n", + "94763 City of Los Angeles \n", + "94864 Palo Verde Valley Transit Agency \n", + "95225 Palo Verde Valley Transit Agency \n", + "95960 San Luis Obispo Regional Transit Authority \n", + "91574 Palo Verde Valley Transit Agency \n", + "91908 Palo Verde Valley Transit Agency \n", + "92108 Palo Verde Valley Transit Agency \n", + "92177 City of Los Angeles \n", + "92278 Palo Verde Valley Transit Agency \n", + "93370 San Luis Obispo Regional Transit Authority \n", + "89000 Palo Verde Valley Transit Agency \n", + "89337 Palo Verde Valley Transit Agency \n", + "89537 Palo Verde Valley Transit Agency \n", + "89606 City of Los Angeles \n", + "89708 Palo Verde Valley Transit Agency \n", + "90069 Palo Verde Valley Transit Agency \n", + "90785 San Luis Obispo Regional Transit Authority \n", + "86426 Palo Verde Valley Transit Agency \n", + "86761 Palo Verde Valley Transit Agency \n", + "86964 Palo Verde Valley Transit Agency \n", + "87033 City of Los Angeles \n", + "87136 Palo Verde Valley Transit Agency \n", + "88220 San Luis Obispo Regional Transit Authority \n", + "83926 Palo Verde Valley Transit Agency \n", + "84260 Palo Verde Valley Transit Agency \n", + "84455 Palo Verde Valley Transit Agency \n", + "84523 City of Los Angeles \n", + "84626 Palo Verde Valley Transit Agency \n", + "84943 Palo Verde Valley Transit Agency \n", + "85668 San Luis Obispo Regional Transit Authority \n", + "81393 Palo Verde Valley Transit Agency \n", + "81706 Palo Verde Valley Transit Agency \n", + "81904 Palo Verde Valley Transit Agency \n", + "81971 City of Los Angeles \n", + "82072 Palo Verde Valley Transit Agency \n", + "82431 Palo Verde Valley Transit Agency \n", + "78971 Palo Verde Valley Transit Agency \n", + "79256 Palo Verde Valley Transit Agency \n", + "79453 Palo Verde Valley Transit Agency \n", + "79520 City of Los Angeles \n", + "79618 Palo Verde Valley Transit Agency \n", + "79952 Palo Verde Valley Transit Agency \n", + "76745 Palo Verde Valley Transit Agency \n", + "77014 Palo Verde Valley Transit Agency \n", + "77202 Palo Verde Valley Transit Agency \n", + "77263 City of Los Angeles \n", + "77356 Palo Verde Valley Transit Agency \n", + "77606 Palo Verde Valley Transit Agency \n", + "74728 Palo Verde Valley Transit Agency \n", + "74954 Palo Verde Valley Transit Agency \n", + "75115 Palo Verde Valley Transit Agency \n", + "75172 City of Los Angeles \n", + "75256 Palo Verde Valley Transit Agency \n", + "75449 Palo Verde Valley Transit Agency \n", + "72942 City of Los Angeles \n", + "69937 Palo Verde Valley Transit Agency \n", + "67162 Palo Verde Valley Transit Agency \n", + "67457 Palo Verde Valley Transit Agency \n", + "67648 Palo Verde Valley Transit Agency \n", + "67713 City of Los Angeles \n", + "67791 Palo Verde Valley Transit Agency \n", + "68095 Palo Verde Valley Transit Agency \n", + "64664 Palo Verde Valley Transit Agency \n", + "64969 Palo Verde Valley Transit Agency \n", + "65166 Palo Verde Valley Transit Agency \n", + "65233 City of Los Angeles \n", + "65313 Palo Verde Valley Transit Agency \n", + "62170 Palo Verde Valley Transit Agency \n", + "62490 Palo Verde Valley Transit Agency \n", + "62684 Palo Verde Valley Transit Agency \n", + "62751 City of Los Angeles \n", + "62840 Palo Verde Valley Transit Agency \n", + "63201 Palo Verde Valley Transit Agency \n", + "59621 Palo Verde Valley Transit Agency \n", + "59947 Palo Verde Valley Transit Agency \n", + "60150 Palo Verde Valley Transit Agency \n", + "60219 City of Los Angeles \n", + "60312 Palo Verde Valley Transit Agency \n", + "57056 Palo Verde Valley Transit Agency \n", + "57385 Palo Verde Valley Transit Agency \n", + "57588 Palo Verde Valley Transit Agency \n", + "57657 City of Los Angeles \n", + "57750 Palo Verde Valley Transit Agency \n", + "58112 Palo Verde Valley Transit Agency \n", + "54576 Palo Verde Valley Transit Agency \n", + "54884 Palo Verde Valley Transit Agency \n", + "55080 Palo Verde Valley Transit Agency \n", + "55150 City of Los Angeles \n", + "55242 Palo Verde Valley Transit Agency \n", + "55599 Palo Verde Valley Transit Agency \n", + "52065 Palo Verde Valley Transit Agency \n", + "52389 Palo Verde Valley Transit Agency \n", + "52590 Palo Verde Valley Transit Agency \n", + "52659 City of Los Angeles \n", + "52751 Palo Verde Valley Transit Agency \n", + "53119 Palo Verde Valley Transit Agency \n", + "49613 Palo Verde Valley Transit Agency \n", + "49914 Palo Verde Valley Transit Agency \n", + "50108 Palo Verde Valley Transit Agency \n", + "50172 City of Los Angeles \n", + "50252 Palo Verde Valley Transit Agency \n", + "50611 Palo Verde Valley Transit Agency \n", + "47093 Palo Verde Valley Transit Agency \n", + "47416 Palo Verde Valley Transit Agency \n", + "47620 Palo Verde Valley Transit Agency \n", + "47688 City of Los Angeles \n", + "47782 Palo Verde Valley Transit Agency \n", + "48153 Palo Verde Valley Transit Agency \n", + "44535 Palo Verde Valley Transit Agency \n", + "44833 Palo Verde Valley Transit Agency \n", + "45036 Palo Verde Valley Transit Agency \n", + "45104 City of Los Angeles \n", + "45198 Palo Verde Valley Transit Agency \n", + "45566 Palo Verde Valley Transit Agency \n", + "45956 Mission Bay Transportation Management Agency \n", + "45997 Mission Bay Transportation Management Agency \n", + "46454 Mission Bay Transportation Management Agency \n", + "46485 Mission Bay Transportation Management Agency \n", + "41892 Palo Verde Valley Transit Agency \n", + "38905 Palo Verde Valley Transit Agency \n", + "39216 Palo Verde Valley Transit Agency \n", + "39407 Palo Verde Valley Transit Agency \n", + "39476 City of Los Angeles \n", + "39564 Palo Verde Valley Transit Agency \n", + "39915 Palo Verde Valley Transit Agency \n", + "40297 Mission Bay Transportation Management Agency \n", + "40338 Mission Bay Transportation Management Agency \n", + "40794 Mission Bay Transportation Management Agency \n", + "40824 Mission Bay Transportation Management Agency \n", + "36380 Palo Verde Valley Transit Agency \n", + "36687 Palo Verde Valley Transit Agency \n", + "36878 Palo Verde Valley Transit Agency \n", + "36946 City of Los Angeles \n", + "37034 Palo Verde Valley Transit Agency \n", + "37773 Mission Bay Transportation Management Agency \n", + "37814 Mission Bay Transportation Management Agency \n", + "38264 Mission Bay Transportation Management Agency \n", + "38295 Mission Bay Transportation Management Agency \n", + "33806 Palo Verde Valley Transit Agency \n", + "34126 Palo Verde Valley Transit Agency \n", + "34325 Palo Verde Valley Transit Agency \n", + "34393 City of Los Angeles \n", + "34486 Palo Verde Valley Transit Agency \n", + "34850 Palo Verde Valley Transit Agency \n", + "35242 Mission Bay Transportation Management Agency \n", + "35283 Mission Bay Transportation Management Agency \n", + "35737 Mission Bay Transportation Management Agency \n", + "35769 Mission Bay Transportation Management Agency \n", + "31222 Palo Verde Valley Transit Agency \n", + "31539 Palo Verde Valley Transit Agency \n", + "31739 Palo Verde Valley Transit Agency \n", + "31807 City of Los Angeles \n", + "31901 Palo Verde Valley Transit Agency \n", + "32658 Mission Bay Transportation Management Agency \n", + "32699 Mission Bay Transportation Management Agency \n", + "33159 Mission Bay Transportation Management Agency \n", + "33190 Mission Bay Transportation Management Agency \n", + "28739 Palo Verde Valley Transit Agency \n", + "29054 Palo Verde Valley Transit Agency \n", + "29244 Palo Verde Valley Transit Agency \n", + "29312 City of Los Angeles \n", + "29403 Palo Verde Valley Transit Agency \n", + "29723 Palo Verde Valley Transit Agency \n", + "30108 Mission Bay Transportation Management Agency \n", + "30148 Mission Bay Transportation Management Agency \n", + "30604 Mission Bay Transportation Management Agency \n", + "30635 Mission Bay Transportation Management Agency \n", + "26212 Palo Verde Valley Transit Agency \n", + "26526 Palo Verde Valley Transit Agency \n", + "26720 Palo Verde Valley Transit Agency \n", + "26789 City of Los Angeles \n", + "26879 Palo Verde Valley Transit Agency \n", + "27239 Palo Verde Valley Transit Agency \n", + "27622 Mission Bay Transportation Management Agency \n", + "27659 Mission Bay Transportation Management Agency \n", + "28096 Mission Bay Transportation Management Agency \n", + "28126 Mission Bay Transportation Management Agency \n", + "24272 City of Los Angeles \n", + "25105 Mission Bay Transportation Management Agency \n", + "25140 Mission Bay Transportation Management Agency \n", + "25584 Mission Bay Transportation Management Agency \n", + "25615 Mission Bay Transportation Management Agency \n", + "21893 City of Los Angeles \n", + "19513 City of Los Angeles \n", + "17260 City of Los Angeles \n", + "12442 City of Los Angeles \n", + "10111 City of Los Angeles \n", + "7790 City of Los Angeles \n", + "5469 City of Los Angeles \n", + "3157 City of Los Angeles \n", + "845 City of Los Angeles \n", + "\n", + " route_long_name route_short_name route_id same_name \n", + "115399 UCLA - Marina del Rey 18 2 False \n", + "115437 Blue Route 1 2 False \n", + "115763 Gold Route 2 2 False \n", + "115974 Red Route 3 2 False \n", + "116041 CE438B 438B 2 False \n", + "116045 26th Street 43 2 False \n", + "116140 Green Route 4 2 False \n", + "116498 Wellness Express 6 2 False \n", + "116804 Pacific Palisades 9 2 False \n", + "117034 FlyAway - LAX to Union Station LAX to US 2 False \n", + "117035 FlyAway - LAX to Van Nuys LAX to VN 2 False \n", + "117042 Laguna Tripper LT 2 False \n", + "117134 Downtown LA Freeway Express R10 2 False \n", + "117279 FlyAway - Union Station to LAX US to LAX 2 False \n", + "117285 FlyAway - Van Nuys to LAX VN to LAX 2 False \n", + "112777 UCLA - Marina del Rey 18 2 False \n", + "112814 Blue Route 1 2 False \n", + "113147 Gold Route 2 2 False \n", + "113359 Red Route 3 2 False \n", + "113429 CE438B 438B 2 False \n", + "113433 26th Street 43 2 False \n", + "113527 Green Route 4 2 False \n", + "113887 Wellness Express 6 2 False \n", + "114188 Pacific Palisades 9 2 False \n", + "114625 FlyAway - LAX to Union Station LAX to US 2 False \n", + "114626 FlyAway - LAX to Van Nuys LAX to VN 2 False \n", + "114633 Laguna Tripper LT 2 False \n", + "114721 Downtown LA Freeway Express R10 2 False \n", + "114860 FlyAway - Union Station to LAX US to LAX 2 False \n", + "114866 FlyAway - Van Nuys to LAX VN to LAX 2 False \n", + "110249 UCLA - Marina del Rey 18 2 False \n", + "110281 Blue Route 1 2 False \n", + "110799 Red Route 3 2 False \n", + "110870 CE438B 438B 2 False \n", + "110874 26th Street 43 2 False \n", + "110957 Green Route 4 2 False \n", + "111309 Wellness Express 6 2 False \n", + "111600 Pacific Palisades 9 2 False \n", + "112017 FlyAway - LAX to Union Station LAX to US 2 False \n", + "112018 FlyAway - LAX to Van Nuys LAX to VN 2 False \n", + "112024 Laguna Tripper LT 2 False \n", + "112105 Downtown LA Freeway Express R10 2 False \n", + "112233 FlyAway - Union Station to LAX US to LAX 2 False \n", + "112239 FlyAway - Van Nuys to LAX VN to LAX 2 False \n", + "107715 Blue Route 1 2 False \n", + "108050 Gold Route 2 2 False \n", + "108264 Red Route 3 2 False \n", + "108333 CE438B 438B 2 False \n", + "108436 Green Route 4 2 False \n", + "108799 Wellness Express 6 2 False \n", + "109502 FlyAway - LAX to Union Station LAX to US 2 False \n", + "109503 FlyAway - LAX to Van Nuys LAX to VN 2 False \n", + "109509 Laguna Tripper LT 2 False \n", + "109721 FlyAway - Union Station to LAX US to LAX 2 False \n", + "109727 FlyAway - Van Nuys to LAX VN to LAX 2 False \n", + "105149 Blue Route 1 2 False \n", + "105482 Gold Route 2 2 False \n", + "105692 Red Route 3 2 False \n", + "105762 CE438B 438B 2 False \n", + "105864 Green Route 4 2 False \n", + "106220 Wellness Express 6 2 False \n", + "106921 FlyAway - LAX to Union Station LAX to US 2 False \n", + "106922 FlyAway - LAX to Van Nuys LAX to VN 2 False \n", + "106930 Laguna Tripper LT 2 False \n", + "107143 FlyAway - Union Station to LAX US to LAX 2 False \n", + "107149 FlyAway - Van Nuys to LAX VN to LAX 2 False \n", + "102532 Blue Route 1 2 False \n", + "102869 Gold Route 2 2 False \n", + "103077 Red Route 3 2 False \n", + "103146 CE438B 438B 2 False \n", + "103251 Green Route 4 2 False \n", + "103615 Wellness Express 6 2 False \n", + "104318 FlyAway - LAX to Union Station LAX to US 2 False \n", + "104319 FlyAway - LAX to Van Nuys LAX to VN 2 False \n", + "104326 Laguna Tripper LT 2 False \n", + "104544 FlyAway - Union Station to LAX US to LAX 2 False \n", + "104550 FlyAway - Van Nuys to LAX VN to LAX 2 False \n", + "99894 Blue Route 1 2 False \n", + "100232 Gold Route 2 2 False \n", + "100438 Red Route 3 2 False \n", + "100507 CE438B 438B 2 False \n", + "100611 Green Route 4 2 False \n", + "100975 Wellness Express 6 2 False \n", + "101692 Laguna Tripper LT 2 False \n", + "97199 Silver Route 5 2 False \n", + "94157 Blue Route 1 2 False \n", + "94494 Gold Route 2 2 False \n", + "94694 Red Route 3 2 False \n", + "94763 CE438B 438B 2 False \n", + "94864 Green Route 4 2 False \n", + "95225 Wellness Express 6 2 False \n", + "95960 Laguna Tripper LT 2 False \n", + "91574 Blue Route 1 2 False \n", + "91908 Gold Route 2 2 False \n", + "92108 Red Route 3 2 False \n", + "92177 CE438B 438B 2 False \n", + "92278 Green Route 4 2 False \n", + "93370 Laguna Tripper LT 2 False \n", + "89000 Blue Route 1 2 False \n", + "89337 Gold Route 2 2 False \n", + "89537 Red Route 3 2 False \n", + "89606 CE438B 438B 2 False \n", + "89708 Green Route 4 2 False \n", + "90069 Wellness Express 6 2 False \n", + "90785 Laguna Tripper LT 2 False \n", + "86426 Blue Route 1 2 False \n", + "86761 Gold Route 2 2 False \n", + "86964 Red Route 3 2 False \n", + "87033 CE438B 438B 2 False \n", + "87136 Green Route 4 2 False \n", + "88220 Laguna Tripper LT 2 False \n", + "83926 Blue Route 1 2 False \n", + "84260 Gold Route 2 2 False \n", + "84455 Red Route 3 2 False \n", + "84523 CE438B 438B 2 False \n", + "84626 Green Route 4 2 False \n", + "84943 Wellness Express 6 2 False \n", + "85668 Laguna Tripper LT 2 False \n", + "81393 Blue Route 1 2 False \n", + "81706 Gold Route 2 2 False \n", + "81904 Red Route 3 2 False \n", + "81971 CE438B 438B 2 False \n", + "82072 Green Route 4 2 False \n", + "82431 Wellness Express 6 2 False \n", + "78971 Blue Route 1 2 False \n", + "79256 Gold Route 2 2 False \n", + "79453 Red Route 3 2 False \n", + "79520 CE438B 438B 2 False \n", + "79618 Green Route 4 2 False \n", + "79952 Wellness Express 6 2 False \n", + "76745 Blue Route 1 2 False \n", + "77014 Gold Route 2 2 False \n", + "77202 Red Route 3 2 False \n", + "77263 CE438B 438B 2 False \n", + "77356 Green Route 4 2 False \n", + "77606 Wellness Express 6 2 False \n", + "74728 Blue Route 1 2 False \n", + "74954 Gold Route 2 2 False \n", + "75115 Red Route 3 2 False \n", + "75172 CE438B 438B 2 False \n", + "75256 Green Route 4 2 False \n", + "75449 Wellness Express 6 2 False \n", + "72942 CE438B 438B 2 False \n", + "69937 Silver Route 5 2 False \n", + "67162 Blue Route 1 2 False \n", + "67457 Gold Route 2 2 False \n", + "67648 Red Route 3 2 False \n", + "67713 CE438B 438B 2 False \n", + "67791 Green Route 4 2 False \n", + "68095 Wellness Express 6 2 False \n", + "64664 Blue Route 1 2 False \n", + "64969 Gold Route 2 2 False \n", + "65166 Red Route 3 2 False \n", + "65233 CE438B 438B 2 False \n", + "65313 Green Route 4 2 False \n", + "62170 Blue Route 1 2 False \n", + "62490 Gold Route 2 2 False \n", + "62684 Red Route 3 2 False \n", + "62751 CE438B 438B 2 False \n", + "62840 Green Route 4 2 False \n", + "63201 Wellness Express 6 2 False \n", + "59621 Blue Route 1 2 False \n", + "59947 Gold Route 2 2 False \n", + "60150 Red Route 3 2 False \n", + "60219 CE438B 438B 2 False \n", + "60312 Green Route 4 2 False \n", + "57056 Blue Route 1 2 False \n", + "57385 Gold Route 2 2 False \n", + "57588 Red Route 3 2 False \n", + "57657 CE438B 438B 2 False \n", + "57750 Green Route 4 2 False \n", + "58112 Wellness Express 6 2 False \n", + "54576 Blue Route 1 2 False \n", + "54884 Gold Route 2 2 False \n", + "55080 Red Route 3 2 False \n", + "55150 CE438B 438B 2 False \n", + "55242 Green Route 4 2 False \n", + "55599 Wellness Express 6 2 False \n", + "52065 Blue Route 1 2 False \n", + "52389 Gold Route 2 2 False \n", + "52590 Red Route 3 2 False \n", + "52659 CE438B 438B 2 False \n", + "52751 Green Route 4 2 False \n", + "53119 Wellness Express 6 2 False \n", + "49613 Blue Route 1 2 False \n", + "49914 Gold Route 2 2 False \n", + "50108 Red Route 3 2 False \n", + "50172 CE438B 438B 2 False \n", + "50252 Green Route 4 2 False \n", + "50611 Wellness Express 6 2 False \n", + "47093 Blue Route 1 2 False \n", + "47416 Gold Route 2 2 False \n", + "47620 Red Route 3 2 False \n", + "47688 CE438B 438B 2 False \n", + "47782 Green Route 4 2 False \n", + "48153 Wellness Express 6 2 False \n", + "44535 Blue Route 1 2 False \n", + "44833 Gold Route 2 2 False \n", + "45036 Red Route 3 2 False \n", + "45104 CE438B 438B 2 False \n", + "45198 Green Route 4 2 False \n", + "45566 Wellness Express 6 2 False \n", + "45956 CCA/Adobe 2 False \n", + "45997 East 2 False \n", + "46454 Transbay-Caltrain TC 2 False \n", + "46485 West 2 False \n", + "41892 Silver Route 5 2 False \n", + "38905 Blue Route 1 2 False \n", + "39216 Gold Route 2 2 False \n", + "39407 Red Route 3 2 False \n", + "39476 CE438B 438B 2 False \n", + "39564 Green Route 4 2 False \n", + "39915 Wellness Express 6 2 False \n", + "40297 CCA/Adobe 2 False \n", + "40338 East 2 False \n", + "40794 Transbay-Caltrain TC 2 False \n", + "40824 West 2 False \n", + "36380 Blue Route 1 2 False \n", + "36687 Gold Route 2 2 False \n", + "36878 Red Route 3 2 False \n", + "36946 CE438B 438B 2 False \n", + "37034 Green Route 4 2 False \n", + "37773 CCA/Adobe 2 False \n", + "37814 East 2 False \n", + "38264 Transbay-Caltrain TC 2 False \n", + "38295 West 2 False \n", + "33806 Blue Route 1 2 False \n", + "34126 Gold Route 2 2 False \n", + "34325 Red Route 3 2 False \n", + "34393 CE438B 438B 2 False \n", + "34486 Green Route 4 2 False \n", + "34850 Wellness Express 6 2 False \n", + "35242 CCA/Adobe 2 False \n", + "35283 East 2 False \n", + "35737 Transbay-Caltrain TC 2 False \n", + "35769 West 2 False \n", + "31222 Blue Route 1 2 False \n", + "31539 Gold Route 2 2 False \n", + "31739 Red Route 3 2 False \n", + "31807 CE438B 438B 2 False \n", + "31901 Green Route 4 2 False \n", + "32658 CCA/Adobe 2 False \n", + "32699 East 2 False \n", + "33159 Transbay-Caltrain TC 2 False \n", + "33190 West 2 False \n", + "28739 Blue Route 1 2 False \n", + "29054 Gold Route 2 2 False \n", + "29244 Red Route 3 2 False \n", + "29312 CE438B 438B 2 False \n", + "29403 Green Route 4 2 False \n", + "29723 Wellness Express 6 2 False \n", + "30108 CCA/Adobe 2 False \n", + "30148 East 2 False \n", + "30604 Transbay-Caltrain TC 2 False \n", + "30635 West 2 False \n", + "26212 Blue Route 1 2 False \n", + "26526 Gold Route 2 2 False \n", + "26720 Red Route 3 2 False \n", + "26789 CE438B 438B 2 False \n", + "26879 Green Route 4 2 False \n", + "27239 Wellness Express 6 2 False \n", + "27622 CCA/Adobe 2 False \n", + "27659 East 2 False \n", + "28096 Transbay-Caltrain TC 2 False \n", + "28126 West 2 False \n", + "24272 CE438B 438B 2 False \n", + "25105 CCA/Adobe 2 False \n", + "25140 East 2 False \n", + "25584 Transbay-Caltrain TC 2 False \n", + "25615 West 2 False \n", + "21893 CE438B 438B 2 False \n", + "19513 CE438B 438B 2 False \n", + "17260 CE438B 438B 2 False \n", + "12442 CE438B 438B 2 False \n", + "10111 CE438B 438B 2 False \n", + "7790 CE438B 438B 2 False \n", + "5469 CE438B 438B 2 False \n", + "3157 CE438B 438B 2 False \n", + "845 CE438B 438B 2 False " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m_route_ids_1_recent_combined_name2.loc[m_route_ids_1_recent_combined_name2.portfolio_organization_name != \"Amtrak\"].sort_values(\n", + " by=[\"service_date\", \"route_id\"], ascending=[False, False]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "db98dd8b-c5c7-4c66-9de5-148db53567f2", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 34, + "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", + " \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=[\n", + " \"portfolio_organization_name\",\n", + " \"route_id\"\n", + " ],\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=[\"portfolio_organization_name\", \"recent_combined_name\", \"service_date\", \"route_id\"]\n", + " )\n", + " return most_recent_routes" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "95c1dead-df6d-463d-a1f2-a64d4f4a2b6b", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "routes = process_transit_routes()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "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 == route][[\"geometry\",\"route_id\"]]\n", + " display(gdf.explore(\"route_id\"))\n", + " return" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "c363a000-aec1-468d-bd91-2c91b64dea46", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(2, 27)" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "routes.loc[routes.recent_combined_name == \"6 Wellness Express\"].shape" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "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(routes, \"6 Wellness Express\")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "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", + "
service_daterecent_combined_nameportfolio_organization_nameroute_long_nameroute_short_nameroute_id
1110812025-01-156__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express66467
1116782025-01-156__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express65970
1136282025-02-126__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express66467
1142902025-02-126__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express65970
1162242025-03-126__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express66467
1169492025-03-126__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express65970
1188802025-04-166__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express66467
1198282025-04-166__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express65970
1218142025-05-146__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express66467
1222502025-05-146__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express65970
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name portfolio_organization_name \\\n", + "111081 2025-01-15 6__Wellness Express Palo Verde Valley Transit Agency \n", + "111678 2025-01-15 6__Wellness Express Palo Verde Valley Transit Agency \n", + "113628 2025-02-12 6__Wellness Express Palo Verde Valley Transit Agency \n", + "114290 2025-02-12 6__Wellness Express Palo Verde Valley Transit Agency \n", + "116224 2025-03-12 6__Wellness Express Palo Verde Valley Transit Agency \n", + "116949 2025-03-12 6__Wellness Express Palo Verde Valley Transit Agency \n", + "118880 2025-04-16 6__Wellness Express Palo Verde Valley Transit Agency \n", + "119828 2025-04-16 6__Wellness Express Palo Verde Valley Transit Agency \n", + "121814 2025-05-14 6__Wellness Express Palo Verde Valley Transit Agency \n", + "122250 2025-05-14 6__Wellness Express Palo Verde Valley Transit Agency \n", + "\n", + " route_long_name route_short_name route_id \n", + "111081 Wellness Express 6 6467 \n", + "111678 Wellness Express 6 5970 \n", + "113628 Wellness Express 6 6467 \n", + "114290 Wellness Express 6 5970 \n", + "116224 Wellness Express 6 6467 \n", + "116949 Wellness Express 6 5970 \n", + "118880 Wellness Express 6 6467 \n", + "119828 Wellness Express 6 5970 \n", + "121814 Wellness Express 6 6467 \n", + "122250 Wellness Express 6 5970 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "inspect_recent_rows(df, \"Wellness Express\")" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "e9abc39d-364e-445b-b789-22da4e16bf09", + "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, \"18 UCLA - Marina del Rey\")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "0ff2e882-02ca-4269-ad07-f1b2a04ca7f0", + "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_daterecent_combined_nameportfolio_organization_nameroute_long_nameroute_short_nameroute_id
1036702024-11-1318__UCLA - Marina del ReyCity of Santa MonicaUCLA - Marina del Rey183770
1064582024-12-1118__UCLA - Marina del ReyCity of Santa MonicaUCLA - Marina del Rey183770
1112442025-01-1518__UCLA - Marina del ReyCity of Santa MonicaUCLA - Marina del Rey183820
1117372025-02-1218__UCLA - Marina del ReyCity of Santa MonicaUCLA - Marina del Rey183820
1148922025-03-1218__UCLA - Marina del ReyCity of Santa MonicaUCLA - Marina del Rey1818
1165322025-03-1218__UCLA - Marina del ReyCity of Santa MonicaUCLA - Marina del Rey183820
1175482025-04-1618__UCLA - Marina del ReyCity of Santa MonicaUCLA - Marina del Rey1818
1193082025-04-1618__UCLA - Marina del ReyCity of Santa MonicaUCLA - Marina del Rey183919
1201262025-05-1418__UCLA - Marina del ReyCity of Santa MonicaUCLA - Marina del Rey1818
1218322025-05-1418__UCLA - Marina del ReyCity of Santa MonicaUCLA - Marina del Rey183919
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name portfolio_organization_name \\\n", + "103670 2024-11-13 18__UCLA - Marina del Rey City of Santa Monica \n", + "106458 2024-12-11 18__UCLA - Marina del Rey City of Santa Monica \n", + "111244 2025-01-15 18__UCLA - Marina del Rey City of Santa Monica \n", + "111737 2025-02-12 18__UCLA - Marina del Rey City of Santa Monica \n", + "114892 2025-03-12 18__UCLA - Marina del Rey City of Santa Monica \n", + "116532 2025-03-12 18__UCLA - Marina del Rey City of Santa Monica \n", + "117548 2025-04-16 18__UCLA - Marina del Rey City of Santa Monica \n", + "119308 2025-04-16 18__UCLA - Marina del Rey City of Santa Monica \n", + "120126 2025-05-14 18__UCLA - Marina del Rey City of Santa Monica \n", + "121832 2025-05-14 18__UCLA - Marina del Rey City of Santa Monica \n", + "\n", + " route_long_name route_short_name route_id \n", + "103670 UCLA - Marina del Rey 18 3770 \n", + "106458 UCLA - Marina del Rey 18 3770 \n", + "111244 UCLA - Marina del Rey 18 3820 \n", + "111737 UCLA - Marina del Rey 18 3820 \n", + "114892 UCLA - Marina del Rey 18 18 \n", + "116532 UCLA - Marina del Rey 18 3820 \n", + "117548 UCLA - Marina del Rey 18 18 \n", + "119308 UCLA - Marina del Rey 18 3919 \n", + "120126 UCLA - Marina del Rey 18 18 \n", + "121832 UCLA - Marina del Rey 18 3919 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "inspect_recent_rows(df, \"UCLA - Marina del Rey\")" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "f06972a6-7c24-4d5e-b4f1-fcd9cd7742ce", + "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_daterecent_combined_nameportfolio_organization_nameroute_long_nameroute_short_nameroute_id
1036632024-11-139__Pacific PalisadesCity of Santa MonicaPacific Palisades93763
1064512024-12-119__Pacific PalisadesCity of Santa MonicaPacific Palisades93763
1112372025-01-159__Pacific PalisadesCity of Santa MonicaPacific Palisades93813
1117302025-02-129__Pacific PalisadesCity of Santa MonicaPacific Palisades93813
1148852025-03-129__Pacific PalisadesCity of Santa MonicaPacific Palisades99
1165252025-03-129__Pacific PalisadesCity of Santa MonicaPacific Palisades93813
1175412025-04-169__Pacific PalisadesCity of Santa MonicaPacific Palisades99
1193012025-04-169__Pacific PalisadesCity of Santa MonicaPacific Palisades93912
1201192025-05-149__Pacific PalisadesCity of Santa MonicaPacific Palisades99
1218252025-05-149__Pacific PalisadesCity of Santa MonicaPacific Palisades93912
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name portfolio_organization_name \\\n", + "103663 2024-11-13 9__Pacific Palisades City of Santa Monica \n", + "106451 2024-12-11 9__Pacific Palisades City of Santa Monica \n", + "111237 2025-01-15 9__Pacific Palisades City of Santa Monica \n", + "111730 2025-02-12 9__Pacific Palisades City of Santa Monica \n", + "114885 2025-03-12 9__Pacific Palisades City of Santa Monica \n", + "116525 2025-03-12 9__Pacific Palisades City of Santa Monica \n", + "117541 2025-04-16 9__Pacific Palisades City of Santa Monica \n", + "119301 2025-04-16 9__Pacific Palisades City of Santa Monica \n", + "120119 2025-05-14 9__Pacific Palisades City of Santa Monica \n", + "121825 2025-05-14 9__Pacific Palisades City of Santa Monica \n", + "\n", + " route_long_name route_short_name route_id \n", + "103663 Pacific Palisades 9 3763 \n", + "106451 Pacific Palisades 9 3763 \n", + "111237 Pacific Palisades 9 3813 \n", + "111730 Pacific Palisades 9 3813 \n", + "114885 Pacific Palisades 9 9 \n", + "116525 Pacific Palisades 9 3813 \n", + "117541 Pacific Palisades 9 9 \n", + "119301 Pacific Palisades 9 3912 \n", + "120119 Pacific Palisades 9 9 \n", + "121825 Pacific Palisades 9 3912 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "inspect_recent_rows(df, \"Pacific Palisades\")" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "4c9bac66-11c0-4793-ad7a-ff9a73ad69f4", + "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, \"9 Pacific Palisades\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ee79d500-6acc-41cd-acb2-8d6b897fa9bd", + "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 +} From c766236c7f234fad2743b19d412afa9dad951d72 Mon Sep 17 00:00:00 2001 From: amandaha8 Date: Thu, 19 Jun 2025 22:47:18 +0000 Subject: [PATCH 05/10] found a couple of operators with some route issues, rm them --- .../create_portfolio_display_yaml.py | 3 +- gtfs_digest/25_route_names.ipynb | 11692 ++++++++++------ gtfs_digest/26_tiffany_route_id.ipynb | 8780 ++++++++++++ gtfs_digest/_operator_report.ipynb | 13 + .../segment_speed_utils/time_series_utils.py | 6 +- 5 files changed, 16486 insertions(+), 4008 deletions(-) create mode 100644 gtfs_digest/26_tiffany_route_id.ipynb diff --git a/_shared_utils/shared_utils/create_portfolio_display_yaml.py b/_shared_utils/shared_utils/create_portfolio_display_yaml.py index 69e02960a..0b50425a1 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/25_route_names.ipynb b/gtfs_digest/25_route_names.ipynb index 8f46a4d71..e24cd0314 100644 --- a/gtfs_digest/25_route_names.ipynb +++ b/gtfs_digest/25_route_names.ipynb @@ -5,14 +5,15 @@ "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." + "# `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", + "* Samething with Yolobus" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 53, "id": "3f3d3984-e41e-4bf0-a496-9f17c08b70bc", "metadata": {}, "outputs": [], @@ -20,7 +21,7 @@ "import pandas as pd\n", "import yaml\n", "from segment_speed_utils import time_series_utils\n", - "from shared_utils import portfolio_utils\n", + "from shared_utils import portfolio_utils, rt_dates\n", "from update_vars import GTFS_DATA_DICT, SCHED_GCS\n", "\n", "with open(\"../_shared_utils/shared_utils/portfolio_organization_name.yml\", \"r\") as f:\n", @@ -29,28 +30,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "a3a0adca-b9ea-4238-9590-411d990386b4", "metadata": {}, "outputs": [], "source": [ "import geopandas as gpd\n", - "from update_vars import GTFS_DATA_DICT, RT_SCHED_GCS, SCHED_GCS, SEGMENT_GCS\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 shared_utils import (\n", - " portfolio_utils,\n", - " publish_utils,\n", - ")\n", - "from calitp_data_analysis import geography_utils, utils" + "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": 2, + "execution_count": 64, "id": "fcc3a1b8-e2ec-404c-a1bd-fd0360fb45ae", "metadata": {}, "outputs": [], @@ -65,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "49652dbe-659a-400d-ba10-2a017a5af275", "metadata": { "tags": [] @@ -83,7 +81,7 @@ "id": "135b761c-dcf4-4474-8e72-e5471fb79eb6", "metadata": {}, "source": [ - "## Find other routes with this issue\n", + "## 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", @@ -92,11 +90,82 @@ }, { "cell_type": "code", - "execution_count": 4, + "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": 65, "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": 154, + "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": 7, + "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": 155, + "id": "c237c56d-3beb-46f2-a690-0d3ecb0c4763", + "metadata": { + "tags": [] + }, "outputs": [ { "data": { @@ -121,88 +190,106 @@ " \n", " schedule_gtfs_dataset_key\n", " name\n", - " route_id\n", - " route_long_name\n", - " route_short_name\n", - " route_desc\n", + " organization_name\n", " service_date\n", - " combined_name\n", - " route_id2\n", - " recent_combined_name\n", - " recent_route_id2\n", - " portfolio_organization_name\n", " \n", " \n", " \n", " \n", - " 0\n", - " 7e015887964432c82ce7e735c2753f86\n", - " VCTC GMV Schedule\n", - " 3402\n", - " Route 11\n", - " Route 11\n", - " PACIFIC VIEW MALL via TELEPHONE RD\n", - " 2023-03-15\n", - " Route 11__Route 11\n", - " 3402\n", - " Route 11__Route 11\n", - " 3402\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " \n", - " \n", - " 1\n", - " 7e015887964432c82ce7e735c2753f86\n", - " VCTC GMV Schedule\n", - " 3407\n", - " Route 18\n", - " Route 18\n", - " OHS TRIPPER - C ST - DORIS ST\n", - " 2023-03-15\n", - " Route 18__Route 18\n", - " 3407\n", - " Route 18__Route 18\n", - " 3407\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", + " 211\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " Santa Maria Schedule\n", + " City of Santa Maria\n", + " 2025-01-15\n", + " \n", + " \n", + " 211\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " Santa Maria Schedule\n", + " City of Santa Maria\n", + " 2025-02-12\n", + " \n", + " \n", + " 210\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " Santa Maria Schedule\n", + " City of Santa Maria\n", + " 2025-03-12\n", + " \n", + " \n", + " 217\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " Santa Maria Schedule\n", + " City of Santa Maria\n", + " 2025-04-16\n", + " \n", + " \n", + " 216\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " Santa Maria Schedule\n", + " City of Santa Maria\n", + " 2025-05-14\n", " \n", " \n", "\n", "" ], "text/plain": [ - " schedule_gtfs_dataset_key name route_id \\\n", - "0 7e015887964432c82ce7e735c2753f86 VCTC GMV Schedule 3402 \n", - "1 7e015887964432c82ce7e735c2753f86 VCTC GMV Schedule 3407 \n", - "\n", - " route_long_name route_short_name route_desc \\\n", - "0 Route 11 Route 11 PACIFIC VIEW MALL via TELEPHONE RD \n", - "1 Route 18 Route 18 OHS TRIPPER - C ST - DORIS ST \n", + " 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", - " service_date combined_name route_id2 recent_combined_name \\\n", - "0 2023-03-15 Route 11__Route 11 3402 Route 11__Route 11 \n", - "1 2023-03-15 Route 18__Route 18 3407 Route 18__Route 18 \n", - "\n", - " recent_route_id2 \\\n", - "0 3402 \n", - "1 3407 \n", - "\n", - " portfolio_organization_name \n", - "0 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "1 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) " + " 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": 4, + "execution_count": 155, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df.head(2)" + "crosswalk_df.loc[\n", + " crosswalk_df.organization_name.str.contains(\n", + " \"Santa Maria\",\n", + " )\n", + "]" ] }, { "cell_type": "code", - "execution_count": 5, - "id": "f26663d7-1328-4f46-8c50-3614a2b2e83e", + "execution_count": 8, + "id": "b8ba491f-c038-4203-96da-948996b85540", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "35" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(santa_maria)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "dd4f53fc-1572-4982-9948-90e40c287355", "metadata": { "scrolled": true, "tags": [] @@ -232,402 +319,557 @@ " 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", " \n", " \n", - " 119289\n", - " 2025-04-16\n", - " 81B__80-89 Coastal Express\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " 80-89 Coastal Express\n", - " 81B\n", + " 23616\n", + " 2023-07-12\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 5b894962-da2e-442f-b9ec-df43cd2f80d0\n", " \n", " \n", - " 119290\n", - " 2025-04-16\n", - " 84U__80-89 Coastal Express\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " 80-89 Coastal Express\n", - " 84U\n", + " 26129\n", + " 2023-08-15\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 5b894962-da2e-442f-b9ec-df43cd2f80d0\n", " \n", " \n", - " 119291\n", - " 2025-04-16\n", - " 85C__80-89 Coastal Express\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " 80-89 Coastal Express\n", - " 85C\n", + " 28692\n", + " 2023-09-13\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 5b894962-da2e-442f-b9ec-df43cd2f80d0\n", " \n", " \n", - " 119633\n", - " 2025-04-16\n", - " __Coastal Express\n", - " Curry Public Transit\n", - " Coastal Express\n", - " \n", + " 31230\n", + " 2023-10-09\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 5b894962-da2e-442f-b9ec-df43cd2f80d0\n", " \n", " \n", - " 121367\n", - " 2025-05-14\n", - " __Long Coastal\n", - " City of Laguna Beach\n", - " Long Coastal\n", - " \n", + " 33977\n", + " 2023-10-10\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 5b894962-da2e-442f-b9ec-df43cd2f80d0\n", " \n", " \n", - " 121368\n", - " 2025-05-14\n", - " __Short Coastal\n", - " City of Laguna Beach\n", - " Short Coastal\n", - " \n", + " 36466\n", + " 2023-10-11\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 5b894962-da2e-442f-b9ec-df43cd2f80d0\n", " \n", " \n", - " 121369\n", - " 2025-05-14\n", - " __Coastal Trolley\n", - " City of Laguna Beach\n", - " Coastal Trolley\n", - " \n", + " 39031\n", + " 2023-10-12\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 5b894962-da2e-442f-b9ec-df43cd2f80d0\n", " \n", " \n", - " 121686\n", - " 2025-05-14\n", - " 80__80-89 Coastal Express\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " 80-89 Coastal Express\n", - " 80\n", + " 41619\n", + " 2023-10-13\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 5b894962-da2e-442f-b9ec-df43cd2f80d0\n", " \n", " \n", - " 121687\n", - " 2025-05-14\n", - " 86__80-89 Coastal Express\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " 80-89 Coastal Express\n", - " 86\n", + " 47378\n", + " 2023-11-15\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 5b894962-da2e-442f-b9ec-df43cd2f80d0\n", " \n", " \n", - " 121693\n", - " 2025-05-14\n", - " 85__80-89 Coastal Express\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " 80-89 Coastal Express\n", - " 85\n", + " 49943\n", + " 2023-12-13\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 5b894962-da2e-442f-b9ec-df43cd2f80d0\n", " \n", " \n", - " 121695\n", - " 2025-05-14\n", - " 81__80-89 Coastal Express\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " 80-89 Coastal Express\n", - " 81\n", + " 52537\n", + " 2024-01-17\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 5b894962-da2e-442f-b9ec-df43cd2f80d0\n", " \n", " \n", - " 121710\n", - " 2025-05-14\n", - " 84__80-89 Coastal Express\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " 80-89 Coastal Express\n", - " 84\n", + " 55070\n", + " 2024-02-14\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 5b894962-da2e-442f-b9ec-df43cd2f80d0\n", " \n", " \n", - " 121727\n", - " 2025-05-14\n", - " 89__80-89 Coastal Express\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " 80-89 Coastal Express\n", - " 89\n", + " 57534\n", + " 2024-03-13\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 5b894962-da2e-442f-b9ec-df43cd2f80d0\n", " \n", " \n", - " 121728\n", - " 2025-05-14\n", - " 85C__80-89 Coastal Express\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " 80-89 Coastal Express\n", - " 85C\n", + " 60108\n", + " 2024-04-15\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 5b894962-da2e-442f-b9ec-df43cd2f80d0\n", " \n", " \n", - " 121729\n", - " 2025-05-14\n", - " 87__80-89 Coastal Express\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " 80-89 Coastal Express\n", - " 87\n", + " 62530\n", + " 2024-04-16\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 5b894962-da2e-442f-b9ec-df43cd2f80d0\n", " \n", " \n", - " 121818\n", - " 2025-05-14\n", - " 80X__80-89 Coastal Express\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " 80-89 Coastal Express\n", - " 80X\n", + " 65176\n", + " 2024-04-17\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", " \n", " \n", - " 121821\n", - " 2025-05-14\n", - " 81B__80-89 Coastal Express\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " 80-89 Coastal Express\n", - " 81B\n", + " 67565\n", + " 2024-04-18\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", " \n", " \n", - " 121822\n", - " 2025-05-14\n", - " 84U__80-89 Coastal Express\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " 80-89 Coastal Express\n", - " 84U\n", + " 69952\n", + " 2024-04-19\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", " \n", " \n", - " 121823\n", - " 2025-05-14\n", - " 88__80-89 Coastal Express\n", - " Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)\n", - " 80-89 Coastal Express\n", - " 88\n", + " 75223\n", + " 2024-05-22\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", + " \n", + " \n", + " 77345\n", + " 2024-06-12\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", + " \n", + " \n", + " 79471\n", + " 2024-07-17\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", + " \n", + " \n", + " 81858\n", + " 2024-08-14\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", + " \n", + " \n", + " 84482\n", + " 2024-09-18\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", + " \n", + " \n", + " 87001\n", + " 2024-10-14\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", + " \n", + " \n", + " 89450\n", + " 2024-10-15\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", + " \n", + " \n", + " 92041\n", + " 2024-10-16\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", + " \n", + " \n", + " 94645\n", + " 2024-10-17\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", + " \n", + " \n", + " 97365\n", + " 2024-10-18\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", + " \n", + " \n", + " 103067\n", + " 2024-11-13\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", " \n", " \n", - " 122179\n", + " 105852\n", + " 2024-12-11\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", + " \n", + " \n", + " 108475\n", + " 2025-01-15\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", + " \n", + " \n", + " 111087\n", + " 2025-02-12\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", + " \n", + " \n", + " 113611\n", + " 2025-03-12\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", + " \n", + " \n", + " 116234\n", + " 2025-04-16\n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", + " \n", + " \n", + " 118651\n", " 2025-05-14\n", - " __Coastal Express\n", - " Curry Public Transit\n", - " Coastal Express\n", - " \n", + " 13X__13X Transit Center/PVHS/N. Broadway\n", + " City of Santa Maria\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", + " 13X Transit Center/PVHS/N. Broadway\n", + " 13X\n", + " 13X\n", " \n", " \n", "\n", "" ], "text/plain": [ - " service_date recent_combined_name \\\n", - "119289 2025-04-16 81B__80-89 Coastal Express \n", - "119290 2025-04-16 84U__80-89 Coastal Express \n", - "119291 2025-04-16 85C__80-89 Coastal Express \n", - "119633 2025-04-16 __Coastal Express \n", - "121367 2025-05-14 __Long Coastal \n", - "121368 2025-05-14 __Short Coastal \n", - "121369 2025-05-14 __Coastal Trolley \n", - "121686 2025-05-14 80__80-89 Coastal Express \n", - "121687 2025-05-14 86__80-89 Coastal Express \n", - "121693 2025-05-14 85__80-89 Coastal Express \n", - "121695 2025-05-14 81__80-89 Coastal Express \n", - "121710 2025-05-14 84__80-89 Coastal Express \n", - "121727 2025-05-14 89__80-89 Coastal Express \n", - "121728 2025-05-14 85C__80-89 Coastal Express \n", - "121729 2025-05-14 87__80-89 Coastal Express \n", - "121818 2025-05-14 80X__80-89 Coastal Express \n", - "121821 2025-05-14 81B__80-89 Coastal Express \n", - "121822 2025-05-14 84U__80-89 Coastal Express \n", - "121823 2025-05-14 88__80-89 Coastal Express \n", - "122179 2025-05-14 __Coastal Express \n", - "\n", - " portfolio_organization_name \\\n", - "119289 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "119290 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "119291 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "119633 Curry Public Transit \n", - "121367 City of Laguna Beach \n", - "121368 City of Laguna Beach \n", - "121369 City of Laguna Beach \n", - "121686 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "121687 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "121693 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "121695 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "121710 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "121727 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "121728 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "121729 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "121818 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "121821 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "121822 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "121823 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "122179 Curry Public Transit \n", - "\n", - " route_long_name route_short_name \n", - "119289 80-89 Coastal Express 81B \n", - "119290 80-89 Coastal Express 84U \n", - "119291 80-89 Coastal Express 85C \n", - "119633 Coastal Express \n", - "121367 Long Coastal \n", - "121368 Short Coastal \n", - "121369 Coastal Trolley \n", - "121686 80-89 Coastal Express 80 \n", - "121687 80-89 Coastal Express 86 \n", - "121693 80-89 Coastal Express 85 \n", - "121695 80-89 Coastal Express 81 \n", - "121710 80-89 Coastal Express 84 \n", - "121727 80-89 Coastal Express 89 \n", - "121728 80-89 Coastal Express 85C \n", - "121729 80-89 Coastal Express 87 \n", - "121818 80-89 Coastal Express 80X \n", - "121821 80-89 Coastal Express 81B \n", - "121822 80-89 Coastal Express 84U \n", - "121823 80-89 Coastal Express 88 \n", - "122179 Coastal Express " + " 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": 5, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df.loc[df.recent_combined_name.str.contains(\"Coastal\")][[\n", - " \"service_date\",\n", - " \"recent_combined_name\",\n", - " \"portfolio_organization_name\",\n", - " \"route_long_name\",\n", - " \"route_short_name\",\n", - " ]].tail(20)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "b1aa3465-d2ca-41d0-a1e3-a2e2c423bf7b", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "m_route_ids_1_recent_combined_name = (\n", - " df.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": 7, - "id": "4154d02e-c688-4d38-91e8-2c939d020ab4", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "m_route_ids_1_recent_combined_name[\"same_name\"] = (\n", - " m_route_ids_1_recent_combined_name.route_long_name\n", - " == m_route_ids_1_recent_combined_name.route_short_name\n", - ")" + "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": 8, - "id": "da315f15-0bda-41bb-b50b-a460eecdeae4", + "execution_count": 10, + "id": "f3bee988-dd13-4d9f-ab41-30d038800283", "metadata": { "tags": [] }, "outputs": [], "source": [ - "m_route_ids_1_recent_combined_name2 = m_route_ids_1_recent_combined_name.loc[\n", - " (m_route_ids_1_recent_combined_name.route_id > 1)\n", - " & (m_route_ids_1_recent_combined_name.same_name == False)\n", + "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": 9, - "id": "9377e82b-024a-4223-a1e5-b1fd2ddeb1d4", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "341" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(m_route_ids_1_recent_combined_name2)" - ] - }, - { - "cell_type": "markdown", - "id": "6cff6733-945a-4742-bb9e-b8c715ac4c31", - "metadata": {}, - "source": [ - "### Amtrak doesn't have any `route_short_name` values." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "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", - " \"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": 11, - "id": "41bb081a-f4b1-4109-9f61-05a009858c07", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array(['', 'THRU', 'CMTR'], dtype=object)" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "m_route_ids_1_recent_combined_name2.loc[\n", - " m_route_ids_1_recent_combined_name2.portfolio_organization_name == \"Amtrak\"\n", - "].route_short_name.unique()" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "91dc7c44-4dae-46df-ba66-b75bc2903615", + "execution_count": 11, + "id": "0e3c308a-dd0c-4e45-9146-516a18cbf7e0", "metadata": { + "scrolled": true, "tags": [] }, "outputs": [ @@ -658,154 +900,201 @@ " route_long_name\n", " route_short_name\n", " route_id\n", + " schedule_gtfs_dataset_key\n", " \n", " \n", " \n", " \n", - " 121162\n", - " 2025-05-14\n", - " __Amtrak Thruway Connecting Service\n", - " Amtrak\n", - " Amtrak Thruway Connecting Service\n", - " \n", - " 42933\n", + " 92043\n", + " 2024-10-16\n", + " 12X__12X Broadway/Orcutt Express\n", + " City of Santa Maria\n", + " 12X Broadway/Orcutt Express\n", + " 12X\n", + " 12X\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", " \n", " \n", - " 121159\n", - " 2025-05-14\n", - " __Amtrak Thruway Connecting Service\n", - " Amtrak\n", - " Amtrak Thruway Connecting Service\n", - " \n", - " 42920\n", + " 94647\n", + " 2024-10-17\n", + " 12X__12X Broadway/Orcutt Express\n", + " City of Santa Maria\n", + " 12X Broadway/Orcutt Express\n", + " 12X\n", + " 12X\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", " \n", " \n", - " 121158\n", - " 2025-05-14\n", - " __Amtrak Thruway Connecting Service\n", - " Amtrak\n", - " Amtrak Thruway Connecting Service\n", - " \n", - " 18650\n", + " 97367\n", + " 2024-10-18\n", + " 12X__12X Broadway/Orcutt Express\n", + " City of Santa Maria\n", + " 12X Broadway/Orcutt Express\n", + " 12X\n", + " 12X\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", " \n", " \n", - " 121152\n", - " 2025-05-14\n", - " __Amtrak Thruway Connecting Service\n", - " Amtrak\n", - " Amtrak Thruway Connecting Service\n", - " \n", - " 43\n", + " 103069\n", + " 2024-11-13\n", + " 12X__12X Broadway/Orcutt Express\n", + " City of Santa Maria\n", + " 12X Broadway/Orcutt Express\n", + " 12X\n", + " 12X\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", " \n", " \n", - " 121155\n", - " 2025-05-14\n", - " __Amtrak Thruway Connecting Service\n", - " Amtrak\n", - " Amtrak Thruway Connecting Service\n", - " \n", - " 42896\n", + " 105854\n", + " 2024-12-11\n", + " 12X__12X Broadway/Orcutt Express\n", + " City of Santa Maria\n", + " 12X Broadway/Orcutt Express\n", + " 12X\n", + " 12X\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", " \n", " \n", - " 121150\n", - " 2025-05-14\n", - " __Amtrak Thruway Connecting Service\n", - " Amtrak\n", - " Amtrak Thruway Connecting Service\n", - " \n", - " 42891\n", + " 108476\n", + " 2025-01-15\n", + " 12X__12X Broadway/Orcutt Express\n", + " City of Santa Maria\n", + " 12X Broadway/Orcutt Express\n", + " 12X\n", + " 12X\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", " \n", " \n", - " 121148\n", - " 2025-05-14\n", - " __Amtrak Thruway Connecting Service\n", - " Amtrak\n", - " Amtrak Thruway Connecting Service\n", - " \n", - " 42954\n", + " 111088\n", + " 2025-02-12\n", + " 12X__12X Broadway/Orcutt Express\n", + " City of Santa Maria\n", + " 12X Broadway/Orcutt Express\n", + " 12X\n", + " 12X\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", " \n", " \n", - " 121166\n", - " 2025-05-14\n", - " __Amtrak Thruway Connecting Service\n", - " Amtrak\n", - " Amtrak Thruway Connecting Service\n", - " \n", - " 42958\n", + " 113612\n", + " 2025-03-12\n", + " 12X__12X Broadway/Orcutt Express\n", + " City of Santa Maria\n", + " 12X Broadway/Orcutt Express\n", + " 12X\n", + " 12X\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", " \n", " \n", - " 121157\n", - " 2025-05-14\n", - " __Amtrak Thruway Connecting Service\n", - " Amtrak\n", - " Amtrak Thruway Connecting Service\n", - " \n", - " 42912\n", + " 116235\n", + " 2025-04-16\n", + " 12X__12X Broadway/Orcutt Express\n", + " City of Santa Maria\n", + " 12X Broadway/Orcutt Express\n", + " 12X\n", + " 12X\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", " \n", " \n", - " 121169\n", + " 118652\n", " 2025-05-14\n", - " __Amtrak Thruway Connecting Service\n", - " Amtrak\n", - " Amtrak Thruway Connecting Service\n", - " \n", - " 42935\n", + " 12X__12X Broadway/Orcutt Express\n", + " City of Santa Maria\n", + " 12X Broadway/Orcutt Express\n", + " 12X\n", + " 12X\n", + " 73105f2d1cabc8170ab066d96863c5d5\n", " \n", " \n", "\n", "" ], "text/plain": [ - " service_date recent_combined_name \\\n", - "121162 2025-05-14 __Amtrak Thruway Connecting Service \n", - "121159 2025-05-14 __Amtrak Thruway Connecting Service \n", - "121158 2025-05-14 __Amtrak Thruway Connecting Service \n", - "121152 2025-05-14 __Amtrak Thruway Connecting Service \n", - "121155 2025-05-14 __Amtrak Thruway Connecting Service \n", - "121150 2025-05-14 __Amtrak Thruway Connecting Service \n", - "121148 2025-05-14 __Amtrak Thruway Connecting Service \n", - "121166 2025-05-14 __Amtrak Thruway Connecting Service \n", - "121157 2025-05-14 __Amtrak Thruway Connecting Service \n", - "121169 2025-05-14 __Amtrak Thruway Connecting Service \n", - "\n", - " portfolio_organization_name route_long_name \\\n", - "121162 Amtrak Amtrak Thruway Connecting Service \n", - "121159 Amtrak Amtrak Thruway Connecting Service \n", - "121158 Amtrak Amtrak Thruway Connecting Service \n", - "121152 Amtrak Amtrak Thruway Connecting Service \n", - "121155 Amtrak Amtrak Thruway Connecting Service \n", - "121150 Amtrak Amtrak Thruway Connecting Service \n", - "121148 Amtrak Amtrak Thruway Connecting Service \n", - "121166 Amtrak Amtrak Thruway Connecting Service \n", - "121157 Amtrak Amtrak Thruway Connecting Service \n", - "121169 Amtrak Amtrak Thruway Connecting Service \n", + " 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", - " route_short_name route_id \n", - "121162 42933 \n", - "121159 42920 \n", - "121158 18650 \n", - "121152 43 \n", - "121155 42896 \n", - "121150 42891 \n", - "121148 42954 \n", - "121166 42958 \n", - "121157 42912 \n", - "121169 42935 " + " 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": 11, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ - "inspect_recent_rows(df, \"Amtrak Thruway Connecting Service\")" + "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": 12, + "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": 13, - "id": "abcc4bd1-f387-4d0b-84f6-ada0609b18e2", + "id": "2bcae4cd-eb3c-4ff4-b568-6de484675743", "metadata": { + "scrolled": true, "tags": [] }, "outputs": [ @@ -836,208 +1125,650 @@ " route_long_name\n", " route_short_name\n", " route_id\n", + " schedule_gtfs_dataset_key\n", " \n", " \n", " \n", " \n", - " 110507\n", - " 2025-01-15\n", - " __Commuter Rail\n", - " Amtrak\n", - " Commuter Rail\n", - " \n", - " 42948\n", + " 429\n", + " 2023-03-15\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " ffc3845f-a0cf-4553-81c1-f53d0470f0f3\n", + " 97b8c635bbc4cdd02bc5c27d0e83df3c\n", " \n", " \n", - " 110511\n", - " 2025-01-15\n", - " __Commuter Rail\n", - " Amtrak\n", - " Commuter Rail\n", - " \n", - " 42985\n", + " 2732\n", + " 2023-04-10\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " ffc3845f-a0cf-4553-81c1-f53d0470f0f3\n", + " 97b8c635bbc4cdd02bc5c27d0e83df3c\n", " \n", " \n", - " 113338\n", - " 2025-02-12\n", - " __Commuter Rail\n", - " Amtrak\n", - " Commuter Rail\n", - " \n", - " 42948\n", + " 5089\n", + " 2023-04-11\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " ffc3845f-a0cf-4553-81c1-f53d0470f0f3\n", + " 97b8c635bbc4cdd02bc5c27d0e83df3c\n", " \n", " \n", - " 113341\n", - " 2025-02-12\n", - " __Commuter Rail\n", - " Amtrak\n", - " Commuter Rail\n", - " \n", - " 42985\n", + " 7444\n", + " 2023-04-12\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " ffc3845f-a0cf-4553-81c1-f53d0470f0f3\n", + " 97b8c635bbc4cdd02bc5c27d0e83df3c\n", " \n", " \n", - " 115952\n", - " 2025-03-12\n", - " __Commuter Rail\n", - " Amtrak\n", - " Commuter Rail\n", - " \n", - " 42985\n", + " 9804\n", + " 2023-04-13\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " ffc3845f-a0cf-4553-81c1-f53d0470f0f3\n", + " 97b8c635bbc4cdd02bc5c27d0e83df3c\n", " \n", " \n", - " 115960\n", - " 2025-03-12\n", - " __Commuter Rail\n", - " Amtrak\n", - " Commuter Rail\n", - " \n", - " 42948\n", + " 12181\n", + " 2023-04-14\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " ffc3845f-a0cf-4553-81c1-f53d0470f0f3\n", + " 97b8c635bbc4cdd02bc5c27d0e83df3c\n", " \n", " \n", - " 118601\n", - " 2025-04-16\n", - " __Commuter Rail\n", - " Amtrak\n", - " Commuter Rail\n", - " \n", - " 42985\n", + " 17114\n", + " 2023-05-17\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " b6bc2958-333f-4d1e-8579-b75b2698b6b4\n", + " 97b8c635bbc4cdd02bc5c27d0e83df3c\n", " \n", " \n", - " 118603\n", - " 2025-04-16\n", - " __Commuter Rail\n", - " Amtrak\n", - " Commuter Rail\n", - " \n", - " 42948\n", + " 19580\n", + " 2023-06-14\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " b6bc2958-333f-4d1e-8579-b75b2698b6b4\n", + " 97b8c635bbc4cdd02bc5c27d0e83df3c\n", " \n", " \n", - " 121149\n", - " 2025-05-14\n", - " __Commuter Rail\n", - " Amtrak\n", - " Commuter Rail\n", - " \n", - " 42985\n", + " 21997\n", + " 2023-07-12\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " b6bc2958-333f-4d1e-8579-b75b2698b6b4\n", + " 97b8c635bbc4cdd02bc5c27d0e83df3c\n", " \n", " \n", - " 121151\n", - " 2025-05-14\n", - " __Commuter Rail\n", - " Amtrak\n", - " Commuter Rail\n", - " \n", - " 42948\n", + " 24384\n", + " 2023-08-15\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " b6bc2958-333f-4d1e-8579-b75b2698b6b4\n", + " 97b8c635bbc4cdd02bc5c27d0e83df3c\n", " \n", - " \n", - "\n", - "" - ], - "text/plain": [ - " service_date recent_combined_name portfolio_organization_name \\\n", - "110507 2025-01-15 __Commuter Rail Amtrak \n", - "110511 2025-01-15 __Commuter Rail Amtrak \n", - "113338 2025-02-12 __Commuter Rail Amtrak \n", - "113341 2025-02-12 __Commuter Rail Amtrak \n", - "115952 2025-03-12 __Commuter Rail Amtrak \n", - "115960 2025-03-12 __Commuter Rail Amtrak \n", - "118601 2025-04-16 __Commuter Rail Amtrak \n", - "118603 2025-04-16 __Commuter Rail Amtrak \n", - "121149 2025-05-14 __Commuter Rail Amtrak \n", - "121151 2025-05-14 __Commuter Rail Amtrak \n", - "\n", - " route_long_name route_short_name route_id \n", - "110507 Commuter Rail 42948 \n", - "110511 Commuter Rail 42985 \n", - "113338 Commuter Rail 42948 \n", - "113341 Commuter Rail 42985 \n", - "115952 Commuter Rail 42985 \n", - "115960 Commuter Rail 42948 \n", - "118601 Commuter Rail 42985 \n", - "118603 Commuter Rail 42948 \n", - "121149 Commuter Rail 42985 \n", - "121151 Commuter Rail 42948 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "inspect_recent_rows(df, \"Commuter Rail\")" - ] - }, - { - "cell_type": "markdown", - "id": "cb2586c8-da81-40c7-8f53-4a56c7ffaea4", - "metadata": {}, - "source": [ - "### Check routes that aren't run by Amtrak" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "7ddca2ae-cc8b-4930-b471-e44037916518", - "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', 'City of Santa Monica'], dtype=object)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "m_route_ids_1_recent_combined_name2.portfolio_organization_name.unique()" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "92d273c2-fe53-405f-a4f6-6a17f72c4e5a", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { + " \n", + " 26969\n", + " 2023-09-13\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " b6bc2958-333f-4d1e-8579-b75b2698b6b4\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 29550\n", + " 2023-10-09\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " b6bc2958-333f-4d1e-8579-b75b2698b6b4\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 32110\n", + " 2023-10-10\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " b6bc2958-333f-4d1e-8579-b75b2698b6b4\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 34680\n", + " 2023-10-11\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " b6bc2958-333f-4d1e-8579-b75b2698b6b4\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 37319\n", + " 2023-10-12\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " b6bc2958-333f-4d1e-8579-b75b2698b6b4\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 39901\n", + " 2023-10-13\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " b6bc2958-333f-4d1e-8579-b75b2698b6b4\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 45588\n", + " 2023-11-15\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " b6bc2958-333f-4d1e-8579-b75b2698b6b4\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 48229\n", + " 2023-12-13\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " b6bc2958-333f-4d1e-8579-b75b2698b6b4\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 50846\n", + " 2024-01-17\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 3ad667e2-f0d8-45fe-adf2-0a8b2ee47f68\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 53220\n", + " 2024-02-14\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 9cf77254-5a34-4478-9d00-eb863cdf1dd1\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 55770\n", + " 2024-03-13\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 9cf77254-5a34-4478-9d00-eb863cdf1dd1\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 58306\n", + " 2024-04-15\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 9cf77254-5a34-4478-9d00-eb863cdf1dd1\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 60811\n", + " 2024-04-16\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 9cf77254-5a34-4478-9d00-eb863cdf1dd1\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 63425\n", + " 2024-04-17\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 9cf77254-5a34-4478-9d00-eb863cdf1dd1\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 65900\n", + " 2024-04-18\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 9cf77254-5a34-4478-9d00-eb863cdf1dd1\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 68401\n", + " 2024-04-19\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 9cf77254-5a34-4478-9d00-eb863cdf1dd1\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 73653\n", + " 2024-05-22\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 9cf77254-5a34-4478-9d00-eb863cdf1dd1\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 76015\n", + " 2024-06-12\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 9cf77254-5a34-4478-9d00-eb863cdf1dd1\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 78021\n", + " 2024-07-17\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 138\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 80233\n", + " 2024-08-14\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 138\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 82684\n", + " 2024-09-18\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 138\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 85270\n", + " 2024-10-14\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 138\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 87716\n", + " 2024-10-15\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 138\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 90301\n", + " 2024-10-16\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 138\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 92906\n", + " 2024-10-17\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 138\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 95549\n", + " 2024-10-18\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 138\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 101262\n", + " 2024-11-13\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 138\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 103937\n", + " 2024-12-11\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 138\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 106696\n", + " 2025-01-15\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 138\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 109354\n", + " 2025-02-12\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 138\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 111928\n", + " 2025-03-12\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 138\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " \n", + " \n", + " 114394\n", + " 2025-04-16\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 138\n", + " 24956c9535f71f462472e2a1ceb5567c\n", + " \n", + " \n", + " 116838\n", + " 2025-05-14\n", + " 138__Causeway Connection\n", + " Yolo County Transportation District\n", + " Causeway Connection\n", + " 138\n", + " 138\n", + " 7535a7b8c19aeaef607abf014ee2fd3f\n", + " \n", + " \n", + "\n", + "" + ], "text/plain": [ - "array(['CE438B', 'Amtrak Thruway Connecting Service', 'Commuter Rail', '',\n", - " 'Transbay-Caltrain', 'Blue Route', 'Gold Route', 'Red Route',\n", - " 'Green Route', 'Wellness Express', 'Silver Route',\n", - " 'Laguna Tripper', 'Maple Leaf', 'FlyAway - LAX to Union Station',\n", - " 'FlyAway - LAX to Van Nuys', 'FlyAway - Union Station to LAX',\n", - " 'FlyAway - Van Nuys to LAX', 'UCLA - Marina del Rey',\n", - " '26th Street', 'Pacific Palisades', 'Downtown LA Freeway Express'],\n", - " dtype=object)" + " 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, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "m_route_ids_1_recent_combined_name2.route_long_name.unique()" + "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": "dc8d6b35-6dac-4fdf-9535-fb225d777ec0", + "execution_count": 156, + "id": "91c3581b-0567-4c09-9b8b-1ec131c89686", "metadata": { - "scrolled": true, "tags": [] }, "outputs": [ @@ -1062,3751 +1793,6345 @@ " \n", " \n", " \n", + " schedule_gtfs_dataset_key\n", + " name\n", + " organization_name\n", " service_date\n", - " recent_combined_name\n", - " portfolio_organization_name\n", - " route_long_name\n", - " route_short_name\n", - " route_id\n", - " same_name\n", " \n", " \n", " \n", " \n", - " 115399\n", - " 2025-05-14\n", - " 18__UCLA - Marina del Rey\n", - " City of Santa Monica\n", - " UCLA - Marina del Rey\n", - " 18\n", - " 2\n", - " False\n", + " 51\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " Yolobus Schedule\n", + " Yolo County Transportation District\n", + " 2025-01-15\n", " \n", " \n", - " 115437\n", - " 2025-05-14\n", - " 1__Blue Route\n", - " Palo Verde Valley Transit Agency\n", - " Blue Route\n", - " 1\n", - " 2\n", - " False\n", + " 52\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " Yolobus Schedule\n", + " Yolo County Transportation District\n", + " 2025-02-12\n", " \n", " \n", - " 115763\n", - " 2025-05-14\n", - " 2__Gold Route\n", - " Palo Verde Valley Transit Agency\n", - " Gold Route\n", - " 2\n", - " 2\n", - " False\n", + " 53\n", + " 3c62ad6ee589d56eca915ce291a5df0a\n", + " Yolobus Schedule\n", + " Yolo County Transportation District\n", + " 2025-03-12\n", " \n", " \n", - " 115974\n", - " 2025-05-14\n", - " 3__Red Route\n", - " Palo Verde Valley Transit Agency\n", - " Red Route\n", - " 3\n", - " 2\n", - " False\n", + " 51\n", + " 24956c9535f71f462472e2a1ceb5567c\n", + " Yolobus Schedule\n", + " Yolo County Transportation District\n", + " 2025-04-16\n", " \n", " \n", - " 116041\n", + " 49\n", + " 7535a7b8c19aeaef607abf014ee2fd3f\n", + " Yolobus Schedule\n", + " Yolo County Transportation District\n", " 2025-05-14\n", - " 438B__CE438B\n", - " City of Los Angeles\n", - " CE438B\n", - " 438B\n", - " 2\n", - " False\n", " \n", + " \n", + "\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": 156, + "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": 14, + "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": 15, + "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", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \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
1160451182892025-05-1443__26th StreetCity of Santa Monica26th Street432FalseE10__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE10E1089b0a03002512a909fe8e1a5d00a78a5
1161401182902025-05-144__Green RoutePalo Verde Valley Transit AgencyGreen Route42FalseE11__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE11E1189b0a03002512a909fe8e1a5d00a78a5
1164981182982025-05-146__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62FalseE12__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE12E1289b0a03002512a909fe8e1a5d00a78a5
1168041182992025-05-149__Pacific PalisadesCity of Santa MonicaPacific Palisades92FalseE13__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE13E1389b0a03002512a909fe8e1a5d00a78a5
1170341183002025-05-14LAX to US__FlyAway - LAX to Union StationLos Angeles World AirportsFlyAway - LAX to Union StationLAX to US2FalseE14__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE14E1489b0a03002512a909fe8e1a5d00a78a5
1170351183012025-05-14LAX to VN__FlyAway - LAX to Van NuysLos Angeles World AirportsFlyAway - LAX to Van NuysLAX to VN2FalseE15__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE15E1589b0a03002512a909fe8e1a5d00a78a5
1170421183022025-05-14LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2FalseE16__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE16E1689b0a03002512a909fe8e1a5d00a78a5
1171341183032025-05-14R10__Downtown LA Freeway ExpressCity of Santa MonicaDowntown LA Freeway ExpressR102FalseE17__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE17E1789b0a03002512a909fe8e1a5d00a78a5
1172791183042025-05-14US to LAX__FlyAway - Union Station to LAXLos Angeles World AirportsFlyAway - Union Station to LAXUS to LAX2FalseE19__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE19E1989b0a03002512a909fe8e1a5d00a78a5
1172851187062025-05-14VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsFlyAway - Van Nuys to LAXVN to LAX2False
1127772025-04-1618__UCLA - Marina del ReyCity of Santa MonicaUCLA - Marina del Rey182False
1128142025-04-161__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
1131472025-04-162__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
1133592025-04-163__Red RoutePalo Verde Valley Transit AgencyRed Route32False
1134292025-04-16438B__CE438BCity of Los AngelesCE438B438B2False
1134332025-04-1643__26th StreetCity of Santa Monica26th Street432False
1135272025-04-164__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
1138872025-04-166__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
1141882025-04-169__Pacific PalisadesCity of Santa MonicaPacific Palisades92False
1146252025-04-16LAX to US__FlyAway - LAX to Union StationLos Angeles World AirportsFlyAway - LAX to Union StationLAX to US2FalseE18__Elk Grove Commuter RouteCity of Elk GroveElk Grove Commuter RouteE18E1889b0a03002512a909fe8e1a5d00a78a5
1146262025-04-16LAX to VN__FlyAway - LAX to Van NuysLos Angeles World AirportsFlyAway - LAX to Van NuysLAX to VN2False
\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": 15, + "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": 16, + "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": 17, + "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", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \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
1146331158802025-04-16LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2FalseE112__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE112E11289b0a03002512a909fe8e1a5d00a78a5
1147211158792025-04-16R10__Downtown LA Freeway ExpressCity of Santa MonicaDowntown LA Freeway ExpressR102FalseE111__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE111E11189b0a03002512a909fe8e1a5d00a78a5
1148601158782025-04-16US to LAX__FlyAway - Union Station to LAXLos Angeles World AirportsFlyAway - Union Station to LAXUS to LAX2FalseE110__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE110E11089b0a03002512a909fe8e1a5d00a78a5
1148662025-04-16VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsFlyAway - Van Nuys to LAXVN to LAX2False1182912025-05-14E110__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE110E11089b0a03002512a909fe8e1a5d00a78a5
1102492025-03-1218__UCLA - Marina del ReyCity of Santa MonicaUCLA - Marina del Rey182False1182922025-05-14E111__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE111E11189b0a03002512a909fe8e1a5d00a78a5
1102812025-03-121__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False1182932025-05-14E112__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE112E11289b0a03002512a909fe8e1a5d00a78a5
1107992025-03-123__Red RoutePalo Verde Valley Transit AgencyRed Route32False1182942025-05-14E113__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE113E11389b0a03002512a909fe8e1a5d00a78a5
1108702025-03-12438B__CE438BCity of Los AngelesCE438B438B2False1182952025-05-14E114__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE114E11489b0a03002512a909fe8e1a5d00a78a5
1108742025-03-1243__26th StreetCity of Santa Monica26th Street432False1182962025-05-14E115__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE115E11589b0a03002512a909fe8e1a5d00a78a5
1109572025-03-124__Green RoutePalo Verde Valley Transit AgencyGreen Route42False1182972025-05-14E116__Elk Grove Local RouteCity of Elk GroveElk Grove Local RouteE116E11689b0a03002512a909fe8e1a5d00a78a5
1113092025-03-126__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
\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": 17, + "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": 157, + "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", - " \n", + " \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
11160017789b0a03002512a909fe8e1a5d00a78a5Elk Grove ScheduleCity of Elk Grove2025-03-129__Pacific PalisadesCity of Santa MonicaPacific Palisades92False
1120172025-03-12LAX to US__FlyAway - LAX to Union StationLos Angeles World AirportsFlyAway - LAX to Union StationLAX to US2False18089b0a03002512a909fe8e1a5d00a78a5Elk Grove ScheduleCity of Elk Grove2025-04-16
1120182025-03-12LAX to VN__FlyAway - LAX to Van NuysLos Angeles World AirportsFlyAway - LAX to Van NuysLAX to VN2False17989b0a03002512a909fe8e1a5d00a78a5Elk Grove ScheduleCity of Elk Grove2025-05-14
112024
\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": 157, + "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": 18, + "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": 21, + "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": 23, + "id": "2ad02f1a-536c-4506-ab33-5525bb144c96", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Find the routes with more than one for route_id, route_long_name, and route_short_name\n", + "agg1_filtered = agg1.loc[(agg1.route_id > 1) & (agg1.route_short_name > 1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "8c8c5c83-6d01-4373-a8ae-f844a8cf1b06", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(576, 7)" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg1_filtered.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "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
274982023-09-13bd24573e82aa13be83eb7143179dd099Mountain View Transportation Management AssociationA - AM__Whisman, Clyde & Middlefield222
1053822025-01-156869ab0f62d858fcd5d070e651609224Mountain View Transportation Management AssociationB - PM__Shoreline, Crittenden, La Avenida222
1027912024-12-116869ab0f62d858fcd5d070e651609224Mountain View Transportation Management AssociationB - PM__Shoreline, Crittenden, La Avenida222
\n", + "
" + ], + "text/plain": [ + " service_date schedule_gtfs_dataset_key \\\n", + "27498 2023-09-13 bd24573e82aa13be83eb7143179dd099 \n", + "105382 2025-01-15 6869ab0f62d858fcd5d070e651609224 \n", + "102791 2024-12-11 6869ab0f62d858fcd5d070e651609224 \n", + "\n", + " portfolio_organization_name \\\n", + "27498 Mountain View Transportation Management Association \n", + "105382 Mountain View Transportation Management Association \n", + "102791 Mountain View Transportation Management Association \n", + "\n", + " recent_combined_name route_id route_long_name \\\n", + "27498 A - AM__Whisman, Clyde & Middlefield 2 2 \n", + "105382 B - PM__Shoreline, Crittenden, La Avenida 2 2 \n", + "102791 B - PM__Shoreline, Crittenden, La Avenida 2 2 \n", + "\n", + " route_short_name \n", + "27498 2 \n", + "105382 2 \n", + "102791 2 " + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg1_filtered.sample(3)" + ] + }, + { + "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": 26, + "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": 27, + "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": 27, + "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": 28, + "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", + "
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
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", + "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", + "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": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "routes_to_focus.loc[routes_to_focus.service_date >= \"2024-12-11\",]" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "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',\n", + " 'Los Angeles County Metropolitan Transportation Authority',\n", + " 'Amtrak', 'City of Santa Maria'], dtype=object)" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg1_filtered.portfolio_organization_name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "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", + " \"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": 31, + "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": 32, + "id": "95c1dead-df6d-463d-a1f2-a64d4f4a2b6b", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "routes = process_transit_routes()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "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": 33, + "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": 34, + "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": 34, + "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": 35, + "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": 35, + "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": 36, + "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": 36, + "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": 40, + "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": 41, + "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": 42, + "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": 43, + "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": 44, + "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", + " \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
1187042025-05-1410_PM__PM COMMUTER 10City of Roseville3f420af2aea56d3ba5a1b10f488f0575AM COMMUTER 1010_AM10_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", + "118704 2025-05-14 10_PM__PM COMMUTER 10 City of Roseville \n", + "\n", + " schedule_gtfs_dataset_key route_long_name route_short_name \\\n", + "118695 3f420af2aea56d3ba5a1b10f488f0575 AM COMMUTER 1 1_AM \n", + "118704 3f420af2aea56d3ba5a1b10f488f0575 AM COMMUTER 10 10_AM \n", + "\n", + " route_id \n", + "118695 1_AM \n", + "118704 10_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": 45, + "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": 46, + "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": 47, + "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": 47, + "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": 48, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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
1069892025-01-15C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)Mountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Charleston, Garcia & San Antonio (Counterclockwise loop)C - AMC - AM
1069882025-01-15C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)Mountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Charleston, Garcia & San Antonio (Counterclockwise loop)C - PMC - PM
1096642025-02-12C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)Mountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Charleston, Garcia & San Antonio (Counterclockwise loop)C - PMC - PM
1096652025-02-12C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)Mountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Charleston, Garcia & San Antonio (Counterclockwise loop)C - AMC - AM
1122262025-03-12LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2FalseC - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)Mountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Charleston, Garcia & San Antonio (Counterclockwise loop)C - AMC - AM
1122302025-03-12C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)Mountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Charleston, Garcia & San Antonio (Counterclockwise loop)C - PMC - PM
1146852025-04-16C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)Mountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Charleston, Garcia & San Antonio (Counterclockwise loop)C - AMC - AM
1146892025-04-16C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)Mountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Charleston, Garcia & San Antonio (Counterclockwise loop)C - PMC - PM
1171302025-05-14C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)Mountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Charleston, Garcia & San Antonio (Counterclockwise loop)C - AMC - AM
1171362025-05-14C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)Mountain View Transportation Management Association6869ab0f62d858fcd5d070e651609224Charleston, Garcia & San Antonio (Counterclockwise loop)C - PMC - PM
\n", + "
" + ], + "text/plain": [ + " service_date \\\n", + "106989 2025-01-15 \n", + "106988 2025-01-15 \n", + "109664 2025-02-12 \n", + "109665 2025-02-12 \n", + "112226 2025-03-12 \n", + "112230 2025-03-12 \n", + "114685 2025-04-16 \n", + "114689 2025-04-16 \n", + "117130 2025-05-14 \n", + "117136 2025-05-14 \n", + "\n", + " recent_combined_name \\\n", + "106989 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "106988 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "109664 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "109665 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "112226 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "112230 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "114685 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "114689 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "117130 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "117136 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "\n", + " portfolio_organization_name \\\n", + "106989 Mountain View Transportation Management Association \n", + "106988 Mountain View Transportation Management Association \n", + "109664 Mountain View Transportation Management Association \n", + "109665 Mountain View Transportation Management Association \n", + "112226 Mountain View Transportation Management Association \n", + "112230 Mountain View Transportation Management Association \n", + "114685 Mountain View Transportation Management Association \n", + "114689 Mountain View Transportation Management Association \n", + "117130 Mountain View Transportation Management Association \n", + "117136 Mountain View Transportation Management Association \n", + "\n", + " schedule_gtfs_dataset_key \\\n", + "106989 6869ab0f62d858fcd5d070e651609224 \n", + "106988 6869ab0f62d858fcd5d070e651609224 \n", + "109664 6869ab0f62d858fcd5d070e651609224 \n", + "109665 6869ab0f62d858fcd5d070e651609224 \n", + "112226 6869ab0f62d858fcd5d070e651609224 \n", + "112230 6869ab0f62d858fcd5d070e651609224 \n", + "114685 6869ab0f62d858fcd5d070e651609224 \n", + "114689 6869ab0f62d858fcd5d070e651609224 \n", + "117130 6869ab0f62d858fcd5d070e651609224 \n", + "117136 6869ab0f62d858fcd5d070e651609224 \n", + "\n", + " route_long_name \\\n", + "106989 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "106988 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "109664 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "109665 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "112226 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "112230 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "114685 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "114689 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "117130 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "117136 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", + "\n", + " route_short_name route_id \n", + "106989 C - AM C - AM \n", + "106988 C - PM C - PM \n", + "109664 C - PM C - PM \n", + "109665 C - AM C - AM \n", + "112226 C - AM C - AM \n", + "112230 C - PM C - PM \n", + "114685 C - AM C - AM \n", + "114689 C - PM C - PM \n", + "117130 C - AM C - AM \n", + "117136 C - PM C - PM " + ] + }, + "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": 49, + "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": 49, + "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": 50, + "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", + " \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
1121051069872025-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-12R10__Downtown LA Freeway ExpressCity of Santa MonicaDowntown LA Freeway ExpressR102FalseA - 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": 60, + "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", - " \n", - " \n", - " \n", + " \n", + " \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
11223314596680f72c0c59208e055c81be87ad4a9Desert Roadrunner SchedulePalo Verde Valley Transit Agency2025-03-12US to LAX__FlyAway - Union Station to LAXLos Angeles World AirportsFlyAway - Union Station to LAXUS to LAX2False
1122392054383eb1cca04093020f1583f57f32d9bDesert Roadrunner GMV SchedulePalo Verde Valley Transit Agency2025-03-12VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsFlyAway - Van Nuys to LAXVN to LAX2False
1077152025-02-121__Blue Route14596680f72c0c59208e055c81be87ad4a9Desert Roadrunner SchedulePalo Verde Valley Transit AgencyBlue Route12False2025-04-16
1080502025-02-122__Gold Route2114383eb1cca04093020f1583f57f32d9bDesert Roadrunner GMV SchedulePalo Verde Valley Transit AgencyGold Route22False2025-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": 60, + "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": 66, + "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": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "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": 70, + "id": "ca72b496-bce1-4815-ab75-b0773f2bb29a", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(180, 12)" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "desert_roadrunner_schd.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "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": 69, + "id": "599d225f-44c0-4a24-8c1b-3a62f85f081b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(162, 12)" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "desert_roadrunner_gmv_schd.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "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": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set(list(desert_roadrunner_schd.recent_combined_name.unique()))" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "id": "6dfee5e1-a1a8-48f4-905d-aa2a13d5ad7d", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'1444', '358', '359', '360', '361', '6467'}" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set(list(desert_roadrunner_schd.route_id.unique()))" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "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": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set(list(desert_roadrunner_gmv_schd.recent_combined_name.unique()))" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "id": "c3481e63-965a-45c9-b4a2-20ba4ee3bb82", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'5964', '5965', '5966', '5967', '5969', '5970'}" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set(list(desert_roadrunner_gmv_schd.route_id.unique()))" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "2d370f97-d446-4444-a01f-74ad84eefda6", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Timestamp('2025-05-14 00:00:00')" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "desert_roadrunner_gmv_schd.service_date.max()" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "14c5cd5c-b651-4ce3-ac3c-1eafa94f597b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Timestamp('2025-05-14 00:00:00')" + ] + }, + "execution_count": 79, + "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", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \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
1082642025-02-123__Red Route265082023-09-136__Wellness ExpressPalo Verde Valley Transit AgencyRed Route32False
1083332025-02-12438B__CE438BCity of Los AngelesCE438B438B2False4383eb1cca04093020f1583f57f32d9bWellness Express65970
1084362025-02-124__Green Route313302023-10-096__Wellness ExpressPalo Verde Valley Transit AgencyGreen Route42False4383eb1cca04093020f1583f57f32d9bWellness Express65970
1087992025-02-12342232023-10-116__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express62False
1095022025-02-12LAX to US__FlyAway - LAX to Union StationLos Angeles World AirportsFlyAway - LAX to Union StationLAX to US2False
1095032025-02-12LAX to VN__FlyAway - LAX to Van NuysLos Angeles World AirportsFlyAway - LAX to Van NuysLAX to VN2False
1095092025-02-12LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False
1097212025-02-12US to LAX__FlyAway - Union Station to LAXLos Angeles World AirportsFlyAway - Union Station to LAXUS to LAX2False
1097272025-02-12VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsFlyAway - Van Nuys to LAXVN to LAX2False5970
1051492025-01-151__Blue Route394192023-10-136__Wellness ExpressPalo Verde Valley Transit AgencyBlue Route12False4383eb1cca04093020f1583f57f32d9bWellness Express65970
1054822025-01-152__Gold Route451622023-11-156__Wellness ExpressPalo Verde Valley Transit AgencyGold Route22False4383eb1cca04093020f1583f57f32d9bWellness Express65970
1056922025-01-153__Red Route477582023-12-136__Wellness ExpressPalo Verde Valley Transit AgencyRed Route32False
1057622025-01-15438B__CE438BCity of Los AngelesCE438B438B2False4383eb1cca04093020f1583f57f32d9bWellness Express65970
1058642025-01-154__Green Route503162024-01-176__Wellness ExpressPalo Verde Valley Transit AgencyGreen Route42False4383eb1cca04093020f1583f57f32d9bWellness Express65970
1062202025-01-15549262024-02-146__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express62False5970
1069212025-01-15LAX to US__FlyAway - LAX to Union StationLos Angeles World AirportsFlyAway - LAX to Union StationLAX to US2False552932024-03-136__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1069222025-01-15LAX to VN__FlyAway - LAX to Van NuysLos Angeles World AirportsFlyAway - LAX to Van NuysLAX to VN2False577592024-04-156__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1069302025-01-15LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False628912024-04-176__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1071432025-01-15US to LAX__FlyAway - Union Station to LAXLos Angeles World AirportsFlyAway - Union Station to LAXUS to LAX2False679082024-04-196__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1071492025-01-15VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsFlyAway - Van Nuys to LAXVN to LAX2False731752024-05-226__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1025322024-12-111__Blue Route755492024-06-126__Wellness ExpressPalo Verde Valley Transit AgencyBlue Route12False4383eb1cca04093020f1583f57f32d9bWellness Express65970
1028692024-12-112__Gold Route795542024-07-176__Wellness ExpressPalo Verde Valley Transit AgencyGold Route22False4383eb1cca04093020f1583f57f32d9bWellness Express65970
1030772024-12-113__Red Route797662024-08-146__Wellness ExpressPalo Verde Valley Transit AgencyRed Route32False4383eb1cca04093020f1583f57f32d9bWellness Express65970
1031462024-12-11438B__CE438BCity of Los AngelesCE438B438B2False821772024-09-186__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1032512024-12-114__Green Route846992024-10-146__Wellness ExpressPalo Verde Valley Transit AgencyGreen Route42False4383eb1cca04093020f1583f57f32d9bWellness Express65970
1036152024-12-11921252024-10-166__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express62False5970
1043182024-12-11LAX to US__FlyAway - LAX to Union StationLos Angeles World AirportsFlyAway - LAX to Union StationLAX to US2False949702024-10-186__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1043192024-12-11LAX to VN__FlyAway - LAX to Van NuysLos Angeles World AirportsFlyAway - LAX to Van NuysLAX to VN2False1031502024-11-136__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1043261034142024-12-11LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False6__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1045442024-12-11US to LAX__FlyAway - Union Station to LAXLos Angeles World AirportsFlyAway - Union Station to LAXUS to LAX2False1085252025-01-156__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
1045502024-12-11VN to LAX__FlyAway - Van Nuys to LAXLos Angeles World AirportsFlyAway - Van Nuys to LAXVN to LAX2False1110222025-02-126__Wellness ExpressPalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bWellness Express65970
998942024-11-131__Blue Route1135492025-03-126__Wellness ExpressPalo Verde Valley Transit AgencyBlue Route12False4383eb1cca04093020f1583f57f32d9bWellness Express65970
1002322024-11-132__Gold Route1162832025-04-166__Wellness ExpressPalo Verde Valley Transit AgencyGold Route22False4383eb1cca04093020f1583f57f32d9bWellness Express65970
1004382024-11-133__Red Route1185872025-05-146__Wellness ExpressPalo Verde Valley Transit AgencyRed Route32False4383eb1cca04093020f1583f57f32d9bWellness Express65970
1005072024-11-13438B__CE438BCity of Los AngelesCE438B438B2False
\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", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \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
1006112024-11-134__Green Route22952023-03-156__Wellness ExpressPalo Verde Valley Transit AgencyGreen Route42False69c28a761e7b8186ccfab752f38df2dcWellness Express66467
1009752024-11-13189992023-05-176__Wellness ExpressPalo Verde Valley Transit Agency69c28a761e7b8186ccfab752f38df2dcWellness Express62False
1016922024-11-13LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False6467
971992024-10-195__Silver Route213872023-06-146__Wellness ExpressPalo Verde Valley Transit AgencySilver Route52False69c28a761e7b8186ccfab752f38df2dcWellness Express66467
941572024-10-181__Blue Route238102023-07-126__Wellness ExpressPalo Verde Valley Transit AgencyBlue Route12False69c28a761e7b8186ccfab752f38df2dcWellness Express66467
944942024-10-182__Gold Route287202023-09-136__Wellness ExpressPalo Verde Valley Transit AgencyGold Route22Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
946942024-10-183__Red Route314562023-10-096__Wellness ExpressPalo Verde Valley Transit AgencyRed Route32False
947632024-10-18438B__CE438BCity of Los AngelesCE438B438B2Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
948642024-10-184__Green Route364932023-10-116__Wellness ExpressPalo Verde Valley Transit AgencyGreen Route42Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
952252024-10-18416472023-10-136__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express62False
959602024-10-18LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False6467
915742024-10-171__Blue Route474062023-11-156__Wellness ExpressPalo Verde Valley Transit AgencyBlue Route12Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
919082024-10-172__Gold Route501752023-12-136__Wellness ExpressPalo Verde Valley Transit AgencyGold Route22Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
921082024-10-173__Red Route525652024-01-176__Wellness ExpressPalo Verde Valley Transit AgencyRed Route32False
921772024-10-17438B__CE438BCity of Los AngelesCE438B438B2Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
922782024-10-174__Green Route550982024-02-146__Wellness ExpressPalo Verde Valley Transit AgencyGreen Route42False
933702024-10-17LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
890002024-10-161__Blue Route575612024-03-136__Wellness ExpressPalo Verde Valley Transit AgencyBlue Route12Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
893372024-10-162__Gold Route601352024-04-156__Wellness ExpressPalo Verde Valley Transit AgencyGold Route22Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
895372024-10-163__Red Route652032024-04-176__Wellness ExpressPalo Verde Valley Transit AgencyRed Route32False
896062024-10-16438B__CE438BCity of Los AngelesCE438B438B2Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
897082024-10-164__Green Route701612024-04-196__Wellness ExpressPalo Verde Valley Transit AgencyGreen Route42Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
900692024-10-16773652024-06-126__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express62False
907852024-10-16LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False6467
864262024-10-151__Blue Route795002024-07-176__Wellness ExpressPalo Verde Valley Transit AgencyBlue Route12Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
867612024-10-152__Gold Route818882024-08-146__Wellness ExpressPalo Verde Valley Transit AgencyGold Route22Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
869642024-10-153__Red Route845652024-09-186__Wellness ExpressPalo Verde Valley Transit AgencyRed Route32False
870332024-10-15438B__CE438BCity of Los AngelesCE438B438B2Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
871362024-10-154__Green Route870322024-10-146__Wellness ExpressPalo Verde Valley Transit AgencyGreen Route42Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
882202024-10-15LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False920722024-10-166__Wellness ExpressPalo Verde Valley Transit Agencyac9384d5e25378d1898ca522070cef66Wellness Express66467
839262024-10-141__Blue Route973962024-10-186__Wellness ExpressPalo Verde Valley Transit AgencyBlue Route12Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
842602024-10-142__Gold Route1032822024-11-136__Wellness ExpressPalo Verde Valley Transit AgencyGold Route22Falseac9384d5e25378d1898ca522070cef66Wellness Express66467
844552024-10-143__Red Route1059402024-12-116__Wellness ExpressPalo Verde Valley Transit AgencyRed Route32Falsea4fbbb85891191f714ec113dfe1a936bWellness Express66467
845232024-10-14438B__CE438BCity of Los AngelesCE438B438B2False1080132025-01-156__Wellness ExpressPalo Verde Valley Transit Agency96680f72c0c59208e055c81be87ad4a9Wellness Express66467
846262024-10-144__Green Route1104282025-02-126__Wellness ExpressPalo Verde Valley Transit AgencyGreen Route42False96680f72c0c59208e055c81be87ad4a9Wellness Express66467
849432024-10-141128922025-03-126__Wellness ExpressPalo Verde Valley Transit Agency96680f72c0c59208e055c81be87ad4a9Wellness Express62False6467
856682024-10-14LT__Laguna TripperSan Luis Obispo Regional Transit AuthorityLaguna TripperLT2False1154172025-04-166__Wellness ExpressPalo Verde Valley Transit Agency96680f72c0c59208e055c81be87ad4a9Wellness Express66467
813932024-09-181__Blue Route1182152025-05-146__Wellness ExpressPalo Verde Valley Transit AgencyBlue Route12False96680f72c0c59208e055c81be87ad4a9Wellness 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": 88, + "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": 88, + "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": 90, + "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": 95, + "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": 96, + "id": "295b0f1f-59c6-4464-9b40-d2a8d3732c1e", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "agg2_filtered = agg2.loc[(agg2.route_id > 1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "id": "ad97c748-8a45-48ce-ac21-32ba2b6eaad5", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(329, 6)" + ] + }, + "execution_count": 97, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg2_filtered.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \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
817062024-09-18523532024-02-142__Gold RoutePalo Verde Valley Transit AgencyGold Route22False
819042024-09-183__Red RoutePalo Verde Valley Transit AgencyRed Route32False
819712024-09-18438B__CE438BCity of Los AngelesCE438B438B2False
820722024-09-184__Green RoutePalo Verde Valley Transit AgencyGreen Route42False
824312024-09-186__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False
789712024-08-141__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False
\n", + "
" + ], + "text/plain": [ + " service_date recent_combined_name portfolio_organization_name \\\n", + "52353 2024-02-14 2__Gold Route Palo Verde Valley Transit Agency \n", + "\n", + " route_long_name route_short_name route_id \n", + "52353 Gold Route 2 2 " + ] + }, + "execution_count": 98, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg2_filtered.sample()" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "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": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg2_filtered.portfolio_organization_name.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "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": 168, + "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": 168, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agg2_filtered2.service_date.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 169, + "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", + " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \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
792562024-08-142__Gold RoutePalo Verde Valley Transit AgencyGold Route22False1046082024-12-11Amtrak__Amtrak Thruway Connecting Service12
794532024-08-143__Red RoutePalo Verde Valley Transit AgencyRed Route32False1072012025-01-15Amtrak__Amtrak Thruway Connecting Service12
795202024-08-14438B__CE438BCity of Los AngelesCE438B438B2False1097782025-02-12Amtrak__Amtrak Thruway Connecting Service11
796182024-08-144__Green RoutePalo Verde Valley Transit AgencyGreen Route42False1122822025-03-12Amtrak__Amtrak Thruway Connecting Service12
799522024-08-146__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False1148942025-04-16Amtrak__Amtrak Thruway Connecting Service12
767452024-07-171__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False1172982025-05-14Amtrak__Amtrak Thruway Connecting Service12
770142024-07-172__Gold RoutePalo Verde Valley Transit AgencyGold Route21046502024-12-11Amtrak__Commuter Rail2False
772022024-07-173__Red RoutePalo Verde Valley Transit AgencyRed Route31072432025-01-15Amtrak__Commuter Rail2False
772632024-07-17438B__CE438BCity of Los AngelesCE438B438B1098192025-02-12Amtrak__Commuter Rail2False
773562024-07-174__Green RoutePalo Verde Valley Transit AgencyGreen Route41123212025-03-12Amtrak__Commuter Rail2False
776062024-07-176__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express61149342025-04-16Amtrak__Commuter Rail2False
747282024-06-121__Blue RoutePalo Verde Valley Transit AgencyBlue Route11173372025-05-14Amtrak__Commuter Rail2False
749542024-06-122__Gold RoutePalo Verde Valley Transit AgencyGold Route1047212024-12-11Amtrak__Maple Leaf2
1073062025-01-15Amtrak__Maple Leaf2False
751152024-06-123__Red RoutePalo Verde Valley Transit AgencyRed Route31098822025-02-12Amtrak__Maple Leaf2False
751722024-06-12438B__CE438BCity of Los AngelesCE438B438B1123842025-03-12Amtrak__Maple Leaf2False
752562024-06-124__Green RoutePalo Verde Valley Transit AgencyGreen Route41149962025-04-16Amtrak__Maple Leaf2False
754492024-06-126__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express61173992025-05-14Amtrak__Maple Leaf2False
729422024-05-22438B__CE438B1038992024-12-11City of Los AngelesCE438B438B2False
699372024-04-205__Silver RoutePalo Verde Valley Transit AgencySilver Route51065032025-01-15City of Los AngelesCE438B2False
671622024-04-191__Blue RoutePalo Verde Valley Transit AgencyBlue Route11090852025-02-12City of Los AngelesCE438B2False
674572024-04-192__Gold RoutePalo Verde Valley Transit AgencyGold Route21115742025-03-12City of Los AngelesCE438B2False
676482024-04-193__Red RoutePalo Verde Valley Transit AgencyRed Route31141482025-04-16City of Los AngelesCE438B2False
677132024-04-19438B__CE438B1167512025-05-14City of Los AngelesCE438B438B2False
677912024-04-194__Green RoutePalo Verde Valley Transit AgencyGreen Route41042562024-12-11Los Angeles World AirportsLAX to US__FlyAway - LAX to Union Station2False
680952024-04-196__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express61068592025-01-15Los Angeles World AirportsLAX to US__FlyAway - LAX to Union Station2False
646642024-04-181__Blue RoutePalo Verde Valley Transit AgencyBlue Route11094402025-02-12Los Angeles World AirportsLAX to US__FlyAway - LAX to Union Station2False
649692024-04-182__Gold RoutePalo Verde Valley Transit AgencyGold Route21119452025-03-12Los Angeles World AirportsLAX to US__FlyAway - LAX to Union Station2False
651662024-04-183__Red RoutePalo Verde Valley Transit AgencyRed Route31145392025-04-16Los Angeles World AirportsLAX to US__FlyAway - LAX to Union Station2False
652332024-04-18438B__CE438BCity of Los AngelesCE438B438B1169352025-05-14Los Angeles World AirportsLAX to US__FlyAway - LAX to Union Station2False
653132024-04-184__Green RoutePalo Verde Valley Transit AgencyGreen Route41042572024-12-11Los Angeles World AirportsLAX to VN__FlyAway - LAX to Van Nuys2False
621702024-04-171__Blue RoutePalo Verde Valley Transit AgencyBlue Route11068602025-01-15Los Angeles World AirportsLAX to VN__FlyAway - LAX to Van Nuys2False
624902024-04-172__Gold RoutePalo Verde Valley Transit AgencyGold Route21094412025-02-12Los Angeles World AirportsLAX to VN__FlyAway - LAX to Van Nuys2False
626842024-04-173__Red RoutePalo Verde Valley Transit AgencyRed Route31119462025-03-12Los Angeles World AirportsLAX to VN__FlyAway - LAX to Van Nuys2False
627512024-04-17438B__CE438BCity of Los AngelesCE438B438B1145402025-04-16Los Angeles World AirportsLAX to VN__FlyAway - LAX to Van Nuys2False
628402024-04-174__Green RoutePalo Verde Valley Transit AgencyGreen Route41169362025-05-14Los Angeles World AirportsLAX to VN__FlyAway - LAX to Van Nuys2False
632012024-04-176__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express61045542024-12-11Los Angeles World AirportsUS to LAX__FlyAway - Union Station to LAX2False
596212024-04-161__Blue RoutePalo Verde Valley Transit AgencyBlue Route11071532025-01-15Los Angeles World AirportsUS to LAX__FlyAway - Union Station to LAX2False
599472024-04-162__Gold RoutePalo Verde Valley Transit AgencyGold Route1097312025-02-12Los Angeles World AirportsUS to LAX__FlyAway - Union Station to LAX2
1122292025-03-12Los Angeles World AirportsUS to LAX__FlyAway - Union Station to LAX2False
601502024-04-163__Red RoutePalo Verde Valley Transit AgencyRed Route31148422025-04-16Los Angeles World AirportsUS to LAX__FlyAway - Union Station to LAX2False
602192024-04-16438B__CE438BCity of Los AngelesCE438B438B1172462025-05-14Los Angeles World AirportsUS to LAX__FlyAway - Union Station to LAX2False
603122024-04-164__Green RoutePalo Verde Valley Transit AgencyGreen Route41045592024-12-11Los Angeles World AirportsVN to LAX__FlyAway - Van Nuys to LAX2False
570562024-04-151__Blue RoutePalo Verde Valley Transit AgencyBlue Route11071582025-01-15Los Angeles World AirportsVN to LAX__FlyAway - Van Nuys to LAX2False
573852024-04-152__Gold RoutePalo Verde Valley Transit AgencyGold Route1097362025-02-12Los Angeles World AirportsVN to LAX__FlyAway - Van Nuys to LAX2
1122342025-03-12Los Angeles World AirportsVN to LAX__FlyAway - Van Nuys to LAX2False
575882024-04-153__Red RoutePalo Verde Valley Transit AgencyRed Route31148472025-04-16Los Angeles World AirportsVN to LAX__FlyAway - Van Nuys to LAX2False
576572024-04-15438B__CE438BCity of Los AngelesCE438B438B1172512025-05-14Los Angeles World AirportsVN to LAX__FlyAway - Van Nuys to LAX2False
577502024-04-154__Green Route1025192024-12-11Palo Verde Valley Transit AgencyGreen Route41__Blue Route2False
581122024-04-156__Wellness Express1051372025-01-15Palo Verde Valley Transit AgencyWellness Express61__Blue Route2False
545762024-03-131__Blue Route1077032025-02-12Palo Verde Valley Transit AgencyBlue Route11__Blue Route2False
548842024-03-132__Gold Route1102652025-03-12Palo Verde Valley Transit AgencyGold Route21__Blue Route2False
550802024-03-133__Red Route1127832025-04-16Palo Verde Valley Transit AgencyRed Route31__Blue Route2False
551502024-03-13438B__CE438BCity of Los AngelesCE438B438B1153922025-05-14Palo Verde Valley Transit Agency1__Blue Route2False
552422024-03-134__Green Route1028352024-12-11Palo Verde Valley Transit AgencyGreen Route42__Gold Route2False
555992024-03-136__Wellness Express1054492025-01-15Palo Verde Valley Transit AgencyWellness Express62__Gold Route2False
520652024-02-141__Blue Route1080172025-02-12Palo Verde Valley Transit AgencyBlue Route12__Gold Route2False
523892024-02-142__Gold Route1130942025-04-16Palo Verde Valley Transit AgencyGold Route22__Gold Route2False
525902024-02-143__Red Route1156962025-05-14Palo Verde Valley Transit AgencyRed Route32__Gold Route2False
526592024-02-14438B__CE438BCity of Los AngelesCE438B438B1030312024-12-11Palo Verde Valley Transit Agency3__Red Route2False
527512024-02-144__Green Route1056472025-01-15Palo Verde Valley Transit AgencyGreen Route43__Red Route2False
531192024-02-146__Wellness Express1082192025-02-12Palo Verde Valley Transit AgencyWellness Express63__Red Route2False
496132024-01-171__Blue Route1107472025-03-12Palo Verde Valley Transit AgencyBlue Route13__Red Route2False
499142024-01-172__Gold Route1132922025-04-16Palo Verde Valley Transit AgencyGold Route23__Red Route2False
501082024-01-173__Red Route1158932025-05-14Palo Verde Valley Transit AgencyRed Route33__Red Route2False
501722024-01-17438B__CE438BCity of Los AngelesCE438B438B1031742024-12-11Palo Verde Valley Transit Agency4__Green Route2False
502522024-01-174__Green Route1057882025-01-15Palo Verde Valley Transit AgencyGreen Route44__Green Route2False
506112024-01-176__Wellness Express1083602025-02-12Palo Verde Valley Transit AgencyWellness Express64__Green Route2False
470932023-12-131__Blue Route1108742025-03-12Palo Verde Valley Transit AgencyBlue Route14__Green Route2False
474162023-12-132__Gold Route1134302025-04-16Palo Verde Valley Transit AgencyGold Route24__Green Route2False
476202023-12-133__Red Route1160282025-05-14Palo Verde Valley Transit AgencyRed Route34__Green Route2False
476882023-12-13438B__CE438BCity of Los AngelesCE438B438B1035212024-12-11Palo Verde Valley Transit Agency6__Wellness Express2False
477822023-12-134__Green Route1061272025-01-15Palo Verde Valley Transit AgencyGreen Route46__Wellness Express2False
481532023-12-136__Wellness Express1087062025-02-12Palo Verde Valley Transit AgencyWellness Express66__Wellness Express2False
445352023-11-151__Blue Route1112082025-03-12Palo Verde Valley Transit AgencyBlue Route16__Wellness Express2False
448332023-11-152__Gold Route1137722025-04-16Palo Verde Valley Transit AgencyGold Route26__Wellness Express2False
450362023-11-153__Red Route1163682025-05-14Palo Verde Valley Transit AgencyRed Route36__Wellness Express2False
451042023-11-15438B__CE438BCity of Los AngelesCE438B438B1042642024-12-11San Luis Obispo Regional Transit AuthorityLT__Laguna Tripper2False
451982023-11-154__Green RoutePalo Verde Valley Transit AgencyGreen Route41068682025-01-15San Luis Obispo Regional Transit AuthorityLT__Laguna Tripper2False
455662023-11-156__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express61094472025-02-12San Luis Obispo Regional Transit AuthorityLT__Laguna Tripper2False
459562023-11-15CCA/Adobe__Mission Bay Transportation Management AgencyCCA/Adobe1119522025-03-12San Luis Obispo Regional Transit AuthorityLT__Laguna Tripper2False
459972023-11-15East__Mission Bay Transportation Management AgencyEast1145472025-04-16San Luis Obispo Regional Transit AuthorityLT__Laguna Tripper2False
464542023-11-15TC__Transbay-CaltrainMission Bay Transportation Management AgencyTransbay-CaltrainTC1169432025-05-14San Luis Obispo Regional Transit AuthorityLT__Laguna Tripper2False
\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": 169, + "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": 160, + "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", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \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
464852023-11-15West__Mission Bay Transportation Management AgencyWest2False181cc53a0dbf5df90e3009b9cb5d89d80baLA DOT ScheduleCity of Los Angeles2025-01-15
418922023-10-145__Silver RoutePalo Verde Valley Transit AgencySilver Route52False182cc53a0dbf5df90e3009b9cb5d89d80baLA DOT ScheduleCity of Los Angeles2025-02-12
389052023-10-131__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False179cc53a0dbf5df90e3009b9cb5d89d80baLA DOT ScheduleCity of Los Angeles2025-03-12
392162023-10-132__Gold RoutePalo Verde Valley Transit AgencyGold Route22False185cc53a0dbf5df90e3009b9cb5d89d80baLA DOT ScheduleCity of Los Angeles2025-04-16
394072023-10-133__Red RoutePalo Verde Valley Transit AgencyRed Route32False184cc53a0dbf5df90e3009b9cb5d89d80baLA 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": 160, + "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": 102, + "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", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \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
394762023-10-131082212025-01-15438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B2False
395642023-10-134__Green RoutePalo Verde Valley Transit AgencyGreen Route42False1458
399152023-10-136__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False1082242025-01-15438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B4278
402972023-10-13CCA/Adobe__Mission Bay Transportation Management AgencyCCA/Adobe2False1108222025-02-12438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B1458
403382023-10-13East__Mission Bay Transportation Management AgencyEast2False1108252025-02-12438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B4278
407942023-10-13TC__Transbay-CaltrainMission Bay Transportation Management AgencyTransbay-CaltrainTC2False1132632025-03-12438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B1458
408242023-10-13West__Mission Bay Transportation Management AgencyWest2False1134092025-03-12438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B4278
363802023-10-121__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False1159722025-04-16438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B1458
366872023-10-122__Gold RoutePalo Verde Valley Transit AgencyGold Route22False1159742025-04-16438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B4278
368782023-10-123__Red RoutePalo Verde Valley Transit AgencyRed Route32False1183832025-05-14438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B1458
369462023-10-121183862025-05-14438B__CE438BCity of Los Angelescc53a0dbf5df90e3009b9cb5d89d80baCE438B438B2False4278
\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": 103, + "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": 105, + "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", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \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
370342023-10-124__Green RoutePalo Verde Valley Transit AgencyGreen Route42False1175672025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting Service42933
377732023-10-12CCA/Adobe__Mission Bay Transportation Management Agency1175642025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting ServiceCCA/Adobe2False42920
378142023-10-12East__Mission Bay Transportation Management Agency1175632025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting ServiceEast2False18650
382642023-10-12TC__Transbay-CaltrainMission Bay Transportation Management AgencyTransbay-CaltrainTC2False1175572025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting Service43
382952023-10-12West__Mission Bay Transportation Management Agency1175602025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting ServiceWest2False42896
338062023-10-111__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False1175552025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting Service42891
341262023-10-112__Gold RoutePalo Verde Valley Transit AgencyGold Route22False1175532025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting Service42954
343252023-10-113__Red RoutePalo Verde Valley Transit AgencyRed Route32False1175712025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting Service42958
343932023-10-11438B__CE438BCity of Los AngelesCE438B438B2False1175622025-05-14__Amtrak Thruway Connecting ServiceAmtrak48e137bc977da88970393f629c18432cAmtrak Thruway Connecting Service42912
344862023-10-114__Green RoutePalo Verde Valley Transit AgencyGreen Route42False1175742025-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": 151, + "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": 161, + "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", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \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
348502023-10-116__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False10348e137bc977da88970393f629c18432cAmtrak ScheduleAmtrak2025-01-15
352422023-10-11CCA/Adobe__Mission Bay Transportation Management AgencyCCA/Adobe2False10448e137bc977da88970393f629c18432cAmtrak ScheduleAmtrak2025-02-12
352832023-10-11East__Mission Bay Transportation Management AgencyEast2False10448e137bc977da88970393f629c18432cAmtrak ScheduleAmtrak2025-03-12
357372023-10-11TC__Transbay-CaltrainMission Bay Transportation Management AgencyTransbay-CaltrainTC2False10348e137bc977da88970393f629c18432cAmtrak ScheduleAmtrak2025-04-16
357692023-10-11West__Mission Bay Transportation Management AgencyWest2False10048e137bc977da88970393f629c18432cAmtrak 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": 161, + "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": 116, + "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": 116, + "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": 115, + "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", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \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
312222023-10-101__Blue Route1034122024-12-112__Gold RoutePalo Verde Valley Transit AgencyBlue Route14383eb1cca04093020f1583f57f32d9bGold Route2False5965
315392023-10-101077252025-01-152__Gold RoutePalo Verde Valley Transit Agency96680f72c0c59208e055c81be87ad4a9Gold Route22False361
317392023-10-103__Red Route1084202025-01-152__Gold RoutePalo Verde Valley Transit AgencyRed Route32False
318072023-10-10438B__CE438BCity of Los AngelesCE438B438B4383eb1cca04093020f1583f57f32d9bGold Route2False5965
319012023-10-104__Green Route1104302025-02-122__Gold RoutePalo Verde Valley Transit AgencyGreen Route42False
326582023-10-10CCA/Adobe__Mission Bay Transportation Management AgencyCCA/Adobe2False
326992023-10-10East__Mission Bay Transportation Management AgencyEast2False
331592023-10-10TC__Transbay-CaltrainMission Bay Transportation Management AgencyTransbay-CaltrainTC2False
331902023-10-10West__Mission Bay Transportation Management AgencyWest96680f72c0c59208e055c81be87ad4a9Gold Route2False361
287392023-10-091__Blue Route1110202025-02-122__Gold RoutePalo Verde Valley Transit AgencyBlue Route14383eb1cca04093020f1583f57f32d9bGold Route2False5965
290542023-10-091135472025-03-122__Gold RoutePalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bGold Route22False5965
292442023-10-093__Red Route1154192025-04-162__Gold RoutePalo Verde Valley Transit AgencyRed Route396680f72c0c59208e055c81be87ad4a9Gold Route2False361
293122023-10-09438B__CE438BCity of Los AngelesCE438B438B1161712025-04-162__Gold RoutePalo Verde Valley Transit Agency4383eb1cca04093020f1583f57f32d9bGold Route2False5965
294032023-10-094__Green Route1178282025-05-142__Gold RoutePalo Verde Valley Transit AgencyGreen Route496680f72c0c59208e055c81be87ad4a9Gold Route2False361
297232023-10-096__Wellness Express1185852025-05-142__Gold RoutePalo Verde Valley Transit AgencyWellness Express64383eb1cca04093020f1583f57f32d9bGold Route2False5965
301082023-10-09CCA/Adobe__Mission Bay Transportation Management AgencyCCA/Adobe2False
\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", + " schedule_gtfs_dataset_key route_long_name route_short_name \\\n", + "103412 4383eb1cca04093020f1583f57f32d9b Gold Route 2 \n", + "107725 96680f72c0c59208e055c81be87ad4a9 Gold Route 2 \n", + "108420 4383eb1cca04093020f1583f57f32d9b Gold Route 2 \n", + "110430 96680f72c0c59208e055c81be87ad4a9 Gold Route 2 \n", + "111020 4383eb1cca04093020f1583f57f32d9b Gold Route 2 \n", + "113547 4383eb1cca04093020f1583f57f32d9b Gold Route 2 \n", + "115419 96680f72c0c59208e055c81be87ad4a9 Gold Route 2 \n", + "116171 4383eb1cca04093020f1583f57f32d9b Gold Route 2 \n", + "117828 96680f72c0c59208e055c81be87ad4a9 Gold Route 2 \n", + "118585 4383eb1cca04093020f1583f57f32d9b Gold Route 2 \n", + "\n", + " route_id \n", + "103412 5965 \n", + "107725 361 \n", + "108420 5965 \n", + "110430 361 \n", + "111020 5965 \n", + "113547 5965 \n", + "115419 361 \n", + "116171 5965 \n", + "117828 361 \n", + "118585 5965 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "inspect_recent_rows(df, \"Gold Route\")" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "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" + ] + }, + { + "cell_type": "code", + "execution_count": 164, + "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", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \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
301482023-10-09East__Mission Bay Transportation Management AgencyEast2False2107891c0d5e91c8dccf88536129dbac084SLORTA ScheduleSan Luis Obispo Regional Transit Authority2025-01-15
306042023-10-09TC__Transbay-CaltrainMission Bay Transportation Management AgencyTransbay-CaltrainTC2False2107891c0d5e91c8dccf88536129dbac084SLORTA ScheduleSan Luis Obispo Regional Transit Authority2025-02-12
306352023-10-09West__Mission Bay Transportation Management AgencyWest2False2097891c0d5e91c8dccf88536129dbac084SLORTA ScheduleSan Luis Obispo Regional Transit Authority2025-03-12
262122023-09-131__Blue RoutePalo Verde Valley Transit AgencyBlue Route12False2167891c0d5e91c8dccf88536129dbac084SLORTA ScheduleSan Luis Obispo Regional Transit Authority2025-04-16
265262023-09-132__Gold RoutePalo Verde Valley Transit AgencyGold Route22False2157891c0d5e91c8dccf88536129dbac084SLORTA 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": 164, + "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": 120, + "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", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \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
267202023-09-133__Red RoutePalo Verde Valley Transit AgencyRed Route32False1059592025-01-15LT__Laguna TripperSan Luis Obispo Regional Transit Authorityf4c3ea214214ee0d96f7646b3e9d69dcLaguna TripperLT11806
267892023-09-13438B__CE438BCity of Los AngelesCE438B438B2False1073762025-01-15LT__Laguna TripperSan Luis Obispo Regional Transit Authorityb475cf3b7ceaae9fc30b22cb8d3a1e33Laguna TripperLT11096761
268792023-09-134__Green RoutePalo Verde Valley Transit AgencyGreen Route42False1085492025-02-12LT__Laguna TripperSan Luis Obispo Regional Transit Authorityf4c3ea214214ee0d96f7646b3e9d69dcLaguna TripperLT11806
272392023-09-136__Wellness ExpressPalo Verde Valley Transit AgencyWellness Express62False1100682025-02-12LT__Laguna TripperSan Luis Obispo Regional Transit Authorityb475cf3b7ceaae9fc30b22cb8d3a1e33Laguna TripperLT11096761
276222023-09-13CCA/Adobe__Mission Bay Transportation Management AgencyCCA/Adobe2False1111472025-03-12LT__Laguna TripperSan Luis Obispo Regional Transit Authorityf4c3ea214214ee0d96f7646b3e9d69dcLaguna TripperLT11806
276592023-09-13East__Mission Bay Transportation Management AgencyEast2False1125522025-03-12LT__Laguna TripperSan Luis Obispo Regional Transit Authorityb475cf3b7ceaae9fc30b22cb8d3a1e33Laguna TripperLT11096761
280962023-09-13TC__Transbay-CaltrainMission Bay Transportation Management AgencyTransbay-CaltrainTC2False1156762025-04-16LT__Laguna TripperSan Luis Obispo Regional Transit Authorityf4c3ea214214ee0d96f7646b3e9d69dcLaguna TripperLT11806
281262023-09-13West__Mission Bay Transportation Management AgencyWest2False1157372025-04-16LT__Laguna TripperSan Luis Obispo Regional Transit Authorityb475cf3b7ceaae9fc30b22cb8d3a1e33Laguna TripperLT11096761
242722023-08-15438B__CE438BCity of Los AngelesCE438B438B2False1163092025-05-14LT__Laguna TripperSan Luis Obispo Regional Transit Authorityf4c3ea214214ee0d96f7646b3e9d69dcLaguna TripperLT11806
251052023-08-15CCA/Adobe__Mission Bay Transportation Management AgencyCCA/Adobe2False1174892025-05-14LT__Laguna TripperSan Luis Obispo Regional Transit Authorityb475cf3b7ceaae9fc30b22cb8d3a1e33Laguna TripperLT11096761
251402023-08-15East__Mission Bay Transportation Management AgencyEast2False
\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 \\\n", + "105959 San Luis Obispo Regional Transit Authority \n", + "107376 San Luis Obispo Regional Transit Authority \n", + "108549 San Luis Obispo Regional Transit Authority \n", + "110068 San Luis Obispo Regional Transit Authority \n", + "111147 San Luis Obispo Regional Transit Authority \n", + "112552 San Luis Obispo Regional Transit Authority \n", + "115676 San Luis Obispo Regional Transit Authority \n", + "115737 San Luis Obispo Regional Transit Authority \n", + "116309 San Luis Obispo Regional Transit Authority \n", + "117489 San Luis Obispo Regional Transit Authority \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": 119, + "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": 121, + "id": "3c5ad328-7531-4705-ba9e-edcbc7c61588", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['CCA/Adobe', 'East', 'TC Transbay-Caltrain', 'West'], dtype=object)" + ] + }, + "execution_count": 121, + "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": 165, + "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \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
255842023-08-15TC__Transbay-Caltrain68749380f1a9f225d9123762d83ea2f50dBay Area 511 Mission Bay ScheduleMission Bay Transportation Management AgencyTransbay-CaltrainTC2False2025-01-15
256152023-08-15West__70749380f1a9f225d9123762d83ea2f50dBay Area 511 Mission Bay ScheduleMission Bay Transportation Management AgencyWest2False
218932023-07-12438B__CE438BCity of Los AngelesCE438B438B2False
195132023-06-14438B__CE438BCity of Los AngelesCE438B438B2False
172602023-05-17438B__CE438BCity of Los AngelesCE438B438B2False
124422023-04-14438B__CE438BCity of Los AngelesCE438B438B2False
101112023-04-13438B__CE438BCity of Los AngelesCE438B438B2False
77902023-04-12438B__CE438BCity of Los AngelesCE438B438B2False2025-02-12
54692023-04-11438B__CE438BCity of Los AngelesCE438B438B2False71749380f1a9f225d9123762d83ea2f50dBay Area 511 Mission Bay ScheduleMission Bay Transportation Management Agency2025-03-12
31572023-04-10438B__CE438BCity of Los AngelesCE438B438B2False69749380f1a9f225d9123762d83ea2f50dBay Area 511 Mission Bay ScheduleMission Bay Transportation Management Agency2025-04-16
8452023-03-15438B__CE438BCity of Los AngelesCE438B438B2False68749380f1a9f225d9123762d83ea2f50dBay Area 511 Mission Bay ScheduleMission Bay Transportation Management Agency2025-05-14
\n", "
" ], "text/plain": [ - " service_date recent_combined_name \\\n", - "115399 2025-05-14 18__UCLA - Marina del Rey \n", - "115437 2025-05-14 1__Blue Route \n", - "115763 2025-05-14 2__Gold Route \n", - "115974 2025-05-14 3__Red Route \n", - "116041 2025-05-14 438B__CE438B \n", - "116045 2025-05-14 43__26th Street \n", - "116140 2025-05-14 4__Green Route \n", - "116498 2025-05-14 6__Wellness Express \n", - "116804 2025-05-14 9__Pacific Palisades \n", - "117034 2025-05-14 LAX to US__FlyAway - LAX to Union Station \n", - "117035 2025-05-14 LAX to VN__FlyAway - LAX to Van Nuys \n", - "117042 2025-05-14 LT__Laguna Tripper \n", - "117134 2025-05-14 R10__Downtown LA Freeway Express \n", - "117279 2025-05-14 US to LAX__FlyAway - Union Station to LAX \n", - "117285 2025-05-14 VN to LAX__FlyAway - Van Nuys to LAX \n", - "112777 2025-04-16 18__UCLA - Marina del Rey \n", - "112814 2025-04-16 1__Blue Route \n", - "113147 2025-04-16 2__Gold Route \n", - "113359 2025-04-16 3__Red Route \n", - "113429 2025-04-16 438B__CE438B \n", - "113433 2025-04-16 43__26th Street \n", - "113527 2025-04-16 4__Green Route \n", - "113887 2025-04-16 6__Wellness Express \n", - "114188 2025-04-16 9__Pacific Palisades \n", - "114625 2025-04-16 LAX to US__FlyAway - LAX to Union Station \n", - "114626 2025-04-16 LAX to VN__FlyAway - LAX to Van Nuys \n", - "114633 2025-04-16 LT__Laguna Tripper \n", - "114721 2025-04-16 R10__Downtown LA Freeway Express \n", - "114860 2025-04-16 US to LAX__FlyAway - Union Station to LAX \n", - "114866 2025-04-16 VN to LAX__FlyAway - Van Nuys to LAX \n", - "110249 2025-03-12 18__UCLA - Marina del Rey \n", - "110281 2025-03-12 1__Blue Route \n", - "110799 2025-03-12 3__Red Route \n", - "110870 2025-03-12 438B__CE438B \n", - "110874 2025-03-12 43__26th Street \n", - "110957 2025-03-12 4__Green Route \n", - "111309 2025-03-12 6__Wellness Express \n", - "111600 2025-03-12 9__Pacific Palisades \n", - "112017 2025-03-12 LAX to US__FlyAway - LAX to Union Station \n", - "112018 2025-03-12 LAX to VN__FlyAway - LAX to Van Nuys \n", - "112024 2025-03-12 LT__Laguna Tripper \n", - "112105 2025-03-12 R10__Downtown LA Freeway Express \n", - "112233 2025-03-12 US to LAX__FlyAway - Union Station to LAX \n", - "112239 2025-03-12 VN to LAX__FlyAway - Van Nuys to LAX \n", - "107715 2025-02-12 1__Blue Route \n", - "108050 2025-02-12 2__Gold Route \n", - "108264 2025-02-12 3__Red Route \n", - "108333 2025-02-12 438B__CE438B \n", - "108436 2025-02-12 4__Green Route \n", - "108799 2025-02-12 6__Wellness Express \n", - "109502 2025-02-12 LAX to US__FlyAway - LAX to Union Station \n", - "109503 2025-02-12 LAX to VN__FlyAway - LAX to Van Nuys \n", - "109509 2025-02-12 LT__Laguna Tripper \n", - "109721 2025-02-12 US to LAX__FlyAway - Union Station to LAX \n", - "109727 2025-02-12 VN to LAX__FlyAway - Van Nuys to LAX \n", - "105149 2025-01-15 1__Blue Route \n", - "105482 2025-01-15 2__Gold Route \n", - "105692 2025-01-15 3__Red Route \n", - "105762 2025-01-15 438B__CE438B \n", - "105864 2025-01-15 4__Green Route \n", - "106220 2025-01-15 6__Wellness Express \n", - "106921 2025-01-15 LAX to US__FlyAway - LAX to Union Station \n", - "106922 2025-01-15 LAX to VN__FlyAway - LAX to Van Nuys \n", - "106930 2025-01-15 LT__Laguna Tripper \n", - "107143 2025-01-15 US to LAX__FlyAway - Union Station to LAX \n", - "107149 2025-01-15 VN to LAX__FlyAway - Van Nuys to LAX \n", - "102532 2024-12-11 1__Blue Route \n", - "102869 2024-12-11 2__Gold Route \n", - "103077 2024-12-11 3__Red Route \n", - "103146 2024-12-11 438B__CE438B \n", - "103251 2024-12-11 4__Green Route \n", - "103615 2024-12-11 6__Wellness Express \n", - "104318 2024-12-11 LAX to US__FlyAway - LAX to Union Station \n", - "104319 2024-12-11 LAX to VN__FlyAway - LAX to Van Nuys \n", - "104326 2024-12-11 LT__Laguna Tripper \n", - "104544 2024-12-11 US to LAX__FlyAway - Union Station to LAX \n", - "104550 2024-12-11 VN to LAX__FlyAway - Van Nuys to LAX \n", - "99894 2024-11-13 1__Blue Route \n", - "100232 2024-11-13 2__Gold Route \n", - "100438 2024-11-13 3__Red Route \n", - "100507 2024-11-13 438B__CE438B \n", - "100611 2024-11-13 4__Green Route \n", - "100975 2024-11-13 6__Wellness Express \n", - "101692 2024-11-13 LT__Laguna Tripper \n", - "97199 2024-10-19 5__Silver Route \n", - "94157 2024-10-18 1__Blue Route \n", - "94494 2024-10-18 2__Gold Route \n", - "94694 2024-10-18 3__Red Route \n", - "94763 2024-10-18 438B__CE438B \n", - "94864 2024-10-18 4__Green Route \n", - "95225 2024-10-18 6__Wellness Express \n", - "95960 2024-10-18 LT__Laguna Tripper \n", - "91574 2024-10-17 1__Blue Route \n", - "91908 2024-10-17 2__Gold Route \n", - "92108 2024-10-17 3__Red Route \n", - "92177 2024-10-17 438B__CE438B \n", - "92278 2024-10-17 4__Green Route \n", - "93370 2024-10-17 LT__Laguna Tripper \n", - "89000 2024-10-16 1__Blue Route \n", - "89337 2024-10-16 2__Gold Route \n", - "89537 2024-10-16 3__Red Route \n", - "89606 2024-10-16 438B__CE438B \n", - "89708 2024-10-16 4__Green Route \n", - "90069 2024-10-16 6__Wellness Express \n", - "90785 2024-10-16 LT__Laguna Tripper \n", - "86426 2024-10-15 1__Blue Route \n", - "86761 2024-10-15 2__Gold Route \n", - "86964 2024-10-15 3__Red Route \n", - "87033 2024-10-15 438B__CE438B \n", - "87136 2024-10-15 4__Green Route \n", - "88220 2024-10-15 LT__Laguna Tripper \n", - "83926 2024-10-14 1__Blue Route \n", - "84260 2024-10-14 2__Gold Route \n", - "84455 2024-10-14 3__Red Route \n", - "84523 2024-10-14 438B__CE438B \n", - "84626 2024-10-14 4__Green Route \n", - "84943 2024-10-14 6__Wellness Express \n", - "85668 2024-10-14 LT__Laguna Tripper \n", - "81393 2024-09-18 1__Blue Route \n", - "81706 2024-09-18 2__Gold Route \n", - "81904 2024-09-18 3__Red Route \n", - "81971 2024-09-18 438B__CE438B \n", - "82072 2024-09-18 4__Green Route \n", - "82431 2024-09-18 6__Wellness Express \n", - "78971 2024-08-14 1__Blue Route \n", - "79256 2024-08-14 2__Gold Route \n", - "79453 2024-08-14 3__Red Route \n", - "79520 2024-08-14 438B__CE438B \n", - "79618 2024-08-14 4__Green Route \n", - "79952 2024-08-14 6__Wellness Express \n", - "76745 2024-07-17 1__Blue Route \n", - "77014 2024-07-17 2__Gold Route \n", - "77202 2024-07-17 3__Red Route \n", - "77263 2024-07-17 438B__CE438B \n", - "77356 2024-07-17 4__Green Route \n", - "77606 2024-07-17 6__Wellness Express \n", - "74728 2024-06-12 1__Blue Route \n", - "74954 2024-06-12 2__Gold Route \n", - "75115 2024-06-12 3__Red Route \n", - "75172 2024-06-12 438B__CE438B \n", - "75256 2024-06-12 4__Green Route \n", - "75449 2024-06-12 6__Wellness Express \n", - "72942 2024-05-22 438B__CE438B \n", - "69937 2024-04-20 5__Silver Route \n", - "67162 2024-04-19 1__Blue Route \n", - "67457 2024-04-19 2__Gold Route \n", - "67648 2024-04-19 3__Red Route \n", - "67713 2024-04-19 438B__CE438B \n", - "67791 2024-04-19 4__Green Route \n", - "68095 2024-04-19 6__Wellness Express \n", - "64664 2024-04-18 1__Blue Route \n", - "64969 2024-04-18 2__Gold Route \n", - "65166 2024-04-18 3__Red Route \n", - "65233 2024-04-18 438B__CE438B \n", - "65313 2024-04-18 4__Green Route \n", - "62170 2024-04-17 1__Blue Route \n", - "62490 2024-04-17 2__Gold Route \n", - "62684 2024-04-17 3__Red Route \n", - "62751 2024-04-17 438B__CE438B \n", - "62840 2024-04-17 4__Green Route \n", - "63201 2024-04-17 6__Wellness Express \n", - "59621 2024-04-16 1__Blue Route \n", - "59947 2024-04-16 2__Gold Route \n", - "60150 2024-04-16 3__Red Route \n", - "60219 2024-04-16 438B__CE438B \n", - "60312 2024-04-16 4__Green Route \n", - "57056 2024-04-15 1__Blue Route \n", - "57385 2024-04-15 2__Gold Route \n", - "57588 2024-04-15 3__Red Route \n", - "57657 2024-04-15 438B__CE438B \n", - "57750 2024-04-15 4__Green Route \n", - "58112 2024-04-15 6__Wellness Express \n", - "54576 2024-03-13 1__Blue Route \n", - "54884 2024-03-13 2__Gold Route \n", - "55080 2024-03-13 3__Red Route \n", - "55150 2024-03-13 438B__CE438B \n", - "55242 2024-03-13 4__Green Route \n", - "55599 2024-03-13 6__Wellness Express \n", - "52065 2024-02-14 1__Blue Route \n", - "52389 2024-02-14 2__Gold Route \n", - "52590 2024-02-14 3__Red Route \n", - "52659 2024-02-14 438B__CE438B \n", - "52751 2024-02-14 4__Green Route \n", - "53119 2024-02-14 6__Wellness Express \n", - "49613 2024-01-17 1__Blue Route \n", - "49914 2024-01-17 2__Gold Route \n", - "50108 2024-01-17 3__Red Route \n", - "50172 2024-01-17 438B__CE438B \n", - "50252 2024-01-17 4__Green Route \n", - "50611 2024-01-17 6__Wellness Express \n", - "47093 2023-12-13 1__Blue Route \n", - "47416 2023-12-13 2__Gold Route \n", - "47620 2023-12-13 3__Red Route \n", - "47688 2023-12-13 438B__CE438B \n", - "47782 2023-12-13 4__Green Route \n", - "48153 2023-12-13 6__Wellness Express \n", - "44535 2023-11-15 1__Blue Route \n", - "44833 2023-11-15 2__Gold Route \n", - "45036 2023-11-15 3__Red Route \n", - "45104 2023-11-15 438B__CE438B \n", - "45198 2023-11-15 4__Green Route \n", - "45566 2023-11-15 6__Wellness Express \n", - "45956 2023-11-15 CCA/Adobe__ \n", - "45997 2023-11-15 East__ \n", - "46454 2023-11-15 TC__Transbay-Caltrain \n", - "46485 2023-11-15 West__ \n", - "41892 2023-10-14 5__Silver Route \n", - "38905 2023-10-13 1__Blue Route \n", - "39216 2023-10-13 2__Gold Route \n", - "39407 2023-10-13 3__Red Route \n", - "39476 2023-10-13 438B__CE438B \n", - "39564 2023-10-13 4__Green Route \n", - "39915 2023-10-13 6__Wellness Express \n", - "40297 2023-10-13 CCA/Adobe__ \n", - "40338 2023-10-13 East__ \n", - "40794 2023-10-13 TC__Transbay-Caltrain \n", - "40824 2023-10-13 West__ \n", - "36380 2023-10-12 1__Blue Route \n", - "36687 2023-10-12 2__Gold Route \n", - "36878 2023-10-12 3__Red Route \n", - "36946 2023-10-12 438B__CE438B \n", - "37034 2023-10-12 4__Green Route \n", - "37773 2023-10-12 CCA/Adobe__ \n", - "37814 2023-10-12 East__ \n", - "38264 2023-10-12 TC__Transbay-Caltrain \n", - "38295 2023-10-12 West__ \n", - "33806 2023-10-11 1__Blue Route \n", - "34126 2023-10-11 2__Gold Route \n", - "34325 2023-10-11 3__Red Route \n", - "34393 2023-10-11 438B__CE438B \n", - "34486 2023-10-11 4__Green Route \n", - "34850 2023-10-11 6__Wellness Express \n", - "35242 2023-10-11 CCA/Adobe__ \n", - "35283 2023-10-11 East__ \n", - "35737 2023-10-11 TC__Transbay-Caltrain \n", - "35769 2023-10-11 West__ \n", - "31222 2023-10-10 1__Blue Route \n", - "31539 2023-10-10 2__Gold Route \n", - "31739 2023-10-10 3__Red Route \n", - "31807 2023-10-10 438B__CE438B \n", - "31901 2023-10-10 4__Green Route \n", - "32658 2023-10-10 CCA/Adobe__ \n", - "32699 2023-10-10 East__ \n", - "33159 2023-10-10 TC__Transbay-Caltrain \n", - "33190 2023-10-10 West__ \n", - "28739 2023-10-09 1__Blue Route \n", - "29054 2023-10-09 2__Gold Route \n", - "29244 2023-10-09 3__Red Route \n", - "29312 2023-10-09 438B__CE438B \n", - "29403 2023-10-09 4__Green Route \n", - "29723 2023-10-09 6__Wellness Express \n", - "30108 2023-10-09 CCA/Adobe__ \n", - "30148 2023-10-09 East__ \n", - "30604 2023-10-09 TC__Transbay-Caltrain \n", - "30635 2023-10-09 West__ \n", - "26212 2023-09-13 1__Blue Route \n", - "26526 2023-09-13 2__Gold Route \n", - "26720 2023-09-13 3__Red Route \n", - "26789 2023-09-13 438B__CE438B \n", - "26879 2023-09-13 4__Green Route \n", - "27239 2023-09-13 6__Wellness Express \n", - "27622 2023-09-13 CCA/Adobe__ \n", - "27659 2023-09-13 East__ \n", - "28096 2023-09-13 TC__Transbay-Caltrain \n", - "28126 2023-09-13 West__ \n", - "24272 2023-08-15 438B__CE438B \n", - "25105 2023-08-15 CCA/Adobe__ \n", - "25140 2023-08-15 East__ \n", - "25584 2023-08-15 TC__Transbay-Caltrain \n", - "25615 2023-08-15 West__ \n", - "21893 2023-07-12 438B__CE438B \n", - "19513 2023-06-14 438B__CE438B \n", - "17260 2023-05-17 438B__CE438B \n", - "12442 2023-04-14 438B__CE438B \n", - "10111 2023-04-13 438B__CE438B \n", - "7790 2023-04-12 438B__CE438B \n", - "5469 2023-04-11 438B__CE438B \n", - "3157 2023-04-10 438B__CE438B \n", - "845 2023-03-15 438B__CE438B \n", + " 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", - " portfolio_organization_name \\\n", - "115399 City of Santa Monica \n", - "115437 Palo Verde Valley Transit Agency \n", - "115763 Palo Verde Valley Transit Agency \n", - "115974 Palo Verde Valley Transit Agency \n", - "116041 City of Los Angeles \n", - "116045 City of Santa Monica \n", - "116140 Palo Verde Valley Transit Agency \n", - "116498 Palo Verde Valley Transit Agency \n", - "116804 City of Santa Monica \n", - "117034 Los Angeles World Airports \n", - "117035 Los Angeles World Airports \n", - "117042 San Luis Obispo Regional Transit Authority \n", - "117134 City of Santa Monica \n", - "117279 Los Angeles World Airports \n", - "117285 Los Angeles World Airports \n", - "112777 City of Santa Monica \n", - "112814 Palo Verde Valley Transit Agency \n", - "113147 Palo Verde Valley Transit Agency \n", - "113359 Palo Verde Valley Transit Agency \n", - "113429 City of Los Angeles \n", - "113433 City of Santa Monica \n", - "113527 Palo Verde Valley Transit Agency \n", - "113887 Palo Verde Valley Transit Agency \n", - "114188 City of Santa Monica \n", - "114625 Los Angeles World Airports \n", - "114626 Los Angeles World Airports \n", - "114633 San Luis Obispo Regional Transit Authority \n", - "114721 City of Santa Monica \n", - "114860 Los Angeles World Airports \n", - "114866 Los Angeles World Airports \n", - "110249 City of Santa Monica \n", - "110281 Palo Verde Valley Transit Agency \n", - "110799 Palo Verde Valley Transit Agency \n", - "110870 City of Los Angeles \n", - "110874 City of Santa Monica \n", - "110957 Palo Verde Valley Transit Agency \n", - "111309 Palo Verde Valley Transit Agency \n", - "111600 City of Santa Monica \n", - "112017 Los Angeles World Airports \n", - "112018 Los Angeles World Airports \n", - "112024 San Luis Obispo Regional Transit Authority \n", - "112105 City of Santa Monica \n", - "112233 Los Angeles World Airports \n", - "112239 Los Angeles World Airports \n", - "107715 Palo Verde Valley Transit Agency \n", - "108050 Palo Verde Valley Transit Agency \n", - "108264 Palo Verde Valley Transit Agency \n", - "108333 City of Los Angeles \n", - "108436 Palo Verde Valley Transit Agency \n", - "108799 Palo Verde Valley Transit Agency \n", - "109502 Los Angeles World Airports \n", - "109503 Los Angeles World Airports \n", - "109509 San Luis Obispo Regional Transit Authority \n", - "109721 Los Angeles World Airports \n", - "109727 Los Angeles World Airports \n", - "105149 Palo Verde Valley Transit Agency \n", - "105482 Palo Verde Valley Transit Agency \n", - "105692 Palo Verde Valley Transit Agency \n", - "105762 City of Los Angeles \n", - "105864 Palo Verde Valley Transit Agency \n", - "106220 Palo Verde Valley Transit Agency \n", - "106921 Los Angeles World Airports \n", - "106922 Los Angeles World Airports \n", - "106930 San Luis Obispo Regional Transit Authority \n", - "107143 Los Angeles World Airports \n", - "107149 Los Angeles World Airports \n", - "102532 Palo Verde Valley Transit Agency \n", - "102869 Palo Verde Valley Transit Agency \n", - "103077 Palo Verde Valley Transit Agency \n", - "103146 City of Los Angeles \n", - "103251 Palo Verde Valley Transit Agency \n", - "103615 Palo Verde Valley Transit Agency \n", - "104318 Los Angeles World Airports \n", - "104319 Los Angeles World Airports \n", - "104326 San Luis Obispo Regional Transit Authority \n", - "104544 Los Angeles World Airports \n", - "104550 Los Angeles World Airports \n", - "99894 Palo Verde Valley Transit Agency \n", - "100232 Palo Verde Valley Transit Agency \n", - "100438 Palo Verde Valley Transit Agency \n", - "100507 City of Los Angeles \n", - "100611 Palo Verde Valley Transit Agency \n", - "100975 Palo Verde Valley Transit Agency \n", - "101692 San Luis Obispo Regional Transit Authority \n", - "97199 Palo Verde Valley Transit Agency \n", - "94157 Palo Verde Valley Transit Agency \n", - "94494 Palo Verde Valley Transit Agency \n", - "94694 Palo Verde Valley Transit Agency \n", - "94763 City of Los Angeles \n", - "94864 Palo Verde Valley Transit Agency \n", - "95225 Palo Verde Valley Transit Agency \n", - "95960 San Luis Obispo Regional Transit Authority \n", - "91574 Palo Verde Valley Transit Agency \n", - "91908 Palo Verde Valley Transit Agency \n", - "92108 Palo Verde Valley Transit Agency \n", - "92177 City of Los Angeles \n", - "92278 Palo Verde Valley Transit Agency \n", - "93370 San Luis Obispo Regional Transit Authority \n", - "89000 Palo Verde Valley Transit Agency \n", - "89337 Palo Verde Valley Transit Agency \n", - "89537 Palo Verde Valley Transit Agency \n", - "89606 City of Los Angeles \n", - "89708 Palo Verde Valley Transit Agency \n", - "90069 Palo Verde Valley Transit Agency \n", - "90785 San Luis Obispo Regional Transit Authority \n", - "86426 Palo Verde Valley Transit Agency \n", - "86761 Palo Verde Valley Transit Agency \n", - "86964 Palo Verde Valley Transit Agency \n", - "87033 City of Los Angeles \n", - "87136 Palo Verde Valley Transit Agency \n", - "88220 San Luis Obispo Regional Transit Authority \n", - "83926 Palo Verde Valley Transit Agency \n", - "84260 Palo Verde Valley Transit Agency \n", - "84455 Palo Verde Valley Transit Agency \n", - "84523 City of Los Angeles \n", - "84626 Palo Verde Valley Transit Agency \n", - "84943 Palo Verde Valley Transit Agency \n", - "85668 San Luis Obispo Regional Transit Authority \n", - "81393 Palo Verde Valley Transit Agency \n", - "81706 Palo Verde Valley Transit Agency \n", - "81904 Palo Verde Valley Transit Agency \n", - "81971 City of Los Angeles \n", - "82072 Palo Verde Valley Transit Agency \n", - "82431 Palo Verde Valley Transit Agency \n", - "78971 Palo Verde Valley Transit Agency \n", - "79256 Palo Verde Valley Transit Agency \n", - "79453 Palo Verde Valley Transit Agency \n", - "79520 City of Los Angeles \n", - "79618 Palo Verde Valley Transit Agency \n", - "79952 Palo Verde Valley Transit Agency \n", - "76745 Palo Verde Valley Transit Agency \n", - "77014 Palo Verde Valley Transit Agency \n", - "77202 Palo Verde Valley Transit Agency \n", - "77263 City of Los Angeles \n", - "77356 Palo Verde Valley Transit Agency \n", - "77606 Palo Verde Valley Transit Agency \n", - "74728 Palo Verde Valley Transit Agency \n", - "74954 Palo Verde Valley Transit Agency \n", - "75115 Palo Verde Valley Transit Agency \n", - "75172 City of Los Angeles \n", - "75256 Palo Verde Valley Transit Agency \n", - "75449 Palo Verde Valley Transit Agency \n", - "72942 City of Los Angeles \n", - "69937 Palo Verde Valley Transit Agency \n", - "67162 Palo Verde Valley Transit Agency \n", - "67457 Palo Verde Valley Transit Agency \n", - "67648 Palo Verde Valley Transit Agency \n", - "67713 City of Los Angeles \n", - "67791 Palo Verde Valley Transit Agency \n", - "68095 Palo Verde Valley Transit Agency \n", - "64664 Palo Verde Valley Transit Agency \n", - "64969 Palo Verde Valley Transit Agency \n", - "65166 Palo Verde Valley Transit Agency \n", - "65233 City of Los Angeles \n", - "65313 Palo Verde Valley Transit Agency \n", - "62170 Palo Verde Valley Transit Agency \n", - "62490 Palo Verde Valley Transit Agency \n", - "62684 Palo Verde Valley Transit Agency \n", - "62751 City of Los Angeles \n", - "62840 Palo Verde Valley Transit Agency \n", - "63201 Palo Verde Valley Transit Agency \n", - "59621 Palo Verde Valley Transit Agency \n", - "59947 Palo Verde Valley Transit Agency \n", - "60150 Palo Verde Valley Transit Agency \n", - "60219 City of Los Angeles \n", - "60312 Palo Verde Valley Transit Agency \n", - "57056 Palo Verde Valley Transit Agency \n", - "57385 Palo Verde Valley Transit Agency \n", - "57588 Palo Verde Valley Transit Agency \n", - "57657 City of Los Angeles \n", - "57750 Palo Verde Valley Transit Agency \n", - "58112 Palo Verde Valley Transit Agency \n", - "54576 Palo Verde Valley Transit Agency \n", - "54884 Palo Verde Valley Transit Agency \n", - "55080 Palo Verde Valley Transit Agency \n", - "55150 City of Los Angeles \n", - "55242 Palo Verde Valley Transit Agency \n", - "55599 Palo Verde Valley Transit Agency \n", - "52065 Palo Verde Valley Transit Agency \n", - "52389 Palo Verde Valley Transit Agency \n", - "52590 Palo Verde Valley Transit Agency \n", - "52659 City of Los Angeles \n", - "52751 Palo Verde Valley Transit Agency \n", - "53119 Palo Verde Valley Transit Agency \n", - "49613 Palo Verde Valley Transit Agency \n", - "49914 Palo Verde Valley Transit Agency \n", - "50108 Palo Verde Valley Transit Agency \n", - "50172 City of Los Angeles \n", - "50252 Palo Verde Valley Transit Agency \n", - "50611 Palo Verde Valley Transit Agency \n", - "47093 Palo Verde Valley Transit Agency \n", - "47416 Palo Verde Valley Transit Agency \n", - "47620 Palo Verde Valley Transit Agency \n", - "47688 City of Los Angeles \n", - "47782 Palo Verde Valley Transit Agency \n", - "48153 Palo Verde Valley Transit Agency \n", - "44535 Palo Verde Valley Transit Agency \n", - "44833 Palo Verde Valley Transit Agency \n", - "45036 Palo Verde Valley Transit Agency \n", - "45104 City of Los Angeles \n", - "45198 Palo Verde Valley Transit Agency \n", - "45566 Palo Verde Valley Transit Agency \n", - "45956 Mission Bay Transportation Management Agency \n", - "45997 Mission Bay Transportation Management Agency \n", - "46454 Mission Bay Transportation Management Agency \n", - "46485 Mission Bay Transportation Management Agency \n", - "41892 Palo Verde Valley Transit Agency \n", - "38905 Palo Verde Valley Transit Agency \n", - "39216 Palo Verde Valley Transit Agency \n", - "39407 Palo Verde Valley Transit Agency \n", - "39476 City of Los Angeles \n", - "39564 Palo Verde Valley Transit Agency \n", - "39915 Palo Verde Valley Transit Agency \n", - "40297 Mission Bay Transportation Management Agency \n", - "40338 Mission Bay Transportation Management Agency \n", - "40794 Mission Bay Transportation Management Agency \n", - "40824 Mission Bay Transportation Management Agency \n", - "36380 Palo Verde Valley Transit Agency \n", - "36687 Palo Verde Valley Transit Agency \n", - "36878 Palo Verde Valley Transit Agency \n", - "36946 City of Los Angeles \n", - "37034 Palo Verde Valley Transit Agency \n", - "37773 Mission Bay Transportation Management Agency \n", - "37814 Mission Bay Transportation Management Agency \n", - "38264 Mission Bay Transportation Management Agency \n", - "38295 Mission Bay Transportation Management Agency \n", - "33806 Palo Verde Valley Transit Agency \n", - "34126 Palo Verde Valley Transit Agency \n", - "34325 Palo Verde Valley Transit Agency \n", - "34393 City of Los Angeles \n", - "34486 Palo Verde Valley Transit Agency \n", - "34850 Palo Verde Valley Transit Agency \n", - "35242 Mission Bay Transportation Management Agency \n", - "35283 Mission Bay Transportation Management Agency \n", - "35737 Mission Bay Transportation Management Agency \n", - "35769 Mission Bay Transportation Management Agency \n", - "31222 Palo Verde Valley Transit Agency \n", - "31539 Palo Verde Valley Transit Agency \n", - "31739 Palo Verde Valley Transit Agency \n", - "31807 City of Los Angeles \n", - "31901 Palo Verde Valley Transit Agency \n", - "32658 Mission Bay Transportation Management Agency \n", - "32699 Mission Bay Transportation Management Agency \n", - "33159 Mission Bay Transportation Management Agency \n", - "33190 Mission Bay Transportation Management Agency \n", - "28739 Palo Verde Valley Transit Agency \n", - "29054 Palo Verde Valley Transit Agency \n", - "29244 Palo Verde Valley Transit Agency \n", - "29312 City of Los Angeles \n", - "29403 Palo Verde Valley Transit Agency \n", - "29723 Palo Verde Valley Transit Agency \n", - "30108 Mission Bay Transportation Management Agency \n", - "30148 Mission Bay Transportation Management Agency \n", - "30604 Mission Bay Transportation Management Agency \n", - "30635 Mission Bay Transportation Management Agency \n", - "26212 Palo Verde Valley Transit Agency \n", - "26526 Palo Verde Valley Transit Agency \n", - "26720 Palo Verde Valley Transit Agency \n", - "26789 City of Los Angeles \n", - "26879 Palo Verde Valley Transit Agency \n", - "27239 Palo Verde Valley Transit Agency \n", - "27622 Mission Bay Transportation Management Agency \n", - "27659 Mission Bay Transportation Management Agency \n", - "28096 Mission Bay Transportation Management Agency \n", - "28126 Mission Bay Transportation Management Agency \n", - "24272 City of Los Angeles \n", - "25105 Mission Bay Transportation Management Agency \n", - "25140 Mission Bay Transportation Management Agency \n", - "25584 Mission Bay Transportation Management Agency \n", - "25615 Mission Bay Transportation Management Agency \n", - "21893 City of Los Angeles \n", - "19513 City of Los Angeles \n", - "17260 City of Los Angeles \n", - "12442 City of Los Angeles \n", - "10111 City of Los Angeles \n", - "7790 City of Los Angeles \n", - "5469 City of Los Angeles \n", - "3157 City of Los Angeles \n", - "845 City of Los Angeles \n", - "\n", - " route_long_name route_short_name route_id same_name \n", - "115399 UCLA - Marina del Rey 18 2 False \n", - "115437 Blue Route 1 2 False \n", - "115763 Gold Route 2 2 False \n", - "115974 Red Route 3 2 False \n", - "116041 CE438B 438B 2 False \n", - "116045 26th Street 43 2 False \n", - "116140 Green Route 4 2 False \n", - "116498 Wellness Express 6 2 False \n", - "116804 Pacific Palisades 9 2 False \n", - "117034 FlyAway - LAX to Union Station LAX to US 2 False \n", - "117035 FlyAway - LAX to Van Nuys LAX to VN 2 False \n", - "117042 Laguna Tripper LT 2 False \n", - "117134 Downtown LA Freeway Express R10 2 False \n", - "117279 FlyAway - Union Station to LAX US to LAX 2 False \n", - "117285 FlyAway - Van Nuys to LAX VN to LAX 2 False \n", - "112777 UCLA - Marina del Rey 18 2 False \n", - "112814 Blue Route 1 2 False \n", - "113147 Gold Route 2 2 False \n", - "113359 Red Route 3 2 False \n", - "113429 CE438B 438B 2 False \n", - "113433 26th Street 43 2 False \n", - "113527 Green Route 4 2 False \n", - "113887 Wellness Express 6 2 False \n", - "114188 Pacific Palisades 9 2 False \n", - "114625 FlyAway - LAX to Union Station LAX to US 2 False \n", - "114626 FlyAway - LAX to Van Nuys LAX to VN 2 False \n", - "114633 Laguna Tripper LT 2 False \n", - "114721 Downtown LA Freeway Express R10 2 False \n", - "114860 FlyAway - Union Station to LAX US to LAX 2 False \n", - "114866 FlyAway - Van Nuys to LAX VN to LAX 2 False \n", - "110249 UCLA - Marina del Rey 18 2 False \n", - "110281 Blue Route 1 2 False \n", - "110799 Red Route 3 2 False \n", - "110870 CE438B 438B 2 False \n", - "110874 26th Street 43 2 False \n", - "110957 Green Route 4 2 False \n", - "111309 Wellness Express 6 2 False \n", - "111600 Pacific Palisades 9 2 False \n", - "112017 FlyAway - LAX to Union Station LAX to US 2 False \n", - "112018 FlyAway - LAX to Van Nuys LAX to VN 2 False \n", - "112024 Laguna Tripper LT 2 False \n", - "112105 Downtown LA Freeway Express R10 2 False \n", - "112233 FlyAway - Union Station to LAX US to LAX 2 False \n", - "112239 FlyAway - Van Nuys to LAX VN to LAX 2 False \n", - "107715 Blue Route 1 2 False \n", - "108050 Gold Route 2 2 False \n", - "108264 Red Route 3 2 False \n", - "108333 CE438B 438B 2 False \n", - "108436 Green Route 4 2 False \n", - "108799 Wellness Express 6 2 False \n", - "109502 FlyAway - LAX to Union Station LAX to US 2 False \n", - "109503 FlyAway - LAX to Van Nuys LAX to VN 2 False \n", - "109509 Laguna Tripper LT 2 False \n", - "109721 FlyAway - Union Station to LAX US to LAX 2 False \n", - "109727 FlyAway - Van Nuys to LAX VN to LAX 2 False \n", - "105149 Blue Route 1 2 False \n", - "105482 Gold Route 2 2 False \n", - "105692 Red Route 3 2 False \n", - "105762 CE438B 438B 2 False \n", - "105864 Green Route 4 2 False \n", - "106220 Wellness Express 6 2 False \n", - "106921 FlyAway - LAX to Union Station LAX to US 2 False \n", - "106922 FlyAway - LAX to Van Nuys LAX to VN 2 False \n", - "106930 Laguna Tripper LT 2 False \n", - "107143 FlyAway - Union Station to LAX US to LAX 2 False \n", - "107149 FlyAway - Van Nuys to LAX VN to LAX 2 False \n", - "102532 Blue Route 1 2 False \n", - "102869 Gold Route 2 2 False \n", - "103077 Red Route 3 2 False \n", - "103146 CE438B 438B 2 False \n", - "103251 Green Route 4 2 False \n", - "103615 Wellness Express 6 2 False \n", - "104318 FlyAway - LAX to Union Station LAX to US 2 False \n", - "104319 FlyAway - LAX to Van Nuys LAX to VN 2 False \n", - "104326 Laguna Tripper LT 2 False \n", - "104544 FlyAway - Union Station to LAX US to LAX 2 False \n", - "104550 FlyAway - Van Nuys to LAX VN to LAX 2 False \n", - "99894 Blue Route 1 2 False \n", - "100232 Gold Route 2 2 False \n", - "100438 Red Route 3 2 False \n", - "100507 CE438B 438B 2 False \n", - "100611 Green Route 4 2 False \n", - "100975 Wellness Express 6 2 False \n", - "101692 Laguna Tripper LT 2 False \n", - "97199 Silver Route 5 2 False \n", - "94157 Blue Route 1 2 False \n", - "94494 Gold Route 2 2 False \n", - "94694 Red Route 3 2 False \n", - "94763 CE438B 438B 2 False \n", - "94864 Green Route 4 2 False \n", - "95225 Wellness Express 6 2 False \n", - "95960 Laguna Tripper LT 2 False \n", - "91574 Blue Route 1 2 False \n", - "91908 Gold Route 2 2 False \n", - "92108 Red Route 3 2 False \n", - "92177 CE438B 438B 2 False \n", - "92278 Green Route 4 2 False \n", - "93370 Laguna Tripper LT 2 False \n", - "89000 Blue Route 1 2 False \n", - "89337 Gold Route 2 2 False \n", - "89537 Red Route 3 2 False \n", - "89606 CE438B 438B 2 False \n", - "89708 Green Route 4 2 False \n", - "90069 Wellness Express 6 2 False \n", - "90785 Laguna Tripper LT 2 False \n", - "86426 Blue Route 1 2 False \n", - "86761 Gold Route 2 2 False \n", - "86964 Red Route 3 2 False \n", - "87033 CE438B 438B 2 False \n", - "87136 Green Route 4 2 False \n", - "88220 Laguna Tripper LT 2 False \n", - "83926 Blue Route 1 2 False \n", - "84260 Gold Route 2 2 False \n", - "84455 Red Route 3 2 False \n", - "84523 CE438B 438B 2 False \n", - "84626 Green Route 4 2 False \n", - "84943 Wellness Express 6 2 False \n", - "85668 Laguna Tripper LT 2 False \n", - "81393 Blue Route 1 2 False \n", - "81706 Gold Route 2 2 False \n", - "81904 Red Route 3 2 False \n", - "81971 CE438B 438B 2 False \n", - "82072 Green Route 4 2 False \n", - "82431 Wellness Express 6 2 False \n", - "78971 Blue Route 1 2 False \n", - "79256 Gold Route 2 2 False \n", - "79453 Red Route 3 2 False \n", - "79520 CE438B 438B 2 False \n", - "79618 Green Route 4 2 False \n", - "79952 Wellness Express 6 2 False \n", - "76745 Blue Route 1 2 False \n", - "77014 Gold Route 2 2 False \n", - "77202 Red Route 3 2 False \n", - "77263 CE438B 438B 2 False \n", - "77356 Green Route 4 2 False \n", - "77606 Wellness Express 6 2 False \n", - "74728 Blue Route 1 2 False \n", - "74954 Gold Route 2 2 False \n", - "75115 Red Route 3 2 False \n", - "75172 CE438B 438B 2 False \n", - "75256 Green Route 4 2 False \n", - "75449 Wellness Express 6 2 False \n", - "72942 CE438B 438B 2 False \n", - "69937 Silver Route 5 2 False \n", - "67162 Blue Route 1 2 False \n", - "67457 Gold Route 2 2 False \n", - "67648 Red Route 3 2 False \n", - "67713 CE438B 438B 2 False \n", - "67791 Green Route 4 2 False \n", - "68095 Wellness Express 6 2 False \n", - "64664 Blue Route 1 2 False \n", - "64969 Gold Route 2 2 False \n", - "65166 Red Route 3 2 False \n", - "65233 CE438B 438B 2 False \n", - "65313 Green Route 4 2 False \n", - "62170 Blue Route 1 2 False \n", - "62490 Gold Route 2 2 False \n", - "62684 Red Route 3 2 False \n", - "62751 CE438B 438B 2 False \n", - "62840 Green Route 4 2 False \n", - "63201 Wellness Express 6 2 False \n", - "59621 Blue Route 1 2 False \n", - "59947 Gold Route 2 2 False \n", - "60150 Red Route 3 2 False \n", - "60219 CE438B 438B 2 False \n", - "60312 Green Route 4 2 False \n", - "57056 Blue Route 1 2 False \n", - "57385 Gold Route 2 2 False \n", - "57588 Red Route 3 2 False \n", - "57657 CE438B 438B 2 False \n", - "57750 Green Route 4 2 False \n", - "58112 Wellness Express 6 2 False \n", - "54576 Blue Route 1 2 False \n", - "54884 Gold Route 2 2 False \n", - "55080 Red Route 3 2 False \n", - "55150 CE438B 438B 2 False \n", - "55242 Green Route 4 2 False \n", - "55599 Wellness Express 6 2 False \n", - "52065 Blue Route 1 2 False \n", - "52389 Gold Route 2 2 False \n", - "52590 Red Route 3 2 False \n", - "52659 CE438B 438B 2 False \n", - "52751 Green Route 4 2 False \n", - "53119 Wellness Express 6 2 False \n", - "49613 Blue Route 1 2 False \n", - "49914 Gold Route 2 2 False \n", - "50108 Red Route 3 2 False \n", - "50172 CE438B 438B 2 False \n", - "50252 Green Route 4 2 False \n", - "50611 Wellness Express 6 2 False \n", - "47093 Blue Route 1 2 False \n", - "47416 Gold Route 2 2 False \n", - "47620 Red Route 3 2 False \n", - "47688 CE438B 438B 2 False \n", - "47782 Green Route 4 2 False \n", - "48153 Wellness Express 6 2 False \n", - "44535 Blue Route 1 2 False \n", - "44833 Gold Route 2 2 False \n", - "45036 Red Route 3 2 False \n", - "45104 CE438B 438B 2 False \n", - "45198 Green Route 4 2 False \n", - "45566 Wellness Express 6 2 False \n", - "45956 CCA/Adobe 2 False \n", - "45997 East 2 False \n", - "46454 Transbay-Caltrain TC 2 False \n", - "46485 West 2 False \n", - "41892 Silver Route 5 2 False \n", - "38905 Blue Route 1 2 False \n", - "39216 Gold Route 2 2 False \n", - "39407 Red Route 3 2 False \n", - "39476 CE438B 438B 2 False \n", - "39564 Green Route 4 2 False \n", - "39915 Wellness Express 6 2 False \n", - "40297 CCA/Adobe 2 False \n", - "40338 East 2 False \n", - "40794 Transbay-Caltrain TC 2 False \n", - "40824 West 2 False \n", - "36380 Blue Route 1 2 False \n", - "36687 Gold Route 2 2 False \n", - "36878 Red Route 3 2 False \n", - "36946 CE438B 438B 2 False \n", - "37034 Green Route 4 2 False \n", - "37773 CCA/Adobe 2 False \n", - "37814 East 2 False \n", - "38264 Transbay-Caltrain TC 2 False \n", - "38295 West 2 False \n", - "33806 Blue Route 1 2 False \n", - "34126 Gold Route 2 2 False \n", - "34325 Red Route 3 2 False \n", - "34393 CE438B 438B 2 False \n", - "34486 Green Route 4 2 False \n", - "34850 Wellness Express 6 2 False \n", - "35242 CCA/Adobe 2 False \n", - "35283 East 2 False \n", - "35737 Transbay-Caltrain TC 2 False \n", - "35769 West 2 False \n", - "31222 Blue Route 1 2 False \n", - "31539 Gold Route 2 2 False \n", - "31739 Red Route 3 2 False \n", - "31807 CE438B 438B 2 False \n", - "31901 Green Route 4 2 False \n", - "32658 CCA/Adobe 2 False \n", - "32699 East 2 False \n", - "33159 Transbay-Caltrain TC 2 False \n", - "33190 West 2 False \n", - "28739 Blue Route 1 2 False \n", - "29054 Gold Route 2 2 False \n", - "29244 Red Route 3 2 False \n", - "29312 CE438B 438B 2 False \n", - "29403 Green Route 4 2 False \n", - "29723 Wellness Express 6 2 False \n", - "30108 CCA/Adobe 2 False \n", - "30148 East 2 False \n", - "30604 Transbay-Caltrain TC 2 False \n", - "30635 West 2 False \n", - "26212 Blue Route 1 2 False \n", - "26526 Gold Route 2 2 False \n", - "26720 Red Route 3 2 False \n", - "26789 CE438B 438B 2 False \n", - "26879 Green Route 4 2 False \n", - "27239 Wellness Express 6 2 False \n", - "27622 CCA/Adobe 2 False \n", - "27659 East 2 False \n", - "28096 Transbay-Caltrain TC 2 False \n", - "28126 West 2 False \n", - "24272 CE438B 438B 2 False \n", - "25105 CCA/Adobe 2 False \n", - "25140 East 2 False \n", - "25584 Transbay-Caltrain TC 2 False \n", - "25615 West 2 False \n", - "21893 CE438B 438B 2 False \n", - "19513 CE438B 438B 2 False \n", - "17260 CE438B 438B 2 False \n", - "12442 CE438B 438B 2 False \n", - "10111 CE438B 438B 2 False \n", - "7790 CE438B 438B 2 False \n", - "5469 CE438B 438B 2 False \n", - "3157 CE438B 438B 2 False \n", - "845 CE438B 438B 2 False " + " 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": 16, + "execution_count": 165, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "m_route_ids_1_recent_combined_name2.loc[m_route_ids_1_recent_combined_name2.portfolio_organization_name != \"Amtrak\"].sort_values(\n", - " by=[\"service_date\", \"route_id\"], ascending=[False, False]\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "db98dd8b-c5c7-4c66-9de5-148db53567f2", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 34, - "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", - " \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=[\n", - " \"portfolio_organization_name\",\n", - " \"route_id\"\n", - " ],\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=[\"portfolio_organization_name\", \"recent_combined_name\", \"service_date\", \"route_id\"]\n", + "crosswalk_df.loc[\n", + " crosswalk_df.organization_name.str.contains(\n", + " \"Mission Bay\",\n", " )\n", - " return most_recent_routes" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "95c1dead-df6d-463d-a1f2-a64d4f4a2b6b", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "routes = process_transit_routes()" + "]" ] }, { "cell_type": "code", - "execution_count": 36, - "id": "429759a8-2627-44f7-8a15-ea500b797b67", + "execution_count": 122, + "id": "e292f1b8-4e9c-407a-a56b-5cd84f3d09eb", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "def display_map(gdf:gpd.GeoDataFrame, route:str):\n", - " gdf = gdf.loc[gdf.recent_combined_name == route][[\"geometry\",\"route_id\"]]\n", - " display(gdf.explore(\"route_id\"))\n", - " return" + "display_map(routes, \"CCA/Adobe\")" ] }, { "cell_type": "code", - "execution_count": 37, - "id": "c363a000-aec1-468d-bd91-2c91b64dea46", + "execution_count": 133, + "id": "3a769df5-b5f3-4de4-8b2b-5587bd100f20", "metadata": { "tags": [] }, @@ -4814,22 +8139,29 @@ { "data": { "text/plain": [ - "(2, 27)" + "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": 37, + "execution_count": 133, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "routes.loc[routes.recent_combined_name == \"6 Wellness Express\"].shape" + "agg2_filtered.recent_combined_name.unique()" ] }, { "cell_type": "code", - "execution_count": 38, - "id": "6b602483-d7ce-43cc-a185-9f1ed0bc4d07", + "execution_count": 139, + "id": "5b2bcadf-d829-41b8-888a-0bb695777d09", "metadata": { "tags": [] }, @@ -4837,25 +8169,227 @@ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": 139, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ - "display_map(routes, \"6 Wellness Express\")" + "(\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": 18, - "id": "1186a320-737e-4ec7-a94b-9956473e4740", - "metadata": {}, + "execution_count": 172, + "id": "6c75aeb7-a744-45be-a923-0fd15df122c9", + "metadata": { + "tags": [] + }, "outputs": [ { "data": { @@ -4881,6 +8415,7 @@ " 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", @@ -4888,162 +8423,228 @@ " \n", " \n", " \n", - " 111081\n", + " 106407\n", " 2025-01-15\n", - " 6__Wellness Express\n", - " Palo Verde Valley Transit Agency\n", - " Wellness Express\n", + " LAX to US__FlyAway - LAX to Union Station\n", + " Los Angeles World Airports\n", + " 4a3f5fe2e305cc696684d11226ba9878\n", + " FlyAway - LAX to Union Station\n", + " LAX to US\n", " 6\n", - " 6467\n", " \n", " \n", - " 111678\n", + " 108289\n", " 2025-01-15\n", - " 6__Wellness Express\n", - " Palo Verde Valley Transit Agency\n", - " Wellness Express\n", - " 6\n", - " 5970\n", + " LAX to US__FlyAway - LAX to Union Station\n", + " Los Angeles World Airports\n", + " 2f1c266fc20f9875777fb752af32a66e\n", + " FlyAway - LAX to Union Station\n", + " LAX to US\n", + " TL-6\n", " \n", " \n", - " 113628\n", + " 109057\n", " 2025-02-12\n", - " 6__Wellness Express\n", - " Palo Verde Valley Transit Agency\n", - " Wellness Express\n", + " LAX to US__FlyAway - LAX to Union Station\n", + " Los Angeles World Airports\n", + " 4a3f5fe2e305cc696684d11226ba9878\n", + " FlyAway - LAX to Union Station\n", + " LAX to US\n", " 6\n", - " 6467\n", " \n", " \n", - " 114290\n", + " 110890\n", " 2025-02-12\n", - " 6__Wellness Express\n", - " Palo Verde Valley Transit Agency\n", - " Wellness Express\n", - " 6\n", - " 5970\n", + " LAX to US__FlyAway - LAX to Union Station\n", + " Los Angeles World Airports\n", + " 2f1c266fc20f9875777fb752af32a66e\n", + " FlyAway - LAX to Union Station\n", + " LAX to US\n", + " TL-6\n", " \n", " \n", - " 116224\n", + " 111636\n", " 2025-03-12\n", - " 6__Wellness Express\n", - " Palo Verde Valley Transit Agency\n", - " Wellness Express\n", + " LAX to US__FlyAway - LAX to Union Station\n", + " Los Angeles World Airports\n", + " 4a3f5fe2e305cc696684d11226ba9878\n", + " FlyAway - LAX to Union Station\n", + " LAX to US\n", " 6\n", - " 6467\n", " \n", " \n", - " 116949\n", + " 113415\n", " 2025-03-12\n", - " 6__Wellness Express\n", - " Palo Verde Valley Transit Agency\n", - " Wellness Express\n", - " 6\n", - " 5970\n", + " LAX to US__FlyAway - LAX to Union Station\n", + " Los Angeles World Airports\n", + " 2f1c266fc20f9875777fb752af32a66e\n", + " FlyAway - LAX to Union Station\n", + " LAX to US\n", + " TL-6\n", " \n", " \n", - " 118880\n", + " 114160\n", " 2025-04-16\n", - " 6__Wellness Express\n", - " Palo Verde Valley Transit Agency\n", - " Wellness Express\n", + " LAX to US__FlyAway - LAX to Union Station\n", + " Los Angeles World Airports\n", + " 73e3164043eb7312454dd03413a6b310\n", + " FlyAway - LAX to Union Station\n", + " LAX to US\n", " 6\n", - " 6467\n", " \n", " \n", - " 119828\n", + " 116040\n", " 2025-04-16\n", - " 6__Wellness Express\n", - " Palo Verde Valley Transit Agency\n", - " Wellness Express\n", - " 6\n", - " 5970\n", + " LAX to US__FlyAway - LAX to Union Station\n", + " Los Angeles World Airports\n", + " 2f1c266fc20f9875777fb752af32a66e\n", + " FlyAway - LAX to Union Station\n", + " LAX to US\n", + " TL-6\n", " \n", " \n", - " 121814\n", + " 116607\n", " 2025-05-14\n", - " 6__Wellness Express\n", - " Palo Verde Valley Transit Agency\n", - " Wellness Express\n", + " LAX to US__FlyAway - LAX to Union Station\n", + " Los Angeles World Airports\n", + " be0f451de12b510fe2af5d47fe3cd0e7\n", + " FlyAway - LAX to Union Station\n", + " LAX to US\n", " 6\n", - " 6467\n", " \n", " \n", - " 122250\n", + " 118453\n", " 2025-05-14\n", - " 6__Wellness Express\n", - " Palo Verde Valley Transit Agency\n", - " Wellness Express\n", - " 6\n", - " 5970\n", + " LAX to US__FlyAway - LAX to Union Station\n", + " Los Angeles World Airports\n", + " 2f1c266fc20f9875777fb752af32a66e\n", + " FlyAway - LAX to Union Station\n", + " LAX to US\n", + " TL-6\n", " \n", " \n", "\n", "" ], "text/plain": [ - " service_date recent_combined_name portfolio_organization_name \\\n", - "111081 2025-01-15 6__Wellness Express Palo Verde Valley Transit Agency \n", - "111678 2025-01-15 6__Wellness Express Palo Verde Valley Transit Agency \n", - "113628 2025-02-12 6__Wellness Express Palo Verde Valley Transit Agency \n", - "114290 2025-02-12 6__Wellness Express Palo Verde Valley Transit Agency \n", - "116224 2025-03-12 6__Wellness Express Palo Verde Valley Transit Agency \n", - "116949 2025-03-12 6__Wellness Express Palo Verde Valley Transit Agency \n", - "118880 2025-04-16 6__Wellness Express Palo Verde Valley Transit Agency \n", - "119828 2025-04-16 6__Wellness Express Palo Verde Valley Transit Agency \n", - "121814 2025-05-14 6__Wellness Express Palo Verde Valley Transit Agency \n", - "122250 2025-05-14 6__Wellness Express Palo Verde Valley Transit Agency \n", - "\n", - " route_long_name route_short_name route_id \n", - "111081 Wellness Express 6 6467 \n", - "111678 Wellness Express 6 5970 \n", - "113628 Wellness Express 6 6467 \n", - "114290 Wellness Express 6 5970 \n", - "116224 Wellness Express 6 6467 \n", - "116949 Wellness Express 6 5970 \n", - "118880 Wellness Express 6 6467 \n", - "119828 Wellness Express 6 5970 \n", - "121814 Wellness Express 6 6467 \n", - "122250 Wellness Express 6 5970 " + " 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": 172, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ - "inspect_recent_rows(df, \"Wellness Express\")" + "(\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": 39, - "id": "e9abc39d-364e-445b-b789-22da4e16bf09", + "execution_count": 144, + "id": "dd97075e-402b-40b5-984c-5e9a25f4d902", "metadata": { "tags": [] }, "outputs": [ { "data": { - "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" - ], "text/plain": [ - "" + "array(['VN to LAX FlyAway - Van Nuys to LAX',\n", + " 'US to LAX FlyAway - Union Station to LAX',\n", + " 'Inter-terminal Connector/AC Route',\n", + " 'LAX to VN FlyAway - LAX to Van Nuys',\n", + " 'LAX to US FlyAway - LAX to Union Station', 'Metro Connector GL',\n", + " 'Metro C Line Shuttle M to Terminals',\n", + " 'Metro C Line Shuttle M to Metro Rail',\n", + " 'LAX FlyAway-US2LAX Union Station FlyAway to LAX',\n", + " 'LAX FlyAway-LAX2US FlyAway to Union Station/Downtown',\n", + " 'LAX FlyAway-VN2LAX Van Nuys FlyAway to LAX',\n", + " 'LAX FlyAway-LAX2VN FlyAway to Van Nuys', 'ADA Shuttle Route',\n", + " 'LAX Economy Parking'], dtype=object)" ] }, + "execution_count": 144, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ - "display_map(routes, \"18 UCLA - Marina del Rey\")" + "routes.loc[\n", + " routes.portfolio_organization_name == \"Los Angeles World Airports\",\n", + "].recent_combined_name.unique()" ] }, { "cell_type": "code", - "execution_count": 17, - "id": "0ff2e882-02ca-4269-ad07-f1b2a04ca7f0", + "execution_count": null, + "id": "e2e72aed-848b-416b-a101-d5068204a2cc", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 148, + "id": "69cf30a9-6a82-4a4b-8c0a-fd973441dc7a", "metadata": { "tags": [] }, @@ -5072,6 +8673,7 @@ " 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", @@ -5079,123 +8681,210 @@ " \n", " \n", " \n", - " 103670\n", - " 2024-11-13\n", - " 18__UCLA - Marina del Rey\n", - " City of Santa Monica\n", - " UCLA - Marina del Rey\n", - " 18\n", - " 3770\n", + " 114157\n", + " 2025-04-16\n", + " VN to LAX__FlyAway - Van Nuys to LAX\n", + " Los Angeles World Airports\n", + " 73e3164043eb7312454dd03413a6b310\n", + " FlyAway - Van Nuys to LAX\n", + " VN to LAX\n", + " 1\n", " \n", " \n", - " 106458\n", - " 2024-12-11\n", - " 18__UCLA - Marina del Rey\n", - " City of Santa Monica\n", - " UCLA - Marina del Rey\n", - " 18\n", - " 3770\n", + " 116005\n", + " 2025-04-16\n", + " Van Nuys/Studio City Counterclockwise__DASH Van Nuys/Studio City Counterclockwise\n", + " City of Los Angeles\n", + " cc53a0dbf5df90e3009b9cb5d89d80ba\n", + " DASH Van Nuys/Studio City Counterclockwise\n", + " Van Nuys/Studio City Counterclockwise\n", + " 800\n", " \n", " \n", - " 111244\n", - " 2025-01-15\n", - " 18__UCLA - Marina del Rey\n", - " City of Santa Monica\n", - " UCLA - Marina del Rey\n", - " 18\n", - " 3820\n", + " 118450\n", + " 2025-05-14\n", + " VN to LAX__FlyAway - Van Nuys to LAX\n", + " Los Angeles World Airports\n", + " 2f1c266fc20f9875777fb752af32a66e\n", + " FlyAway - Van Nuys to LAX\n", + " VN to LAX\n", + " TL-1\n", " \n", " \n", - " 111737\n", - " 2025-02-12\n", - " 18__UCLA - Marina del Rey\n", - " City of Santa Monica\n", - " UCLA - Marina del Rey\n", - " 18\n", - " 3820\n", + " 116604\n", + " 2025-05-14\n", + " VN to LAX__FlyAway - Van Nuys to LAX\n", + " Los Angeles World Airports\n", + " be0f451de12b510fe2af5d47fe3cd0e7\n", + " FlyAway - Van Nuys to LAX\n", + " VN to LAX\n", + " 1\n", " \n", " \n", - " 114892\n", - " 2025-03-12\n", - " 18__UCLA - Marina del Rey\n", - " City of Santa Monica\n", - " UCLA - Marina del Rey\n", - " 18\n", - " 18\n", + " 116606\n", + " 2025-05-14\n", + " LAX to VN__FlyAway - LAX to Van Nuys\n", + " Los Angeles World Airports\n", + " be0f451de12b510fe2af5d47fe3cd0e7\n", + " FlyAway - LAX to Van Nuys\n", + " LAX to VN\n", + " 5\n", " \n", " \n", - " 116532\n", - " 2025-03-12\n", - " 18__UCLA - Marina del Rey\n", - " City of Santa Monica\n", - " UCLA - Marina del Rey\n", - " 18\n", - " 3820\n", + " 118415\n", + " 2025-05-14\n", + " Van Nuys/Studio City Clockwise__DASH Van Nuys/Studio City Clockwise\n", + " City of Los Angeles\n", + " cc53a0dbf5df90e3009b9cb5d89d80ba\n", + " DASH Van Nuys/Studio City Clockwise\n", + " Van Nuys/Studio City Clockwise\n", + " 799\n", " \n", " \n", - " 117548\n", - " 2025-04-16\n", - " 18__UCLA - Marina del Rey\n", - " City of Santa Monica\n", - " UCLA - Marina del Rey\n", - " 18\n", - " 18\n", + " 118416\n", + " 2025-05-14\n", + " Van Nuys/Studio City Counterclockwise__DASH Van Nuys/Studio City Counterclockwise\n", + " City of Los Angeles\n", + " cc53a0dbf5df90e3009b9cb5d89d80ba\n", + " DASH Van Nuys/Studio City Counterclockwise\n", + " Van Nuys/Studio City Counterclockwise\n", + " 800\n", " \n", " \n", - " 119308\n", - " 2025-04-16\n", - " 18__UCLA - Marina del Rey\n", - " City of Santa Monica\n", - " UCLA - Marina del Rey\n", - " 18\n", - " 3919\n", + " 118433\n", + " 2025-05-14\n", + " Panorama City/Van Nuys Clockwise__DASH Panorama City/Van Nuys Clockwise\n", + " City of Los Angeles\n", + " cc53a0dbf5df90e3009b9cb5d89d80ba\n", + " DASH Panorama City/Van Nuys Clockwise\n", + " Panorama City/Van Nuys Clockwise\n", + " 801\n", " \n", " \n", - " 120126\n", + " 118434\n", " 2025-05-14\n", - " 18__UCLA - Marina del Rey\n", - " City of Santa Monica\n", - " UCLA - Marina del Rey\n", - " 18\n", - " 18\n", + " Panorama City/Van Nuys Counterclockwise__DASH Panorama City/Van Nuys Counterclockwise\n", + " City of Los Angeles\n", + " cc53a0dbf5df90e3009b9cb5d89d80ba\n", + " DASH Panorama City/Van Nuys Counterclockwise\n", + " Panorama City/Van Nuys Counterclockwise\n", + " 804\n", " \n", " \n", - " 121832\n", + " 118452\n", " 2025-05-14\n", - " 18__UCLA - Marina del Rey\n", - " City of Santa Monica\n", - " UCLA - Marina del Rey\n", - " 18\n", - " 3919\n", + " LAX to VN__FlyAway - LAX to Van Nuys\n", + " Los Angeles World Airports\n", + " 2f1c266fc20f9875777fb752af32a66e\n", + " FlyAway - LAX to Van Nuys\n", + " LAX to VN\n", + " TL-5\n", " \n", " \n", "\n", "" ], "text/plain": [ - " service_date recent_combined_name portfolio_organization_name \\\n", - "103670 2024-11-13 18__UCLA - Marina del Rey City of Santa Monica \n", - "106458 2024-12-11 18__UCLA - Marina del Rey City of Santa Monica \n", - "111244 2025-01-15 18__UCLA - Marina del Rey City of Santa Monica \n", - "111737 2025-02-12 18__UCLA - Marina del Rey City of Santa Monica \n", - "114892 2025-03-12 18__UCLA - Marina del Rey City of Santa Monica \n", - "116532 2025-03-12 18__UCLA - Marina del Rey City of Santa Monica \n", - "117548 2025-04-16 18__UCLA - Marina del Rey City of Santa Monica \n", - "119308 2025-04-16 18__UCLA - Marina del Rey City of Santa Monica \n", - "120126 2025-05-14 18__UCLA - Marina del Rey City of Santa Monica \n", - "121832 2025-05-14 18__UCLA - Marina del Rey City of Santa Monica \n", - "\n", - " route_long_name route_short_name route_id \n", - "103670 UCLA - Marina del Rey 18 3770 \n", - "106458 UCLA - Marina del Rey 18 3770 \n", - "111244 UCLA - Marina del Rey 18 3820 \n", - "111737 UCLA - Marina del Rey 18 3820 \n", - "114892 UCLA - Marina del Rey 18 18 \n", - "116532 UCLA - Marina del Rey 18 3820 \n", - "117548 UCLA - Marina del Rey 18 18 \n", - "119308 UCLA - Marina del Rey 18 3919 \n", - "120126 UCLA - Marina del Rey 18 18 \n", - "121832 UCLA - Marina del Rey 18 3919 " + " service_date \\\n", + "114157 2025-04-16 \n", + "116005 2025-04-16 \n", + "118450 2025-05-14 \n", + "116604 2025-05-14 \n", + "116606 2025-05-14 \n", + "118415 2025-05-14 \n", + "118416 2025-05-14 \n", + "118433 2025-05-14 \n", + "118434 2025-05-14 \n", + "118452 2025-05-14 \n", + "\n", + " recent_combined_name \\\n", + "114157 VN to LAX__FlyAway - Van Nuys to LAX \n", + "116005 Van Nuys/Studio City Counterclockwise__DASH Van Nuys/Studio City Counterclockwise \n", + "118450 VN to LAX__FlyAway - Van Nuys to LAX \n", + "116604 VN to LAX__FlyAway - Van Nuys to LAX \n", + "116606 LAX to VN__FlyAway - LAX to Van Nuys \n", + "118415 Van Nuys/Studio City Clockwise__DASH Van Nuys/Studio City Clockwise \n", + "118416 Van Nuys/Studio City Counterclockwise__DASH Van Nuys/Studio City Counterclockwise \n", + "118433 Panorama City/Van Nuys Clockwise__DASH Panorama City/Van Nuys Clockwise \n", + "118434 Panorama City/Van Nuys Counterclockwise__DASH Panorama City/Van Nuys Counterclockwise \n", + "118452 LAX to VN__FlyAway - LAX to Van Nuys \n", + "\n", + " portfolio_organization_name schedule_gtfs_dataset_key \\\n", + "114157 Los Angeles World Airports 73e3164043eb7312454dd03413a6b310 \n", + "116005 City of Los Angeles cc53a0dbf5df90e3009b9cb5d89d80ba \n", + "118450 Los Angeles World Airports 2f1c266fc20f9875777fb752af32a66e \n", + "116604 Los Angeles World Airports be0f451de12b510fe2af5d47fe3cd0e7 \n", + "116606 Los Angeles World Airports be0f451de12b510fe2af5d47fe3cd0e7 \n", + "118415 City of Los Angeles cc53a0dbf5df90e3009b9cb5d89d80ba \n", + "118416 City of Los Angeles cc53a0dbf5df90e3009b9cb5d89d80ba \n", + "118433 City of Los Angeles cc53a0dbf5df90e3009b9cb5d89d80ba \n", + "118434 City of Los Angeles cc53a0dbf5df90e3009b9cb5d89d80ba \n", + "118452 Los Angeles World Airports 2f1c266fc20f9875777fb752af32a66e \n", + "\n", + " route_long_name \\\n", + "114157 FlyAway - Van Nuys to LAX \n", + "116005 DASH Van Nuys/Studio City Counterclockwise \n", + "118450 FlyAway - Van Nuys to LAX \n", + "116604 FlyAway - Van Nuys to LAX \n", + "116606 FlyAway - LAX to Van Nuys \n", + "118415 DASH Van Nuys/Studio City Clockwise \n", + "118416 DASH Van Nuys/Studio City Counterclockwise \n", + "118433 DASH Panorama City/Van Nuys Clockwise \n", + "118434 DASH Panorama City/Van Nuys Counterclockwise \n", + "118452 FlyAway - LAX to Van Nuys \n", + "\n", + " route_short_name route_id \n", + "114157 VN to LAX 1 \n", + "116005 Van Nuys/Studio City Counterclockwise 800 \n", + "118450 VN to LAX TL-1 \n", + "116604 VN to LAX 1 \n", + "116606 LAX to VN 5 \n", + "118415 Van Nuys/Studio City Clockwise 799 \n", + "118416 Van Nuys/Studio City Counterclockwise 800 \n", + "118433 Panorama City/Van Nuys Clockwise 801 \n", + "118434 Panorama City/Van Nuys Counterclockwise 804 \n", + "118452 LAX to VN TL-5 " + ] + }, + "execution_count": 148, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(\n", + " df.loc[df.recent_combined_name.str.contains(\"Van Nuys\")][\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": "code", + "execution_count": 146, + "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": {}, @@ -5203,13 +8892,13 @@ } ], "source": [ - "inspect_recent_rows(df, \"UCLA - Marina del Rey\")" + "display_map(routes, \"VN to LAX FlyAway - Van Nuys to LAX\")" ] }, { "cell_type": "code", - "execution_count": 41, - "id": "f06972a6-7c24-4d5e-b4f1-fcd9cd7742ce", + "execution_count": 166, + "id": "c01f27d5-0026-4d80-9924-86b5bfcabf0e", "metadata": { "tags": [] }, @@ -5235,175 +8924,170 @@ " \n", " \n", " \n", + " schedule_gtfs_dataset_key\n", + " name\n", + " organization_name\n", " service_date\n", - " recent_combined_name\n", - " portfolio_organization_name\n", - " route_long_name\n", - " route_short_name\n", - " route_id\n", " \n", " \n", " \n", " \n", - " 103663\n", - " 2024-11-13\n", - " 9__Pacific Palisades\n", - " City of Santa Monica\n", - " Pacific Palisades\n", - " 9\n", - " 3763\n", + " 29\n", + " 4a3f5fe2e305cc696684d11226ba9878\n", + " LAX FlyAway Schedule\n", + " Los Angeles World Airports\n", + " 2025-01-15\n", " \n", " \n", - " 106451\n", - " 2024-12-11\n", - " 9__Pacific Palisades\n", - " City of Santa Monica\n", - " Pacific Palisades\n", - " 9\n", - " 3763\n", + " 182\n", + " 723210f3a6d61ee3936df401e18a5636\n", + " LAX Shuttles Schedule\n", + " Los Angeles World Airports\n", + " 2025-01-15\n", " \n", " \n", - " 111237\n", + " 183\n", + " 2f1c266fc20f9875777fb752af32a66e\n", + " LAX Flyaway Bus Schedule\n", + " Los Angeles World Airports\n", " 2025-01-15\n", - " 9__Pacific Palisades\n", - " City of Santa Monica\n", - " Pacific Palisades\n", - " 9\n", - " 3813\n", " \n", " \n", - " 111730\n", + " 31\n", + " 4a3f5fe2e305cc696684d11226ba9878\n", + " LAX FlyAway Schedule\n", + " Los Angeles World Airports\n", + " 2025-02-12\n", + " \n", + " \n", + " 183\n", + " 723210f3a6d61ee3936df401e18a5636\n", + " LAX Shuttles Schedule\n", + " Los Angeles World Airports\n", + " 2025-02-12\n", + " \n", + " \n", + " 184\n", + " 2f1c266fc20f9875777fb752af32a66e\n", + " LAX Flyaway Bus Schedule\n", + " Los Angeles World Airports\n", " 2025-02-12\n", - " 9__Pacific Palisades\n", - " City of Santa Monica\n", - " Pacific Palisades\n", - " 9\n", - " 3813\n", " \n", " \n", - " 114885\n", + " 32\n", + " 4a3f5fe2e305cc696684d11226ba9878\n", + " LAX FlyAway Schedule\n", + " Los Angeles World Airports\n", + " 2025-03-12\n", + " \n", + " \n", + " 180\n", + " 723210f3a6d61ee3936df401e18a5636\n", + " LAX Shuttles Schedule\n", + " Los Angeles World Airports\n", " 2025-03-12\n", - " 9__Pacific Palisades\n", - " City of Santa Monica\n", - " Pacific Palisades\n", - " 9\n", - " 9\n", " \n", " \n", - " 116525\n", + " 181\n", + " 2f1c266fc20f9875777fb752af32a66e\n", + " LAX Flyaway Bus Schedule\n", + " Los Angeles World Airports\n", " 2025-03-12\n", - " 9__Pacific Palisades\n", - " City of Santa Monica\n", - " Pacific Palisades\n", - " 9\n", - " 3813\n", " \n", " \n", - " 117541\n", + " 32\n", + " 73e3164043eb7312454dd03413a6b310\n", + " LAX FlyAway Schedule\n", + " Los Angeles World Airports\n", + " 2025-04-16\n", + " \n", + " \n", + " 186\n", + " 723210f3a6d61ee3936df401e18a5636\n", + " LAX Shuttles Schedule\n", + " Los Angeles World Airports\n", " 2025-04-16\n", - " 9__Pacific Palisades\n", - " City of Santa Monica\n", - " Pacific Palisades\n", - " 9\n", - " 9\n", " \n", " \n", - " 119301\n", + " 187\n", + " 2f1c266fc20f9875777fb752af32a66e\n", + " LAX Flyaway Bus Schedule\n", + " Los Angeles World Airports\n", " 2025-04-16\n", - " 9__Pacific Palisades\n", - " City of Santa Monica\n", - " Pacific Palisades\n", - " 9\n", - " 3912\n", " \n", " \n", - " 120119\n", + " 30\n", + " be0f451de12b510fe2af5d47fe3cd0e7\n", + " LAX FlyAway Schedule\n", + " Los Angeles World Airports\n", + " 2025-05-14\n", + " \n", + " \n", + " 185\n", + " 723210f3a6d61ee3936df401e18a5636\n", + " LAX Shuttles Schedule\n", + " Los Angeles World Airports\n", " 2025-05-14\n", - " 9__Pacific Palisades\n", - " City of Santa Monica\n", - " Pacific Palisades\n", - " 9\n", - " 9\n", " \n", " \n", - " 121825\n", + " 186\n", + " 2f1c266fc20f9875777fb752af32a66e\n", + " LAX Flyaway Bus Schedule\n", + " Los Angeles World Airports\n", " 2025-05-14\n", - " 9__Pacific Palisades\n", - " City of Santa Monica\n", - " Pacific Palisades\n", - " 9\n", - " 3912\n", " \n", " \n", "\n", "" ], "text/plain": [ - " service_date recent_combined_name portfolio_organization_name \\\n", - "103663 2024-11-13 9__Pacific Palisades City of Santa Monica \n", - "106451 2024-12-11 9__Pacific Palisades City of Santa Monica \n", - "111237 2025-01-15 9__Pacific Palisades City of Santa Monica \n", - "111730 2025-02-12 9__Pacific Palisades City of Santa Monica \n", - "114885 2025-03-12 9__Pacific Palisades City of Santa Monica \n", - "116525 2025-03-12 9__Pacific Palisades City of Santa Monica \n", - "117541 2025-04-16 9__Pacific Palisades City of Santa Monica \n", - "119301 2025-04-16 9__Pacific Palisades City of Santa Monica \n", - "120119 2025-05-14 9__Pacific Palisades City of Santa Monica \n", - "121825 2025-05-14 9__Pacific Palisades City of Santa Monica \n", - "\n", - " route_long_name route_short_name route_id \n", - "103663 Pacific Palisades 9 3763 \n", - "106451 Pacific Palisades 9 3763 \n", - "111237 Pacific Palisades 9 3813 \n", - "111730 Pacific Palisades 9 3813 \n", - "114885 Pacific Palisades 9 9 \n", - "116525 Pacific Palisades 9 3813 \n", - "117541 Pacific Palisades 9 9 \n", - "119301 Pacific Palisades 9 3912 \n", - "120119 Pacific Palisades 9 9 \n", - "121825 Pacific Palisades 9 3912 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "inspect_recent_rows(df, \"Pacific Palisades\")" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "4c9bac66-11c0-4793-ad7a-ff9a73ad69f4", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" - ], - "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": 166, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ - "display_map(routes, \"9 Pacific Palisades\")" + "crosswalk_df.loc[\n", + " crosswalk_df.organization_name.str.contains(\n", + " \"Los Angeles World Airports\",\n", + " )\n", + "]" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ee79d500-6acc-41cd-acb2-8d6b897fa9bd", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/gtfs_digest/26_tiffany_route_id.ipynb b/gtfs_digest/26_tiffany_route_id.ipynb new file mode 100644 index 000000000..a46172466 --- /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/_operator_report.ipynb b/gtfs_digest/_operator_report.ipynb index b25241ecd..01d9a01bf 100644 --- a/gtfs_digest/_operator_report.ipynb +++ b/gtfs_digest/_operator_report.ipynb @@ -145,6 +145,19 @@ ")" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "82ac35e9-3efb-4683-8911-0fb64bd7c691", + "metadata": {}, + "outputs": [], + "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/rt_segment_speeds/segment_speed_utils/time_series_utils.py b/rt_segment_speeds/segment_speed_utils/time_series_utils.py index 7584e6f3f..70e719092 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", From 7c77afb6374158e7249d988ab0d32fd7f83da45b Mon Sep 17 00:00:00 2001 From: amandaha8 Date: Fri, 20 Jun 2025 22:26:49 +0000 Subject: [PATCH 06/10] added district info and made map look like speedmaps --- .../18_shs_routes_ct_district_report.ipynb | 597 ++++++++++++++---- 1 file changed, 477 insertions(+), 120 deletions(-) diff --git a/gtfs_digest/18_shs_routes_ct_district_report.ipynb b/gtfs_digest/18_shs_routes_ct_district_report.ipynb index fe5d8a946..c816eb843 100644 --- a/gtfs_digest/18_shs_routes_ct_district_report.ipynb +++ b/gtfs_digest/18_shs_routes_ct_district_report.ipynb @@ -18,6 +18,7 @@ "source": [ "import geopandas as gpd\n", "import google.auth\n", + "import numpy as np\n", "import pandas as pd\n", "\n", "credentials, project = google.auth.default()\n", @@ -36,8 +37,6 @@ }, "outputs": [], "source": [ - "\n", - "\n", "from calitp_data_analysis import geography_utils, utils\n", "from segment_speed_utils import gtfs_schedule_wrangling, helpers\n", "from shared_utils import (\n", @@ -49,8 +48,7 @@ " rt_dates,\n", " rt_utils,\n", ")\n", - "from update_vars import GTFS_DATA_DICT, RT_SCHED_GCS, SCHED_GCS, SEGMENT_GCS\n", - "\n" + "from update_vars import GTFS_DATA_DICT, RT_SCHED_GCS, SCHED_GCS, SEGMENT_GCS" ] }, { @@ -79,8 +77,8 @@ "source": [ "def process_transit_routes() -> gpd.GeoDataFrame:\n", " \"\"\"\n", - " Select the most recent transit route to \n", - " figure out how much of it intersects with \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", @@ -91,15 +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", + "\n", " # Keep the row for each portfolio_organization_name/recent_combined_name\n", - " # that is the most recent. \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", @@ -114,7 +112,7 @@ " ).length\n", " )\n", "\n", - " # Drop any 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", @@ -132,7 +130,7 @@ }, "outputs": [], "source": [ - "transit_routes = process_transit_routes()" + "# transit_routes = process_transit_routes()" ] }, { @@ -144,7 +142,7 @@ }, "outputs": [], "source": [ - "transit_routes.drop(columns=[\"geometry\"]).sample(3)" + "# transit_routes.drop(columns=[\"geometry\"]).sample(3)" ] }, { @@ -156,7 +154,7 @@ }, "outputs": [], "source": [ - "len(transit_routes)" + "# len(transit_routes)" ] }, { @@ -168,7 +166,7 @@ }, "outputs": [], "source": [ - "transit_routes.recent_combined_name.value_counts().head()" + "# transit_routes.recent_combined_name.value_counts().head()" ] }, { @@ -180,7 +178,7 @@ }, "outputs": [], "source": [ - "transit_routes.portfolio_organization_name.value_counts().head()" + "# transit_routes.portfolio_organization_name.value_counts().head()" ] }, { @@ -202,7 +200,7 @@ }, "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 there will only be one row for each\n", " route name and route type\n", @@ -219,13 +217,11 @@ "\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 = (\n", - " shn.dissolve(by=[\"Route\"])\n", - " .reset_index()\n", - " .drop(columns=[\"County\", \"District\", \"Direction\", \"RouteType\"])\n", - " )\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", + " # 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", @@ -234,10 +230,10 @@ " highway_feet=shn_dissolved.geometry.length,\n", " shn_route=shn_dissolved.shn_route.astype(int),\n", " )\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" @@ -252,7 +248,7 @@ }, "outputs": [], "source": [ - "# dissolved = dissolve_shn()" + "# dissolved_route = dissolve_shn([\"Route\",\"District\"], \"ct_district_route\")" ] }, { @@ -326,16 +322,16 @@ }, "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 before overlaying it with \n", - " transit routes. \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", + " # 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", @@ -345,10 +341,10 @@ " )\n", "\n", " # Save it out so we won't have to buffer over again and\n", - " # can just read it in. \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" @@ -388,7 +384,46 @@ }, "outputs": [], "source": [ - "# buffered_df = buffer_shn(SHN_HWY_BUFFER_FEET)" + "# buffered_df = buffer_shn(SHN_HWY_BUFFER_FEET, \"ct_district_route\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5fa7355f-ef54-42dc-adef-90bba2afdc34", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# buffered_df.loc[buffered_df.shn_route == 5].explore()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "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": null, + "id": "857a24b9-c5fd-4808-9dc3-0d0953ccc53e", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "shn_district_df.shape" ] }, { @@ -420,17 +455,15 @@ }, "outputs": [], "source": [ - "def routes_shn_intersection(\n", - " buffer_amount: int,\n", - ") -> gpd.GeoDataFrame:\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", + " 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 if we don't have it available. \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", @@ -439,18 +472,18 @@ " else:\n", " shn_routes_gdf = buffer_shn(buffer_amount)\n", "\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", + " # 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 transit routes with the SHN geographies. \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, round it up and \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", + " # shapes.\n", " gdf = gdf.assign(\n", " pct_route_on_hwy=(gdf.geometry.length / gdf.route_length_feet).round(3) * 100,\n", " ).drop(\n", @@ -460,7 +493,7 @@ " )\n", "\n", " # Join back the dataframe above with the original transit route dataframes\n", - " # so we can have the original transit route geographies. \n", + " # so we can have the original transit route geographies.\n", " gdf2 = pd.merge(\n", " transit_routes_gdf,\n", " gdf,\n", @@ -468,10 +501,9 @@ " \"service_date\",\n", " \"portfolio_organization_name\",\n", " \"recent_combined_name\",\n", - " \"schedule_gtfs_dataset_key\",\n", " \"route_length_feet\",\n", " ],\n", - " how=\"inner\",\n", + " how=\"left\",\n", " )\n", "\n", " return gdf2" @@ -486,7 +518,7 @@ }, "outputs": [], "source": [ - "intersecting = routes_shn_intersection(SHN_HWY_BUFFER_FEET)" + "intersecting = routes_shn_intersection(SHN_HWY_BUFFER_FEET, \"ct_district_route\")" ] }, { @@ -504,113 +536,365 @@ { "cell_type": "code", "execution_count": null, - "id": "adcd5ca9-25b5-4aac-a4cd-0a7a9d98532f", + "id": "2eb8c505-2d6c-4416-a31a-b974cafb1ff9", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "intersecting.recent_combined_name.value_counts().describe()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "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": null, + "id": "7c8af6ad-1e43-4da4-88b9-e64bddd8de02", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "multi_district_routes.sort_values(by=[\"District\"], ascending=False).head(20)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "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": null, + "id": "eab02039-73a9-40fd-a806-caff9691738c", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# transit_routes_gdf = process_transit_routes()" + "bakersfield_route.District.unique()" ] }, { "cell_type": "code", "execution_count": null, - "id": "5bdbb646-9217-4acb-906c-b230933e62fe", + "id": "1fecd99c-44f3-47cd-9327-ba679e3c8d10", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# len(intersecting)" + "# bakersfield_route.drop(columns = [\"service_date\"]).explore()" ] }, { "cell_type": "code", "execution_count": null, - "id": "de6248ff-8a6b-4dc3-bb10-9feb28a2510b", + "id": "5004cbb9-f740-494a-b335-dcf0e7f977cd", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# intersecting.loc[intersecting.pct_route_on_hwy != 0].recent_combined_name.nunique()" + "intersecting.loc[\n", + " intersecting.recent_combined_name == \"100 Bakersfield - Lancaster\"\n", + "].pct_route_on_hwy.sum()" ] }, { "cell_type": "markdown", - "id": "9f9296aa-d0a9-45c3-b8a9-43872d1614dd", + "id": "dd3cb6cc-131f-4948-b1e4-0b79528ef3c8", "metadata": {}, "source": [ - "## Create final dataframes" + "## 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": null, - "id": "31c72996-a662-4278-9bad-f71f9d4c440e", + "id": "6c49e959-ff7a-49c6-9294-ab21824c3f92", "metadata": { "tags": [] }, "outputs": [], "source": [ - "def final_transit_route_shs_outputs(gdf: gpd.GeoDataFrame, pct_route_intersection: int):\n", - " \"\"\"\n", - " Take the gdf with the transit routes overlaid with state highway\n", - " network routes, aggregate it to find the pct filter it to meet a certain threshold, and\n", - " clean it into dataframes to use for display. \n", - " \"\"\"\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", + " agg1 = (\n", + " df.groupby(\n", " [\n", " \"portfolio_organization_name\",\n", " \"recent_combined_name\",\n", - " ]\n", + " ],\n", + " as_index=False,\n", + " )[[\"shn_route\", \"District\", \"pct_route_on_hwy\"]]\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\": pct_route_on_hwy_agg,\n", + " }\n", " )\n", - " .agg({\"pct_route_on_hwy\": \"sum\"})\n", - " .reset_index()\n", + " .reset_index(drop=True)\n", " )\n", + " return agg1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "49ef0c20-a178-41aa-ac2b-3c2ee10a5105", + "metadata": {}, + "outputs": [], + "source": [ + "# group_route_district()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "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\"] == 0, \"N\", \"Y\")\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "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", + " # 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", + " # Sum up the percentage of a transit route that\n", + " # intersects with the highway.\n", + " agg1 = group_route_district(gdf, \"sum\")\n", + "\n", + " # Add yes/no column to signify if a transit route intersects\n", + " # with a SHN route\n", + " agg1 = create_on_shs_column(agg1)\n", + " return agg1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b555caba-52fc-4253-bea1-8e1da0f7bd1e", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "open_data_portal_df = prep_open_data_portal(intersecting)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2a79984b-1f0f-4ca3-99b2-7e1fbdbce1c7", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "open_data_portal_df.on_shs.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5af04ee4-5d19-4443-947e-e20c7108a74a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "open_data_portal_df.loc[open_data_portal_df.on_shs == \"Y\"].pct_route_on_hwy.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "39020051-ccba-46f5-b612-588bdc5c9410", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "open_data_portal_df.loc[open_data_portal_df.on_shs == \"N\"].pct_route_on_hwy.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "36226282-1c27-4677-8b8e-f0f60cfdc216", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "open_data_portal_df.sample(10)" + ] + }, + { + "cell_type": "markdown", + "id": "9f9296aa-d0a9-45c3-b8a9-43872d1614dd", + "metadata": {}, + "source": [ + "## Create final dataframes for portfolio" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "49c144fd-c909-464d-a8ac-790ddc608201", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "open_data_portal_df.District.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b8bbd0d5-6d96-4e31-8c61-9ccbc1699ee3", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "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(df['pct_route_on_hwy'], \n", + " bins=bins, labels=labels, right=False).astype(str)\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "31c72996-a662-4278-9bad-f71f9d4c440e", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "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 > pct_route_intersection)\n", + " & (open_data_df.District.str.contains(district))\n", + " ]\n", + " intersecting_gdf.District = intersecting_gdf.District.astype(str)\n", + " intersecting_gdf = intersecting_gdf.loc[\n", + " intersecting_gdf.District.str.contains(district)\n", + " ]\n", "\n", - " # Filter out for any pct_route_on_hwy that we deem too low. \n", - " map_gdf = map_gdf.loc[map_gdf.pct_route_on_hwy > pct_route_intersection]\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", + " # 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_gdf2 = pd.merge(\n", - " gdf[\n", + " map_gdf = pd.merge(\n", + " intersecting_gdf[\n", " [\"portfolio_organization_name\", \"recent_combined_name\", \"geometry\"]\n", " ].drop_duplicates(),\n", - " map_gdf,\n", + " open_data_df,\n", " on=[\"portfolio_organization_name\", \"recent_combined_name\"],\n", " )\n", + "\n", + " # Add column for color scale when mapping \n", + " map_gdf = categorize_percentiles(map_gdf)\n", " # We want a text table to display.\n", - " # For transit routes that intersect with multiple highways, join the highways\n", - " # together so there will be one row for each unique route.\n", - " text_df = pd.merge(\n", - " gdf.drop(columns=[\"pct_route_on_hwy\"]), map_gdf2.drop(columns = [\"geometry\"]), 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", + " # 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", + " [\"portfolio_organization_name\", \"recent_combined_name\", \"pct_route_on_hwy\"]\n", + " ],\n", + " on=[\"portfolio_organization_name\", \"recent_combined_name\"],\n", " )\n", "\n", - " return map_gdf2, text_df" + " # 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", + " \"pct_route_on_hwy\": \"pct_route_on_hwy_across_districts\",\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" ] }, { @@ -622,28 +906,68 @@ }, "outputs": [], "source": [ - "map_gdf, text_df = final_transit_route_shs_outputs(intersecting, 20)" + "map_gdf_d7, text_df_d7 = final_transit_route_shs_outputs(\n", + " intersecting, open_data_portal_df, 20, \"7\"\n", + ")" ] }, { - "cell_type": "markdown", - "id": "b11f2a17-cbfd-43b1-9f52-381aa7cac8d7", - "metadata": {}, + "cell_type": "code", + "execution_count": null, + "id": "62a9b9ef-c6a9-4fd1-be7e-fdf826276600", + "metadata": { + "tags": [] + }, + "outputs": [], "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." + "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": "2e44da32-07ba-45bb-b675-3c06b69ca4d4", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "text_df_d7.loc[text_df_d7.recent_combined_name == \"100 Bakersfield - Lancaster\"]" ] }, { "cell_type": "code", "execution_count": null, - "id": "aa0e7234-950e-453b-9b8a-2c2b5ce51ddf", + "id": "71a3d332-54b7-41cb-ba6f-840cf615972c", "metadata": { "tags": [] }, "outputs": [], "source": [ - "len(map_gdf)" + "text_df_d6.loc[text_df_d6.recent_combined_name == \"100 Bakersfield - Lancaster\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c9cca9da-a6f4-43a0-be1f-68e1e29e050b", + "metadata": { + "tags": [] + }, + "outputs": [], + "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." ] }, { @@ -651,7 +975,9 @@ "id": "fee82333-2d3d-420c-ba47-b424634dc5d0", "metadata": {}, "source": [ - "* 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." + "* 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." ] }, { @@ -666,7 +992,9 @@ "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_{SHN_HWY_BUFFER_FEET}_ft.parquet\"" + "HWY_FILE = (\n", + " f\"{GCS_FILE_PATH}shn_buffered_{SHN_HWY_BUFFER_FEET}_ft_ct_district_route.parquet\"\n", + ")" ] }, { @@ -702,7 +1030,7 @@ }, "outputs": [], "source": [ - "shn_gdf2 = shn_gdf.dissolve()" + "shn_gdf2 = shn_gdf.dissolve(\"District\").reset_index()" ] }, { @@ -717,6 +1045,30 @@ "len(shn_gdf2)" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "120b5b9a-a74d-4d5c-b729-867b0699d7f9", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "shn_gdf2.columns" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eefd3209-e7e8-462c-b815-eb9413e09eba", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "shn_gdf2.District.unique()" + ] + }, { "cell_type": "code", "execution_count": null, @@ -726,31 +1078,37 @@ }, "outputs": [], "source": [ - "m = shn_gdf2.explore(height=250, width=500, name=\"shs\")" + "m = shn_gdf2.loc[shn_gdf2.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": "973623a7-b4e1-4719-9449-d79cad9ce189", + "id": "61725848-1990-477b-bdfc-d8f8b29a1ae0", "metadata": { "tags": [] }, "outputs": [], "source": [ - "m = map_gdf.explore(\"recent_combined_name\", m=m, name=\"transit_routes\")" + "cmap_colors = [ \"#93c3db\", \"#144c87\", \"#8c1024\", \"#e4846c\",]" ] }, { "cell_type": "code", "execution_count": null, - "id": "13168275-fdc3-4374-a13f-a48c6b569447", + "id": "94249045-af30-4fa0-b5d3-c795962c70d3", "metadata": { "tags": [] }, "outputs": [], "source": [ - " m" + "map_gdf_d7.explore(\"percentile_route\", m=m, categorical = True, cmap = cmap_colors, legend = True)" ] }, { @@ -766,14 +1124,13 @@ { "cell_type": "code", "execution_count": null, - "id": "9f908efe-e646-492b-b4e9-52747ae2a79b", + "id": "c668f18c-f69a-458c-bbdf-9f4816236d44", "metadata": { - "scrolled": true, "tags": [] }, "outputs": [], "source": [ - "text_df.sort_values(by = [\"pct_route_on_hwy\"], ascending = False)" + "text_df_d7.sort_values(by = [\"pct_route_on_hwy_across_districts\"], ascending = False).head()" ] } ], From 3ed5778b4caae38f648122dad779026f6c1a2cfb Mon Sep 17 00:00:00 2001 From: amandaha8 Date: Mon, 23 Jun 2025 22:42:11 +0000 Subject: [PATCH 07/10] checking out the data after commenting out vctc and elk grove --- gtfs_digest/25_correct_crosswalk.ipynb | 3531 ------------------------ gtfs_digest/25_route_names.ipynb | 1647 +++++++---- gtfs_digest/27_vp_chart.ipynb | 303 ++ gtfs_digest/_operator_report.ipynb | 47 +- 4 files changed, 1390 insertions(+), 4138 deletions(-) delete mode 100644 gtfs_digest/25_correct_crosswalk.ipynb create mode 100644 gtfs_digest/27_vp_chart.ipynb diff --git a/gtfs_digest/25_correct_crosswalk.ipynb b/gtfs_digest/25_correct_crosswalk.ipynb deleted file mode 100644 index cee470d1a..000000000 --- a/gtfs_digest/25_correct_crosswalk.ipynb +++ /dev/null @@ -1,3531 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0a7220c0-eb1c-468c-a2d6-b0a7e765f66e", - "metadata": {}, - "source": [ - "## Correct Crosswalk" - ] - }, - { - "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": 60, - "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": 61, - "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": 65, - "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": 65, - "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", - "
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": 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", - "
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": 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": 59, - "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", - "
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": 59, - "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": 17, - "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": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df2.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "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": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df2.service_date.unique()" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "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": 20, - "id": "78efc372-7911-4f87-937a-3ba129eefbd9", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "VCTC GMV Schedule 239\n", - "Name: name, dtype: int64" - ] - }, - "execution_count": 20, - "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": 21, - "id": "575c71e8-c5eb-4a4d-bcab-d92e99b71d8b", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(239, 41)" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(route_80_89), len(route_80_89.drop_duplicates())" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "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": 23, - "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", - " 'caltrans_district', 'portfolio_organization_name'],\n", - " dtype='object')" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "route_80_89_dedup.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "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": 24, - "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": 67, - "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": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "route_80_89_dedup.route_id.unique()" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "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", - "
1383513934140041410914173142371430714377
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)
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 Express
route_id41344136413741414143414541464148
recent_route_id41344136413741414143414541464148
direction_id11111111
time_periodpeakpeakpeakpeakpeakpeakpeakpeak
avg_scheduled_service_minutes86.8050.00125.50128.00129.00106.00129.00149.67
avg_stop_miles7.7132.1028.8817.823.702.9138.065.57
n_scheduled_trips51221213
frequency0.620.120.250.250.120.250.120.38
route_primary_directionEastboundEastboundEastboundEastboundEastboundEastboundEastboundEastbound
vp_per_minute2.321.743.012.17NaN0.721.341.91
pct_in_shape0.000.000.000.00NaN0.000.000.00
pct_rt_journey_atleast1_vp0.790.561.000.82NaN0.240.450.64
pct_rt_journey_atleast2_vp0.770.531.000.70NaN0.240.450.64
pct_sched_journey_atleast1_vp1.001.000.581.00NaN1.001.001.00
pct_sched_journey_atleast2_vp1.001.000.581.00NaN1.001.001.00
rt_sched_journey_ratio1.703.200.581.43NaN6.744.492.17
avg_rt_service_minutes147.42159.9277.67187.70NaN714.46579.38324.76
speed_mph15.47NaN19.46NaNNaN30.45NaNNaN
\n", - "
" - ], - "text/plain": [ - " 13835 \\\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", - " 13934 \\\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", - " 14004 \\\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", - " 14109 \\\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", - " 14173 \\\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", - " 14237 \\\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", - " 14307 \\\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", - " 14377 \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": 66, - "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": "iVBORw0KGgoAAAANSUhEUgAAAXkAAABXCAYAAADh0jXPAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAABXcSURBVHhe7Z1NTxRLF8fP83wPYpAJJujSPRii3LggeBfzAcCX3YVITMzEpZmYx5CQu5PR+QAskLAwF6OB2bsEEicjucoH4alTL92nql9met4Y2v8vaZmerq6uOlV1uup0O///XCoIAABAKfmv/QsAAKCEwMkDAECJgZMHAIASAycPAAAlZiRO/njzJt28mbZt0LE6frHzgG5u8qffhJ/v6YGtu7IObShbbHzVOwZ9nO3zgN7/5C8u6P0fxmYPdi50konj64bXpsOE+8/k1Nu0hddeY0SPpd9prEwi3Nf/eK96wvVkJE5+Yeuczs95a1Ftlmi54fa3acGm+X1ZoG1li+1Fu8tO5Fmd5rSNPtPjG3wTXKP67aa22eenUzbd+OjuZNWN6skZ1Y5K2KbeDfnq0WNpC6PGhydKbkI0fIY7yRhtWXsh4eTb7TZVq1U9S+O/vA9GyQ86aVfoTsXuKn5871Dl1ozdm0B+duiM5qiibkgAgMkm4eRfvXpF375905/5L++PChnWCe+cOqRjj/khARPuSD0vCiHwln/39POXy3F7592xeUVL5ZzrJvDTbhzarzVi+a9njat0QB2q31Np//gf/U8dW/1I1Hkzr86N65BpD7uUfG9tGdUj0xa2fl9diEjmZ8qWdv0IzvdeXZX4gFb5XGefXNvH4Se9BeEHr26qLh37vaFHu0chL7PJ8ErY1pl5ZNVNI8vRe/30tTdV++jj7rx8e0jM+fFxOWYyQwi2TxzLeufZXG35/Vkh29fl7fJMWf145bbl8ftoYIOUPp1a/sSYiW3g18kvj1f+tH6tye//P9LKo/H7aFSmnLKOFf7PUJLp6enE1j+/LhtL05frX+yu5de7+zrf6Psv62r//mXjX7Orjy811Nli//mR/nz0fPry/rvoyOXRF/tZ57F+aVIpeF/k4aPK9TzIP0p7dLnO9bbXM5jv4nrwflxenzCtsUFcttAmybz8Oobls/uufLregY1zbWHrF+3b8on6htdP8G/j8n6Yf+b1TP6yzWT9w7q5+rj0me3tkbTpkcxfls3W37OXJKybzVvmwWUqVD+vffPThyTaWtjq15ej6LNHYENTp7BMBWwStq/NLypXwmYp5Q7zV+esBzaIytul/Ka8/pjR15O2SVxflI/3ZZ8LSPT/buVRx/2y5Zd13CRm8nfv3rWfDOH+0HjUjOPSi5tUm+3QiZ7CXdDhXoeWXzwmF42eelqj5Y/70Z258/2H/TRFC4sm1fGnA6q83Izjw5wn7dJh6h17ih5vifyXqlRpn5DLlahCtb9EHPTrPh3M1mgziqMv0OZLot3DlPtyIq261ruayrFfutuDvOv1YgtVv3cuP1W+F8tEp52+Zxm51/t5SLvtZapFzxbM9Q4+cemTdaPFbWo+sp8tae2dxtkPV4MFlY7/2vwb8rkBt13FXr93ZB4Lf6n2dP0lt36WRzX9rEXTS/o8RD+dWlyI7Rai+sQHd40bj6mmbGrsU9wmifZV+X1Q6QsR9FHOY1vYYOnPimhnRWb508gfI8V8QwZ55VF9Nn7GtkAruWUdPwkn//r168ix81/eHy8coyY6eCKWP3rJc0Yd1Sj8IKpJq/6ySP3bOXVLLHfOPNXb7saRgly+6SV6Nhc/ztTgqtN8lPdNmn/T8TulRae9XckefIXJt0eSPmwxEF2u1zmJwx9ue3JgbyrJ5xEh6e0dohzlPy2q7tkyREvp9PynZuYGuql55NYvhaLpJcqZnDfInpsVcuhGUZuY9p2bGV6PdsjQE4+n/skbI+MYD37oicM9k0TCyc/OztLu7q5+s4P/8v54maE7s2qmqd/ckJt584Rxb++0/tyleT3wp6hyW77FE2/xHVbADv7tHWq5dEf5M209ANTKI8w77a2H1MGiB3a/dLeHT0FbDEyX61XuUEXNgiJbu+0fnnVx3cLBZgalJNneabCjN+n0TUE7+rT8LcO6EefWL4Wi6UPY0XP6oyrt3uvH0fdnk3Bmyi8HDAI7+PqtVlT/VtGVgUfeGBn1eGAHP08nL+J8w5XoVZNw8lcPL92I6s/SBrMy6Gb8vXaoloWHasn7JHjYkkE427443M13wosraum36j3My4QHsZr1b0VpVZnfqpla3+TZI50ithgGude7sURVqtNa6oM9MwAP3oq6fd1Ssyz7Oae9fY5pQzwIm7nlHIYJA/hlU2nVzHn5YfIG3Re59UuhaHrBxc5G7NRvVCjLGvkUtYkNpbzZitP/fE91OVvVZTmgfdfn1fG13Jl5uDow4Zb+yR8jox0P4cromPYnfSY/CUw9/UzN2354xMzMlFNQAyT6/glR082A1Ayn9fLMXwZnzPpMvM6GANS29n2uS8x8gbbVbP/MWw5mzKJuPKbPXto1oheDxOTz7JFBAVukwTFnSnm7IJPc6/EMu0lz3nI5fvtFh2Nk3T6tiJlQTnt7qJncadye83tVatlVFtvOL9sqkZrVZc7idLw17e2aLPLrl6Ro+pipGeXI+C0NfQ7XI2s1l09Rm+j+52zC2zOimjfzVuOjwY4063iIsgE/hxBj5ERNunrHPBOTb6zkjpGC46FY/xdl0Xnvq1W/PaRJlnXc4KeGAQCFceGWq/jPeqAYEzmTBwBMMF83aPVjhapLcPDXAczkAQD58IsK/AZQBD/k7C9UBMYPnDwAAJQYhGsAAKDEwMkDAECJgZMHAIASAycPAAAlBk4eAABKDJw8AACUGDh5AAAoMXDyAABQYuDkAQCgxIzRybMOYr9CBwXg/4J9Rb/2Nk60nmUv9RybPYzOZU8/x1wKjFBEVF+t5+l+iTDe0uxRWF8VgAEYmZP3hHx/O0Z/Q+OfVu1ZaGIsLND20IQYxgP/kuJwHewyNa1whN7cT06LccDXnP9ei9Oct6hKSYUxAIYFwjUAjArWFjhv0vLHur3hG7EMX5xjih4/HZKACQApjMTJ69kKK8NYYQ5vydqRy9pQrcUs+cNlbNqMi7/LWyn8kEtiL51ZZkfHojIEy2+N/52/zM5QmtHLdtaX7CSEAoos091KyDtH1iMlDKNtEuWfXj6TJvuYXya5InG2kG0kVysp9uMyivK8t3WKSW/vJLYcOza/KA//fL9esuyWyGamrKzFabQ/RTqvzMH5fcHCzh0r+m6VsAqKiAMwEPwrlKPg17v7l9PPj+wec3S5Pj19Ob3UuPyl939dNpbUfpTGHF//Ynf1/v3Lxr/q45d1cR4jjoVwWpXP/Xc29b+Ny/syX7W/7o7ZMri0iTKL6+pjogzJ+kmS5dPpp9fVEUdYXx+TXtQjKGtok6Pn0pZ8fsNcS6TTaTw7+vDx+HqMrIdtL1EHPz9zPKqPbgdRX9sOPbV3ApPWt7f5TpbXb6OU/FJs5tU3LHOQ3ieor66fbN8Yv684O2a3PQDDZMzhmgrV3rk4spEAi0Svv+7TwWyNNqOYrpHN0jOgxU2qkdBN1WmrtJT1e9Yqnw9OsUbLuQkhYrW/HanZWP3K7yYmOrVUpcrH/Wg2ePzpgCp/LqlURoNy+UUcAzcSgnHafOz5jW1VKwfXr5I/q3vUFMo7xl6dvUNjL4nW3FymphAWn3r6WFzLrGxWT2vUGjCOL+vAMmmV9klqRFnb7uVmXAZl9w9SEi6vvVNRfecvUSN7ftTOCt0m7V067HP2nSiz7nf955cOy/9xLL5JpOXvMlaEAAyJiYnJa3Httq/RyCEf44Ct+LB1iDwYpcMtigxr6LCSw+p7GkFiFuRdppp2IizWq5bZkSYlbxySOaNOTw4gFPs1aGFqd5PrBRYJtx89OifUmb1DM3Y3gbLr6pu5DH3UURAKNSfJb+/uhGLsBlbt79BJX5rQpswmfOPKNE/1dr/5xfz43qHKrbB1zINqrT06lrefwO/KxDh57fDUzDV+68BuTpA5mmUb57vS51sc7OBZm9Ll3woEh7WyO99MeKb4aMXO6th5sBpOULbzXtVxcpxPwlHlwM7cfvRg558xo9aoGW9TCxmPa9ZoYs/R6snCzs7Rrb27kX2DTN5Me8OUebkRlEdtA70xZFdZZrKQRPfrvLYDYEAm5+2axRVa/rgaPPgU2Fl2/Y86nckldSHCGaYJo3jocuzTBq8WorcgeCVBVH/W74zLrkSeBA8Gn8hrpBC9lcHY9GkrmBtLVJ09oFXxUPNi573n0Gcihf5sRz9zq+KFg443ebXSHzqvN1vxtbSzs5+Zbu3dDT5frQTWxMPai501qpML45kbaxz+MfbLQ9/gvTYaEH6Ie69Oc1GI64Leb/p96OJwN38VBsCAjMzJm5h1yts1majlq3uvOFou+2838CDstGkAAWET147DLmt0ombSPvw2xAEdnMp4MdfnMzVv++EF/00RiYkvy7dr+HzjZN35q0Rq1pg7S3xUJXoWpz972cpIz3HeFtVOjb15m99jN+ej66DqxmVIa5Oppx/0sw9Xx/2HTVq2x4qSqO8zopq3aure3vlwuKNJcyK8Mr9XFc8clE3e1Yii4/u00vBrw88UzHF73cXtoI3UViiUYmwbnfv2DrW8lYBaLQj78uaXGYDhc700XnlmxAPnNxgU/Oqk/k8zPYYvrgNlrBMAk87khGu6khOuAAAAkMq1cPLmbZi8cAUAAIA0rle4BgAAQCGuUbgGAABAUeDkAQCgxMDJAwBAiYGTBwCAEgMnDwAAJQZOHgAASgycPAAAlBg4eQAAKDEjc/JJKTkjucY/ypQnezc5BHJ2BdT4fQk5tWX+kNk44foMQ86uN7Rs4UT+TnrQrtcQJw15vZmwdtDje3zjwxD7RL2NaLyMbSavfwb2tvn98FjtaLQMfzB0V+PX17S/PujSNW8VEAYZE6N2FPwrlOeT8ENyevBCfWnolM2uN1h0PdaHGMuN9OsWnbwQfoJ/5XYE10w4+Xa7TdVqVd9Z+C/vD4N0dZxrju4YUo3f1lNLBsYsPMWPqgEAAha3vd/i0nKaPUuK9k7Cyb969Yq+ffumP/Nf3h8MsyRJVcaPsEu3HRsSiZYtrLgvljPezIGPBXlFavwmXKSl/RK/ae/nOXjoSKrxJ4U3uqFnDKI8fjlV/XZs6Ce6w2eV3y1/5XFpH/7NeTNTybaNIGWm5s1urK2PZfnlLES0hcFfmj5QbS3bLxneC9s3WNr2MuPhMtyrU8f9zrt3TpadmOxrORuYH80zW1YfCuukz5U2CWzk94Xus+TsMvh9JLpGok0U3nc92jjTrsH5Cbt2gfPNODd9nJjr+f03+C4nT5+4v/U0PhTpZTLItknYPItuMp79wj9QJmEV+XDrh1AJP6GM72EV7D1l/MHV+H2VfMbkGavkp+QR0a8av6kr2y27vg51jedBeb36qXx6Lr+1oSijLodn05ikbQJS6uudw7aWddTpRdm8tjBlC/vDtLB9sn8k6xYfD9omj0Q9utkp/1raBmE9s/pQig1kWs7LXcdve7uf0T5dy6D2Y9vIPiNtysi65dc7QZZdZZl1ufw+FBPkH6YNbZcxThJ2kufl5hni2ybP/obsMoXX+fXlKOOaEmMPfwwMh8RM/u7du/aTIdwfJd5vxY9Ajd/lGSs+GQWnWCJuOCxscYytRdW9rJWLQ82ut+I6J/U+K1T7Swhs9FD+5Uhqzi7/RqkfKttHyzMmdV01Pw9pt+3rnC5sFVCdSpxvFb6ssHs/ZNqpl2s9asbL7MVNqmXp92qJQmf/H3RCNWUjl5alJ53KmZGhlP3fKKvlLN3zyuCFAXil6drFX3W6umq95EFtbM9vSkEYXS4njJ8Pi/NXpKwnn0turGePk1j72aDzseHS/DwHpcvYFZ+nFheidOnw6mNeP7McxfPKhJN//fp15Nj5L+9fBcNX47d5tgP5NbUs63yPmqYv0p83qE7wj3L2jTmq38tZesvlpF4CZzOq8o+cQZehWsA8kNZjvdZUIe8BGeq1uL9aJ6du0GfK+Tx2QvHsFCM9WnUDaJOQpeSN9XXPqNOXQ/LDJhwqdWjJQxtOZH1Zck5w0HqntnG6oHsSo71swrnu+srptcVYzxonVvvZ3EiMyL+5UfWQ56BklUndZM8bZG3ZJWSlw6Lz5gHsiBTTEk5+dnaWdnd39dNe/sv7V8Hw1fhtnmoG5J5mR9sgxlWNlKfGr2dzWYOVO4l8E+dIzSjtoTRGUv5xULmTXFH87Cir9Aifr1YN8o0lvY3i7Z2hXssKuCunfvzpzMzarVD8MTvFaBLDNwO1ajsKrine9ugdMyvUTsPm01Qz+QgWfdezWbmSUAxa77Q2tsTC+VmYm8FyI7i22vSKpMs40QLsfOPkle6jFTtz75LnoHQbu+zo9ffK2vcyHD07+HtqfTesMmWQcPITwwjU+M0AW818kFIYbmh1B4/V+FUpNoNZO3c8mqNKymANVytaud9+TmXY5c/jRkWVWiy1VYdc44dR/WDzqou2PP7bX7WED6yPN3kma9GOye8LkvAB50B0uVZR9DL+tE71U9dvOWRyRvW3B7T80PUavhkQ1Z/1+IAuF14VyIkQz27tR4251u7fW2IloRi03ny+WrWsyoe1anysqgmQDgd1QTvqJ+kr3q7jxN44Nz5Jm+bnOSh5ZbrY2Yiduu776fAYiFZSI2Rynbyq+qBq/CauKZ+Qqzzdu+02z2JvAATLWXsnl3fhmVuB2v8TouZ5fBOQyPLxtvZd3QzssXQGLX9M0jYh6lrKnlEI4RlR7WV+6bJJtuX+Qz8mP/X0A9WUk3GhKP84h77883kz5eZleSWekYbY5bxuk6y3RTzyrtUH2nmq4S9eq525RdRxsXAL/78C/Z60uGZv5Q0xz2nq91w++2r1Zw9Z+MZDH9XUw9NLLljvhF35/BbVTuP+nNf3E6iZb+tlMHbsWyndxwnfOA/o4FQ+r1Lk5NmNbuMjr0xTM9L+q0SN7BWZH04yW999LQPI/4Ergl9Zq9Odo35CEgJe8v5doc+THrIC4IqY4Jk8AD3A/yENDh6ATODkAQCgxCBcAwAAJQYzeQAAKDFw8gAAUGLg5AEAoMTAyQMAQImBkwcAgBIDJw8AACUGTh4AAEoMnDwAAJQYOHkAACgxcPIAAFBi4OQBAKDEjMjJW8X0HZa2uil+wzlQkReK9IWU7bVkVpzPsH9/GQAAysJIZ/IHe0QfWAJLC32wg1+ls5etSIZL/6C/ddys4hIrAxlhYxKi3azEYgR61Q3kGasxWdmt8yatmCQAAAACRurkpfq8lsGT6v4Kra7iHLmW+3MakXnK9oZYHHiBFkaojwgAANeZscXkQ01Eg9FpNY68V2V7IzNW3bOyWX1JpAEAwO/B2Jz81Mwc0WnHhmMkTnS4V2V7hh29Cdc0aRWOHgAAMhibkzfhGF8N/mJnjepCMb43Zftj2hBOnVX+AQAApDM+J68cdqjYP79XpZZ+KGvpSdl+hu4IRXidBzQ+AQAgFcj/AQBAiRnjTB4AAMC4gZMHAIASAycPAAAlBk4eAABKC9H/AakUyomDQrBKAAAAAElFTkSuQmCC" - } - }, - "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": 27, - "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", - "
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
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_cmVnaW9uSWQ9Q0E1NThEREMtRDdGMi00QjQ4LTlDQUMtREVFQTExMzRGODIw06 - 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", - " caltrans_district portfolio_organization_name \n", - "0 06 - Fresno / Bakersfield Tulare County Regional Transit Agency " - ] - }, - "execution_count": 27, - "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": 28, - "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": 29, - "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": 30, - "id": "8434d6cc-ff97-484d-afd2-2229defaa355", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(193, 3)" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "unique_route_names2.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "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": 31, - "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": 32, - "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": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df2.loc[df2.recent_combined_name == \"Route 4\"].portfolio_organization_name.unique()" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "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": 49, - "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": 51, - "id": "e73094d3-4aab-4e37-8573-4daf653424fb", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "224" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(unique_route_ids2)" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "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", - "
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
\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", - "\n", - " recent_combined_name route_id \n", - "2309 80-89 Coastal Express 12 \n", - "418 Elk Grove Commuter Route 10 \n", - "419 Elk Grove Local Route 7 \n", - "721 R10 Downtown LA Freeway Express 3 \n", - "1532 3 \n", - "2310 90-99 CSU Channel Islands 3 \n", - "2307 70-74 East County 3 \n", - "704 18 UCLA - Marina del Rey 3 \n", - "720 9 Pacific Palisades 3 \n", - "711 43 26th Street 3 " - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "unique_route_ids2.sort_values(by=[\"route_id\"], ascending=False).head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "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
39149Elk Grove Schedule89b0a03002512a909fe8e1a5d00a78a5City of Elk Grove
\n", - "
" - ], - "text/plain": [ - " name schedule_gtfs_dataset_key \\\n", - "39149 Elk Grove Schedule 89b0a03002512a909fe8e1a5d00a78a5 \n", - "\n", - " portfolio_organization_name \n", - "39149 City of Elk Grove " - ] - }, - "execution_count": 42, - "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": 52, - "id": "2595f49a-0970-4ea9-b271-bb85030fb437", - "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", - "
18662451295602156022560235602856029602356900569006
portfolio_organization_nameCity of Santa MonicaCity of Santa MonicaCity of Santa MonicaCity of Santa MonicaCity of Santa MonicaCity of Santa MonicaCity of Santa MonicaCity of Santa MonicaCity of Santa MonicaCity of Santa Monica
recent_combined_name18 UCLA - Marina del Rey18 UCLA - Marina del Rey18 UCLA - Marina del Rey18 UCLA - Marina del Rey18 UCLA - Marina del Rey18 UCLA - Marina del Rey18 UCLA - Marina del Rey18 UCLA - Marina del Rey18 UCLA - Marina del Rey18 UCLA - Marina del Rey
route_id1818382038203820391939191838203820
direction_id0000000000
time_periodpeakpeakpeakpeakpeakpeakpeakpeakpeakpeak
avg_scheduled_service_minutes56.6556.6566.0766.0766.0766.0766.0757.2466.0766.07
avg_stop_miles5.565.561.606.066.066.196.195.635.966.06
n_scheduled_trips16161515151515151515
frequency2.002.001.881.881.881.881.881.881.881.88
route_primary_directionSouthboundSouthboundNorthboundNorthboundNorthboundNorthboundNorthboundSouthboundNorthboundNorthbound
vp_per_minute1.952.001.011.00NaNNaNNaN1.99NaNNaN
pct_in_shape1.001.000.740.84NaNNaNNaN1.00NaNNaN
pct_rt_journey_atleast1_vp0.981.001.000.99NaNNaNNaN1.00NaNNaN
pct_rt_journey_atleast2_vp0.880.900.000.00NaNNaNNaN0.92NaNNaN
pct_sched_journey_atleast1_vp1.001.001.001.00NaNNaNNaN1.00NaNNaN
pct_sched_journey_atleast2_vp1.001.000.000.00NaNNaNNaN1.00NaNNaN
rt_sched_journey_ratio1.211.271.161.24NaNNaNNaN1.28NaNNaN
avg_rt_service_minutes67.6670.8978.2783.27NaNNaNNaN72.83NaNNaN
speed_mphNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", - "
" - ], - "text/plain": [ - " 18662 \\\n", - "portfolio_organization_name City of Santa Monica \n", - "recent_combined_name 18 UCLA - Marina del Rey \n", - "route_id 18 \n", - "direction_id 0 \n", - "time_period peak \n", - "avg_scheduled_service_minutes 56.65 \n", - "avg_stop_miles 5.56 \n", - "n_scheduled_trips 16 \n", - "frequency 2.00 \n", - "route_primary_direction Southbound \n", - "vp_per_minute 1.95 \n", - "pct_in_shape 1.00 \n", - "pct_rt_journey_atleast1_vp 0.98 \n", - "pct_rt_journey_atleast2_vp 0.88 \n", - "pct_sched_journey_atleast1_vp 1.00 \n", - "pct_sched_journey_atleast2_vp 1.00 \n", - "rt_sched_journey_ratio 1.21 \n", - "avg_rt_service_minutes 67.66 \n", - "speed_mph NaN \n", - "\n", - " 45129 \\\n", - "portfolio_organization_name City of Santa Monica \n", - "recent_combined_name 18 UCLA - Marina del Rey \n", - "route_id 18 \n", - "direction_id 0 \n", - "time_period peak \n", - "avg_scheduled_service_minutes 56.65 \n", - "avg_stop_miles 5.56 \n", - "n_scheduled_trips 16 \n", - "frequency 2.00 \n", - "route_primary_direction Southbound \n", - "vp_per_minute 2.00 \n", - "pct_in_shape 1.00 \n", - "pct_rt_journey_atleast1_vp 1.00 \n", - "pct_rt_journey_atleast2_vp 0.90 \n", - "pct_sched_journey_atleast1_vp 1.00 \n", - "pct_sched_journey_atleast2_vp 1.00 \n", - "rt_sched_journey_ratio 1.27 \n", - "avg_rt_service_minutes 70.89 \n", - "speed_mph NaN \n", - "\n", - " 56021 \\\n", - "portfolio_organization_name City of Santa Monica \n", - "recent_combined_name 18 UCLA - Marina del Rey \n", - "route_id 3820 \n", - "direction_id 0 \n", - "time_period peak \n", - "avg_scheduled_service_minutes 66.07 \n", - "avg_stop_miles 1.60 \n", - "n_scheduled_trips 15 \n", - "frequency 1.88 \n", - "route_primary_direction Northbound \n", - "vp_per_minute 1.01 \n", - "pct_in_shape 0.74 \n", - "pct_rt_journey_atleast1_vp 1.00 \n", - "pct_rt_journey_atleast2_vp 0.00 \n", - "pct_sched_journey_atleast1_vp 1.00 \n", - "pct_sched_journey_atleast2_vp 0.00 \n", - "rt_sched_journey_ratio 1.16 \n", - "avg_rt_service_minutes 78.27 \n", - "speed_mph NaN \n", - "\n", - " 56022 \\\n", - "portfolio_organization_name City of Santa Monica \n", - "recent_combined_name 18 UCLA - Marina del Rey \n", - "route_id 3820 \n", - "direction_id 0 \n", - "time_period peak \n", - "avg_scheduled_service_minutes 66.07 \n", - "avg_stop_miles 6.06 \n", - "n_scheduled_trips 15 \n", - "frequency 1.88 \n", - "route_primary_direction Northbound \n", - "vp_per_minute 1.00 \n", - "pct_in_shape 0.84 \n", - "pct_rt_journey_atleast1_vp 0.99 \n", - "pct_rt_journey_atleast2_vp 0.00 \n", - "pct_sched_journey_atleast1_vp 1.00 \n", - "pct_sched_journey_atleast2_vp 0.00 \n", - "rt_sched_journey_ratio 1.24 \n", - "avg_rt_service_minutes 83.27 \n", - "speed_mph NaN \n", - "\n", - " 56023 \\\n", - "portfolio_organization_name City of Santa Monica \n", - "recent_combined_name 18 UCLA - Marina del Rey \n", - "route_id 3820 \n", - "direction_id 0 \n", - "time_period peak \n", - "avg_scheduled_service_minutes 66.07 \n", - "avg_stop_miles 6.06 \n", - "n_scheduled_trips 15 \n", - "frequency 1.88 \n", - "route_primary_direction Northbound \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", - " 56028 \\\n", - "portfolio_organization_name City of Santa Monica \n", - "recent_combined_name 18 UCLA - Marina del Rey \n", - "route_id 3919 \n", - "direction_id 0 \n", - "time_period peak \n", - "avg_scheduled_service_minutes 66.07 \n", - "avg_stop_miles 6.19 \n", - "n_scheduled_trips 15 \n", - "frequency 1.88 \n", - "route_primary_direction Northbound \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", - " 56029 \\\n", - "portfolio_organization_name City of Santa Monica \n", - "recent_combined_name 18 UCLA - Marina del Rey \n", - "route_id 3919 \n", - "direction_id 0 \n", - "time_period peak \n", - "avg_scheduled_service_minutes 66.07 \n", - "avg_stop_miles 6.19 \n", - "n_scheduled_trips 15 \n", - "frequency 1.88 \n", - "route_primary_direction Northbound \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", - " 60235 \\\n", - "portfolio_organization_name City of Santa Monica \n", - "recent_combined_name 18 UCLA - Marina del Rey \n", - "route_id 18 \n", - "direction_id 0 \n", - "time_period peak \n", - "avg_scheduled_service_minutes 57.24 \n", - "avg_stop_miles 5.63 \n", - "n_scheduled_trips 15 \n", - "frequency 1.88 \n", - "route_primary_direction Southbound \n", - "vp_per_minute 1.99 \n", - "pct_in_shape 1.00 \n", - "pct_rt_journey_atleast1_vp 1.00 \n", - "pct_rt_journey_atleast2_vp 0.92 \n", - "pct_sched_journey_atleast1_vp 1.00 \n", - "pct_sched_journey_atleast2_vp 1.00 \n", - "rt_sched_journey_ratio 1.28 \n", - "avg_rt_service_minutes 72.83 \n", - "speed_mph NaN \n", - "\n", - " 69005 \\\n", - "portfolio_organization_name City of Santa Monica \n", - "recent_combined_name 18 UCLA - Marina del Rey \n", - "route_id 3820 \n", - "direction_id 0 \n", - "time_period peak \n", - "avg_scheduled_service_minutes 66.07 \n", - "avg_stop_miles 5.96 \n", - "n_scheduled_trips 15 \n", - "frequency 1.88 \n", - "route_primary_direction Northbound \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", - " 69006 \n", - "portfolio_organization_name City of Santa Monica \n", - "recent_combined_name 18 UCLA - Marina del Rey \n", - "route_id 3820 \n", - "direction_id 0 \n", - "time_period peak \n", - "avg_scheduled_service_minutes 66.07 \n", - "avg_stop_miles 6.06 \n", - "n_scheduled_trips 15 \n", - "frequency 1.88 \n", - "route_primary_direction Northbound \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 " - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "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": 43, - "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": 44, - "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": 45, - "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": 46, - "id": "023dd283-efa9-4606-98f1-491d43fa1ff2", - "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": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "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": 47, - "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": 56, - "id": "ebaa51b8-9f21-4c7d-8497-675ea1643b78", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "from segment_speed_utils import segment_calcs, metrics" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "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": 54, - "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": 57, - "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": 58, - "id": "b01ba61c-e1be-435c-8249-821fd30dde95", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'avg_rt_service_minutes',\n", - " 'avg_scheduled_service_minutes',\n", - " 'avg_stop_miles',\n", - " 'combined_name',\n", - " 'name',\n", - " 'recent_route_id',\n", - " 'route_id',\n", - " 'rt_sched_journey_ratio',\n", - " 'sched_rt_category',\n", - " 'speed_mph'}" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "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/25_route_names.ipynb b/gtfs_digest/25_route_names.ipynb index e24cd0314..81932ff5f 100644 --- a/gtfs_digest/25_route_names.ipynb +++ b/gtfs_digest/25_route_names.ipynb @@ -8,12 +8,12 @@ "# `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", - "* Samething with Yolobus" + "* Same thing with Yolobus" ] }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 127, "id": "3f3d3984-e41e-4bf0-a496-9f17c08b70bc", "metadata": {}, "outputs": [], @@ -21,8 +21,9 @@ "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\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)" @@ -48,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 3, "id": "fcc3a1b8-e2ec-404c-a1bd-fd0360fb45ae", "metadata": {}, "outputs": [], @@ -76,6 +77,18 @@ "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", @@ -102,7 +115,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 6, "id": "904e2d3f-8639-4186-9ab6-65a4b9a20795", "metadata": { "tags": [] @@ -116,7 +129,7 @@ }, { "cell_type": "code", - "execution_count": 154, + "execution_count": 7, "id": "074b4e0e-d92f-41d6-90cf-195fd8dd79da", "metadata": { "tags": [] @@ -146,7 +159,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "id": "0df6ddef-b908-43ca-9d4c-fa19b08819f3", "metadata": { "tags": [] @@ -161,7 +174,7 @@ }, { "cell_type": "code", - "execution_count": 155, + "execution_count": 9, "id": "c237c56d-3beb-46f2-a690-0d3ecb0c4763", "metadata": { "tags": [] @@ -250,7 +263,7 @@ "216 City of Santa Maria 2025-05-14 " ] }, - "execution_count": 155, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -265,7 +278,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "id": "b8ba491f-c038-4203-96da-948996b85540", "metadata": { "tags": [] @@ -277,7 +290,7 @@ "35" ] }, - "execution_count": 8, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -288,7 +301,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "id": "dd4f53fc-1572-4982-9948-90e40c287355", "metadata": { "scrolled": true, @@ -830,7 +843,7 @@ "118651 13X " ] }, - "execution_count": 9, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -851,7 +864,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 12, "id": "f3bee988-dd13-4d9f-ab41-30d038800283", "metadata": { "tags": [] @@ -866,7 +879,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 13, "id": "0e3c308a-dd0c-4e45-9146-516a18cbf7e0", "metadata": { "scrolled": true, @@ -1046,7 +1059,7 @@ "118652 12X 12X 73105f2d1cabc8170ab066d96863c5d5 " ] }, - "execution_count": 11, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -1075,7 +1088,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 14, "id": "f26663d7-1328-4f46-8c50-3614a2b2e83e", "metadata": { "scrolled": true, @@ -1091,7 +1104,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 15, "id": "2bcae4cd-eb3c-4ff4-b568-6de484675743", "metadata": { "scrolled": true, @@ -1745,7 +1758,7 @@ "116838 7535a7b8c19aeaef607abf014ee2fd3f " ] }, - "execution_count": 13, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -1766,7 +1779,7 @@ }, { "cell_type": "code", - "execution_count": 156, + "execution_count": 16, "id": "91c3581b-0567-4c09-9b8b-1ec131c89686", "metadata": { "tags": [] @@ -1855,7 +1868,7 @@ "49 Yolo County Transportation District 2025-05-14 " ] }, - "execution_count": 156, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -1878,7 +1891,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 17, "id": "44e4c68a-4a74-458a-b51e-fb55baaf5082", "metadata": { "tags": [] @@ -1901,7 +1914,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 18, "id": "9752f391-231d-4840-be95-4c557188126e", "metadata": { "tags": [] @@ -2080,7 +2093,7 @@ "118706 E18 89b0a03002512a909fe8e1a5d00a78a5 " ] }, - "execution_count": 15, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -2101,7 +2114,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 19, "id": "902aad5e-4ceb-4241-9196-8c5c4c3d0bc6", "metadata": { "tags": [] @@ -2116,7 +2129,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 20, "id": "898f82b0-1d33-44a7-9bd3-85129846dba9", "metadata": { "tags": [] @@ -2295,7 +2308,7 @@ "118297 89b0a03002512a909fe8e1a5d00a78a5 " ] }, - "execution_count": 17, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -2316,7 +2329,7 @@ }, { "cell_type": "code", - "execution_count": 157, + "execution_count": 21, "id": "5b99c062-89fb-4744-8575-14cca08b903b", "metadata": { "tags": [] @@ -2387,7 +2400,7 @@ "179 2025-05-14 " ] }, - "execution_count": 157, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -2418,7 +2431,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 22, "id": "50e094e6-1f4e-4a66-89fa-19498a5143fa", "metadata": { "tags": [] @@ -2430,7 +2443,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 23, "id": "b1aa3465-d2ca-41d0-a1e3-a2e2c423bf7b", "metadata": { "tags": [] @@ -2459,20 +2472,82 @@ }, { "cell_type": "code", - "execution_count": 23, + "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 for route_id, route_long_name, and route_short_name\n", - "agg1_filtered = agg1.loc[(agg1.route_id > 1) & (agg1.route_short_name > 1)]" + "# 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": 24, + "execution_count": 47, "id": "8c8c5c83-6d01-4373-a8ae-f844a8cf1b06", "metadata": { "tags": [] @@ -2481,10 +2556,10 @@ { "data": { "text/plain": [ - "(576, 7)" + "(644, 7)" ] }, - "execution_count": 24, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -2495,7 +2570,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "id": "57d42123-d91d-46cd-8913-e52ada7b2a72", "metadata": { "tags": [] @@ -2533,33 +2608,157 @@ " \n", " \n", " \n", - " 27498\n", - " 2023-09-13\n", + " 25090\n", + " 2023-08-15\n", " bd24573e82aa13be83eb7143179dd099\n", " Mountain View Transportation Management Association\n", - " A - AM__Whisman, Clyde & Middlefield\n", + " B - AM__Shoreline, La Avenida, Crittenden\n", " 2\n", " 2\n", " 2\n", " \n", " \n", - " 105382\n", - " 2025-01-15\n", - " 6869ab0f62d858fcd5d070e651609224\n", + " 52717\n", + " 2024-02-14\n", + " 8a1405af8da1379acc062e346187ac98\n", + " San Francisco Bay Area Rapid Transit District\n", + " Green-N__Daly City to Berryessa/North San Jose\n", + " 2\n", + " 2\n", + " 2\n", + " \n", + " \n", + " 8219\n", + " 2023-04-12\n", + " 8a1405af8da1379acc062e346187ac98\n", + " San Francisco Bay Area Rapid Transit District\n", + " Orange-N__Berryessa/North San Jose to Richmond\n", + " 2\n", + " 2\n", + " 2\n", + " \n", + " \n", + "\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", " \n", + " \n", " \n", " \n", " \n", @@ -2567,34 +2766,42 @@ "" ], "text/plain": [ - " service_date schedule_gtfs_dataset_key \\\n", - "27498 2023-09-13 bd24573e82aa13be83eb7143179dd099 \n", - "105382 2025-01-15 6869ab0f62d858fcd5d070e651609224 \n", - "102791 2024-12-11 6869ab0f62d858fcd5d070e651609224 \n", - "\n", - " portfolio_organization_name \\\n", - "27498 Mountain View Transportation Management Association \n", - "105382 Mountain View Transportation Management Association \n", - "102791 Mountain View Transportation Management Association \n", - "\n", - " recent_combined_name route_id route_long_name \\\n", - "27498 A - AM__Whisman, Clyde & Middlefield 2 2 \n", - "105382 B - PM__Shoreline, Crittenden, La Avenida 2 2 \n", - "102791 B - PM__Shoreline, Crittenden, La Avenida 2 2 \n", - "\n", - " route_short_name \n", - "27498 2 \n", - "105382 2 \n", - "102791 2 " + " 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": 25, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "agg1_filtered.sample(3)" + "agg1_filtered.loc[agg1_filtered.route_long_name == 1].head()" ] }, { @@ -2615,7 +2822,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 49, "id": "202aff05-dea1-41f6-a015-f41716010621", "metadata": { "scrolled": true, @@ -2635,7 +2842,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 50, "id": "02592a5a-f446-43d0-ae36-c3977c75ab05", "metadata": { "tags": [] @@ -2650,7 +2857,7 @@ " 'San Francisco Bay Area Rapid Transit District'], dtype=object)" ] }, - "execution_count": 27, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -2663,7 +2870,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 51, "id": "bec85291-540b-4300-a643-5a7c4524a052", "metadata": { "scrolled": true, @@ -2752,6 +2959,24 @@ " \n", " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -2844,6 +3069,9 @@ "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", @@ -2868,6 +3096,9 @@ "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", @@ -2883,7 +3114,7 @@ "110918 Beige-N__Oakland Airport to Coliseum " ] }, - "execution_count": 28, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -2894,7 +3125,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 52, "id": "35763818-2ef9-4b58-9314-556fe9d56e98", "metadata": { "tags": [] @@ -2905,12 +3136,12 @@ "text/plain": [ "array(['City of Roseville',\n", " 'San Francisco Bay Area Rapid Transit District',\n", - " 'Mountain View Transportation Management Association',\n", + " 'Mountain View Transportation Management Association', 'Amtrak',\n", " 'Los Angeles County Metropolitan Transportation Authority',\n", - " 'Amtrak', 'City of Santa Maria'], dtype=object)" + " 'City of Santa Maria'], dtype=object)" ] }, - "execution_count": 29, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -2921,7 +3152,7 @@ }, { "cell_type": "code", - "execution_count": 129, + "execution_count": 118, "id": "73cc1730-d5aa-46e9-a296-0a54eceb74a8", "metadata": { "tags": [] @@ -2935,6 +3166,7 @@ " \"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", @@ -2951,7 +3183,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 54, "id": "718276dc-03e8-44ae-a39f-d315301371cb", "metadata": { "tags": [] @@ -2996,7 +3228,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 55, "id": "95c1dead-df6d-463d-a1f2-a64d4f4a2b6b", "metadata": { "tags": [] @@ -3008,7 +3240,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 56, "id": "cb4349c5-70f7-443f-bf6d-2590f769ed26", "metadata": { "tags": [] @@ -3022,7 +3254,7 @@ " 'South Santa Clara County Connector'], dtype=object)" ] }, - "execution_count": 33, + "execution_count": 56, "metadata": {}, "output_type": "execute_result" } @@ -3035,7 +3267,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 57, "id": "294fe25d-1a43-47e9-b51a-b9cf906eb305", "metadata": { "tags": [] @@ -3051,7 +3283,7 @@ " dtype=object)" ] }, - "execution_count": 34, + "execution_count": 57, "metadata": {}, "output_type": "execute_result" } @@ -3065,7 +3297,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 58, "id": "c368e93e-2993-4f80-b75a-30533ac0faaf", "metadata": { "tags": [] @@ -3092,7 +3324,7 @@ " dtype=object)" ] }, - "execution_count": 35, + "execution_count": 58, "metadata": {}, "output_type": "execute_result" } @@ -3105,7 +3337,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 59, "id": "68b65d15-5e7f-4a3b-821a-f5dad1d23c18", "metadata": { "tags": [] @@ -3122,7 +3354,7 @@ " 'AM COMMUTER 8'], dtype=object)" ] }, - "execution_count": 36, + "execution_count": 59, "metadata": {}, "output_type": "execute_result" } @@ -3143,7 +3375,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 60, "id": "429759a8-2627-44f7-8a15-ea500b797b67", "metadata": { "tags": [] @@ -3160,7 +3392,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 61, "id": "6b602483-d7ce-43cc-a185-9f1ed0bc4d07", "metadata": { "tags": [] @@ -3169,10 +3401,10 @@ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -3188,7 +3420,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 62, "id": "1186a320-737e-4ec7-a94b-9956473e4740", "metadata": {}, "outputs": [ @@ -3399,17 +3631,17 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 63, "id": "ee79d500-6acc-41cd-acb2-8d6b897fa9bd", "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -3425,7 +3657,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 64, "id": "85679418-bf4c-4cf3-babe-963cdc133280", "metadata": { "tags": [] @@ -3472,32 +3704,19 @@ "
\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 AssociationB - PM__Shoreline, Crittenden, La AvenidaC - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)212
16082023-03-15bd24573e82aa13be83eb7143179dd099Mountain View Transportation Management AssociationD - PM__San Antonio, Garcia & Charleston (Clockwise loop)212
1027912024-12-116869ab0f62d858fcd5d070e65160922439032023-04-10bd24573e82aa13be83eb7143179dd099Mountain View Transportation Management AssociationB - PM__Shoreline, Crittenden, La AvenidaC - 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
9_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-141_AM1_AM
1187042025-05-1410_PM__PM COMMUTER 10City of Roseville3f420af2aea56d3ba5a1b10f488f0575AM COMMUTER 1010_AM10_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", - "118704 2025-05-14 10_PM__PM COMMUTER 10 City of Roseville \n", + " 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", - "118704 3f420af2aea56d3ba5a1b10f488f0575 AM COMMUTER 10 10_AM \n", "\n", " route_id \n", - "118695 1_AM \n", - "118704 10_AM " + "118695 1_AM " ] }, "metadata": {}, @@ -3520,7 +3739,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 65, "id": "48024a5f-ffbe-4453-8d3f-790dab3fbf33", "metadata": { "tags": [] @@ -3529,10 +3748,10 @@ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -3548,7 +3767,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 66, "id": "a9515fc2-ecbb-4bec-bd0a-afac994c260c", "metadata": { "tags": [] @@ -3746,7 +3965,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 67, "id": "a7740f72-2ccc-485d-9707-40aca3a16431", "metadata": { "tags": [] @@ -3755,13 +3974,13 @@ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, - "execution_count": 47, + "execution_count": 67, "metadata": {}, "output_type": "execute_result" } @@ -3775,7 +3994,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 68, "id": "1fd68927-8ba3-45cc-9ada-7a606e3fee8b", "metadata": { "tags": [] @@ -3812,182 +4031,14 @@ " \n", " \n", " \n", - " \n", - " 106989\n", - " 2025-01-15\n", - " C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " Mountain View Transportation Management Association\n", - " 6869ab0f62d858fcd5d070e651609224\n", - " Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " C - AM\n", - " C - AM\n", - " \n", - " \n", - " 106988\n", - " 2025-01-15\n", - " C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " Mountain View Transportation Management Association\n", - " 6869ab0f62d858fcd5d070e651609224\n", - " Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " C - PM\n", - " C - PM\n", - " \n", - " \n", - " 109664\n", - " 2025-02-12\n", - " C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " Mountain View Transportation Management Association\n", - " 6869ab0f62d858fcd5d070e651609224\n", - " Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " C - PM\n", - " C - PM\n", - " \n", - " \n", - " 109665\n", - " 2025-02-12\n", - " C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " Mountain View Transportation Management Association\n", - " 6869ab0f62d858fcd5d070e651609224\n", - " Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " C - AM\n", - " C - AM\n", - " \n", - " \n", - " 112226\n", - " 2025-03-12\n", - " C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " Mountain View Transportation Management Association\n", - " 6869ab0f62d858fcd5d070e651609224\n", - " Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " C - AM\n", - " C - AM\n", - " \n", - " \n", - " 112230\n", - " 2025-03-12\n", - " C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " Mountain View Transportation Management Association\n", - " 6869ab0f62d858fcd5d070e651609224\n", - " Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " C - PM\n", - " C - PM\n", - " \n", - " \n", - " 114685\n", - " 2025-04-16\n", - " C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " Mountain View Transportation Management Association\n", - " 6869ab0f62d858fcd5d070e651609224\n", - " Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " C - AM\n", - " C - AM\n", - " \n", - " \n", - " 114689\n", - " 2025-04-16\n", - " C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " Mountain View Transportation Management Association\n", - " 6869ab0f62d858fcd5d070e651609224\n", - " Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " C - PM\n", - " C - PM\n", - " \n", - " \n", - " 117130\n", - " 2025-05-14\n", - " C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " Mountain View Transportation Management Association\n", - " 6869ab0f62d858fcd5d070e651609224\n", - " Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " C - AM\n", - " C - AM\n", - " \n", - " \n", - " 117136\n", - " 2025-05-14\n", - " C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " Mountain View Transportation Management Association\n", - " 6869ab0f62d858fcd5d070e651609224\n", - " Charleston, Garcia & San Antonio (Counterclockwise loop)\n", - " C - PM\n", - " C - PM\n", - " \n", " \n", "\n", "" ], "text/plain": [ - " service_date \\\n", - "106989 2025-01-15 \n", - "106988 2025-01-15 \n", - "109664 2025-02-12 \n", - "109665 2025-02-12 \n", - "112226 2025-03-12 \n", - "112230 2025-03-12 \n", - "114685 2025-04-16 \n", - "114689 2025-04-16 \n", - "117130 2025-05-14 \n", - "117136 2025-05-14 \n", - "\n", - " recent_combined_name \\\n", - "106989 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "106988 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "109664 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "109665 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "112226 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "112230 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "114685 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "114689 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "117130 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "117136 C - AM__Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "\n", - " portfolio_organization_name \\\n", - "106989 Mountain View Transportation Management Association \n", - "106988 Mountain View Transportation Management Association \n", - "109664 Mountain View Transportation Management Association \n", - "109665 Mountain View Transportation Management Association \n", - "112226 Mountain View Transportation Management Association \n", - "112230 Mountain View Transportation Management Association \n", - "114685 Mountain View Transportation Management Association \n", - "114689 Mountain View Transportation Management Association \n", - "117130 Mountain View Transportation Management Association \n", - "117136 Mountain View Transportation Management Association \n", - "\n", - " schedule_gtfs_dataset_key \\\n", - "106989 6869ab0f62d858fcd5d070e651609224 \n", - "106988 6869ab0f62d858fcd5d070e651609224 \n", - "109664 6869ab0f62d858fcd5d070e651609224 \n", - "109665 6869ab0f62d858fcd5d070e651609224 \n", - "112226 6869ab0f62d858fcd5d070e651609224 \n", - "112230 6869ab0f62d858fcd5d070e651609224 \n", - "114685 6869ab0f62d858fcd5d070e651609224 \n", - "114689 6869ab0f62d858fcd5d070e651609224 \n", - "117130 6869ab0f62d858fcd5d070e651609224 \n", - "117136 6869ab0f62d858fcd5d070e651609224 \n", - "\n", - " route_long_name \\\n", - "106989 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "106988 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "109664 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "109665 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "112226 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "112230 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "114685 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "114689 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "117130 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "117136 Charleston, Garcia & San Antonio (Counterclockwise loop) \n", - "\n", - " route_short_name route_id \n", - "106989 C - AM C - AM \n", - "106988 C - PM C - PM \n", - "109664 C - PM C - PM \n", - "109665 C - AM C - AM \n", - "112226 C - AM C - AM \n", - "112230 C - PM C - PM \n", - "114685 C - AM C - AM \n", - "114689 C - PM C - PM \n", - "117130 C - AM C - AM \n", - "117136 C - PM C - PM " + "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": {}, @@ -4008,7 +4059,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 69, "id": "340754ae-1a07-4442-8cb4-6eb1cbeaf3e3", "metadata": { "tags": [] @@ -4017,13 +4068,13 @@ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, - "execution_count": 49, + "execution_count": 69, "metadata": {}, "output_type": "execute_result" } @@ -4036,7 +4087,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 70, "id": "1a1ac488-9e6a-4185-93f0-f47f65fd2741", "metadata": { "tags": [] @@ -4245,7 +4296,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 71, "id": "b67dbb8b-9fae-4d14-894a-8948612b0388", "metadata": { "tags": [] @@ -4379,7 +4430,7 @@ "210 Palo Verde Valley Transit Agency 2025-05-14 " ] }, - "execution_count": 60, + "execution_count": 71, "metadata": {}, "output_type": "execute_result" } @@ -4394,7 +4445,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 72, "id": "da87b227-1979-4164-9668-3ddf66357d6a", "metadata": { "tags": [] @@ -4410,7 +4461,7 @@ " dtype='object')" ] }, - "execution_count": 66, + "execution_count": 72, "metadata": {}, "output_type": "execute_result" } @@ -4421,7 +4472,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 73, "id": "e74658ef-3f0a-4ea1-8edf-31136ff6f6c5", "metadata": { "tags": [] @@ -4433,7 +4484,7 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 74, "id": "ca72b496-bce1-4815-ab75-b0773f2bb29a", "metadata": { "tags": [] @@ -4445,7 +4496,7 @@ "(180, 12)" ] }, - "execution_count": 70, + "execution_count": 74, "metadata": {}, "output_type": "execute_result" } @@ -4456,7 +4507,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 75, "id": "b45f77c0-6fae-4157-bf0e-f1fe9b695b62", "metadata": { "tags": [] @@ -4470,7 +4521,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 76, "id": "599d225f-44c0-4a24-8c1b-3a62f85f081b", "metadata": { "tags": [] @@ -4482,7 +4533,7 @@ "(162, 12)" ] }, - "execution_count": 69, + "execution_count": 76, "metadata": {}, "output_type": "execute_result" } @@ -4493,7 +4544,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 77, "id": "ce25095b-ec89-440e-aab9-75a5da4613dd", "metadata": { "tags": [] @@ -4510,7 +4561,7 @@ " '6__Wellness Express'}" ] }, - "execution_count": 75, + "execution_count": 77, "metadata": {}, "output_type": "execute_result" } @@ -4521,7 +4572,7 @@ }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 78, "id": "6dfee5e1-a1a8-48f4-905d-aa2a13d5ad7d", "metadata": { "tags": [] @@ -4533,7 +4584,7 @@ "{'1444', '358', '359', '360', '361', '6467'}" ] }, - "execution_count": 80, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } @@ -4544,7 +4595,7 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 79, "id": "8acbefb6-386d-43c5-9a5e-907e45058d51", "metadata": { "tags": [] @@ -4561,7 +4612,7 @@ " '6__Wellness Express'}" ] }, - "execution_count": 77, + "execution_count": 79, "metadata": {}, "output_type": "execute_result" } @@ -4572,7 +4623,7 @@ }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 80, "id": "c3481e63-965a-45c9-b4a2-20ba4ee3bb82", "metadata": { "tags": [] @@ -4584,7 +4635,7 @@ "{'5964', '5965', '5966', '5967', '5969', '5970'}" ] }, - "execution_count": 81, + "execution_count": 80, "metadata": {}, "output_type": "execute_result" } @@ -4595,7 +4646,7 @@ }, { "cell_type": "code", - "execution_count": 78, + "execution_count": 81, "id": "2d370f97-d446-4444-a01f-74ad84eefda6", "metadata": { "tags": [] @@ -4607,7 +4658,7 @@ "Timestamp('2025-05-14 00:00:00')" ] }, - "execution_count": 78, + "execution_count": 81, "metadata": {}, "output_type": "execute_result" } @@ -4618,7 +4669,7 @@ }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 82, "id": "14c5cd5c-b651-4ce3-ac3c-1eafa94f597b", "metadata": { "tags": [] @@ -4630,7 +4681,7 @@ "Timestamp('2025-05-14 00:00:00')" ] }, - "execution_count": 79, + "execution_count": 82, "metadata": {}, "output_type": "execute_result" } @@ -5564,7 +5615,7 @@ }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 86, "id": "acd52fe7-13cd-49cd-b1d8-5f267ebdd877", "metadata": { "tags": [] @@ -5577,7 +5628,7 @@ " '6 Wellness Express'], dtype=object)" ] }, - "execution_count": 88, + "execution_count": 86, "metadata": {}, "output_type": "execute_result" } @@ -5590,7 +5641,7 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 87, "id": "e416e7c0-7c8c-4ab1-b925-8c7e552cff0b", "metadata": { "tags": [] @@ -5608,10 +5659,10 @@ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -5629,10 +5680,10 @@ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -5650,10 +5701,10 @@ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -5671,10 +5722,10 @@ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -5692,10 +5743,10 @@ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -5728,7 +5779,7 @@ }, { "cell_type": "code", - "execution_count": 95, + "execution_count": 88, "id": "a7755188-11fa-4018-952e-ab7b06893ead", "metadata": { "tags": [] @@ -5752,7 +5803,7 @@ }, { "cell_type": "code", - "execution_count": 96, + "execution_count": 89, "id": "295b0f1f-59c6-4464-9b40-d2a8d3732c1e", "metadata": { "tags": [] @@ -5764,7 +5815,7 @@ }, { "cell_type": "code", - "execution_count": 97, + "execution_count": 90, "id": "ad97c748-8a45-48ce-ac21-32ba2b6eaad5", "metadata": { "tags": [] @@ -5776,7 +5827,7 @@ "(329, 6)" ] }, - "execution_count": 97, + "execution_count": 90, "metadata": {}, "output_type": "execute_result" } @@ -5787,7 +5838,7 @@ }, { "cell_type": "code", - "execution_count": 98, + "execution_count": 91, "id": "807625d0-88b2-4588-8dbd-9f1f5de7be3f", "metadata": { "tags": [] @@ -5824,12 +5875,12 @@ " \n", " \n", " \n", - " 52353\n", - " 2024-02-14\n", - " 2__Gold Route\n", - " Palo Verde Valley Transit Agency\n", - " Gold Route\n", - " 2\n", + " 99526\n", + " 2024-10-20\n", + " __Maple Leaf\n", + " Amtrak\n", + " Maple Leaf\n", + " \n", " 2\n", " \n", " \n", @@ -5837,14 +5888,14 @@ "" ], "text/plain": [ - " service_date recent_combined_name portfolio_organization_name \\\n", - "52353 2024-02-14 2__Gold Route Palo Verde Valley Transit Agency \n", + " 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", - "52353 Gold Route 2 2 " + "99526 Maple Leaf 2 " ] }, - "execution_count": 98, + "execution_count": 91, "metadata": {}, "output_type": "execute_result" } @@ -5855,7 +5906,7 @@ }, { "cell_type": "code", - "execution_count": 99, + "execution_count": 92, "id": "b061b4ea-e038-43f3-b4a5-58f6e1dfdf48", "metadata": { "tags": [] @@ -5871,7 +5922,7 @@ " 'Los Angeles World Airports'], dtype=object)" ] }, - "execution_count": 99, + "execution_count": 92, "metadata": {}, "output_type": "execute_result" } @@ -5882,7 +5933,7 @@ }, { "cell_type": "code", - "execution_count": 167, + "execution_count": 93, "id": "828e72a5-8fc2-4121-9794-89c6478a0b64", "metadata": { "scrolled": true, @@ -5899,7 +5950,7 @@ }, { "cell_type": "code", - "execution_count": 168, + "execution_count": 94, "id": "6b63ec6a-ae51-49e4-adc4-2caf49a18727", "metadata": { "tags": [] @@ -5923,7 +5974,7 @@ " '2024-10-18', '2024-04-20'], dtype=object)" ] }, - "execution_count": 168, + "execution_count": 94, "metadata": {}, "output_type": "execute_result" } @@ -5934,7 +5985,7 @@ }, { "cell_type": "code", - "execution_count": 169, + "execution_count": 95, "id": "849656c3-47ef-4af3-8f58-e4d16656c05c", "metadata": { "scrolled": true, @@ -6726,7 +6777,7 @@ "116943 LT__Laguna Tripper 2 " ] }, - "execution_count": 169, + "execution_count": 95, "metadata": {}, "output_type": "execute_result" } @@ -6745,7 +6796,7 @@ }, { "cell_type": "code", - "execution_count": 160, + "execution_count": 96, "id": "b4b7e3d3-073f-4d7f-84b8-4b8522d35c4e", "metadata": { "scrolled": true, @@ -6835,7 +6886,7 @@ "184 2025-05-14 " ] }, - "execution_count": 160, + "execution_count": 96, "metadata": {}, "output_type": "execute_result" } @@ -6850,7 +6901,7 @@ }, { "cell_type": "code", - "execution_count": 102, + "execution_count": 97, "id": "611fc1fc-c321-492c-83bd-dd9da5276cd5", "metadata": { "tags": [] @@ -7039,7 +7090,7 @@ }, { "cell_type": "code", - "execution_count": 103, + "execution_count": 98, "id": "6dff3f23-99fb-4d65-98e5-cf54e987c345", "metadata": { "tags": [] @@ -7048,10 +7099,10 @@ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -7073,7 +7124,7 @@ }, { "cell_type": "code", - "execution_count": 105, + "execution_count": 99, "id": "284601fd-f263-4e8a-96cc-1aad7a4b2537", "metadata": { "tags": [] @@ -7262,7 +7313,7 @@ }, { "cell_type": "code", - "execution_count": 151, + "execution_count": 100, "id": "ca0569e4-58c2-403e-a867-c558084029bd", "metadata": { "tags": [] @@ -7274,7 +7325,7 @@ }, { "cell_type": "code", - "execution_count": 161, + "execution_count": 101, "id": "38960eae-0ae8-4456-b0f2-224382a6d5bf", "metadata": { "tags": [] @@ -7363,7 +7414,7 @@ "100 2025-05-14 " ] }, - "execution_count": 161, + "execution_count": 101, "metadata": {}, "output_type": "execute_result" } @@ -7387,7 +7438,7 @@ }, { "cell_type": "code", - "execution_count": 116, + "execution_count": 102, "id": "ccb05355-2830-4787-9eca-10a83c144502", "metadata": { "tags": [] @@ -7400,7 +7451,7 @@ " '6 Wellness Express'], dtype=object)" ] }, - "execution_count": 116, + "execution_count": 102, "metadata": {}, "output_type": "execute_result" } @@ -7413,7 +7464,7 @@ }, { "cell_type": "code", - "execution_count": 115, + "execution_count": 120, "id": "65a30f08-9669-4b63-b114-43d9a901b792", "metadata": { "tags": [] @@ -7443,6 +7494,7 @@ " 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", @@ -7455,6 +7507,7 @@ " 2024-12-11\n", " 2__Gold Route\n", " Palo Verde Valley Transit Agency\n", + " Desert Roadrunner GMV Schedule\n", " 4383eb1cca04093020f1583f57f32d9b\n", " Gold Route\n", " 2\n", @@ -7465,6 +7518,7 @@ " 2025-01-15\n", " 2__Gold Route\n", " Palo Verde Valley Transit Agency\n", + " Desert Roadrunner Schedule\n", " 96680f72c0c59208e055c81be87ad4a9\n", " Gold Route\n", " 2\n", @@ -7475,6 +7529,7 @@ " 2025-01-15\n", " 2__Gold Route\n", " Palo Verde Valley Transit Agency\n", + " Desert Roadrunner GMV Schedule\n", " 4383eb1cca04093020f1583f57f32d9b\n", " Gold Route\n", " 2\n", @@ -7485,6 +7540,7 @@ " 2025-02-12\n", " 2__Gold Route\n", " Palo Verde Valley Transit Agency\n", + " Desert Roadrunner Schedule\n", " 96680f72c0c59208e055c81be87ad4a9\n", " Gold Route\n", " 2\n", @@ -7495,6 +7551,7 @@ " 2025-02-12\n", " 2__Gold Route\n", " Palo Verde Valley Transit Agency\n", + " Desert Roadrunner GMV Schedule\n", " 4383eb1cca04093020f1583f57f32d9b\n", " Gold Route\n", " 2\n", @@ -7505,6 +7562,7 @@ " 2025-03-12\n", " 2__Gold Route\n", " Palo Verde Valley Transit Agency\n", + " Desert Roadrunner GMV Schedule\n", " 4383eb1cca04093020f1583f57f32d9b\n", " Gold Route\n", " 2\n", @@ -7515,6 +7573,7 @@ " 2025-04-16\n", " 2__Gold Route\n", " Palo Verde Valley Transit Agency\n", + " Desert Roadrunner Schedule\n", " 96680f72c0c59208e055c81be87ad4a9\n", " Gold Route\n", " 2\n", @@ -7525,6 +7584,7 @@ " 2025-04-16\n", " 2__Gold Route\n", " Palo Verde Valley Transit Agency\n", + " Desert Roadrunner GMV Schedule\n", " 4383eb1cca04093020f1583f57f32d9b\n", " Gold Route\n", " 2\n", @@ -7535,6 +7595,7 @@ " 2025-05-14\n", " 2__Gold Route\n", " Palo Verde Valley Transit Agency\n", + " Desert Roadrunner Schedule\n", " 96680f72c0c59208e055c81be87ad4a9\n", " Gold Route\n", " 2\n", @@ -7545,6 +7606,7 @@ " 2025-05-14\n", " 2__Gold Route\n", " Palo Verde Valley Transit Agency\n", + " Desert Roadrunner GMV Schedule\n", " 4383eb1cca04093020f1583f57f32d9b\n", " Gold Route\n", " 2\n", @@ -7567,29 +7629,29 @@ "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", - " schedule_gtfs_dataset_key route_long_name route_short_name \\\n", - "103412 4383eb1cca04093020f1583f57f32d9b Gold Route 2 \n", - "107725 96680f72c0c59208e055c81be87ad4a9 Gold Route 2 \n", - "108420 4383eb1cca04093020f1583f57f32d9b Gold Route 2 \n", - "110430 96680f72c0c59208e055c81be87ad4a9 Gold Route 2 \n", - "111020 4383eb1cca04093020f1583f57f32d9b Gold Route 2 \n", - "113547 4383eb1cca04093020f1583f57f32d9b Gold Route 2 \n", - "115419 96680f72c0c59208e055c81be87ad4a9 Gold Route 2 \n", - "116171 4383eb1cca04093020f1583f57f32d9b Gold Route 2 \n", - "117828 96680f72c0c59208e055c81be87ad4a9 Gold Route 2 \n", - "118585 4383eb1cca04093020f1583f57f32d9b Gold Route 2 \n", - "\n", - " route_id \n", - "103412 5965 \n", - "107725 361 \n", - "108420 5965 \n", - "110430 361 \n", - "111020 5965 \n", - "113547 5965 \n", - "115419 361 \n", - "116171 5965 \n", - "117828 361 \n", - "118585 5965 " + " 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": {}, @@ -7602,7 +7664,7 @@ }, { "cell_type": "code", - "execution_count": 117, + "execution_count": 104, "id": "54815a33-ab49-45a1-be84-f2b321f38068", "metadata": { "tags": [] @@ -7611,10 +7673,10 @@ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -7630,13 +7692,15 @@ "id": "fbdcbb26-76a3-48ad-bddc-4df4d8bd425d", "metadata": {}, "source": [ - "### San Luis Obispo LT Laguna Tripper\n", - "* Slightly different route geographies" + "### **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": 164, + "execution_count": 105, "id": "f3e45243-2495-49e4-9939-c112b65e4851", "metadata": { "tags": [] @@ -7725,7 +7789,7 @@ "215 San Luis Obispo Regional Transit Authority 2025-05-14 " ] }, - "execution_count": 164, + "execution_count": 105, "metadata": {}, "output_type": "execute_result" } @@ -7740,7 +7804,7 @@ }, { "cell_type": "code", - "execution_count": 120, + "execution_count": 119, "id": "e16ebe50-f04b-4c92-8f3e-1489147e674b", "metadata": { "tags": [] @@ -7770,6 +7834,7 @@ " 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", @@ -7782,6 +7847,7 @@ " 2025-01-15\n", " LT__Laguna Tripper\n", " San Luis Obispo Regional Transit Authority\n", + " SLO Peak Transit Schedule\n", " f4c3ea214214ee0d96f7646b3e9d69dc\n", " Laguna Tripper\n", " LT\n", @@ -7792,6 +7858,7 @@ " 2025-01-15\n", " LT__Laguna Tripper\n", " San Luis Obispo Regional Transit Authority\n", + " SLO Schedule\n", " b475cf3b7ceaae9fc30b22cb8d3a1e33\n", " Laguna Tripper\n", " LT\n", @@ -7802,6 +7869,7 @@ " 2025-02-12\n", " LT__Laguna Tripper\n", " San Luis Obispo Regional Transit Authority\n", + " SLO Peak Transit Schedule\n", " f4c3ea214214ee0d96f7646b3e9d69dc\n", " Laguna Tripper\n", " LT\n", @@ -7812,6 +7880,7 @@ " 2025-02-12\n", " LT__Laguna Tripper\n", " San Luis Obispo Regional Transit Authority\n", + " SLO Schedule\n", " b475cf3b7ceaae9fc30b22cb8d3a1e33\n", " Laguna Tripper\n", " LT\n", @@ -7822,6 +7891,7 @@ " 2025-03-12\n", " LT__Laguna Tripper\n", " San Luis Obispo Regional Transit Authority\n", + " SLO Peak Transit Schedule\n", " f4c3ea214214ee0d96f7646b3e9d69dc\n", " Laguna Tripper\n", " LT\n", @@ -7832,6 +7902,7 @@ " 2025-03-12\n", " LT__Laguna Tripper\n", " San Luis Obispo Regional Transit Authority\n", + " SLO Schedule\n", " b475cf3b7ceaae9fc30b22cb8d3a1e33\n", " Laguna Tripper\n", " LT\n", @@ -7842,6 +7913,7 @@ " 2025-04-16\n", " LT__Laguna Tripper\n", " San Luis Obispo Regional Transit Authority\n", + " SLO Peak Transit Schedule\n", " f4c3ea214214ee0d96f7646b3e9d69dc\n", " Laguna Tripper\n", " LT\n", @@ -7852,6 +7924,7 @@ " 2025-04-16\n", " LT__Laguna Tripper\n", " San Luis Obispo Regional Transit Authority\n", + " SLO Schedule\n", " b475cf3b7ceaae9fc30b22cb8d3a1e33\n", " Laguna Tripper\n", " LT\n", @@ -7862,6 +7935,7 @@ " 2025-05-14\n", " LT__Laguna Tripper\n", " San Luis Obispo Regional Transit Authority\n", + " SLO Peak Transit Schedule\n", " f4c3ea214214ee0d96f7646b3e9d69dc\n", " Laguna Tripper\n", " LT\n", @@ -7872,6 +7946,7 @@ " 2025-05-14\n", " LT__Laguna Tripper\n", " San Luis Obispo Regional Transit Authority\n", + " SLO Schedule\n", " b475cf3b7ceaae9fc30b22cb8d3a1e33\n", " Laguna Tripper\n", " LT\n", @@ -7894,17 +7969,17 @@ "116309 2025-05-14 LT__Laguna Tripper \n", "117489 2025-05-14 LT__Laguna Tripper \n", "\n", - " portfolio_organization_name \\\n", - "105959 San Luis Obispo Regional Transit Authority \n", - "107376 San Luis Obispo Regional Transit Authority \n", - "108549 San Luis Obispo Regional Transit Authority \n", - "110068 San Luis Obispo Regional Transit Authority \n", - "111147 San Luis Obispo Regional Transit Authority \n", - "112552 San Luis Obispo Regional Transit Authority \n", - "115676 San Luis Obispo Regional Transit Authority \n", - "115737 San Luis Obispo Regional Transit Authority \n", - "116309 San Luis Obispo Regional Transit Authority \n", - "117489 San Luis Obispo Regional Transit Authority \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", @@ -7941,7 +8016,7 @@ }, { "cell_type": "code", - "execution_count": 119, + "execution_count": 107, "id": "69c798cd-d468-4218-9831-ceacf4a95201", "metadata": { "tags": [] @@ -7950,10 +8025,10 @@ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -7975,7 +8050,7 @@ }, { "cell_type": "code", - "execution_count": 121, + "execution_count": 108, "id": "3c5ad328-7531-4705-ba9e-edcbc7c61588", "metadata": { "tags": [] @@ -7987,7 +8062,7 @@ "array(['CCA/Adobe', 'East', 'TC Transbay-Caltrain', 'West'], dtype=object)" ] }, - "execution_count": 121, + "execution_count": 108, "metadata": {}, "output_type": "execute_result" } @@ -8001,7 +8076,7 @@ }, { "cell_type": "code", - "execution_count": 165, + "execution_count": 109, "id": "057e3081-947b-4f80-977a-a8915c3611e3", "metadata": { "tags": [] @@ -8090,7 +8165,7 @@ "68 Mission Bay Transportation Management Agency 2025-05-14 " ] }, - "execution_count": 165, + "execution_count": 109, "metadata": {}, "output_type": "execute_result" } @@ -8105,7 +8180,7 @@ }, { "cell_type": "code", - "execution_count": 122, + "execution_count": 110, "id": "e292f1b8-4e9c-407a-a56b-5cd84f3d09eb", "metadata": { "tags": [] @@ -8114,10 +8189,10 @@ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -8130,7 +8205,7 @@ }, { "cell_type": "code", - "execution_count": 133, + "execution_count": 111, "id": "3a769df5-b5f3-4de4-8b2b-5587bd100f20", "metadata": { "tags": [] @@ -8149,7 +8224,7 @@ " 'VN to LAX__FlyAway - Van Nuys to LAX'], dtype=object)" ] }, - "execution_count": 133, + "execution_count": 111, "metadata": {}, "output_type": "execute_result" } @@ -8160,7 +8235,7 @@ }, { "cell_type": "code", - "execution_count": 139, + "execution_count": 112, "id": "5b2bcadf-d829-41b8-888a-0bb695777d09", "metadata": { "tags": [] @@ -8351,7 +8426,7 @@ "117125 CCA/Adobe " ] }, - "execution_count": 139, + "execution_count": 112, "metadata": {}, "output_type": "execute_result" } @@ -8385,7 +8460,7 @@ }, { "cell_type": "code", - "execution_count": 172, + "execution_count": 113, "id": "6c75aeb7-a744-45be-a923-0fd15df122c9", "metadata": { "tags": [] @@ -8564,7 +8639,7 @@ "118453 FlyAway - LAX to Union Station LAX to US TL-6 " ] }, - "execution_count": 172, + "execution_count": 113, "metadata": {}, "output_type": "execute_result" } @@ -8599,51 +8674,7 @@ }, { "cell_type": "code", - "execution_count": 144, - "id": "dd97075e-402b-40b5-984c-5e9a25f4d902", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array(['VN to LAX FlyAway - Van Nuys to LAX',\n", - " 'US to LAX FlyAway - Union Station to LAX',\n", - " 'Inter-terminal Connector/AC Route',\n", - " 'LAX to VN FlyAway - LAX to Van Nuys',\n", - " 'LAX to US FlyAway - LAX to Union Station', 'Metro Connector GL',\n", - " 'Metro C Line Shuttle M to Terminals',\n", - " 'Metro C Line Shuttle M to Metro Rail',\n", - " 'LAX FlyAway-US2LAX Union Station FlyAway to LAX',\n", - " 'LAX FlyAway-LAX2US FlyAway to Union Station/Downtown',\n", - " 'LAX FlyAway-VN2LAX Van Nuys FlyAway to LAX',\n", - " 'LAX FlyAway-LAX2VN FlyAway to Van Nuys', 'ADA Shuttle Route',\n", - " 'LAX Economy Parking'], dtype=object)" - ] - }, - "execution_count": 144, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "routes.loc[\n", - " routes.portfolio_organization_name == \"Los Angeles World Airports\",\n", - "].recent_combined_name.unique()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e2e72aed-848b-416b-a101-d5068204a2cc", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 148, + "execution_count": 122, "id": "69cf30a9-6a82-4a4b-8c0a-fd973441dc7a", "metadata": { "tags": [] @@ -8673,6 +8704,7 @@ " 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", @@ -8681,183 +8713,182 @@ " \n", " \n", " \n", - " 114157\n", - " 2025-04-16\n", + " 106404\n", + " 2025-01-15\n", " VN to LAX__FlyAway - Van Nuys to LAX\n", " Los Angeles World Airports\n", - " 73e3164043eb7312454dd03413a6b310\n", + " LAX FlyAway Schedule\n", + " 4a3f5fe2e305cc696684d11226ba9878\n", " FlyAway - Van Nuys to LAX\n", " VN to LAX\n", " 1\n", " \n", " \n", - " 116005\n", - " 2025-04-16\n", - " Van Nuys/Studio City Counterclockwise__DASH Van Nuys/Studio City Counterclockwise\n", - " City of Los Angeles\n", - " cc53a0dbf5df90e3009b9cb5d89d80ba\n", - " DASH Van Nuys/Studio City Counterclockwise\n", - " Van Nuys/Studio City Counterclockwise\n", - " 800\n", - " \n", - " \n", - " 118450\n", - " 2025-05-14\n", + " 108286\n", + " 2025-01-15\n", " VN to LAX__FlyAway - Van Nuys to LAX\n", " Los Angeles World Airports\n", + " LAX Flyaway Bus Schedule\n", " 2f1c266fc20f9875777fb752af32a66e\n", " FlyAway - Van Nuys to LAX\n", " VN to LAX\n", " TL-1\n", " \n", " \n", - " 116604\n", - " 2025-05-14\n", + " 109054\n", + " 2025-02-12\n", " VN to LAX__FlyAway - Van Nuys to LAX\n", " Los Angeles World Airports\n", - " be0f451de12b510fe2af5d47fe3cd0e7\n", + " LAX FlyAway Schedule\n", + " 4a3f5fe2e305cc696684d11226ba9878\n", " FlyAway - Van Nuys to LAX\n", " VN to LAX\n", " 1\n", " \n", " \n", - " 116606\n", - " 2025-05-14\n", - " LAX to VN__FlyAway - LAX to Van Nuys\n", + " 110887\n", + " 2025-02-12\n", + " VN to LAX__FlyAway - Van Nuys to LAX\n", " Los Angeles World Airports\n", - " be0f451de12b510fe2af5d47fe3cd0e7\n", - " FlyAway - LAX to Van Nuys\n", - " LAX to VN\n", - " 5\n", + " LAX Flyaway Bus Schedule\n", + " 2f1c266fc20f9875777fb752af32a66e\n", + " FlyAway - Van Nuys to LAX\n", + " VN to LAX\n", + " TL-1\n", " \n", " \n", - " 118415\n", - " 2025-05-14\n", - " Van Nuys/Studio City Clockwise__DASH Van Nuys/Studio City Clockwise\n", - " City of Los Angeles\n", - " cc53a0dbf5df90e3009b9cb5d89d80ba\n", - " DASH Van Nuys/Studio City Clockwise\n", - " Van Nuys/Studio City Clockwise\n", - " 799\n", + " 111633\n", + " 2025-03-12\n", + " VN to LAX__FlyAway - Van Nuys to LAX\n", + " Los Angeles World Airports\n", + " LAX FlyAway Schedule\n", + " 4a3f5fe2e305cc696684d11226ba9878\n", + " FlyAway - Van Nuys to LAX\n", + " VN to LAX\n", + " 1\n", " \n", " \n", - " 118416\n", - " 2025-05-14\n", - " Van Nuys/Studio City Counterclockwise__DASH Van Nuys/Studio City Counterclockwise\n", - " City of Los Angeles\n", - " cc53a0dbf5df90e3009b9cb5d89d80ba\n", - " DASH Van Nuys/Studio City Counterclockwise\n", - " Van Nuys/Studio City Counterclockwise\n", - " 800\n", + " 113412\n", + " 2025-03-12\n", + " VN to LAX__FlyAway - Van Nuys to LAX\n", + " Los Angeles World Airports\n", + " LAX Flyaway Bus Schedule\n", + " 2f1c266fc20f9875777fb752af32a66e\n", + " FlyAway - Van Nuys to LAX\n", + " VN to LAX\n", + " TL-1\n", " \n", " \n", - " 118433\n", - " 2025-05-14\n", - " Panorama City/Van Nuys Clockwise__DASH Panorama City/Van Nuys Clockwise\n", - " City of Los Angeles\n", - " cc53a0dbf5df90e3009b9cb5d89d80ba\n", - " DASH Panorama City/Van Nuys Clockwise\n", - " Panorama City/Van Nuys Clockwise\n", - " 801\n", + " 114157\n", + " 2025-04-16\n", + " VN to LAX__FlyAway - Van Nuys to LAX\n", + " Los Angeles World Airports\n", + " LAX FlyAway Schedule\n", + " 73e3164043eb7312454dd03413a6b310\n", + " FlyAway - Van Nuys to LAX\n", + " VN to LAX\n", + " 1\n", " \n", " \n", - " 118434\n", + " 116037\n", + " 2025-04-16\n", + " VN to LAX__FlyAway - Van Nuys to LAX\n", + " Los Angeles World Airports\n", + " LAX Flyaway Bus Schedule\n", + " 2f1c266fc20f9875777fb752af32a66e\n", + " FlyAway - Van Nuys to LAX\n", + " VN to LAX\n", + " TL-1\n", + " \n", + " \n", + " 116604\n", " 2025-05-14\n", - " Panorama City/Van Nuys Counterclockwise__DASH Panorama City/Van Nuys Counterclockwise\n", - " City of Los Angeles\n", - " cc53a0dbf5df90e3009b9cb5d89d80ba\n", - " DASH Panorama City/Van Nuys Counterclockwise\n", - " Panorama City/Van Nuys Counterclockwise\n", - " 804\n", + " VN to LAX__FlyAway - Van Nuys to LAX\n", + " Los Angeles World Airports\n", + " LAX FlyAway Schedule\n", + " be0f451de12b510fe2af5d47fe3cd0e7\n", + " FlyAway - Van Nuys to LAX\n", + " VN to LAX\n", + " 1\n", " \n", " \n", - " 118452\n", + " 118450\n", " 2025-05-14\n", - " LAX to VN__FlyAway - LAX to Van Nuys\n", + " VN to LAX__FlyAway - Van Nuys to LAX\n", " Los Angeles World Airports\n", + " LAX Flyaway Bus Schedule\n", " 2f1c266fc20f9875777fb752af32a66e\n", - " FlyAway - LAX to Van Nuys\n", - " LAX to VN\n", - " TL-5\n", + " FlyAway - Van Nuys to LAX\n", + " VN to LAX\n", + " TL-1\n", " \n", " \n", "\n", "" ], "text/plain": [ - " service_date \\\n", - "114157 2025-04-16 \n", - "116005 2025-04-16 \n", - "118450 2025-05-14 \n", - "116604 2025-05-14 \n", - "116606 2025-05-14 \n", - "118415 2025-05-14 \n", - "118416 2025-05-14 \n", - "118433 2025-05-14 \n", - "118434 2025-05-14 \n", - "118452 2025-05-14 \n", - "\n", - " recent_combined_name \\\n", - "114157 VN to LAX__FlyAway - Van Nuys to LAX \n", - "116005 Van Nuys/Studio City Counterclockwise__DASH Van Nuys/Studio City Counterclockwise \n", - "118450 VN to LAX__FlyAway - Van Nuys to LAX \n", - "116604 VN to LAX__FlyAway - Van Nuys to LAX \n", - "116606 LAX to VN__FlyAway - LAX to Van Nuys \n", - "118415 Van Nuys/Studio City Clockwise__DASH Van Nuys/Studio City Clockwise \n", - "118416 Van Nuys/Studio City Counterclockwise__DASH Van Nuys/Studio City Counterclockwise \n", - "118433 Panorama City/Van Nuys Clockwise__DASH Panorama City/Van Nuys Clockwise \n", - "118434 Panorama City/Van Nuys Counterclockwise__DASH Panorama City/Van Nuys Counterclockwise \n", - "118452 LAX to VN__FlyAway - LAX to Van Nuys \n", + " 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", - " portfolio_organization_name schedule_gtfs_dataset_key \\\n", - "114157 Los Angeles World Airports 73e3164043eb7312454dd03413a6b310 \n", - "116005 City of Los Angeles cc53a0dbf5df90e3009b9cb5d89d80ba \n", - "118450 Los Angeles World Airports 2f1c266fc20f9875777fb752af32a66e \n", - "116604 Los Angeles World Airports be0f451de12b510fe2af5d47fe3cd0e7 \n", - "116606 Los Angeles World Airports be0f451de12b510fe2af5d47fe3cd0e7 \n", - "118415 City of Los Angeles cc53a0dbf5df90e3009b9cb5d89d80ba \n", - "118416 City of Los Angeles cc53a0dbf5df90e3009b9cb5d89d80ba \n", - "118433 City of Los Angeles cc53a0dbf5df90e3009b9cb5d89d80ba \n", - "118434 City of Los Angeles cc53a0dbf5df90e3009b9cb5d89d80ba \n", - "118452 Los Angeles World Airports 2f1c266fc20f9875777fb752af32a66e \n", - "\n", - " route_long_name \\\n", - "114157 FlyAway - Van Nuys to LAX \n", - "116005 DASH Van Nuys/Studio City Counterclockwise \n", - "118450 FlyAway - Van Nuys to LAX \n", - "116604 FlyAway - Van Nuys to LAX \n", - "116606 FlyAway - LAX to Van Nuys \n", - "118415 DASH Van Nuys/Studio City Clockwise \n", - "118416 DASH Van Nuys/Studio City Counterclockwise \n", - "118433 DASH Panorama City/Van Nuys Clockwise \n", - "118434 DASH Panorama City/Van Nuys Counterclockwise \n", - "118452 FlyAway - LAX to Van Nuys \n", - "\n", - " route_short_name route_id \n", - "114157 VN to LAX 1 \n", - "116005 Van Nuys/Studio City Counterclockwise 800 \n", - "118450 VN to LAX TL-1 \n", - "116604 VN to LAX 1 \n", - "116606 LAX to VN 5 \n", - "118415 Van Nuys/Studio City Clockwise 799 \n", - "118416 Van Nuys/Studio City Counterclockwise 800 \n", - "118433 Panorama City/Van Nuys Clockwise 801 \n", - "118434 Panorama City/Van Nuys Counterclockwise 804 \n", - "118452 LAX to VN TL-5 " + " 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": 148, + "execution_count": 122, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(\n", - " df.loc[df.recent_combined_name.str.contains(\"Van Nuys\")][\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", @@ -8872,7 +8903,15 @@ }, { "cell_type": "code", - "execution_count": 146, + "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": [] @@ -8881,10 +8920,10 @@ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -8897,7 +8936,7 @@ }, { "cell_type": "code", - "execution_count": 166, + "execution_count": 117, "id": "c01f27d5-0026-4d80-9924-86b5bfcabf0e", "metadata": { "tags": [] @@ -9076,7 +9115,7 @@ "186 Los Angeles World Airports 2025-05-14 " ] }, - "execution_count": 166, + "execution_count": 117, "metadata": {}, "output_type": "execute_result" } @@ -9088,6 +9127,416 @@ " )\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": { diff --git a/gtfs_digest/27_vp_chart.ipynb b/gtfs_digest/27_vp_chart.ipynb new file mode 100644 index 000000000..5d1040a4b --- /dev/null +++ b/gtfs_digest/27_vp_chart.ipynb @@ -0,0 +1,303 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "fe58e765-0891-4b70-a2ed-bb3a0d2b5d1d", + "metadata": {}, + "source": [ + "## Charts Exploratory" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "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", + "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": null, + "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": "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))" + ] + } + ], + "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/_operator_report.ipynb b/gtfs_digest/_operator_report.ipynb index 01d9a01bf..b00d64b39 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": [] @@ -150,7 +170,18 @@ "execution_count": null, "id": "82ac35e9-3efb-4683-8911-0fb64bd7c691", "metadata": {}, - "outputs": [], + "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", From 9fd543be1aac68d8107b8de3ea502599886f7b18 Mon Sep 17 00:00:00 2001 From: amandaha8 Date: Tue, 24 Jun 2025 23:52:04 +0000 Subject: [PATCH 08/10] continuous color scheme for map and round int and double checking routes --- .../18_shs_routes_ct_district_report.ipynb | 3208 ++++++++++++++++- gtfs_digest/27_vp_chart.ipynb | 2352 +++++++++++- 2 files changed, 5418 insertions(+), 142 deletions(-) diff --git a/gtfs_digest/18_shs_routes_ct_district_report.ipynb b/gtfs_digest/18_shs_routes_ct_district_report.ipynb index c816eb843..e3eb85829 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": null, + "execution_count": 2, "id": "f6b01cd8-ccda-4d2a-9c64-9cca36e0713c", "metadata": {}, "outputs": [], @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "ec246873-6121-4544-8d62-f71dec06352e", "metadata": { "tags": [] @@ -53,7 +53,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "ffeaad35-64a6-4b16-a93d-ac4a0759288a", "metadata": { "tags": [] @@ -68,7 +68,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "1771ea96-ce3b-415f-88f5-8ed54a9b6a5c", "metadata": { "tags": [] @@ -123,7 +123,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "dc878ec3-d196-4e85-bd5d-9960874476ed", "metadata": { "tags": [] @@ -135,7 +135,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "c7a5c057-9789-447c-a0e4-20ca56bddea0", "metadata": { "tags": [] @@ -147,7 +147,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "b0490311-308d-4894-9776-301cb4cad658", "metadata": { "tags": [] @@ -159,7 +159,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "15c7b3ee-b927-49ed-a5be-43918c97bfdf", "metadata": { "tags": [] @@ -171,7 +171,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "c190ae33-bf44-4e94-a614-b4f01ead288b", "metadata": { "tags": [] @@ -193,7 +193,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "3e081d5e-43f5-4298-b98a-cd89390117be", "metadata": { "tags": [] @@ -228,7 +228,7 @@ " # 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", @@ -241,19 +241,67 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "b2d43e08-f0d0-4c17-b55b-2c7d509c2ddb", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# dissolved_route = dissolve_shn([\"Route\",\"District\"], \"ct_district_route\")" + "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, @@ -266,7 +314,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "045892dc-1094-42ec-9267-a1800387f1bf", "metadata": { "tags": [] @@ -278,7 +326,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "id": "9d5c54c5-b055-4251-baea-20a45b47c41c", "metadata": { "scrolled": true, @@ -291,7 +339,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "a0f23cb6-4a7c-4a86-b0d3-3bcad379a9f2", "metadata": { "tags": [] @@ -303,7 +351,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "id": "0be8698f-226a-40e3-ab00-394b5c205123", "metadata": { "tags": [] @@ -315,7 +363,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "id": "d3dc507a-7bb1-4d6b-81b2-b2e1b250cd05", "metadata": { "tags": [] @@ -352,7 +400,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "id": "495541e6-2344-4dab-95e9-00d9c66be124", "metadata": { "tags": [] @@ -365,7 +413,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "id": "0598e1da-3f56-4415-b68b-63e12ff5109d", "metadata": { "tags": [] @@ -377,7 +425,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "id": "7011b56d-a411-4178-8d9d-5aed53dae8b2", "metadata": { "tags": [] @@ -389,7 +437,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "id": "5fa7355f-ef54-42dc-adef-90bba2afdc34", "metadata": { "tags": [] @@ -401,7 +449,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "id": "673b6c64-1667-4e19-bcad-231293cb643e", "metadata": { "tags": [] @@ -416,19 +464,133 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "id": "857a24b9-c5fd-4808-9dc3-0d0953ccc53e", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(344, 4)" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "shn_district_df.shape" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, + "id": "4efb0f3c-00ef-49fe-b4b5-8b66a5f7dafe", + "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", + "
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": [ + "shn_district_df.drop(columns=[\"geometry\"]).sample(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "94df1985-37bb-4ec5-8780-ebf456652681", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "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": [ + "shn_district_df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, "id": "95d188c3-bdd6-4405-874b-f257a4a0d213", "metadata": { "tags": [] @@ -448,7 +610,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "id": "e58e7e81-684e-46b9-96cb-3c9f0643e113", "metadata": { "tags": [] @@ -506,12 +668,14 @@ " 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, + "execution_count": 30, "id": "385b204c-1215-4fdb-8063-023618b85077", "metadata": { "tags": [] @@ -523,31 +687,538 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, + "id": "6c12df00-6b72-427c-9285-d8dd8cb25831", + "metadata": { + "tags": [] + }, + "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.info()" + ] + }, + { + "cell_type": "code", + "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": [ + " 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": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "intersecting.drop(columns=[\"geometry\", \"route_length_feet\", \"highway_feet\"]).sample(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "20aeafc5-48f6-46d0-9c91-210ff2dcd6a9", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "6788" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(intersecting)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "60c66a8e-1519-4c2c-827c-651af54757f9", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "4008" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(\n", + " intersecting.loc[\n", + " (intersecting.pct_route_on_hwy <= 1) & (intersecting.shn_route.notna())\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "5e05b2f0-b614-4a02-9295-748dda09e840", + "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
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": [ + "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": "1dfaf6d4-a7e7-44ef-84fb-6bd2f691a615", "metadata": { "tags": [] }, - "outputs": [], + "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": null, + "execution_count": 37, "id": "2eb8c505-2d6c-4416-a31a-b974cafb1ff9", "metadata": { "tags": [] }, - "outputs": [], + "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": null, + "execution_count": 38, "id": "60baeb61-115c-48cd-988e-12358b077cba", "metadata": { "tags": [] @@ -564,19 +1235,224 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 68, "id": "7c8af6ad-1e43-4da4-88b9-e64bddd8de02", "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", + "
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.sort_values(by=[\"District\"], ascending=False).head(20)" + "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": null, + "execution_count": 40, "id": "fcbcdff2-22f5-4db9-9b37-880ecbab2621", "metadata": { "tags": [] @@ -590,19 +1466,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, "id": "eab02039-73a9-40fd-a806-caff9691738c", "metadata": { "tags": [] }, - "outputs": [], + "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": null, + "execution_count": 42, "id": "1fecd99c-44f3-47cd-9327-ba679e3c8d10", "metadata": { "tags": [] @@ -614,18 +1501,220 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "id": "5004cbb9-f740-494a-b335-dcf0e7f977cd", "metadata": { "tags": [] }, - "outputs": [], + "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", @@ -636,7 +1725,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 44, "id": "6c49e959-ff7a-49c6-9294-ab21824c3f92", "metadata": { "tags": [] @@ -644,6 +1733,9 @@ "outputs": [], "source": [ "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", @@ -651,22 +1743,27 @@ " \"recent_combined_name\",\n", " ],\n", " as_index=False,\n", - " )[[\"shn_route\", \"District\", \"pct_route_on_hwy\"]]\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\": pct_route_on_hwy_agg,\n", + " \"pct_route_on_hwy_across_districts\": pct_route_on_hwy_agg,\n", " }\n", " )\n", " .reset_index(drop=True)\n", " )\n", + "\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": null, + "execution_count": 45, "id": "49ef0c20-a178-41aa-ac2b-3c2ee10a5105", "metadata": {}, "outputs": [], @@ -676,19 +1773,19 @@ }, { "cell_type": "code", - "execution_count": null, + "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\"] == 0, \"N\", \"Y\")\n", + " df[\"on_shs\"] = np.where(df[\"pct_route_on_hwy_across_districts\"] == 0, \"N\", \"Y\")\n", " return df" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 47, "id": "8257de8b-8a94-477c-9e4b-9aed7a8a446b", "metadata": { "tags": [] @@ -700,6 +1797,8 @@ " 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", @@ -710,12 +1809,39 @@ " # 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": null, + "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": [] @@ -727,75 +1853,1590 @@ }, { "cell_type": "code", - "execution_count": null, + "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": [], + "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": null, + "execution_count": 52, "id": "5af04ee4-5d19-4443-947e-e20c7108a74a", "metadata": { "tags": [] }, - "outputs": [], + "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[open_data_portal_df.on_shs == \"Y\"].pct_route_on_hwy.describe()" + "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": null, + "execution_count": 53, "id": "39020051-ccba-46f5-b612-588bdc5c9410", "metadata": { "tags": [] }, - "outputs": [], + "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": [ - "open_data_portal_df.loc[open_data_portal_df.on_shs == \"N\"].pct_route_on_hwy.describe()" + "### Check a couple of routes " ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 69, + "id": "41160615-7f76-4123-b11d-26730d7afb42", + "metadata": { + "scrolled": true, + "tags": [] + }, + "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": [ + "intersecting.portfolio_organization_name.unique()" + ] + }, + { + "cell_type": "code", + "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": [ + " 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": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "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": 78, + "id": "53d80ab3-4a0b-4e9d-b140-9944deda1d6b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "63.1" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "intersecting.loc[intersecting.recent_combined_name == '154 Novato - San Francisco',].pct_route_on_hwy.sum()" + ] + }, + { + "cell_type": "code", + "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": [ + " 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": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "open_data_portal_df.loc[open_data_portal_df.recent_combined_name == '154 Novato - San Francisco']" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "f7e51d3b-d453-4757-933c-5b060f968d59", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "76.19999999999999" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "intersecting.loc[intersecting.recent_combined_name == '101 Santa Rosa - San Francisco',].pct_route_on_hwy.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 74, "id": "36226282-1c27-4677-8b8e-f0f60cfdc216", "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
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": [ - "open_data_portal_df.sample(10)" + "open_data_portal_df.loc[open_data_portal_df.recent_combined_name == '101 Santa Rosa - San Francisco']" ] }, { - "cell_type": "markdown", - "id": "9f9296aa-d0a9-45c3-b8a9-43872d1614dd", - "metadata": {}, + "cell_type": "code", + "execution_count": 75, + "id": "88bf23fe-0246-4201-8395-dcceee65160e", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "56.600000000000016" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "## Create final dataframes for portfolio" + "intersecting.loc[intersecting.recent_combined_name == '132 San Anselmo - San Francisco',].pct_route_on_hwy.sum()" ] }, { "cell_type": "code", - "execution_count": null, - "id": "49c144fd-c909-464d-a8ac-790ddc608201", + "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": [ - "open_data_portal_df.District.unique()" + "intersecting.loc[intersecting.recent_combined_name == '132 San Anselmo - San Francisco',].shn_route.nunique()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 76, + "id": "ddd25ebb-c6ea-40ab-b80d-af6b50b5a8bc", + "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
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": [ + "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": 55, "id": "b8bbd0d5-6d96-4e31-8c61-9ccbc1699ee3", "metadata": { "tags": [] @@ -804,15 +3445,16 @@ "source": [ "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(df['pct_route_on_hwy'], \n", - " bins=bins, labels=labels, right=False).astype(str)\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, + "execution_count": 56, "id": "31c72996-a662-4278-9bad-f71f9d4c440e", "metadata": { "tags": [] @@ -836,12 +3478,12 @@ " \"\"\"\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 > pct_route_intersection)\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.astype(str)\n", + " # intersecting_gdf.District = intersecting_gdf.District\n", " intersecting_gdf = intersecting_gdf.loc[\n", - " intersecting_gdf.District.str.contains(district)\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", @@ -855,8 +3497,9 @@ " on=[\"portfolio_organization_name\", \"recent_combined_name\"],\n", " )\n", "\n", - " # Add column for color scale when mapping \n", - " map_gdf = categorize_percentiles(map_gdf)\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", @@ -870,7 +3513,11 @@ " ]\n", " ],\n", " open_data_df[\n", - " [\"portfolio_organization_name\", \"recent_combined_name\", \"pct_route_on_hwy\"]\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", @@ -883,9 +3530,11 @@ " text_table = text_table.rename(\n", " columns={\n", " \"shn_route\": f\"shn_routes_in_d_{district}\",\n", - " \"pct_route_on_hwy\": \"pct_route_on_hwy_across_districts\",\n", " }\n", " )\n", + "\n", + " # Round all the columns to integers\n", + "\n", " return map_gdf, text_table" ] }, @@ -899,7 +3548,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 57, "id": "9ce2810a-c58d-4f0e-8a06-d10e39cac140", "metadata": { "tags": [] @@ -913,7 +3562,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 58, "id": "62a9b9ef-c6a9-4fd1-be7e-fdf826276600", "metadata": { "tags": [] @@ -927,36 +3576,281 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "2e44da32-07ba-45bb-b675-3c06b69ca4d4", + "execution_count": 59, + "id": "86ab3bed-f850-4509-8746-8f23e867bfd8", "metadata": { "tags": [] }, "outputs": [], + "source": [ + "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": 60, + "id": "2e44da32-07ba-45bb-b675-3c06b69ca4d4", + "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", + "
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": [ "text_df_d7.loc[text_df_d7.recent_combined_name == \"100 Bakersfield - Lancaster\"]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 61, + "id": "4dd16b83-03f7-436b-a4b5-a17da53eb255", + "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", + "
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": [ + "text_df_d7.loc[text_df_d7.recent_combined_name == \"Route 785\"]" + ] + }, + { + "cell_type": "code", + "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": [ "text_df_d6.loc[text_df_d6.recent_combined_name == \"100 Bakersfield - Lancaster\"]" ] }, { "cell_type": "code", - "execution_count": null, + "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\"]" ] @@ -983,108 +3877,121 @@ { "cell_type": "code", "execution_count": null, - "id": "9b0224b6-fbec-4ece-9105-7c0ff4659b60", + "id": "1fee56ee-2a9a-4ecf-a471-ebf7412c5de4", "metadata": { "tags": [] }, "outputs": [], "source": [ - "GCS_FILE_PATH = \"gs://calitp-analytics-data/data-analyses/state_highway_network/\"\n", + "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", - "# Read in buffered shn here or re buffer\n", - "HWY_FILE = (\n", - " f\"{GCS_FILE_PATH}shn_buffered_{SHN_HWY_BUFFER_FEET}_ft_ct_district_route.parquet\"\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": "cfb4fbe1-abf0-47f7-84ad-715272cd07fa", + "id": "9b0224b6-fbec-4ece-9105-7c0ff4659b60", "metadata": { "tags": [] }, "outputs": [], "source": [ - "shn_gdf = 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": "b40e60f9-d716-4dac-b038-9329667003a2", + "id": "84da58a0-5360-47f0-904f-84bb9f6eba69", "metadata": { "tags": [] }, "outputs": [], "source": [ - "len(shn_gdf)" + "GCS_FILE_PATH = \"gs://calitp-analytics-data/data-analyses/state_highway_network/\"" ] }, { "cell_type": "code", "execution_count": null, - "id": "784c6f22-2e5c-4096-8196-b90e06b70393", + "id": "cfb4fbe1-abf0-47f7-84ad-715272cd07fa", "metadata": { "tags": [] }, "outputs": [], "source": [ - "shn_gdf2 = shn_gdf.dissolve(\"District\").reset_index()" + "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": "aa3d418c-cecd-4606-8265-b8db2d80c623", + "id": "120b5b9a-a74d-4d5c-b729-867b0699d7f9", "metadata": { "tags": [] }, "outputs": [], "source": [ - "len(shn_gdf2)" + "shn_gdf.columns" ] }, { "cell_type": "code", "execution_count": null, - "id": "120b5b9a-a74d-4d5c-b729-867b0699d7f9", + "id": "eefd3209-e7e8-462c-b815-eb9413e09eba", "metadata": { "tags": [] }, "outputs": [], "source": [ - "shn_gdf2.columns" + "shn_gdf.District.unique()" ] }, { "cell_type": "code", "execution_count": null, - "id": "eefd3209-e7e8-462c-b815-eb9413e09eba", + "id": "bf641b85-801b-45fe-8702-44758f1fdabe", "metadata": { "tags": [] }, "outputs": [], "source": [ - "shn_gdf2.District.unique()" + "\"\"\" 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": "bf641b85-801b-45fe-8702-44758f1fdabe", + "id": "fe5cff84-6043-4299-92e8-e04ff05eb360", "metadata": { "tags": [] }, "outputs": [], "source": [ - "m = shn_gdf2.loc[shn_gdf2.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", - ")" + "m" ] }, { @@ -1096,7 +4003,47 @@ }, "outputs": [], "source": [ - "cmap_colors = [ \"#93c3db\", \"#144c87\", \"#8c1024\", \"#e4846c\",]" + "cmap_colors = [\n", + " \"#93c3db\",\n", + " \"#144c87\",\n", + " \"#8c1024\",\n", + " \"#e4846c\",\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "42783e5e-04d6-45d9-ae05-5cf8a0e261a6", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "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": "f11c53c3-ed8b-4276-88d8-b59dd23d5524", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "map_gdf_d7.columns" ] }, { @@ -1108,7 +4055,21 @@ }, "outputs": [], "source": [ - "map_gdf_d7.explore(\"percentile_route\", m=m, categorical = True, cmap = cmap_colors, legend = True)" + "# map_gdf_d7.explore(\n", + "# \"percentile_route\", m=m, categorical=True, cmap=cmap_colors, legend=True\n", + "# )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1170ec19-d69c-457e-afd7-8aa8c866d43d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# map_gdf_d7.explore(\"pct_route_on_hwy_across_districts\", m=m, cmap= 'Blues', legend = True)" ] }, { @@ -1126,12 +4087,21 @@ "execution_count": null, "id": "c668f18c-f69a-458c-bbdf-9f4816236d44", "metadata": { + "scrolled": true, "tags": [] }, "outputs": [], "source": [ - "text_df_d7.sort_values(by = [\"pct_route_on_hwy_across_districts\"], ascending = False).head()" + "text_df_d7.sort_values(by=[\"pct_route_on_hwy_across_districts\"], ascending=False)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "72768925-ae44-49c3-9794-8f0a2fdf21cb", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/gtfs_digest/27_vp_chart.ipynb b/gtfs_digest/27_vp_chart.ipynb index 5d1040a4b..897c85468 100644 --- a/gtfs_digest/27_vp_chart.ipynb +++ b/gtfs_digest/27_vp_chart.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "id": "e1861f46-194e-4a36-ba75-98ca8d4aee20", "metadata": { "tags": [] @@ -26,6 +26,8 @@ "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", @@ -36,7 +38,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "b8bbe0c9-2cb1-4fd5-b7cb-74b05ae81267", "metadata": { "tags": [] @@ -55,7 +57,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "fd498927-a3c7-4fb6-b1bf-dc64f17fc120", "metadata": { "tags": [] @@ -69,7 +71,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "8705f7dd-4a4d-4984-8d87-98d4d941e1ba", "metadata": { "tags": [] @@ -81,7 +83,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "d02d7352-957e-4cf7-9287-9710b4b9d62f", "metadata": { "tags": [] @@ -96,7 +98,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "22bbdbb5-b964-40cd-b6a8-0cf03f306af8", "metadata": { "tags": [] @@ -112,7 +114,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "0988c75d-80e2-4510-85fd-05e91c29a062", "metadata": { "tags": [] @@ -137,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "cc415d44-722f-4b7c-9100-2452f3d2986e", "metadata": { "tags": [] @@ -151,7 +153,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "4b990386-dbc2-4c67-9e90-d7d549bcf802", "metadata": { "tags": [] @@ -168,19 +170,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "51385a1f-4526-4896-b4ed-9dba828e5b01", "metadata": { "tags": [] }, - "outputs": [], + "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": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "clean_route_names.columns" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "f0823c34-e23e-4706-8395-8485865d9f06", "metadata": { "tags": [] @@ -192,12 +209,1150 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "e98a03df-a4df-4e2a-90cb-96f1e5082a72", "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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_long_nameroute_short_name
0Route 11__Route 11Route 11Route 11
1Route 18__Route 18Route 18Route 18
2Route 21__Route 21Route 21Route 21
3Route 7__Route 7Route 7Route 7
4TA__Trolley ATrolley ATA
5Fixed Route__Fixed Route ServiceFixed Route ServiceFixed Route
6Fillmore__Fillmore LoopFillmore LoopFillmore
7Piru__PiruPiruPiru
8Route 16__Route 16Route 16Route 16
990__90-C Street/CSUCI90-C Street/CSUCI90
1097__97-Cam Metrolink/CSUCI97-Cam Metrolink/CSUCI97
1170__70-East County70-East County70
1272__72-East County72-East County72
1373__73-East County73-East County73
1480__80-Coastal Express80-Coastal Express80
1580X__80x-Coastal Express80x-Coastal Express80X
1686__86-Coastal Express86-Coastal Express86
17Trolley__TrolleyTrolleyTrolley
18Santa Paula A__Santa Paula A Route (Las Piedras Park)Santa Paula A Route (Las Piedras Park)Santa Paula A
19Santa Paula B__Santa Paula B Route (SP Hospital)Santa Paula B Route (SP Hospital)Santa Paula B
20Route 5__Route 5Route 5Route 5
2185__85-Coastal Express85-Coastal Express85
2287__87-Coastal Express87-Coastal Express87
2389__89-Coastal Express89-Coastal Express89
24Route 2__Route 2Route 2Route 2
2581B__81B-Coastal Express81B-Coastal Express81B
2681__81-Coastal Express81-Coastal Express81
2784U__84u-Coastal Express84u-Coastal Express84U
28KS__Kanan ShuttleKanan ShuttleKS
29Route 15__Route 15Route 15Route 15
3040__Route 40 Newbury ParkRoute 40 Newbury Park40
3142__Route 42 Midtown BRoute 42 Midtown B42
3243__Route 43 TOB ExpressRoute 43 TOB Express43
3344__Route 44 CrosstownRoute 44 Crosstown44
34Route 8__Route 8Route 8Route 8
35Route 3__Route 3Route 3Route 3
36Route 4__Route 4Route 4Route 4
37Route 1__Route 1Route 1Route 1
38Route 17__Route 17Route 17Route 17
39Route 23__Route 23Route 23Route 23
40Route 10__Route 10Route 10Route 10
4110__Route 10Route 1010
4220__Route 20Route 2020
4330__Route 30Route 3030
4450__50-Hwy10150-Hwy10150
4584__84-Coastal Express84-Coastal Express84
4685C__85c-Coastal Express85c-Coastal Express85C
4788__88-Coastal Express88-Coastal Express88
482__Route 2Route 22
491__Route 1Route 11
5041__Route 41 Midtown ARoute 41 Midtown A41
51Route 6__Route 6Route 6Route 6
52Route 19__Route 19Route 19Route 19
5377__77-Cross County Limited77-Cross County Limited77
5462__62-Hwy12662-Hwy12662
5560__60-Hwy12660-Hwy12660
1806__Dial-A-Ride - senior/disabilityDial-A-Ride - senior/disability
214673X__73x-East County73x-East County73X
214780C__80c-Coastal Express80c-Coastal Express80C
2234__Dial-A-Ride - general publicDial-A-Ride - general public
236690__90-99 CSU Channel Islands90-C Street/CSUCI90
236797__90-99 CSU Channel Islands97-Cam Metrolink/CSUCI97
236870__70-74 East County70-East County70
236972__East County72-East County72
237073__East County73-East County73
237180__80-89 Coastal Express80-Coastal Express80
237280X__80-89 Coastal Express80x-Coastal Express80X
237386__80-89 Coastal Express86-Coastal Express86
237785__80-89 Coastal Express85-Coastal Express85
237887__80-89 Coastal Express87-Coastal Express87
237989__80-89 Coastal Express89-Coastal Express89
238181B__80-89 Coastal Express81B-Coastal Express81B
238281__80-89 Coastal Express81-Coastal Express81
239985C__80-89 Coastal Express85c-Coastal Express85C
240084__80-89 Coastal Express84-Coastal Express84
240777__77 Cross County Limited77-Cross County Limited77
240862__60-62 Hwy 12662-Hwy12662
240960__60 - Hwy 12660-Hwy12660
241050__50 Hwy 10150-Hwy10150
465374X__70-74 East County73x-East County73X
465584U__80-89 Coastal Express84u-Coastal Express84U
465688__80-89 Coastal Express88-Coastal Express88
14407TB__Trolley BTrolley BTB
1441999__90-99 CSU Channel Islands99 - CSU Channel Islands99
21986SBB__Summer Beach BusSummer Beach BusSBB
2700655X__55 Conejo Connection55X-Hwy101-Conejo Connection55X
7919170__70-74 East CountyEast County70
7919272__East CountyEast County72
7919373__East CountyEast County73
7919474X__70-74 East CountyEast County73X
7919580__80-89 Coastal ExpressCoastal Express80
7919680X__80-89 Coastal ExpressCoastal Express80X
7919786__80-89 Coastal ExpressCoastal Express86
7920187__80-89 Coastal ExpressCoastal Express87
7920289__80-89 Coastal ExpressCoastal Express89
7920499__90-99 CSU Channel IslandsCSU Channel Islands99
7920581__80-89 Coastal ExpressCoastal Express81
7920684U__80-89 Coastal ExpressCoastal Express84U
7922384__80-89 Coastal ExpressCoastal Express84
7922485__80-89 Coastal ExpressCoastal Express85
7923277__77 Cross County LimitedCross County Limited77
7923350__50 Hwy 101Hwy 10150
7923455X__55 Conejo ConnectionConejo Connection55X
7923560__60 - Hwy 126Hwy 12660
7923662__60-62 Hwy 126Hwy 12662
8138381B__80-89 Coastal ExpressCoastal Express81B
8138485C__80-89 Coastal ExpressCoastal Express85C
8138588__80-89 Coastal ExpressCoastal Express88
8400897__90-99 CSU Channel Islands90-99 CSU Channel Islands97
8400980__80-89 Coastal Express80-89 Coastal Express80
8401080X__80-89 Coastal Express80-89 Coastal Express80X
8401186__80-89 Coastal Express80-89 Coastal Express86
84013A.M. Rio Vista__Fillmore Tripper - A.M. Rio VistaFillmore Tripper - A.M. Rio VistaA.M. Rio Vista
84014P.M. Rio Vista Tripper__Fillmore Tripper - P.M. Rio VistaFillmore Tripper - P.M. Rio VistaP.M. Rio Vista Tripper
84015Tripper__Santa Paula School Tripper (AM)Santa Paula School Tripper (AM)Tripper
8401985__80-89 Coastal Express80-89 Coastal Express85
8402089__80-89 Coastal Express80-89 Coastal Express89
8402281__80-89 Coastal Express80-89 Coastal Express81
8403984__80-89 Coastal Express80-89 Coastal Express84
8404677__77 Cross County Limited77 Cross County Limited77
8404750__50 Hwy 10150 Hwy 10150
8404890__90-99 CSU Channel Islands90-99 CSU Channel Islands90
8404955X__55 Conejo Connection55 Conejo Connection55X
8405060__60 - Hwy 12660-62 Hwy 12660
8405162__60-62 Hwy 12660-62 Hwy 12662
8405570__70-74 East County70-74 East County70
8405685C__80-89 Coastal Express80-89 Coastal Express85C
8405787__80-89 Coastal Express80-89 Coastal Express87
8405888__80-89 Coastal Express80-89 Coastal Express88
8405971__70-74 East County70-74 East County71
8406074X__70-74 East County70-74 East County74X
8635281B__80-89 Coastal Express80-89 Coastal Express81B
8635384U__80-89 Coastal Express80-89 Coastal Express84U
9735699__90-99 CSU Channel Islands90-99 CSU Channel Islands99
103455Fillmore-Moorpark Route__Fillmore-Moorpark RouteFillmore-Moorpark RouteFillmore-Moorpark Route
103456Fillmore-Moorpark Route__Fillmore-Moorpark Route InboundFillmore-Moorpark Route InboundFillmore-Moorpark Route
11394660__60 - Hwy 12660 - Hwy 12660
\n", + "
" + ], + "text/plain": [ + " recent_combined_name \\\n", + "0 Route 11__Route 11 \n", + "1 Route 18__Route 18 \n", + "2 Route 21__Route 21 \n", + "3 Route 7__Route 7 \n", + "4 TA__Trolley A \n", + "5 Fixed Route__Fixed Route Service \n", + "6 Fillmore__Fillmore Loop \n", + "7 Piru__Piru \n", + "8 Route 16__Route 16 \n", + "9 90__90-C Street/CSUCI \n", + "10 97__97-Cam Metrolink/CSUCI \n", + "11 70__70-East County \n", + "12 72__72-East County \n", + "13 73__73-East County \n", + "14 80__80-Coastal Express \n", + "15 80X__80x-Coastal Express \n", + "16 86__86-Coastal Express \n", + "17 Trolley__Trolley \n", + "18 Santa Paula A__Santa Paula A Route (Las Piedras Park) \n", + "19 Santa Paula B__Santa Paula B Route (SP Hospital) \n", + "20 Route 5__Route 5 \n", + "21 85__85-Coastal Express \n", + "22 87__87-Coastal Express \n", + "23 89__89-Coastal Express \n", + "24 Route 2__Route 2 \n", + "25 81B__81B-Coastal Express \n", + "26 81__81-Coastal Express \n", + "27 84U__84u-Coastal Express \n", + "28 KS__Kanan Shuttle \n", + "29 Route 15__Route 15 \n", + "30 40__Route 40 Newbury Park \n", + "31 42__Route 42 Midtown B \n", + "32 43__Route 43 TOB Express \n", + "33 44__Route 44 Crosstown \n", + "34 Route 8__Route 8 \n", + "35 Route 3__Route 3 \n", + "36 Route 4__Route 4 \n", + "37 Route 1__Route 1 \n", + "38 Route 17__Route 17 \n", + "39 Route 23__Route 23 \n", + "40 Route 10__Route 10 \n", + "41 10__Route 10 \n", + "42 20__Route 20 \n", + "43 30__Route 30 \n", + "44 50__50-Hwy101 \n", + "45 84__84-Coastal Express \n", + "46 85C__85c-Coastal Express \n", + "47 88__88-Coastal Express \n", + "48 2__Route 2 \n", + "49 1__Route 1 \n", + "50 41__Route 41 Midtown A \n", + "51 Route 6__Route 6 \n", + "52 Route 19__Route 19 \n", + "53 77__77-Cross County Limited \n", + "54 62__62-Hwy126 \n", + "55 60__60-Hwy126 \n", + "1806 __Dial-A-Ride - senior/disability \n", + "2146 73X__73x-East County \n", + "2147 80C__80c-Coastal Express \n", + "2234 __Dial-A-Ride - general public \n", + "2366 90__90-99 CSU Channel Islands \n", + "2367 97__90-99 CSU Channel Islands \n", + "2368 70__70-74 East County \n", + "2369 72__East County \n", + "2370 73__East County \n", + "2371 80__80-89 Coastal Express \n", + "2372 80X__80-89 Coastal Express \n", + "2373 86__80-89 Coastal Express \n", + "2377 85__80-89 Coastal Express \n", + "2378 87__80-89 Coastal Express \n", + "2379 89__80-89 Coastal Express \n", + "2381 81B__80-89 Coastal Express \n", + "2382 81__80-89 Coastal Express \n", + "2399 85C__80-89 Coastal Express \n", + "2400 84__80-89 Coastal Express \n", + "2407 77__77 Cross County Limited \n", + "2408 62__60-62 Hwy 126 \n", + "2409 60__60 - Hwy 126 \n", + "2410 50__50 Hwy 101 \n", + "4653 74X__70-74 East County \n", + "4655 84U__80-89 Coastal Express \n", + "4656 88__80-89 Coastal Express \n", + "14407 TB__Trolley B \n", + "14419 99__90-99 CSU Channel Islands \n", + "21986 SBB__Summer Beach Bus \n", + "27006 55X__55 Conejo Connection \n", + "79191 70__70-74 East County \n", + "79192 72__East County \n", + "79193 73__East County \n", + "79194 74X__70-74 East County \n", + "79195 80__80-89 Coastal Express \n", + "79196 80X__80-89 Coastal Express \n", + "79197 86__80-89 Coastal Express \n", + "79201 87__80-89 Coastal Express \n", + "79202 89__80-89 Coastal Express \n", + "79204 99__90-99 CSU Channel Islands \n", + "79205 81__80-89 Coastal Express \n", + "79206 84U__80-89 Coastal Express \n", + "79223 84__80-89 Coastal Express \n", + "79224 85__80-89 Coastal Express \n", + "79232 77__77 Cross County Limited \n", + "79233 50__50 Hwy 101 \n", + "79234 55X__55 Conejo Connection \n", + "79235 60__60 - Hwy 126 \n", + "79236 62__60-62 Hwy 126 \n", + "81383 81B__80-89 Coastal Express \n", + "81384 85C__80-89 Coastal Express \n", + "81385 88__80-89 Coastal Express \n", + "84008 97__90-99 CSU Channel Islands \n", + "84009 80__80-89 Coastal Express \n", + "84010 80X__80-89 Coastal Express \n", + "84011 86__80-89 Coastal Express \n", + "84013 A.M. Rio Vista__Fillmore Tripper - A.M. Rio Vista \n", + "84014 P.M. Rio Vista Tripper__Fillmore Tripper - P.M. Rio Vista \n", + "84015 Tripper__Santa Paula School Tripper (AM) \n", + "84019 85__80-89 Coastal Express \n", + "84020 89__80-89 Coastal Express \n", + "84022 81__80-89 Coastal Express \n", + "84039 84__80-89 Coastal Express \n", + "84046 77__77 Cross County Limited \n", + "84047 50__50 Hwy 101 \n", + "84048 90__90-99 CSU Channel Islands \n", + "84049 55X__55 Conejo Connection \n", + "84050 60__60 - Hwy 126 \n", + "84051 62__60-62 Hwy 126 \n", + "84055 70__70-74 East County \n", + "84056 85C__80-89 Coastal Express \n", + "84057 87__80-89 Coastal Express \n", + "84058 88__80-89 Coastal Express \n", + "84059 71__70-74 East County \n", + "84060 74X__70-74 East County \n", + "86352 81B__80-89 Coastal Express \n", + "86353 84U__80-89 Coastal Express \n", + "97356 99__90-99 CSU Channel Islands \n", + "103455 Fillmore-Moorpark Route__Fillmore-Moorpark Route \n", + "103456 Fillmore-Moorpark Route__Fillmore-Moorpark Route Inbound \n", + "113946 60__60 - Hwy 126 \n", + "\n", + " route_long_name route_short_name \n", + "0 Route 11 Route 11 \n", + "1 Route 18 Route 18 \n", + "2 Route 21 Route 21 \n", + "3 Route 7 Route 7 \n", + "4 Trolley A TA \n", + "5 Fixed Route Service Fixed Route \n", + "6 Fillmore Loop Fillmore \n", + "7 Piru Piru \n", + "8 Route 16 Route 16 \n", + "9 90-C Street/CSUCI 90 \n", + "10 97-Cam Metrolink/CSUCI 97 \n", + "11 70-East County 70 \n", + "12 72-East County 72 \n", + "13 73-East County 73 \n", + "14 80-Coastal Express 80 \n", + "15 80x-Coastal Express 80X \n", + "16 86-Coastal Express 86 \n", + "17 Trolley Trolley \n", + "18 Santa Paula A Route (Las Piedras Park) Santa Paula A \n", + "19 Santa Paula B Route (SP Hospital) Santa Paula B \n", + "20 Route 5 Route 5 \n", + "21 85-Coastal Express 85 \n", + "22 87-Coastal Express 87 \n", + "23 89-Coastal Express 89 \n", + "24 Route 2 Route 2 \n", + "25 81B-Coastal Express 81B \n", + "26 81-Coastal Express 81 \n", + "27 84u-Coastal Express 84U \n", + "28 Kanan Shuttle KS \n", + "29 Route 15 Route 15 \n", + "30 Route 40 Newbury Park 40 \n", + "31 Route 42 Midtown B 42 \n", + "32 Route 43 TOB Express 43 \n", + "33 Route 44 Crosstown 44 \n", + "34 Route 8 Route 8 \n", + "35 Route 3 Route 3 \n", + "36 Route 4 Route 4 \n", + "37 Route 1 Route 1 \n", + "38 Route 17 Route 17 \n", + "39 Route 23 Route 23 \n", + "40 Route 10 Route 10 \n", + "41 Route 10 10 \n", + "42 Route 20 20 \n", + "43 Route 30 30 \n", + "44 50-Hwy101 50 \n", + "45 84-Coastal Express 84 \n", + "46 85c-Coastal Express 85C \n", + "47 88-Coastal Express 88 \n", + "48 Route 2 2 \n", + "49 Route 1 1 \n", + "50 Route 41 Midtown A 41 \n", + "51 Route 6 Route 6 \n", + "52 Route 19 Route 19 \n", + "53 77-Cross County Limited 77 \n", + "54 62-Hwy126 62 \n", + "55 60-Hwy126 60 \n", + "1806 Dial-A-Ride - senior/disability \n", + "2146 73x-East County 73X \n", + "2147 80c-Coastal Express 80C \n", + "2234 Dial-A-Ride - general public \n", + "2366 90-C Street/CSUCI 90 \n", + "2367 97-Cam Metrolink/CSUCI 97 \n", + "2368 70-East County 70 \n", + "2369 72-East County 72 \n", + "2370 73-East County 73 \n", + "2371 80-Coastal Express 80 \n", + "2372 80x-Coastal Express 80X \n", + "2373 86-Coastal Express 86 \n", + "2377 85-Coastal Express 85 \n", + "2378 87-Coastal Express 87 \n", + "2379 89-Coastal Express 89 \n", + "2381 81B-Coastal Express 81B \n", + "2382 81-Coastal Express 81 \n", + "2399 85c-Coastal Express 85C \n", + "2400 84-Coastal Express 84 \n", + "2407 77-Cross County Limited 77 \n", + "2408 62-Hwy126 62 \n", + "2409 60-Hwy126 60 \n", + "2410 50-Hwy101 50 \n", + "4653 73x-East County 73X \n", + "4655 84u-Coastal Express 84U \n", + "4656 88-Coastal Express 88 \n", + "14407 Trolley B TB \n", + "14419 99 - CSU Channel Islands 99 \n", + "21986 Summer Beach Bus SBB \n", + "27006 55X-Hwy101-Conejo Connection 55X \n", + "79191 East County 70 \n", + "79192 East County 72 \n", + "79193 East County 73 \n", + "79194 East County 73X \n", + "79195 Coastal Express 80 \n", + "79196 Coastal Express 80X \n", + "79197 Coastal Express 86 \n", + "79201 Coastal Express 87 \n", + "79202 Coastal Express 89 \n", + "79204 CSU Channel Islands 99 \n", + "79205 Coastal Express 81 \n", + "79206 Coastal Express 84U \n", + "79223 Coastal Express 84 \n", + "79224 Coastal Express 85 \n", + "79232 Cross County Limited 77 \n", + "79233 Hwy 101 50 \n", + "79234 Conejo Connection 55X \n", + "79235 Hwy 126 60 \n", + "79236 Hwy 126 62 \n", + "81383 Coastal Express 81B \n", + "81384 Coastal Express 85C \n", + "81385 Coastal Express 88 \n", + "84008 90-99 CSU Channel Islands 97 \n", + "84009 80-89 Coastal Express 80 \n", + "84010 80-89 Coastal Express 80X \n", + "84011 80-89 Coastal Express 86 \n", + "84013 Fillmore Tripper - A.M. Rio Vista A.M. Rio Vista \n", + "84014 Fillmore Tripper - P.M. Rio Vista P.M. Rio Vista Tripper \n", + "84015 Santa Paula School Tripper (AM) Tripper \n", + "84019 80-89 Coastal Express 85 \n", + "84020 80-89 Coastal Express 89 \n", + "84022 80-89 Coastal Express 81 \n", + "84039 80-89 Coastal Express 84 \n", + "84046 77 Cross County Limited 77 \n", + "84047 50 Hwy 101 50 \n", + "84048 90-99 CSU Channel Islands 90 \n", + "84049 55 Conejo Connection 55X \n", + "84050 60-62 Hwy 126 60 \n", + "84051 60-62 Hwy 126 62 \n", + "84055 70-74 East County 70 \n", + "84056 80-89 Coastal Express 85C \n", + "84057 80-89 Coastal Express 87 \n", + "84058 80-89 Coastal Express 88 \n", + "84059 70-74 East County 71 \n", + "84060 70-74 East County 74X \n", + "86352 80-89 Coastal Express 81B \n", + "86353 80-89 Coastal Express 84U \n", + "97356 90-99 CSU Channel Islands 99 \n", + "103455 Fillmore-Moorpark Route Fillmore-Moorpark Route \n", + "103456 Fillmore-Moorpark Route Inbound Fillmore-Moorpark Route \n", + "113946 60 - Hwy 126 60 " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "clean_route_names[[\"recent_combined_name\", \"route_long_name\",\"route_short_name\"]].drop_duplicates()" ] @@ -212,7 +1367,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "id": "3e1cdd50-21d1-4052-a864-25cc92207f0d", "metadata": { "tags": [] @@ -224,36 +1379,212 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "a21a5686-fa9e-46f7-b5f8-51716e9b024d", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "14" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "len(one_test_route)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "abf29b32-d050-4ce0-b693-83b542e59de0", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "len(one_test_route.drop_duplicates())" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "id": "316204a0-4242-4726-a693-4edeb0c7c176", "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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 Trips# Realtime TripsRouteDirection# 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)GTFS AvailabilityAverage Stop Distance (Miles)Date
319481All Day150.003389 80-89 Coastal ExpressEastbound6226210032.000.00100.00100.002.00NaNVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)500.00schedule_and_vp6.002025-05-14
321191Peak150.003389 80-89 Coastal ExpressEastbound6226210032.000.00100.00100.002.00NaNVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)158.00schedule_and_vp6.002025-05-14
\n", + "
" + ], + "text/plain": [ + " Direction (0/1) Period Average Scheduled Service (trip minutes) \\\n", + "31948 1 All Day 150.00 \n", + "32119 1 Peak 150.00 \n", + "\n", + " # Scheduled Trips # Realtime Trips Route \\\n", + "31948 3 3 89 80-89 Coastal Express \n", + "32119 3 3 89 80-89 Coastal Express \n", + "\n", + " Direction # Minutes with 1+ VP per Minute \\\n", + "31948 Eastbound 622 \n", + "32119 Eastbound 622 \n", + "\n", + " # Minutes with 2+ VP per Minute # Early Arrival Trips \\\n", + "31948 621 0 \n", + "32119 621 0 \n", + "\n", + " # On-Time Trips # Late Trips Average VP per Minute \\\n", + "31948 0 3 2.00 \n", + "32119 0 3 2.00 \n", + "\n", + " % VP within Scheduled Shape % Scheduled Trip w/ 1+ VP/Minute \\\n", + "31948 0.00 100.00 \n", + "32119 0.00 100.00 \n", + "\n", + " % Scheduled Trip w/ 2+ VP/Minute \\\n", + "31948 100.00 \n", + "32119 100.00 \n", + "\n", + " Realtime versus Scheduled Service Ratio Speed (MPH) \\\n", + "31948 2.00 NaN \n", + "32119 2.00 NaN \n", + "\n", + " Portfolio Organization Name \\\n", + "31948 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "32119 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", + "\n", + " Headway (Minutes) GTFS Availability Average Stop Distance (Miles) \\\n", + "31948 500.00 schedule_and_vp 6.00 \n", + "32119 158.00 schedule_and_vp 6.00 \n", + "\n", + " Date \n", + "31948 2025-05-14 \n", + "32119 2025-05-14 " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "one_test_route.drop_duplicates()" ] @@ -268,14 +1599,989 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "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))" + "# 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": 18, + "id": "e2f16933-fab6-4cc0-b790-83fa5fe7e6fb", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "date_list = rt_dates.y2025_dates" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "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": 23, + "id": "bdc9b2c5-f624-450f-8360-65a94869c813", + "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'],\n", + " dtype='object')" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# \n", + "schedule_route_dir_df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "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": 34, + "id": "cdb02d9b-a3e1-4ebf-bd80-48d2ebbf2a42", + "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
80261770249a5a2e770ca90628434d4934b141481.00all_day149.675.5730.122025-05-141.000.000.000.000.000.000.00expressVCTC GMV Schedule89__80-89 Coastal Express89 80-89 Coastal Express4148Eastbound
80311770249a5a2e770ca90628434d4934b141481.00peak149.675.5730.382025-05-141.000.000.000.000.000.000.00expressVCTC GMV Schedule89__80-89 Coastal Express89 80-89 Coastal Express4148Eastbound
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key route_id direction_id time_period \\\n", + "8026 1770249a5a2e770ca90628434d4934b1 4148 1.00 all_day \n", + "8031 1770249a5a2e770ca90628434d4934b1 4148 1.00 peak \n", + "\n", + " avg_scheduled_service_minutes avg_stop_miles n_scheduled_trips \\\n", + "8026 149.67 5.57 3 \n", + "8031 149.67 5.57 3 \n", + "\n", + " frequency service_date is_express is_ferry is_rail is_coverage \\\n", + "8026 0.12 2025-05-14 1.00 0.00 0.00 0.00 \n", + "8031 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", + "8026 0.00 0.00 0.00 express VCTC GMV Schedule \n", + "8031 0.00 0.00 0.00 express VCTC GMV Schedule \n", + "\n", + " combined_name recent_combined_name recent_route_id \\\n", + "8026 89__80-89 Coastal Express 89 80-89 Coastal Express 4148 \n", + "8031 89__80-89 Coastal Express 89 80-89 Coastal Express 4148 \n", + "\n", + " route_primary_direction \n", + "8026 Eastbound \n", + "8031 Eastbound " + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "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": 28, + "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": 30, + "id": "974f912f-c30b-47e7-9371-5eaced1e8dfa", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['schedule_gtfs_dataset_key', 'route_id', 'direction_id', 'time_period',\n", + " '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', 'service_date'],\n", + " dtype='object')" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "speeds_df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "e2c85827-68b8-49a3-bf53-9f5c37229cf6", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(14, 23)" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "preview_one_route_one_date(speeds_df).shape" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "a765b202-68c4-465d-bdc6-3e8d20a74a70", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(preview_one_route_one_date(speeds_df).drop_duplicates())" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "d8fc38fa-c65a-459b-a4e4-7d28c0b095d5", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# crosswalk_df = merge_data.concatenate_crosswalk_organization(date_list)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "51830d06-905a-43a7-b6e5-6402f9b15b23", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['schedule_gtfs_dataset_key', 'name', 'schedule_source_record_id',\n", + " 'base64_url', 'caltrans_district', 'service_date',\n", + " 'portfolio_organization_name'],\n", + " dtype='object')" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "crosswalk_df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "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": 42, + "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": 44, + "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": 46, + "id": "0c0dbdf2-9f5a-40a5-9a3f-c1fe96dc61c2", + "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", + "
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
126311770249a5a2e770ca90628434d4934b141481.00all_day622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126321770249a5a2e770ca90628434d4934b141481.00all_day622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126331770249a5a2e770ca90628434d4934b141481.00all_day622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126341770249a5a2e770ca90628434d4934b141481.00all_day622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126351770249a5a2e770ca90628434d4934b141481.00all_day622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126361770249a5a2e770ca90628434d4934b141481.00all_day622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126371770249a5a2e770ca90628434d4934b141481.00all_day622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126661770249a5a2e770ca90628434d4934b141481.00peak622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126671770249a5a2e770ca90628434d4934b141481.00peak622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126681770249a5a2e770ca90628434d4934b141481.00peak622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126691770249a5a2e770ca90628434d4934b141481.00peak622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126701770249a5a2e770ca90628434d4934b141481.00peak622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126711770249a5a2e770ca90628434d4934b141481.00peak622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126721770249a5a2e770ca90628434d4934b141481.00peak622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key route_id direction_id time_period \\\n", + "12631 1770249a5a2e770ca90628434d4934b1 4148 1.00 all_day \n", + "12632 1770249a5a2e770ca90628434d4934b1 4148 1.00 all_day \n", + "12633 1770249a5a2e770ca90628434d4934b1 4148 1.00 all_day \n", + "12634 1770249a5a2e770ca90628434d4934b1 4148 1.00 all_day \n", + "12635 1770249a5a2e770ca90628434d4934b1 4148 1.00 all_day \n", + "12636 1770249a5a2e770ca90628434d4934b1 4148 1.00 all_day \n", + "12637 1770249a5a2e770ca90628434d4934b1 4148 1.00 all_day \n", + "12666 1770249a5a2e770ca90628434d4934b1 4148 1.00 peak \n", + "12667 1770249a5a2e770ca90628434d4934b1 4148 1.00 peak \n", + "12668 1770249a5a2e770ca90628434d4934b1 4148 1.00 peak \n", + "12669 1770249a5a2e770ca90628434d4934b1 4148 1.00 peak \n", + "12670 1770249a5a2e770ca90628434d4934b1 4148 1.00 peak \n", + "12671 1770249a5a2e770ca90628434d4934b1 4148 1.00 peak \n", + "12672 1770249a5a2e770ca90628434d4934b1 4148 1.00 peak \n", + "\n", + " minutes_atleast1_vp minutes_atleast2_vp total_rt_service_minutes \\\n", + "12631 622 621 974.28 \n", + "12632 622 621 974.28 \n", + "12633 622 621 974.28 \n", + "12634 622 621 974.28 \n", + "12635 622 621 974.28 \n", + "12636 622 621 974.28 \n", + "12637 622 621 974.28 \n", + "12666 622 621 974.28 \n", + "12667 622 621 974.28 \n", + "12668 622 621 974.28 \n", + "12669 622 621 974.28 \n", + "12670 622 621 974.28 \n", + "12671 622 621 974.28 \n", + "12672 622 621 974.28 \n", + "\n", + " total_scheduled_service_minutes total_vp vp_in_shape is_early \\\n", + "12631 449.00 1858 0 0 \n", + "12632 449.00 1858 0 0 \n", + "12633 449.00 1858 0 0 \n", + "12634 449.00 1858 0 0 \n", + "12635 449.00 1858 0 0 \n", + "12636 449.00 1858 0 0 \n", + "12637 449.00 1858 0 0 \n", + "12666 449.00 1858 0 0 \n", + "12667 449.00 1858 0 0 \n", + "12668 449.00 1858 0 0 \n", + "12669 449.00 1858 0 0 \n", + "12670 449.00 1858 0 0 \n", + "12671 449.00 1858 0 0 \n", + "12672 449.00 1858 0 0 \n", + "\n", + " is_ontime is_late n_vp_trips vp_per_minute pct_in_shape \\\n", + "12631 0 3 3 1.91 0.00 \n", + "12632 0 3 3 1.91 0.00 \n", + "12633 0 3 3 1.91 0.00 \n", + "12634 0 3 3 1.91 0.00 \n", + "12635 0 3 3 1.91 0.00 \n", + "12636 0 3 3 1.91 0.00 \n", + "12637 0 3 3 1.91 0.00 \n", + "12666 0 3 3 1.91 0.00 \n", + "12667 0 3 3 1.91 0.00 \n", + "12668 0 3 3 1.91 0.00 \n", + "12669 0 3 3 1.91 0.00 \n", + "12670 0 3 3 1.91 0.00 \n", + "12671 0 3 3 1.91 0.00 \n", + "12672 0 3 3 1.91 0.00 \n", + "\n", + " pct_rt_journey_atleast1_vp pct_rt_journey_atleast2_vp \\\n", + "12631 0.64 0.64 \n", + "12632 0.64 0.64 \n", + "12633 0.64 0.64 \n", + "12634 0.64 0.64 \n", + "12635 0.64 0.64 \n", + "12636 0.64 0.64 \n", + "12637 0.64 0.64 \n", + "12666 0.64 0.64 \n", + "12667 0.64 0.64 \n", + "12668 0.64 0.64 \n", + "12669 0.64 0.64 \n", + "12670 0.64 0.64 \n", + "12671 0.64 0.64 \n", + "12672 0.64 0.64 \n", + "\n", + " pct_sched_journey_atleast1_vp pct_sched_journey_atleast2_vp \\\n", + "12631 1.00 1.00 \n", + "12632 1.00 1.00 \n", + "12633 1.00 1.00 \n", + "12634 1.00 1.00 \n", + "12635 1.00 1.00 \n", + "12636 1.00 1.00 \n", + "12637 1.00 1.00 \n", + "12666 1.00 1.00 \n", + "12667 1.00 1.00 \n", + "12668 1.00 1.00 \n", + "12669 1.00 1.00 \n", + "12670 1.00 1.00 \n", + "12671 1.00 1.00 \n", + "12672 1.00 1.00 \n", + "\n", + " rt_sched_journey_ratio avg_rt_service_minutes service_date \n", + "12631 2.17 324.76 2025-05-14 \n", + "12632 2.17 324.76 2025-05-14 \n", + "12633 2.17 324.76 2025-05-14 \n", + "12634 2.17 324.76 2025-05-14 \n", + "12635 2.17 324.76 2025-05-14 \n", + "12636 2.17 324.76 2025-05-14 \n", + "12637 2.17 324.76 2025-05-14 \n", + "12666 2.17 324.76 2025-05-14 \n", + "12667 2.17 324.76 2025-05-14 \n", + "12668 2.17 324.76 2025-05-14 \n", + "12669 2.17 324.76 2025-05-14 \n", + "12670 2.17 324.76 2025-05-14 \n", + "12671 2.17 324.76 2025-05-14 \n", + "12672 2.17 324.76 2025-05-14 " + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(preview_one_route_one_date(df_rt_sched))" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "206b720b-106a-4a78-9428-837885531632", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len((preview_one_route_one_date(df_rt_sched)).drop_duplicates())" ] } ], From f1d75a76712e86ae923512869d36608007b896eb Mon Sep 17 00:00:00 2001 From: amandaha8 Date: Thu, 26 Jun 2025 00:10:56 +0000 Subject: [PATCH 09/10] began moving ct district work into scripts --- .../18_shs_routes_ct_district_report.ipynb | 4 - gtfs_digest/_ct_district_data_prep.py | 231 ++++ ...trict_utils.py => _ct_district_visuals.py} | 4 +- gtfs_digest/_report_utils.py | 12 +- gtfs_digest/_transit_routes_on_shn.py | 354 ++++++ gtfs_digest/district_report.ipynb | 374 +++--- gtfs_digest/og_district_report.ipynb | 1055 +++++++++++++++++ 7 files changed, 1836 insertions(+), 198 deletions(-) create mode 100644 gtfs_digest/_ct_district_data_prep.py rename gtfs_digest/{_ct_district_utils.py => _ct_district_visuals.py} (90%) create mode 100644 gtfs_digest/_transit_routes_on_shn.py create mode 100644 gtfs_digest/og_district_report.ipynb diff --git a/gtfs_digest/18_shs_routes_ct_district_report.ipynb b/gtfs_digest/18_shs_routes_ct_district_report.ipynb index e3eb85829..495b30bdf 100644 --- a/gtfs_digest/18_shs_routes_ct_district_report.ipynb +++ b/gtfs_digest/18_shs_routes_ct_district_report.ipynb @@ -1802,8 +1802,6 @@ " # 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", - " # Sum up the percentage of a transit route that\n", - " # intersects with the highway.\n", " agg1 = group_route_district(gdf, \"sum\")\n", "\n", " # Add yes/no column to signify if a transit route intersects\n", @@ -3533,8 +3531,6 @@ " }\n", " )\n", "\n", - " # Round all the columns to integers\n", - "\n", " return map_gdf, text_table" ] }, diff --git a/gtfs_digest/_ct_district_data_prep.py b/gtfs_digest/_ct_district_data_prep.py new file mode 100644 index 000000000..d2babeef4 --- /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:int)->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_df2.loc[operator_df2.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 e658d3523..9002af68b 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/_report_utils.py b/gtfs_digest/_report_utils.py index 0ff1e0608..7959980d2 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/_transit_routes_on_shn.py b/gtfs_digest/_transit_routes_on_shn.py new file mode 100644 index 000000000..6167ad8b8 --- /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/district_report.ipynb b/gtfs_digest/district_report.ipynb index c2f0de390..70538eb4d 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 = \"02 - Redding\"" ] }, { @@ -76,208 +77,208 @@ "metadata": {}, "outputs": [], "source": [ - "%%capture_parameters\n", - "district, DISTRICT_DIGEST_URL" + "# %%capture_parameters\n", + "# district, DISTRICT_DIGEST_URL" ] }, { "cell_type": "code", "execution_count": null, - "id": "cbafa165-4db8-4db2-bc5f-1cbbbe346a48", - "metadata": {}, + "id": "6adaf0f6-55b4-47a1-beaf-730e57f01d9f", + "metadata": { + "tags": [] + }, "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]" + "import deploy_portfolio_yaml" ] }, { "cell_type": "code", "execution_count": null, - "id": "d3d0d0a2-4543-4b30-b2f5-2350a2401bec", - "metadata": {}, + "id": "a12bd271-03e2-443e-826d-b232536912f2", + "metadata": { + "tags": [] + }, "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", - ")" + "OPERATOR_PROFILE = GTFS_DATA_DICT.digest_tables.operator_profiles" ] }, { "cell_type": "code", "execution_count": null, - "id": "e733cb10-3185-4468-9ebe-1c2cb854cd21", - "metadata": {}, + "id": "bae9fe51-cacd-404c-9f55-21caac397b95", + "metadata": { + "tags": [] + }, "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())" + " portfolio_organization_names_to_keep = (\n", + " deploy_portfolio_yaml.generate_operator_grain_yaml(OPERATOR_PROFILE)\n", + " )[[\"organization_name\"]].drop_duplicates()\n", + " " ] }, { "cell_type": "code", "execution_count": null, - "id": "f2197f14-0623-46b4-bdda-a6da1581a9d2", - "metadata": {}, + "id": "10e4d7b9-412a-433f-a093-431dde5b83ff", + "metadata": { + "tags": [] + }, "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)" + "portfolio_organization_names_to_keep" ] }, { "cell_type": "code", "execution_count": null, - "id": "e7ee27ca-fafc-41a5-b15c-eead1c11785f", - "metadata": {}, + "id": "a0af5b4d-a3bc-4a37-8a79-e7597f78c70f", + "metadata": { + "tags": [] + }, "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)" + "OPERATOR_PROFILE_REPORT = GTFS_DATA_DICT.digest_tables.operator_profiles_report" ] }, { "cell_type": "code", "execution_count": null, - "id": "ad8f31e7-f7b0-4f8e-9ee8-6479ea1af654", - "metadata": {}, + "id": "114d1fd2-5d59-482b-adbf-151a8fe9a548", + "metadata": { + "tags": [] + }, "outputs": [], "source": [ - "three_month_reference = operator_df2[\"service_date\"].max() - pd.DateOffset(months=3)" + "operator_df = pd.read_parquet(\n", + " f\"{RT_SCHED_GCS}{OPERATOR_PROFILE_REPORT}.parquet\",\n", + " )" ] }, { "cell_type": "code", "execution_count": null, - "id": "9d2e2807-801a-48f5-9933-3adaad4ebfef", - "metadata": {}, + "id": "d3df06d9-0328-493a-a359-4ef8617f39ea", + "metadata": { + "tags": [] + }, "outputs": [], "source": [ - "orgs_with_2_names_df = orgs_with_2_names_df[\n", - " orgs_with_2_names_df[\"service_date\"] >= three_month_reference\n", - "]" + "operator_df2 = operator_df.loc[operator_df.caltrans_district == district]" ] }, { "cell_type": "code", "execution_count": null, - "id": "c93e5f3d-1b87-495d-a63e-2454d7089754", - "metadata": {}, + "id": "b621c478-e18a-486c-94bc-1fb4b2d2a214", + "metadata": { + "tags": [] + }, "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", - ")" + "operator_df.shape" ] }, { "cell_type": "code", "execution_count": null, - "id": "a81b77e8-90dd-4626-9077-45cb87ea2d0f", - "metadata": {}, + "id": "994bc7ca-3979-4508-9a94-a67c7154cd6e", + "metadata": { + "tags": [] + }, "outputs": [], "source": [ - "orgs_with_2_names_df = pd.merge(\n", - " orgs_with_2_names_df, orgs_agg, on=\"organization_name\", how=\"left\"\n", - ")" + "operator_df2.portfolio_organization_name.unique()" ] }, { "cell_type": "code", "execution_count": null, - "id": "4f0eccf0-3731-4f93-9d7d-c4cc54617bbb", - "metadata": {}, + "id": "c8903bbc-1e01-45a3-b498-0c645a6da9e6", + "metadata": { + "tags": [] + }, "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)" + "operator_df.loc[operator_df.caltrans_district == \"03 - Marysville\"]" ] }, { "cell_type": "code", "execution_count": null, - "id": "15712b8e-f547-4668-8f77-c9912207ef7b", + "id": "cbafa165-4db8-4db2-bc5f-1cbbbe346a48", "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())" + "# 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": null, - "id": "67b1e0cd-7ecf-43ca-80eb-b9139f7f49f8", + "id": "b77581d4-cb70-42e9-9f3b-101db248dc64", "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", - "]" + "# Load Datasets\n", + "operator_df = _ct_district_data_prep.data_wrangling_operator_profile(district)\n", + "\n", + "operator_gdf = _ct_district_data_prep.data_wrangling_operator_map(\n", + " list(operator_df.portfolio_organization_name.unique())\n", + ")\n", + "\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", + "district_gdf = _ct_district_visuals.ct_district(district_int)" ] }, { "cell_type": "code", "execution_count": null, - "id": "d591e85f-18f4-4613-8330-c1c6978c0507", - "metadata": {}, + "id": "0c8a03ae-eab6-483d-bdae-b6433cded751", + "metadata": { + "tags": [] + }, "outputs": [], "source": [ - "orgs_with_2_names_df_final = pd.concat([orgs_with_2_names_df, orgs_with_2_names_df3])" + "len(operator_df)" ] }, { "cell_type": "code", "execution_count": null, - "id": "fcf1647b-892e-4323-8b69-e7bed38951b7", - "metadata": {}, + "id": "6c6afad3-b014-4e6d-ab51-f7d4e73269cb", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "shn_gdf = _ct_district_data_prep.load_buffered_shn_map(50, district_int)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "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 +295,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 +340,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 +524,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/og_district_report.ipynb b/gtfs_digest/og_district_report.ipynb new file mode 100644 index 000000000..141c91521 --- /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 +} From cb0f901951c2c309ab020738bfaafa33a24f74f7 Mon Sep 17 00:00:00 2001 From: amandaha8 Date: Thu, 26 Jun 2025 21:25:19 +0000 Subject: [PATCH 10/10] reran caltrans and legislative district portfolio --- gtfs_digest/27_vp_chart.ipynb | 2416 ++--------------- gtfs_digest/_ct_district_data_prep.py | 24 +- gtfs_digest/deploy_district_yaml.py | 10 +- gtfs_digest/district_report.ipynb | 147 +- portfolio/district_digest/_config.yml | 2 +- portfolio/district_digest/_toc.yml | 15 +- ..._district_report__district_01-eureka.ipynb | 4 +- ...district_report__district_02-redding.ipynb | 4 +- ...t__district_03-marysville-sacramento.ipynb | 3 + ...report__district_04-bay-area-oakland.ipynb | 3 + ...ict_05-san-luis-obispo-santa-barbara.ipynb | 3 + ...port__district_06-fresno-bakersfield.ipynb | 3 + ...ort__district_07-los-angeles-ventura.ipynb | 3 + ...district_08-san-bernardino-riverside.ipynb | 3 + ...istrict_report__district_10-stockton.ipynb | 4 +- ...strict_report__district_11-san-diego.ipynb | 4 +- ...strict_report__district_12-santa-ana.ipynb | 3 + .../legislative_district_digest/_config.yml | 2 +- ...tive_district_report__district_ad-01.ipynb | 4 +- ...tive_district_report__district_ad-02.ipynb | 4 +- ...tive_district_report__district_ad-03.ipynb | 4 +- ...tive_district_report__district_ad-04.ipynb | 4 +- ...tive_district_report__district_ad-05.ipynb | 4 +- ...tive_district_report__district_ad-06.ipynb | 4 +- ...tive_district_report__district_ad-07.ipynb | 4 +- ...tive_district_report__district_ad-08.ipynb | 4 +- ...tive_district_report__district_ad-09.ipynb | 4 +- ...tive_district_report__district_ad-10.ipynb | 4 +- ...tive_district_report__district_ad-11.ipynb | 4 +- ...tive_district_report__district_ad-12.ipynb | 4 +- ...tive_district_report__district_ad-13.ipynb | 4 +- ...tive_district_report__district_ad-14.ipynb | 4 +- ...tive_district_report__district_ad-15.ipynb | 4 +- ...tive_district_report__district_ad-16.ipynb | 4 +- ...tive_district_report__district_ad-17.ipynb | 4 +- ...tive_district_report__district_ad-18.ipynb | 4 +- ...tive_district_report__district_ad-19.ipynb | 4 +- ...tive_district_report__district_ad-20.ipynb | 4 +- ...tive_district_report__district_ad-21.ipynb | 4 +- ...tive_district_report__district_ad-22.ipynb | 4 +- ...tive_district_report__district_ad-23.ipynb | 4 +- ...tive_district_report__district_ad-24.ipynb | 4 +- ...tive_district_report__district_ad-25.ipynb | 4 +- ...tive_district_report__district_ad-26.ipynb | 4 +- ...tive_district_report__district_ad-27.ipynb | 4 +- ...tive_district_report__district_ad-28.ipynb | 4 +- ...tive_district_report__district_ad-29.ipynb | 4 +- ...tive_district_report__district_ad-30.ipynb | 4 +- ...tive_district_report__district_ad-31.ipynb | 4 +- ...tive_district_report__district_ad-32.ipynb | 4 +- ...tive_district_report__district_ad-33.ipynb | 4 +- ...tive_district_report__district_ad-34.ipynb | 4 +- ...tive_district_report__district_ad-35.ipynb | 4 +- ...tive_district_report__district_ad-36.ipynb | 4 +- ...tive_district_report__district_ad-37.ipynb | 4 +- ...tive_district_report__district_ad-38.ipynb | 4 +- ...tive_district_report__district_ad-39.ipynb | 4 +- ...tive_district_report__district_ad-40.ipynb | 4 +- ...tive_district_report__district_ad-41.ipynb | 4 +- ...tive_district_report__district_ad-42.ipynb | 4 +- ...tive_district_report__district_ad-43.ipynb | 4 +- ...tive_district_report__district_ad-44.ipynb | 4 +- ...tive_district_report__district_ad-45.ipynb | 4 +- ...tive_district_report__district_ad-46.ipynb | 4 +- ...tive_district_report__district_ad-47.ipynb | 4 +- ...tive_district_report__district_ad-48.ipynb | 4 +- ...tive_district_report__district_ad-49.ipynb | 4 +- ...tive_district_report__district_ad-50.ipynb | 4 +- ...tive_district_report__district_ad-51.ipynb | 4 +- ...tive_district_report__district_ad-52.ipynb | 4 +- ...tive_district_report__district_ad-53.ipynb | 4 +- ...tive_district_report__district_ad-54.ipynb | 4 +- ...tive_district_report__district_ad-55.ipynb | 4 +- ...tive_district_report__district_ad-56.ipynb | 4 +- ...tive_district_report__district_ad-57.ipynb | 4 +- ...tive_district_report__district_ad-58.ipynb | 4 +- ...tive_district_report__district_ad-59.ipynb | 4 +- ...tive_district_report__district_ad-60.ipynb | 4 +- ...tive_district_report__district_ad-61.ipynb | 4 +- ...tive_district_report__district_ad-62.ipynb | 4 +- ...tive_district_report__district_ad-63.ipynb | 4 +- ...tive_district_report__district_ad-64.ipynb | 4 +- ...tive_district_report__district_ad-65.ipynb | 4 +- ...tive_district_report__district_ad-66.ipynb | 4 +- ...tive_district_report__district_ad-67.ipynb | 4 +- ...tive_district_report__district_ad-68.ipynb | 4 +- ...tive_district_report__district_ad-69.ipynb | 4 +- ...tive_district_report__district_ad-70.ipynb | 4 +- ...tive_district_report__district_ad-71.ipynb | 4 +- ...tive_district_report__district_ad-72.ipynb | 4 +- ...tive_district_report__district_ad-73.ipynb | 4 +- ...tive_district_report__district_ad-74.ipynb | 4 +- ...tive_district_report__district_ad-75.ipynb | 4 +- ...tive_district_report__district_ad-76.ipynb | 4 +- ...tive_district_report__district_ad-77.ipynb | 4 +- ...tive_district_report__district_ad-78.ipynb | 4 +- ...tive_district_report__district_ad-79.ipynb | 4 +- ...tive_district_report__district_ad-80.ipynb | 4 +- ...tive_district_report__district_sd-01.ipynb | 4 +- ...tive_district_report__district_sd-02.ipynb | 4 +- ...tive_district_report__district_sd-03.ipynb | 4 +- ...tive_district_report__district_sd-04.ipynb | 4 +- ...tive_district_report__district_sd-05.ipynb | 4 +- ...tive_district_report__district_sd-06.ipynb | 4 +- ...tive_district_report__district_sd-07.ipynb | 4 +- ...tive_district_report__district_sd-08.ipynb | 4 +- ...tive_district_report__district_sd-09.ipynb | 4 +- ...tive_district_report__district_sd-10.ipynb | 4 +- ...tive_district_report__district_sd-11.ipynb | 4 +- ...tive_district_report__district_sd-12.ipynb | 4 +- ...tive_district_report__district_sd-13.ipynb | 4 +- ...tive_district_report__district_sd-14.ipynb | 4 +- ...tive_district_report__district_sd-15.ipynb | 4 +- ...tive_district_report__district_sd-16.ipynb | 4 +- ...tive_district_report__district_sd-17.ipynb | 4 +- ...tive_district_report__district_sd-18.ipynb | 4 +- ...tive_district_report__district_sd-19.ipynb | 4 +- ...tive_district_report__district_sd-20.ipynb | 4 +- ...tive_district_report__district_sd-21.ipynb | 4 +- ...tive_district_report__district_sd-22.ipynb | 4 +- ...tive_district_report__district_sd-23.ipynb | 4 +- ...tive_district_report__district_sd-24.ipynb | 4 +- ...tive_district_report__district_sd-25.ipynb | 4 +- ...tive_district_report__district_sd-26.ipynb | 4 +- ...tive_district_report__district_sd-27.ipynb | 4 +- ...tive_district_report__district_sd-28.ipynb | 4 +- ...tive_district_report__district_sd-29.ipynb | 4 +- ...tive_district_report__district_sd-30.ipynb | 4 +- ...tive_district_report__district_sd-31.ipynb | 4 +- ...tive_district_report__district_sd-32.ipynb | 4 +- ...tive_district_report__district_sd-33.ipynb | 4 +- ...tive_district_report__district_sd-34.ipynb | 4 +- ...tive_district_report__district_sd-35.ipynb | 4 +- ...tive_district_report__district_sd-36.ipynb | 4 +- ...tive_district_report__district_sd-37.ipynb | 4 +- ...tive_district_report__district_sd-38.ipynb | 4 +- ...tive_district_report__district_sd-39.ipynb | 4 +- ...tive_district_report__district_sd-40.ipynb | 4 +- portfolio/sites/district_digest.yml | 16 +- 139 files changed, 565 insertions(+), 2584 deletions(-) create mode 100644 portfolio/district_digest/district_03-marysville-sacramento/00__district_report__district_03-marysville-sacramento.ipynb create mode 100644 portfolio/district_digest/district_04-bay-area-oakland/00__district_report__district_04-bay-area-oakland.ipynb create mode 100644 portfolio/district_digest/district_05-san-luis-obispo-santa-barbara/00__district_report__district_05-san-luis-obispo-santa-barbara.ipynb create mode 100644 portfolio/district_digest/district_06-fresno-bakersfield/00__district_report__district_06-fresno-bakersfield.ipynb create mode 100644 portfolio/district_digest/district_07-los-angeles-ventura/00__district_report__district_07-los-angeles-ventura.ipynb create mode 100644 portfolio/district_digest/district_08-san-bernardino-riverside/00__district_report__district_08-san-bernardino-riverside.ipynb create mode 100644 portfolio/district_digest/district_12-santa-ana/00__district_report__district_12-santa-ana.ipynb diff --git a/gtfs_digest/27_vp_chart.ipynb b/gtfs_digest/27_vp_chart.ipynb index 897c85468..f2757d5e4 100644 --- a/gtfs_digest/27_vp_chart.ipynb +++ b/gtfs_digest/27_vp_chart.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 1, "id": "e1861f46-194e-4a36-ba75-98ca8d4aee20", "metadata": { "tags": [] @@ -55,9 +55,186 @@ " 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": [] @@ -71,7 +248,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "8705f7dd-4a4d-4984-8d87-98d4d941e1ba", "metadata": { "tags": [] @@ -83,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "d02d7352-957e-4cf7-9287-9710b4b9d62f", "metadata": { "tags": [] @@ -98,7 +275,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "22bbdbb5-b964-40cd-b6a8-0cf03f306af8", "metadata": { "tags": [] @@ -114,7 +291,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "0988c75d-80e2-4510-85fd-05e91c29a062", "metadata": { "tags": [] @@ -139,7 +316,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "cc415d44-722f-4b7c-9100-2452f3d2986e", "metadata": { "tags": [] @@ -153,7 +330,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "4b990386-dbc2-4c67-9e90-d7d549bcf802", "metadata": { "tags": [] @@ -170,34 +347,19 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "51385a1f-4526-4896-b4ed-9dba828e5b01", "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": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "clean_route_names.columns" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "f0823c34-e23e-4706-8395-8485865d9f06", "metadata": { "tags": [] @@ -209,1150 +371,12 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "e98a03df-a4df-4e2a-90cb-96f1e5082a72", "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", - "
recent_combined_nameroute_long_nameroute_short_name
0Route 11__Route 11Route 11Route 11
1Route 18__Route 18Route 18Route 18
2Route 21__Route 21Route 21Route 21
3Route 7__Route 7Route 7Route 7
4TA__Trolley ATrolley ATA
5Fixed Route__Fixed Route ServiceFixed Route ServiceFixed Route
6Fillmore__Fillmore LoopFillmore LoopFillmore
7Piru__PiruPiruPiru
8Route 16__Route 16Route 16Route 16
990__90-C Street/CSUCI90-C Street/CSUCI90
1097__97-Cam Metrolink/CSUCI97-Cam Metrolink/CSUCI97
1170__70-East County70-East County70
1272__72-East County72-East County72
1373__73-East County73-East County73
1480__80-Coastal Express80-Coastal Express80
1580X__80x-Coastal Express80x-Coastal Express80X
1686__86-Coastal Express86-Coastal Express86
17Trolley__TrolleyTrolleyTrolley
18Santa Paula A__Santa Paula A Route (Las Piedras Park)Santa Paula A Route (Las Piedras Park)Santa Paula A
19Santa Paula B__Santa Paula B Route (SP Hospital)Santa Paula B Route (SP Hospital)Santa Paula B
20Route 5__Route 5Route 5Route 5
2185__85-Coastal Express85-Coastal Express85
2287__87-Coastal Express87-Coastal Express87
2389__89-Coastal Express89-Coastal Express89
24Route 2__Route 2Route 2Route 2
2581B__81B-Coastal Express81B-Coastal Express81B
2681__81-Coastal Express81-Coastal Express81
2784U__84u-Coastal Express84u-Coastal Express84U
28KS__Kanan ShuttleKanan ShuttleKS
29Route 15__Route 15Route 15Route 15
3040__Route 40 Newbury ParkRoute 40 Newbury Park40
3142__Route 42 Midtown BRoute 42 Midtown B42
3243__Route 43 TOB ExpressRoute 43 TOB Express43
3344__Route 44 CrosstownRoute 44 Crosstown44
34Route 8__Route 8Route 8Route 8
35Route 3__Route 3Route 3Route 3
36Route 4__Route 4Route 4Route 4
37Route 1__Route 1Route 1Route 1
38Route 17__Route 17Route 17Route 17
39Route 23__Route 23Route 23Route 23
40Route 10__Route 10Route 10Route 10
4110__Route 10Route 1010
4220__Route 20Route 2020
4330__Route 30Route 3030
4450__50-Hwy10150-Hwy10150
4584__84-Coastal Express84-Coastal Express84
4685C__85c-Coastal Express85c-Coastal Express85C
4788__88-Coastal Express88-Coastal Express88
482__Route 2Route 22
491__Route 1Route 11
5041__Route 41 Midtown ARoute 41 Midtown A41
51Route 6__Route 6Route 6Route 6
52Route 19__Route 19Route 19Route 19
5377__77-Cross County Limited77-Cross County Limited77
5462__62-Hwy12662-Hwy12662
5560__60-Hwy12660-Hwy12660
1806__Dial-A-Ride - senior/disabilityDial-A-Ride - senior/disability
214673X__73x-East County73x-East County73X
214780C__80c-Coastal Express80c-Coastal Express80C
2234__Dial-A-Ride - general publicDial-A-Ride - general public
236690__90-99 CSU Channel Islands90-C Street/CSUCI90
236797__90-99 CSU Channel Islands97-Cam Metrolink/CSUCI97
236870__70-74 East County70-East County70
236972__East County72-East County72
237073__East County73-East County73
237180__80-89 Coastal Express80-Coastal Express80
237280X__80-89 Coastal Express80x-Coastal Express80X
237386__80-89 Coastal Express86-Coastal Express86
237785__80-89 Coastal Express85-Coastal Express85
237887__80-89 Coastal Express87-Coastal Express87
237989__80-89 Coastal Express89-Coastal Express89
238181B__80-89 Coastal Express81B-Coastal Express81B
238281__80-89 Coastal Express81-Coastal Express81
239985C__80-89 Coastal Express85c-Coastal Express85C
240084__80-89 Coastal Express84-Coastal Express84
240777__77 Cross County Limited77-Cross County Limited77
240862__60-62 Hwy 12662-Hwy12662
240960__60 - Hwy 12660-Hwy12660
241050__50 Hwy 10150-Hwy10150
465374X__70-74 East County73x-East County73X
465584U__80-89 Coastal Express84u-Coastal Express84U
465688__80-89 Coastal Express88-Coastal Express88
14407TB__Trolley BTrolley BTB
1441999__90-99 CSU Channel Islands99 - CSU Channel Islands99
21986SBB__Summer Beach BusSummer Beach BusSBB
2700655X__55 Conejo Connection55X-Hwy101-Conejo Connection55X
7919170__70-74 East CountyEast County70
7919272__East CountyEast County72
7919373__East CountyEast County73
7919474X__70-74 East CountyEast County73X
7919580__80-89 Coastal ExpressCoastal Express80
7919680X__80-89 Coastal ExpressCoastal Express80X
7919786__80-89 Coastal ExpressCoastal Express86
7920187__80-89 Coastal ExpressCoastal Express87
7920289__80-89 Coastal ExpressCoastal Express89
7920499__90-99 CSU Channel IslandsCSU Channel Islands99
7920581__80-89 Coastal ExpressCoastal Express81
7920684U__80-89 Coastal ExpressCoastal Express84U
7922384__80-89 Coastal ExpressCoastal Express84
7922485__80-89 Coastal ExpressCoastal Express85
7923277__77 Cross County LimitedCross County Limited77
7923350__50 Hwy 101Hwy 10150
7923455X__55 Conejo ConnectionConejo Connection55X
7923560__60 - Hwy 126Hwy 12660
7923662__60-62 Hwy 126Hwy 12662
8138381B__80-89 Coastal ExpressCoastal Express81B
8138485C__80-89 Coastal ExpressCoastal Express85C
8138588__80-89 Coastal ExpressCoastal Express88
8400897__90-99 CSU Channel Islands90-99 CSU Channel Islands97
8400980__80-89 Coastal Express80-89 Coastal Express80
8401080X__80-89 Coastal Express80-89 Coastal Express80X
8401186__80-89 Coastal Express80-89 Coastal Express86
84013A.M. Rio Vista__Fillmore Tripper - A.M. Rio VistaFillmore Tripper - A.M. Rio VistaA.M. Rio Vista
84014P.M. Rio Vista Tripper__Fillmore Tripper - P.M. Rio VistaFillmore Tripper - P.M. Rio VistaP.M. Rio Vista Tripper
84015Tripper__Santa Paula School Tripper (AM)Santa Paula School Tripper (AM)Tripper
8401985__80-89 Coastal Express80-89 Coastal Express85
8402089__80-89 Coastal Express80-89 Coastal Express89
8402281__80-89 Coastal Express80-89 Coastal Express81
8403984__80-89 Coastal Express80-89 Coastal Express84
8404677__77 Cross County Limited77 Cross County Limited77
8404750__50 Hwy 10150 Hwy 10150
8404890__90-99 CSU Channel Islands90-99 CSU Channel Islands90
8404955X__55 Conejo Connection55 Conejo Connection55X
8405060__60 - Hwy 12660-62 Hwy 12660
8405162__60-62 Hwy 12660-62 Hwy 12662
8405570__70-74 East County70-74 East County70
8405685C__80-89 Coastal Express80-89 Coastal Express85C
8405787__80-89 Coastal Express80-89 Coastal Express87
8405888__80-89 Coastal Express80-89 Coastal Express88
8405971__70-74 East County70-74 East County71
8406074X__70-74 East County70-74 East County74X
8635281B__80-89 Coastal Express80-89 Coastal Express81B
8635384U__80-89 Coastal Express80-89 Coastal Express84U
9735699__90-99 CSU Channel Islands90-99 CSU Channel Islands99
103455Fillmore-Moorpark Route__Fillmore-Moorpark RouteFillmore-Moorpark RouteFillmore-Moorpark Route
103456Fillmore-Moorpark Route__Fillmore-Moorpark Route InboundFillmore-Moorpark Route InboundFillmore-Moorpark Route
11394660__60 - Hwy 12660 - Hwy 12660
\n", - "
" - ], - "text/plain": [ - " recent_combined_name \\\n", - "0 Route 11__Route 11 \n", - "1 Route 18__Route 18 \n", - "2 Route 21__Route 21 \n", - "3 Route 7__Route 7 \n", - "4 TA__Trolley A \n", - "5 Fixed Route__Fixed Route Service \n", - "6 Fillmore__Fillmore Loop \n", - "7 Piru__Piru \n", - "8 Route 16__Route 16 \n", - "9 90__90-C Street/CSUCI \n", - "10 97__97-Cam Metrolink/CSUCI \n", - "11 70__70-East County \n", - "12 72__72-East County \n", - "13 73__73-East County \n", - "14 80__80-Coastal Express \n", - "15 80X__80x-Coastal Express \n", - "16 86__86-Coastal Express \n", - "17 Trolley__Trolley \n", - "18 Santa Paula A__Santa Paula A Route (Las Piedras Park) \n", - "19 Santa Paula B__Santa Paula B Route (SP Hospital) \n", - "20 Route 5__Route 5 \n", - "21 85__85-Coastal Express \n", - "22 87__87-Coastal Express \n", - "23 89__89-Coastal Express \n", - "24 Route 2__Route 2 \n", - "25 81B__81B-Coastal Express \n", - "26 81__81-Coastal Express \n", - "27 84U__84u-Coastal Express \n", - "28 KS__Kanan Shuttle \n", - "29 Route 15__Route 15 \n", - "30 40__Route 40 Newbury Park \n", - "31 42__Route 42 Midtown B \n", - "32 43__Route 43 TOB Express \n", - "33 44__Route 44 Crosstown \n", - "34 Route 8__Route 8 \n", - "35 Route 3__Route 3 \n", - "36 Route 4__Route 4 \n", - "37 Route 1__Route 1 \n", - "38 Route 17__Route 17 \n", - "39 Route 23__Route 23 \n", - "40 Route 10__Route 10 \n", - "41 10__Route 10 \n", - "42 20__Route 20 \n", - "43 30__Route 30 \n", - "44 50__50-Hwy101 \n", - "45 84__84-Coastal Express \n", - "46 85C__85c-Coastal Express \n", - "47 88__88-Coastal Express \n", - "48 2__Route 2 \n", - "49 1__Route 1 \n", - "50 41__Route 41 Midtown A \n", - "51 Route 6__Route 6 \n", - "52 Route 19__Route 19 \n", - "53 77__77-Cross County Limited \n", - "54 62__62-Hwy126 \n", - "55 60__60-Hwy126 \n", - "1806 __Dial-A-Ride - senior/disability \n", - "2146 73X__73x-East County \n", - "2147 80C__80c-Coastal Express \n", - "2234 __Dial-A-Ride - general public \n", - "2366 90__90-99 CSU Channel Islands \n", - "2367 97__90-99 CSU Channel Islands \n", - "2368 70__70-74 East County \n", - "2369 72__East County \n", - "2370 73__East County \n", - "2371 80__80-89 Coastal Express \n", - "2372 80X__80-89 Coastal Express \n", - "2373 86__80-89 Coastal Express \n", - "2377 85__80-89 Coastal Express \n", - "2378 87__80-89 Coastal Express \n", - "2379 89__80-89 Coastal Express \n", - "2381 81B__80-89 Coastal Express \n", - "2382 81__80-89 Coastal Express \n", - "2399 85C__80-89 Coastal Express \n", - "2400 84__80-89 Coastal Express \n", - "2407 77__77 Cross County Limited \n", - "2408 62__60-62 Hwy 126 \n", - "2409 60__60 - Hwy 126 \n", - "2410 50__50 Hwy 101 \n", - "4653 74X__70-74 East County \n", - "4655 84U__80-89 Coastal Express \n", - "4656 88__80-89 Coastal Express \n", - "14407 TB__Trolley B \n", - "14419 99__90-99 CSU Channel Islands \n", - "21986 SBB__Summer Beach Bus \n", - "27006 55X__55 Conejo Connection \n", - "79191 70__70-74 East County \n", - "79192 72__East County \n", - "79193 73__East County \n", - "79194 74X__70-74 East County \n", - "79195 80__80-89 Coastal Express \n", - "79196 80X__80-89 Coastal Express \n", - "79197 86__80-89 Coastal Express \n", - "79201 87__80-89 Coastal Express \n", - "79202 89__80-89 Coastal Express \n", - "79204 99__90-99 CSU Channel Islands \n", - "79205 81__80-89 Coastal Express \n", - "79206 84U__80-89 Coastal Express \n", - "79223 84__80-89 Coastal Express \n", - "79224 85__80-89 Coastal Express \n", - "79232 77__77 Cross County Limited \n", - "79233 50__50 Hwy 101 \n", - "79234 55X__55 Conejo Connection \n", - "79235 60__60 - Hwy 126 \n", - "79236 62__60-62 Hwy 126 \n", - "81383 81B__80-89 Coastal Express \n", - "81384 85C__80-89 Coastal Express \n", - "81385 88__80-89 Coastal Express \n", - "84008 97__90-99 CSU Channel Islands \n", - "84009 80__80-89 Coastal Express \n", - "84010 80X__80-89 Coastal Express \n", - "84011 86__80-89 Coastal Express \n", - "84013 A.M. Rio Vista__Fillmore Tripper - A.M. Rio Vista \n", - "84014 P.M. Rio Vista Tripper__Fillmore Tripper - P.M. Rio Vista \n", - "84015 Tripper__Santa Paula School Tripper (AM) \n", - "84019 85__80-89 Coastal Express \n", - "84020 89__80-89 Coastal Express \n", - "84022 81__80-89 Coastal Express \n", - "84039 84__80-89 Coastal Express \n", - "84046 77__77 Cross County Limited \n", - "84047 50__50 Hwy 101 \n", - "84048 90__90-99 CSU Channel Islands \n", - "84049 55X__55 Conejo Connection \n", - "84050 60__60 - Hwy 126 \n", - "84051 62__60-62 Hwy 126 \n", - "84055 70__70-74 East County \n", - "84056 85C__80-89 Coastal Express \n", - "84057 87__80-89 Coastal Express \n", - "84058 88__80-89 Coastal Express \n", - "84059 71__70-74 East County \n", - "84060 74X__70-74 East County \n", - "86352 81B__80-89 Coastal Express \n", - "86353 84U__80-89 Coastal Express \n", - "97356 99__90-99 CSU Channel Islands \n", - "103455 Fillmore-Moorpark Route__Fillmore-Moorpark Route \n", - "103456 Fillmore-Moorpark Route__Fillmore-Moorpark Route Inbound \n", - "113946 60__60 - Hwy 126 \n", - "\n", - " route_long_name route_short_name \n", - "0 Route 11 Route 11 \n", - "1 Route 18 Route 18 \n", - "2 Route 21 Route 21 \n", - "3 Route 7 Route 7 \n", - "4 Trolley A TA \n", - "5 Fixed Route Service Fixed Route \n", - "6 Fillmore Loop Fillmore \n", - "7 Piru Piru \n", - "8 Route 16 Route 16 \n", - "9 90-C Street/CSUCI 90 \n", - "10 97-Cam Metrolink/CSUCI 97 \n", - "11 70-East County 70 \n", - "12 72-East County 72 \n", - "13 73-East County 73 \n", - "14 80-Coastal Express 80 \n", - "15 80x-Coastal Express 80X \n", - "16 86-Coastal Express 86 \n", - "17 Trolley Trolley \n", - "18 Santa Paula A Route (Las Piedras Park) Santa Paula A \n", - "19 Santa Paula B Route (SP Hospital) Santa Paula B \n", - "20 Route 5 Route 5 \n", - "21 85-Coastal Express 85 \n", - "22 87-Coastal Express 87 \n", - "23 89-Coastal Express 89 \n", - "24 Route 2 Route 2 \n", - "25 81B-Coastal Express 81B \n", - "26 81-Coastal Express 81 \n", - "27 84u-Coastal Express 84U \n", - "28 Kanan Shuttle KS \n", - "29 Route 15 Route 15 \n", - "30 Route 40 Newbury Park 40 \n", - "31 Route 42 Midtown B 42 \n", - "32 Route 43 TOB Express 43 \n", - "33 Route 44 Crosstown 44 \n", - "34 Route 8 Route 8 \n", - "35 Route 3 Route 3 \n", - "36 Route 4 Route 4 \n", - "37 Route 1 Route 1 \n", - "38 Route 17 Route 17 \n", - "39 Route 23 Route 23 \n", - "40 Route 10 Route 10 \n", - "41 Route 10 10 \n", - "42 Route 20 20 \n", - "43 Route 30 30 \n", - "44 50-Hwy101 50 \n", - "45 84-Coastal Express 84 \n", - "46 85c-Coastal Express 85C \n", - "47 88-Coastal Express 88 \n", - "48 Route 2 2 \n", - "49 Route 1 1 \n", - "50 Route 41 Midtown A 41 \n", - "51 Route 6 Route 6 \n", - "52 Route 19 Route 19 \n", - "53 77-Cross County Limited 77 \n", - "54 62-Hwy126 62 \n", - "55 60-Hwy126 60 \n", - "1806 Dial-A-Ride - senior/disability \n", - "2146 73x-East County 73X \n", - "2147 80c-Coastal Express 80C \n", - "2234 Dial-A-Ride - general public \n", - "2366 90-C Street/CSUCI 90 \n", - "2367 97-Cam Metrolink/CSUCI 97 \n", - "2368 70-East County 70 \n", - "2369 72-East County 72 \n", - "2370 73-East County 73 \n", - "2371 80-Coastal Express 80 \n", - "2372 80x-Coastal Express 80X \n", - "2373 86-Coastal Express 86 \n", - "2377 85-Coastal Express 85 \n", - "2378 87-Coastal Express 87 \n", - "2379 89-Coastal Express 89 \n", - "2381 81B-Coastal Express 81B \n", - "2382 81-Coastal Express 81 \n", - "2399 85c-Coastal Express 85C \n", - "2400 84-Coastal Express 84 \n", - "2407 77-Cross County Limited 77 \n", - "2408 62-Hwy126 62 \n", - "2409 60-Hwy126 60 \n", - "2410 50-Hwy101 50 \n", - "4653 73x-East County 73X \n", - "4655 84u-Coastal Express 84U \n", - "4656 88-Coastal Express 88 \n", - "14407 Trolley B TB \n", - "14419 99 - CSU Channel Islands 99 \n", - "21986 Summer Beach Bus SBB \n", - "27006 55X-Hwy101-Conejo Connection 55X \n", - "79191 East County 70 \n", - "79192 East County 72 \n", - "79193 East County 73 \n", - "79194 East County 73X \n", - "79195 Coastal Express 80 \n", - "79196 Coastal Express 80X \n", - "79197 Coastal Express 86 \n", - "79201 Coastal Express 87 \n", - "79202 Coastal Express 89 \n", - "79204 CSU Channel Islands 99 \n", - "79205 Coastal Express 81 \n", - "79206 Coastal Express 84U \n", - "79223 Coastal Express 84 \n", - "79224 Coastal Express 85 \n", - "79232 Cross County Limited 77 \n", - "79233 Hwy 101 50 \n", - "79234 Conejo Connection 55X \n", - "79235 Hwy 126 60 \n", - "79236 Hwy 126 62 \n", - "81383 Coastal Express 81B \n", - "81384 Coastal Express 85C \n", - "81385 Coastal Express 88 \n", - "84008 90-99 CSU Channel Islands 97 \n", - "84009 80-89 Coastal Express 80 \n", - "84010 80-89 Coastal Express 80X \n", - "84011 80-89 Coastal Express 86 \n", - "84013 Fillmore Tripper - A.M. Rio Vista A.M. Rio Vista \n", - "84014 Fillmore Tripper - P.M. Rio Vista P.M. Rio Vista Tripper \n", - "84015 Santa Paula School Tripper (AM) Tripper \n", - "84019 80-89 Coastal Express 85 \n", - "84020 80-89 Coastal Express 89 \n", - "84022 80-89 Coastal Express 81 \n", - "84039 80-89 Coastal Express 84 \n", - "84046 77 Cross County Limited 77 \n", - "84047 50 Hwy 101 50 \n", - "84048 90-99 CSU Channel Islands 90 \n", - "84049 55 Conejo Connection 55X \n", - "84050 60-62 Hwy 126 60 \n", - "84051 60-62 Hwy 126 62 \n", - "84055 70-74 East County 70 \n", - "84056 80-89 Coastal Express 85C \n", - "84057 80-89 Coastal Express 87 \n", - "84058 80-89 Coastal Express 88 \n", - "84059 70-74 East County 71 \n", - "84060 70-74 East County 74X \n", - "86352 80-89 Coastal Express 81B \n", - "86353 80-89 Coastal Express 84U \n", - "97356 90-99 CSU Channel Islands 99 \n", - "103455 Fillmore-Moorpark Route Fillmore-Moorpark Route \n", - "103456 Fillmore-Moorpark Route Inbound Fillmore-Moorpark Route \n", - "113946 60 - Hwy 126 60 " - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "clean_route_names[[\"recent_combined_name\", \"route_long_name\",\"route_short_name\"]].drop_duplicates()" ] @@ -1365,226 +389,50 @@ "### Lots of duplicate rows are popping up...Fix that" ] }, - { - "cell_type": "code", - "execution_count": 13, - "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": 14, - "id": "a21a5686-fa9e-46f7-b5f8-51716e9b024d", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "14" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(one_test_route)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "abf29b32-d050-4ce0-b693-83b542e59de0", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(one_test_route.drop_duplicates())" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "316204a0-4242-4726-a693-4edeb0c7c176", - "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", - "
Direction (0/1)PeriodAverage Scheduled Service (trip minutes)# Scheduled Trips# Realtime TripsRouteDirection# 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)GTFS AvailabilityAverage Stop Distance (Miles)Date
319481All Day150.003389 80-89 Coastal ExpressEastbound6226210032.000.00100.00100.002.00NaNVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)500.00schedule_and_vp6.002025-05-14
321191Peak150.003389 80-89 Coastal ExpressEastbound6226210032.000.00100.00100.002.00NaNVentura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks)158.00schedule_and_vp6.002025-05-14
\n", - "
" - ], - "text/plain": [ - " Direction (0/1) Period Average Scheduled Service (trip minutes) \\\n", - "31948 1 All Day 150.00 \n", - "32119 1 Peak 150.00 \n", - "\n", - " # Scheduled Trips # Realtime Trips Route \\\n", - "31948 3 3 89 80-89 Coastal Express \n", - "32119 3 3 89 80-89 Coastal Express \n", - "\n", - " Direction # Minutes with 1+ VP per Minute \\\n", - "31948 Eastbound 622 \n", - "32119 Eastbound 622 \n", - "\n", - " # Minutes with 2+ VP per Minute # Early Arrival Trips \\\n", - "31948 621 0 \n", - "32119 621 0 \n", - "\n", - " # On-Time Trips # Late Trips Average VP per Minute \\\n", - "31948 0 3 2.00 \n", - "32119 0 3 2.00 \n", - "\n", - " % VP within Scheduled Shape % Scheduled Trip w/ 1+ VP/Minute \\\n", - "31948 0.00 100.00 \n", - "32119 0.00 100.00 \n", - "\n", - " % Scheduled Trip w/ 2+ VP/Minute \\\n", - "31948 100.00 \n", - "32119 100.00 \n", - "\n", - " Realtime versus Scheduled Service Ratio Speed (MPH) \\\n", - "31948 2.00 NaN \n", - "32119 2.00 NaN \n", - "\n", - " Portfolio Organization Name \\\n", - "31948 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "32119 Ventura County (VCTC, Gold Coast, Cities of Camarillo, Moorpark, Ojai, Simi Valley, Thousand Oaks) \n", - "\n", - " Headway (Minutes) GTFS Availability Average Stop Distance (Miles) \\\n", - "31948 500.00 schedule_and_vp 6.00 \n", - "32119 158.00 schedule_and_vp 6.00 \n", - "\n", - " Date \n", - "31948 2025-05-14 \n", - "32119 2025-05-14 " - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + { + "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()" ] @@ -1599,7 +447,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "f24dc976-29ee-4fc1-9a1a-dea8e97ccdf2", "metadata": { "tags": [] @@ -1619,7 +467,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "e2f16933-fab6-4cc0-b790-83fa5fe7e6fb", "metadata": { "tags": [] @@ -1631,7 +479,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "7fb02efe-94b3-456b-9cdf-f26ccef5a010", "metadata": { "tags": [] @@ -1643,29 +491,12 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "id": "bdc9b2c5-f624-450f-8360-65a94869c813", "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'],\n", - " dtype='object')" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# \n", "schedule_route_dir_df.columns" @@ -1673,7 +504,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "id": "fb04df31-a1c4-4a3c-8dfa-1ff8ec375cf2", "metadata": { "tags": [] @@ -1690,143 +521,12 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "id": "cdb02d9b-a3e1-4ebf-bd80-48d2ebbf2a42", "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
80261770249a5a2e770ca90628434d4934b141481.00all_day149.675.5730.122025-05-141.000.000.000.000.000.000.00expressVCTC GMV Schedule89__80-89 Coastal Express89 80-89 Coastal Express4148Eastbound
80311770249a5a2e770ca90628434d4934b141481.00peak149.675.5730.382025-05-141.000.000.000.000.000.000.00expressVCTC GMV Schedule89__80-89 Coastal Express89 80-89 Coastal Express4148Eastbound
\n", - "
" - ], - "text/plain": [ - " schedule_gtfs_dataset_key route_id direction_id time_period \\\n", - "8026 1770249a5a2e770ca90628434d4934b1 4148 1.00 all_day \n", - "8031 1770249a5a2e770ca90628434d4934b1 4148 1.00 peak \n", - "\n", - " avg_scheduled_service_minutes avg_stop_miles n_scheduled_trips \\\n", - "8026 149.67 5.57 3 \n", - "8031 149.67 5.57 3 \n", - "\n", - " frequency service_date is_express is_ferry is_rail is_coverage \\\n", - "8026 0.12 2025-05-14 1.00 0.00 0.00 0.00 \n", - "8031 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", - "8026 0.00 0.00 0.00 express VCTC GMV Schedule \n", - "8031 0.00 0.00 0.00 express VCTC GMV Schedule \n", - "\n", - " combined_name recent_combined_name recent_route_id \\\n", - "8026 89__80-89 Coastal Express 89 80-89 Coastal Express 4148 \n", - "8031 89__80-89 Coastal Express 89 80-89 Coastal Express 4148 \n", - "\n", - " route_primary_direction \n", - "8026 Eastbound \n", - "8031 Eastbound " - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "preview_one_route_one_date(schedule_route_dir_df)" ] @@ -1841,7 +541,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "id": "79599760-1aea-4309-8dcc-4fb315ecae02", "metadata": { "tags": [] @@ -1853,84 +553,43 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "id": "974f912f-c30b-47e7-9371-5eaced1e8dfa", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['schedule_gtfs_dataset_key', 'route_id', 'direction_id', 'time_period',\n", - " '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', 'service_date'],\n", - " dtype='object')" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "speeds_df.columns" ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "id": "e2c85827-68b8-49a3-bf53-9f5c37229cf6", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "(14, 23)" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "preview_one_route_one_date(speeds_df).shape" ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": null, "id": "a765b202-68c4-465d-bdc6-3e8d20a74a70", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "len(preview_one_route_one_date(speeds_df).drop_duplicates())" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": null, "id": "d8fc38fa-c65a-459b-a4e4-7d28c0b095d5", "metadata": { "tags": [] @@ -1942,33 +601,19 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "id": "51830d06-905a-43a7-b6e5-6402f9b15b23", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['schedule_gtfs_dataset_key', 'name', 'schedule_source_record_id',\n", - " 'base64_url', 'caltrans_district', 'service_date',\n", - " 'portfolio_organization_name'],\n", - " dtype='object')" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "crosswalk_df.columns" ] }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "id": "87aeb8e4-acf6-45c2-b9d7-3b0d7c1cf182", "metadata": { "tags": [] @@ -1981,7 +626,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": null, "id": "21d4d2e2-818a-44a9-a708-948f70a1bb7f", "metadata": { "tags": [] @@ -2003,7 +648,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": null, "id": "c31c795f-f685-4757-8d7c-953394354fbf", "metadata": { "tags": [] @@ -2017,569 +662,24 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": null, "id": "0c0dbdf2-9f5a-40a5-9a3f-c1fe96dc61c2", "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", - "
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
126311770249a5a2e770ca90628434d4934b141481.00all_day622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126321770249a5a2e770ca90628434d4934b141481.00all_day622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126331770249a5a2e770ca90628434d4934b141481.00all_day622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126341770249a5a2e770ca90628434d4934b141481.00all_day622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126351770249a5a2e770ca90628434d4934b141481.00all_day622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126361770249a5a2e770ca90628434d4934b141481.00all_day622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126371770249a5a2e770ca90628434d4934b141481.00all_day622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126661770249a5a2e770ca90628434d4934b141481.00peak622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126671770249a5a2e770ca90628434d4934b141481.00peak622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126681770249a5a2e770ca90628434d4934b141481.00peak622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126691770249a5a2e770ca90628434d4934b141481.00peak622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126701770249a5a2e770ca90628434d4934b141481.00peak622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126711770249a5a2e770ca90628434d4934b141481.00peak622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
126721770249a5a2e770ca90628434d4934b141481.00peak622621974.28449.001858000331.910.000.640.641.001.002.17324.762025-05-14
\n", - "
" - ], - "text/plain": [ - " schedule_gtfs_dataset_key route_id direction_id time_period \\\n", - "12631 1770249a5a2e770ca90628434d4934b1 4148 1.00 all_day \n", - "12632 1770249a5a2e770ca90628434d4934b1 4148 1.00 all_day \n", - "12633 1770249a5a2e770ca90628434d4934b1 4148 1.00 all_day \n", - "12634 1770249a5a2e770ca90628434d4934b1 4148 1.00 all_day \n", - "12635 1770249a5a2e770ca90628434d4934b1 4148 1.00 all_day \n", - "12636 1770249a5a2e770ca90628434d4934b1 4148 1.00 all_day \n", - "12637 1770249a5a2e770ca90628434d4934b1 4148 1.00 all_day \n", - "12666 1770249a5a2e770ca90628434d4934b1 4148 1.00 peak \n", - "12667 1770249a5a2e770ca90628434d4934b1 4148 1.00 peak \n", - "12668 1770249a5a2e770ca90628434d4934b1 4148 1.00 peak \n", - "12669 1770249a5a2e770ca90628434d4934b1 4148 1.00 peak \n", - "12670 1770249a5a2e770ca90628434d4934b1 4148 1.00 peak \n", - "12671 1770249a5a2e770ca90628434d4934b1 4148 1.00 peak \n", - "12672 1770249a5a2e770ca90628434d4934b1 4148 1.00 peak \n", - "\n", - " minutes_atleast1_vp minutes_atleast2_vp total_rt_service_minutes \\\n", - "12631 622 621 974.28 \n", - "12632 622 621 974.28 \n", - "12633 622 621 974.28 \n", - "12634 622 621 974.28 \n", - "12635 622 621 974.28 \n", - "12636 622 621 974.28 \n", - "12637 622 621 974.28 \n", - "12666 622 621 974.28 \n", - "12667 622 621 974.28 \n", - "12668 622 621 974.28 \n", - "12669 622 621 974.28 \n", - "12670 622 621 974.28 \n", - "12671 622 621 974.28 \n", - "12672 622 621 974.28 \n", - "\n", - " total_scheduled_service_minutes total_vp vp_in_shape is_early \\\n", - "12631 449.00 1858 0 0 \n", - "12632 449.00 1858 0 0 \n", - "12633 449.00 1858 0 0 \n", - "12634 449.00 1858 0 0 \n", - "12635 449.00 1858 0 0 \n", - "12636 449.00 1858 0 0 \n", - "12637 449.00 1858 0 0 \n", - "12666 449.00 1858 0 0 \n", - "12667 449.00 1858 0 0 \n", - "12668 449.00 1858 0 0 \n", - "12669 449.00 1858 0 0 \n", - "12670 449.00 1858 0 0 \n", - "12671 449.00 1858 0 0 \n", - "12672 449.00 1858 0 0 \n", - "\n", - " is_ontime is_late n_vp_trips vp_per_minute pct_in_shape \\\n", - "12631 0 3 3 1.91 0.00 \n", - "12632 0 3 3 1.91 0.00 \n", - "12633 0 3 3 1.91 0.00 \n", - "12634 0 3 3 1.91 0.00 \n", - "12635 0 3 3 1.91 0.00 \n", - "12636 0 3 3 1.91 0.00 \n", - "12637 0 3 3 1.91 0.00 \n", - "12666 0 3 3 1.91 0.00 \n", - "12667 0 3 3 1.91 0.00 \n", - "12668 0 3 3 1.91 0.00 \n", - "12669 0 3 3 1.91 0.00 \n", - "12670 0 3 3 1.91 0.00 \n", - "12671 0 3 3 1.91 0.00 \n", - "12672 0 3 3 1.91 0.00 \n", - "\n", - " pct_rt_journey_atleast1_vp pct_rt_journey_atleast2_vp \\\n", - "12631 0.64 0.64 \n", - "12632 0.64 0.64 \n", - "12633 0.64 0.64 \n", - "12634 0.64 0.64 \n", - "12635 0.64 0.64 \n", - "12636 0.64 0.64 \n", - "12637 0.64 0.64 \n", - "12666 0.64 0.64 \n", - "12667 0.64 0.64 \n", - "12668 0.64 0.64 \n", - "12669 0.64 0.64 \n", - "12670 0.64 0.64 \n", - "12671 0.64 0.64 \n", - "12672 0.64 0.64 \n", - "\n", - " pct_sched_journey_atleast1_vp pct_sched_journey_atleast2_vp \\\n", - "12631 1.00 1.00 \n", - "12632 1.00 1.00 \n", - "12633 1.00 1.00 \n", - "12634 1.00 1.00 \n", - "12635 1.00 1.00 \n", - "12636 1.00 1.00 \n", - "12637 1.00 1.00 \n", - "12666 1.00 1.00 \n", - "12667 1.00 1.00 \n", - "12668 1.00 1.00 \n", - "12669 1.00 1.00 \n", - "12670 1.00 1.00 \n", - "12671 1.00 1.00 \n", - "12672 1.00 1.00 \n", - "\n", - " rt_sched_journey_ratio avg_rt_service_minutes service_date \n", - "12631 2.17 324.76 2025-05-14 \n", - "12632 2.17 324.76 2025-05-14 \n", - "12633 2.17 324.76 2025-05-14 \n", - "12634 2.17 324.76 2025-05-14 \n", - "12635 2.17 324.76 2025-05-14 \n", - "12636 2.17 324.76 2025-05-14 \n", - "12637 2.17 324.76 2025-05-14 \n", - "12666 2.17 324.76 2025-05-14 \n", - "12667 2.17 324.76 2025-05-14 \n", - "12668 2.17 324.76 2025-05-14 \n", - "12669 2.17 324.76 2025-05-14 \n", - "12670 2.17 324.76 2025-05-14 \n", - "12671 2.17 324.76 2025-05-14 \n", - "12672 2.17 324.76 2025-05-14 " - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "(preview_one_route_one_date(df_rt_sched))" ] }, { "cell_type": "code", - "execution_count": 47, + "execution_count": null, "id": "206b720b-106a-4a78-9428-837885531632", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "len((preview_one_route_one_date(df_rt_sched)).drop_duplicates())" ] diff --git a/gtfs_digest/_ct_district_data_prep.py b/gtfs_digest/_ct_district_data_prep.py index d2babeef4..60302fec9 100644 --- a/gtfs_digest/_ct_district_data_prep.py +++ b/gtfs_digest/_ct_district_data_prep.py @@ -32,17 +32,17 @@ "operator_feeds": "Operator Feeds", } -def data_wrangling_operator_profile(district:int)->pd.DataFrame: +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 + # 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() + #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", @@ -53,14 +53,14 @@ def data_wrangling_operator_profile(district:int)->pd.DataFrame: 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 = pd.merge( + #operator_df, + #portfolio_organization_names_to_keep, + #left_on=["portfolio_organization_name"], + #right_on=["organization_name"], + #how="inner",) - operator_df2 = operator_df2.loc[operator_df2.caltrans_district == district] + operator_df2 = operator_df.loc[operator_df.caltrans_district == district] # operator_df2 = operator_df2.rename(columns = operator_profile_report_readable_columns) diff --git a/gtfs_digest/deploy_district_yaml.py b/gtfs_digest/deploy_district_yaml.py index 8d90c3b86..79c14fa10 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 70538eb4d..59e0c8b76 100644 --- a/gtfs_digest/district_report.ipynb +++ b/gtfs_digest/district_report.ipynb @@ -13,7 +13,7 @@ "\n", "warnings.filterwarnings(\"ignore\")\n", "import _ct_district_data_prep\n", - "import _ct_district_visuals\n", + "# import _ct_district_visuals\n", "import _report_utils\n", "import calitp_data_analysis.magics\n", "import geopandas as gpd\n", @@ -54,7 +54,7 @@ "outputs": [], "source": [ "# Comment out and leave this cell right below pandas\n", - "district = \"02 - Redding\"" + "# district = '03 - Marysville / Sacramento'" ] }, { @@ -77,133 +77,8 @@ "metadata": {}, "outputs": [], "source": [ - "# %%capture_parameters\n", - "# district, DISTRICT_DIGEST_URL" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6adaf0f6-55b4-47a1-beaf-730e57f01d9f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "import deploy_portfolio_yaml" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a12bd271-03e2-443e-826d-b232536912f2", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "OPERATOR_PROFILE = GTFS_DATA_DICT.digest_tables.operator_profiles" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bae9fe51-cacd-404c-9f55-21caac397b95", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - " portfolio_organization_names_to_keep = (\n", - " deploy_portfolio_yaml.generate_operator_grain_yaml(OPERATOR_PROFILE)\n", - " )[[\"organization_name\"]].drop_duplicates()\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "10e4d7b9-412a-433f-a093-431dde5b83ff", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "portfolio_organization_names_to_keep" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a0af5b4d-a3bc-4a37-8a79-e7597f78c70f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "OPERATOR_PROFILE_REPORT = GTFS_DATA_DICT.digest_tables.operator_profiles_report" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "114d1fd2-5d59-482b-adbf-151a8fe9a548", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "operator_df = pd.read_parquet(\n", - " f\"{RT_SCHED_GCS}{OPERATOR_PROFILE_REPORT}.parquet\",\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d3df06d9-0328-493a-a359-4ef8617f39ea", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "operator_df2 = operator_df.loc[operator_df.caltrans_district == district]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b621c478-e18a-486c-94bc-1fb4b2d2a214", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "operator_df.shape" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "994bc7ca-3979-4508-9a94-a67c7154cd6e", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "operator_df2.portfolio_organization_name.unique()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c8903bbc-1e01-45a3-b498-0c645a6da9e6", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "operator_df.loc[operator_df.caltrans_district == \"03 - Marysville\"]" + "%%capture_parameters\n", + "district, DISTRICT_DIGEST_URL" ] }, { @@ -237,19 +112,7 @@ "transit_route_shs_gdf, transit_route_shs_table = (\n", " _ct_district_data_prep.final_transit_route_shs_outputs(20, str(district_int))\n", ")\n", - "district_gdf = _ct_district_visuals.ct_district(district_int)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0c8a03ae-eab6-483d-bdae-b6433cded751", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "len(operator_df)" + "district_gdf = _ct_district_data_prep.load_ct_district(district_int)" ] }, { diff --git a/portfolio/district_digest/_config.yml b/portfolio/district_digest/_config.yml index 25f527458..6b6b63e10 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 72f134342..fe0b5dadc 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 f86225556..7da189dad 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 a386f3a8b..8940d251b 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 000000000..05942cfab --- /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 000000000..f1c14791c --- /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 000000000..bd07fb80d --- /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 000000000..fb11e8cc9 --- /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 000000000..87fc41f28 --- /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 000000000..6ffe5897f --- /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 b94e81fbc..c66b27b90 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 ac4a5b282..cac404e12 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 000000000..28dbc26fb --- /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 0da1fd381..99e0b8e0b 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 f613d7558..02452d8c5 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 eea5c35df..50bff8b04 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 8709a0bac..cd8d849c2 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 df5470b76..4d1fafbbb 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 d20b0768c..febb0d97d 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 d31e7d56f..58a75f479 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 881623610..0426bfa33 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 d4085f4b0..958af9643 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 3f2b99c6d..42af76564 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 e2f480b43..4a080e3cf 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 a27c22072..34c85a6c7 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 c4ebf652c..cfbd38c1d 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 90e0328e8..2a1bfb0b5 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 46dec053d..51e7d1005 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 ddd8f3e55..5beee2eeb 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 05811be00..e92230009 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 3acaf197a..33ba3cc43 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 8dd8a3e9e..9348c459e 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 8e9fa1a2b..b18a7172d 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 8d605cecc..77b8f2646 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 c0fabfe26..50e1f4a10 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 59ad8c810..af88c3ebd 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 ac712aae6..9b84874db 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 0c25d390f..48ca1333d 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 98f0cc970..87e371ff5 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 060fa6045..3c4c3ae54 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 93cd0302e..7df14e918 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 5976fd43e..793466a83 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 6bbcb45fa..388e518a9 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 34f488ab7..916c0b9fb 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 6770339fe..86466d775 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 74ea23896..ba1a42817 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 3db731eec..52797e20a 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 b5fa794e7..a90422860 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 fe49efc50..8b019f493 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 1815ae3aa..2797a78f6 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 8eafe597f..39eae166a 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 e0d765fcd..d5061b617 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 f69553ed2..6897e8f86 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 c3f02f8eb..3637fa2d0 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 8687aa326..7ea529d8b 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 bba0f9211..18bb7e506 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 9233c70a8..ea0266957 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 0986d1a1b..8dbbf1f3b 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 d9f611422..190bd11cd 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 8a9383508..124c17f3b 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 0080299dd..26f70f502 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 7d2d9bc6c..ef5daa406 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 503fc6406..403478320 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 bfa1e14fe..93634a57e 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 b5ce845d1..e95f78daf 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 03486b90c..fdece9011 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 588a6f239..bf7811b7a 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 965e795ba..218cf4739 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 482f37f5a..eb445ef60 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 1c3f63749..69e960d2c 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 3c895fadb..0b3896090 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 9dadb9347..e556f0de6 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 a62c8709c..5a4005171 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 56e82574a..92578deac 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 de67a279f..b67616cdd 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 f24f5fa3f..29a337ea8 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 ace86c8ee..1c2d6437b 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 6d6cd9c62..8d621ec3f 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 1d0130f37..3c41f3edb 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 3eb88c2ea..27e3df9d4 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 773379ae3..871f0ab5a 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 0694cad09..07e0dddc9 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 1a0d9ef22..bfab06a64 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 c96e97a29..fe5993c72 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 c295fba56..2479fff91 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 7f6a1332e..87bccc081 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 7caf75304..067b47a4b 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 98016b959..7bc1085fe 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 63c699a4a..82d522757 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 63c749a36..0cab19060 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 a3476bd47..a0a01c725 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 66c880ee6..bf47b120b 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 7f3e2dbbd..1633f6ae3 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 5c1d613be..53e20406c 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 596a5e730..b37587caf 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 303fbdcd9..7f271ccd2 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 b1cf3c736..bd8a25acd 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 031298628..97a1dd184 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 2382c61e6..a1d1605c9 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 1b94a1661..d62387c0d 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 9af08bfd3..d92166ec5 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 310a74dd2..aa3a5b3ad 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 43e15b6ad..e65edd935 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 75221b3c9..5c392ba89 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 1dbecd1aa..fbf48634e 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 8a83e257a..267adf28a 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 10eb01072..f50a95880 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 dcc6d25d9..320678d15 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 3b57f1717..37be5338d 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 0eea7b9b1..9c584af1a 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 8e6e15e84..43a15df6b 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 a85036e0e..df1b39d1b 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 20a7ab74e..5b65a76d3 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 bb23b6b02..88164e335 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 aa5d18f21..73216be37 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 3c599cbd1..4f4c81620 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 e173245ca..b98bf7b6d 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 9aff68911..100c3a987 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 e88666c5b..b965edc97 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 65eec10f4..0890befa5 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 a3069ac9f..f1659efff 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 0248bc54f..9ea8cfc97 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 758223a80..b6788d6a0 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 b8993aaa1..9633b8335 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 9d483b5c5..cb3e44e55 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 bf0890971..ec0061317 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 2ab35e992..8486fc192 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 2cad8e717..acbe9276e 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 32b601c5b..8950e20aa 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 be9c5ca4d..a4c1826f4 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 144080255..ab86ea3a9 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 2589dc7cd..e37b9cf3f 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 7bf15c924..04e458e3d 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 1a6f77bd9..d3786b14a 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 169a6f38a..bf554a23b 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