Code
source (here:: here ("_rinit.R" ))
invisible (Sys.setlocale ("LC_TIME" , "fr_FR.UTF-8" ))
# cd ~/iCloud/website/data/paris; /usr/local/bin/R -e 'quarto::quarto_render("liste_des_prenoms.qmd")'
knitr:: opts_chunk$ set (echo = TRUE , message = FALSE , warning = FALSE ,
fig.width = 8 , fig.height = 5 , dpi = 150 )
prenoms_path <- here:: here ("data" , "paris" , "liste_des_prenoms.parquet" )
prenoms <- arrow:: read_parquet (prenoms_path) |>
dplyr:: transmute (prenom = prenoms, sexe = sexe, annee = as.integer (format (annee, "%Y" )), n = nombre)
n_lignes <- nrow (prenoms)
n_total <- sum (prenoms$ n)
annee_min <- min (prenoms$ annee)
annee_max <- max (prenoms$ annee)
pal_sexe <- c (F = "#c0392b" , M = "#3b6f8a" )
theme_barres <- theme_minimal (base_size = 12 ) +
theme (plot.title = element_text (face = "bold" ),
plot.subtitle = element_text (colour = "grey35" ),
panel.grid.major.y = element_blank ())
Les prénoms donnés aux enfants nés à Paris chaque année, par sexe — issus de l’état civil parisien, 2004-2025. Un prénom n’apparaît que s’il a été donné à au moins 5 enfants de ce sexe cette année-là (secret statistique) : les 673 443 naissances comptées ici sous-estiment donc le nombre réel de naissances à Paris.
Code
prenoms |>
dplyr:: filter (annee == annee_max) |>
dplyr:: arrange (dplyr:: desc (n)) |>
dplyr:: transmute (Prénom = prenom, Sexe = sexe, Occurrences = n) |>
head (10 ) |>
gt:: gt () |>
gt:: tab_header (title = sprintf ("10 prénoms les plus donnés en %d" , annee_max)) |>
gt:: tab_options (table.width = "100%" )
Prénom
Sexe
Occurrences
Gabriel
M
289
Raphaël
M
221
Louis
M
205
Adam
M
205
Noah
M
190
Léon
M
174
Alma
F
174
Louise
F
170
Arthur
M
160
Isaac
M
156
Les prénoms les plus donnés (toutes années)
Code
top_filles <- prenoms |>
dplyr:: filter (sexe == "F" ) |> dplyr:: group_by (prenom) |>
dplyr:: summarise (n = sum (n), .groups = "drop" ) |> dplyr:: slice_max (n, n = 12 ) |>
dplyr:: mutate (prenom = forcats:: fct_reorder (prenom, n)) |>
ggplot (aes (n, prenom)) +
geom_col (fill = pal_sexe[["F" ]], width = 0.7 ) +
scale_x_continuous (labels = scales:: label_number (big.mark = " " )) +
labs (title = "Filles" , x = NULL , y = NULL ) +
theme_barres
top_garcons <- prenoms |>
dplyr:: filter (sexe == "M" ) |> dplyr:: group_by (prenom) |>
dplyr:: summarise (n = sum (n), .groups = "drop" ) |> dplyr:: slice_max (n, n = 12 ) |>
dplyr:: mutate (prenom = forcats:: fct_reorder (prenom, n)) |>
ggplot (aes (n, prenom)) +
geom_col (fill = pal_sexe[["M" ]], width = 0.7 ) +
scale_x_continuous (labels = scales:: label_number (big.mark = " " )) +
labs (title = "Garçons" , x = NULL , y = NULL ) +
theme_barres
patchwork:: wrap_plots (top_filles, top_garcons, ncol = 2 ) +
patchwork:: plot_annotation (
title = sprintf ("Prénoms les plus donnés, %d-%d (cumulé)" , annee_min, annee_max))
Évolution des prénoms les plus donnés aujourd’hui
Code
top_recents <- prenoms |>
dplyr:: filter (annee == annee_max) |>
dplyr:: group_by (sexe) |>
dplyr:: slice_max (n, n = 5 ) |>
dplyr:: ungroup () |>
dplyr:: pull (prenom)
prenoms |>
dplyr:: filter (prenom %in% top_recents) |>
ggplot (aes (annee, n, colour = prenom)) +
geom_line (linewidth = 0.9 ) +
geom_point (size = 1.6 ) +
scale_colour_brewer (palette = "Paired" , name = NULL ) +
facet_wrap (~ ifelse (sexe == "F" , "Filles" , "Garçons" )) +
labs (title = "Évolution des 5 prénoms les plus donnés en 2025 (par sexe)" , x = NULL , y = NULL ) +
theme_barres +
theme (legend.position = "bottom" )
Tous les prénoms, toutes les années
Code
prenoms |>
dplyr:: arrange (dplyr:: desc (annee), dplyr:: desc (n)) |>
dplyr:: transmute (Année = annee, Prénom = prenom, Sexe = sexe, Occurrences = n) |>
reactable:: reactable (
searchable = TRUE ,
filterable = TRUE ,
pagination = TRUE ,
defaultPageSize = 20 ,
compact = TRUE ,
resizable = TRUE ,
highlight = TRUE ,
wrap = TRUE ,
defaultColDef = reactable:: colDef (
align = "left" ,
headerStyle = list (fontWeight = "bold" ),
style = list (whiteSpace = "normal" , wordBreak = "break-word" )
),
columns = list (
Année = reactable:: colDef (minWidth = 70 , maxWidth = 90 ),
Prénom = reactable:: colDef (minWidth = 150 ),
Sexe = reactable:: colDef (minWidth = 60 , maxWidth = 80 ),
Occurrences = reactable:: colDef (minWidth = 90 , maxWidth = 120 , align = "right" )
)
)
Source & données
Code
tibble:: tibble (
` ` = c ("Jeu de données" , "Producteur" , "Licence" , "Fichier" , "Mise à jour" , "Observations" ),
` ` = c (
"[Liste des prénoms](https://opendata.paris.fr/explore/dataset/liste_des_prenoms/information/)" ,
"Ville de Paris — état civil" ,
"Open Database License (ODbL)" ,
sprintf ("`data/paris/liste_des_prenoms.parquet` (%s ko)" , round (file.size (prenoms_path) / 1024 )),
format (as.Date (file.mtime (prenoms_path)), "%d %B %Y" ),
sprintf ("%s lignes, %s occurrences, %d-%d (seuil de 5 par prénom/sexe/année)" ,
format (n_lignes, big.mark = " " ), format (n_total, big.mark = " " ), annee_min, annee_max)
)
) |>
gt:: gt () |> gt:: fmt_markdown (columns = ` ` ) |>
gt:: tab_options (table.width = "100%" , column_labels.hidden = TRUE )
Jeu de données
Liste des prénoms
Producteur
Ville de Paris — état civil
Licence
Open Database License (ODbL)
Fichier
data/paris/liste_des_prenoms.parquet (156 ko)
Mise à jour
05 septembre 2026
Observations
27 899 lignes, 673 443 occurrences, 2004-2025 (seuil de 5 par prénom/sexe/année)