Skip to contents

Indiana’s 1.03 million public school students. 19 years of enrollment. ILEARN and ISTEP+ assessments. School directory. One function call.

Part of the njschooldata family of state education data packages.

Full documentation – all 30 stories with charts, getting-started guide, and complete function reference.

Highlights

library(inschooldata)
library(ggplot2)
library(dplyr)
library(scales)

enr <- fetch_enr_multi(2015:2024, use_cache = TRUE)

enr_long <- fetch_enr_multi(c(2006, 2011, 2016, 2021, 2024), use_cache = TRUE)

enr_current <- fetch_enr(2024, use_cache = TRUE)

1. Gary lost 73% of its students since 2006

Gary Community School Corp went from 15,119 students in 2006 to just 4,025 in 2024, one of the steepest enrollment declines of any school district in America.

gary <- enr_long %>%
  filter(is_corporation, grepl("Gary Community", corporation_name, ignore.case = TRUE),
         subgroup == "total_enrollment", grade_level == "TOTAL")

gary %>% select(end_year, corporation_name, n_students)
#> # A tibble: 5 x 3
#>   end_year corporation_name           n_students
#>      <dbl> <chr>                           <dbl>
#> 1     2006 Gary Community School Corp      15119
#> 2     2011 Gary Community School Corp      11161
#> 3     2016 Gary Community School Corp       6480
#> 4     2021 Gary Community School Corp       4770
#> 5     2024 Gary Community School Corp       4025
Gary Schools Collapse
Gary Schools Collapse

(source)

2. Math proficiency collapses in middle school

Grade 3 Math proficiency starts at 52% but falls to just 31% by Grade 8. ELA is more stable across grades. The Math decline suggests cumulative skill gaps that compound over time.

library(tidyr)

# Get available assessment years
years_info <- get_available_assessment_years()
available_years <- years_info$years

# Fetch recent years of data (corporation level to reduce load)
recent_years <- available_years[available_years >= 2019]
assess_multi <- fetch_assessment_multi(recent_years, level = "corporation", use_cache = TRUE)

# Get current year data (2024 for reliable data)
current_year <- 2024
assess_current <- fetch_assessment(current_year, level = "corporation", use_cache = TRUE)
grade_prof <- assess_current %>%
  filter(subject %in% c("ELA", "Math"),
         grade %in% c("3", "4", "5", "6", "7", "8"),
         proficiency_level %in% c("proficient", "total_tested")) %>%
  pivot_wider(id_cols = c(corporation_id, subject, grade),
              names_from = proficiency_level,
              values_from = value) %>%
  group_by(subject, grade) %>%
  summarize(proficient = sum(proficient, na.rm = TRUE),
            tested = sum(total_tested, na.rm = TRUE),
            .groups = "drop") %>%
  mutate(pct = proficient / tested * 100)

grade_prof %>% select(subject, grade, pct)
#> # A tibble: 12 x 3
#>    subject grade   pct
#>    <chr>   <chr> <dbl>
#>  1 ELA     3      38.3
#>  2 ELA     4      41.5
#>  3 ELA     5      40.0
#>  4 ELA     6      40.8
#>  5 ELA     7      41.4
#>  6 ELA     8      42.2
#>  7 Math    3      52.1
#>  8 Math    4      47.8
#>  9 Math    5      40.7
#> 10 Math    6      37.9
#> 11 Math    7      33.6
#> 12 Math    8      31.2
Math Proficiency Collapses
Math Proficiency Collapses

(source)

3. Hispanic enrollment has more than doubled

Hispanic students grew from 5.8% to 14.6% of enrollment since 2006, a 2.5x increase. Northwest Indiana and Indianapolis drive this demographic shift.

hispanic <- enr_long %>%
  filter(is_state, grade_level == "TOTAL", subgroup == "hispanic")

hispanic %>% select(end_year, n_students, pct) %>%
  mutate(pct_display = round(pct * 100, 1))
#> # A tibble: 5 x 4
#>   end_year n_students   pct pct_display
#>      <dbl>      <dbl> <dbl>       <dbl>
#> 1     2006      62718 0.058         5.8
#> 2     2011      87790 0.084         8.4
#> 3     2016     116671 0.111        11.1
#> 4     2021     135497 0.131        13.1
#> 5     2024     151031 0.146        14.6
Hispanic Student Population
Hispanic Student Population

(source)

Data Taxonomy

