Case Study 1: Datashader and the NYC Taxi Dataset
In 2014, the New York City Taxi and Limousine Commission released a dataset of every yellow-cab trip in New York City from 2009 to 2013. The dataset had 1.1 billion rows. It became, almost immediately, the benchmark for big-data visualization in Python — if your tool could render the NYC taxi dataset, it was ready for real-world big data. The most famous visualization came from Anaconda's datashader team: a single image showing every pickup location as a pixel, with density revealing the city's structure in unprecedented detail. The image was republished, framed, and printed on T-shirts. It also taught a generation of Python practitioners how to think about visualization at scale.
The Situation: A Billion Taxi Trips
In 2013, a student named Chris Whong filed a Freedom of Information Law request with the New York City Taxi and Limousine Commission (TLC). He asked for the full record of taxi trips over the previous few years. The TLC responded — not just to him but by making the data publicly available. The dataset contained over 1.1 billion rows: every yellow-cab trip from January 2009 to December 2013, with pickup time, pickup location, dropoff time, dropoff location, fare, tip, distance, and several other fields.
This was a genuinely massive dataset by 2014 standards. Most data scientists at the time worked with datasets under 10 million rows, and anything above 100 million was considered "big data" requiring specialized infrastructure. The taxi dataset was 10 times larger than that. Loading it into pandas was impossible on most machines; loading it into memory required an expensive workstation; visualizing individual trips was laughable with standard tools.
The dataset was also extraordinarily rich. Each trip had precise latitude/longitude coordinates for both endpoints — accurate to within a few meters in most cases. This meant the data contained implicit maps of the entire city's traffic patterns: where people got in, where they got out, how they moved around, how traffic varied by time of day, which neighborhoods were well-served by taxis and which were not.
Anaconda (then Continuum Analytics) had been developing datashader, a Python library for rendering massive datasets through rasterization. They needed a benchmark dataset to demonstrate the library's capabilities, and the NYC taxi data was perfect: large, publicly available, geographically interesting, and easily recognizable. If they could produce a useful visualization of the taxi data, they could prove datashader's value.
The Visualization
The datashader team produced a series of visualizations from the NYC taxi data. The most famous was a simple one: a single image showing every pickup location as a rasterized pixel, with density encoded through a color ramp. The result was a map of Manhattan and the surrounding boroughs that looked like the city itself — the outlines of streets emerged from the density of pickups, major avenues appeared as bright lines, and the shapes of parks (where taxis could not go) appeared as dark voids.
The visualization had several remarkable features:
It showed every trip. No sampling. No aggregation by zip code. Every one of the billion pickup points was rendered into the image. Datashader's pipeline aggregated the points into a pixel grid (typically 1600×900 or similar), and each pixel's color reflected the total count of trips in that grid cell. The user saw, in one image, every taxi pickup in New York over five years.
It produced the city. The city outline was not drawn on the map. It emerged from the taxi data. Streets appeared because taxis travel on streets; parks appeared as darkness because taxis do not go through them; bridges appeared as bright lines because taxis cross them. The map was literally made of the data, not laid over a separate base map.
It revealed unseen patterns. Looking at the image, you could see patterns that were not visible in any other representation. The Upper East Side was denser than the Upper West Side (maybe because of different demographics?). Midtown was a blazing center of activity. Outer neighborhoods had their own clusters around subway stations. The Brooklyn Bridge was visible as a bright arc connecting Manhattan to the parts of Brooklyn that were taxi-active at the time.
It scaled. A visualization of 1 billion points had never been practical in Python before datashader. The image demonstrated that the library could handle the full scale — not sampled, not summarized, just aggregated into pixels. This was the proof of concept that convinced many data scientists to adopt datashader for their own work.
What the Image Reveals
Looking at the datashader taxi visualization, several patterns become visible that are not obvious from aggregate statistics or from smaller samples:
Neighborhood-level activity. Manhattan south of about 96th Street is nearly uniformly bright — taxis are everywhere. North of 96th, the brightness drops sharply. This reflects the historical fact that Manhattan taxi service was concentrated in the commercial and affluent neighborhoods; Harlem and Inwood had much less service, which was a documented problem in NYC transportation policy at the time.
Major avenues. 5th Avenue, Park Avenue, Madison Avenue, Broadway, and the others stand out as bright north-south lines. Cross-streets are visible but less dominant, reflecting the longer distances between major east-west corridors in Manhattan's grid.
Transportation hubs. Penn Station, Grand Central Terminal, Port Authority, and the ferry terminals are bright spots, reflecting the high volume of taxi activity around commuter connections. The airports (JFK and LaGuardia) appear as bright clusters at the edges of the image.
Tourist destinations. Times Square is the brightest single area in Manhattan. The financial district lights up during the day and fades at night. The tourist/night-life divide in the data matches the actual patterns of the city.
Park shapes. Central Park is a dark rectangle in the middle of Manhattan. Prospect Park appears in Brooklyn. The New York Botanical Garden and the Bronx Zoo appear as dark regions in the Bronx. These are the exact shapes of the parks, derived entirely from the absence of taxi pickups.
Bridges and tunnels. The bridges connecting Manhattan to Brooklyn (Brooklyn Bridge, Manhattan Bridge, Williamsburg Bridge) appear as bright arcs. The Holland Tunnel and Lincoln Tunnel are visible as faint lines at their exit points.
These features make the image more than a visualization — it is a map of New York derived from taxi data. And the map is surprisingly accurate, because taxi activity correlates strongly with economic and social activity in a city like New York.
The Impact
The NYC taxi visualization had impact far beyond its aesthetic appeal. It became a standard example in:
Teaching: courses on big-data visualization routinely use the taxi dataset and the datashader visualization as a case study. Students learn the dataset's properties, the challenges of visualizing it, and the techniques that make it tractable.
Library demos: datashader's documentation, tutorials, and conference talks featured the taxi visualization prominently for years. It was the go-to example for explaining what datashader could do.
Research: urban planning researchers, transportation economists, and data scientists cited the taxi dataset and used visualizations of it as illustrations of urban patterns. Papers on traffic flow, gentrification, and taxi economics all used the dataset and, often, datashader-style visualizations.
Industry adoption: Python data scientists saw the taxi visualization and recognized that the tools existed for their own massive datasets. Uber, Lyft, and other transportation companies used datashader internally for their own trip data. Financial firms used it for order book visualization. Astronomers used it for sky surveys. The tool spread from the taxi example to many other domains.
Public awareness: the visualization was shared widely on social media, reproduced in articles about data visualization, and framed as art prints. For many people, it was the first example of what "big data visualization" could actually look like — not abstract charts but recognizable pictures made from raw data.
Theory Connection: What the Taxi Visualization Teaches
Several lessons come through in the taxi case.
The data contains more than the aggregate. The visualization reveals patterns that would be invisible in summary statistics. "Average taxi pickups per square mile" is a single number; "map of taxi pickups over five years" is a portrait of a city. The difference is not just more information; it is different kinds of information. Big-data visualization lets you see the fine-grained structure that aggregation erases.
Aggregation preserves spatial structure. Datashader aggregates at the pixel level, which is far finer than neighborhood-level aggregation. The spatial detail is what makes the image informative. A visualization that aggregated to zip codes would lose the streets; aggregating to neighborhoods would lose the avenues. The pixel grid preserves structure at roughly the resolution of the display, which matches human perception.
The visualization is the map. The city outline in the image is produced by the data, not drawn separately. This is only possible at scale — with a few thousand points, you cannot see streets; with a billion, you can. The emergence of recognizable structure from pure density is one of the most compelling features of big-data visualization, and it only works when you have enough data to produce the density.
Performance is not the only metric. Datashader's speed is impressive, but the more important thing is that the visualization works. A faster tool that produced a less-informative image would not have had the same impact. Performance is necessary but not sufficient.
Open data matters. The NYC TLC released the data publicly, which allowed anyone to analyze and visualize it. Much of the impact of the dataset — and the visualization — would have been impossible if the data had been proprietary. Open data + open-source tools created the conditions for public benefit.
For practitioners, the lessons are: (1) when you have a large spatial dataset, datashader-style rasterization is often the right approach; (2) the resolution of the aggregation matters enormously for what patterns become visible; (3) the visualization itself can become iconic and influential, extending the impact of the underlying analysis; (4) open data and open tools enable work that proprietary alternatives cannot match.
Discussion Questions
-
On the taxi dataset. The NYC TLC released the data publicly, which enabled the visualization. Should other transportation companies (Uber, Lyft) release similar data? What are the trade-offs?
-
On emergence. The city outline emerges from the data in the visualization — it is not drawn separately. What other datasets would you expect to produce similar emergent patterns when visualized at scale?
-
On privacy. Taxi trip data includes precise pickup and dropoff coordinates. In some cases, these have been used to de-anonymize individual riders. What precautions should visualization practitioners take when working with data of this type?
-
On iconic visualizations. The taxi visualization became iconic. What other data visualizations from the 2010s have had similar iconic status, and what do they have in common?
-
On datashader's design. The datashader pipeline (canvas → aggregate → shade → display) is explicit about its steps. Does this explicitness help practitioners think clearly about big-data visualization, or does it add unnecessary complexity?
-
On your own big data. If you had a billion-row dataset, what would you visualize first? Which patterns would you expect to see?
The NYC taxi visualization is one of the most famous big-data visualizations of the 2010s. It proved that datashader could handle real-world-scale data, and it revealed urban patterns that conventional analyses had missed. When you work with large spatial datasets, the taxi example is both inspiration and template: aggregate at the pixel level, let the structure emerge from the density, and trust that the patterns are in the data if you have enough of it. The tool makes it possible; the data contains the story.