Arbres plantés par la Ville de Paris, par projet

Données - Ville de Paris

Code
source(here::here("_rinit.R"))
invisible(Sys.setlocale("LC_TIME", "fr_FR.UTF-8"))
invisible(Sys.setenv(TZ = "Europe/Paris"))
# cd ~/iCloud/website/data/paris; /usr/local/bin/R -e 'quarto::quarto_render("arbres-plantes-par-projet.qmd")'

source(here::here("data", "paris", "_paris.R"))   # wkb2sfc(), paris_basemap()

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

P <- here::here("data", "paris")
plantes <- arrow::read_parquet(file.path(P, "arbres-plantes-par-projet.parquet"))
arrondissements <- arrow::read_parquet(file.path(P, "arrondissements.parquet"))

plantes <- plantes |>
  dplyr::mutate(
    arbres  = dplyr::coalesce(ind_arb_plant, 0),
    budget  = budget_prev,
    type    = ope_type
  )

n_proj  <- nrow(plantes)
n_arbre <- sum(plantes$arbres, na.rm = TRUE)

arr_sf <- arrondissements |>
  dplyr::transmute(c_ar, nom = l_aroff, geometry = wkb2sfc(geom)) |>
  sf::st_as_sf(crs = 4326)
proj_sf <- plantes |>
  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"), legend.position = "right")
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())

1 066 projets de plantation de la Direction des Espaces Verts et de l’Environnement, totalisant 154 686 arbres plantés. Chaque projet a une emprise géographique, un type d’opération (plantation d’arbres, végétalisation, aménagement…), un budget prévisionnel et une ventilation par type d’action (rue, forêt urbaine, espace vert, boulevards périphériques, renaturation des bois…).

C’est le pendant « plantation » du jeu arbres abattus pour raisons sanitaires.

Code
plantes |>
  dplyr::arrange(dplyr::desc(arbres)) |>
  dplyr::transmute(
    Projet = nom_projet, Arrondissement = arrond, `Type d'opération` = type,
    `Arbres plantés` = arbres, `Budget prév. (€)` = budget, Statut = ope_statut
  ) |>
  head(12) |>
  gt::gt() |>
  gt::fmt_number(columns = c(`Arbres plantés`, `Budget prév. (€)`), decimals = 0, sep_mark = " ") |>
  gt::sub_missing(missing_text = "—") |>
  gt::tab_options(table.width = "100%")
Projet Arrondissement Type d'opération Arbres plantés Budget prév. (€) Statut
Ouverture au public PC20 - Cours de Vincennes / rue du Volga 20 Nouvelle surface d’espaces verts 7 519 — Réalisé
Replantations Bois de Boulogne 2023-2024 - Beauregard 21 Arbre 7 000 — Réalisé
ARB - TALUS BP 30-03 ZAC PYTHON-DUVERNOIS 20 Arbre 6 000 — Réalisé
Replantations Bois de Boulogne 2021-2022 16 — 3 830 — Réalisé
Replantations Bois de Vincennes 2022- 2023 12 — 3 500 — Réalisé
Replantations Bois de Boulogne 2023-2024 16 Arbre 3 121 — Réalisé
ARB - TALUS BP 12-01 16 Arbre 3 100 — Réalisé
ARB - TALUS BP 02-03 Porte de Choisy 13 Arbre 3 000 — Réalisé
ARB - TALUS BP 28-03 - 23 / 24 20 Arbre 2 850 — Réalisé
Parc André Citroën (rénovation des serres et du grand canal) 15 Nouvelle surface d’espaces verts 2 716 — Réalisé
ARB - TALUS BP 17-01 Bd d'Aurelle de Paladines 17 Arbre 2 700 — Réalisé
Replantations Bois de Boulogne 2024-2025 16 Arbre 2 660 — Réalisé

Carte des projets

Code
cnt <- plantes |>
  dplyr::filter(!is.na(arrond), arrond %in% 1:20) |>
  dplyr::group_by(arrond) |>
  dplyr::summarise(arbres = sum(arbres, na.rm = TRUE), .groups = "drop")

arr_sf |>
  dplyr::left_join(cnt, by = c("c_ar" = "arrond")) |>
  ggplot() +
  geom_sf(aes(fill = arbres), colour = "white", linewidth = 0.2) +
  scale_fill_viridis_c(option = "mako", direction = -1, na.value = "grey92",
                       labels = scales::label_number(big.mark = " "), name = "Arbres\nplantés") +
  labs(title = "Arbres plantés par arrondissement",
       subtitle = "Somme des arbres des projets rattachés à l'arrondissement") +
  theme_carte

Carte interactive

Code
pal <- colorFactor("Dark2", domain = sort(unique(proj_sf$type)))