Category Years Function Details
Enrollment 2006-2024 fetch_enr() / fetch_enr_multi() State, corporation, school. Race, gender, FRPL, SpEd, LEP
Assessments 2014-2025 fetch_assessment() / fetch_assessment_multi() Corporation, school. ELA, Math, Science, Social Studies. ILEARN (2019+) / ISTEP+ (2014-2018)
Graduation Not yet available
Directory 2025-2026 fetch_directory() Corporation, school, non-public. Address, phone, grades served
Per-Pupil Spending Not yet available
Accountability Not yet available
Chronic Absence Not yet available
EL Progress Not yet available
Special Ed Not yet available

See the full data category taxonomy for what each category covers.

Quick Start

R

# install.packages("remotes")
remotes::install_github("almartin82/inschooldata")
library(inschooldata)
library(dplyr)

# Fetch one year
enr_2024 <- fetch_enr(2024)

# Fetch multiple years
enr_recent <- fetch_enr_multi(2020:2024)

# State totals
enr_2024 %>%
  filter(is_state, subgroup == "total_enrollment", grade_level == "TOTAL")

# Fetch assessment data (ILEARN)
assess_2024 <- fetch_assessment(2024, level = "corporation")

Python

pip install git+https://github.com/almartin82/inschooldata.git#subdirectory=pyinschooldata
import pyinschooldata as ind

# Fetch one year
enr_2024 = ind.fetch_enr(2024)

# State totals
state_total = enr_2024[
    (enr_2024['is_state'] == True) &
    (enr_2024['subgroup'] == 'total_enrollment') &
    (enr_2024['grade_level'] == 'TOTAL')
]

Explore More

Full analysis with 30 stories: - Enrollment trends – 15 stories - Assessment trends – 15 stories - Function reference

Data Notes

Source: Indiana Department of Education Data Center: https://www.in.gov/doe/it/data-center-and-reports/

Available Years: - Enrollment: 2006-2024 (19 years) - Assessment: 2014-2025 (ISTEP+ 2014-2018, ILEARN 2019-2025; no 2020 due to COVID waiver) - Directory: 2025-2026

Suppression: Counts fewer than 10 are suppressed with “*” and reported as NA.

Census Day: October 1 (ADM – Average Daily Membership).

Notes: Indiana calls its districts “corporations” (school corporations). Corporation IDs are 4 digits (e.g., 5385 for Indianapolis Public Schools).

Deeper Dive

4. Indiana lost 55,000 students since 2006

Indiana enrollment peaked above 1.08 million in 2006 and has steadily declined to just over 1.03 million. The state lost about 5% of its public school enrollment over two decades.

state_trend <- enr %>%
  filter(is_state, grade_level == "TOTAL", subgroup == "total_enrollment")

state_trend %>% select(end_year, n_students)
#> # A tibble: 10 x 2
#>    end_year n_students
#>       <dbl>      <dbl>
#>  1     2015    1006766
#>  2     2016    1046527
#>  3     2017    1049292
#>  4     2018    1053809
#>  5     2019    1055354
#>  6     2020    1051051
#>  7     2021    1033781
#>  8     2022    1036697
#>  9     2023    1036123
#> 10     2024    1032724
Indiana Public School Enrollment
Indiana Public School Enrollment

(source)

5. Indianapolis Public Schools has lost over 15,000 students

IPS enrollment dropped from 37,554 in 2006 to under 22,000 by 2024 – a 42% decline. Charter schools and suburban flight continue to reshape Indianapolis education.

ips <- enr_long %>%
  filter(is_corporation, grepl("Indianapolis Public Schools", corporation_name),
         subgroup == "total_enrollment", grade_level == "TOTAL")

ips %>% select(end_year, corporation_name, n_students)
#> # A tibble: 5 x 3
#>   end_year corporation_name            n_students
#>      <dbl> <chr>                            <dbl>
#> 1     2006 Indianapolis Public Schools      37554
#> 2     2011 Indianapolis Public Schools      33080
#> 3     2016 Indianapolis Public Schools      29583
#> 4     2021 Indianapolis Public Schools      22930
#> 5     2024 Indianapolis Public Schools      21858
Indianapolis Public Schools Decline
Indianapolis Public Schools Decline

(source)

6. Hamilton County added 16,000 students since 2006

