# U.S. airport departure delays: methods and reproduction

Analysis by NM Media / PlaySolitaire. Prepared September 29, 2026.
Study URL: https://playsolitaire.io/research/airport-delays-and-lost-time
Local preparation does not imply this URL has been published.

## Source and period
BTS Reporting Carrier On-Time Performance, August 2025 through July 2026 inclusive. July 2026 was the latest monthly file listed at extraction on September 29, 2026. Original records, not a survey. Domestic flights of reporting carriers; not all airlines or international service.

Official download directory: https://transtats.bts.gov/PREZIP/
Field definitions: https://www.transtats.bts.gov/DL_SelectFields.aspx?QO_fu146_anzr=%5D&gnoyr_VQ=FGJ
Airport names: https://www.transtats.bts.gov/Download_Lookup.asp?Y11x72=Y_NVecbeg_VQ
The lookup is decoded as Windows-1252. Display names follow the BTS lookup, rather than a separately maintained airport-brand list.

## Comparison set
Group records by OriginAirportID. Retain airports with at least 20,000 completed flights with departure-delay data and at most 0.5% missing delay among completed flights. Choose the 50 airports with the most scheduled records, then rank by average positive departure delay. This is a dataset-based volume selection, not an FAA large-hub classification. all-origin-airports.csv includes the broader set with measurable flights for eligibility review.

## Outcomes and denominators
- Scheduled: all flight records.
- Cancelled: Cancelled = 1.
- Diverted: Diverted = 1. Excluded even if the flight ultimately reached its scheduled destination.
- Completed: neither cancelled nor diverted.
- Measurable: completed, with DepDelay present.
- Missing: completed, without DepDelay.
- Average positive delay: sum(max(DepDelay, 0)) / measurable. Includes positive delays below 15 minutes; early flights contribute zero.
- Delay rate: 100 * count(DepDelay >= 15) / measurable.
- Hour delay rate: 100 * count(DepDelay >= 60) / measurable.
- Average delay when late: sum(DepDelay for DepDelay >= 15) / count(DepDelay >= 15).
- Cancellation and diversion rates: outcome count / scheduled * 100.
- Monthly results pool the same fixed set of 50 airports, weighting each flight equally.

The script checks cancellation/diversion exclusivity, count reconciliation, the BTS DepDel15 indicator and DepDelayMinutes field. Airport ranking compares exact fractions of integer sums and counts. Derived JSON metrics retain six decimal places. Values shown on the page are rounded to one decimal. Waffle charts round the cumulative 15- and 60-minute percentages to whole symbols out of 100.

## Reproduce (Python 3.11+, no third-party dependencies)
1. Download the 12 ZIP URLs in source-manifest.json into a directory named raw, preserving filenames. Approximately 360 MB compressed in total.
2. Download the airport lookup above as airport-id-lookup.csv.
3. Compare each ZIP's SHA-256 to source-manifest.json. Revisions may produce different results; do not combine vintages silently.
4. Run: python3 calculate.py raw reproduced --lookup airport-id-lookup.csv
5. Compare reproduced/data.json, airport-comparison.csv and monthly-comparison.csv with the files supplied with the study.

source-manifest.json records URLs, byte sizes, monthly record counts and SHA-256 hashes. data.json includes counts, all chart measures, the selected airport list, monthly records and reporting-carrier codes. Raw ZIP archives are not served with the webpage; obtain them directly from BTS.

## Interpret carefully
The study measures gate departure, not arrival, takeoff or individual waiting. Every flight has equal weight; passenger load is unknown. Cancelled and diverted flights are reported separately, never assigned zero delay. No claims are made about the cause of delay, airport fault, safe connection times, future performance, or effects of games on waiting. Averages can be influenced by rare long delays. Very small differences between ranks should be described as small differences, not decisive advantages.

Source records: BTS. Analysis and original graphics: PlaySolitaire / NM Media. Citation should include the study URL, period and definition of the cited metric. No BTS endorsement is implied.
