← Back to story

PhiladelphiaDistrict vs charterMethodology recipe

Renaissance charters underperform regular charters — and barely outperform district

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

Summary

Grouped Philly schools by Renaissance / regular-charter / district buckets and aggregated on `keystone_literature_proficiency` (subgroup=ALL, population_cut=n/a — Future Ready cut). 17 Renaissance schools identified by `is_renaissance=true` flag, set by the Master School List loader based on `Major Intervention = 'Renaissance Charter'`.

Data sources

  • Database tablephilly_schools

    One row per Philly school. PK is ulcs_code (SDP canonical, = id_eos in PSSA, = SRC_School_ID × 10). Carries aun_code + pa_code for PDE-side joins.

  • Database tablephilly_school_year_metrics

    Long-format facts. PK (school_ulcs, year, metric_key, subgroup, population_cut). Carries comparison_group_percentile + citywide_percentile (direction-adjusted).

  • External datasetFuture Ready PA Index (PDE)
  • External datasetSDP School Performance (OpenDataPhilly CDN)

Steps

  1. Aggregate per Renaissance/charter/district bucket using FRPI Keystone Literature (charter coverage).

    SELECT
      CASE WHEN s.is_renaissance THEN 'Renaissance'
           WHEN s.school_type='CHARTER' THEN 'Regular charter'
           ELSE 'District' END AS bucket,
      count(DISTINCT s.ulcs_code), avg(m.value), percentile_cont(0.5) WITHIN GROUP (ORDER BY m.value)
    FROM philly_schools s
    JOIN philly_school_year_metrics m ON m.school_ulcs = s.ulcs_code
    WHERE m.metric_key='keystone_literature_proficiency' AND m.subgroup='ALL' AND m.population_cut='n/a'
    GROUP BY bucket ORDER BY 2 DESC;

Caveats

Renaissance Charters are heavily concentrated in lowest-decile demographics — comparison without student-body match overstates the gap. Real story is the per-school trajectory since conversion year (Master List has `Major Intervention Year`), not the cross-sectional median.

Reproduce

Same as csi-cohort-trajectory. Then the SQL above. For the full trajectory analysis, backfill historical Master Lists (longitudinal Zip 2001-02 → 2016-17 is available at the SDP CDN).

The recipe lives at data/cities/philly/stories/recipes.ts in the repo.