Carmel, Fishers, Westfield, and Noblesville suburbs are booming. These four Hamilton County corporations grew from about 42,000 to nearly 58,000 students – a 38% increase.

hamilton <- c("Carmel Clay Schools", "Hamilton Southeastern Schools",
              "Noblesville Schools", "Westfield-Washington Schools")

hamilton_trend <- enr %>%
  filter(corporation_name %in% hamilton, is_corporation,
         grade_level == "TOTAL", subgroup == "total_enrollment") %>%
  group_by(end_year) %>%
  summarize(total = sum(n_students, na.rm = TRUE), .groups = "drop")

hamilton_trend
#> # A tibble: 10 x 2
#>    end_year total
#>       <dbl> <dbl>
#>  1     2015 53656
#>  2     2016 54457
#>  3     2017 55465
#>  4     2018 56306
#>  5     2019 56681
#>  6     2020 57958
#>  7     2021 57117
#>  8     2022 57281
#>  9     2023 57442
#> 10     2024 57687
Hamilton County Growth
Hamilton County Growth

(source)

7. COVID erased 5,600 kindergartners in one year

Indiana kindergarten enrollment dropped from 78,649 in 2020 to 72,993 in 2021 – a loss of nearly 5,700 students. Recovery has been uneven.

k_trend <- enr %>%
  filter(is_state, subgroup == "total_enrollment",
         grade_level %in% c("K", "01", "06", "12")) %>%
  mutate(grade_label = case_when(
    grade_level == "K" ~ "Kindergarten",
    grade_level == "01" ~ "Grade 1",
    grade_level == "06" ~ "Grade 6",
    grade_level == "12" ~ "Grade 12"
  ))

k_trend %>%
  filter(grade_level == "K") %>%
  select(end_year, n_students)
#> # A tibble: 10 x 2
#>    end_year n_students
#>       <dbl>      <dbl>
#>  1     2015      76000
#>  2     2016      77038
#>  3     2017      76870
#>  4     2018      77905
#>  5     2019      75746
#>  6     2020      78649
#>  7     2021      72993
#>  8     2022      76514
#>  9     2023      74124
#> 10     2024      72955
COVID Kindergarten Impact
COVID Kindergarten Impact

(source)

8. White enrollment dropped 15 points while Hispanic surged

Indiana’s racial composition shifted dramatically since 2006. White students went from 78% to 63% while Hispanic students rose from 6% to 15%. Black enrollment has been comparatively stable.

race_trend <- enr_long %>%
  filter(is_state, grade_level == "TOTAL", subgroup %in% c("black", "hispanic", "white")) %>%
  mutate(subgroup = factor(subgroup, levels = c("white", "black", "hispanic"),
                           labels = c("White", "Black", "Hispanic")))

race_trend %>%
  select(end_year, subgroup, pct) %>%
  mutate(pct = round(pct * 100, 1))
#> # A tibble: 15 x 3
#>    end_year subgroup   pct
#>       <dbl> <fct>    <dbl>
#>  1     2006 White     78.0
#>  2     2006 Black     11.5
#>  3     2006 Hispanic   5.8
#>  4     2011 White     73.1
#>  5     2011 Black     12.1
#>  6     2011 Hispanic   8.4
#>  7     2016 White     69.3
#>  8     2016 Black     12.4
#>  9     2016 Hispanic  11.1
#> 10     2021 White     65.8
#> 11     2021 Black     12.9
#> 12     2021 Hispanic  13.1
#> 13     2024 White     63.2
#> 14     2024 Black     13.4
#> 15     2024 Hispanic  14.6
Racial Demographics
Racial Demographics

(source)

9. Indiana Connections Academy is the largest virtual school

Indiana Connections Academy serves over 5,400 students, making it by far the largest virtual school in the state.

virtual <- enr_current %>%
  filter(grepl("Virtual|Online|Connections|Digital", corporation_name, ignore.case = TRUE),
         grade_level == "TOTAL", subgroup == "total_enrollment") %>%
  distinct(corporation_name, .keep_all = TRUE) %>%
  arrange(desc(n_students)) %>%
  head(10) %>%
  mutate(corp_label = reorder(corporation_name, n_students))

virtual %>% select(corporation_name, n_students)
#> # A tibble: 4 x 2
#>   corporation_name                 n_students
#>   <chr>                                 <dbl>
#> 1 Indiana Connections Academy            5475
#> 2 Indiana Connections Career Academy      724
#> 3 Phalen Virtual Leadership Academy       289
#> 4 Paramount Online Academy                194
Virtual Schools
Virtual Schools

