Îlots de fraîcheur — équipements et activités

Données - Ville de Paris

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

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

if_path <- here::here("data", "paris", "ilots-de-fraicheur-equipements-activites.parquet")
ilf <- arrow::read_parquet(if_path) |>
  dplyr::mutate(ar = suppressWarnings(as.integer(substr(arrondissement, 4, 5))))

n_tot  <- nrow(ilf)
arr_sf <- arrondissements_sf()
pts_sf <- ilf |>
  dplyr::mutate(geometry = wkb2sfc(geo_point_2d)) |>
  sf::st_as_sf(crs = 4326)

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())

Un recensement, en vue des épisodes de canicule, des lieux et dispositifs « frais » accessibles au public : ombrières, brumisateurs, piscines, baignades extérieures, mais aussi des lieux fermés naturellement climatisés — musées, bibliothèques, mairies d’arrondissement, lieux de culte. 535 équipements au total, 82% d’entre eux gratuits.

Code
ilf |>
  dplyr::transmute(Nom = nom, Type = type, Adresse = adresse, Arrondissement = ar, Payant = payant) |>
  dplyr::slice_sample(n = 8) |>
  gt::gt() |>
  gt::sub_missing(missing_text = "—") |>
  gt::tab_header(title = "8 équipements tirés au hasard") |>
  gt::tab_options(table.width = "100%")
8 équipements tirés au hasard
Nom Type Adresse Arrondissement Payant
ABRI PARC DE BELLEVILLE Ombrière pérenne 45 RUE DES COURONNES 20 Non
Eglise Saint-Joseph des Carmes Lieux de culte 70 RUE VAUGIRARD 6 Non
MAIRIE DU 16E Mairie d'arrondissement 71 avenue HENRI MARTIN 16 Non
Piscine Rouvet Piscine 1, rue Rouvet 19 Oui
Brumisateur Square Misstic Brumisateur Square Misstic 5 Non
Musée de la Chasse et de la Nature Musée 62 Rue des Archives 3 Oui
ABRI JARDIN DU RANELAGH Ombrière pérenne 22 CHAUSSEE DE LA MUETTE 16 Non
Musée d'Orsay Musée 1 Rue de la Légion d'Honneur 7 Oui

Carte

Code
pal <- leaflet::colorFactor("Paired", domain = ilf$type)

leaflet::leaflet(pts_sf, options = leaflet::leafletOptions(minZoom = 11)) |>
  paris_basemap() |>
  leaflet::addPolygons(data = arr_sf, fill = FALSE, color = "#999", weight = 1) |>
  leaflet::addCircleMarkers(
    radius = 5, stroke = FALSE, fillOpacity = 0.8,
    fillColor = ~pal(type),
    label = ~sprintf("%s — %s", nom, type),
    popup = ~sprintf("<b>%s</b><br>%s<br>%s<br>%s", nom, type, adresse,
                     ifelse(payant == "Oui", "Payant", "Gratuit"))
  ) |>
  leaflet::addLegend("bottomright", pal = pal, values = ~type, title = "Type", opacity = 0.9)

Par arrondissement

Code
cnt <- ilf |> dplyr::filter(!is.na(ar)) |> dplyr::count(ar, name = "n")

arr_sf |>
  dplyr::left_join(cnt, by = c("c_ar" = "ar")) |>
  ggplot() +
  geom_sf(aes(fill = n), colour = "white", linewidth = 0.2) +
  scale_fill_viridis_c(option = "mako", direction = -1, na.value = "grey92", name = "Équipements") +
  labs(title = "Îlots de fraîcheur par arrondissement") +
  theme_carte

Ce que recensent les données

Code
ilf |>
  dplyr::count(type, sort = TRUE) |>
  dplyr::mutate(type = forcats::fct_reorder(type, n)) |>
  ggplot(aes(n, type)) +
  geom_col(fill = "#2f6f9f", width = 0.7) +
  geom_text(aes(label = n), hjust = -0.2, size = 3.2) +
  scale_x_continuous(expand = expansion(mult = c(0, 0.12))) +
  labs(title = "Type d'équipement",
       subtitle = "Ombrières, lieux de culte et brumisateurs forment le gros des recensements",
       x = NULL, y = NULL) +
  theme_barres

Code
ilf |>
  dplyr::filter(!is.na(payant)) |>
  dplyr::count(payant) |>
  dplyr::mutate(payant = ifelse(payant == "Oui", "Payant", "Gratuit")) |>
  ggplot(aes(n, payant)) +
  geom_col(fill = "#3b6f8a", width = 0.5) +
  geom_text(aes(label = scales::percent(n / sum(n), 1)), hjust = -0.15, size = 3.5) +
  scale_x_continuous(expand = expansion(mult = c(0, 0.12))) +
  labs(title = "Accès payant ou gratuit", x = NULL, y = NULL) +
  theme_barres

Tous les équipements

Code
ilf |>
  dplyr::arrange(type, nom) |>
  dplyr::transmute(Nom = nom, Type = type, Adresse = adresse, Arrondissement = ar, Payant = payant) |>
  reactable::reactable(
    searchable = TRUE,
    filterable = TRUE,
    pagination = TRUE,
    defaultPageSize = 25,
    showPageSizeOptions = TRUE,
    pageSizeOptions = c(10, 25, 50, 100),
    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(
      Nom = reactable::colDef(minWidth = 180),
      Type = reactable::colDef(minWidth = 140),
      Adresse = reactable::colDef(minWidth = 200),
      Arrondissement = reactable::colDef(minWidth = 70, maxWidth = 120),
      Payant = reactable::colDef(minWidth = 70, maxWidth = 100)
    )
  )

Source & données

Code
tibble::tibble(
  ` ` = c("Jeu de données", "Producteur", "Licence", "Fichier", "Mise à jour", "Observations"),
  `  ` = c(
    "[Îlots de fraîcheur - Equipements / Activités](https://opendata.paris.fr/explore/dataset/ilots-de-fraicheur-equipements-activites/information/)",
    "Direction de la Transition Écologique et du Climat — Ville de Paris",
    "Open Database License (ODbL)",
    sprintf("`data/paris/ilots-de-fraicheur-equipements-activites.parquet` (%s ko) + `arrondissements.parquet`",
            round(file.size(if_path) / 1024)),
    format(as.Date(file.mtime(if_path)), "%d %B %Y"),
    sprintf("%d équipements", n_tot)
  )
) |>
  gt::gt() |> gt::fmt_markdown(columns = `  `) |>
  gt::tab_options(table.width = "100%", column_labels.hidden = TRUE)
Jeu de données Îlots de fraîcheur - Equipements / Activités
Producteur Direction de la Transition Écologique et du Climat — Ville de Paris
Licence Open Database License (ODbL)
Fichier data/paris/ilots-de-fraicheur-equipements-activites.parquet (44 ko) + arrondissements.parquet
Mise à jour 04 septembre 2026
Observations 535 équipements