Term-one CSVs — sources, and what each pair actually does
Ten files in data/, five shapes, two datasets each. Rebuild them with python3 fetch.py — the CSV is the artifact of record for a dive, so it has to be reproducible rather than a mystery file somebody downloaded once.
Every row below carries the four-part source test from ../05-find-your-own.md: publisher · collection date · method · link. A dataset missing any of the four is a rumour with a number in it, and that rule applies to us before it applies to students.
The three publishers
| Publisher | Collection | Method | Link |
|---|---|---|---|
| City of Los Angeles — MyLA311 Service Request Data 2022 | calendar 2022, complete | every service request logged by the city's 311 system: call, app, web or self-reported. Geocoded to the reported address | data.lacity.org/resource/i5ke-k6by |
| USGS — ANSS Comprehensive Catalog | calendar 2024 | seismometer network; each event's location and magnitude are computed from station arrivals, with a stated error | earthquake.usgs.gov/fdsnws/event/1/ |
| NOAA Global Monitoring Laboratory — Mauna Loa annual mean CO2 | 1959–2025 | continuous in-situ air sampling at Mauna Loa Observatory, Hawaii | gml.noaa.gov/ccgg/trends/ |
| US EPA — AirData annual AQI by county | calendar 2024 | daily AQI computed from regulatory monitors, summarised per county. No API key | aqs.epa.gov/aqsweb/airdata/ |
| City of Los Angeles — Street Tree Inventory, 1990s | 1990s survey | field inventory of street planting SITES, 810,931 of them. A site with no tree is recorded, not omitted | data.lacity.org/resource/vt5t-mscf |
| NASA Exoplanet Archive — Planetary Systems Composite Parameters | live | confirmed exoplanets, one row per planet, queried over TAP. No API key | exoplanetarchive.ipac.caltech.edu |
Rung 4 additions, 2026-08-28
absence_ca_counties_air_monitoring.csv (58) · hexbin_la_311_2km.csv (131) · hexbin_la_311_5km.csv (31) · multiples_gistemp_zonal.csv (51) · noise_socal_m4_by_year.csv (30) · void_exoplanet_mass_period.csv (5,981). Adds NASA GISTEMP zonal means; the hex bins are computed in fetch.py. Verified:
- Six of 58 California counties have no air monitor — Napa, Yuba, Lassen, Modoc, Sierra, Alpine — 261,239 people across 11,564 square miles, rendering blank on any AQI choropleth. Napa has more people than seven monitored counties.
- Change the bin, move the cluster. The same 1,500 LA 311 points: at 2 km the busiest hexagon centres on 33.997 N / −118.433 W, at 5 km on 34.051 N / −118.283 W. Seven kilometres and a different neighbourhood, with no datum altered. Neither Flourish nor CODAP has a hex-bin template, so
fetch.pybins it — necessary rather than incidental, since a dive about bin size needs the bin size to be ours. - One band is not warming like the others. 1975–2025 by latitude: Arctic 64N–90N at +0.640 °C/decade, Southern Ocean 64S–44S at +0.014 — forty-six times slower, and one line on any global average.
- A decline that is small numbers. M4+ per year runs 6, 2, 2 into 2022 against a mean of 9.1, with 2017 at zero, then 2024 returns 15. The naive band (~3 to 15) calls 2021–22 significant and is the wrong model: earthquakes cluster, so 1999's 67 is one M7.1 and its family rather than 67 facts. 2017 is written as
0, not omitted — a gap reads as "nobody looked", a zero reads as "we looked". - The archive is empty where Earth lives. Of 5,981 planets with mass and period, 99 (1.66%) are both low-mass and long-period, and zero are sub-Earth mass beyond 100 days. Earth is 1 Earth mass at 365 days. The void is the detection envelope, not a fact about planets.
Two rung-4 dives changed because the data refused. The bank specced 4.5 as a trade-area cuisine absence; the LA 311 test of it found zero empty cells (all 15 districts carry all 12 request types), so there was no absence to teach from and the exoplanet void replaced it. And 4.1 was specced against USDA FARA, whose published file paths both return 404; the California monitoring gap needed no new source and is sharper, the absence being of the instrument rather than of a shop.
Rung 3 additions, 2026-08-28
pair_ca_counties_area_population_aqi.csv (58) · window_global_temperature_annual.csv (146) · window_15_year_trends.csv (132) · spread_la_311_daily_by_month.csv (365) · correlation_co2_temperature_exoplanets.csv (33). Verified for rung-3.md:
- A choropleth spends its ink on land. California's 29 least-populous counties hold 45.7% of the state's land and 4.9% of its people. San Bernardino gets 4.9x the ink of Los Angeles (20,068 sq mi against 4,060) while holding 23% of its population.
- The window decides the answer. Across GISTEMP's 132 fifteen-year windows the trend runs −0.249 to +0.384 °C/decade against a full-record +0.083 — a sign flip, or four and a half times the real figure, every one of them honestly computed from the same file. A DESIGN ASSUMPTION DIED HERE, recorded rather than quietly fixed: this dive was built around the famous 1998–2012 "hiatus", and in current GISTEMP that window is +0.136, ABOVE the full-record trend. Revisions and thirteen further years overtook the folk example. The lever is real; the canonical illustration of it is stale. Students now find their own window, which is better.
- A mean is a deletion. On a bar of monthly means, September 2022 ranks 7th of 12 at 3,620 — unremarkable. Its box plot carries a point at 95 against a monthly max of 5,754: the twenty-two-hour outage from rung 2, invisible on the bar and not because anyone lied.
- A nonsense correlation nearly as strong as a real one. CO2 against global temperature r = +0.937; CO2 against cumulative exoplanet discoveries r = +0.918. A hundredth of a point apart, three real publishers, and one of them is that humanity got better at finding planets while it got better at burning carbon.
Rung 2 additions, 2026-08-28
choropleth_nyc_rat_complaints_by_borough.csv (5) · two_instruments_nyc_rats.csv (5) · line_socal_quakes_by_decade.csv (13) · weekday_nyc_rat_complaints.csv (7) · weekday_socal_quakes.csv (7) · hourly_311_outage_2022_09_24.csv (72). Verified for rung-2.md:
- The earthquake catalogue carries its own control. M3+ per decade runs 5 / 13 / 15 / 751 — a fifty-fold jump into the 1930s, when Caltech's Southern California Seismic Network arrived. M5+ over the same decades runs 3 / 9 / 10 / 10. A magnitude 5 is felt across the basin, so it was counted in 1905 as surely as in 2005: the flat column is the thing that did not change. The 1990s spike (M3+ 3,243) is real seismicity, and M5+ spikes with it, 40 — Landers and Northridge. Two spikes, one instrumental and one geological, separable only by the control.
- The two rat instruments are not independent, and that is the finding. Inspections are dispatched against complaints, so across the five boroughs complaints and inspections correlate at r = 0.907. Inspections per complaint runs 1.4 (Staten Island) to 8.0 (Bronx) — a fact about how the city answers a phone call, not about rats. A proxy cannot be validated by a measurement the proxy caused. The ranking does move: the Bronx is fourth in complaints and third in confirmed rat activity.
- Weekday shapes separate a mechanism from a wobble. Rat complaints fall monotonically Mon 6,832 to Sat 4,019 (1.70x). Earthquakes run 753–995 (1.32x) with no gradient, high on a Wednesday. Similar magnitudes, different shapes — and the Earth has no week. Recorded caveat: the quake bump exceeds a naive independent-events model because earthquakes arrive in aftershock sequences, so the wobble is understated by the usual arithmetic.
Rung 1 additions, 2026-08-27
number_la_aqi_california_counties.csv (52) · picture_la_street_trees_by_species.csv (20) · picture_exoplanets_by_discovery_method.csv (11) · donut_la_311_by_request_type.csv (12) · donut_quakes_by_depth_band.csv (3). Built and verified for rung-1.md:
- LA County is THIRD of 52 California counties at 78 unhealthy-for-sensitive-groups days — behind Riverside's 80 — while Santa Cruz, Siskiyou and Sonoma sit at zero. So "78" alone is unreadable in both directions, which is exactly what "the number" is for.
- The largest row in the tree inventory is
VACANT - OK TO PLANT, 116,720 — an empty planting site, 2.5x the biggest actual species (Crape Myrtle, 45,000). Kept in the file on purpose; whether it belongs on the chart is the dive. - Exoplanet discovery runs 4,688 (Transit) to 1 (Disk Kinematics). At 1 icon = 100 planets, seven of eleven methods round to zero and leave the chart.
- The donut pair carries both failure modes: 311 has three slices at 7.9 / 7.5 / 4.5% that cannot be ranked by eye, and earthquakes are 90.3% shallow with deep rendering as 0.0% — a real category the shape draws as nothing.
Query bounds, so the numbers are reproducible: earthquakes are Southern California (32.5–35.5 N, 120–116 W), calendar 2024, M1.5 and above — 2,508 events.
The five pairs, verified
Each claim below was measured against the committed files, not assumed.
1. the table — every value and no shape
table_la_311_sample.csv (40 rows) · table_quakes_full.csv (2,508 rows)
Forty rows of 311 feel legible. Twenty-five hundred earthquakes do not. The table fails at a size you can feel, which is GAISE II's own reason for teaching graphs at all.
2. the bar — a ranking of places, and a ranking of sizes
bar_la_311_by_council_district.csv (15) · bar_quakes_by_magnitude_band.csv (5)
311 by district runs 65,952 to 108,379 — a 1.6x spread across fifteen bars. Earthquakes by band run 1,684 / 721 / 88 / 14 / 1. The same shape, and one of them is almost flat while the other falls off a cliff.
A trap that is ours, not the Earth's: the M1 bar is short because the query starts at M1.5, so that band is half-missing. Somebody's filter is visible in the chart. Worth handing to students rather than hiding — it is the window lever, in their own data.
3. the line — one noisy series, one famously smooth one
line_la_311_by_month.csv (12) · line_co2_mauna_loa_annual.csv (67)
Measured mean step, as a share of level: 311 moves 8.78% month to month. CO2 moves 0.47% year to year — about nineteen times smoother. And CO2 rises in all 67 years, with no exceptions. Same shape; only one of them lets you see a trend by eye.
4. the histogram — two distributions that are not the same species
hist_la_311_per_day.csv (365) · hist_quake_magnitudes.csv (2,508)
They skew in opposite directions, which is better than the pair was designed for:
| median | mean | shape | |
|---|---|---|---|
| 311 per day | 3,853 | 3,638 | left-skewed — a tail of unusually quiet days |
| quake magnitude | 1.79 | 1.95 | right-skewed — a tail of unusually large events |
And the 311 file's minimum is 95 requests in a day, against an average of 3,638 — a 97% drop. The question the Full Cycle protocol asks of it is is that a quiet day in Los Angeles, or a day the system was down?
Answered, 2026-08-27, and the answer is better than the question. See below.
The quake side carries a real law: counts per whole magnitude fall 1,684 → 721 → 88 → 14 → 1, ratios of roughly 8x, 6x and 14x. That is Gutenberg-Richter — about ten times fewer earthquakes for each step up in magnitude — visible in a file the students pulled.
5. the dot density map — uncertainty stated, and uncertainty silent
dots_la_311_points.csv (1,500) · dots_quake_epicentres.csv (2,508)
CORRECTED against the data. The pairing document originally claimed the 311 dots are placed randomly within a region and the epicentres are real locations. Measurement refuted it: 311 points are 92% unique coordinates, geocoded to real reported addresses. Both datasets carry real positions.
The true distinction is better:
- Every USGS event states its own position error.
horizontal_error_km, median 0.15 km. The file tells you how wrong it might be. - The 311 file has no error column anywhere — and it has error: the address is where somebody said the bulky item was, and 99 coordinates in this sample carry more than one request, one of them seven.
One dataset states its uncertainty. The other is silent — and silence is not the same as being right.
That is a sharper lesson than the one it replaces, and it was only available because the claim got checked against the file.
The 95-request day — solved, and it is the best thing in the bank
Saturday 2022-09-24. It is not a quiet day. It is an outage, and the hours prove it.
A quiet Saturday has a normal daily shape at lower volume. This day has a hard edge:
`` 2022-09-23 Fri normal all day ... 19:79 20:47 21:33 22:0 23:0 <- stops 21:55:14 2022-09-24 Sat 00-18: NOTHING 19:1 20:5 21:25 22:38 23:26 ^ first request of the day, 19:49:29 2022-09-25 Sun 3,716 requests -- the BUSIEST Sunday of 2022 (median 2,514) ``
Roughly twenty-two hours with nothing recorded, from Friday 22:00 to Saturday 19:49. Nobody stops reporting bulky items for twenty-two hours and then starts again at a quarter to eight in the evening.
Three things make it conclusive rather than probable:
- Every intake channel collapsed together — Call fell 99.2% (638 to 5), Mobile App 91% (763 to 69), against the previous Saturday. A single-channel failure would leave the others intact; all of them dying together is the system behind them.
- The silence has an edge, not a slope. Zero for nineteen consecutive hours, then 1, 5, 25, 38, 26 — a system coming back and catching up, not people waking up.
- The day after is the busiest Sunday of the year, and its hourly profile is flat and abnormally late (176 requests at 22:00, 147 at 23:00, against a normal Sunday's evening taper). That is the backlog draining.
And it happened twice
2022-03-26, the second-quietest Saturday at 291 requests, carries the identical signature: normal until 01:00, then seventeen consecutive empty hours, then back at 19:00.
Both outages end at about 19:00 on a Saturday. Two of them is a pattern, not an accident — a maintenance window is the obvious hypothesis and this data cannot confirm it.
Why this is the best teaching artifact here
The dip is instrumentation, not behaviour. And so is the spike after it.
A student charting requests per day sees a hole on the Saturday and a peak on the Sunday, and the natural story explains both with people: a quiet weekend, then a busy one. Both halves of that story are wrong, and they are wrong for the same reason. One chart, two features, one cause, and the cause is not in the chart — it is in the hours, which the daily chart threw away.
That is the strand's whole argument arriving in one real file the students pulled themselves: this shows when it was recorded, not when it happened.
Run it as a two-stage dive. Show the daily chart and take their explanations first. Then show the hours. The gap between the two answers is the lesson, and it is much stronger than being told.
One honest consequence for this document. The histogram pair above describes the 311 distribution as left-skewed with "a tail of unusually quiet days." That still holds, but at least the two most extreme members of that tail are outages rather than quiet days — so the tail is part behaviour and part instrument, which is a sharper thing to say than either alone.
Not built, and why
the scatter — canopy against surface temperature by LA tract. It needs two datasets joined on tract and neither is a one-call fetch. Census ACS requires an API key (api.census.gov returns Missing Key), which also rules out the commute-time histogram the pairing document names. Both are real and both are a second session's work, not a blocker for term one.
Open
- The 95-request day has no explanation yet. Find it before a student does, or decide deliberately to let them find it first — the second is the better lesson.
- The 311 archive is 2022. Newer years exist as separate datasets; moving forward a year is a one-line change in
fetch.py. requesttype='Bulky Items'was chosen for the dot map because it is high-volume and carries no sensitivity. Any other type is a one-word change.
The third publisher — teen health
Added 2026-09-05. The first two lanes are about SOMEWHERE; this one is about the students. NHIS Teen covers 12-17 year olds, which is the age of the room the lesson is taught in.
| Publisher | Collection | Method | Link |
|---|---|---|---|
| National Center for Health Statistics (NCHS/DHIS, U.S. CDC) — NHIS Teen, Interactive Summary Health Statistics for Teens | July 2021 – December 2022 | household interview; a sampled teen aged 12–17 answers for themselves. NCHS weights, aggregates, and publishes each estimate with a 95% confidence interval and a reliability flag | data.cdc.gov/d/5pqj-rvh4 |
Licence. USGOV_WORKS — Public Domain U.S. Government, <https://www.usa.gov/government-works>. Public access level; provenance flag official.
Not microdata, on purpose. NHIS also publishes respondent-level files. We do not touch them. These are estimates NCHS has already aggregated, so there is no respondent here to re-identify — the same instinct as the platform's own k-suppression bar, not an exception to it.
Cite it as:
National Center for Health Statistics. NHIS Teen. Data accessed [date]. Available from <https://data.cdc.gov/d/5pqj-rvh4>.
A defect in the publisher's own metadata, recorded so a student who checks is not confused. The dataset's "Suggested Citation" field prints the identifier 25m4-6qqq. That is NHIS Adult Summary Health Statistics — a different survey — confirmed by fetching both. Citing it as printed would credit the wrong file. The corrected identifier is 5pqj-rvh4.
999 is a suppression flag, not a percentage. 71 of the 1,700 estimates are published as 999 with no confidence interval and cr_p_reliable = 0: NCHS declining to report a group too small to stand behind. Taken literally it is catastrophic — the Midwest's fair_or_poor_health came through as 999 and drew one region a hundred times taller than the rest, a finding that does not exist. fetch_nhis_teen.py blanks the estimate and keeps the row with a plain-language note, because which groups could not be reported on is itself a finding, and this bank's own tracker ends with "Absence is data too."
The four derived files (fetch_nhis_teen.py rebuilds them all):
| File | Rows | What it is for |
|---|---|---|
nhis_teen_estimates.csv | 1,700 | every estimate as published, with interval, reliability flag and suppression note — the table, histogram, dotplot, box plot, strip plot, big number |
nhis_teen_by_sex.csv | 10 | ten measures answered by girls and by boys — the dumbbell and the slope chart, where the GAP is the finding |
nhis_teen_group_profiles.csv | 29 | one row per group of teens, ten measures wide — parallel coordinates, radar, matrix, scatterplot matrix, scatter, bubble, small multiples |
nhis_teen_by_region.csv | 4 | the four US census regions — the tile-grid choropleth and its bivariate form |
What this lane cannot do, stated rather than forced. Twenty-one of the thirty shapes get an example here. Nine do not: it has no coordinates (the four point maps), no weekday or date cycle (the calendar grid, the rose), no two-category flow (the sankey), and no real time series (the line). And no donut — these percentages are shares of different wholes and do not sum to one, so a donut of them would be a lie. The civic and earth-and-space lanes already cover every one of those.