(source)

10. Evansville is slowly losing students

Evansville Vanderburgh School Corp peaked around 22,800 and has gradually declined to about 21,400 – a modest but steady loss of about 5% over the past decade.

evansville <- enr %>%
  filter(is_corporation, grepl("Evansville Vanderburgh", corporation_name, ignore.case = TRUE),
         subgroup == "total_enrollment", grade_level == "TOTAL")

evansville %>% select(end_year, corporation_name, n_students)
#> # A tibble: 10 x 3
#>    end_year corporation_name                   n_students
#>       <dbl> <chr>                                   <dbl>
#>  1     2015 Evansville Vanderburgh Sch Corp         22474
#>  2     2016 Evansville Vanderburgh Sch Corp         22799
#>  3     2017 Evansville Vanderburgh School Corp      22801
#>  4     2018 Evansville Vanderburgh School Corp      22844
#>  5     2019 Evansville Vanderburgh School Corp      22601
#>  6     2020 Evansville Vanderburgh School Corp      22822
#>  7     2021 Evansville Vanderburgh School Corp      22192
#>  8     2022 Evansville Vanderburgh School Corp      21942
#>  9     2023 Evansville Vanderburgh School Corp      21741
#> 10     2024 Evansville Vanderburgh School Corp      21442
Evansville Decline
Evansville Decline

(source)

11. Indiana’s school system has grown more fragmented

Indiana went from 330 corporations in 2006 to 418 in 2024. Rather than consolidating, the state has added charter schools and virtual academies that count as new corporations.

corp_counts <- enr_long %>%
  filter(is_corporation, subgroup == "total_enrollment", grade_level == "TOTAL") %>%
  group_by(end_year) %>%
  summarize(n_corporations = n(), .groups = "drop")

corp_counts
#> # A tibble: 5 x 2
#>   end_year n_corporations
#>      <dbl>          <int>
#> 1     2006            330
#> 2     2011            357
#> 3     2016            386
#> 4     2021            406
#> 5     2024            418
Corporation Growth
Corporation Growth

(source)

12. Fort Wayne is Indiana’s largest district at 28,500 students

Fort Wayne Community Schools is the largest district in Indiana with about 28,500 students, edging out Indianapolis Public Schools which has fallen to around 21,900.

fort_wayne <- enr %>%
  filter(is_corporation, grepl("Fort Wayne Community", corporation_name, ignore.case = TRUE),
         subgroup == "total_enrollment", grade_level == "TOTAL")

fort_wayne %>% select(end_year, corporation_name, n_students)
#> # A tibble: 10 x 3
#>    end_year corporation_name             n_students
#>       <dbl> <chr>                             <dbl>
#>  1     2015 Fort Wayne Community Schools      30429
#>  2     2016 Fort Wayne Community Schools      29483
#>  3     2017 Fort Wayne Community Schools      29377
#>  4     2018 Fort Wayne Community Schools      29469
#>  5     2019 Fort Wayne Community Schools      29404
#>  6     2020 Fort Wayne Community Schools      29486
#>  7     2021 Fort Wayne Community Schools      28460
#>  8     2022 Fort Wayne Community Schools      28778
#>  9     2023 Fort Wayne Community Schools      28613
#> 10     2024 Fort Wayne Community Schools      28504
Fort Wayne Community Schools
Fort Wayne Community Schools

(source)

13. Black enrollment share has risen slightly since 2006

Despite a common misconception, Indiana’s Black student share has actually edged up from 11.5% in 2006 to 13.4% in 2024, while Black student counts grew from 125,000 to 138,000.

black_trend <- enr_long %>%
  filter(is_state, grade_level == "TOTAL", subgroup == "black")

black_trend %>% select(end_year, n_students, pct) %>%
  mutate(pct_display = round(pct * 100, 1))
#> # A tibble: 5 x 4
#>   end_year n_students   pct pct_display
#>      <dbl>      <dbl> <dbl>       <dbl>
#> 1     2006     125305 0.115        11.5
#> 2     2011     126350 0.121        12.1
#> 3     2016     129809 0.124        12.4
#> 4     2021     132917 0.129        12.9
#> 5     2024     137884 0.134        13.4
Black Student Trend
Black Student Trend

(source)

14. South Bend has lost a third of its students

