← Back to story

Specific schoolsMethodology recipe

Community schools were the de Blasio cure-all. Did they work?

A reproducibility log: the data this analysis touched, the queries it ran, the outside sources it leaned on, and the steps a third party would follow to re-run it.

Summary

We couldn't get a machine-readable Community Schools roster from public sources (nyccommunityschools.org renders schools in image-based district pages; NYC Open Data carries no flag), so we report the program's headline counts plus an indirect view: the trajectory of the highest-need proclivity decile, which overlaps heavily with the program's served population.

Data sources

  • Database tableschools

    One row per New York City public school (DBN, name, district, borough, school_type, grade_band, latest_enrollment, proclivity_decile, proclivity_score, closed_at, admission_category).

  • Database tableschool_year_metrics

    Long-format per-school per-year metric facts (school_dbn, year, metric_key, subgroup, value, suppressed). Loaded from DOE/NYSED public files via scripts/loaders/*.

  • Database tableproclivity_score / proclivity_decile

    Composite student-body-challenge score (lower = lower-need, higher = higher-need) built from % economically disadvantaged, % English Language Learners, % students with disabilities. Decile 1 = lowest-need; decile 10 = highest-need.

  • Loader scriptscripts/loaders/_decile10_traj.ts

    Pulls per-decile averages of chronic absenteeism, ELA, math, and grad rate at 2014-15, 2018-19, 2021-22, 2024-25.

  • External datasetNYC DOE InfoHub — Community Schools program landing page (421-school count for 2024-25)
  • External datasetnyccommunityschools.org — district pages (image-based; not directly scrapable)

Steps

  1. Look up the program-size benchmarks from public sources: 45 schools at 2014 launch, 215 in 2017-18 (RAND study sample), 421 in 2024-25 (DOE InfoHub).

  2. Pull per-decile averages of chronic absenteeism, ELA, math, and grad rate for still-open schools, restricted to (2014-15, 2018-19, 2021-22, 2024-25).

    SELECT s.proclivity_decile, m.year, m.metric_key,
           AVG(m.value), COUNT(*)
      FROM schools s
      JOIN school_year_metrics m ON m.school_dbn = s.dbn
     WHERE s.proclivity_decile IS NOT NULL
       AND s.closed_at IS NULL
       AND m.subgroup='ALL' AND m.suppressed=false
       AND m.metric_key IN ('chronic_absenteeism_rate','ela_all_proficiency','math_all_proficiency','graduation_rate_4yr')
       AND m.year IN ('2014-15','2018-19','2021-22','2024-25')
     GROUP BY s.proclivity_decile, m.year, m.metric_key;
  3. Compare decile-10 (highest-need) movement with decile-1 (lowest-need) for the absenteeism + math chart.

Caveats

The decile-10 trajectory is NOT a Community Schools program-effect estimate — not all decile-10 schools are in the program, not all Community Schools are decile 10. The trend also reflects post-pandemic recovery and the 2022-23 state-test recalibration. Anyone wanting to claim Community Schools 'worked' or 'didn't' needs a matched-comparison design (RAND's 2020 method), not the proxy trajectory shown here.

References

Reproduce

To get the proper analysis, FOIL the NYC DOE Office of Community Schools for a DBN-keyed current roster, or scrape each district page at nyccommunityschools.org/district-N. Once a roster is loaded, run the same matched-comparison design as the Renewal Schools story (renewal-schools-postmortem) but with the Community Schools DBN list. To replicate the proxy trajectory in this story, run `npx tsx scripts/loaders/_decile10_traj.ts`.

The recipe lives at data/stories/recipes.ts in the repo. Corrections welcome.