Projects

Things at CNN

Matt Stiles's CNN profile page showing a list of recent visual stories
View project

CNN visuals and data stories

Data viz, Analysis, Journalism

Things other people use

Things that run themselves

Things to click on

Background

I'm Matt Stiles, a senior data and graphics editor at CNN, where I build software, manage technical staff and guide visual coverage.

I've expanded our team's automation from a few weather pipelines to 100 data pipelines, building or leading their development across business, climate, health and White House coverage. I also conceived and built Bot Index, an internal catalog that helps reporters and editors find existing live charts, maps and trackers on deadline.

Outside the newsroom, I publish open-source Python tools for acquiring and analyzing data, from government GIS records to flight paths and baseball pitches. I also teach at the University of Southern California.

Previously, I worked as a reporter at the Los Angeles Times and The Wall Street Journal, served as data editor at NPR and was the founding news applications editor at The Texas Tribune. Read my résumé, stories and graphics.

Let's talk

Interested in data tools, visual storytelling or leading the teams behind them? Get in touch.

Matt Stiles's CNN profile page showing a list of recent visual stories

CNN visuals and data stories

A running collection of my data-driven stories, graphics and news applications at CNN.

  • Data viz
  • Analysis
  • Journalism
Bot Index dashboard showing searchable cards for automated CNN data pipelines

Internal CNN tool

Bot Index

I conceived and built a searchable internal catalog connecting 100 newsroom data pipelines with 120 live charts and 37 trackers. Its inventory updates automatically each day.

  • Reference
  • Newsroom tools
CNN Visuals Cronbot repository README describing its automated data pipelines

Internal CNN system

CNN Visuals Cronbot

I own a collection of around 100 automated scripts that fetch and process data for CNN Visuals. They run on schedules in GitHub Actions, publish processed data to S3 and send status notifications to Slack.

  • Data extraction
  • Newsroom tools

Built with Python, GitHub Actions, AWS S3, Slack

The ezesri web app, with a field for pasting an Esri REST layer URL

ezesri

pip install ezesri

Pulls data and metadata out of Esri REST endpoints — the format most government GIS portals publish in — and writes it to GeoJSON, Shapefile, GeoPackage or GeoParquet.

  • Data extraction
  • Government data

Built with Python, CLI, GeoPandas

Street View panorama of the Sixth Street Viaduct in Los Angeles

streetview-dl

pip install streetview-dl

Finds and downloads full-resolution Google Street View panoramas from a URL or a pair of coordinates, including historical captures of the same spot.

  • Data extraction

Built with Python, CLI

A pyfr24 plot tracing a single flight path

pyfr24

pip install pyfr24

A Python client and command-line tool for the Flightradar24 API. Start with a flight number, end with a plotted track and a table you can analyze.

  • Data extraction
  • Mapping
  • Aviation

Built with Python, CLI, matplotlib

Map tracing five United Airlines flight paths across the United States

flight-tracer

pip install flight-tracer

Fetches, stores and maps aircraft positions from ADS-B Exchange, built for following one tail number over weeks rather than watching a single flight.

  • Data extraction
  • Mapping
  • Aviation

Built with Python

County-level choropleth map of farmland as a share of county land area, densest across the Plains

chorokit

pip install chorokit

Makes a clean choropleth in a few lines, with defaults for projection, layout and legend chosen so the map is publishable on the first render.

  • Data viz
  • Mapping

Built with Python, matplotlib, GeoPandas

Terminal output from a hangarbay registry lookup, listing the owner, model and airworthiness dates for an LAPD helicopter

hangarbay

pip install hangarbay

A reproducible workflow for the FAA aircraft registry: download the raw files, normalize them into typed tables and find out who owns a tail number.

  • Data extraction
  • Analysis
  • Aviation

Built with Python, CLI

The Chartfeed gallery, with a search box and category filters above a dark grid of chart thumbnails

chartfeed

A responsive gallery of your Datawrapper charts that rebuilds itself every day through GitHub Actions.

  • Data viz

Built with Svelte, GitHub Actions