South Bend Community School Corp went from nearly 21,900 students in 2006 to about 14,500 in 2024 – a loss of 34%.

south_bend <- enr_long %>%
  filter(is_corporation, grepl("South Bend Community", corporation_name, ignore.case = TRUE),
         subgroup == "total_enrollment", grade_level == "TOTAL")

south_bend %>% select(end_year, corporation_name, n_students)
#> # A tibble: 5 x 3
#>   end_year corporation_name                n_students
#>      <dbl> <chr>                                <dbl>
#> 1     2006 South Bend Community Sch Corp        21861
#> 2     2011 South Bend Community Sch Corp        19948
#> 3     2016 South Bend Community Sch Corp        18680
#> 4     2021 South Bend Community School Corp     16302
#> 5     2024 South Bend Community School Corp     14484
South Bend Decline
South Bend Decline

(source)

15. Asian students are the fastest-growing demographic in percentage terms

Asian enrollment went from 1.6% to 3.0% of Indiana’s total since 2011. While a smaller population than Hispanic growth, it represents a near-doubling in share.

asian_trend <- enr_long %>%
  filter(is_state, grade_level == "TOTAL", subgroup == "asian")

asian_trend %>% select(end_year, n_students, pct) %>%
  mutate(pct_display = round(pct * 100, 1))
#> # A tibble: 5 x 4
#>   end_year n_students     pct pct_display
#>      <dbl>      <dbl>   <dbl>       <dbl>
#> 1     2006          0 0.000          0.0
#> 2     2011      16970 0.016          1.6
#> 3     2016      22519 0.022          2.2
#> 4     2021      28265 0.027          2.7
#> 5     2024      31203 0.030          3.0
Asian Student Growth
Asian Student Growth

(source)

16. The top 20 corporations serve 29% of all students

The 20 largest corporations educate nearly 300,000 of Indiana’s 1.03 million students. Fort Wayne, Indianapolis, and Evansville lead the pack.

top_corps <- enr_current %>%
  filter(is_corporation, grade_level == "TOTAL", subgroup == "total_enrollment") %>%
  arrange(desc(n_students)) %>%
  head(20) %>%
  mutate(corp_label = reorder(corporation_name, n_students))

top_corps %>% select(corporation_name, n_students)
#> # A tibble: 20 x 2
#>    corporation_name                   n_students
#>    <chr>                                   <dbl>
#>  1 Fort Wayne Community Schools            28504
#>  2 Indianapolis Public Schools             21858
#>  3 Evansville Vanderburgh School Corp      21442
#>  4 Hamilton Southeastern Schools           21299
#>  5 MSD Lawrence Township                   16502
#>  6 Carmel Clay Schools                     16116
#>  7 Perry Township Schools                  16044
#>  8 MSD Wayne Township                      15798
#>  9 South Bend Community School Corp        14484
#> 10 Tippecanoe School Corp                  13526
Top 20 Corporations
Top 20 Corporations

(source)

17. Only 41% of Indiana students are proficient in ELA

Despite years of reform efforts, fewer than half of Indiana students demonstrate proficiency in English/Language Arts. The state faces a significant literacy challenge.

ela_state <- assess_current %>%
  filter(subject == "ELA", grade == "All") %>%
  group_by(proficiency_level) %>%
  summarize(total = sum(value, na.rm = TRUE), .groups = "drop") %>%
  filter(proficiency_level %in% c("total_tested", "proficient"))

state_ela_pct <- ela_state$total[ela_state$proficiency_level == "proficient"] /
                 ela_state$total[ela_state$proficiency_level == "total_tested"] * 100

cat("Statewide ELA Proficiency:", round(state_ela_pct, 1), "%\n")
#> Statewide ELA Proficiency: 40.7 %
Indiana ELA Proficiency Distribution
Indiana ELA Proficiency Distribution

(source)

18. Math proficiency is nearly identical to ELA

Math and ELA proficiency rates are nearly identical at about 41% statewide. Both subjects show a majority of students falling short of grade-level expectations.

math_state <- assess_current %>%
  filter(subject == "Math", grade == "All") %>%
  group_by(proficiency_level) %>%
  summarize(total = sum(value, na.rm = TRUE), .groups = "drop") %>%
  filter(proficiency_level %in% c("total_tested", "proficient"))

state_math_pct <- math_state$total[math_state$proficiency_level == "proficient"] /
                  math_state$total[math_state$proficiency_level == "total_tested"] * 100

