← Back to story

Specific schoolsMethodology recipe

Six NYC schools where 100% of teachers say students bully each other

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

Filtered the survey_bullying metric (share of teachers reporting students bully each other) at the 100% ceiling. Cross-checked with student-survey responses on the same item to validate.

Data sources

  • 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/*.

Steps

  1. SELECT schools with survey_bullying = 1.0 (or 100) at the most recent year.

    SELECT s.dbn, s.name, m.value
      FROM schools s JOIN school_year_metrics m ON m.school_dbn=s.dbn
     WHERE m.metric_key='survey_bullying' AND m.year='2023-24'
       AND m.value >= 0.99 AND m.suppressed=false;

Caveats

A 100% response can be a 1-of-1 response (low teacher-n schools), so we cross-check with response-count when available. The wording of the survey item matters — 'students bully' is broad.

Reproduce

Clone the repo, set DATABASE_URL to a Postgres with the project schema loaded, run `npx tsx scripts/loaders/<source>.ts` for any not-yet-loaded data, then issue the queries in the Steps section. The story page also lists the exact `metric_key`/`subgroup`/`year` filters used. Searchable by the answer's headline number — every figure is recomputable from the queries shown.

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