Eight schools, the SHSAT, and the test-prep economy
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
For the 8 Specialized HS, compared the demographic composition (FRL %, ELL %, Black/Hispanic %) with the demographic composition of the broader 8th-grade population that takes the SHSAT, sourced from the city's annual SHSAT-results report.
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/*.
- External datasetNYC DOE — annual SHSAT results report (demographic breakdown of test-takers and offers)
Steps
Pull the eight Specialized HS DBNs and their per-school demographic shares (current year).
Compare with NYC DOE's published SHSAT-cohort demographics for that year.
Caveats
The DOE's SHSAT report disaggregates test-takers and offers but doesn't release per-school score distributions, so the 'test-prep economy' claim is inferential from the SHSAT-results gap, not directly observable in our data.
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.