cat("Statewide Math Proficiency:", round(state_math_pct, 1), "%\n")
#> Statewide Math Proficiency: 40.5 %
Indiana Math Proficiency Distribution
Indiana Math Proficiency Distribution

(source)

19. Fort Wayne proficiency is 12 points below state average

Fort Wayne Community Schools, Indiana’s largest district, has ELA proficiency rates well below the state average, reflecting the challenges facing urban districts.

fw_ela <- assess_current %>%
  filter(corporation_id == "0235", subject == "ELA", grade == "All",
         proficiency_level %in% c("proficient", "total_tested")) %>%
  pivot_wider(names_from = proficiency_level, values_from = value) %>%
  summarize(proficient = sum(proficient, na.rm = TRUE),
            tested = sum(total_tested, na.rm = TRUE)) %>%
  mutate(pct = proficient / tested * 100)

cat("Fort Wayne ELA Proficiency:", round(fw_ela$pct, 1), "%\n")
cat("Difference from state:", round(fw_ela$pct - state_ela_pct, 1), "percentage points\n")
#> Fort Wayne ELA Proficiency: 28.8 %
#> Difference from state: -11.9 percentage points

20. Carmel leads Indiana with nearly 70% proficiency

Carmel Clay Schools consistently posts the highest proficiency rates among large districts in Indiana. Nearly 70% of Carmel students are proficient in both ELA and Math.

carmel <- assess_current %>%
  filter(grepl("Carmel Clay", corporation_name, ignore.case = TRUE),
         grade == "All",
         subject %in% c("ELA", "Math"),
         proficiency_level %in% c("proficient", "total_tested")) %>%
  pivot_wider(id_cols = subject, names_from = proficiency_level, values_from = value) %>%
  mutate(pct = proficient / total_tested * 100)

cat("Carmel Clay Schools Proficiency:\n")
print(carmel[, c("subject", "pct")])
#> Carmel Clay Schools Proficiency:
#> # A tibble: 2 x 2
#>   subject   pct
#>   <chr>   <dbl>
#> 1 ELA      69.6
#> 2 Math     70.9

21. The urban-suburban gap exceeds 40 percentage points

The gap between suburban Carmel (70% proficiency) and urban Indianapolis (21% proficiency) is nearly 50 percentage points in ELA. Indiana has one of the largest urban-suburban achievement gaps in the Midwest.

urban_suburban <- assess_current %>%
  filter(
    (corporation_id == "5385" |
     corporation_id == "0235" |
     grepl("Carmel Clay", corporation_name, ignore.case = TRUE) |
     grepl("Hamilton Southeastern", corporation_name, ignore.case = TRUE)),
    subject == "ELA", grade == "All",
    proficiency_level %in% c("proficient", "total_tested")) %>%
  pivot_wider(id_cols = corporation_name, names_from = proficiency_level, values_from = value) %>%
  mutate(pct = proficient / total_tested * 100) %>%
  arrange(desc(pct))

print(urban_suburban[, c("corporation_name", "pct")])
#> # A tibble: 4 x 2
#>   corporation_name                pct
#>   <chr>                         <dbl>
#> 1 Carmel Clay Schools            69.6
#> 2 Hamilton Southeastern Schools  61.2
#> 3 Fort Wayne Community Schools   28.8
#> 4 Indianapolis Public Schools    20.7

22. Indianapolis has the lowest proficiency among large districts

Indianapolis Public Schools has the lowest proficiency rates among Indiana’s largest districts, with just 21% of students proficient in ELA.

large_districts <- assess_current %>%
  filter(subject == "ELA", grade == "All",
         proficiency_level %in% c("proficient", "total_tested")) %>%
  pivot_wider(id_cols = c(corporation_id, corporation_name),
              names_from = proficiency_level, values_from = value) %>%
  filter(!is.na(proficient), !is.na(total_tested), total_tested > 5000) %>%
  mutate(pct = proficient / total_tested * 100) %>%
  arrange(desc(total_tested)) %>%
  head(10)

