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("parissetransforme.qmd")'
knitr:: opts_chunk$ set (echo = TRUE , message = FALSE , warning = FALSE ,
fig.width = 8 , fig.height = 5 , dpi = 150 )
pst_path <- here:: here ("data" , "paris" , "parissetransforme.parquet" )
pst <- arrow:: read_parquet (pst_path) |>
dplyr:: mutate (ar = suppressWarnings (as.integer (substr (code_postal, 4 , 5 ))))
n_tot <- nrow (pst)
arr_sf <- arrondissements_sf ()
pts_sf <- pst |>
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 ())
« Paris se transforme » recense les projets municipaux concrets menés dans chaque quartier — écoles rénovées, commerces aidés, rues végétalisées, cours Oasis, stations de tri… 3 262 projets répartis en 14 grandes catégories.
Code
pst |>
dplyr:: filter (! is.na (date_liv)) |>
dplyr:: arrange (dplyr:: desc (date_liv)) |>
dplyr:: transmute (Titre = titre_descriptif, Catégorie = categorie, Arrondissement = ar,
Livraison = date_liv) |>
head (8 ) |>
gt:: gt () |>
gt:: tab_header (title = "8 projets livrés les plus récents" ) |>
gt:: tab_options (table.width = "100%" )
Titre
Catégorie
Arrondissement
Livraison
Rénovation de la Cipale
Sport
12
2025-12-31
Un jardin en hommage aux attentats du 13 novembre 2015
Mémoire
4
2025-11-13
Une nouvelle cour à l'école Duquesne (7e)
Écoles et crèches
7
2025-11-10
Hommage dans le 16e à Tamara de Lempicka, figure de l'Art déco
Culture et Patrimoine
16
2025-11-10
Renouveau à la bibliothèque Louise Walser-Gaillard (9e)
Culture et Patrimoine
9
2025-11-10
La Maison des autres modes ouvre dans le 11e
Attractivité et emploi
11
2025-11-03
À la bibliothèque Maurice-Genevoix (18e), le mobilier se met au vert
Culture et Patrimoine
18
2025-11-03
Un buste pour Hubert Reeves
Culture et Patrimoine
6
2025-11-03
Carte
Code
pal <- leaflet:: colorFactor ("Set3" , domain = pst$ categorie)
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 = 4 , stroke = FALSE , fillOpacity = 0.75 , fillColor = ~ pal (categorie),
label = ~ titre_descriptif,
popup = ~ sprintf ("<b>%s</b><br>%s — %s<br>%s" , titre_descriptif, categorie, sous_categorie,
dplyr:: coalesce (adresse, "" ))
) |>
leaflet:: addLegend ("bottomright" , pal = pal, values = ~ categorie, title = "Catégorie" , opacity = 0.9 )
Par arrondissement
Code
cnt <- pst |> 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 = "viridis" , direction = - 1 , na.value = "grey92" , name = "Projets" ) +
labs (title = "Projets « Paris se transforme » par arrondissement" ) +
theme_carte
Par catégorie
Code
pst |>
dplyr:: count (categorie, sort = TRUE ) |>
dplyr:: mutate (categorie = forcats:: fct_reorder (categorie, n)) |>
ggplot (aes (n, categorie)) +
geom_col (fill = "#2f6f4f" , width = 0.65 ) +
geom_text (aes (label = n), hjust = - 0.2 , size = 3 ) +
scale_x_continuous (expand = expansion (mult = c (0 , 0.12 ))) +
labs (title = "Projets par catégorie" ,
subtitle = "« Attractivité et emploi » domine, porté par l'aide aux commerçants et artisans" ,
x = NULL , y = NULL ) +
theme_barres
Code
pst |>
dplyr:: filter (! is.na (sous_categorie)) |>
dplyr:: count (sous_categorie, sort = TRUE ) |>
head (12 ) |>
dplyr:: mutate (sous_categorie = forcats:: fct_reorder (sous_categorie, n)) |>
ggplot (aes (n, sous_categorie)) +
geom_col (fill = "#3b6f8a" , width = 0.65 ) +
geom_text (aes (label = n), hjust = - 0.2 , size = 3 ) +
scale_x_continuous (expand = expansion (mult = c (0 , 0.12 ))) +
labs (title = "Sous-catégories les plus fréquentes" , x = NULL , y = NULL ) +
theme_barres
2 669 projets sur 3262 (82%) n’ont pas de date de livraison renseignée — pas d’évolution temporelle fiable sur l’ensemble du jeu de données.
Tous les projets
Code
pst |>
dplyr:: arrange (dplyr:: desc (date_liv)) |>
dplyr:: transmute (Titre = titre_descriptif, Catégorie = categorie, ` Sous-catégorie ` = sous_categorie,
Arrondissement = ar, Adresse = adresse, Livraison = date_liv) |>
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" )
),
columns = list (
Titre = reactable:: colDef (minWidth = 220 ),
Catégorie = reactable:: colDef (minWidth = 140 ),
` Sous-catégorie ` = reactable:: colDef (minWidth = 160 ),
Arrondissement = reactable:: colDef (minWidth = 70 , maxWidth = 110 ),
Adresse = reactable:: colDef (minWidth = 160 ),
Livraison = reactable:: colDef (minWidth = 90 , maxWidth = 110 )
)
)
Source & données
Code
tibble:: tibble (
` ` = c ("Jeu de données" , "Producteur" , "Licence" , "Fichier" , "Mise à jour" , "Observations" ),
` ` = c (
"[Paris se transforme](https://opendata.paris.fr/explore/dataset/parissetransforme/information/)" ,
"Ville de Paris" ,
"Open Database License (ODbL)" ,
sprintf ("`data/paris/parissetransforme.parquet` (%s ko) + `arrondissements.parquet`" ,
round (file.size (pst_path) / 1024 )),
format (as.Date (file.mtime (pst_path)), "%d %B %Y" ),
sprintf ("%s projets, %d catégories" , format (n_tot, big.mark = " " ), dplyr:: n_distinct (pst$ categorie))
)
) |>
gt:: gt () |> gt:: fmt_markdown (columns = ` ` ) |>
gt:: tab_options (table.width = "100%" , column_labels.hidden = TRUE )
Jeu de données
Paris se transforme
Producteur
Ville de Paris
Licence
Open Database License (ODbL)
Fichier
data/paris/parissetransforme.parquet (406 ko) + arrondissements.parquet
Mise à jour
05 septembre 2026
Observations
3 262 projets, 14 catégories