Effectifs des CFA par niveau et diplôme

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-cfa-par-niveau-diplome-sexe.qmd")'

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

cfa_path <- here::here("data", "depp", "effectifs-cfa-par-niveau-diplome-sexe.parquet")
cfa <- arrow::read_parquet(cfa_path)

annee_min <- min(cfa$annee); annee_max <- max(cfa$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_sexe <- c("Garçons" = "#3182ce", "Filles" = "#d53f8c", "Garçons + filles" = "grey25")

# Diplômes « feuille » (on exclut les sous-totaux « Total » et l'agrégat
# « Total tous niveaux »), du CAP au diplôme d'ingénieur.
diplomes <- c("CAP", "BEP", "Bac Professionnel", "BP", "BTS",
              "Licence", "Master", "Diplôme d'ingénieur")

Les effectifs d’apprentis en centre de formation d’apprentis (CFA), par niveau et diplôme préparé et selon le sexe, de 1996 à 2024. Source : DEPP-SIFA (Système d’information sur la formation des apprentis) ; champ France (avec Mayotte à partir de 2011).

Ensemble des apprentis

Code
cfa |>
  dplyr::filter(diplome == "Total tous niveaux") |>
  ggplot(aes(annee, valeur, colour = sexe)) +
  geom_line(linewidth = 0.9) +
  geom_point(size = 1.5) +
  scale_colour_manual(values = pal_sexe, name = NULL) +
  scale_x_continuous(breaks = scales::breaks_width(4)) +
  scale_y_continuous(labels = scales::label_number(scale = 1e-3, suffix = " k")) +
  labs(title = "Apprentis en CFA, tous niveaux",
       subtitle = sprintf("France — forte hausse depuis la réforme de 2018–2020 (%d)", annee_max),
       x = NULL, y = NULL) +
  theme_depp

Par diplôme

Code
cfa |>
  dplyr::filter(sexe == "Garçons + filles", diplome %in% diplomes) |>
  dplyr::mutate(diplome = factor(diplome, levels = diplomes)) |>
  ggplot(aes(annee, valeur, colour = diplome)) +
  geom_line(linewidth = 0.9) +
  scale_colour_brewer(palette = "Paired", name = NULL) +
  scale_x_continuous(breaks = scales::breaks_width(4)) +
  scale_y_continuous(labels = scales::label_number(scale = 1e-3, suffix = " k")) +
  labs(title = "Apprentis en CFA par diplôme préparé",
       subtitle = "Filles + garçons", x = NULL, y = NULL) +
  theme_depp +
  ggplot2::guides(colour = ggplot2::guide_legend(nrow = 2))

Dernière année, par diplôme et sexe

Code
cfa |>
  dplyr::filter(annee == annee_max, sexe != "Garçons + filles", diplome %in% diplomes) |>
  dplyr::mutate(diplome = forcats::fct_reorder(diplome, valeur, sum)) |>
  ggplot(aes(valeur, diplome, fill = sexe)) +
  geom_col(width = 0.7) +
  scale_fill_manual(values = pal_sexe, name = NULL) +
  scale_x_continuous(labels = scales::label_number(scale = 1e-3, suffix = " k")) +
  labs(title = sprintf("Apprentis en CFA par diplôme préparé (%d)", annee_max),
       x = NULL, y = NULL) +
  theme_depp

Part des filles

Code
cfa |>
  dplyr::filter(diplome %in% c("CAP", "Bac Professionnel", "BTS", "Licence",
                               "Diplôme d'ingénieur", "Total tous niveaux")) |>
  tidyr::pivot_wider(id_cols = c(diplome, annee), names_from = sexe, values_from = valeur) |>
  dplyr::filter(`Garçons + filles` > 0) |>
  dplyr::mutate(part = Filles / `Garçons + filles`) |>
  ggplot(aes(annee, part, colour = diplome)) +
  geom_line(linewidth = 0.9) +
  scale_colour_brewer(palette = "Dark2", name = NULL) +
  scale_x_continuous(breaks = scales::breaks_width(4)) +
  scale_y_continuous(labels = scales::label_percent(), limits = c(0, NA)) +
  labs(title = "Part des filles parmi les apprentis en CFA",
       subtitle = "par diplôme préparé", x = NULL, y = NULL) +
  theme_depp

Toutes les données

Code
cfa |>
  dplyr::transmute(Sexe = sexe, Regroupement = regroupement, Diplôme = diplome,
                   Année = annee, Mention = mention, Effectif = valeur) |>
  dplyr::arrange(dplyr::desc(Année), Diplôme, Sexe) |>
  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"))
  )

La première colonne du fichier source (« Niveau … », reprise ici sous Regroupement) est mal alignée et incohérente d’une feuille à l’autre : s’y fier avec prudence — c’est la colonne Diplôme qui porte l’information fiable.

Source & données

Code
tibble::tibble(
  ` ` = c("Série", "Producteur", "Champ", "Fichier", "Mise à jour", "Observations"),
  `  ` = c(
    "[Les effectifs d'apprentis en CFA par niveau et diplôme selon le sexe](https://www.education.gouv.fr/l-apprentissage-1084) — DEPP",
    "Direction de l'Évaluation, de la Prospective et de la Performance (DEPP), SIFA, ministère de l'Éducation nationale",
    "France (avec Mayotte à partir de 2011)",
    sprintf("`data/depp/effectifs-cfa-par-niveau-diplome-sexe.parquet` (%s ko)", round(file.size(cfa_path) / 1024)),
    format(as.Date(file.mtime(cfa_path)), "%d %B %Y"),
    sprintf("%d lignes, %d–%d", nrow(cfa), min(cfa$annee), max(cfa$annee))
  )
) |>
  gt::gt() |> gt::fmt_markdown(columns = `  `) |>
  gt::tab_options(table.width = "100%", column_labels.hidden = TRUE)
Série Les effectifs d’apprentis en CFA par niveau et diplôme selon le sexe — DEPP
Producteur Direction de l’Évaluation, de la Prospective et de la Performance (DEPP), SIFA, ministère de l’Éducation nationale
Champ France (avec Mayotte à partir de 2011)
Fichier data/depp/effectifs-cfa-par-niveau-diplome-sexe.parquet (45 ko)
Mise à jour 06 septembre 2026
Observations 1548 lignes, 1996–2024