large_districts %>% select(corporation_name, total_tested, pct)
#> # A tibble: 10 x 3
#>    corporation_name                   total_tested   pct
#>    <chr>                                     <dbl> <dbl>
#>  1 Fort Wayne Community Schools              12282  28.8
#>  2 Indianapolis Public Schools                9942  20.7
#>  3 Archdiocese of Indianapolis                9547  60.3
#>  4 Evansville Vanderburgh School Corp         9539  37.2
#>  5 Hamilton Southeastern Schools              9508  61.2
#>  6 Carmel Clay Schools                        7478  69.6
#>  7 Perry Township Schools                     7441  38.9
#>  8 MSD Lawrence Township                      7136  27.1
#>  9 MSD Wayne Township                         6888  21.2
#> 10 Tippecanoe School Corp                     6257  46.7
ELA Proficiency: Indiana’s Largest Districts
ELA Proficiency: Indiana’s Largest Districts

(source)

23. Proficiency crashed after COVID and has not recovered

Proficiency was near 48% in the first ILEARN year (2019), then dropped to 37-40% after the COVID disruption in 2020. Rates have remained flat since 2021.

if (length(recent_years) > 1) {
  trend <- assess_multi %>%
    filter(subject %in% c("ELA", "Math"), grade == "All",
           proficiency_level %in% c("proficient", "total_tested")) %>%
    group_by(end_year, subject, proficiency_level) %>%
    summarize(total = sum(value, na.rm = TRUE), .groups = "drop") %>%
    pivot_wider(names_from = proficiency_level, values_from = total) %>%
    mutate(pct = proficient / total_tested * 100)

  trend %>% select(end_year, subject, pct)
}
#> # A tibble: 12 x 3
#>    end_year subject   pct
#>       <int> <chr>   <dbl>
#>  1     2019 ELA      48.4
#>  2     2019 Math     48.5
#>  3     2021 ELA      40.2
#>  4     2021 Math     36.7
#>  5     2022 ELA      41.0
#>  6     2022 Math     39.3
#>  7     2023 ELA      40.4
#>  8     2023 Math     40.7
#>  9     2024 ELA      40.7
#> 10     2024 Math     40.5
#> 11     2025 ELA      40.3
#> 12     2025 Math     41.9
Indiana Proficiency Trend
Indiana Proficiency Trend

(source)

24. Over 36% of students score Below Proficiency

More than a third of Indiana students score Below Proficiency – the lowest level – in both ELA and Math. These students are significantly behind grade-level expectations.

below <- assess_current %>%
  filter(subject %in% c("ELA", "Math"), grade == "All",
         proficiency_level %in% c("below", "total_tested")) %>%
  group_by(subject, proficiency_level) %>%
  summarize(total = sum(value, na.rm = TRUE), .groups = "drop") %>%
  pivot_wider(names_from = proficiency_level, values_from = total) %>%
  mutate(pct = below / total_tested * 100)

cat("Percent Below Proficiency:\n")
print(below[, c("subject", "pct")])
#> Percent Below Proficiency:
#> # A tibble: 2 x 2
#>   subject   pct
#>   <chr>   <dbl>
#> 1 ELA      36.1
#> 2 Math     37.3

25. Brownsburg matches Carmel at the top

The top 10 highest-performing districts are dominated by suburban communities. Brownsburg Community School Corp ties Carmel Clay at nearly 70% ELA proficiency.

top_10 <- assess_current %>%
  filter(subject == "ELA", grade == "All",
         proficiency_level %in% c("proficient", "total_tested")) %>%
  pivot_wider(id_cols = c(corporation_id, corporation_name),
              names_from = proficiency_level, values_from = value) %>%
  filter(!is.na(proficient), !is.na(total_tested), total_tested > 1000) %>%
  mutate(pct = proficient / total_tested * 100) %>%
  arrange(desc(pct)) %>%
  head(10)

top_10 %>% select(corporation_name, pct)
#> # A tibble: 10 x 2
#>    corporation_name                    pct
#>    <chr>                             <dbl>
#>  1 Carmel Clay Schools                69.6
#>  2 Brownsburg Community School Corp   69.6
#>  3 Diocese of Evansville              68.6
#>  4 School Town of Munster             66.5
#>  5 Zionsville Community Schools       65.3
#>  6 West Lafayette Com School Corp     64.5
#>  7 Diocese of Lafayette Catholic Sch  64.0
#>  8 Duneland School Corporation        63.6
#>  9 Penn-Harris-Madison School Corp    62.2
#> 10 Valparaiso Community Schools       61.4
Top 10 Districts by ELA Proficiency
Top 10 Districts by ELA Proficiency

(source)

26. Gary has lowest proficiency of any district

