(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())