knitr::opts_chunk$set( fig.dpi = 96, fig.height = 3.5, fig.width = 7, collapse = TRUE, comment = "#>" )
# devtools::load_all() library(ACC) library(tidyverse) library(BARIS)
Ce package a pour objectif d'accéder et d'analyser les données publiques d'accidents de la circulation.
Ces données sont disponibles sur la plateforme open data data.gouv.fr.
Le package BARIS permet de faire le
lien vers l'API data.gouv.fr. On peut ainsi obtenir la présentation du dataset
à l'aide de BARIS_explain
.
id_donnees <- "53698f4ca3a729239d2036df" BARIS_explain(id_donnees)
Ce jeu de données est divisé en 4 parties CARACTÉRISTIQUES, LIEUX, USAGERS, VÉHICULES. Il existe un lot de ces 4 fichiers par année entre 2005 et 2019
Un fichier descriptif accompagne ces données, et on reprend ici brièvement les définitions données dans ce document.
ressources <- BARIS_resources(id_donnees) #Tibble avec les URL data_2019 <- ressources %>% filter(str_detect(title,"2019"),format=="csv") #On garde les fichiers csv de 2019 # if(!dir.exists("data-raw")) # dir.create("data-raw") # Commenté pour ne pas re-télécharger les données systématiquement # for(i in 1:nrow(data_2019)){ # tmp_df <- data_2019[i,] # download.file(url = tmp_df$url, # destfile = paste0("data-raw/",tmp_df$title),overwrite = T) # }
# caractéristiques générales de la table caracteristiques <- dl_caracteristiques(2019L) # caracteristiques <- read.table(here::here("data-raw","caracteristiques-2019.csv"),sep=";",header = T) # data("caracteristiques", package = "ACC") summary(caracteristiques) names(caracteristiques) nrow(caracteristiques) #58 840 caracteristiques %>% head(10)
# variable lum = Conditions d eclairage caracteristiques %>% group_by(lum) %>% summarise(n = n(), prop = n / nrow(caracteristiques)) hist(caracteristiques$lum, main = "Répartition de la variable Conditions d eclairage", col = "firebrick") # on pourrait regrouper les modalités 3 et 4 en "sans éclairage"
# variable agg = Localisation caracteristiques %>% group_by(agg) %>% summarise(n = n(), prop = n / nrow(caracteristiques)) hist(caracteristiques$agg, main = "Répartition de la variable Localisation", col = "firebrick")
# variable int = Intersection caracteristiques %>% group_by(int) %>% summarise(n = n(), prop = n / nrow(caracteristiques)) hist(caracteristiques$int, main = "Répartition de la variable Intersection", col = "firebrick") # on pourrait créer une modalité "intersection" à partir des modalités (2, 3, 4, 5, 9)
# variable atm = Conditions atmosphériques caracteristiques %>% group_by(atm) %>% summarise(n = n(), prop = n / nrow(caracteristiques)) hist(caracteristiques$atm, main = "Répartition de la variable Conditions atmosphériques", col = "firebrick") # on pourrait créer une modalité "intersection" à partir des modalités 2 et 3 et créer une modalité autre à partir des modalités (-1, 4, 5, 6, 7, 8, 9)
# variable col = Type de collision caracteristiques %>% group_by(col) %>% summarise(n = n(), prop = n / nrow(caracteristiques)) hist(caracteristiques$col, main = "Répartition de la variable Type de collision", col = "firebrick") # on pourrait créer une modalité "3 et +" à partir des modalités 4 et 5
# carac <- read.csv(here::here("data-raw","caracteristiques-2019.csv"),sep=";",header=T) # carac <- caracteristiques # Ajout des libellés relatifs à la luminosité avec regroupement des modalités 3 et 4 caracteristiques <- caracteristiques %>% select(-gps) %>% mutate(lum=case_when( lum==1 ~ "Plein jour", lum==2 ~ "Crépuscule ou aube", lum %in% c(3,4) ~ "Nuit sans éclairage", TRUE ~ "Nuit avec éclairage public") ) %>% # Ajout des libellés relatifs à l'agglomération mutate(agg=ifelse(agg==1,"Hors agglomération","En agglomération")) %>% # Ajout des libellés relatifs aux types d'intersection avec regroupement des variables 2, 3, 4, 5 et 9 en "Intersection" mutate(intersection=case_when( int==1 ~ "Hors intersection", int %in% c(2:5,9) ~ "Intersection", int==6 ~ "Giratoire", int==7 ~ "Place", TRUE ~ "Passage à niveau") ) %>% select(-`int`) %>% # Ajout des libellés relatifs aux conditions atmosphériques mutate(atm=case_when( atm==1 ~ "Normale", atm==2 ~ "Pluie légère", atm==3 ~ "Pluie forte", atm==4 ~ "Neige - grêle", atm==5 ~ "Brouillard - fumée", atm==6 ~ "Vent fort - tempête", atm==7 ~ "Temps éblouissant", atm==8 ~ "Temps couvert", TRUE ~ "Autre") ) %>% # Ajout des libellés relatifs au nombre de véhicules impliqués dans la collision avec regroupement des modalités 4 et 5 mutate(col=case_when( col=='-1' ~ "Non Renseigné", col==1 ~ "2 véhicules - frontale", col==2 ~ "2 véhicules - par l'arrière", col==3 ~ "2 véhicules - par le côté", col %in% c(4,5) ~ "3 véhicules et plus", col==6 ~ "Autre collision", TRUE~ "Sans collision") ) %>% # Date de l'accident mutate( annee = ifelse(an<2000L, an+2000, an), date_acc = lubridate::ymd(paste(annee, mois, jour, sep = '-')) ) %>% select(-an, -annee, -jour, -mois) coord_gps_code_commune <- BARIS::BARIS_resources("545b55e1c751df52de9b6045") %>% dplyr::filter(stringr::str_detect(title,"Base off")) %>% dplyr::pull(id) %>% BARIS::BARIS_extract(format = "csv") %>% dplyr::filter(coordonnees_gps!="") %>% dplyr::distinct(code_commune_insee, coordonnees_gps) %>% tidyr::separate(coordonnees_gps, sep = ",", into = c('lat','long')) caracteristiques_avec_gps <- filter(caracteristiques, !is.na(lat)) caracteristiques_sans_gps <- filter(caracteristiques, is.na(lat)) %>% select(-lat,-long) %>% left_join(coord_gps_code_commune, by = c("com"="code_commune_insee")) caracteristiques <- bind_rows(caracteristiques_avec_gps, caracteristiques_sans_gps) caracteristiques
#lieux <- read.table(here::here("data-raw","lieux-2019.csv"),sep=";",header = T) lieux <- dl_lieux(2019L) # data(lieux) summary(lieux) names(lieux) nrow(lieux) #58 840 lieux %>% head(10)
# variable catr = Catégorie de la route lieux %>% group_by(catr) %>% summarise(n = n(), prop = n / nrow(lieux)) hist(lieux$catr, main = "Répartition de la variable Catégorie de la route", col = "lightblue") # on pourrait garder les modalités 1, 2, 3 et 4 et regrouper les modalités 5 à 9 en 'autres'
# variable circ = Régime de circulation lieux %>% group_by(circ) %>% summarise(n = n(), prop = n / nrow(lieux)) hist(lieux$circ, main = "Répartition de la variable Régime de circulation", col = "lightblue") # on pourrait garder les modalités 1, 2 et 3 et regrouper les modalités -1 et 4 en 'autres/non renseigné'
# variable nbv = Nombre total de voies de circulation lieux %>% group_by(nbv) %>% summarise(n = n(), prop = n / nrow(lieux)) hist(lieux$nbv, main = "Répartition de la variable Nombre total de voies de circulation", col = "lightblue") # on pourrait garder les modalités 1, 2 et créer la modalité "3 et +" et créer la modalité "non renseigné" pour les valeurs (-1,0)
# variable prof = Profil de la route lieux %>% group_by(prof) %>% summarise(n = n(), prop = n / nrow(lieux)) hist(lieux$prof, main = "Répartition de la variable Profil de la route", col = "lightblue") # on pourrait garder les modalités 1, 2 et regrouper les modalités -1, 3 et 4 en 'autres/non renseigné'
# variable plan = Tracé de la route lieux %>% group_by(plan) %>% summarise(n = n(), prop = n / nrow(lieux)) hist(lieux$plan, main = "Répartition de la variable Tracé de la route", col = "lightblue") # il y a une modalité 4 non cité dans la doc... La modalité 4 est "en S" mais citée sur la même ligne que la modalité 3 dans la doc. # on pourrait créer une variable binaire : rectiligne/non rectiligne
# variable larrout = Largeur de la chaussée summary(lieux$larrout) # 58 468 valeurs manquantes => donnée inexploitable
# variable surf = Etat de la surface lieux %>% group_by(surf) %>% summarise(n = n(), prop = n / nrow(lieux)) hist(lieux$surf, main = "Répartition de la variable Etat de la surface", col = "lightblue") # surtout les modalités 1 et 2 => je ne sais pas si on regroupe 2, 3 et 4 pour "mouillée" et on fait une modalité autres pour le reste ou alors on ne fait que 2 modalités : normale/pas normale
# variable infra = Aménagement - Infrastructure lieux %>% group_by(infra) %>% summarise(n = n(), prop = n / nrow(lieux)) hist(lieux$infra, main = "Répartition de la variable Aménagement - Infrastructure", col = "lightblue") # je ne sais pas trop pour les regroupements possibles
# variable situ = Situation de l’accident lieux %>% group_by(situ) %>% summarise(n = n(), prop = n / nrow(lieux)) hist(lieux$situ, main = "Répartition de la variable Situation de l accident", col = "lightblue") # a minima on pourrait regrouper les modalités -1, 6 et 8 en "autres"
# Ajout des libellés relatifs à la catégorie de route avec regroupement les madalités 5 à 9 en "Autre" # data("lieux",package = "ACC") lieux <- lieux %>% select(-larrout, -lartpc, -env1, -v1, -v2, -vosp, -pr, -pr1) %>% #On retire la variable larrout, lartpc, env1 (non ducmentée) mutate(catr=case_when( catr==1 ~ "Autoroute", catr==2 ~ "Route Nationale", catr==3 ~ "Route Départementale", catr==4 ~ "Voie Communale", TRUE ~ "Autre") ) %>% # Ajout des libellés relatifs au régime de circulation avec regroupement des modalités -1 et 4 en "Autre/Non Renseigné" mutate(circ=case_when( circ==1 ~ "A sens unique", circ==2 ~ "Bidirectionnelle", circ==3 ~ "A chaussées séparées", TRUE ~ "Autre/Non Renseigné") ) %>% # Ajout des libellés relatifs au nombre de voies de circulation avec regroupement des modalités 3 et plus en une seule modalité et regroupement des modalités -1 et 0 en "Non Renseigné" mutate(nbv=ifelse( nbv %in% c(1,2),nbv, ifelse( nbv >=3, "3 et plus","Non Renseigné" ) ) ) %>% # Ajout des libellés relatifs au profil de la route avec regroupement des modalités -1, 3 et 4 en "Autre/Non Renseigné" mutate(prof=case_when( prof==1 ~ "Plat", prof==2 ~ "Pente", TRUE ~ "Autre/Non Renseigné") ) %>% # Ajout des libellés relatifs au tracé de la route dans une variable binaire "Rectiligne/Non rectiligne" mutate(plan=case_when( plan==1 ~ "Rectiligne", plan %in% c(2,3,4) ~ "Non Rectiligne", TRUE ~ "Non Renseigné") ) %>% # Ajout des libellés relatifs à la surface en faisant 2 modalités : Normale et Anormale. mutate(surf=case_when( surf==1 ~ "Normale", surf %in% c(2:9) ~ "Anormale", TRUE ~ "Non Renseigné") ) %>% # Ajout des libellés relatifs à la présence d'un aménagement ou d'une infrastructure, regroupement en 3 modalités "Oui/Non/Non Renseigné" mutate(infra=case_when( infra==0 ~ "Non", infra %in% c(1:9) ~ "Oui", TRUE ~ "Non Renseigné") ) %>% # Ajout des libellés relatifs à la situation de l'accident en regroupant les modalités -1, 6 et 8 en "Autre/Non Renseigné" mutate(situ=case_when( situ==0 ~ "Aucun", situ==1 ~ "Sur chaussée", situ==2 ~ "Sur bande d'arrêt d'urgence", situ==3 ~ "Sur accotement", situ==4 ~ "Sur trottoir", situ==5 ~ "Sur piste cyclable", TRUE ~ "Autre/Non Renseigné") ) lieux
# data("vehicules",package = "ACC") # vehicules <- read.table(here::here("data-raw","vehicules-2019.csv"),sep=";",header = T) vehicules <- dl_vehicules(2019L) # data(vehicules) summary(vehicules) names(vehicules) nrow(vehicules) #100710 vehicules %>% head(10)
# variable senc = Sens de circulation vehicules %>% group_by(senc) %>% summarise(n = n(), prop = n / nrow(vehicules)) hist(vehicules$senc, main = "Répartition de la variable Sens de circulation", col = "forestgreen") # pas convaincue par l'intérêt de cette variable
# variable catv = Catégorie du véhicule vehicules %>% group_by(catv) %>% summarise(n = n(), prop = n / nrow(vehicules)) %>% arrange(desc(prop)) hist(vehicules$catv, main = "Répartition de la variable Catégorie du véhicule", col = "forestgreen") # on pourrait commencer les données à partir de 2006 car cela supprimerait déjà 9 modalités
# variable obs = Obstacle fixe heurté vehicules %>% group_by(obs) %>% summarise(n = n(), prop = n / nrow(vehicules)) %>% arrange(desc(prop)) hist(vehicules$obs, main = "Répartition de la variable Obstacle fixe heurté", col = "forestgreen") # on pourrait créer une variable binaire : oui/non
# variable obsm = Obstacle mobile heurté vehicules %>% group_by(obsm) %>% summarise(n = n(), prop = n / nrow(vehicules)) %>% arrange(desc(prop)) hist(vehicules$obsm, main = "Répartition de la variable Obstacle mobile heurté", col = "forestgreen") # on pourrait regrouper les modalités en : aucun/piéton/véhicules/animal/autre
# variable choc = Point de choc initial vehicules %>% group_by(choc) %>% summarise(n = n(), prop = n / nrow(vehicules)) %>% arrange(desc(prop)) hist(vehicules$choc, main = "Répartition de la variable Point de choc initial", col = "forestgreen") # Fait-on des regroupements du style : avant/arrière/côté et aucun ?
# variable manv = Manoeuvre principale avant l’accident vehicules %>% group_by(manv) %>% summarise(n = n(), prop = n / nrow(vehicules)) %>% arrange(desc(prop)) hist(vehicules$manv, main = "Répartition de la variable Manoeuvre principale avant l’accident", col = "forestgreen") # Vu les résultats de la répartition, pas convaincue de l'intérêt de la variable
# variable occutc = Nombre d’occupants dans le transport en commun summary(vehicules$occutc) # 99 818 valeurs manquantes => donnée inexploitable
# Ajout des libellés relatifs à la catégorie de véhicules vehicules <- vehicules %>% select(-c(senc,manv,occutc)) %>% # On retire les variables inexploitables mutate(catv=case_when( catv==1 ~ "Bicyclette", catv %in% c(2,30:34) ~ "2 roues motorisé", catv==7 ~ "VL seul", catv==10 ~ "VU seul", catv %in% c(13:15) ~ "Poids lourd", catv %in% c(16:17,20:21) ~ "Engin agricole", catv %in% c(37,38) ~ "Bus", catv==39 ~ "Train", catv==40 ~ "Tramway", catv %in% c(35,36) ~ "Quad", TRUE ~ "Autre") ) %>% # Ajout d'une variable binaire "Oui/Non" si un obstacle fixe a été heurté mutate(obs=case_when( obs==0 ~ "Non", obs %in% c(1:17) ~ "Oui", TRUE ~ "Non Renseigné") ) %>% # Ajout des libellés relatifs à l'obstale mobile heurté avec regroupement en Aucun/Piéton/Véhicule/Animal/Autre mutate(obsm=case_when( obsm==0 ~ "Aucun", obsm==1 ~ "Piéton", obsm %in% c(2,4) ~ "Véhicule", obsm %in% c(5,6) ~ "Animal", TRUE ~ "Autre") ) %>% # Ajout des libellés relatifs au point de choc initial avec regroupement Avant/Arrière/Côté/Aucun mutate(choc=case_when( choc==0 ~ "Aucun", choc %in% c(1:3) ~ "Avant", choc %in% c(4:6) ~ "Arrière", choc %in% c(7,8) ~ "Côté", choc==9 ~ "Chocs multiples (tonneaux)", TRUE ~ "Non Renseigné") ) vehicules
# usagers <- read.table(here::here("data-raw","usagers-2019.csv"),sep=";",header = T) # usagers <- data("usagers",package = "ACC") usagers <- dl_usagers(2019L) # data(usagers) summary(usagers) names(usagers) nrow(usagers) #132977 usagers %>% head(10)
# variable place = Place occupée dans le véhicule usagers %>% group_by(place) %>% summarise(n = n(), prop = n / nrow(usagers)) %>% arrange(desc(prop)) hist(usagers$place, main = "Répartition de la variable Place occupée dans le véhicule", col = "orange") # pas convaincue de son apport par rapport à la variable catu
# variable catu = Catégorie d'usager usagers %>% group_by(catu) %>% summarise(n = n(), prop = n / nrow(usagers)) %>% arrange(desc(prop)) hist(usagers$catu, main = "Répartition de la variable Catégorie d'usager", col = "orange") # on garde telle quelle
# variable grav = Gravité de blessure de l'usager usagers %>% group_by(grav) %>% summarise(n = n(), prop = n / nrow(usagers)) %>% arrange(desc(prop)) hist(usagers$grav, main = "Répartition de la variable Gravité de blessure de l'usager", col = "orange") # on garde telle quelle
# variable - an_nais = Année de naissance summary(usagers$an_nais) hist(usagers$an_nais, main = "Répartition des accidentés selon leur année de naissance", col = "orange") # à voir si on fait des classes
# variable trajet = Motif du déplacement au moment de l’accident usagers %>% group_by(trajet) %>% summarise(n = n(), prop = n / nrow(usagers)) %>% arrange(desc(prop)) hist(usagers$trajet, main = "Répartition de la variable Motif du déplacement au moment de l’accident", col = "orange") # les modalités non renseigné ou autre représentent 33 % => pas convaincue de son intérêt
# variable locp = Localisation du piéton usagers %>% group_by(locp) %>% summarise(n = n(), prop = n / nrow(usagers)) %>% arrange(desc(prop)) hist(usagers$locp, main = "Répartition de la variable Localisation du piéton", col = "orange") # les modalités non renseigné ou sans objet représentent 92 % => pas convaincue de son intérêt sauf si on fait un zoom sur les accidents avec piétons
# variable actp = Action du piéton usagers %>% group_by(actp) %>% summarise(n = n(), prop = n / nrow(usagers)) %>% arrange(desc(prop)) hist(as.numeric(usagers$actp), main = "Répartition de la variable Action du piéton", col = "orange") # idem variable locp
# variable etatp = Accompagnants du piéton usagers %>% group_by(etatp) %>% summarise(n = n(), prop = n / nrow(usagers)) %>% arrange(desc(prop)) hist(usagers$etatp, main = "Répartition de la variable Accompagnants du piéton", col = "orange") # idem variable locp
# Ajout des libellés relatifs à la catégorie d'usager usagers <- usagers %>% select(-c(place,trajet,locp,actp,etatp)) %>% # On retire les variables inexploitables mutate(catu=case_when( catu==1 ~ "Conducteur", catu==2 ~ "Passager", catu==3 ~ "Piéton") ) %>% # Ajout des libellés relatifs à la gravité de blessure de l'usager mutate(grav=case_when( grav==1 ~ "Indemne", grav==2 ~ "Tué", grav==3 ~ "Blessé hospitalisé", grav==4 ~ "Blessé léger") ) %>% # Ajout des libellés relatifs au sexe de l'usager mutate(sexe=case_when( sexe==1 ~ "Masculin", sexe==2 ~ "Féminin") ) usagers
accidents <- usagers %>% left_join(vehicules %>% distinct(Num_Acc, num_veh, catv), by = c("Num_Acc", "num_veh")) %>% left_join(caracteristiques, by = c("Num_Acc")) %>% left_join(lieux,by = c("Num_Acc"))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.