vccs
Vue 3용 차트 컴포넌트 모음, Recharts에서 포팅
NYCPS 3‑8학년 ELA 결과(2018‑2026)를 인터랙티브 대시보드로 제공, 전시·구·학군별 및 NYC Reads 단계·학생 그룹 포함
Interactive dashboard of NYCPS public ELA results, grades 3-8, 2018-2026. Built for CPRL. Citywide, borough and district views, NYC Reads rollout phases, student subgroups, and the paper-to-computer t
데이터HTML · JavaScriptGitHub @anuragmishraapplications-lab온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Interactive dashboard of NYCPS public ELA results, grades 3-8, 2018-2026. Built for CPRL. Citywide, borough and district views, NYC Reads rollout phases, student subgroups, and the paper-to-computer test transition.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Interactive dashboard of NYCPS public ELA results (grades 3–8, 2018–2026) for CPRL /
the Robertson Foundation ask.
Deliverable: NYC_Reads_ELA_Dashboard.html — one file, 1.5 MB, opens by
double-clicking. No server, no install, no network needed (Chart.js and all data are
embedded; only webfonts load from Google and fall back cleanly to system serif/sans).
Every chart has a PNG button; every page has a Download CSV button that exports
exactly the view on screen (so results can be dropped straight into a deck).README 전문 보기 ↗Interactive dashboard of NYCPS public ELA results (grades 3–8, 2018–2026) for CPRL / the Robertson Foundation ask.
Deliverable: NYC_Reads_ELA_Dashboard.html — one file, 1.5 MB, opens by
double-clicking. No server, no install, no network needed (Chart.js and all data are
embedded; only webfonts load from Google and fall back cleanly to system serif/sans).
| Page | What it answers |
|---|---|
| Citywide overview | Where the city stands in 2026 and how far it has moved from a baseline you pick (2023, 2024 or 2025). Level distribution by year and by grade. |
| District explorer | All 32 districts on any grade band and any student group. Names the districts that improved on both measures and those that got worse on both, each tagged with its NYC Reads wave. Scatter of Δ Level 1 against Δ proficiency with the "improved on both" quadrant shaded, ranked bars, sortable table, CSV. |
| Boroughs | Borough trends and distributions; every district as a bar coloured by borough; borough × grade matrix. |
| NYC Reads phases | Elementary Phase 1 vs Phase 2 on tested grades 3–5, the middle-school wave on grades 6–8, group-contrast table, and a placebo check. |
| Providers & curriculum | Districts grouped by the NYC Reads professional learning provider they work with and by the elementary curriculum they adopted, with ELA results for each group. |
| Subgroups & gaps | Every reported student group at city / borough / district level, plus five paired proficiency gaps over time. |
| Test format | The paper-to-computer transition, grouped by the year each grade moved. Each line is dashed with hollow points while those grades were on paper and solid with filled points once they moved, so the switch is visible without annotations. |
Every chart has a PNG button; every page has a Download CSV button that exports exactly the view on screen (so results can be dropped straight into a deck).
Phase markers. Time-series charts carry dashed rules at the first year each NYC Reads wave could appear in results. A spring test sits at the end of that school year, so a wave launched in SY 2023–24 first shows up in the 2024 results — the marker goes on 2024, not 2023. Years before any wave reached a tested grade are tinted and labelled "before NYC Reads". Each chart shows only the waves that reach the grades it plots: the grades 3–5 charts carry the elementary waves, the grades 6–8 charts carry the middle-school wave. The test-format page marks the paper-to-computer transitions instead. A Phase markers checkbox on each page turns them off for a clean export.
count / tested. Nothing is copied from a published
percentage column, so no figure is a rounded value of a rounded value.python3 scripts/extract.py # .xlsx -> data/payload.json, asserts every invariant
python3 scripts/build.py # template + app.js + payload + Chart.js -> single HTML
extract.py refuses to emit a row that violates its invariants, so a bad build fails
loudly rather than shipping wrong numbers.
Two independent audits, both run against the shipped file with the browser driving
the real UI. Each re-reads the original .xlsx files from scratch rather than reusing
any intermediate artefact.
python3 scripts/audit_engine.py # 40,698 combinations, numeric with tolerance
python3 scripts/audit_digest.py # 40,698 combinations, exact by hash
python3 scripts/audit_render.py # 8,324 rendered values
python3 scripts/audit_pass2.py # 4,030 chart, table and CSV values
| Audit | Coverage | Result |
|---|---|---|
audit_raw.py | Internal consistency of all 30,728 source rows | counts sum to tested; % = count/tested; L3+4 = L3+L4; max deviation 5.7e-6 pp |
audit_engine.py | Every level × geography × grade band × year × student group = 40,698 combinations pulled out of the live page | 0 mismatches. Max deviation 5e-7 pp on percentages, 9.8e-7 on mean scale score. Also cross-checks all 28,523 cells against the files' own published % columns (agreement to 4.3e-6 pp, the source's float precision). |
audit_digest.py | All 40,698 combinations again, by SHA-256 over the aggregated student counts. Exact integer comparison, no dependence on decimal formatting | identical hash |
audit_render.py | 9,560 values actually rendered — KPI cards, chart datapoints, table cells, signs and directions of every change — across 130 filter states | 0 mismatches |
audit_pass2.py | 4,062 more: the diverging grade chart, the 2022 reference chart, the district scatter and ranked bars, the borough matrix and district bars, the phase contrast table, the gap chart, the per-grade format table, and all six CSV exports in full | 0 mismatches |
Claims in the team's working doc were reproduced exactly: citywide Level 1 26.1% → 24.3% (2024→2026); 27 of 32 districts down on Level 1; largest falls in Districts 23, 7, 16 and 5; and 23, 16, 5 confirmed as Elementary Phase 1.
Assignments are for school year 2025-26, the year the spring 2026 test measures,
transcribed from the curriculum-and-JESP chart the team supplied on 11 Aug 2026 into
data/vendors_sy2025_26.json. JESP is the job-embedded support provider, i.e. the
professional learning vendor. K-5 and grades 6-8 are held separately because they differ.
The 2026-27 draft workbook is no longer used for provider or curriculum: those
assignments begin after the 2026 test, and they differ from SY2025-26 for 21 of the 32
districts. That workbook also carried superintendent names and 94 email addresses, so it
was never committed; extract.py still asserts that no @ can reach the payload.
Unresolved: the supplied chart's own Phase column disagrees with the NYC Reads launch timeline for seven districts (10, 13, 14, 24, 28, 29, 30). The tool keeps the launch timeline, because it is independently corroborated by the "year joined" columns of the 2026-27 workbook for all 32 districts. The disagreement is displayed on the providers page rather than hidden.
The number of students tested is not stable. Between 2024 and 2026 the district totals fell 2.6%, but individual districts range from -15.4% (D05) to +10.0% (D14). Because a district's result is a percentage of whoever sat the test, that is a competing explanation for a measured gain, and it is not a small one: the change in cohort size correlates with the change in proficiency at r = -0.48 and with the change in the Level 1 share at r = +0.60. The 14 districts whose cohort shrank by more than 5% averaged +4.2pp on proficiency against +0.4pp for those that held steady or grew.
The district explorer carries a "Δ tested %" column and a dedicated panel plotting cohort change against proficiency change, so the two are read together.
Mathematics, Science and charter schools are out of scope. NYC Solves provider and curriculum are carried in the district table for reference but no ELA result is ever grouped by them, since they concern mathematics.
School level. The meeting scoped this to citywide, borough and district for a first cut, so the school file is not loaded. It is present and usable: 1,129 schools over 33,793 rows in its All Students tab, with the same columns plus DBN and school name. Adding a school page is straightforward — the same engine handles it — and would let you see which schools drive a district's movement, which is the natural next question for targeting support.
NYC_Reads_ELA_Dashboard.html the deliverable
src/template.html markup + CSS (CPRL palette, Crimson Text / Hind)
src/app.js aggregation engine + all seven pages
scripts/extract.py .xlsx -> payload.json, with invariant assertions
scripts/build.py assembles the single file
scripts/audit_*.py the audits above
data/ source .xlsx, payload.json, CPRL logo
audit/ captured dumps from the live page