Six years after the pandemic, two in three district-run schools are at least 10% smaller and one in seven has lost a third
A reproducibility log: the data this analysis touched, the queries it ran, and how a third party would re-run it.
Summary
For district-run schools with October membership in both 2019-20 and 2025-26, computed percent change, its distribution and the shares below thresholds; the grade pipeline is kindergarten ÷ grade 5 from the per-grade columns.
Data sources
- Database tablemiami_school_year_metrics
Long-format facts: (school_number, year, metric_key, subgroup) with value, suppressed, denominator, peer and district percentiles, and the residual-z columns.
- Cached output
data/analysis/miami-enrollment.jsonThe enrollment analysis packet: trend, school change, utilization, lift table, spending versus size.
- External datasetFLDOE Membership by District and School by Grade (Survey 2)
Steps
Change per school.
SELECT a.school_number, a.value AS e2019, b.value AS e2025, (b.value / a.value - 1) * 100 AS pct FROM miami_school_year_metrics a JOIN miami_school_year_metrics b USING (school_number) JOIN miami_schools s ON s.school_number = a.school_number WHERE a.metric_key = 'enrollment_oct' AND b.metric_key = 'enrollment_oct' AND a.year = '2019-20' AND b.year = '2025-26' AND a.subgroup = 'ALL' AND b.subgroup = 'ALL' AND NOT a.suppressed AND NOT b.suppressed AND a.value > 0 AND NOT s.is_charter AND s.school_type = 'REGULAR';Distribution and by-level summary (packet school_change); pipeline ratios (packet pipeline_ratios).
Caveats
Schools that changed grade span or merged show changes that are not demographic; the events table explains the largest.
Reproduce
Follow docs/cities/miami/07_runbook.md: `make miami-discover-all`, parse the PDFs, run the loaders in order, `make miami-verify`, then the analysis scripts. The queries below run directly against the local Postgres.
The recipe lives at data/cities/miami/stories/recipes.ts in the repo.