Site icon R-bloggers

Bike accidents

[This article was first published on r.iresmi.net, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Ciclista atropellado – CC-BY by Nicanor Arenas Bermejo

Day 20 & 21 of 30DayMapChallenge: « OpenStreetMap » and « Conflict » (previously).

Mapping the accidents between bicycles and cars in 2023 in France. We have had a few sad accidents recently showing a growing attention on cyclist security and the conflicts on the road.

We’ll use the Annual databases of road traffic injuries on an OSM background.

< section id="config" class="level1">

Config

library(dplyr)
library(tidyr)
library(readr)
library(janitor)
library(sf)
library(glue)
library(leaflet)
< section id="data" class="level1">

Data

The data guide is available (in french).

# 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")))
< section id="find-out" class="level1">

Find out

# 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 = "<br />"))

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

That’s 2858 accidents and 772 bikers killed.

< section id="map" class="level1">

Map

bike_accidents |> 
  leaflet() |> 
  addTiles(attribution = r"(
           <a href="https://r.iresmi.net/">r.iresmi.net</a>.
           data: Ministère de l'intérieur 2023;
           map: <a href="https://www.openstreetmap.org/copyright/">OpenStreetMap</a>)") |> 
  addCircleMarkers(popup = ~ glue("<b>{an}-{mois}-{jour}</b><br /><br />
                                  biker status:<br />
                                  {outcome}"),
                   clusterOptions = markerClusterOptions())
To leave a comment for the author, please follow the link and comment on their blog: r.iresmi.net.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Exit mobile version