Bénéficiaires de Paris Solidarité

Données - Ville de Paris

Code
source(here::here("_rinit.R"))
source(here::here("data", "paris", "_paris.R"))   # arrondissements_sf()
invisible(Sys.setlocale("LC_TIME", "fr_FR.UTF-8"))
# cd ~/iCloud/website/data/paris; /usr/local/bin/R -e 'quarto::quarto_render("nombre-de-beneficiaires-paris-solidarite.qmd")'

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

benef_path <- here::here("data", "paris", "nombre-de-beneficiaires-paris-solidarite.parquet")
raw <- arrow::read_parquet(benef_path) |>
  dplyr::mutate(annee = as.integer(format(exercice, "%Y")),
               ar = suppressWarnings(as.integer(substr(arrondissement, 4, 5))))

# 2026 (exercice en cours) porte plusieurs mises à jour par arrondissement :
# on ne garde que le dernier décompte connu pour éviter de les additionner.
benef <- raw |>
  dplyr::group_by(annee, ar) |>
  dplyr::slice_max(personnes_agees, n = 1, with_ties = FALSE) |>
  dplyr::ungroup()

annee_min <- min(benef$annee)
annee_max <- max(benef$annee)
arr_sf    <- arrondissements_sf()

theme_carte <- theme_void(base_size = 12) +
  theme(plot.title = element_text(face = "bold"),
        plot.subtitle = element_text(colour = "grey35"),
        plot.margin = margin(5, 12, 5, 5))
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())

Le nombre de bénéficiaires du dispositif Paris Solidarité (aide municipale complémentaire aux personnes âgées et aux personnes en situation de handicap à faibles ressources), par arrondissement, 2013-2026.

Code
benef |>
  dplyr::filter(annee == max(annee) - 1) |>
  dplyr::arrange(dplyr::desc(personnes_agees)) |>
  dplyr::transmute(Arrondissement = ar, `Personnes âgées` = personnes_agees,
                   `Personnes handicapées` = personnes_handicapees) |>
  head(8) |>
  gt::gt() |>
  gt::tab_header(title = sprintf("8 arrondissements avec le plus de bénéficiaires en %d", annee_max - 1)) |>
  gt::tab_options(table.width = "100%")
8 arrondissements avec le plus de bénéficiaires en 2025
Arrondissement Personnes âgées Personnes handicapées
20 2433 1022
19 2099 766
13 2067 795
18 1843 676
11 1479 516
15 1398 696
14 1305 677
17 1254 602

Évolution

Code
benef |>
  dplyr::group_by(annee) |>
  dplyr::summarise(`Personnes âgées` = sum(personnes_agees), `Personnes handicapées` = sum(personnes_handicapees),
                   .groups = "drop") |>
  tidyr::pivot_longer(-annee, names_to = "categorie", values_to = "n") |>
  ggplot(aes(annee, n, colour = categorie)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2) +
  scale_colour_manual(values = c("Personnes âgées" = "#3b6f8a", "Personnes handicapées" = "#c0392b"), name = NULL) +
  scale_y_continuous(labels = scales::label_number(big.mark = " ")) +
  scale_x_continuous(breaks = scales::breaks_width(2)) +
  labs(title = "Bénéficiaires de Paris Solidarité, toutes catégories",
       subtitle = sprintf("%d : exercice en cours, décompte provisoire", annee_max),
       x = NULL, y = NULL) +
  theme_barres +
  theme(legend.position = "bottom")

Par arrondissement

Code
cnt <- benef |> dplyr::filter(annee == annee_max - 1, !is.na(ar)) |>
  dplyr::transmute(ar, total = personnes_agees + personnes_handicapees)

arr_sf |>
  dplyr::left_join(cnt, by = c("c_ar" = "ar")) |>
  ggplot() +
  geom_sf(aes(fill = total), colour = "white", linewidth = 0.2) +
  scale_fill_viridis_c(option = "plasma", direction = -1, na.value = "grey92", name = "Bénéficiaires") +
  labs(title = sprintf("Bénéficiaires de Paris Solidarité par arrondissement (%d)", annee_max - 1),
       subtitle = "Personnes âgées + personnes handicapées") +
  theme_carte

Personnes âgées vs personnes handicapées

Code
benef |>
  dplyr::filter(annee == annee_max - 1, !is.na(ar)) |>
  dplyr::mutate(ar = forcats::fct_reorder(factor(ar), personnes_agees)) |>
  tidyr::pivot_longer(c(personnes_agees, personnes_handicapees), names_to = "categorie", values_to = "n") |>
  ggplot(aes(n, ar, fill = categorie)) +
  geom_col(width = 0.7) +
  scale_fill_manual(values = c(personnes_agees = "#3b6f8a", personnes_handicapees = "#c0392b"),
                    labels = c("Personnes âgées", "Personnes handicapées"), name = NULL) +
  labs(title = sprintf("Bénéficiaires par arrondissement (%d)", annee_max - 1), x = NULL, y = NULL) +
  theme_barres +
  theme(legend.position = "bottom")

Toutes les données

Code
benef |>
  dplyr::arrange(dplyr::desc(annee), ar) |>
  dplyr::transmute(Année = annee, Arrondissement = ar, `Personnes âgées` = personnes_agees,
                   `Personnes handicapées` = personnes_handicapees) |>
  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")
    )
  )

Pour 2026 (exercice en cours), plusieurs relevés existent par arrondissement dans le fichier source ; seul le dernier décompte connu est retenu ici.

Source & données

Code
tibble::tibble(
  ` ` = c("Jeu de données", "Producteur", "Licence", "Fichier", "Mise à jour", "Observations"),
  `  ` = c(
    "[Bénéficiaires Paris Solidarité](https://opendata.paris.fr/explore/dataset/nombre-de-beneficiaires-paris-solidarite/information/)",
    "Direction de l'Action Sociale, de l'Enfance et de la Santé (DASES) — Ville de Paris",
    "Open Database License (ODbL)",
    sprintf("`data/paris/nombre-de-beneficiaires-paris-solidarite.parquet` (%s ko) + `arrondissements.parquet`",
            round(file.size(benef_path) / 1024)),
    format(as.Date(file.mtime(benef_path)), "%d %B %Y"),
    sprintf("%d-%d, %d lignes (dédupliquées)", annee_min, annee_max, nrow(benef))
  )
) |>
  gt::gt() |> gt::fmt_markdown(columns = `  `) |>
  gt::tab_options(table.width = "100%", column_labels.hidden = TRUE)
Jeu de données Bénéficiaires Paris Solidarité
Producteur Direction de l’Action Sociale, de l’Enfance et de la Santé (DASES) — Ville de Paris
Licence Open Database License (ODbL)
Fichier data/paris/nombre-de-beneficiaires-paris-solidarite.parquet (5 ko) + arrondissements.parquet
Mise à jour 05 septembre 2026
Observations 2013-2026, 280 lignes (dédupliquées)