Last data update: 11 oct. 2026, 21:43
Last compile: 11 oct. 2026, 21:47
Source : SIES, data.enseignementsup-recherche.gouv.fr. Indicateurs financiers (comptes financiers et budgets) des universités et autres opérateurs de l’enseignement supérieur : produits, charges de personnel, ressources propres, fonds de roulement et trésorerie.
Les montants sont en euros ; les ratios (*_produits_encaissables) en %. Seuls les comptes financiers (et non les budgets) sont retenus, à partir de 2012. Les totaux dépendent du nombre d’établissements déclarants (les charges de personnel ne sont renseignées qu’à partir de 2018, les droits d’inscription manquent en 2016-2017).
cf |>
group_by(date) |>
summarise(`Ressources propres / produits` = median(ressources_propres_produits_encaissables, na.rm = TRUE),
`Charges de personnel / produits` = median(charges_de_personnel_produits_encaissables, na.rm = TRUE),
`Charges décaissables / produits` = median(charges_decaissables_produits_encaissables, na.rm = TRUE)) |>
pivot_longer(-date) |>
ggplot(aes(x = date, y = value / 100, color = name)) +
geom_line() + geom_point(size = 0.8) + theme_minimal() + xlab("") + ylab("Médiane des établissements") +
scale_y_continuous(labels = percent_format(accuracy = 1)) +
scale_x_date(date_breaks = "2 years", labels = date_format("%Y")) +
theme(legend.position = "bottom", legend.title = element_blank())
cf |>
group_by(date) |>
summarise(`Fonds de roulement` = median(fonds_de_roulement_en_jours_de_fonctionnement, na.rm = TRUE),
`Trésorerie` = median(tresorerie_en_jours_de_fonctionnement, na.rm = TRUE)) |>
pivot_longer(-date) |>
ggplot(aes(x = date, y = value, color = name)) +
geom_line() + geom_point(size = 0.8) + theme_minimal() + xlab("") + ylab("Jours (médiane des établissements)") +
scale_x_date(date_breaks = "2 years", labels = date_format("%Y")) +
theme(legend.position = "bottom", legend.title = element_blank())
cf |>
group_by(date) |>
summarise(`Charges de personnel` = ssum(charges_de_personnel),
`Produits de fonctionnement encaissables` = ssum(produits_de_fonctionnement_encaissables)) |>
pivot_longer(-date) |>
ggplot(aes(x = date, y = value / 1e9, color = name)) +
geom_line() + geom_point(size = 0.8) + theme_minimal() + xlab("") + ylab("Milliards d'euros") +
scale_y_continuous(limits = c(0, NA)) +
scale_x_date(date_breaks = "2 years", labels = date_format("%Y")) +
theme(legend.position = "bottom", legend.title = element_blank())
cf |>
group_by(date) |>
summarise(`Droits d'inscription` = ssum(droits_d_inscription),
`ANR hors PIA` = ssum(anr_hors_investissements_d_avenir),
`ANR investissements d'avenir` = ssum(anr_investissements_d_avenir),
`Contrats de recherche hors ANR` = ssum(contrats_et_prestations_de_recherche_hors_anr),
`Formation continue` = ssum(formation_continue_diplomes_propres_et_vae),
`Taxe d'apprentissage` = ssum(taxe_d_apprentissage)) |>
pivot_longer(-date) |>
ggplot(aes(x = date, y = value / 1e6, color = name)) +
geom_line() + theme_minimal() + xlab("") + ylab("Millions d'euros") +
scale_x_date(date_breaks = "2 years", labels = date_format("%Y")) +
theme(legend.position = "bottom", legend.title = element_blank())
cf |>
filter(exercice == max(exercice)) |>
slice_max(produits_de_fonctionnement_encaissables, n = 20) |>
mutate(etablissement_lib = fct_reorder(str_trunc(etablissement_lib, 45), produits_de_fonctionnement_encaissables)) |>
ggplot(aes(x = etablissement_lib, y = produits_de_fonctionnement_encaissables / 1e6)) +
geom_col(fill = "#2166ac") + coord_flip() + theme_minimal() +
xlab("") + ylab("Millions d'euros (dernier exercice)")
cf |>
filter(!is.na(vague)) |>
group_by(date, vague) |>
summarise(value = median(charges_de_personnel_produits_encaissables, na.rm = TRUE), .groups = "drop") |>
ggplot(aes(x = date, y = value / 100, color = vague)) +
geom_line() + theme_minimal() + xlab("") + ylab("Charges de personnel / produits (médiane)") +
scale_y_continuous(labels = percent_format(accuracy = 1)) +
scale_x_date(date_breaks = "2 years", labels = date_format("%Y")) +
theme(legend.position = "bottom") + labs(color = "Vague RCE")