Last data update: 11 oct. 2026, 07:46
Last compile: 11 oct. 2026, 08:13
Source : SIES, data.enseignementsup-recherche.gouv.fr. Enseignants non permanents (doctorants contractuels, ATER, associés, invités, etc.) en activité dans les établissements publics sous tutelle du ministère, de 2012-13 à 2023-24.
`fr-esr-enseignants-nonpermanents-esr-public` |>
group_by(rentree, etablissement_type) |>
summarise(effectif = sum(effectif, na.rm = TRUE) / 1e3, .groups = "drop") |>
mutate(date = as.Date(paste0(rentree, "-10-01"))) |>
ggplot(aes(x = date, y = effectif, fill = etablissement_type)) +
geom_area() + theme_minimal() + xlab("") + ylab("Milliers d'enseignants non permanents") +
scale_x_date(date_breaks = "1 year", labels = date_format("%Y")) +
theme(legend.position = "bottom", legend.title = element_blank())
`fr-esr-enseignants-nonpermanents-esr-public` |>
mutate(cat = replace_na(categorie_pers_grp, "Non renseigné")) |>
group_by(rentree, cat) |>
summarise(effectif = sum(effectif, na.rm = TRUE) / 1e3, .groups = "drop") |>
mutate(date = as.Date(paste0(rentree, "-10-01")), cat = str_wrap(cat, 30)) |>
ggplot(aes(x = date, y = effectif, color = cat)) +
geom_line() + theme_minimal() + xlab("") + ylab("Milliers d'enseignants") +
scale_x_date(date_breaks = "2 years", labels = date_format("%Y")) +
theme(legend.position = "bottom", legend.title = element_blank())
`fr-esr-enseignants-nonpermanents-esr-public` |>
filter(rentree == max(rentree)) |>
mutate(grande_discipline = replace_na(grande_discipline, "Non renseignée")) |>
group_by(grande_discipline) |>
summarise(effectif = sum(effectif, na.rm = TRUE) / 1e3) |>
mutate(grande_discipline = fct_reorder(grande_discipline, effectif)) |>
ggplot(aes(x = grande_discipline, y = effectif)) +
geom_col(fill = "#2166ac") + coord_flip() + theme_minimal() +
xlab("") + ylab("Milliers d'enseignants (dernière rentrée)")
`fr-esr-enseignants-nonpermanents-esr-public` |>
group_by(rentree, sexe) |>
summarise(effectif = sum(effectif, na.rm = TRUE), .groups = "drop") |>
group_by(rentree) |>
mutate(part = effectif / sum(effectif), date = as.Date(paste0(rentree, "-10-01"))) |>
filter(sexe == "Féminin") |>
ggplot(aes(x = date, y = part)) +
geom_line() + geom_point() + theme_minimal() + xlab("") + ylab("Part des femmes") +
scale_x_date(date_breaks = "1 year", labels = date_format("%Y")) +
scale_y_continuous(labels = percent_format(accuracy = 1), limits = c(0, NA))
`fr-esr-enseignants-nonpermanents-esr-public` |>
filter(rentree == max(rentree)) |>
group_by(etablissement_actuel_lib) |>
summarise(effectif = sum(effectif, na.rm = TRUE)) |>
slice_max(effectif, n = 20) |>
mutate(etablissement_actuel_lib = fct_reorder(str_trunc(etablissement_actuel_lib, 50), effectif)) |>
ggplot(aes(x = etablissement_actuel_lib, y = effectif)) +
geom_col(fill = "#e08214") + coord_flip() + theme_minimal() +
xlab("") + ylab("Enseignants non permanents (dernière rentrée)")