Skip to main content

Python package for processing GTFS feeds to assemble bus blocks and relevant data

Project description

GTFS Blocks

gtfsblocks is a Python package that pieces together GTFS feed data to assemble individual vehicle blocks and compile relevant data from various tables. The code was originally developed to analyze transit bus electrification, but the functionality can be helpful to other applications as well. The package was predominantly built off of the GTFS processing code from ebusopt.

Some core functions include:

  • Reading static GTFS tables into Pandas DataFrame objects and performing a bit of basic validation that necessary columns are populated while dropping what isn't needed.
  • Parsing the calendar.txt and calendar_dates.txt files to identify the active service_id values on each day of service.
  • Merging together trip-level data from different GTFS tables for easy manipulation and analysis. For example:
    • Adding trip start and end times from stop_times.txt
    • Adding trip start and end locations from shapes.txt
      • Esimating deadhead distances between consecutive trips based on these coordinates
    • Adding trip distances calculated from the lat/lon coordinates in shapes.txt

See this gist for an overview of core functionality as well as the example usage below. Documentation is a work in progress.

Installation

gtfsblocks is installable via pip:

pip install gtfsblocks

Example Usage

It's easy to read in a GTFS feed with gtfsblocks. Just supply the path to the directory where unzipped GTFS files are housed:

from gtfsblocks import Feed
gtfs = Feed.from_dir('/path/to/your/data')

This will load all relevant files into memory as Pandas DataFrames. Future releases may take advantage of partridge for better memory management.

From here, you can access predictably named tables like gtfs.trips_df or gtfs.stop_times_df, or call various methods on Feed to perform some transformations and aggregations for you.

Getting active trips on a particular day

# Get a Pandas Series of the number of trips per day in the scope of these files
trips_per_day = gtfs.get_n_trips_per_day()

# Filter down trips.txt to just those happening on a particular day
test_date = '2/25/25'
day_trips = gtfs.get_trips_from_date(test_date)

Only include blocks serving a specific set of routes

from gtfsblocks import filter_blocks_by_route
routes = ['D Line', 'E Line']
route_trips = filter_blocks_by_route(
    trips=day_trips,
    routes=routes,
    route_method=route_method,
    route_column='route_short_name'
)

Add data from other GTFS tables to trips DataFrame

# Add all trip data columns (e.g. locations and distances)
route_trips = gtfs.add_trip_data(route_trips, test_date)

Estimate deadhead distance between trips

from gtfsblocks import add_deadhead
trips_with_dh = add_deadhead(route_trips)

Plot the trips on an interactive Plotly map

from gtfsblocks import plot_trips_and_terminals
fig = plot_trips_and_terminals(
    trips_df=route_trips,
    shapes_df=gtfs.shapes_df
)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gtfsblocks-0.1.2.tar.gz (16.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gtfsblocks-0.1.2-py3-none-any.whl (16.3 kB view details)

Uploaded Python 3

File details

Details for the file gtfsblocks-0.1.2.tar.gz.

File metadata

  • Download URL: gtfsblocks-0.1.2.tar.gz
  • Upload date:
  • Size: 16.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for gtfsblocks-0.1.2.tar.gz
Algorithm Hash digest
SHA256 f8afc0b4219825ff762a18b751e9d8c2fbea9503db20ae3bb817f6a3b5e62ad7
MD5 a1a6bac37da0f62cf8545f21b4f852e5
BLAKE2b-256 9a77ec93887f8a1a69bb62fd686a764df6750fe53f5f93da86401fcf0bcca0f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for gtfsblocks-0.1.2.tar.gz:

Publisher: python-publish.yml on dan-mccabe/gtfsblocks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gtfsblocks-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: gtfsblocks-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 16.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for gtfsblocks-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e5966b2e23bd3daff2d846cf897b6de62cfdde3fc197572644cdd8a87b9e8197
MD5 8ba5d3a6b39eff3bd6876a1faea334df
BLAKE2b-256 c4e11f5360a7db9908490e00d7771aa7f57fac75d4d1f76dc2faf8b4bc0cf1fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for gtfsblocks-0.1.2-py3-none-any.whl:

Publisher: python-publish.yml on dan-mccabe/gtfsblocks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page