Gary Community School Corp has proficiency rates under 10% in both ELA and Math – among the lowest in the state for districts of any size.

gary <- assess_current %>%
  filter(grepl("Gary Community", corporation_name, ignore.case = TRUE),
         subject %in% c("ELA", "Math"), grade == "All",
         proficiency_level %in% c("proficient", "total_tested")) %>%
  pivot_wider(id_cols = subject, names_from = proficiency_level, values_from = value) %>%
  mutate(pct = proficient / total_tested * 100)

cat("Gary Community Schools Proficiency:\n")
if (nrow(gary) > 0) {
  print(gary[, c("subject", "pct")])
}
#> Gary Community Schools Proficiency:
#> # A tibble: 2 x 2
#>   subject   pct
#>   <chr>   <dbl>
#> 1 ELA      9.76
#> 2 Math     5.15

27. Grade 3 ELA proficiency is only 38%

Grade 3 reading proficiency is a critical milestone. More than 60% of Indiana third-graders are not reading proficiently – a warning sign for their academic futures.

g3_ela <- assess_current %>%
  filter(subject == "ELA", grade == "3",
         proficiency_level %in% c("proficient", "total_tested")) %>%
  group_by(proficiency_level) %>%
  summarize(total = sum(value, na.rm = TRUE), .groups = "drop") %>%
  pivot_wider(names_from = proficiency_level, values_from = total) %>%
  mutate(pct = proficient / total_tested * 100)

cat("Grade 3 ELA Proficiency:", round(g3_ela$pct, 1), "%\n")
cat("Students NOT proficient at Grade 3:", round(100 - g3_ela$pct, 1), "%\n")
#> Grade 3 ELA Proficiency: 38.3 %
#> Students NOT proficient at Grade 3: 61.7 %

28. Science proficiency is tested in grades 3-5

Indiana tests Science in grades 3, 4, and 5 on ILEARN. About 43% of students are proficient (At or Above) in Science.

science_dist <- assess_current %>%
  filter(subject == "Science",
         proficiency_level %in% c("below", "approaching", "at", "above")) %>%
  group_by(proficiency_level) %>%
  summarize(n = sum(value, na.rm = TRUE), .groups = "drop") %>%
  filter(n > 0) %>%
  mutate(pct = n / sum(n) * 100,
         level = factor(proficiency_level,
                       levels = c("below", "approaching", "at", "above"),
                       labels = c("Below", "Approaching", "At", "Above")))

science_dist %>% select(level, pct)
#> # A tibble: 4 x 2
#>   level         pct
#>   <fct>       <dbl>
#> 1 Above        17.3
#> 2 Approaching  37.0
#> 3 At           25.5
#> 4 Below        20.2
Indiana Science Proficiency Distribution
Indiana Science Proficiency Distribution

(source)

29. Social Studies has the highest Below Proficiency rate

Indiana tests Social Studies on ILEARN in grade 3 only. Nearly 45% of students score Below Proficiency – the highest below-proficiency rate of any subject tested.

ss_dist <- assess_current %>%
  filter(subject == "Social Studies",
         proficiency_level %in% c("below", "approaching", "at", "above")) %>%
  group_by(proficiency_level) %>%
  summarize(n = sum(value, na.rm = TRUE), .groups = "drop") %>%
  filter(n > 0) %>%
  mutate(pct = n / sum(n) * 100,
         level = factor(proficiency_level,
                       levels = c("below", "approaching", "at", "above"),
                       labels = c("Below", "Approaching", "At", "Above")))

ss_dist %>% select(level, pct)
#> # A tibble: 4 x 2
#>   level         pct
#>   <fct>       <dbl>
#> 1 Above        16.3
#> 2 Approaching  17.5
#> 3 At           21.5
#> 4 Below        44.7
Indiana Social Studies Proficiency
Indiana Social Studies Proficiency

(source)

30. Nearly 481,000 students take ILEARN each year

Indiana tests approximately 481,000 students in grades 3-8 in ELA alone. Across all subjects, the ILEARN assessment is one of the largest standardized testing programs in the Midwest.

tested <- assess_current %>%
  filter(subject == "ELA", grade == "All", proficiency_level == "total_tested") %>%
  summarize(total = sum(value, na.rm = TRUE))

cat("Total students tested in ELA:", format(tested$total, big.mark = ","), "\n")
#> Total students tested in ELA: 480,764