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-premier-degre-par-secteur-et-academie-departement.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-premier-degre-par-secteur-et-academie-departement.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 dppmain <- 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'élèves du premier degré par secteur d'enseignement et académie ou département",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
tibble::tibble(``=c("Série", "Producteur", "Fichier source", "Parquet", "Mise à jour", "Observations"),``=c("[Les effectifs d'élèves du premier degré par secteur d'enseignement et académie ou département](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-l-ves-du-premier-degr-par-secteur-d-enseignement-et-acad-mie-ou-d-partement-291009_0.xls`](https://www.education.gouv.fr/sites/default/files/document/les-effectifs-d-l-ves-du-premier-degr-par-secteur-d-enseignement-et-acad-mie-ou-d-partement-291009_0.xls)",sprintf("`data/depp/effectifs-premier-degre-par-secteur-et-academie-departement.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)