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("sanisettesparis.qmd")'
knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE,
fig.width = 8, fig.height = 5, dpi = 150)
sani_path <- here::here("data", "paris", "sanisettesparis.parquet")
sani <- arrow::read_parquet(sani_path) |>
dplyr::mutate(ar = suppressWarnings(as.integer(substr(arrondissement, 4, 5))))
n_tot <- nrow(sani)
arr_sf <- arrondissements_sf()
pts_sf <- sani |>
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())
610 toilettes publiques gratuites, essentiellement des sanisettes automatiques. 95% en service, 83% accessibles aux personnes à mobilité réduite.
Code
sani |>
dplyr::transmute(Type = type, Adresse = adresse, Arrondissement = ar,
Statut = statut, `Accès PMR` = acces_pmr, Horaire = horaire) |>
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%")
| Type |
Adresse |
Arrondissement |
Statut |
Accès PMR |
Horaire |
| Sanisette |
5 pl violet |
15 |
En service |
Oui |
06h00 - 22h00 |
| Sanisette |
12 all thomy-thierry |
7 |
En service |
Oui |
06h00 - 22h00 |
| Sanisette |
23 rue du depart |
14 |
En service |
Oui |
24/24h |
| Sanisette |
81 qu de valmy |
10 |
En service |
Oui |
24/24h |
| WC |
1 place de la republique dominicaine |
8 |
En service |
Non |
Horaires du parc |
| WC |
8 avenue de la sibelle |
14 |
En service |
Non |
Horaires du parc |
| Sanisette |
58 av de la republique |
11 |
En service |
Oui |
24/24h |
| WC |
17 allee de la deuxieme db |
15 |
En service |
Non |
Horaires du parc |
Carte
Code
pal <- leaflet::colorFactor(c("#2f6f4f", "#c0392b"), domain = c("En service", "Hors service"))
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.8,
fillColor = ~pal(statut),
label = ~sprintf("%s — %s", type, adresse),
popup = ~sprintf("<b>%s</b><br>%s<br>%s<br>Horaire : %s<br>PMR : %s",
type, adresse, statut, horaire, acces_pmr)
) |>
leaflet::addLegend("bottomright", pal = pal, values = ~statut, title = "Statut", opacity = 0.9)
Par arrondissement
Code
cnt <- sani |> 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 = "Toilettes") +
labs(title = "Toilettes publiques par arrondissement") +
theme_carte
Types et accessibilité
Code
sani |>
dplyr::count(type, sort = TRUE) |>
dplyr::mutate(type = forcats::fct_reorder(type, n)) |>
ggplot(aes(n, type)) +
geom_col(fill = "#3b6f8a", width = 0.6) +
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 = "Sanisette automatique et WC classiques dominent — un seul urinoir femme recensé",
x = NULL, y = NULL) +
theme_barres
Source & données
Code
tibble::tibble(
` ` = c("Jeu de données", "Producteur", "Licence", "Fichier", "Mise à jour", "Observations"),
` ` = c(
"[Sanisettes de Paris](https://opendata.paris.fr/explore/dataset/sanisettesparis/information/)",
"Direction de la Voirie et des Déplacements — Ville de Paris",
"Open Database License (ODbL)",
sprintf("`data/paris/sanisettesparis.parquet` (%s ko) + `arrondissements.parquet`",
round(file.size(sani_path) / 1024)),
format(as.Date(file.mtime(sani_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 |
Sanisettes de Paris |
| Producteur |
Direction de la Voirie et des Déplacements — Ville de Paris |
| Licence |
Open Database License (ODbL) |
| Fichier |
data/paris/sanisettesparis.parquet (39 ko) + arrondissements.parquet |
| Mise à jour |
05 septembre 2026 |
| Observations |
610 équipements |