(Acest articol a fost publicat pentru prima dată pe r.iresmi.netși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)
Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.

Zilele 20 și 21 din 30DayMapChallenge: « OpenStreetMap » și « Conflict » (anterior).
Cartografierea accidentelor între biciclete și mașini în 2023 în Franța. Recent, am avut câteva accidente triste care arată o atenție tot mai mare asupra securității bicicliștilor și a conflictelor de pe drum.
Vom folosi Baze de date anuale ale accidentelor rutiere pe un fundal OSM.
library(dplyr) library(tidyr) library(readr) library(janitor) library(sf) library(glue) library(leaflet)
Ghidul de date este disponibil (în franceză).
# vehicules-2023.csv
vehicles <- read_csv2(
"https://www.data.gouv.fr/fr/datasets/r/146a42f5-19f0-4b3e-a887-5cd8fbef057b",
name_repair = make_clean_names)
# caract-2023.csv
caract <- read_csv2(
"https://www.data.gouv.fr/fr/datasets/r/104dbb32-704f-4e99-a71e-43563cb604f2",
name_repair = make_clean_names)
# usagers-2023.csv
user <- read_csv2(
"https://www.data.gouv.fr/fr/datasets/r/68848e2a-28dd-4efc-9d5f-d512f7dbe66f",
name_repair = make_clean_names)
severity <- tribble(
~grav, ~severity,
1, "Unharmed",
2, "Killed",
3, "Injured hospitalized",
4, "Slightly injured") |>
mutate(severity = factor(
severity,
labels = c("Killed",
"Injured hospitalized",
"Slightly injured",
"Unharmed")))
# accidents where car and bikes are involved
bike_car_acc <- vehicles |>
filter(catv %in% c(1, 7)) |> # 1 bike ; 7 : car
count(num_acc, catv) |>
pivot_wider(names_from = catv, values_from = n, names_prefix = "catv_") |>
filter(catv_7 > 0 & catv_1 > 0) |>
pull(num_acc)
# bikers injuries
bikers <- vehicles |>
filter(num_acc %in% bike_car_acc,
catv == 1) |>
left_join(user, join_by(num_acc, id_vehicule)) |>
left_join(severity, join_by(grav)) |>
count(num_acc, severity)
bikers_display <- bikers |>
mutate(outcome = glue("{severity} ({n})")) |>
arrange(severity) |>
summarise(.by = num_acc,
outcome = glue_collapse(outcome, sep = "
"))
# accident locations
bike_accidents <- caract |>
filter(num_acc %in% bike_car_acc) |>
st_as_sf(coords = c("long", "lat"), crs = "EPSG:4326") |>
left_join(bikers_display, join_by(num_acc))
Adică 2858 de accidente și 772 de motocicliști uciși.
bike_accidents |>
leaflet() |>
addTiles(attribution = r"(
r.iresmi.net.
data: Ministère de l'intérieur 2023;
map: OpenStreetMap)") |>
addCircleMarkers(popup = ~ glue("{an}-{mois}-{jour}
biker status:
{outcome}"),
clusterOptions = markerClusterOptions())