An LA Street Names Jupyter notebook, with its summary cell above Python import and pandas display settings

notebooks

Hundreds of worked Jupyter notebooks for analysis, charts and maps in Python. This is the reference I actually send people who ask how to start.

  • Reference
  • Analysis

Built with Python, Jupyter, pandas

Terminal output from a utilityman game, showing the play-by-play, a compact scoreboard and scoring plays as they happen

utilityman

pip install utilityman

Follows a live MLB game in your terminal — play-by-play, a compact scoreboard and scoring plays as they happen — without opening a browser.

  • Data extraction
  • Baseball

Built with Python, CLI

The DodgersData.bot dashboard, showing a run differential chart and the season record

DodgersData.bot

An automated pipeline that tracks Dodgers standings and game-by-game performance against every season back to 1958, and publishes the whole thing to a live dashboard each morning.

  • Data viz
  • Analysis
  • Baseball

Built with Python, pandas, D3

A screenshot of the Trump Truth Social archive, showing a post and its engagement metrics.

Now maintained by CNN

Trump Truth Social archive

An auto-updating archive of President Trump's Truth Social posts, built when there was no reliable public record of them.

  • Data extraction
  • Politics

Built with Python

Dot density map of the United States showing thousands of retail locations

Locations

Scrapers that gather store and restaurant locations for major US chains, so you can map a company's footprint without asking the company for its data.

  • Data extraction
  • Mapping
  • Retail

Built with Python, GeoPandas

An LAPD helicopter over the Los Angeles skyline

LAPD choppers

Tracks LAPD helicopter flights and maps patrol intensity by division, reporting district and neighborhood, so you can see which parts of the city get flown over and how often.

  • Mapping
  • Analysis
  • Los Angeles

Built with Python, GeoPandas

North Korean leader Kim Jong-un is seated in a room with other North Korean leaders, according to KCNA.

North Korea trackers

Two pipelines running side by side: one archives hundreds of provocative actions, from missile launches to nuclear tests, and the other scrapes state media headlines as they publish.

  • Data extraction
  • Foreign affairs

Built with Python

A screenshot of an object from the database's contestant table showing the first US winner, Richard Hatch.

survivoR2py

Converts an R-only archive of every Survivor castaway, challenge and vote into CSV and JSON on a daily schedule, so the show's full record is usable without knowing R.

  • Data extraction
  • Television

Built with Python, GitHub Actions

Their names fit register showing people whose names match their work

Their names fit

A reported register of 695 aptronyms: people whose names suit their work unusually well, from sprinter Usain Bolt to golfer Tiger Woods and vodka maker Bert Beveridge.

  • Reference
  • Names
Onion History homepage with options to browse a random headline or a date

Onion History

An automated archive of more than 35,000 headlines from The Onion, including "Supreme Court Votes 5-4 To Take Child Bride."

  • Reference
  • Data extraction
  • Satire
The Daily Viz archive showing an article about Donald Trump's tweets

Retired

The Daily Viz

My retired digital sketchpad for creating and curating charts, maps and other data stories. Posting there helped me move from reporting into data visualization and visuals editing.

  • Data viz
  • Analysis
  • Journalism

Built with Jekyll

Map of central Los Angeles with purple dots marking jacaranda trees

JacarandaMap.com

I've collected more than 1.6 million geocoded street trees across 40-plus Los Angeles-area municipalities from dozens of separate agencies. I put the iconic purple ones on this map.

  • Mapping
  • Los Angeles

Built with Mapbox GL, Python

Calendar heat map of US birth frequency for every day of the year

BirthdayRank.com

An interactive look at which birthdays are common in the United States and which are rare, and why the pattern is stranger than you'd guess.

  • Data viz
  • Demographics

Built with Svelte, D3

The What's My LA home page, with an address search field

WhatsMyLA.com

Type an address and see which Los Angeles you actually live in — neighborhood, council district, school zone and the rest of the overlapping boundaries.

  • Mapping
  • Los Angeles

Built with Svelte, Mapbox GL