← Back to story

Miami-DadeDistrict vs charterMethodology recipe

District-run enrollment fell by 60,000 in nine years while charter enrollment rose by 24,000

A reproducibility log: the data this analysis touched, the queries it ran, and how a third party would re-run it.

Summary

Summed October membership by sector for every year 2016-17 → 2025-26 from the state file (district-run regular, charter, other), and computed school-level change for schools open in both 2019-20 and 2025-26.

Data sources

  • Database tablemiami_schools

    One row per school number (MSID directory + CCD + GIS); sector, level, magnet status, activity code, region.

  • 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 outputdata/analysis/miami-enrollment.json

    The enrollment analysis packet: trend, school change, utilization, lift table, spending versus size.

  • External datasetFLDOE Membership by District and School by Grade (Survey 2)

Steps

  1. Sector totals by year (district-run regular vs charter vs other; the story's district-run series is the REGULAR sector only).

    SELECT m.year,
      CASE WHEN s.is_charter THEN 'charter' WHEN s.school_type = 'REGULAR' THEN 'district_run_regular' ELSE 'other' END AS sector,
      SUM(m.value) AS students, COUNT(*) AS schools
    FROM miami_school_year_metrics m JOIN miami_schools s USING (school_number)
    WHERE m.metric_key = 'enrollment_oct' AND m.subgroup = 'ALL' AND NOT m.suppressed
    GROUP BY 1, 2 ORDER BY 1, 2;
  2. School-level change 2019-20 → 2025-26 (packet school_change.pre_pandemic_to_latest).

Caveats

Sector totals are net stocks, not student flows; they cannot identify transfers or how many children left public education. 'District-run regular' excludes alternative, ESE-center and adult programs (packet universe). The federal CCD copy agrees with the state count exactly at 99% of school-years in the three CCD years checked (harness C; the exact share is in __cross_publisher_enrollment.json).

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.