← Back to WorkOperations Analytics

NYC Rideshare Operations: Analysis & Dashboard

This project looks at how rideshare demand shifts across New York City and where supply appears to lag behind it. Using 62.4 million TLC trip records, I analyzed pickup patterns, wait times, and seasonal spikes, then built a dashboard that simulates fleet movement and flags zones where operators may be losing trips and revenue.

RoleData Analyst
StackPython, SQL, DuckDB, pandas, Plotly, Dash
Timeline2026
62.4M
Trip Records Analyzed
39
NYC Zones Tracked
1,500
Drivers Simulated
5
Boroughs Covered

Overview

The Problem

Rideshare demand in New York is not centered only in Manhattan, but wait times are still shortest there. Brooklyn alone accounts for more than a quarter of pickups, yet riders often wait longer. I wanted to see whether the data could show where supply was falling behind demand and where that pattern was most consistent.

The Approach

I started with 62.4 million NYC TLC trip records across January, June, and December 2025, looking at pickup patterns, wait times, and how they changed by zone and hour. Because the data only captures completed trips, I paired the historical analysis with a driver simulation and built a dashboard that highlights likely supply gaps and where fleets might want to reposition drivers.

Key Findings

Brooklyn showed the clearest signs of undersupply

Brooklyn accounts for 27% of pickups but the median wait is 3.4 minutes versus 3.0 in Manhattan. Crown Heights North, East New York, Bushwick South, and Bedford show up as undersupplied across every cut of the data.

New Year's Eve demand was concentrated in residential Brooklyn

Citywide demand at 9 PM on New Year's Eve was 75% above a typical December 9 PM, and almost all of that surge came from residential Brooklyn: Stuyvesant Heights +209%, Bushwick South +183%, Bedford +150%, Crown Heights North +141%. Manhattan event destinations were not the story.

Airports need to be treated differently

JFK and LaGuardia together pulled more than 2 million trips with a 5.8 minute average wait, the longest in the system. They need their own operational playbook, not the same logic used for neighborhood demand.

The highest wait times happened overnight

Citywide median wait peaks at 4.37 minutes around 4 AM, when demand is at its lowest. Wait time is only a proxy for supply, but the timing points to fewer drivers on shift rather than volume pressure, exactly the kind of pattern an ops team would want to monitor.

How I Worked Through It

Source
TLC trip data
62.4M trips
Process
Demand patterns
By zone and hour
Simulate
1,500 drivers
Modeled fleet behavior
Detect
Pressure points
Wait-time signals
Act
Suggestions
Reposition drivers

What I Focused On

1Finding the strongest demand patterns
What I didI broke 62.4 million trip records into repeatable demand patterns by zone, hour, and month so the dashboard could show where ride activity consistently builds and where it falls off.
Why it matteredIt kept the dashboard grounded in observed behavior instead of a generic demand curve.
2Filling in the part the trip data couldn't show
What I didThe TLC data only shows completed trips, not live driver supply. To make the dashboard more useful, I built a driver simulation that estimates how a fleet might spread across the city under different demand conditions.
Why it matteredThat made it possible to move from describing demand to estimating where supply might actually fall short.
3Turning patterns into something operational
What I didI used the relationship between demand, simulated supply, and wait times to flag likely pressure zones, then ranked those areas by potential operational impact inside the dashboard.
Why it matteredIt turned the project into something more useful than a static analysis by pointing toward where action might matter most.

The Dashboard

The analysis ends in a live dashboard. It shows a citywide map of all 39 zones, highlights where supply appears tight, and surfaces repositioning suggestions based on the simulation. There's also a playback mode that lets you step through a full day and watch how those patterns change hour by hour.

Open the Live Dashboard ↗