CRDC Data Source Reference
Civil Rights Data Collection (CRDC) — mandatory biennial OCR survey of all U.S. public schools measuring educational opportunity and civil rights compliance (2011-2021). Use when analyzing school discipline disparities by race/disability, course access equity, harassment, restraint/seclusion, or chronic absenteeism. Data disaggregated by race, sex, disability, and English learner status. Note: 2020-21 is COVID-impacted and not directly comparable to other years; 2011-14 are sampled, not universe.
The Civil Rights Data Collection is a mandatory biennial survey of all U.S. public schools measuring educational opportunity and civil rights compliance. It is the only national source for school-level discipline disparities, course access equity, harassment, and restraint/seclusion data disaggregated by race, sex, disability, and English learner status.
CRITICAL: Value Encoding
The Education Data Portal uses integer codes, not the string codes shown in OCR documentation. Always filter using integers.
| Variable |
String Code (Raw) |
Portal Integer |
| Race: White |
WH |
1 |
| Race: Black |
BL |
2 |
| Race: Hispanic |
HI |
3 |
| Sex: Male |
M |
1 |
| Sex: Female |
F |
2 |
See ./references/variable-definitions.md for complete encoding tables.
What is CRDC?
The Civil Rights Data Collection is a mandatory biennial survey of all public schools and districts that measures educational opportunity and civil rights compliance:
- Collector: U.S. Department of Education, Office for Civil Rights (OCR)
- Purpose: Enforce civil rights laws, identify discrimination, monitor equity
- Coverage: All public LEAs and schools receiving federal financial assistance
- Frequency: Biennial (every 2 school years)
- Disaggregation: Race/ethnicity, sex, disability status, English learner status
- History: Collected since 1968 (as Elementary and Secondary School Civil Rights Survey)
- Available years: 2011, 2013, 2015, 2017, 2020, 2021 (biennial — no data for even-numbered school years)
- Available through: Education Data Portal mirrors
Reference File Structure
| File |
Purpose |
When to Read |
civil-rights-context.md |
Legal framework (Title VI, IX, Section 504, IDEA) |
Understanding why data is collected |
data-elements.md |
All data categories and what's collected |
Planning analysis, identifying variables |
collection-methodology.md |
Sampling, universe, timeline, reporting |
Understanding coverage limitations |
variable-definitions.md |
Key variables, codes, disaggregation categories |
Coding data, interpreting values |
data-quality.md |
Known issues, suppression, state variations |
Addressing limitations in analysis |
historical-changes.md |
Evolution across collection years |
Time series analysis, year comparison |
Decision Trees
What CRDC data do I need?
Research topic?
├─ School discipline
│ ├─ Suspensions (ISS/OSS) → ./references/data-elements.md#discipline
│ ├─ Expulsions → ./references/data-elements.md#discipline
│ ├─ Referrals to law enforcement → ./references/data-elements.md#discipline
│ ├─ School-related arrests → ./references/data-elements.md#discipline
│ └─ Preschool suspensions → ./references/data-elements.md#discipline
├─ Restraint and seclusion
│ └─ Physical restraint, mechanical, seclusion → ./references/data-elements.md#restraint-seclusion
├─ Harassment and bullying
│ ├─ Allegations by type → ./references/data-elements.md#harassment
│ └─ Disciplined for harassment → ./references/data-elements.md#harassment
├─ Course access and enrollment
│ ├─ AP/IB courses → ./references/data-elements.md#advanced-courses
│ ├─ Gifted/talented → ./references/data-elements.md#gifted-talented
│ ├─ Math/science courses → ./references/data-elements.md#course-access
│ └─ Computer science → ./references/data-elements.md#course-access
├─ Chronic absenteeism
│ └─ Students missing 15+ days → ./references/data-elements.md#chronic-absenteeism
├─ Special populations
│ ├─ Students with disabilities (IDEA) → ./references/data-elements.md#students-with-disabilities
│ ├─ English learners → ./references/data-elements.md#english-learners
│ └─ Preschool enrollment → ./references/data-elements.md#preschool
├─ School staffing
│ ├─ Teacher experience/certification → ./references/data-elements.md#staffing
│ └─ Counselors, nurses, etc. → ./references/data-elements.md#staffing
└─ School safety
└─ Offenses, violence, weapons → ./references/data-elements.md#school-offenses
Understanding the legal context?
Civil rights law question?
├─ Race/ethnicity discrimination → ./references/civil-rights-context.md#title-vi
├─ Sex/gender discrimination → ./references/civil-rights-context.md#title-ix
├─ Disability discrimination → ./references/civil-rights-context.md#section-504
├─ Special education services → ./references/civil-rights-context.md#idea
├─ Age discrimination → ./references/civil-rights-context.md#age-discrimination-act
└─ OCR enforcement process → ./references/civil-rights-context.md#ocr-enforcement
Data quality concerns?
Data quality issue?
├─ Missing or suppressed data → ./references/data-quality.md#suppression
├─ Definition inconsistencies → ./references/data-quality.md#definition-variation
├─ Year-to-year comparability → ./references/historical-changes.md
├─ COVID-19 impact (2020-21) → ./references/data-quality.md#covid-impact
├─ Underreporting concerns → ./references/data-quality.md#underreporting
└─ State-level variations → ./references/data-quality.md#state-variations
Quick Reference: CRDC Data Categories
Collection Years
| School Year |
Collection |
Coverage |
Key Notes |
| 2011-12 |
Sample |
~7,000 districts |
First modern CRDC; sampled |
| 2013-14 |
Expanded |
~16,000 districts |
Larger sample |
| 2015-16 |
Near-universe |
~96,000 schools |
First near-complete |
| 2017-18 |
Universe |
~96,000 schools |
Full universe collection |
| 2020-21 |
Universe |
~97,500 schools |
COVID-impacted year |
| 2021-22 |
Universe |
~98,000 schools |
Post-pandemic baseline |
| 2023-24 |
Universe |
In progress |
Current collection |
Critical: CRDC is biennial - no data for odd years (2012, 2014, 2016, 2018, 2019).
Data Categories
| Category |
Description |
Disaggregation |
| Enrollment |
Student counts by grade level |
Race, sex, disability, LEP |
| Discipline |
Suspensions, expulsions, arrests |
Race, sex, disability, LEP |
| Restraint/Seclusion |
Physical/mechanical restraint, seclusion |
Race, sex, disability |
| Harassment |
Allegations and discipline by type |
Race, sex, disability |
| Course Access |
AP, IB, math, science, CS offerings |
School-level, enrollment by race/sex |
| Chronic Absenteeism |
15+ days missed |
Race, sex, disability, LEP |
| Staffing |
Teachers, counselors, nurses, etc. |
FTE counts, qualifications |
| Offenses |
Violence, weapons, drugs at school |
Type of offense |
| Retention |
Students retained in grade |
Race, sex, disability |
Key Identifiers
| ID |
Format |
Level |
Example |
Notes |
crdc_id |
12-digit string |
School |
010000201705 |
Primary CRDC identifier; always present |
ncessch |
12-digit string |
School |
010000201705 |
NCES school ID, joins to CCD; may be null for some entries |
leaid |
7-digit string |
District |
0100002 |
NCES district ID, joins to CCD; always present |
Note: The OCR-internal combokey (e.g., AL-0010-00002) does NOT appear as a column in Portal data. Use crdc_id or ncessch for school-level identification.
WARNING: String Type Override Required. When reading CRDC data from CSV, ncessch, leaid, and crdc_id must be read as String (pl.Utf8) via schema_overrides. Polars infers these as Int64, silently destroying leading zeros for ~19% of rows (FIPS 01-09 states: AL, AK, AZ, AR, CA, CO, CT). Parquet files preserve types automatically.
Race/Ethnicity (Portal Integer Codes)
| Code |
Category |
1 |
White |
2 |
Black or African American |
3 |
Hispanic/Latino of any race |
4 |
Asian |
5 |
American Indian or Alaska Native |
6 |
Native Hawaiian or Other Pacific Islander |
7 |
Two or more races |
99 |
Total |
Empirically observed values: Codes 1-7 and 99 appear in CRDC data. Additional codes (8 Nonresident alien, 9 Unknown, 20 Other) are defined in the codebook but are not observed in practice for K-12 CRDC datasets. See variable-definitions.md for the full codebook listing.
Sex (Portal Integer Codes)
| Code |
Category |
1 |
Male |
2 |
Female |
3 |
Non-binary/other (newer collections; rows exist but mostly contain -1 or -2 values) |
99 |
Total |
Disability Status (Portal Integer Codes)
| Code |
Category |
0 |
Students without disabilities |
1 |
Students with disabilities (served under IDEA) |
2 |
Students with Section 504 only |
3 |
Students not served under IDEA (includes 504-only and non-disabled) |
4 |
Students with disabilities (combined: IDEA + Section 504) |
99 |
Total |
Note: Not all disability codes appear in every dataset. Enrollment data typically has [1, 2, 99]; discipline data has [0, 1, 2, 4, 99]. Verify codes against the live codebook for your specific dataset.
English Learner Status (Portal Integer Codes)
| Code |
Category |
1 |
English learner (EL/LEP) |
99 |
All students |
Missing Data Codes
| Code |
Meaning |
When Used |
-1 |
Missing |
Data not reported by school/district |
-2 |
Not applicable |
Item doesn't apply to this entity |
-3 |
Suppressed |
Data suppressed for privacy (small cell sizes) |
-9 |
Skip pattern |
Question not asked in this collection year (rare; check codebook) |
null |
Not available |
Value absent from dataset (e.g., ncessch is null for some schools) |
Verify these codes against the live codebook for your specific dataset. Use get_codebook_url() from fetch-patterns.md.
Data Access
Datasets for CRDC are available via the Education Data Portal mirror system. See datasets-reference.md for canonical paths, mirrors.yaml for mirror configuration, and fetch-patterns.md for fetch code patterns including fetch_from_mirrors() and fetch_yearly_from_mirrors().
Key datasets (6 of 22 total):
| Dataset |
Path |
Type |
Codebook |
| Discipline |
crdc/schools_crdc_discipline_k12_{year} |
Yearly |
crdc/codebook_schools_crdc_discipline |
| AP/IB Enrollment |
crdc/schools_crdc_apib_enroll |
Single |
crdc/codebook_schools_crdc_ap-ib-enrollment |
| Enrollment |
crdc/schools_crdc_enrollment_k12_{year} |
Yearly |
crdc/codebook_schools_crdc_enrollment |
| Chronic Absenteeism |
crdc/schools_crdc_chronic_absenteeism_{year} |
Yearly |
crdc/codebook_schools_crdc_chronic-absenteeism |
| Harassment/Bullying |
crdc/schools_crdc_harass_bully_students_{year} |
Yearly |
crdc/codebook_schools_crdc_harrassment-bullying-students |
| Restraint/Seclusion |
crdc/schools_crdc_restraint_seclusion_students_{year} |
Yearly |
crdc/codebook_schools_crdc_restraint-seclusion-students |
22 CRDC datasets exist total (6 yearly, 16 single-file). See datasets-reference.md for the complete list with all paths and codebook references.
CRDC naming note: Some data file paths use concatenated names (e.g., disciplineinstances, mathandscience) while their codebook counterparts use underscored names (e.g., discipline_instances, math_and_science). Always use the exact paths from datasets-reference.md.
Codebooks are .xls files co-located with data in all mirrors. Use get_codebook_url() from fetch-patterns.md to construct download URLs:
from fetch_patterns import get_codebook_url
url = get_codebook_url("crdc/codebook_schools_crdc_discipline")
Truth Hierarchy: When interpreting variable values, apply this priority:
- Actual data file (what you observe in the parquet/CSV) -- this IS the truth
- Live codebook (.xls in mirror) -- authoritative documentation, may lag
- This skill documentation -- convenient summary, may drift from codebook
If this documentation contradicts the codebook, trust the codebook. If the codebook contradicts observed data, trust the data and investigate.
Filtering
import polars as pl
# Filter to a single state (California) and disaggregated race groups
df = df.filter(
(pl.col("fips") == 6) & # California
(pl.col("race") < 99) # Exclude totals row
)
# Filter to specific demographic intersection
df = df.filter(
(pl.col("race") == 2) & # Black students
(pl.col("sex") == 99) & # Both sexes (total)
(pl.col("disability") == 99) # All disability statuses
)
Common Pitfalls
| Pitfall |
Issue |
Solution |
| Using string codes |
Portal uses integers, not strings |
race == 2 not race == "BL" |
| Raw counts |
Different enrollment sizes |
Use rates per 100/1000 students |
| Missing years |
Assuming annual data |
Remember biennial schedule |
| COVID year |
2020-21 not comparable |
Flag or exclude from trends |
| Suppression |
Small cell suppression |
Check suppression rates first |
| Sample years |
Early years sampled |
Use 2015+ for national estimates |
| Definition drift |
Variables change over time |
Check codebooks for each year |
| Forgetting code 99 |
Including totals in calculations |
Filter race < 99 for disaggregated analysis |
| CSV type inference |
Polars infers ncessch/leaid/crdc_id as Int64 |
Use schema_overrides={"ncessch": pl.Utf8, "leaid": pl.Utf8, "crdc_id": pl.Utf8} |
Equity Analysis Framework
CRDC data is designed for civil rights analysis. Key analytical approaches:
Disparity Ratios
import polars as pl
# Calculate discipline disparity using Portal integer codes
def discipline_disparity(df, discipline_var, group_a, group_b):
"""
Calculate risk ratio between two groups.
Value > 1 indicates group_a has higher rate.
Args:
df: DataFrame with CRDC data
discipline_var: Column with discipline counts
group_a: Integer race code (e.g., 2 for Black)
group_b: Integer race code (e.g., 1 for White)
Example:
# Black vs White OSS disparity
disparity = discipline_disparity(df, 'students_susp_out_sch_single', 2, 1)
"""
# Filter to each group (using integer codes)
df_a = df.filter(pl.col('race') == group_a)
df_b = df.filter(pl.col('race') == group_b)
# Calculate rates
rate_a = df_a.select(pl.col(discipline_var).sum()).item() / \
df_a.select(pl.col('enrollment_crdc').sum()).item()
rate_b = df_b.select(pl.col(discipline_var).sum()).item() / \
df_b.select(pl.col('enrollment_crdc').sum()).item()
return rate_a / rate_b
# Example: Black (race=2) vs White (race=1) disparity
# disparity = discipline_disparity(df, 'students_susp_out_sch_single', 2, 1)
Composition vs. Representation
- Composition: What share of suspended students are Black?
- Representation: Are Black students suspended at higher rates than enrollment share?
Risk Ratios
- Compare discipline/outcome rates across groups
- Adjust for school-level factors when appropriate
Related Data Sources
| Source |
Relationship |
When to Use |
education-data-source-ccd |
School/district characteristics |
Linking CRDC to school demographics, locale, Title I status (join on ncessch or leaid) |
education-data-source-edfacts |
Assessment outcomes |
Comparing discipline patterns to academic outcomes |
education-data-explorer |
Parent discovery skill |
Finding available CRDC endpoints and variables |
education-data-query |
Data fetching |
Downloading CRDC parquet/CSV files from mirrors |
education-data-context |
General interpretation |
Education data interpretation and citation generation |
Topic Index
| Topic |
Reference File |
| Title VI (race) |
./references/civil-rights-context.md |
| Title IX (sex) |
./references/civil-rights-context.md |
| Section 504 (disability) |
./references/civil-rights-context.md |
| IDEA |
./references/civil-rights-context.md |
| OCR enforcement |
./references/civil-rights-context.md |
| Discipline data |
./references/data-elements.md |
| Restraint/seclusion |
./references/data-elements.md |
| Harassment |
./references/data-elements.md |
| Course access |
./references/data-elements.md |
| AP/IB/Gifted |
./references/data-elements.md |
| Chronic absenteeism |
./references/data-elements.md |
| Staffing |
./references/data-elements.md |
| Preschool |
./references/data-elements.md |
| Sampling approach |
./references/collection-methodology.md |
| Collection timeline |
./references/collection-methodology.md |
| Variable codes |
./references/variable-definitions.md |
| Suppression rules |
./references/data-quality.md |
| COVID impact |
./references/data-quality.md |
| Year changes |
./references/historical-changes.md |
1---2name: education-data-source-crdc3description: CRDC — biennial OCR survey of all U.S. public schools (2011-2021). Discipline, course access, harassment, restraint/seclusion by race/sex/disability/EL. Use for civil rights and equity analysis. 2020-21 COVID-impacted; 2011-14 sampled, not universe.4---5
6# CRDC Data Source Reference
7
8Civil Rights Data Collection (CRDC) — mandatory biennial OCR survey of all U.S. public schools measuring educational opportunity and civil rights compliance (2011-2021). Use when analyzing school discipline disparities by race/disability, course access equity, harassment, restraint/seclusion, or chronic absenteeism. Data disaggregated by race, sex, disability, and English learner status. Note: 2020-21 is COVID-impacted and not directly comparable to other years; 2011-14 are sampled, not universe.
9
10The Civil Rights Data Collection is a mandatory biennial survey of all U.S. public schools measuring educational opportunity and civil rights compliance. It is the only national source for school-level discipline disparities, course access equity, harassment, and restraint/seclusion data disaggregated by race, sex, disability, and English learner status.
11
12> **CRITICAL: Value Encoding**
13>
14> The Education Data Portal uses **integer codes**, not the string codes shown in OCR documentation. Always filter using integers.
15>
16> | Variable | String Code (Raw) | Portal Integer |
17> |----------|-------------------|----------------|
18> | Race: White | `WH` | `1` |
19> | Race: Black | `BL` | `2` |
20> | Race: Hispanic | `HI` | `3` |
21> | Sex: Male | `M` | `1` |
22> | Sex: Female | `F` | `2` |
23>
24> See `./references/variable-definitions.md` for complete encoding tables.
25
26## What is CRDC?
27
28The Civil Rights Data Collection is a **mandatory biennial survey** of all public schools and districts that measures educational opportunity and civil rights compliance:
29
30- **Collector**: U.S. Department of Education, Office for Civil Rights (OCR)
31- **Purpose**: Enforce civil rights laws, identify discrimination, monitor equity
32- **Coverage**: All public LEAs and schools receiving federal financial assistance
33- **Frequency**: Biennial (every 2 school years)
34- **Disaggregation**: Race/ethnicity, sex, disability status, English learner status
35- **History**: Collected since 1968 (as Elementary and Secondary School Civil Rights Survey)
36- **Available years**: 2011, 2013, 2015, 2017, 2020, 2021 (biennial — no data for even-numbered school years)
37- **Available through**: Education Data Portal mirrors
38
39## Reference File Structure
40
41| File | Purpose | When to Read |
42|------|---------|--------------|
43| `civil-rights-context.md` | Legal framework (Title VI, IX, Section 504, IDEA) | Understanding why data is collected |
44| `data-elements.md` | All data categories and what's collected | Planning analysis, identifying variables |
45| `collection-methodology.md` | Sampling, universe, timeline, reporting | Understanding coverage limitations |
46| `variable-definitions.md` | Key variables, codes, disaggregation categories | Coding data, interpreting values |
47| `data-quality.md` | Known issues, suppression, state variations | Addressing limitations in analysis |
48| `historical-changes.md` | Evolution across collection years | Time series analysis, year comparison |
49
50## Decision Trees
51
52### What CRDC data do I need?
53
54```
55Research topic?
56├─ School discipline
57│ ├─ Suspensions (ISS/OSS) → ./references/data-elements.md#discipline
58│ ├─ Expulsions → ./references/data-elements.md#discipline
59│ ├─ Referrals to law enforcement → ./references/data-elements.md#discipline
60│ ├─ School-related arrests → ./references/data-elements.md#discipline
61│ └─ Preschool suspensions → ./references/data-elements.md#discipline
62├─ Restraint and seclusion
63│ └─ Physical restraint, mechanical, seclusion → ./references/data-elements.md#restraint-seclusion
64├─ Harassment and bullying
65│ ├─ Allegations by type → ./references/data-elements.md#harassment
66│ └─ Disciplined for harassment → ./references/data-elements.md#harassment
67├─ Course access and enrollment
68│ ├─ AP/IB courses → ./references/data-elements.md#advanced-courses
69│ ├─ Gifted/talented → ./references/data-elements.md#gifted-talented
70│ ├─ Math/science courses → ./references/data-elements.md#course-access
71│ └─ Computer science → ./references/data-elements.md#course-access
72├─ Chronic absenteeism
73│ └─ Students missing 15+ days → ./references/data-elements.md#chronic-absenteeism
74├─ Special populations
75│ ├─ Students with disabilities (IDEA) → ./references/data-elements.md#students-with-disabilities
76│ ├─ English learners → ./references/data-elements.md#english-learners
77│ └─ Preschool enrollment → ./references/data-elements.md#preschool
78├─ School staffing
79│ ├─ Teacher experience/certification → ./references/data-elements.md#staffing
80│ └─ Counselors, nurses, etc. → ./references/data-elements.md#staffing
81└─ School safety
82 └─ Offenses, violence, weapons → ./references/data-elements.md#school-offenses
83```
84
85### Understanding the legal context?
86
87```
88Civil rights law question?
89├─ Race/ethnicity discrimination → ./references/civil-rights-context.md#title-vi
90├─ Sex/gender discrimination → ./references/civil-rights-context.md#title-ix
91├─ Disability discrimination → ./references/civil-rights-context.md#section-504
92├─ Special education services → ./references/civil-rights-context.md#idea
93├─ Age discrimination → ./references/civil-rights-context.md#age-discrimination-act
94└─ OCR enforcement process → ./references/civil-rights-context.md#ocr-enforcement
95```
96
97### Data quality concerns?
98
99```
100Data quality issue?
101├─ Missing or suppressed data → ./references/data-quality.md#suppression
102├─ Definition inconsistencies → ./references/data-quality.md#definition-variation
103├─ Year-to-year comparability → ./references/historical-changes.md
104├─ COVID-19 impact (2020-21) → ./references/data-quality.md#covid-impact
105├─ Underreporting concerns → ./references/data-quality.md#underreporting
106└─ State-level variations → ./references/data-quality.md#state-variations
107```
108
109## Quick Reference: CRDC Data Categories
110
111### Collection Years
112
113| School Year | Collection | Coverage | Key Notes |
114|-------------|------------|----------|-----------|
115| 2011-12 | Sample | ~7,000 districts | First modern CRDC; sampled |
116| 2013-14 | Expanded | ~16,000 districts | Larger sample |
117| 2015-16 | Near-universe | ~96,000 schools | First near-complete |
118| 2017-18 | Universe | ~96,000 schools | Full universe collection |
119| 2020-21 | Universe | ~97,500 schools | COVID-impacted year |
120| 2021-22 | Universe | ~98,000 schools | Post-pandemic baseline |
121| 2023-24 | Universe | In progress | Current collection |
122
123**Critical**: CRDC is biennial - no data for odd years (2012, 2014, 2016, 2018, 2019).
124
125### Data Categories
126
127| Category | Description | Disaggregation |
128|----------|-------------|----------------|
129| **Enrollment** | Student counts by grade level | Race, sex, disability, LEP |
130| **Discipline** | Suspensions, expulsions, arrests | Race, sex, disability, LEP |
131| **Restraint/Seclusion** | Physical/mechanical restraint, seclusion | Race, sex, disability |
132| **Harassment** | Allegations and discipline by type | Race, sex, disability |
133| **Course Access** | AP, IB, math, science, CS offerings | School-level, enrollment by race/sex |
134| **Chronic Absenteeism** | 15+ days missed | Race, sex, disability, LEP |
135| **Staffing** | Teachers, counselors, nurses, etc. | FTE counts, qualifications |
136| **Offenses** | Violence, weapons, drugs at school | Type of offense |
137| **Retention** | Students retained in grade | Race, sex, disability |
138
139### Key Identifiers
140
141| ID | Format | Level | Example | Notes |
142|----|--------|-------|---------|-------|
143| `crdc_id` | 12-digit string | School | `010000201705` | Primary CRDC identifier; always present |
144| `ncessch` | 12-digit string | School | `010000201705` | NCES school ID, joins to CCD; may be null for some entries |
145| `leaid` | 7-digit string | District | `0100002` | NCES district ID, joins to CCD; always present |
146
147> **Note:** The OCR-internal `combokey` (e.g., `AL-0010-00002`) does NOT appear as a column in Portal data. Use `crdc_id` or `ncessch` for school-level identification.
148
149> **WARNING: String Type Override Required.** When reading CRDC data from CSV, `ncessch`, `leaid`, and `crdc_id` must be read as String (`pl.Utf8`) via `schema_overrides`. Polars infers these as Int64, silently destroying leading zeros for ~19% of rows (FIPS 01-09 states: AL, AK, AZ, AR, CA, CO, CT). Parquet files preserve types automatically.
150
151### Race/Ethnicity (Portal Integer Codes)
152
153| Code | Category |
154|------|----------|
155| `1` | White |
156| `2` | Black or African American |
157| `3` | Hispanic/Latino of any race |
158| `4` | Asian |
159| `5` | American Indian or Alaska Native |
160| `6` | Native Hawaiian or Other Pacific Islander |
161| `7` | Two or more races |
162| `99` | Total |
163
164> **Empirically observed values:** Codes `1`-`7` and `99` appear in CRDC data. Additional codes (`8` Nonresident alien, `9` Unknown, `20` Other) are defined in the codebook but are not observed in practice for K-12 CRDC datasets. See `variable-definitions.md` for the full codebook listing.
165
166### Sex (Portal Integer Codes)
167
168| Code | Category |
169|------|----------|
170| `1` | Male |
171| `2` | Female |
172| `3` | Non-binary/other (newer collections; rows exist but mostly contain -1 or -2 values) |
173| `99` | Total |
174
175### Disability Status (Portal Integer Codes)
176
177| Code | Category |
178|------|----------|
179| `0` | Students without disabilities |
180| `1` | Students with disabilities (served under IDEA) |
181| `2` | Students with Section 504 only |
182| `3` | Students not served under IDEA (includes 504-only and non-disabled) |
183| `4` | Students with disabilities (combined: IDEA + Section 504) |
184| `99` | Total |
185
186> **Note:** Not all disability codes appear in every dataset. Enrollment data typically has `[1, 2, 99]`; discipline data has `[0, 1, 2, 4, 99]`. Verify codes against the live codebook for your specific dataset.
187
188### English Learner Status (Portal Integer Codes)
189
190| Code | Category |
191|------|----------|
192| `1` | English learner (EL/LEP) |
193| `99` | All students |
194
195### Missing Data Codes
196
197| Code | Meaning | When Used |
198|------|---------|-----------|
199| `-1` | Missing | Data not reported by school/district |
200| `-2` | Not applicable | Item doesn't apply to this entity |
201| `-3` | Suppressed | Data suppressed for privacy (small cell sizes) |
202| `-9` | Skip pattern | Question not asked in this collection year (rare; check codebook) |
203| `null` | Not available | Value absent from dataset (e.g., `ncessch` is null for some schools) |
204
205> Verify these codes against the live codebook for your specific dataset. Use `get_codebook_url()` from `fetch-patterns.md`.
206
207## Data Access
208
209Datasets for CRDC are available via the Education Data Portal mirror system. See `datasets-reference.md` for canonical paths, `mirrors.yaml` for mirror configuration, and `fetch-patterns.md` for fetch code patterns including `fetch_from_mirrors()` and `fetch_yearly_from_mirrors()`.
210
211**Key datasets (6 of 22 total):**
212
213| Dataset | Path | Type | Codebook |
214|---------|------|------|----------|
215| Discipline | `crdc/schools_crdc_discipline_k12_{year}` | Yearly | `crdc/codebook_schools_crdc_discipline` |
216| AP/IB Enrollment | `crdc/schools_crdc_apib_enroll` | Single | `crdc/codebook_schools_crdc_ap-ib-enrollment` |
217| Enrollment | `crdc/schools_crdc_enrollment_k12_{year}` | Yearly | `crdc/codebook_schools_crdc_enrollment` |
218| Chronic Absenteeism | `crdc/schools_crdc_chronic_absenteeism_{year}` | Yearly | `crdc/codebook_schools_crdc_chronic-absenteeism` |
219| Harassment/Bullying | `crdc/schools_crdc_harass_bully_students_{year}` | Yearly | `crdc/codebook_schools_crdc_harrassment-bullying-students` |
220| Restraint/Seclusion | `crdc/schools_crdc_restraint_seclusion_students_{year}` | Yearly | `crdc/codebook_schools_crdc_restraint-seclusion-students` |
221
22222 CRDC datasets exist total (6 yearly, 16 single-file). See `datasets-reference.md` for the complete list with all paths and codebook references.
223
224> **CRDC naming note:** Some data file paths use concatenated names (e.g., `disciplineinstances`, `mathandscience`) while their codebook counterparts use underscored names (e.g., `discipline_instances`, `math_and_science`). Always use the exact paths from `datasets-reference.md`.
225
226Codebooks are `.xls` files co-located with data in all mirrors. Use `get_codebook_url()` from `fetch-patterns.md` to construct download URLs:
227
228```python
229from fetch_patterns import get_codebook_url
230url = get_codebook_url("crdc/codebook_schools_crdc_discipline")
231```
232
233> **Truth Hierarchy:** When interpreting variable values, apply this priority:
234> 1. **Actual data file** (what you observe in the parquet/CSV) -- this IS the truth
235> 2. **Live codebook** (.xls in mirror) -- authoritative documentation, may lag
236> 3. **This skill documentation** -- convenient summary, may drift from codebook
237>
238> If this documentation contradicts the codebook, trust the codebook. If the codebook contradicts observed data, trust the data and investigate.
239
240### Filtering
241
242```python
243import polars as pl
244
245# Filter to a single state (California) and disaggregated race groups
246df = df.filter(
247 (pl.col("fips") == 6) & # California
248 (pl.col("race") < 99) # Exclude totals row
249)
250
251# Filter to specific demographic intersection
252df = df.filter(
253 (pl.col("race") == 2) & # Black students
254 (pl.col("sex") == 99) & # Both sexes (total)
255 (pl.col("disability") == 99) # All disability statuses
256)
257```
258
259## Common Pitfalls
260
261| Pitfall | Issue | Solution |
262|---------|-------|----------|
263| **Using string codes** | Portal uses integers, not strings | `race == 2` not `race == "BL"` |
264| **Raw counts** | Different enrollment sizes | Use rates per 100/1000 students |
265| **Missing years** | Assuming annual data | Remember biennial schedule |
266| **COVID year** | 2020-21 not comparable | Flag or exclude from trends |
267| **Suppression** | Small cell suppression | Check suppression rates first |
268| **Sample years** | Early years sampled | Use 2015+ for national estimates |
269| **Definition drift** | Variables change over time | Check codebooks for each year |
270| **Forgetting code 99** | Including totals in calculations | Filter `race < 99` for disaggregated analysis |
271| **CSV type inference** | Polars infers `ncessch`/`leaid`/`crdc_id` as Int64 | Use `schema_overrides={"ncessch": pl.Utf8, "leaid": pl.Utf8, "crdc_id": pl.Utf8}` |
272
273## Equity Analysis Framework
274
275CRDC data is designed for civil rights analysis. Key analytical approaches:
276
277### Disparity Ratios
278
279```python
280import polars as pl
281
282# Calculate discipline disparity using Portal integer codes
283def discipline_disparity(df, discipline_var, group_a, group_b):
284 """
285 Calculate risk ratio between two groups.
286 Value > 1 indicates group_a has higher rate.
287
288 Args:
289 df: DataFrame with CRDC data
290 discipline_var: Column with discipline counts
291 group_a: Integer race code (e.g., 2 for Black)
292 group_b: Integer race code (e.g., 1 for White)
293
294 Example:
295 # Black vs White OSS disparity
296 disparity = discipline_disparity(df, 'students_susp_out_sch_single', 2, 1)
297 """
298 # Filter to each group (using integer codes)
299 df_a = df.filter(pl.col('race') == group_a)
300 df_b = df.filter(pl.col('race') == group_b)
301
302 # Calculate rates
303 rate_a = df_a.select(pl.col(discipline_var).sum()).item() / \
304 df_a.select(pl.col('enrollment_crdc').sum()).item()
305 rate_b = df_b.select(pl.col(discipline_var).sum()).item() / \
306 df_b.select(pl.col('enrollment_crdc').sum()).item()
307
308 return rate_a / rate_b
309
310# Example: Black (race=2) vs White (race=1) disparity
311# disparity = discipline_disparity(df, 'students_susp_out_sch_single', 2, 1)
312```
313
314### Composition vs. Representation
315
316- **Composition**: What share of suspended students are Black?
317- **Representation**: Are Black students suspended at higher rates than enrollment share?
318
319### Risk Ratios
320
321- Compare discipline/outcome rates across groups
322- Adjust for school-level factors when appropriate
323
324## Related Data Sources
325
326| Source | Relationship | When to Use |
327|--------|--------------|-------------|
328| `education-data-source-ccd` | School/district characteristics | Linking CRDC to school demographics, locale, Title I status (join on `ncessch` or `leaid`) |
329| `education-data-source-edfacts` | Assessment outcomes | Comparing discipline patterns to academic outcomes |
330| `education-data-explorer` | Parent discovery skill | Finding available CRDC endpoints and variables |
331| `education-data-query` | Data fetching | Downloading CRDC parquet/CSV files from mirrors |
332| `education-data-context` | General interpretation | Education data interpretation and citation generation |
333
334## Topic Index
335
336| Topic | Reference File |
337|-------|---------------|
338| Title VI (race) | `./references/civil-rights-context.md` |
339| Title IX (sex) | `./references/civil-rights-context.md` |
340| Section 504 (disability) | `./references/civil-rights-context.md` |
341| IDEA | `./references/civil-rights-context.md` |
342| OCR enforcement | `./references/civil-rights-context.md` |
343| Discipline data | `./references/data-elements.md` |
344| Restraint/seclusion | `./references/data-elements.md` |
345| Harassment | `./references/data-elements.md` |
346| Course access | `./references/data-elements.md` |
347| AP/IB/Gifted | `./references/data-elements.md` |
348| Chronic absenteeism | `./references/data-elements.md` |
349| Staffing | `./references/data-elements.md` |
350| Preschool | `./references/data-elements.md` |
351| Sampling approach | `./references/collection-methodology.md` |
352| Collection timeline | `./references/collection-methodology.md` |
353| Variable codes | `./references/variable-definitions.md` |
354| Suppression rules | `./references/data-quality.md` |
355| COVID impact | `./references/data-quality.md` |
356| Year changes | `./references/historical-changes.md` |