leaflet(proj_sf, options = leafletOptions(minZoom = 11)) |>
  paris_basemap() |>
  addPolygons(data = arr_sf, fill = FALSE, color = "#999", weight = 1) |>
  addCircleMarkers(
    radius = ~pmax(3, pmin(18, sqrt(arbres))), stroke = FALSE, fillOpacity = 0.75,
    fillColor = ~pal(type),
    label = ~sprintf("%s — %s arbres", nom_projet, format(arbres, big.mark = " ")),
    popup = ~sprintf("<b>%s</b><br>%s<br>Arbres plantés : <b>%s</b><br>Budget prév. : %s",
                     nom_projet, type, format(arbres, big.mark = " "),
                     ifelse(is.na(budget), "n.c.",
                            paste0(format(round(budget), big.mark = " "), " €")))
  ) |>
  addLegend("bottomright", pal = pal, values = ~type, title = "Type d'opération", opacity = 0.9)

Rayon des cercles ∝ √(nombre d’arbres du projet).

Ce que disent les projets

Code
plantes |>
  dplyr::group_by(type) |>
  dplyr::summarise(projets = dplyr::n(), arbres = sum(arbres, na.rm = TRUE), .groups = "drop") |>
  dplyr::mutate(type = forcats::fct_reorder(type, arbres)) |>
  ggplot(aes(arbres, type)) +
  geom_col(fill = "#2f6f4f", width = 0.7) +
  geom_text(aes(label = sprintf("%s arbres · %d projets", format(arbres, big.mark = " "), projets)),
            hjust = -0.05, size = 3) +
  scale_x_continuous(labels = scales::label_number(big.mark = " "),
                     expand = expansion(mult = c(0, 0.35))) +
  labs(title = "Arbres plantés par type d'opération",
       x = NULL, y = NULL) +
  theme_barres

Code
plantes |>
  dplyr::summarise(dplyr::across(dplyr::starts_with("act_"), \(x) sum(x, na.rm = TRUE))) |>
  tidyr::pivot_longer(dplyr::everything(), names_to = "action", values_to = "arbres") |>
  dplyr::mutate(action = dplyr::recode(action,
    act_new_arbre_rue    = "Nouvel arbre de rue",
    act_foret_urb        = "Forêt urbaine",
    act_esp_vert         = "Espace vert",
    act_bd_periph        = "Boulevards périphériques",
    act_renaturer_bois   = "Renaturation des bois",
    act_arbre_jard_cim   = "Jardin / cimetière",
    act_arbre_eq_municip = "Équipement municipal",
    act_arbre_parc_priv  = "Parc privé",
    act_renew_arbre      = "Renouvellement d'arbre"),
    action = forcats::fct_reorder(action, arbres)) |>
  ggplot(aes(arbres, action)) +
  geom_col(fill = "#2f6f4f", width = 0.7) +
  geom_text(aes(label = format(arbres, big.mark = " ")), hjust = -0.15, size = 3) +
  scale_x_continuous(labels = scales::label_number(big.mark = " "),
                     expand = expansion(mult = c(0, 0.12))) +
  labs(title = "Arbres plantés par type d'action",
       subtitle = "Boulevards périphériques et renaturation des bois en tête",
       x = NULL, y = NULL) +
  theme_barres

Code
b <- dplyr::filter(plantes, !is.na(budget))
cat(sprintf(
  "\nUn **budget prévisionnel** est renseigné pour %s des %s projets, pour un total de **%s** (les grosses opérations d'aménagement, souvent sans arbres comptabilisés ici, pèsent le plus).\n",
  format(nrow(b), big.mark = " "), format(n_proj, big.mark = " "),
  scales::dollar(sum(b$budget), prefix = "", suffix = " €", big.mark = " ", accuracy = 1e5)))

Un budget prévisionnel est renseigné pour 224 des 1 066 projets, pour un total de 233 100 000 € (les grosses opérations d’aménagement, souvent sans arbres comptabilisés ici, pèsent le plus).

Source & données

Code
plantes_path <- file.path(P, "arbres-plantes-par-projet.parquet")
tibble::tibble(
  ` ` = c("Jeu de données", "Producteur", "Licence", "Fichiers", "Mise à jour", "Observations"),
  `  ` = c(
    "[Arbres plantés](https://opendata.paris.fr/explore/dataset/arbres-plantes-par-projet/)",
    "Direction des Espaces Verts et de l'Environnement (DEVE) — Ville de Paris",
    "Open Database License (ODbL)",
    sprintf("`data/paris/arbres-plantes-par-projet.parquet` (%s ko) + `arrondissements.parquet`",
            round(file.size(plantes_path) / 1024)),
    format(as.Date(file.mtime(plantes_path)), "%d %B %Y"),
    sprintf("%s projets, %s arbres", format(n_proj, big.mark = " "), format(n_arbre, big.mark = " "))
  )
) |>
  gt::gt() |> gt::fmt_markdown(columns = `  `) |>
  gt::tab_options(table.width = "100%", column_labels.hidden = TRUE)
Jeu de données Arbres plantés
Producteur Direction des Espaces Verts et de l’Environnement (DEVE) — Ville de Paris
Licence Open Database License (ODbL)
Fichiers data/paris/arbres-plantes-par-projet.parquet (332 ko) + arrondissements.parquet
Mise à jour 20 septembre 2026
Observations 1 066 projets, 154 686 arbres