Les effectifs d’apprentis par niveau de formation selon l’académie ou la région

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("effectifs-apprentis-par-niveau-academie-region.qmd")'
# Page regénérée par data/depp/_depp_pages.R — éditer le template là-bas.

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

dpp_path <- here::here("data", "depp", "effectifs-apprentis-par-niveau-academie-region.parquet")
dpp <- arrow::read_parquet(dpp_path)

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")

# Graphique principal : on choisit la feuille « nationale » la plus fournie,
# en écartant les ventilations géographiques (académie / région / département)
# qui donneraient un spaghetti — elles restent dans la table complète.
geo <- stringr::str_detect(dpp$feuille,
  stringr::regex("acad[ée]mi|r[ée]gion|d[ée]partement|\\bdrom\\b", ignore_case = TRUE))
pool <- if (any(!geo)) dpp[!geo, ] else dpp
main <- pool |>
  dplyr::count(feuille, bloc, name = "n") |>
  dplyr::mutate(pref = as.integer(stringr::str_detect(
    dplyr::coalesce(feuille, ""),
    stringr::regex("tous|ensemble|total|synth|\\bfrance\\b|m[ée]tropole|national",
                   ignore_case = TRUE)))) |>
  dplyr::arrange(dplyr::desc(pref), dplyr::desc(n)) |>
  dplyr::slice(1)
g <- pool |>
  dplyr::semi_join(main, by = c("feuille", "bloc")) |>
  dplyr::mutate(serie  = dplyr::coalesce(cat3, cat2, cat1),
                groupe = dplyr::if_else(is.na(cat2) & is.na(cat3), NA_character_,
                                        dplyr::coalesce(cat1, cat2))) |>
  dplyr::group_by(serie, groupe, annee) |>
  dplyr::summarise(valeur = dplyr::first(valeur), .groups = "drop")
top <- g |>
  dplyr::filter(annee == max(annee)) |>
  dplyr::slice_max(abs(valeur), n = 8) |>
  dplyr::pull(serie)
g <- g |>
  dplyr::filter(serie %in% top) |>
  dplyr::mutate(serie = stringr::str_trunc(serie, 34))
do_facet <- dplyr::n_distinct(stats::na.omit(g$groupe)) %in% 2:6

Last data update: 06 sept. 2026, 16:49

Last compile: 06 sept. 2026, 16:50

Série chronologique de la DEPP (Direction de l’Évaluation, de la Prospective et de la Performance — service statistique de l’Éducation nationale). Import générique : schéma tidy feuille · bloc · cat1 · cat2 · cat3 · annee · mention · valeur ; la table complète en bas de page reproduit fidèlement le fichier Excel source.

Aperçu

Code
p <- ggplot(g, aes(annee, valeur, colour = serie)) +
  geom_line(linewidth = 0.8) +
  scale_x_continuous(breaks = scales::breaks_pretty(n = 8)) +
  scale_y_continuous(labels = scales::label_number(big.mark = " ")) +
  labs(title = "Les effectifs d'apprentis par niveau de formation selon l'académie ou la région",
       subtitle = paste(stats::na.omit(unique(c(main$feuille, main$bloc))), collapse = " — "),
       x = NULL, y = NULL, colour = NULL) +
  theme_depp +
  ggplot2::theme(legend.text = ggplot2::element_text(size = 9)) +
  ggplot2::guides(colour = ggplot2::guide_legend(ncol = 3, byrow = TRUE))
if (do_facet) p <- p + ggplot2::facet_wrap(~ groupe, scales = "free_y")
p

Toutes les données

Code
dpp |>
  dplyr::transmute(Feuille = feuille, Bloc = bloc, `Catégorie 1` = cat1,
                   `Catégorie 2` = cat2, `Catégorie 3` = cat3,
                   Année = annee, Mention = mention, Valeur = valeur) |>
  dplyr::arrange(dplyr::desc(Année), Feuille, Bloc, `Catégorie 1`) |>
  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", "Fichier source", "Parquet", "Mise à jour", "Observations"),
  `  ` = c(
    "[Les effectifs d'apprentis par niveau de formation selon l'académie ou la région](https://www.education.gouv.fr/depp/series-chronologiques-de-donnees-statistiques-sur-le-systeme-educatif-12530) — DEPP",
    "Direction de l'Évaluation, de la Prospective et de la Performance (DEPP), ministère de l'Éducation nationale",
    "[`les-effectifs-d-apprentis-par-niveau-de-formation-selon-l-acad-mie-ou-la-r-gion-310611_0.xlsx`](https://www.education.gouv.fr/sites/default/files/document/les-effectifs-d-apprentis-par-niveau-de-formation-selon-l-acad-mie-ou-la-r-gion-310611_0.xlsx)",
    sprintf("`data/depp/effectifs-apprentis-par-niveau-academie-region.parquet` (%s ko)", round(file.size(dpp_path) / 1024)),
    format(as.Date(file.mtime(dpp_path)), "%d %B %Y"),
    sprintf("%d lignes, %d–%d", nrow(dpp), min(dpp$annee), max(dpp$annee))
  )
) |>
  gt::gt() |> gt::fmt_markdown(columns = `  `) |>
  gt::tab_options(table.width = "100%", column_labels.hidden = TRUE)
Série Les effectifs d’apprentis par niveau de formation selon l’académie ou la région — DEPP
Producteur Direction de l’Évaluation, de la Prospective et de la Performance (DEPP), ministère de l’Éducation nationale
Fichier source les-effectifs-d-apprentis-par-niveau-de-formation-selon-l-acad-mie-ou-la-r-gion-310611_0.xlsx
Parquet data/depp/effectifs-apprentis-par-niveau-academie-region.parquet (30 ko)
Mise à jour 06 septembre 2026
Observations 8862 lignes, 1997–2024