Nombre moyen d’élèves par division

Données - DEPP (Éducation nationale)

Auteur·rice
Code
source(here::here("_rinit.R"))
source(here::here("code", "basic_functions.R"))   # dataset_info_lines(), related_data()
invisible(Sys.setlocale("LC_TIME", "fr_FR.UTF-8"))
# cd ~/iCloud/website/data/depp; /usr/local/bin/R -e 'quarto::quarto_render("nombre-moyen-eleves-par-division.qmd")'

knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE,
                      fig.width = 8, fig.height = 4.6, dpi = 150)

div_path <- here::here("data", "depp", "nombre-moyen-eleves-par-division.parquet")
div <- arrow::read_parquet(div_path)

# Deux colonnes 2011 (« hors Mayotte » / « avec Mayotte ») : on garde la
# variante « hors Mayotte » pour la continuité avec les années antérieures.
div1 <- dplyr::filter(div, is.na(mention) | mention == "hors Mayotte")

annee_min <- min(div1$annee); annee_max <- max(div1$annee)

theme_depp <- ggplot2::theme_minimal(base_size = 12) +
  ggplot2::theme(plot.title    = ggplot2::element_text(face = "bold"),
                 plot.subtitle = ggplot2::element_text(colour = "grey35"),
                 panel.grid.minor = ggplot2::element_blank(),
                 plot.title.position = "plot",
                 legend.position = "bottom")

pal_secteur <- c("PUBLIC" = "#2b6cb0", "PRIVÉ SOUS CONTRAT" = "#dd6b20",
                 "PUBLIC + PRIVÉ SOUS CONTRAT" = "grey20")

Le nombre moyen d’élèves par division (par classe) dans le second degré, selon le niveau de formation et le secteur (public / privé sous contrat), de la rentrée 2005 à la rentrée 2025. Source : DEPP ; champ France (avec Mayotte à partir de 2011).

Ensemble du second degré, par secteur

Code
div1 |>
  dplyr::filter(niveau_formation == "Total") |>
  ggplot(aes(annee, valeur, colour = secteur)) +
  geom_line(linewidth = 0.9) +
  geom_point(size = 1.6) +
  scale_colour_manual(values = pal_secteur, name = NULL) +
  scale_x_continuous(breaks = scales::breaks_width(3)) +
  labs(title = "Nombre moyen d'élèves par division dans le second degré",
       subtitle = "Ensemble des formations, par secteur",
       x = NULL, y = "élèves / division") +
  theme_depp

Par niveau de formation (public + privé)

Code
div1 |>
  dplyr::filter(secteur == "PUBLIC + PRIVÉ SOUS CONTRAT", niveau_formation != "Total") |>
  ggplot(aes(annee, valeur, colour = niveau_formation)) +
  geom_line(linewidth = 0.9) +
  scale_colour_brewer(palette = "Dark2", name = NULL) +
  scale_x_continuous(breaks = scales::breaks_width(3)) +
  labs(title = "Nombre moyen d'élèves par division selon le niveau de formation",
       subtitle = "Public + privé sous contrat", x = NULL, y = "élèves / division") +
  theme_depp +
  ggplot2::guides(colour = ggplot2::guide_legend(nrow = 2))

Dernière rentrée

Code
div1 |>
  dplyr::filter(annee == annee_max, niveau_formation != "Total") |>
  dplyr::mutate(niveau_formation = forcats::fct_reorder(niveau_formation, valeur)) |>
  ggplot(aes(valeur, niveau_formation, fill = secteur)) +
  geom_col(position = ggplot2::position_dodge(width = 0.75), width = 0.7) +
  scale_fill_manual(values = pal_secteur, name = NULL) +
  labs(title = sprintf("Nombre moyen d'élèves par division à la rentrée %d", annee_max),
       x = "élèves / division", y = NULL) +
  theme_depp

Toutes les données

Code
div |>
  dplyr::transmute(Secteur = secteur, `Niveau de formation` = niveau_formation,
                   Année = annee, Mention = mention, `Élèves / division` = valeur) |>
  dplyr::arrange(dplyr::desc(Année), Secteur, `Niveau de formation`) |>
  reactable::reactable(
    searchable = TRUE, filterable = TRUE, pagination = TRUE,
    defaultPageSize = 15, compact = TRUE, resizable = TRUE, highlight = TRUE, wrap = TRUE,
    defaultColDef = reactable::colDef(
      align = "left", headerStyle = list(fontWeight = "bold"),
      style = list(whiteSpace = "normal", wordBreak = "break-word"))
  )

Source & données

Code
tibble::tibble(
  ` ` = c("Série", "Producteur", "Champ", "Fichier", "Mise à jour", "Observations"),
  `  ` = c(
    "[Le nombre moyen d'élèves par division](https://www.education.gouv.fr/les-effectifs-du-second-degre-1039) — DEPP",
    "Direction de l'Évaluation, de la Prospective et de la Performance (DEPP), ministère de l'Éducation nationale",
    "France (avec Mayotte à partir de 2011) ; secteurs public et privé sous contrat",
    sprintf("`data/depp/nombre-moyen-eleves-par-division.parquet` (%s ko)", round(file.size(div_path) / 1024)),
    format(as.Date(file.mtime(div_path)), "%d %B %Y"),
    sprintf("%d lignes, %d–%d", nrow(div), min(div$annee), max(div$annee))
  )
) |>
  gt::gt() |> gt::fmt_markdown(columns = `  `) |>
  gt::tab_options(table.width = "100%", column_labels.hidden = TRUE)
Série Le nombre moyen d’élèves par division — DEPP
Producteur Direction de l’Évaluation, de la Prospective et de la Performance (DEPP), ministère de l’Éducation nationale
Champ France (avec Mayotte à partir de 2011) ; secteurs public et privé sous contrat
Fichier data/depp/nombre-moyen-eleves-par-division.parquet (13 ko)
Mise à jour 06 septembre 2026
Observations 396 lignes, 2005–2025