# Cleaned DepEd school-level datasets, SY 2017-18 to SY 2025-26

Version 1.0, released 2026-10-25. Prepared by Mark Anthony Llego for NASH Reviewer (https://nash.com.ph/). Terms of use: the data files follow DepEd's Terms of Use and Fair Use Policy; our code and documentation are all rights reserved (LICENSE.txt).
Full documentation, codebook and the cleaning rules: https://nash.com.ph/blog/download-cleaned-deped-school-data

## Files

### School master file, SY 2023-24

One row per school in DepEd's SY 2023-24 files (60,167 schools, all sectors): geography, enrollment by grade and sex, learner types, teachers, classrooms and buildings, toilets, water, electricity and internet, computers and ICT equipment, the NAT, ELLNA and CRLA results where they exist, and the derived ratios the report uses. Input modules are blank for non-public schools.

60,167 rows, 207 columns.
- school_master_2023.csv.gz (CSV (gzip), 8.0 MB, 60,167 rows)
- school_master_2023.parquet (Parquet, 6.6 MB, 60,167 rows)

### Enrollment panel, SY 2017-18 to SY 2025-26

One row per school per school year it appears in (547,425 rows): enrollment by grade, level, sex and senior-high strand, with harmonised labels, constant-boundary regions, and entry, exit and year-on-year columns.

547,425 rows, 69 columns.
- enrollment_panel_2017-18.csv.gz (CSV (gzip), SY 2017-18, 2.7 MB, 61,563 rows)
- enrollment_panel_2018-19.csv.gz (CSV (gzip), SY 2018-19, 3.6 MB, 61,916 rows)
- enrollment_panel_2019-20.csv.gz (CSV (gzip), SY 2019-20, 3.7 MB, 61,923 rows)
- enrollment_panel_2020-21.csv.gz (CSV (gzip), SY 2020-21, 3.6 MB, 60,957 rows)
- enrollment_panel_2021-22.csv.gz (CSV (gzip), SY 2021-22, 3.6 MB, 60,429 rows)
- enrollment_panel_2022-23.csv.gz (CSV (gzip), SY 2022-23, 3.6 MB, 60,137 rows)
- enrollment_panel_2023-24.csv.gz (CSV (gzip), SY 2023-24, 3.6 MB, 60,167 rows)
- enrollment_panel_2024-25.csv.gz (CSV (gzip), SY 2024-25, 3.6 MB, 60,129 rows)
- enrollment_panel_2025-26.csv.gz (CSV (gzip), SY 2025-26, 3.6 MB, 60,204 rows)
- enrollment_panel_long.parquet (Parquet, 17.2 MB, 547,425 rows)

### School spine, SY 2017-18 to SY 2025-26

One row per school ID ever observed in the nine enrollment files (66,967 IDs): first and last year, gaps, entry and exit flags, and the sector and location in the last year present.

66,967 rows, 24 columns.
- school_spine.csv.gz (CSV (gzip), 882 KB, 66,967 rows)
- school_spine.parquet (Parquet, 1.4 MB, 66,967 rows)

### CRLA reading levels, SY 2025-26

One row per assessed school (6,121): learners at each CRLA reading level by grade and language, the school-level shares as proportions, and the SY 2025-26 Grade 1 to 3 enrollment.

6,121 rows, 33 columns.
- crla_2025_outcomes.csv.gz (CSV (gzip), 228 KB, 6,121 rows)
- crla_2025_outcomes.parquet (Parquet, 273 KB, 6,121 rows)

### Shrunk NAT and ELLNA school means, SY 2023-24

One row per school with a NAT or ELLNA result (6,840): the published school mean, the number of test-takers, and the empirical-Bayes estimate shrunk toward the division mean, for any school-level use.

6,840 rows, 10 columns.
- school_assessment_shrunk.csv.gz (CSV (gzip), 261 KB, 6,840 rows)
- school_assessment_shrunk.parquet (Parquet, 255 KB, 6,840 rows)

### Likely school-ID changes

146 cases where a school that leaves the files reappears the next year under a new ID with the same name, municipality and barangay. DepEd publishes no mapping, so the panel counts each as an exit plus an entry; this table lets you link them.

146 rows, 7 columns.
- likely_id_changes.csv (CSV, 13 KB, 146 rows)

### Assessment coverage by division

For each of the 44 covered divisions, how many public schools with Grade 3 or Grade 6 learners have NAT, ELLNA and CRLA results, and the share covered.

63 rows, 10 columns.
- assessment_coverage_by_division.csv (CSV, 4 KB, 63 rows)

### Documentation

- codebook.csv: every column of every dataset with its type, block, number of non-blank rows and description
- harmonisation_rules.csv: the label mappings applied to the source files
- CHECKSUMS.sha256: SHA-256 of every file (verify with `sha256sum -c CHECKSUMS.sha256`)
- manifest.json: the same file list with sizes and checksums, for scripts

## Reading the files

CSV files are gzip-compressed UTF-8 with a header row; blank cells are missing values, never zero. Parquet files carry the same data with types.

Python: `pd.read_parquet('school_master_2023.parquet')` or `pd.read_csv('school_master_2023.csv.gz')`.
R: `arrow::read_parquet('school_master_2023.parquet')` or `readr::read_csv('school_master_2023.csv.gz')`.
Excel: unzip the .csv.gz first; the school master and each enrollment year fit in a sheet.

## How the data was cleaned

The raw DepEd files were never edited. Every rule is applied in code and documented in the data quality report:
- labels harmonised across years (sector, management, annex status, region and division renames, Yes/No flags, whitespace);
- a constant-boundary region (region_const) under SY 2025-26 boundaries;
- blank grade cells read as 0 only where the school does not offer the level, otherwise kept missing; SY 2025-26's blanks-for-zeros convention handled;
- public-only modules kept blank for non-public schools; implausible values flagged, not altered; computer counts capped only in the derived comp_acad_w;
- school IDs never re-linked (likely_id_changes.csv lists the candidates).

## Limits

Assessment results cover 44 divisions in five regions and about half the public schools inside them; NAT school means rest on a median of six sampled learners;
input modules describe public schools only; test scores are not comparable across years. See the landing page for the full list.
