Î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
Musée Maillol Musée 59 RUE DE GRENELLE 7 Oui
Eglise Orthodoxe Grecque Lieux de culte 7 RUE GEORGES BIZET 16 Non
Musée du cinéma - Cinémathèque Française Musée 51 rue de Bercy 12 Oui
KIOSQUE A MUSIQUE PROMENADE PEREIRE - PROMENADE GILBERTE BROSSOLETTE Ombrière pérenne 87B AVENUE DES TERNES 17 Non
Terrain de boules Botzaris Terrain de boules 72 rue Botzaris 19 Non
Eglise Protestante Americaine de Paris Lieux de culte 63 QU ORSAY 7 Non
Eglise Notre-Dame de Bercy Lieux de culte 10 PL LACHAMBEAUDIE 12 Non
Centre sportif Louis Lumière Baignade extérieure 30 rue Louis Lumière 20 Non

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 02 novembre 2026
Observations 535 équipements