diff --git a/gtfs_utils/airtable_junction/create_junction_table.ipynb b/gtfs_utils/airtable_junction/create_junction_table.ipynb
new file mode 100644
index 000000000..39850659b
--- /dev/null
+++ b/gtfs_utils/airtable_junction/create_junction_table.ipynb
@@ -0,0 +1,2231 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Create Junction Tables for Assessments\n",
+ "\n",
+ "The purpose of this notebook is to create junction tables between \"checks\" and the various pieces of information the checks are performed on for the purposes of transit data assessments.\n",
+ "\n",
+ "Assessment checks are performed at the following levels:\n",
+ "\n",
+ "- Transit Provider (i.e. does the provider list GTFS on its website)\n",
+ "- GTFS Dataset (i.e. does it list appropriate contact info in `feed_info.txt`)\n",
+ "- Service representation in a GTFS Dataset (i.e. are the San Francisco cable cars appropriately represented in the SFMTA GTFS Dataset?)\n",
+ "\n",
+ "### Output\n",
+ "In order to make sure that each relevant record is assessed with each relevant \"check\", a cartesian join is made between the records and the checks to form a \"junction table\", which allows us to add attributes about the junction of the record and the check (i.e. a \"grade\" or score).\n",
+ "\n",
+ "This notebook will create three delimited files (sep=\"|\") corresponding to each of these levels, which can be appended to the records in the following Airtable tables:\n",
+ "\n",
+ " - `data_cross.csv` --> GTFS Dataset Check Data \n",
+ " - `services_cross.csv` --> gtfs-dataset Check Data \n",
+ " - `provider_cross.csv` --> Provider Check Data\n",
+ "\n",
+ "### Requirements \n",
+ "\n",
+ "This notebook makes use of the `pyairtable` library to access the California Transit Airtable Database. You will need read access to this database with an API key stored in a .env file in the base directory of this notebook with the following format:\n",
+ "\n",
+ "```sh\n",
+ "AIRTABLE_API_KEY='your_api_key_info`\n",
+ "```\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 82,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "import pandas as pd"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 1 - Read data from AirTable API"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 168,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from dotenv import dotenv_values\n",
+ "from pyairtable import Table\n",
+ "\n",
+ "API_KEY = dotenv_values(\".env\")['AIRTABLE_API_KEY']\n",
+ "BASE_ID = 'appjPsudTDcbLUWM5'\n",
+ "\n",
+ "GTFS_SERVICES_TABLE = 'Assessed GTFS-Services'\n",
+ "ASSESSED_SERVICES_TABLE = 'Assessed Services'\n",
+ "ASSESSED_PROVIDERS_TABLE = 'Assessed Transit Providers'\n",
+ "CHECKS_TABLE = 'gtfs checks'\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 169,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def airtable_to_df(table_id:str,base_id:str=BASE_ID,api_key:str=API_KEY)->pd.DataFrame:\n",
+ " records = Table(api_key, base_id, table_id)\n",
+ " airtable_rows = [] \n",
+ " airtable_index = []\n",
+ " for record in records.all():\n",
+ " airtable_rows.append(record[\"fields\"])\n",
+ " airtable_index.append(record[\"id\"])\n",
+ " return pd.DataFrame(airtable_rows, index=airtable_index)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 236,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "gtfs_services_df = airtable_to_df(GTFS_SERVICES_TABLE)\n",
+ "gtfs_checks_df = airtable_to_df(CHECKS_TABLE)\n",
+ "services_df = airtable_to_df(ASSESSED_SERVICES_TABLE)\n",
+ "gtfs_providers_df = airtable_to_df(ASSESSED_PROVIDERS_TABLE)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 237,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Name
\n",
+ "
Services
\n",
+ "
GTFS Dataset
\n",
+ "
Dataset Type
\n",
+ "
Category
\n",
+ "
Service Type (from Services)
\n",
+ "
Provider
\n",
+ "
Operator
\n",
+ "
Dataset Producers (from GTFS Dataset)
\n",
+ "
Dataset Publisher (from GTFS Dataset)
\n",
+ "
...
\n",
+ "
Flex Status
\n",
+ "
agency_id
\n",
+ "
route_id
\n",
+ "
Fares v2 Status
\n",
+ "
ITP Activities (from GTFS Dataset)
\n",
+ "
ITP Schedule TODO (from GTFS Dataset)
\n",
+ "
network_id
\n",
+ "
Fares Notes (from GTFS Dataset)
\n",
+ "
Schedule Comments (from GTFS Dataset)
\n",
+ "
gtfs check data
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
rec05rHUgCVFqsXgN
\n",
+ "
Tulare Intermodal Express – Tulare Alerts
\n",
+ "
Tulare Intermodal Express
\n",
+ "
Tulare Alerts
\n",
+ "
[GTFS Alerts]
\n",
+ "
primary
\n",
+ "
[fixed-route]
\n",
+ "
Tulare County Regional Transit Agency
\n",
+ "
Tulare County Regional Transit Agency
\n",
+ "
GMV Syncromatics Inc
\n",
+ "
GMV Syncromatics Inc
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
rec09fVK7ls8fl5sp
\n",
+ "
Monterey-Salinas Transit – Monterey Salinas Tr...
\n",
+ "
Monterey-Salinas Transit
\n",
+ "
Monterey Salinas TripUpdates
\n",
+ "
[GTFS TripUpdates]
\n",
+ "
primary
\n",
+ "
[ADA paratransit]
\n",
+ "
Monterey-Salinas Transit
\n",
+ "
Monterey-Salinas Transit
\n",
+ "
Monterey-Salinas Transit
\n",
+ "
NaN
\n",
+ "
...
\n",
+ "
[Needed - Existing GTFS]
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
rec0WcjVurdKkHx7S
\n",
+ "
Healdsburg Shuttle – Bay Area 511 TripUpdates
\n",
+ "
Healdsburg Shuttle
\n",
+ "
Bay Area 511 TripUpdates
\n",
+ "
[GTFS TripUpdates]
\n",
+ "
primary
\n",
+ "
[fixed-route]
\n",
+ "
Sonoma County
\n",
+ "
Sonoma County
\n",
+ "
Metropolitan Transportation Commission
\n",
+ "
Metropolitan Transportation Commission
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
SO
\n",
+ "
SO:67
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
rec0XvgWtnmoUl8Lz
\n",
+ "
Glenn Ride – Glenn Schedule
\n",
+ "
Glenn Ride
\n",
+ "
Glenn Schedule
\n",
+ "
[GTFS Schedule]
\n",
+ "
primary
\n",
+ "
[deviated fixed-route, fixed-route, ADA paratr...
\n",
+ "
Glenn County
\n",
+ "
Paratransit Services Inc.
\n",
+ "
Trillium Inc.
\n",
+ "
Trillium Inc.
\n",
+ "
...
\n",
+ "
[In Progress - Trillium]
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
[Vendor published]
\n",
+ "
[GTFS Into Google, GTFS Schedule Creation]
\n",
+ "
[Train transit provider to own]
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
rec0YWNONFHEO0pUl
\n",
+ "
Valley Express – VCTC Alerts
\n",
+ "
Valley Express
\n",
+ "
VCTC Alerts
\n",
+ "
[GTFS Alerts]
\n",
+ "
primary
\n",
+ "
[fixed-route]
\n",
+ "
Ventura County Transportation Commission
\n",
+ "
Ventura County Transportation Commission
\n",
+ "
GMV Syncromatics Inc
\n",
+ "
GMV Syncromatics Inc
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
149
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
\n",
+ "
\n",
+ "
reczSG6bO6il6QMLZ
\n",
+ "
Healdsburg Shuttle – Bay Area 511 Schedule
\n",
+ "
Healdsburg Shuttle
\n",
+ "
Bay Area 511 Schedule
\n",
+ "
[GTFS Schedule]
\n",
+ "
primary
\n",
+ "
[fixed-route]
\n",
+ "
Sonoma County
\n",
+ "
Sonoma County
\n",
+ "
Metropolitan Transportation Commission
\n",
+ "
Metropolitan Transportation Commission
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
SO
\n",
+ "
SO:67
\n",
+ "
[Vendor published]
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
MTC
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
reczZKKwKsVQuU0dF
\n",
+ "
Placer County Transit – Placer Schedule
\n",
+ "
Placer County Transit
\n",
+ "
Placer Schedule
\n",
+ "
[GTFS Schedule]
\n",
+ "
primary
\n",
+ "
[fixed-route]
\n",
+ "
Placer County
\n",
+ "
Placer County
\n",
+ "
Placer County, Trillium Inc.
\n",
+ "
Trillium Inc.
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
[Vendor published]
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
Published by Trillium
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
reczf9FxlvLopZybb
\n",
+ "
Taft Area Transit – Taft Schedule
\n",
+ "
Taft Area Transit
\n",
+ "
Taft Schedule
\n",
+ "
[GTFS Schedule]
\n",
+ "
primary
\n",
+ "
[fixed-route]
\n",
+ "
City of Taft
\n",
+ "
City of Taft
\n",
+ "
Trillium Inc.
\n",
+ "
Trillium Inc.
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
[Needs GTFS Schedule]
\n",
+ "
[GTFS Schedule Creation]
\n",
+ "
[Get into google, Ask Kern to own]
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
recziP7dvY7apKbPB
\n",
+ "
Kern Transit – Kern Schedule
\n",
+ "
Kern Transit
\n",
+ "
Kern Schedule
\n",
+ "
[GTFS Schedule]
\n",
+ "
primary
\n",
+ "
[fixed-route]
\n",
+ "
Kern County
\n",
+ "
Kern County
\n",
+ "
Kern County, Trillium Inc.
\n",
+ "
Trillium Inc.
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
194
\n",
+ "
NaN
\n",
+ "
[Vendor published]
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
Published by Trillium
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
reczmEIm3KnSr2jF3
\n",
+ "
Monterey-Salinas Transit – Monterey Salinas Ve...
\n",
+ "
Monterey-Salinas Transit
\n",
+ "
Monterey Salinas VehiclePositions
\n",
+ "
[GTFS VehiclePositions]
\n",
+ "
primary
\n",
+ "
[ADA paratransit]
\n",
+ "
Monterey-Salinas Transit
\n",
+ "
Monterey-Salinas Transit
\n",
+ "
Monterey-Salinas Transit
\n",
+ "
NaN
\n",
+ "
...
\n",
+ "
[Needed - Existing GTFS]
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
507 rows × 28 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Name \\\n",
+ "rec05rHUgCVFqsXgN Tulare Intermodal Express – Tulare Alerts \n",
+ "rec09fVK7ls8fl5sp Monterey-Salinas Transit – Monterey Salinas Tr... \n",
+ "rec0WcjVurdKkHx7S Healdsburg Shuttle – Bay Area 511 TripUpdates \n",
+ "rec0XvgWtnmoUl8Lz Glenn Ride – Glenn Schedule \n",
+ "rec0YWNONFHEO0pUl Valley Express – VCTC Alerts \n",
+ "... ... \n",
+ "reczSG6bO6il6QMLZ Healdsburg Shuttle – Bay Area 511 Schedule \n",
+ "reczZKKwKsVQuU0dF Placer County Transit – Placer Schedule \n",
+ "reczf9FxlvLopZybb Taft Area Transit – Taft Schedule \n",
+ "recziP7dvY7apKbPB Kern Transit – Kern Schedule \n",
+ "reczmEIm3KnSr2jF3 Monterey-Salinas Transit – Monterey Salinas Ve... \n",
+ "\n",
+ " Services \\\n",
+ "rec05rHUgCVFqsXgN Tulare Intermodal Express \n",
+ "rec09fVK7ls8fl5sp Monterey-Salinas Transit \n",
+ "rec0WcjVurdKkHx7S Healdsburg Shuttle \n",
+ "rec0XvgWtnmoUl8Lz Glenn Ride \n",
+ "rec0YWNONFHEO0pUl Valley Express \n",
+ "... ... \n",
+ "reczSG6bO6il6QMLZ Healdsburg Shuttle \n",
+ "reczZKKwKsVQuU0dF Placer County Transit \n",
+ "reczf9FxlvLopZybb Taft Area Transit \n",
+ "recziP7dvY7apKbPB Kern Transit \n",
+ "reczmEIm3KnSr2jF3 Monterey-Salinas Transit \n",
+ "\n",
+ " GTFS Dataset Dataset Type \\\n",
+ "rec05rHUgCVFqsXgN Tulare Alerts [GTFS Alerts] \n",
+ "rec09fVK7ls8fl5sp Monterey Salinas TripUpdates [GTFS TripUpdates] \n",
+ "rec0WcjVurdKkHx7S Bay Area 511 TripUpdates [GTFS TripUpdates] \n",
+ "rec0XvgWtnmoUl8Lz Glenn Schedule [GTFS Schedule] \n",
+ "rec0YWNONFHEO0pUl VCTC Alerts [GTFS Alerts] \n",
+ "... ... ... \n",
+ "reczSG6bO6il6QMLZ Bay Area 511 Schedule [GTFS Schedule] \n",
+ "reczZKKwKsVQuU0dF Placer Schedule [GTFS Schedule] \n",
+ "reczf9FxlvLopZybb Taft Schedule [GTFS Schedule] \n",
+ "recziP7dvY7apKbPB Kern Schedule [GTFS Schedule] \n",
+ "reczmEIm3KnSr2jF3 Monterey Salinas VehiclePositions [GTFS VehiclePositions] \n",
+ "\n",
+ " Category Service Type (from Services) \\\n",
+ "rec05rHUgCVFqsXgN primary [fixed-route] \n",
+ "rec09fVK7ls8fl5sp primary [ADA paratransit] \n",
+ "rec0WcjVurdKkHx7S primary [fixed-route] \n",
+ "rec0XvgWtnmoUl8Lz primary [deviated fixed-route, fixed-route, ADA paratr... \n",
+ "rec0YWNONFHEO0pUl primary [fixed-route] \n",
+ "... ... ... \n",
+ "reczSG6bO6il6QMLZ primary [fixed-route] \n",
+ "reczZKKwKsVQuU0dF primary [fixed-route] \n",
+ "reczf9FxlvLopZybb primary [fixed-route] \n",
+ "recziP7dvY7apKbPB primary [fixed-route] \n",
+ "reczmEIm3KnSr2jF3 primary [ADA paratransit] \n",
+ "\n",
+ " Provider \\\n",
+ "rec05rHUgCVFqsXgN Tulare County Regional Transit Agency \n",
+ "rec09fVK7ls8fl5sp Monterey-Salinas Transit \n",
+ "rec0WcjVurdKkHx7S Sonoma County \n",
+ "rec0XvgWtnmoUl8Lz Glenn County \n",
+ "rec0YWNONFHEO0pUl Ventura County Transportation Commission \n",
+ "... ... \n",
+ "reczSG6bO6il6QMLZ Sonoma County \n",
+ "reczZKKwKsVQuU0dF Placer County \n",
+ "reczf9FxlvLopZybb City of Taft \n",
+ "recziP7dvY7apKbPB Kern County \n",
+ "reczmEIm3KnSr2jF3 Monterey-Salinas Transit \n",
+ "\n",
+ " Operator \\\n",
+ "rec05rHUgCVFqsXgN Tulare County Regional Transit Agency \n",
+ "rec09fVK7ls8fl5sp Monterey-Salinas Transit \n",
+ "rec0WcjVurdKkHx7S Sonoma County \n",
+ "rec0XvgWtnmoUl8Lz Paratransit Services Inc. \n",
+ "rec0YWNONFHEO0pUl Ventura County Transportation Commission \n",
+ "... ... \n",
+ "reczSG6bO6il6QMLZ Sonoma County \n",
+ "reczZKKwKsVQuU0dF Placer County \n",
+ "reczf9FxlvLopZybb City of Taft \n",
+ "recziP7dvY7apKbPB Kern County \n",
+ "reczmEIm3KnSr2jF3 Monterey-Salinas Transit \n",
+ "\n",
+ " Dataset Producers (from GTFS Dataset) \\\n",
+ "rec05rHUgCVFqsXgN GMV Syncromatics Inc \n",
+ "rec09fVK7ls8fl5sp Monterey-Salinas Transit \n",
+ "rec0WcjVurdKkHx7S Metropolitan Transportation Commission \n",
+ "rec0XvgWtnmoUl8Lz Trillium Inc. \n",
+ "rec0YWNONFHEO0pUl GMV Syncromatics Inc \n",
+ "... ... \n",
+ "reczSG6bO6il6QMLZ Metropolitan Transportation Commission \n",
+ "reczZKKwKsVQuU0dF Placer County, Trillium Inc. \n",
+ "reczf9FxlvLopZybb Trillium Inc. \n",
+ "recziP7dvY7apKbPB Kern County, Trillium Inc. \n",
+ "reczmEIm3KnSr2jF3 Monterey-Salinas Transit \n",
+ "\n",
+ " Dataset Publisher (from GTFS Dataset) ... \\\n",
+ "rec05rHUgCVFqsXgN GMV Syncromatics Inc ... \n",
+ "rec09fVK7ls8fl5sp NaN ... \n",
+ "rec0WcjVurdKkHx7S Metropolitan Transportation Commission ... \n",
+ "rec0XvgWtnmoUl8Lz Trillium Inc. ... \n",
+ "rec0YWNONFHEO0pUl GMV Syncromatics Inc ... \n",
+ "... ... ... \n",
+ "reczSG6bO6il6QMLZ Metropolitan Transportation Commission ... \n",
+ "reczZKKwKsVQuU0dF Trillium Inc. ... \n",
+ "reczf9FxlvLopZybb Trillium Inc. ... \n",
+ "recziP7dvY7apKbPB Trillium Inc. ... \n",
+ "reczmEIm3KnSr2jF3 NaN ... \n",
+ "\n",
+ " Flex Status agency_id route_id \\\n",
+ "rec05rHUgCVFqsXgN NaN NaN NaN \n",
+ "rec09fVK7ls8fl5sp [Needed - Existing GTFS] NaN NaN \n",
+ "rec0WcjVurdKkHx7S NaN SO SO:67 \n",
+ "rec0XvgWtnmoUl8Lz [In Progress - Trillium] NaN NaN \n",
+ "rec0YWNONFHEO0pUl NaN 149 NaN \n",
+ "... ... ... ... \n",
+ "reczSG6bO6il6QMLZ NaN SO SO:67 \n",
+ "reczZKKwKsVQuU0dF NaN NaN NaN \n",
+ "reczf9FxlvLopZybb NaN NaN NaN \n",
+ "recziP7dvY7apKbPB NaN 194 NaN \n",
+ "reczmEIm3KnSr2jF3 [Needed - Existing GTFS] NaN NaN \n",
+ "\n",
+ " Fares v2 Status \\\n",
+ "rec05rHUgCVFqsXgN NaN \n",
+ "rec09fVK7ls8fl5sp NaN \n",
+ "rec0WcjVurdKkHx7S NaN \n",
+ "rec0XvgWtnmoUl8Lz [Vendor published] \n",
+ "rec0YWNONFHEO0pUl NaN \n",
+ "... ... \n",
+ "reczSG6bO6il6QMLZ [Vendor published] \n",
+ "reczZKKwKsVQuU0dF [Vendor published] \n",
+ "reczf9FxlvLopZybb [Needs GTFS Schedule] \n",
+ "recziP7dvY7apKbPB [Vendor published] \n",
+ "reczmEIm3KnSr2jF3 NaN \n",
+ "\n",
+ " ITP Activities (from GTFS Dataset) \\\n",
+ "rec05rHUgCVFqsXgN NaN \n",
+ "rec09fVK7ls8fl5sp NaN \n",
+ "rec0WcjVurdKkHx7S NaN \n",
+ "rec0XvgWtnmoUl8Lz [GTFS Into Google, GTFS Schedule Creation] \n",
+ "rec0YWNONFHEO0pUl NaN \n",
+ "... ... \n",
+ "reczSG6bO6il6QMLZ NaN \n",
+ "reczZKKwKsVQuU0dF NaN \n",
+ "reczf9FxlvLopZybb [GTFS Schedule Creation] \n",
+ "recziP7dvY7apKbPB NaN \n",
+ "reczmEIm3KnSr2jF3 NaN \n",
+ "\n",
+ " ITP Schedule TODO (from GTFS Dataset) network_id \\\n",
+ "rec05rHUgCVFqsXgN NaN NaN \n",
+ "rec09fVK7ls8fl5sp NaN NaN \n",
+ "rec0WcjVurdKkHx7S NaN NaN \n",
+ "rec0XvgWtnmoUl8Lz [Train transit provider to own] NaN \n",
+ "rec0YWNONFHEO0pUl NaN NaN \n",
+ "... ... ... \n",
+ "reczSG6bO6il6QMLZ NaN NaN \n",
+ "reczZKKwKsVQuU0dF NaN NaN \n",
+ "reczf9FxlvLopZybb [Get into google, Ask Kern to own] NaN \n",
+ "recziP7dvY7apKbPB NaN NaN \n",
+ "reczmEIm3KnSr2jF3 NaN NaN \n",
+ "\n",
+ " Fares Notes (from GTFS Dataset) \\\n",
+ "rec05rHUgCVFqsXgN NaN \n",
+ "rec09fVK7ls8fl5sp NaN \n",
+ "rec0WcjVurdKkHx7S NaN \n",
+ "rec0XvgWtnmoUl8Lz NaN \n",
+ "rec0YWNONFHEO0pUl NaN \n",
+ "... ... \n",
+ "reczSG6bO6il6QMLZ MTC \n",
+ "reczZKKwKsVQuU0dF Published by Trillium \n",
+ "reczf9FxlvLopZybb NaN \n",
+ "recziP7dvY7apKbPB Published by Trillium \n",
+ "reczmEIm3KnSr2jF3 NaN \n",
+ "\n",
+ " Schedule Comments (from GTFS Dataset) gtfs check data \n",
+ "rec05rHUgCVFqsXgN NaN NaN \n",
+ "rec09fVK7ls8fl5sp NaN NaN \n",
+ "rec0WcjVurdKkHx7S NaN NaN \n",
+ "rec0XvgWtnmoUl8Lz NaN NaN \n",
+ "rec0YWNONFHEO0pUl NaN NaN \n",
+ "... ... ... \n",
+ "reczSG6bO6il6QMLZ NaN NaN \n",
+ "reczZKKwKsVQuU0dF NaN NaN \n",
+ "reczf9FxlvLopZybb NaN NaN \n",
+ "recziP7dvY7apKbPB NaN NaN \n",
+ "reczmEIm3KnSr2jF3 NaN NaN \n",
+ "\n",
+ "[507 rows x 28 columns]"
+ ]
+ },
+ "execution_count": 237,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "gtfs_services_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 238,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Check #
\n",
+ "
Description
\n",
+ "
Scope
\n",
+ "
Source
\n",
+ "
Source: medium-term
\n",
+ "
Source: goal
\n",
+ "
Max Score
\n",
+ "
Score Type
\n",
+ "
gtfs-service check data copy
\n",
+ "
Scoring Criteria
\n",
+ "
gtfs check data
\n",
+ "
gtfs-dataset check data copy
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
rec4Ah8sgs8F243XH
\n",
+ "
16
\n",
+ "
TripUpdates Published
\n",
+ "
TripUpdates Dataset
\n",
+ "
[human]
\n",
+ "
[auto]
\n",
+ "
[auto]
\n",
+ "
5.0
\n",
+ "
Nominal
\n",
+ "
[reczJXpgSxkKqzrFg, recAarP7F7LPwtlcn, reczYzu...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
rec5GIXSm4aAcpuZj
\n",
+ "
20
\n",
+ "
Publish to OpenMobilityData
\n",
+ "
TripUpdates Dataset
\n",
+ "
[human]
\n",
+ "
[human]
\n",
+ "
[human]
\n",
+ "
1.0
\n",
+ "
Boolean
\n",
+ "
[recjjCy0uuLGk6RSq, recXNqjW35Dq3omAX, reclalk...
\n",
+ "
There or not.\\n\\n
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
rec5ahg0uEPYRoMEX
\n",
+ "
26
\n",
+ "
Publish to TransitLand
\n",
+ "
VehiclePositions Dataset
\n",
+ "
[human]
\n",
+ "
[human]
\n",
+ "
[human]
\n",
+ "
1.0
\n",
+ "
Boolean
\n",
+ "
[recw95VXxi1w2rmOC, recWbsiIF3zlT2u5d, recuuLV...
\n",
+ "
There or not.\\n\\n
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
rec6i4tZoKfMLAWiK
\n",
+ "
22
\n",
+ "
Reasonable API Key Process
\n",
+ "
TripUpdates Dataset
\n",
+ "
[human]
\n",
+ "
[human]
\n",
+ "
[human]
\n",
+ "
2.0
\n",
+ "
Nominal
\n",
+ "
[rec5b8Xd4UbUciyH7, recNp2w2UUdwfEB6j, recskZe...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
recBWkZKdzqEIDE46
\n",
+ "
13
\n",
+ "
GTFS Grading Scheme Score
\n",
+ "
Service within GTFS Schedule Dataset
\n",
+ "
[human]
\n",
+ "
[gtfs-trained human]
\n",
+ "
[human]
\n",
+ "
3.0
\n",
+ "
Continuous
\n",
+ "
NaN
\n",
+ "
3\\* Grading scheme score / Max grading scheme ...
West Hollywood’s own free shuttle\\n\\nCityline ...
\n",
+ "
Caltrans
\n",
+ "
[public]
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
rec14ZBuXpyw4OLY2
\n",
+ "
Avocado Heights/Bassett/West Valinda Shuttle
\n",
+ "
recHJivXoZGV1KhZe
\n",
+ "
Los Angeles County
\n",
+ "
Los Angeles County
\n",
+ "
True
\n",
+ "
[bus]
\n",
+ "
[fixed-route]
\n",
+ "
The Avocado Heights/Bassett/West Valinda Shutt...
\n",
+ "
Caltrans
\n",
+ "
[public]
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 41 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Name \\\n",
+ "rec0OCKo3fwRLpPIh Watsonville Circulator \n",
+ "rec0ZVZt8PTzF2zuY Topanga Beach Bus \n",
+ "rec0ikYugqTjhLBkg Imperial Valley Transit \n",
+ "rec0n7D4vtGfWZVEc Cityline \n",
+ "rec14ZBuXpyw4OLY2 Avocado Heights/Bassett/West Valinda Shuttle \n",
+ "\n",
+ " service_id \\\n",
+ "rec0OCKo3fwRLpPIh rec6lgJrPslFjSXdk \n",
+ "rec0ZVZt8PTzF2zuY rec00Di9RibzcrxHS \n",
+ "rec0ikYugqTjhLBkg recMR1zH6QMLPSriV \n",
+ "rec0n7D4vtGfWZVEc recaTB1mtROhjUHNR \n",
+ "rec14ZBuXpyw4OLY2 recHJivXoZGV1KhZe \n",
+ "\n",
+ " Provider \\\n",
+ "rec0OCKo3fwRLpPIh Santa Cruz Metropolitan Transit District \n",
+ "rec0ZVZt8PTzF2zuY Los Angeles County \n",
+ "rec0ikYugqTjhLBkg Imperial County Transportation Commission \n",
+ "rec0n7D4vtGfWZVEc City of West Hollywood \n",
+ "rec14ZBuXpyw4OLY2 Los Angeles County \n",
+ "\n",
+ " Operator \\\n",
+ "rec0OCKo3fwRLpPIh Santa Cruz Metropolitan Transit District \n",
+ "rec0ZVZt8PTzF2zuY Los Angeles County \n",
+ "rec0ikYugqTjhLBkg Imperial County Transportation Commission \n",
+ "rec0n7D4vtGfWZVEc City of West Hollywood \n",
+ "rec14ZBuXpyw4OLY2 Los Angeles County \n",
+ "\n",
+ " Currently Operating Mode \\\n",
+ "rec0OCKo3fwRLpPIh True [bus] \n",
+ "rec0ZVZt8PTzF2zuY True [bus] \n",
+ "rec0ikYugqTjhLBkg True [bus] \n",
+ "rec0n7D4vtGfWZVEc True [bus] \n",
+ "rec14ZBuXpyw4OLY2 True [bus] \n",
+ "\n",
+ " Service Type \\\n",
+ "rec0OCKo3fwRLpPIh [fixed-route] \n",
+ "rec0ZVZt8PTzF2zuY [fixed-route] \n",
+ "rec0ikYugqTjhLBkg [fixed-route, deviated fixed-route] \n",
+ "rec0n7D4vtGfWZVEc [fixed-route] \n",
+ "rec14ZBuXpyw4OLY2 [fixed-route] \n",
+ "\n",
+ " Notes \\\n",
+ "rec0OCKo3fwRLpPIh ETRO’s new Watsonville Circulator Route is des... \n",
+ "rec0ZVZt8PTzF2zuY Connects Metro Orange Line to Topanga Beach an... \n",
+ "rec0ikYugqTjhLBkg NaN \n",
+ "rec0n7D4vtGfWZVEc West Hollywood’s own free shuttle\\n\\nCityline ... \n",
+ "rec14ZBuXpyw4OLY2 The Avocado Heights/Bassett/West Valinda Shutt... \n",
+ "\n",
+ " Funding Sources Funding Category ... Service Area Type \\\n",
+ "rec0OCKo3fwRLpPIh Caltrans [public] ... NaN \n",
+ "rec0ZVZt8PTzF2zuY Caltrans [public] ... NaN \n",
+ "rec0ikYugqTjhLBkg Caltrans [public] ... NaN \n",
+ "rec0n7D4vtGfWZVEc Caltrans [public] ... NaN \n",
+ "rec14ZBuXpyw4OLY2 Caltrans [public] ... NaN \n",
+ "\n",
+ " Service Area Buffer (miles) Service Availability Category \\\n",
+ "rec0OCKo3fwRLpPIh NaN NaN \n",
+ "rec0ZVZt8PTzF2zuY NaN NaN \n",
+ "rec0ikYugqTjhLBkg NaN NaN \n",
+ "rec0n7D4vtGfWZVEc NaN NaN \n",
+ "rec14ZBuXpyw4OLY2 NaN NaN \n",
+ "\n",
+ " Paratransit For organization stack components \\\n",
+ "rec0OCKo3fwRLpPIh NaN NaN \n",
+ "rec0ZVZt8PTzF2zuY NaN NaN \n",
+ "rec0ikYugqTjhLBkg NaN NaN \n",
+ "rec0n7D4vtGfWZVEc NaN NaN \n",
+ "rec14ZBuXpyw4OLY2 NaN NaN \n",
+ "\n",
+ " ITP Schedule TODO (from GTFS Dataset) (from GTFS Services Association) \\\n",
+ "rec0OCKo3fwRLpPIh NaN \n",
+ "rec0ZVZt8PTzF2zuY NaN \n",
+ "rec0ikYugqTjhLBkg NaN \n",
+ "rec0n7D4vtGfWZVEc NaN \n",
+ "rec14ZBuXpyw4OLY2 NaN \n",
+ "\n",
+ " ITP Activities (from GTFS Dataset) (from GTFS Services Association) \\\n",
+ "rec0OCKo3fwRLpPIh NaN \n",
+ "rec0ZVZt8PTzF2zuY NaN \n",
+ "rec0ikYugqTjhLBkg NaN \n",
+ "rec0n7D4vtGfWZVEc NaN \n",
+ "rec14ZBuXpyw4OLY2 NaN \n",
+ "\n",
+ " Schedule Comments (from GTFS Dataset) (from GTFS Services Association) \\\n",
+ "rec0OCKo3fwRLpPIh NaN \n",
+ "rec0ZVZt8PTzF2zuY NaN \n",
+ "rec0ikYugqTjhLBkg NaN \n",
+ "rec0n7D4vtGfWZVEc NaN \n",
+ "rec14ZBuXpyw4OLY2 NaN \n",
+ "\n",
+ " Season Start Season End \n",
+ "rec0OCKo3fwRLpPIh NaN NaN \n",
+ "rec0ZVZt8PTzF2zuY NaN NaN \n",
+ "rec0ikYugqTjhLBkg NaN NaN \n",
+ "rec0n7D4vtGfWZVEc NaN NaN \n",
+ "rec14ZBuXpyw4OLY2 NaN NaN \n",
+ "\n",
+ "[5 rows x 41 columns]"
+ ]
+ },
+ "execution_count": 239,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "services_df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 240,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Name
\n",
+ "
Alias'
\n",
+ "
organization_id
\n",
+ "
ITP ID
\n",
+ "
Tracking Cat - og
\n",
+ "
Reporting Cat - og
\n",
+ "
Assist Cat - og
\n",
+ "
Caltrans District
\n",
+ "
MPO/RTPA
\n",
+ "
Planning Authority
\n",
+ "
...
\n",
+ "
Count of Services with Complete Realtime Status
\n",
+ "
At least one GTFS feed for any service (1=yes)
\n",
+ "
At least on complete RT set (1=yes)
\n",
+ "
Complete static GTFS coverage (1=yes)
\n",
+ "
Complete RT coverage (1=yes)
\n",
+ "
provider check data
\n",
+ "
Provider Assessments
\n",
+ "
Details
\n",
+ "
Website
\n",
+ "
Contracts Held
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
rec0ZHctuUYh5wtLS
\n",
+ "
San Luis Obispo Regional Transit Authority
\n",
+ "
[SLORTA]
\n",
+ "
reciakGBN1DP9dK9N
\n",
+ "
289.0
\n",
+ "
Active
\n",
+ "
Core
\n",
+ "
White Glove
\n",
+ "
05 - San Luis Obispo
\n",
+ "
San Luis Obispo Council of Governments
\n",
+ "
San Luis Obispo Council of Governments
\n",
+ "
...
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
[recJpdz8eCeRsUQSj, recK3xMG6XsnQpYwD, recX8ke...
\n",
+ "
[recIUkhYnikNkX12h]
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
rec0dtZWydv7z5afX
\n",
+ "
City of Taft
\n",
+ "
[TAT]
\n",
+ "
recgTxL1xyvgC8e9k
\n",
+ "
330.0
\n",
+ "
Active
\n",
+ "
Core
\n",
+ "
White Glove
\n",
+ "
06 - Fresno
\n",
+ "
Kern Council of Governments
\n",
+ "
Kern Council of Governments
\n",
+ "
...
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
[rec9P4eMWAQ2GaF5A, recYKDCjjLJbzcJTM, recLVPL...
\n",
+ "
[recp38jhkZVctheDK]
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
rec0qKtbrBvE1AyRe
\n",
+ "
City of Cerritos
\n",
+ "
NaN
\n",
+ "
recXYM27Lts8XF98x
\n",
+ "
63.0
\n",
+ "
Active
\n",
+ "
Core
\n",
+ "
White Glove
\n",
+ "
07 - Los Angeles
\n",
+ "
Southern California Association of Governments
\n",
+ "
Southern California Association of Governments
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
[receMU82jZycJkGFe, recwhLFXaVN5DcqQ1, recXbUF...
\n",
+ "
[recJMNAE1xFtv9B60]
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
rec0yf9AiAqnwpaIT
\n",
+ "
City of Delano
\n",
+ "
NaN
\n",
+ "
recROsnN85RlZziSj
\n",
+ "
91.0
\n",
+ "
Active
\n",
+ "
Core
\n",
+ "
White Glove
\n",
+ "
06 - Fresno
\n",
+ "
Kern Council of Governments
\n",
+ "
Kern Council of Governments
\n",
+ "
...
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
[recxPm0wCZJj0jtR0, recyeyK9Brn5UV85M, recHjg7...
\n",
+ "
[rec90UiwBWjFXvdt9]
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
rec1gD38VBhjtMssT
\n",
+ "
Imperial County Transportation Commission
\n",
+ "
NaN
\n",
+ "
rec38PbjPbEy2Tvdu
\n",
+ "
138.0
\n",
+ "
Active
\n",
+ "
Core
\n",
+ "
White Glove
\n",
+ "
11 - San Diego
\n",
+ "
Southern California Association of Governments
\n",
+ "
Southern California Association of Governments
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
[recT2TIZ0r3FHdCwQ, recgcfRSpfLffxTDf, recSF6B...
\n",
+ "
[reczToe4t1ynsYs5T]
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 33 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Name Alias' \\\n",
+ "rec0ZHctuUYh5wtLS San Luis Obispo Regional Transit Authority [SLORTA] \n",
+ "rec0dtZWydv7z5afX City of Taft [TAT] \n",
+ "rec0qKtbrBvE1AyRe City of Cerritos NaN \n",
+ "rec0yf9AiAqnwpaIT City of Delano NaN \n",
+ "rec1gD38VBhjtMssT Imperial County Transportation Commission NaN \n",
+ "\n",
+ " organization_id ITP ID Tracking Cat - og \\\n",
+ "rec0ZHctuUYh5wtLS reciakGBN1DP9dK9N 289.0 Active \n",
+ "rec0dtZWydv7z5afX recgTxL1xyvgC8e9k 330.0 Active \n",
+ "rec0qKtbrBvE1AyRe recXYM27Lts8XF98x 63.0 Active \n",
+ "rec0yf9AiAqnwpaIT recROsnN85RlZziSj 91.0 Active \n",
+ "rec1gD38VBhjtMssT rec38PbjPbEy2Tvdu 138.0 Active \n",
+ "\n",
+ " Reporting Cat - og Assist Cat - og Caltrans District \\\n",
+ "rec0ZHctuUYh5wtLS Core White Glove 05 - San Luis Obispo \n",
+ "rec0dtZWydv7z5afX Core White Glove 06 - Fresno \n",
+ "rec0qKtbrBvE1AyRe Core White Glove 07 - Los Angeles \n",
+ "rec0yf9AiAqnwpaIT Core White Glove 06 - Fresno \n",
+ "rec1gD38VBhjtMssT Core White Glove 11 - San Diego \n",
+ "\n",
+ " MPO/RTPA \\\n",
+ "rec0ZHctuUYh5wtLS San Luis Obispo Council of Governments \n",
+ "rec0dtZWydv7z5afX Kern Council of Governments \n",
+ "rec0qKtbrBvE1AyRe Southern California Association of Governments \n",
+ "rec0yf9AiAqnwpaIT Kern Council of Governments \n",
+ "rec1gD38VBhjtMssT Southern California Association of Governments \n",
+ "\n",
+ " Planning Authority ... \\\n",
+ "rec0ZHctuUYh5wtLS San Luis Obispo Council of Governments ... \n",
+ "rec0dtZWydv7z5afX Kern Council of Governments ... \n",
+ "rec0qKtbrBvE1AyRe Southern California Association of Governments ... \n",
+ "rec0yf9AiAqnwpaIT Kern Council of Governments ... \n",
+ "rec1gD38VBhjtMssT Southern California Association of Governments ... \n",
+ "\n",
+ " Count of Services with Complete Realtime Status \\\n",
+ "rec0ZHctuUYh5wtLS 0 \n",
+ "rec0dtZWydv7z5afX 0 \n",
+ "rec0qKtbrBvE1AyRe 0 \n",
+ "rec0yf9AiAqnwpaIT 0 \n",
+ "rec1gD38VBhjtMssT 0 \n",
+ "\n",
+ " At least one GTFS feed for any service (1=yes) \\\n",
+ "rec0ZHctuUYh5wtLS 1 \n",
+ "rec0dtZWydv7z5afX 1 \n",
+ "rec0qKtbrBvE1AyRe 0 \n",
+ "rec0yf9AiAqnwpaIT 1 \n",
+ "rec1gD38VBhjtMssT 0 \n",
+ "\n",
+ " At least on complete RT set (1=yes) \\\n",
+ "rec0ZHctuUYh5wtLS 0 \n",
+ "rec0dtZWydv7z5afX 0 \n",
+ "rec0qKtbrBvE1AyRe 0 \n",
+ "rec0yf9AiAqnwpaIT 0 \n",
+ "rec1gD38VBhjtMssT 0 \n",
+ "\n",
+ " Complete static GTFS coverage (1=yes) \\\n",
+ "rec0ZHctuUYh5wtLS 0 \n",
+ "rec0dtZWydv7z5afX 1 \n",
+ "rec0qKtbrBvE1AyRe 0 \n",
+ "rec0yf9AiAqnwpaIT 1 \n",
+ "rec1gD38VBhjtMssT 0 \n",
+ "\n",
+ " Complete RT coverage (1=yes) \\\n",
+ "rec0ZHctuUYh5wtLS 0 \n",
+ "rec0dtZWydv7z5afX 0 \n",
+ "rec0qKtbrBvE1AyRe 0 \n",
+ "rec0yf9AiAqnwpaIT 0 \n",
+ "rec1gD38VBhjtMssT 0 \n",
+ "\n",
+ " provider check data \\\n",
+ "rec0ZHctuUYh5wtLS [recJpdz8eCeRsUQSj, recK3xMG6XsnQpYwD, recX8ke... \n",
+ "rec0dtZWydv7z5afX [rec9P4eMWAQ2GaF5A, recYKDCjjLJbzcJTM, recLVPL... \n",
+ "rec0qKtbrBvE1AyRe [receMU82jZycJkGFe, recwhLFXaVN5DcqQ1, recXbUF... \n",
+ "rec0yf9AiAqnwpaIT [recxPm0wCZJj0jtR0, recyeyK9Brn5UV85M, recHjg7... \n",
+ "rec1gD38VBhjtMssT [recT2TIZ0r3FHdCwQ, recgcfRSpfLffxTDf, recSF6B... \n",
+ "\n",
+ " Provider Assessments Details Website Contracts Held \n",
+ "rec0ZHctuUYh5wtLS [recIUkhYnikNkX12h] NaN NaN NaN \n",
+ "rec0dtZWydv7z5afX [recp38jhkZVctheDK] NaN NaN NaN \n",
+ "rec0qKtbrBvE1AyRe [recJMNAE1xFtv9B60] NaN NaN NaN \n",
+ "rec0yf9AiAqnwpaIT [rec90UiwBWjFXvdt9] NaN NaN NaN \n",
+ "rec1gD38VBhjtMssT [reczToe4t1ynsYs5T] NaN NaN NaN \n",
+ "\n",
+ "[5 rows x 33 columns]"
+ ]
+ },
+ "execution_count": 240,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "gtfs_providers_df.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 2 - Create Junction Tables\n",
+ "\n",
+ "Airtable doesn't have a good way of auto-generating a junction table (a table associating records from two other tables) based on two other tables and a set of conditions. \n",
+ "\n",
+ "The following codes createsa \"cartesian product\" (every record to every record) junction table based on exports of two airtable tables and then selecting which association records are relevant (i.e. only checks that apply to GTFS Schedule should be associated with GTFS Schedule).\n",
+ "\n",
+ "The resulting delimeted file can be pasted into a spreadsheet which can then be based into Airtable. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Services"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 241,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "