Î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
Eglise de l'immaculée Conception Lieux de culte 14 RUE MARSOULAN 12 Non
TOILES TENDUES JARDIN DE LA DALLE DES OLYMPIADES Ombrière temporaire 32 RUE DU JAVELOT 13 Non
Eglise Saint-Pierre de Chaillot Lieux de culte 31 AV MARCEAU 16 Non
Terrain de boules Botzaris Terrain de boules 72 rue Botzaris 19 Non
Brumisateur Square du Docteur Grancher Brumisateur 9 rue de la Bidassoa 20 Non
Brumisateur Jardin Lucien Fontanarosa Brumisateur 29 rue Cino Del Duca 17 Non
TOILES TENDUES SQUARE ULYSSE TRELAT Ombrière temporaire 112 RUE REGNAULT 13 Non
Musée de Montmartre Musée 12-14 Rue Cortot 18 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 09 octobre 2026
Observations 535 équipements