From 8d78a704aa4aaeaf68db22871f43dddfe9abfd2a Mon Sep 17 00:00:00 2001 From: amandaha8 Date: Wed, 3 Jul 2024 22:04:08 +0000 Subject: [PATCH] finished first draft of gtfs digest specific datasets --- Makefile | 8 +- gtfs_digest/03_report.ipynb | 668 +------------ gtfs_digest/22_publish_public_data.ipynb | 939 +++++++++++++++++- gtfs_digest/_gtfs_digest_dataset.py | 67 +- gtfs_digest/_portfolio_notes_todo.md | 3 +- gtfs_digest/_section1_utils.py | 25 + gtfs_digest/color_palettes.yml | 2 +- ...lameda-contra-costa-transit-district.ipynb | 4 +- ...itol-corridor-joint-powers-authority.ipynb | 3 - ...ntral-contra-costa-transit-authority.ipynb | 3 - ...ame_city-and-county-of-san-francisco.ipynb | 3 - ..._organization_name_city-of-fairfield.ipynb | 3 - ...organization_name_city-of-menlo-park.ipynb | 3 - ...__organization_name_city-of-petaluma.ipynb | 3 - ..._organization_name_city-of-rio-vista.ipynb | 3 - ...organization_name_city-of-santa-rosa.ipynb | 3 - ...ion_name_city-of-south-san-francisco.ipynb | 3 - ...organization_name_city-of-union-city.ipynb | 3 - ..._organization_name_city-of-vacaville.ipynb | 3 - ...n_name_marin-county-transit-district.ipynb | 3 - ...napa-valley-transportation-authority.ipynb | 3 - ...eninsula-corridor-joint-powers-board.ipynb | 3 - ...nd__organization_name_presidio-trust.ipynb | 3 - ...isco-bay-area-rapid-transit-district.ipynb | 3 - 24 files changed, 1018 insertions(+), 746 deletions(-) delete mode 100644 portfolio/gtfs_digest_testing/district_04-oakland/01__03_report__district_04-oakland__organization_name_capitol-corridor-joint-powers-authority.ipynb delete mode 100644 portfolio/gtfs_digest_testing/district_04-oakland/02__03_report__district_04-oakland__organization_name_central-contra-costa-transit-authority.ipynb delete mode 100644 portfolio/gtfs_digest_testing/district_04-oakland/03__03_report__district_04-oakland__organization_name_city-and-county-of-san-francisco.ipynb delete mode 100644 portfolio/gtfs_digest_testing/district_04-oakland/04__03_report__district_04-oakland__organization_name_city-of-fairfield.ipynb delete mode 100644 portfolio/gtfs_digest_testing/district_04-oakland/05__03_report__district_04-oakland__organization_name_city-of-menlo-park.ipynb delete mode 100644 portfolio/gtfs_digest_testing/district_04-oakland/06__03_report__district_04-oakland__organization_name_city-of-petaluma.ipynb delete mode 100644 portfolio/gtfs_digest_testing/district_04-oakland/07__03_report__district_04-oakland__organization_name_city-of-rio-vista.ipynb delete mode 100644 portfolio/gtfs_digest_testing/district_04-oakland/08__03_report__district_04-oakland__organization_name_city-of-santa-rosa.ipynb delete mode 100644 portfolio/gtfs_digest_testing/district_04-oakland/09__03_report__district_04-oakland__organization_name_city-of-south-san-francisco.ipynb delete mode 100644 portfolio/gtfs_digest_testing/district_04-oakland/10__03_report__district_04-oakland__organization_name_city-of-union-city.ipynb delete mode 100644 portfolio/gtfs_digest_testing/district_04-oakland/11__03_report__district_04-oakland__organization_name_city-of-vacaville.ipynb delete mode 100644 portfolio/gtfs_digest_testing/district_04-oakland/12__03_report__district_04-oakland__organization_name_marin-county-transit-district.ipynb delete mode 100644 portfolio/gtfs_digest_testing/district_04-oakland/13__03_report__district_04-oakland__organization_name_napa-valley-transportation-authority.ipynb delete mode 100644 portfolio/gtfs_digest_testing/district_04-oakland/14__03_report__district_04-oakland__organization_name_peninsula-corridor-joint-powers-board.ipynb delete mode 100644 portfolio/gtfs_digest_testing/district_04-oakland/15__03_report__district_04-oakland__organization_name_presidio-trust.ipynb delete mode 100644 portfolio/gtfs_digest_testing/district_04-oakland/16__03_report__district_04-oakland__organization_name_san-francisco-bay-area-rapid-transit-district.ipynb diff --git a/Makefile b/Makefile index cf32c0a6e..139b3ac88 100644 --- a/Makefile +++ b/Makefile @@ -40,10 +40,16 @@ build_ntd_report: build_gtfs_digest: $(eval export site = gtfs_digest) - #cd data-analyses/rt_segment_speeds && pip install altair_transform && pip install -r requirements.txt && cd ../_shared_utils && make setup_env && pip install -U altair + #cd data-analyses/rt_segment_speeds && pip install -r requirements.txt && cd ../_shared_utils && make setup_env && cd .. #cd gtfs_digest/ && python deploy_portfolio_yaml.py && cd .. make build_portfolio_site +build_gtfs_digest_testing: + $(eval export site = gtfs_digest_testing) + #cd data-analyses/rt_segment_speeds && pip install -r requirements.txt && cd ../_shared_utils && make setup_env && cd .. + cd gtfs_digest && python _gtfs_digest_dataset.py && cd ../portfolio + make build_portfolio_site + add_precommit: pip install pre-commit pre-commit install diff --git a/gtfs_digest/03_report.ipynb b/gtfs_digest/03_report.ipynb index 530605c6c..fe34e8106 100644 --- a/gtfs_digest/03_report.ipynb +++ b/gtfs_digest/03_report.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "936e2c22-24ba-4f20-99d8-846cfe0a4e27", "metadata": {}, "outputs": [], @@ -15,7 +15,6 @@ "\n", "import _section1_utils as section1\n", "import _section2_utils as section2\n", - "import _service_hours as service_hours\n", "import altair as alt\n", "import calitp_data_analysis.magics\n", "import great_tables as gtmost_recent_date\n", @@ -30,7 +29,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "b89867bd-a089-4033-97d7-d6d1ae50b697", "metadata": {}, "outputs": [], @@ -43,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "6bd20d9d-a3af-430e-8c19-c90fb8ef9e62", "metadata": { "tags": [ @@ -53,36 +52,37 @@ "outputs": [], "source": [ "# Comment out and leave this cell right below pandas\n", - "organization_name = \"Marin County Transit District\"" + "# organization_name = \"Marin County Transit District\"" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "d870c492-ef2c-45f6-ab47-8d46eda7f344", "metadata": { "tags": [] }, "outputs": [], "source": [ - "#%%capture_parameters\n", - "#organization_name" + "# Comment this back in when I'm running the portfolio\n", + "%%capture_parameters\n", + "organization_name" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "b8e11fd2-041f-4e1d-a00f-6e000269c1a7", "metadata": {}, "outputs": [], "source": [ "# Load first dataset\n", - "operator_profiles = section1.load_operator_profiles(organization_name)" + "operator_profiles = section1.load_operator_ntd_profile(organization_name)" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "8e840f91-2e1a-4235-bf6b-0c049a569b4a", "metadata": {}, "outputs": [], @@ -94,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "5d7299ad-0446-4a42-9652-a44617e4d2e7", "metadata": {}, "outputs": [], @@ -104,7 +104,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "517702ae-a7ac-4cc4-a2d4-158fdc8d6919", "metadata": {}, "outputs": [], @@ -115,17 +115,17 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "dd8b7a4c-7682-4949-9e9b-990ce6867627", "metadata": {}, "outputs": [], "source": [ - "scheduled_service = service_hours.total_service_hours_all_months(name)" + "scheduled_service = section1.load_operator_service_hours(name)" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "f07ccefc-0d71-4ad0-8435-9e2941aba9b2", "metadata": {}, "outputs": [], @@ -140,30 +140,10 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "67a74771-f5c1-4757-9f79-bc5e87fba09e", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Set drop down menu to be on the upper right\n", "display(\n", @@ -203,7 +183,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "65e5efa4-e731-4429-ae8c-31f90dc4fbf0", "metadata": {}, "outputs": [], @@ -216,7 +196,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "c2bb8f59-af0f-4ab1-9b33-e9306ff5b92f", "metadata": {}, "outputs": [], @@ -231,7 +211,7 @@ " f\"\"\"{organization_name} is headquartered in {operator_profiles.hq_city.values[0]} in the Urbanized Area of {operator_profiles.uza_name.values[0]}.
\n", " This operator provides {service_area} square miles of public transit service, which has a population of {service_pop}.
\n", " This organization is a {operator_profiles.organization_type.values[0]}.
\n", - " Data Source: National Transit Database {most_recent_ntd} Annual Agency Information.\n", + " Data Source: National Transit Database Annual Agency Information.\n", " \"\"\"\n", " )\n", " )\n", @@ -249,24 +229,10 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "41803ddf-26e2-457a-aa58-c87379e755d8", "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "The following data presents an overview of GTFS statistics using data from the most recent date of\n", - " April 2024." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "try:\n", " display(\n", @@ -281,29 +247,10 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "232e2002-d043-43c1-80d2-22c1183c66a1", "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "Marin County Transit District ran 19 unique routes. Below is the breakdown of the routes and routes can belong to one or more categories.
\n", - " Route categories are determined using a approach that looks at GTFS trips data\n", - " alongside National Association of City Transportation Officials (NACTO)'s\n", - " Transit Route Types \n", - " and Frequency and Volume\n", - " guides. Please see the methodology docs for more details on this approach.\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "try:\n", " n_routes = operator_profiles[\"# Routes\"].values[0]\n", @@ -325,88 +272,10 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "c96d1998-9da6-4c28-aec6-c27ffd1edd88", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "
\n", - "" - ], - "text/plain": [ - "alt.Chart(...)" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "try:\n", " route_typology_df = section1.route_typology(operator_profiles)\n", @@ -436,25 +305,10 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "f7f617f8-338d-4ea0-99e7-25c1bfe62e06", "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "Marin County Transit District provided 248 miles of public transit.\n", - " The average length of a route is 12 miles.\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "try:\n", " n_service_miles = int(operator_profiles[\"Operator Service Miles\"].values[0])\n", @@ -475,88 +329,10 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "0b240e52-b3c5-439e-8c34-ede92c1e45cb", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "
\n", - "" - ], - "text/plain": [ - "alt.Chart(...)" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "try:\n", " longest_shortest_df = section1.shortest_longest_route(operator_route_map)\n", @@ -575,26 +351,10 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "daaf9009-6a25-441e-a58d-66b60d04d35c", "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "Marin County Transit District stopped at 550 unique stops, \n", - " totaling to 16,411 arrivals. The average arrivals per stop \n", - " was 29.\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "try:\n", " n_stops = int(operator_profiles[\"# Stops\"].values[0])\n", @@ -619,23 +379,10 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "821bca2d-7fdd-4e81-af9b-c02deabfe837", "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "Marin County Transit District provides public transit in Marin counties." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "try:\n", " counties_df = section1.counties_served(operator_route_map)\n", @@ -658,23 +405,10 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "id": "1c89d07e-34dd-4c70-8ae4-0e427d10a6d7", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "try:\n", " display(\n", @@ -703,88 +437,10 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "fefc07f3-7c31-48d1-ad7c-dbf3c42796d3", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "
\n", - "" - ], - "text/plain": [ - "alt.LayerChart(...)" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "try:\n", " display(section1.create_service_hour_chart(\n", @@ -799,88 +455,10 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "id": "c971a7c1-7ebf-4121-9a39-454acd9efb1f", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "
\n", - "" - ], - "text/plain": [ - "alt.LayerChart(...)" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "try:\n", " display(section1.create_service_hour_chart(\n", @@ -895,88 +473,10 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "id": "44697ac6-7ee6-453a-a04a-0a94da719ccf", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "
\n", - "" - ], - "text/plain": [ - "alt.LayerChart(...)" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "try:\n", " display(section1.create_service_hour_chart(\n", @@ -999,88 +499,10 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "id": "fbbc04e8-bad4-4d76-84c3-6ba9b76a42c0", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "
\n", - "" - ], - "text/plain": [ - "alt.VConcatChart(...)" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "try:\n", " display(section2.filtered_route(sched_vp_df))\n", diff --git a/gtfs_digest/22_publish_public_data.ipynb b/gtfs_digest/22_publish_public_data.ipynb index 10452b8ad..f25fec266 100644 --- a/gtfs_digest/22_publish_public_data.ipynb +++ b/gtfs_digest/22_publish_public_data.ipynb @@ -5,7 +5,7 @@ "id": "700af126-2cc5-4cc2-ad9b-1613c06c8ab1", "metadata": {}, "source": [ - "## Just checking out this file to understand" + "## Adjusting `service_hours` and `operator_profiles` with NTD data to be published on the Public GCS Page " ] }, { @@ -28,102 +28,961 @@ "PUBLIC_GCS = GTFS_DATA_DICT.gcs_paths.PUBLIC_GCS" ] }, + { + "cell_type": "code", + "execution_count": 2, + "id": "77384a52-33ac-4f87-ac31-b263844cef21", + "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": "d44b41d8-cc43-4765-937e-2846f740316a", + "metadata": {}, + "outputs": [], + "source": [ + "import _gtfs_digest_dataset" + ] + }, { "cell_type": "code", "execution_count": 4, - "id": "9980773f-8625-47da-b76c-0d16a21ab7b8", + "id": "4094d4ec-bff0-40f2-8f23-187251bfce1c", "metadata": {}, "outputs": [], "source": [ - "digest_df_keys = [\n", - " \"route_schedule_vp\", \n", - " \"operator_profile_portfolio_view\", \n", - " \"operator_sched_rt\",\n", - " \"scheduled_service_hours\",\n", - " ] " + "service_hours_df = _gtfs_digest_dataset.total_service_hours_all_months()" ] }, { "cell_type": "code", - "execution_count": 2, - "id": "c86755d9-5072-4802-86df-2de1a100fd2d", + "execution_count": 5, + "id": "92d197a6-cd6a-4252-9434-f66c47759fbb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'gs://calitp-publish-data-analysis/'" + "(18022, 6)" ] }, - "execution_count": 2, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "PUBLIC_GCS" + "service_hours_df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c590e34e-47b5-46e6-95fe-ed9a9b6e3eb5", + "metadata": {}, + "outputs": [], + "source": [ + "# service_hours_df.head(2)" ] }, { "cell_type": "code", "execution_count": 7, - "id": "fb5decca-b58f-461e-9a5d-04ff0b10799e", + "id": "5c82fc3c-d02d-4619-b2ab-f5985e75752e", "metadata": {}, "outputs": [], "source": [ - "table_section = GTFS_DATA_DICT[\"digest_tables\"].dir" + "# service_hours_df.name.nunique()" ] }, { "cell_type": "code", "execution_count": 8, - "id": "e553572d-97a5-461a-ab31-5d20ee1ecffb", + "id": "7dda09a2-3fa1-444c-9e22-bd935b19111e", + "metadata": {}, + "outputs": [], + "source": [ + "# service_hours_df.month.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "22c0fa77-52f7-4a31-a944-0961137a58f6", + "metadata": {}, + "outputs": [], + "source": [ + "operator_profiles = _gtfs_digest_dataset.load_operator_profiles()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "bd7c834f-f7de-48d7-8362-a6e4648592cc", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'gs://calitp-analytics-data/data-analyses/rt_vs_schedule/'" + "(260, 26)" ] }, - "execution_count": 8, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "table_section" + "operator_profiles.shape" ] }, { "cell_type": "code", - "execution_count": 9, - "id": "cb5421f9-54dc-47f9-b697-c44439a1b1a3", + "execution_count": 11, + "id": "d01b1b0e-d30c-4783-ad8e-82803deedebe", + "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", + "
schedule_gtfs_dataset_keyoperator_n_routesoperator_n_tripsoperator_n_shapesoperator_n_stopsoperator_n_arrivalsoperator_route_length_milesoperator_arrivals_per_stopn_downtown_local_routesn_local_routesn_coverage_routesn_rapid_routesn_express_routesn_rail_routesnameorganization_source_record_idorganization_nameservice_datecounties_servedservice_area_sq_mileshq_cityuza_nameservice_area_poporganization_typeprimary_uzareporter_type
0ff72e90ec439c37fe3ce0d3273a0073e913910159377185.3423.722081000SLO SchedulerecMM99msxjmc6PPvCity of San Luis Obispo2024-04-17San Luis Obispo22.00San Luis ObispoSan Luis Obispo, CA46997.00County or Local Government Unit or Department of TransportationNoneFull Reporter
1c388c692579412414b6b4bdb91c6561c31501063306620.4848.67301200Laguna Beach Schedulerec6Z3DnERm3OwFzwCity of Laguna Beach2024-04-17Orange9.00Laguna BeachMission Viejo--Lake Forest--Laguna Niguel, CA23190.00County or Local Government Unit or Department of TransportationNoneReduced Reporter
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key operator_n_routes operator_n_trips \\\n", + "0 ff72e90ec439c37fe3ce0d3273a0073e 9 139 \n", + "1 c388c692579412414b6b4bdb91c6561c 3 150 \n", + "\n", + " operator_n_shapes operator_n_stops operator_n_arrivals \\\n", + "0 10 159 3771 \n", + "1 10 63 3066 \n", + "\n", + " operator_route_length_miles operator_arrivals_per_stop \\\n", + "0 85.34 23.72 \n", + "1 20.48 48.67 \n", + "\n", + " n_downtown_local_routes n_local_routes n_coverage_routes n_rapid_routes \\\n", + "0 2 0 8 10 \n", + "1 3 0 1 2 \n", + "\n", + " n_express_routes n_rail_routes name \\\n", + "0 0 0 SLO Schedule \n", + "1 0 0 Laguna Beach Schedule \n", + "\n", + " organization_source_record_id organization_name service_date \\\n", + "0 recMM99msxjmc6PPv City of San Luis Obispo 2024-04-17 \n", + "1 rec6Z3DnERm3OwFzw City of Laguna Beach 2024-04-17 \n", + "\n", + " counties_served service_area_sq_miles hq_city \\\n", + "0 San Luis Obispo 22.00 San Luis Obispo \n", + "1 Orange 9.00 Laguna Beach \n", + "\n", + " uza_name service_area_pop \\\n", + "0 San Luis Obispo, CA 46997.00 \n", + "1 Mission Viejo--Lake Forest--Laguna Niguel, CA 23190.00 \n", + "\n", + " organization_type \\\n", + "0 County or Local Government Unit or Department of Transportation \n", + "1 County or Local Government Unit or Department of Transportation \n", + "\n", + " primary_uza reporter_type \n", + "0 None Full Reporter \n", + "1 None Reduced Reporter " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "operator_profiles.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "5f7e3d38-35f7-4cff-832a-2d8049b20fa7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "260" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "operator_profiles.schedule_gtfs_dataset_key.nunique()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "4a118c37-7b20-46de-aa01-d27af5355df1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "164" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "operator_profiles.name.nunique()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "dbcb3601-9307-4c19-8489-8cd648fd2a6c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Auburn Schedule 4\n", + "Long Beach Schedule 4\n", + "Fresno County Schedule 4\n", + "Monterey Salinas Schedule 3\n", + "Clean Air Express Schedule 3\n", + "Maywood Schedule 3\n", + "SLORTA Schedule 3\n", + "Unitrans Schedule 3\n", + "Humboldt Schedule 3\n", + "OCTA Schedule 3\n", + "Name: name, dtype: int64" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "operator_profiles.name.value_counts().head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "481e0d0d-e9f2-4ed3-bd3c-948b90981cc9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "count 164.00\n", + "mean 1.59\n", + "std 0.75\n", + "min 1.00\n", + "25% 1.00\n", + "50% 1.00\n", + "75% 2.00\n", + "max 4.00\n", + "Name: name, dtype: float64" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "operator_profiles.name.value_counts().describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "0f82d43c-cff5-433d-8212-105f5b1ab8be", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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_keyoperator_n_routesoperator_n_tripsoperator_n_shapesoperator_n_stopsoperator_n_arrivalsoperator_route_length_milesoperator_arrivals_per_stopn_downtown_local_routesn_local_routesn_coverage_routesn_rapid_routesn_express_routesn_rail_routesnameorganization_source_record_idorganization_nameservice_datecounties_servedservice_area_sq_mileshq_cityuza_nameservice_area_poporganization_typeprimary_uzareporter_type
109020467a276c12a9fe4b0a2332e393f2c1813225612.748.00001000Auburn SchedulerecbW86Xrtuw8PhiUCity of Auburn2024-04-17NoneNaNAuburnNoneNaNCounty or Local Government Unit or Department of TransportationNoneRural Reporter
14683a293ce449a611b01f08929a7fcaab01813225612.748.00001000Auburn SchedulerecbW86Xrtuw8PhiUCity of Auburn2024-03-13NaNNaNNaNNaNNaNNaNNaNNaN
1582e70745409b9369778a606bc37c79abc1813225612.748.00001000Auburn SchedulerecbW86Xrtuw8PhiUCity of Auburn2024-02-14NaNNaNNaNNaNNaNNaNNaNNaN
167685b58f9c35b765f19b26ff46afd77051813225612.748.00001000Auburn SchedulerecbW86Xrtuw8PhiUCity of Auburn2023-12-13NaNNaNNaNNaNNaNNaNNaNNaN
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key operator_n_routes operator_n_trips \\\n", + "109 020467a276c12a9fe4b0a2332e393f2c 1 8 \n", + "146 83a293ce449a611b01f08929a7fcaab0 1 8 \n", + "158 2e70745409b9369778a606bc37c79abc 1 8 \n", + "167 685b58f9c35b765f19b26ff46afd7705 1 8 \n", + "\n", + " operator_n_shapes operator_n_stops operator_n_arrivals \\\n", + "109 1 32 256 \n", + "146 1 32 256 \n", + "158 1 32 256 \n", + "167 1 32 256 \n", + "\n", + " operator_route_length_miles operator_arrivals_per_stop \\\n", + "109 12.74 8.00 \n", + "146 12.74 8.00 \n", + "158 12.74 8.00 \n", + "167 12.74 8.00 \n", + "\n", + " n_downtown_local_routes n_local_routes n_coverage_routes \\\n", + "109 0 0 1 \n", + "146 0 0 1 \n", + "158 0 0 1 \n", + "167 0 0 1 \n", + "\n", + " n_rapid_routes n_express_routes n_rail_routes name \\\n", + "109 0 0 0 Auburn Schedule \n", + "146 0 0 0 Auburn Schedule \n", + "158 0 0 0 Auburn Schedule \n", + "167 0 0 0 Auburn Schedule \n", + "\n", + " organization_source_record_id organization_name service_date \\\n", + "109 recbW86Xrtuw8PhiU City of Auburn 2024-04-17 \n", + "146 recbW86Xrtuw8PhiU City of Auburn 2024-03-13 \n", + "158 recbW86Xrtuw8PhiU City of Auburn 2024-02-14 \n", + "167 recbW86Xrtuw8PhiU City of Auburn 2023-12-13 \n", + "\n", + " counties_served service_area_sq_miles hq_city uza_name service_area_pop \\\n", + "109 None NaN Auburn None NaN \n", + "146 NaN NaN NaN NaN NaN \n", + "158 NaN NaN NaN NaN NaN \n", + "167 NaN NaN NaN NaN NaN \n", + "\n", + " organization_type \\\n", + "109 County or Local Government Unit or Department of Transportation \n", + "146 NaN \n", + "158 NaN \n", + "167 NaN \n", + "\n", + " primary_uza reporter_type \n", + "109 None Rural Reporter \n", + "146 NaN NaN \n", + "158 NaN NaN \n", + "167 NaN NaN " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "operator_profiles.loc[operator_profiles.name == \"Auburn Schedule\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "1191d079-60aa-417a-8089-aa279c7b1872", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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_keyoperator_n_routesoperator_n_tripsoperator_n_shapesoperator_n_stopsoperator_n_arrivalsoperator_route_length_milesoperator_arrivals_per_stopn_downtown_local_routesn_local_routesn_coverage_routesn_rapid_routesn_express_routesn_rail_routesnameorganization_source_record_idorganization_nameservice_datecounties_servedservice_area_sq_mileshq_cityuza_nameservice_area_poporganization_typeprimary_uzareporter_type
136f1b35a50955aeb498533c1c6fdafbe44361846110190090799414.6547.7968341100Long Beach Schedulerec00qSzZL8KqiXAoLong Beach Transit2024-04-17Los Angeles110.00Long BeachLos Angeles--Long Beach--Anaheim, CA906752.00Publicly-Owned or Privately Chartered CorporationNoneFull Reporter
189a2c62c774c7e97b6a510ca5c20c5e3c6371860100190590277419.4647.3969341100Long Beach Schedulerec00qSzZL8KqiXAoLong Beach Transit2023-08-15NaNNaNNaNNaNNaNNaNNaNNaN
2174846188981dd245c3dd4d1b4ae572ad7371854104189789794416.3047.3371341100Long Beach Schedulerec00qSzZL8KqiXAoLong Beach Transit2023-06-14NaNNaNNaNNaNNaNNaNNaNNaN
24132230adf5db3a8df91f05947bb1ad658371854104189789794416.3047.3373341100Long Beach Schedulerec00qSzZL8KqiXAoLong Beach Transit2023-03-15NaNNaNNaNNaNNaNNaNNaNNaN
\n", + "
" + ], + "text/plain": [ + " schedule_gtfs_dataset_key operator_n_routes operator_n_trips \\\n", + "136 f1b35a50955aeb498533c1c6fdafbe44 36 1846 \n", + "189 a2c62c774c7e97b6a510ca5c20c5e3c6 37 1860 \n", + "217 4846188981dd245c3dd4d1b4ae572ad7 37 1854 \n", + "241 32230adf5db3a8df91f05947bb1ad658 37 1854 \n", + "\n", + " operator_n_shapes operator_n_stops operator_n_arrivals \\\n", + "136 110 1900 90799 \n", + "189 100 1905 90277 \n", + "217 104 1897 89794 \n", + "241 104 1897 89794 \n", + "\n", + " operator_route_length_miles operator_arrivals_per_stop \\\n", + "136 414.65 47.79 \n", + "189 419.46 47.39 \n", + "217 416.30 47.33 \n", + "241 416.30 47.33 \n", + "\n", + " n_downtown_local_routes n_local_routes n_coverage_routes \\\n", + "136 68 3 4 \n", + "189 69 3 4 \n", + "217 71 3 4 \n", + "241 73 3 4 \n", + "\n", + " n_rapid_routes n_express_routes n_rail_routes name \\\n", + "136 11 0 0 Long Beach Schedule \n", + "189 11 0 0 Long Beach Schedule \n", + "217 11 0 0 Long Beach Schedule \n", + "241 11 0 0 Long Beach Schedule \n", + "\n", + " organization_source_record_id organization_name service_date \\\n", + "136 rec00qSzZL8KqiXAo Long Beach Transit 2024-04-17 \n", + "189 rec00qSzZL8KqiXAo Long Beach Transit 2023-08-15 \n", + "217 rec00qSzZL8KqiXAo Long Beach Transit 2023-06-14 \n", + "241 rec00qSzZL8KqiXAo Long Beach Transit 2023-03-15 \n", + "\n", + " counties_served service_area_sq_miles hq_city \\\n", + "136 Los Angeles 110.00 Long Beach \n", + "189 NaN NaN NaN \n", + "217 NaN NaN NaN \n", + "241 NaN NaN NaN \n", + "\n", + " uza_name service_area_pop \\\n", + "136 Los Angeles--Long Beach--Anaheim, CA 906752.00 \n", + "189 NaN NaN \n", + "217 NaN NaN \n", + "241 NaN NaN \n", + "\n", + " organization_type primary_uza \\\n", + "136 Publicly-Owned or Privately Chartered Corporation None \n", + "189 NaN NaN \n", + "217 NaN NaN \n", + "241 NaN NaN \n", + "\n", + " reporter_type \n", + "136 Full Reporter \n", + "189 NaN \n", + "217 NaN \n", + "241 NaN " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "operator_profiles.loc[operator_profiles.name == \"Long Beach Schedule\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "ec9ab374-223f-4459-9817-902e1a6a792e", "metadata": {}, "outputs": [ { - "ename": "ConfigKeyError", - "evalue": "Missing key gs://calitp-analytics-data/data-analyses/rt_vs_schedule/\n full_key: gs://calitp-analytics-data/data-analyses/rt_vs_schedule/\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[9], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m [GTFS_DATA_DICT[table_section][f] \u001b[38;5;28;01mfor\u001b[39;00m f \u001b[38;5;129;01min\u001b[39;00m digest_df_keys]\n", - "Cell \u001b[0;32mIn[9], line 1\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[0;32m----> 1\u001b[0m [\u001b[43mGTFS_DATA_DICT\u001b[49m\u001b[43m[\u001b[49m\u001b[43mtable_section\u001b[49m\u001b[43m]\u001b[49m[f] \u001b[38;5;28;01mfor\u001b[39;00m f \u001b[38;5;129;01min\u001b[39;00m digest_df_keys]\n", - "File \u001b[0;32m/opt/conda/lib/python3.9/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.9/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;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.9/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.9/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.9/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.9/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;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.9/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;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.9/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 gs://calitp-analytics-data/data-analyses/rt_vs_schedule/\n full_key: gs://calitp-analytics-data/data-analyses/rt_vs_schedule/\n object_type=dict" - ] + "data": { + "text/plain": [ + "array(['2024-04-17T00:00:00.000000000', '2024-03-13T00:00:00.000000000',\n", + " '2024-02-14T00:00:00.000000000', '2024-01-17T00:00:00.000000000',\n", + " '2023-12-13T00:00:00.000000000', '2023-11-15T00:00:00.000000000',\n", + " '2023-10-11T00:00:00.000000000', '2023-09-13T00:00:00.000000000',\n", + " '2023-08-15T00:00:00.000000000', '2023-07-12T00:00:00.000000000',\n", + " '2023-06-14T00:00:00.000000000', '2023-05-17T00:00:00.000000000',\n", + " '2023-04-12T00:00:00.000000000', '2023-03-15T00:00:00.000000000'],\n", + " dtype='datetime64[ns]')" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "[GTFS_DATA_DICT[table_section][f] for f in digest_df_keys]" + "operator_profiles.service_date.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9980773f-8625-47da-b76c-0d16a21ab7b8", + "metadata": {}, + "outputs": [], + "source": [ + "digest_df_keys = [\n", + " \"route_schedule_vp\", \n", + " \"operator_profile_portfolio_view\", \n", + " \"operator_sched_rt\",\n", + " \"scheduled_service_hours\",\n", + " ] " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c86755d9-5072-4802-86df-2de1a100fd2d", + "metadata": {}, + "outputs": [], + "source": [ + "PUBLIC_GCS" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fb5decca-b58f-461e-9a5d-04ff0b10799e", + "metadata": {}, + "outputs": [], + "source": [ + "table_section = GTFS_DATA_DICT[\"digest_tables\"].dir" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e553572d-97a5-461a-ab31-5d20ee1ecffb", + "metadata": {}, + "outputs": [], + "source": [ + "table_section" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cb5421f9-54dc-47f9-b697-c44439a1b1a3", + "metadata": {}, + "outputs": [], + "source": [ + "# [GTFS_DATA_DICT[table_section][f] for f in digest_df_keys]" ] } ], diff --git a/gtfs_digest/_gtfs_digest_dataset.py b/gtfs_digest/_gtfs_digest_dataset.py index d96850269..2af5da1ff 100644 --- a/gtfs_digest/_gtfs_digest_dataset.py +++ b/gtfs_digest/_gtfs_digest_dataset.py @@ -1,12 +1,16 @@ +import datetime import pandas as pd import numpy as np from segment_speed_utils import helpers, time_series_utils from shared_utils import catalog_utils, rt_dates + GTFS_DATA_DICT = catalog_utils.get_catalog("gtfs_analytics_data") from segment_speed_utils.project_vars import (COMPILED_CACHED_VIEWS, RT_SCHED_GCS, SCHED_GCS) -import _report_utils - +""" +Datasets that are relevant to +GTFS Digest Portfolio work only. +""" def concatenate_trips( date_list: list, ) -> pd.DataFrame: @@ -55,7 +59,7 @@ def weekday_or_weekend(row): else: return "Weekday" -def total_service_hours(date_list: list, name: str) -> pd.DataFrame: +def total_service_hours(date_list: list) -> pd.DataFrame: """ Total up service hours by departure hour, month, and day type for an operator. @@ -64,7 +68,7 @@ def total_service_hours(date_list: list, name: str) -> pd.DataFrame: df = concatenate_trips(date_list) # Filter - df = df.loc[df.name == name].reset_index(drop=True) + # df = df.loc[df.name == name].reset_index(drop=True) # Add day type aka Monday, Tuesday, Wednesday... df['day_type'] = df['service_date'].apply(get_day_type) @@ -91,7 +95,7 @@ def total_service_hours(date_list: list, name: str) -> pd.DataFrame: df2 = df2.rename(columns = {'service_hours':'weekend_service_hours'}) return df2 -def total_service_hours_all_months(name: str) -> pd.DataFrame: +def total_service_hours_all_months() -> pd.DataFrame: """ Find service hours for a full week for one operator and for the months we have a full week's worth of data downloaded. @@ -103,19 +107,14 @@ def total_service_hours_all_months(name: str) -> pd.DataFrame: apr_24week = rt_dates.get_week(month="apr2024", exclude_wed=False) # Sum up total service_hours - apr_23df = total_service_hours(apr_23week, name) - oct_23df = total_service_hours(oct_23week, name) - apr_24df = total_service_hours(apr_24week, name) + apr_23df = total_service_hours(apr_23week) + oct_23df = total_service_hours(oct_23week) + apr_24df = total_service_hours(apr_24week) # Combine everything all_df = pd.concat([apr_23df, oct_23df, apr_24df]) + - # Save out to GCS - file = f"{GTFS_DATA_DICT.digest_tables.dir}{GTFS_DATA_DICT.digest_tables.scheduled_service_hours}.parquet" - all_df.to_parquet(file) - - # Rename the columns - all_df.columns = all_df.columns.map(_report_utils.replace_column_names) return all_df def load_operator_profiles()->pd.DataFrame: @@ -142,24 +141,34 @@ def load_operator_profiles()->pd.DataFrame: ntd_df = helpers.import_schedule_gtfs_key_organization_crosswalk(most_recent_date)[ ntd_cols] - if gcs_or_portfolio = "portfolio" - op_profiles_df = pd.read_parquet( - op_profiles_url, - filters=[[("organization_name", "==", organization_name)]]) + op_profiles_df = pd.read_parquet(op_profiles_url) - # Keep only the most recent row - op_profiles_df1 = op_profiles_df.sort_values(by = ['service_date'], ascending = False).head(1) + # Keep only the most recent row + op_profiles_df1 = (op_profiles_df + .sort_values(by = ['service_date'], ascending = False) + .drop_duplicates(subset = ["schedule_gtfs_dataset_key", + "name"]) + ).reset_index(drop = True) - # Try to merge - op_profiles_df1 = pd.merge(op_profiles_df1, ntd_df, on = ["schedule_gtfs_dataset_key"], how = "left") + # Merge + op_profiles_df1 = pd.merge(op_profiles_df1, ntd_df, on = ["schedule_gtfs_dataset_key"], how = "left") + + return op_profiles_df1 + +if __name__ == "__main__": - else: - # Save to GCS - file = f"{GTFS_DATA_DICT.digest_tables.dir}{GTFS_DATA_DICT.digest_tables.operator_profile_portfolio_view}.parquet" - op_profiles_df1.to_parquet(file) + OP_PROFILE_EXPORT = f"{GTFS_DATA_DICT.digest_tables.dir}{GTFS_DATA_DICT.digest_tables.operator_profile_portfolio_view}.parquet" + SERVICE_EXPORT = f"{GTFS_DATA_DICT.digest_tables.dir}{GTFS_DATA_DICT.digest_tables.scheduled_service_hours}.parquet" + start = datetime.datetime.now() + + # Save operator profiles with NTD + operator_profiles = load_operator_profiles() + operator_profiles.to_parquet(OP_PROFILE_EXPORT) - # Rename dataframe - op_profiles_df1.columns = op_profiles_df1.columns.map(_report_utils.replace_column_names) + # Save service hours + service_hours = total_service_hours_all_months() + service_hours.to_parquet(SERVICE_EXPORT) - return op_profiles_df1 \ No newline at end of file + end = datetime.datetime.now() + print(f"GTFS Digest Datasets: {end - start}") diff --git a/gtfs_digest/_portfolio_notes_todo.md b/gtfs_digest/_portfolio_notes_todo.md index 20d0254c1..2f5d8ece2 100644 --- a/gtfs_digest/_portfolio_notes_todo.md +++ b/gtfs_digest/_portfolio_notes_todo.md @@ -16,12 +16,11 @@ ### 7/3/2024 Goals * Switch color palette to colorblind friendly one. - * Switch NTD info to crosswalk. Read in crosswalk file when I load in `gtfs_digest/_section2_utils/operator_profiles`. * Question: Do I need to upload this specific operator_profile view with all the NTD stuff to the public GCS? * Move Monthly Services data to its own file in `gtfs_digest` - * Rerun a subset of operators for the GTFS Digest test site. + ### 7/2/2024 Notes * Cardinal Direction * There's no stipulation that nan values in `direction_id` need to be filled. diff --git a/gtfs_digest/_section1_utils.py b/gtfs_digest/_section1_utils.py index cb1bc5111..67df58c3d 100644 --- a/gtfs_digest/_section1_utils.py +++ b/gtfs_digest/_section1_utils.py @@ -69,6 +69,31 @@ def get_counties(): return my_gdf +def load_operator_ntd_profile(organization_name:str)->pd.DataFrame: + + op_profiles_url = f"{GTFS_DATA_DICT.digest_tables.dir}{GTFS_DATA_DICT.digest_tables.operator_profile_portfolio_view}.parquet" + + op_profiles_df = pd.read_parquet( + op_profiles_url, + filters=[[("organization_name", "==", organization_name)]]) + + op_profiles_df1 = op_profiles_df.sort_values(by = ['service_date'], ascending = False).head(1) + + # Rename dataframe + op_profiles_df1.columns = op_profiles_df1.columns.map(_report_utils.replace_column_names) + return op_profiles_df1 + +def load_operator_service_hours(name:str)->pd.DataFrame: + + url = f"{GTFS_DATA_DICT.digest_tables.dir}{GTFS_DATA_DICT.digest_tables.operator_profile_portfolio_view}.parquet" + + df = pd.read_parquet(url, + filters=[[(("name", "==", name))]]) + + # Rename dataframe + df.columns = df.columns.map(_report_utils.replace_column_names) + return df + """ Data Manipulation Change dataframes from long to wide diff --git a/gtfs_digest/color_palettes.yml b/gtfs_digest/color_palettes.yml index f64e02a7e..7117da169 100644 --- a/gtfs_digest/color_palettes.yml +++ b/gtfs_digest/color_palettes.yml @@ -14,7 +14,7 @@ # This color palette is good for categorizing nominal values. # The colors do not represent "good" or "bad", they merely differentiate the values. -tri_color: ["#ccbb44","#fcb40e","#dd217d"] +tri_color: ["#ccbb44","#5b8efd","#dd217d"] full_color_scale: ["#5b8efd", "#765fec", "#fcb40e", "#fc5c04", "#dd217d", "#ccbb44"] two_colors: ["#dd217d","#fcb40e"] diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/00__03_report__district_04-oakland__organization_name_alameda-contra-costa-transit-district.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/00__03_report__district_04-oakland__organization_name_alameda-contra-costa-transit-district.ipynb index cb5aa0db5..68d493e4f 100644 --- a/portfolio/gtfs_digest_testing/district_04-oakland/00__03_report__district_04-oakland__organization_name_alameda-contra-costa-transit-district.ipynb +++ b/portfolio/gtfs_digest_testing/district_04-oakland/00__03_report__district_04-oakland__organization_name_alameda-contra-costa-transit-district.ipynb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ceb84992b08b3255253f2b21abdfe29f6534c3814efac3f6ceb6efddd9a872d1 -size 44221849 +oid sha256:9834fdaa0cad12f1b72f6591c51193fe7e553c1e3ba5ad9d564101427cf5224c +size 48625521 diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/01__03_report__district_04-oakland__organization_name_capitol-corridor-joint-powers-authority.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/01__03_report__district_04-oakland__organization_name_capitol-corridor-joint-powers-authority.ipynb deleted file mode 100644 index 14d120e68..000000000 --- a/portfolio/gtfs_digest_testing/district_04-oakland/01__03_report__district_04-oakland__organization_name_capitol-corridor-joint-powers-authority.ipynb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:36471c2d67c179636199d6ec796123470a8c78bcab5c4a798f6827712ccf7c65 -size 137164 diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/02__03_report__district_04-oakland__organization_name_central-contra-costa-transit-authority.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/02__03_report__district_04-oakland__organization_name_central-contra-costa-transit-authority.ipynb deleted file mode 100644 index 9faaf71fc..000000000 --- a/portfolio/gtfs_digest_testing/district_04-oakland/02__03_report__district_04-oakland__organization_name_central-contra-costa-transit-authority.ipynb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5728622c0a6ab8e5d4c6c18a4eea9d9ad218fbf3b12e529bd2b1ca948a15f1e3 -size 19181468 diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/03__03_report__district_04-oakland__organization_name_city-and-county-of-san-francisco.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/03__03_report__district_04-oakland__organization_name_city-and-county-of-san-francisco.ipynb deleted file mode 100644 index 7c9dfe820..000000000 --- a/portfolio/gtfs_digest_testing/district_04-oakland/03__03_report__district_04-oakland__organization_name_city-and-county-of-san-francisco.ipynb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:00e6598d5c3bab8bc2289b551f5c29b52766f528b9d6f815bfe479aa8509b7ec -size 25870004 diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/04__03_report__district_04-oakland__organization_name_city-of-fairfield.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/04__03_report__district_04-oakland__organization_name_city-of-fairfield.ipynb deleted file mode 100644 index 37d3545e9..000000000 --- a/portfolio/gtfs_digest_testing/district_04-oakland/04__03_report__district_04-oakland__organization_name_city-of-fairfield.ipynb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0d657db23c23866af5e3a8defe7d079a57951666ad74fe4ff10b7186258ba9d9 -size 2869152 diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/05__03_report__district_04-oakland__organization_name_city-of-menlo-park.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/05__03_report__district_04-oakland__organization_name_city-of-menlo-park.ipynb deleted file mode 100644 index 53749b837..000000000 --- a/portfolio/gtfs_digest_testing/district_04-oakland/05__03_report__district_04-oakland__organization_name_city-of-menlo-park.ipynb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:690f39f2fc2eda7161f2fea66a7a6522b5342299a8b0a5a34d9df7787e13b1d9 -size 520844 diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/06__03_report__district_04-oakland__organization_name_city-of-petaluma.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/06__03_report__district_04-oakland__organization_name_city-of-petaluma.ipynb deleted file mode 100644 index 17ce094fa..000000000 --- a/portfolio/gtfs_digest_testing/district_04-oakland/06__03_report__district_04-oakland__organization_name_city-of-petaluma.ipynb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fe21c721876580cd091174c3a171a520615585a05285877ce5de487bc4679127 -size 2313788 diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/07__03_report__district_04-oakland__organization_name_city-of-rio-vista.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/07__03_report__district_04-oakland__organization_name_city-of-rio-vista.ipynb deleted file mode 100644 index 95ce86883..000000000 --- a/portfolio/gtfs_digest_testing/district_04-oakland/07__03_report__district_04-oakland__organization_name_city-of-rio-vista.ipynb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:15f4e5c92262c7ac28bd65654b2b88e8f4fe0cbd5518c212b2a02e42ec368ecb -size 107689 diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/08__03_report__district_04-oakland__organization_name_city-of-santa-rosa.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/08__03_report__district_04-oakland__organization_name_city-of-santa-rosa.ipynb deleted file mode 100644 index ac79ffa01..000000000 --- a/portfolio/gtfs_digest_testing/district_04-oakland/08__03_report__district_04-oakland__organization_name_city-of-santa-rosa.ipynb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3f565f8f2e6e03176f79c0b3f19315bd0dd929c65e9da31a1bce962fed25a7da -size 3912836 diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/09__03_report__district_04-oakland__organization_name_city-of-south-san-francisco.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/09__03_report__district_04-oakland__organization_name_city-of-south-san-francisco.ipynb deleted file mode 100644 index 2232f4761..000000000 --- a/portfolio/gtfs_digest_testing/district_04-oakland/09__03_report__district_04-oakland__organization_name_city-of-south-san-francisco.ipynb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ca4a89ab2f5da19d3492d2d97e2d104da6fe1665ea0d2440987742c21c665de8 -size 120248 diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/10__03_report__district_04-oakland__organization_name_city-of-union-city.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/10__03_report__district_04-oakland__organization_name_city-of-union-city.ipynb deleted file mode 100644 index ec80a520d..000000000 --- a/portfolio/gtfs_digest_testing/district_04-oakland/10__03_report__district_04-oakland__organization_name_city-of-union-city.ipynb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a8f3cddae62382e9b2f88f077e427c836091c918195bcdfe0f9c0ec50ed36e60 -size 2128835 diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/11__03_report__district_04-oakland__organization_name_city-of-vacaville.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/11__03_report__district_04-oakland__organization_name_city-of-vacaville.ipynb deleted file mode 100644 index 6e5a82963..000000000 --- a/portfolio/gtfs_digest_testing/district_04-oakland/11__03_report__district_04-oakland__organization_name_city-of-vacaville.ipynb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:adacbd767c74db0c9b89912723ff96a6c04a1e130f2fc51fb9a8f38591b623be -size 201993 diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/12__03_report__district_04-oakland__organization_name_marin-county-transit-district.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/12__03_report__district_04-oakland__organization_name_marin-county-transit-district.ipynb deleted file mode 100644 index ad6b8eb85..000000000 --- a/portfolio/gtfs_digest_testing/district_04-oakland/12__03_report__district_04-oakland__organization_name_marin-county-transit-district.ipynb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e2822a5b162939895ca1ee4852925b5641de5781d489dfb9ce48842e2a0e0dd -size 8025699 diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/13__03_report__district_04-oakland__organization_name_napa-valley-transportation-authority.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/13__03_report__district_04-oakland__organization_name_napa-valley-transportation-authority.ipynb deleted file mode 100644 index 5c9bbe8e1..000000000 --- a/portfolio/gtfs_digest_testing/district_04-oakland/13__03_report__district_04-oakland__organization_name_napa-valley-transportation-authority.ipynb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8f3621037fcada4bee2abe695fe5aef93813c19d9480bff4f132848b04eaedd2 -size 2851692 diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/14__03_report__district_04-oakland__organization_name_peninsula-corridor-joint-powers-board.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/14__03_report__district_04-oakland__organization_name_peninsula-corridor-joint-powers-board.ipynb deleted file mode 100644 index 1180d8e70..000000000 --- a/portfolio/gtfs_digest_testing/district_04-oakland/14__03_report__district_04-oakland__organization_name_peninsula-corridor-joint-powers-board.ipynb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:13d2b6583636f49435b4502ef2c53db0a322c4ab8d51f932c25d93e9a95812fa -size 1988691 diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/15__03_report__district_04-oakland__organization_name_presidio-trust.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/15__03_report__district_04-oakland__organization_name_presidio-trust.ipynb deleted file mode 100644 index 4f6a025f8..000000000 --- a/portfolio/gtfs_digest_testing/district_04-oakland/15__03_report__district_04-oakland__organization_name_presidio-trust.ipynb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:023b18227191b8431a30e080c0d5d8c8d1f450660d87cb63eeffce0399bb46a1 -size 648549 diff --git a/portfolio/gtfs_digest_testing/district_04-oakland/16__03_report__district_04-oakland__organization_name_san-francisco-bay-area-rapid-transit-district.ipynb b/portfolio/gtfs_digest_testing/district_04-oakland/16__03_report__district_04-oakland__organization_name_san-francisco-bay-area-rapid-transit-district.ipynb deleted file mode 100644 index 96cc0891c..000000000 --- a/portfolio/gtfs_digest_testing/district_04-oakland/16__03_report__district_04-oakland__organization_name_san-francisco-bay-area-rapid-transit-district.ipynb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:72766d2f5a64a587c2431c918d37f2dc3d1ef543017a4fa73061044caea8175c -size 771406