NYC Yellow Taxi Trips dataset

A Brightfield dashboard of New York's yellow taxi trips in January 2026. The main panel is a heatmap of trips by hour of pickup and day of the week, under the title "New York's yellow cabs keep two clocks: weekdays build to a 6 pm rush, weekends run late, with three times the weekday trips at 1 am". Below it, trips per day; beside it, a histogram of trip distance, its counts on a log scale, noting that 68% of the trips of 16 to 19 miles begin at an airport, a count by where the trip began, and how complete each trip record is.

Every yellow taxi trip the New York City Taxi and Limousine Commission recorded as picked up in January 2026, read from the TLC's own monthly file. Each trip carries when it began, its hour and day of the week, its distance, whether it began at one of the three airports, and whether its record is complete. The month comes to 3,724,882 trips.

Load it

These commands install arc, Meridian’s open-source Protocol runner, clone the open-analytics repository and run this Protocol, which writes build/trips.parquet in open-analytics/examples/nyc-yellow-taxi.

shell
curl -fsSL https://install.meridian.online/arc | bash
git clone https://github.com/meridian-online/open-analytics
cd open-analytics/examples/nyc-yellow-taxi && arc run

arc runs the Protocol’s SQL on DuckDB 2.x, which its installer puts in place when no DuckDB is on your PATH, saying what to add to PATH; the last step, which describes the Parquet, needs finetype 0.6.54 or later on your PATH.

Columns

NameTypeDescription
pickup_timedatetimeWhen the meter was engaged, in New York local time as the TLC records it.
pickup_datedateThe date of pickup_time.
pickup_hourintegerThe hour of pickup_time, 0 to 23.
weekdaystringThe day of the week of pickup_time, as its ISO number and short name, so '1 Mon' sorts before '7 Sun'.
trip_milesnumberThe trip's distance as the taximeter reported it, in miles, capped at 30 so a few implausible distances do not set a chart's scale.
pickup_placestringJFK Airport, LaGuardia Airport or Newark Airport when the trip began in that taxi zone, and elsewhere otherwise.
trip_recordstringcomplete, or the first of negative fare, zero distance and no passenger count that applies to the record.

Source and licence

Licence

Sources

Meridian hosts none of this data: the Protocol downloads it, from the address its fetch step names, when you run it.

The steps

5 stepsduckdb >=1.2

Every step runs in order. op: steps are typed, versioned operators; sql: steps are DuckDB models.

  1. 01fetch_tripsop: http_fetch@1

    Fetch the TLC's monthly file, yellow_tripdata_2026-01.parquet (about 64 MB), pinned by sha256.

    producesbuild/yellow_tripdata_2026-01.parquet
    with
    url: https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2026-01.parquet
    out: build/yellow_tripdata_2026-01.parquet
    sha256: 8b3933fe6f0d7b6d8826613c0dd724edc680ff7c49e2bd4c7635c05102728637
    headers:
      User-Agent: Meridian Protocol (open-analytics demo; research@meridian.online)
  2. 02raw_tripssql: models/01_raw_trips.sql

    Read January 2026's yellow taxi trips as the TLC publishes them.

    readsbuild/yellow_tripdata_2026-01.parquetproducesraw_trips
    model
    models/01_raw_trips.sql
  3. 03tripssql: models/02_trips.sql

    Keep the trips picked up in January (the file carries a few outside it), add the hour and day of the week, cap the distance at 30 miles, mark pickups at JFK, LaGuardia and Newark, and say whether each record is complete.

    producestrips
    model
    models/02_trips.sql
  4. 04export_tripsop: parquet_export@1

    Write build/trips.parquet, the file this Protocol ends in, on your own disk. ORDER BY ALL makes the bytes reproducible.

    readstripsproducesbuild/trips.parquet
    with
    input: trips
    dest: build/trips.parquet
    compression: zstd
    order_by: ALL
  5. 05describeop: datapackage_describe@1

    Emit datapackage.json from the built Parquet: finetype types every column, and descriptor.overrides.json adds the curated title, licence, sources and per-field prose.

    readsbuild/trips.parquetdescriptor.overrides.jsonproducesdatapackage.json
    with
    parquet: build/trips.parquet
    overrides: descriptor.overrides.json
    out: datapackage.json