Nous allons travailler sur la base (open data) des accidents corporels de la circulation. Voici le descriptif disponible sur la page “https://www.data.gouv.fr/fr/datasets/base-de-donnees-accidents-corporels-de-la-circulation/”
Pour chaque accident corporel (soit un accident survenu sur une voie ouverte à la circulation publique, impliquant au moins un véhicule et ayant fait au moins une victime ayant nécessité des soins), des saisies d’information décrivant l’accident sont effectuées par l’unité des forces de l’ordre (police, gendarmerie, etc.) qui est intervenue sur le lieu de l’accident. Ces saisies sont rassemblées dans une fiche intitulée bulletin d’analyse des accidents corporels. L’ensemble de ces fiches constitue le fichier national des accidents corporels de la circulation dit " Fichier BAAC " administré par l’Observatoire national interministériel de la sécurité routière “ONISR”.
Les bases de données, extraites du fichier BAAC, répertorient l’intégralité des accidents corporels de la circulation intervenus durant une année précise en France métropolitaine ainsi que les départements d’Outre-mer (Guadeloupe, Guyane, Martinique, La Réunion et Mayotte depuis 2012) avec une description simplifiée. Cela comprend des informations de localisation de l’accident, telles que renseignées ainsi que des informations concernant les caractéristiques de l’accident et son lieu, les véhicules impliqués et leurs victimes.
[…] Les bases de données de 2005 à 2017 sont désormais annuelles et composées de 4 fichiers (Caractéristiques, Lieux, Véhicules, Usagers ) au format csv.
Les données ont été préparées pour le TP :
seuls les accidents en Ile-de-France sont été considérés
chaque ligne correspond à un individu impliqué dans un accident
accidents = read_csv("./data_TP/data_to_clean.csv")
## Parsed with column specification:
## cols(
## .default = col_character(),
## Num_Acc = col_double(),
## place = col_double(),
## an_nais = col_double(),
## occutc = col_double(),
## date = col_datetime(format = ""),
## lat = col_double(),
## long = col_double(),
## dep = col_double(),
## v1 = col_double(),
## nbv = col_double(),
## pr = col_double(),
## pr1 = col_double(),
## lartpc = col_double(),
## larrout = col_double()
## )
## See spec(...) for full column specifications.
date
une variable month
et une variable year
et une variable day
accidents = accidents %>% mutate(month = factor(lubridate::month(date)),year = lubridate::year(date),day = factor(lubridate::wday(date))) %>% select(-date)
sum(accidents %>% is.na %>% rowSums>0) / nrow(accidents)
## [1] 1
prop_missing = accidents %>% summarise_all(funs(sum(is.na(.)))) /nrow(accidents)
colonnes_a_enlever = colnames(accidents)[prop_missing>0.05]
colonnes_a_enlever
## [1] "place" "trajet" "secup" "secuu" "locp" "actp" "etatp"
## [8] "senc" "obs" "obsm" "choc" "manv" "gps" "lat"
## [15] "long" "voie" "v1" "v2" "circ" "pr" "pr1"
## [22] "vosp" "plan" "infra"
accidents = accidents %>% select(-colonnes_a_enlever)
sum(accidents %>% is.na %>% rowSums>0) / nrow(accidents)
## [1] 0.1331421
col_missing = accidents %>% summarise_all(funs(sum(is.na(.)))) %>% gather(variable,n_missing) %>% filter(n_missing >0)
print(col_missing)
## # A tibble: 14 x 2
## variable n_missing
## <chr> <int>
## 1 an_nais 307
## 2 int 198
## 3 atm 8
## 4 col 1
## 5 com 6
## 6 adr 8979
## 7 catr 2
## 8 nbv 1261
## 9 prof 22436
## 10 lartpc 14861
## 11 larrout 14708
## 12 surf 16323
## 13 situ 25703
## 14 env1 870
col_missing_class = col_missing %>% left_join(accidents %>% summarise_all(class) %>% gather(variable,class))
## Joining, by = "variable"
print(col_missing_class)
## # A tibble: 14 x 3
## variable n_missing class
## <chr> <int> <chr>
## 1 an_nais 307 numeric
## 2 int 198 character
## 3 atm 8 character
## 4 col 1 character
## 5 com 6 character
## 6 adr 8979 character
## 7 catr 2 character
## 8 nbv 1261 numeric
## 9 prof 22436 character
## 10 lartpc 14861 numeric
## 11 larrout 14708 numeric
## 12 surf 16323 character
## 13 situ 25703 character
## 14 env1 870 character
accidents_numeric = accidents %>% select_if(is.numeric)
medians = accidents_numeric %>% summarise_all(median,na.rm=T)
accidents_numeric = accidents_numeric %>% replace_na(as.list(medians))
sum(accidents_numeric %>% is.na %>% rowSums>0) / nrow(accidents_numeric)
## [1] 0
accidents_charac = accidents %>% select_if(is.character)
most_frequent = NULL
for (var in names(accidents_charac)){
print(var)
most_frequent = c(most_frequent,names(which.max(table(accidents_charac %>%select(var))))[1])
}
## [1] "catu"
## [1] "grav"
## [1] "sexe"
## [1] "num_veh"
## [1] "catv"
## [1] "lum"
## [1] "agg"
## [1] "int"
## [1] "atm"
## [1] "col"
## [1] "com"
## [1] "adr"
## [1] "catr"
## [1] "prof"
## [1] "surf"
## [1] "situ"
## [1] "env1"
names(most_frequent) = names(accidents_charac)
accidents_charac = accidents_charac %>% replace_na(as.list(most_frequent))
sum(accidents_charac %>% is.na %>% rowSums>0) / nrow(accidents_charac)
## [1] 0
accidents = bind_cols(accidents_numeric,accidents_charac)
On vérifie
sum(accidents %>% is.na %>% rowSums>0) / nrow(accidents)
## [1] 0
Y
qui prend la valeur 0
si la variable grav
prend les valeurs Indemne
ou Blesse leger
et la valeur 1
si elle prend les valeurs Blesse hospitalise
ou Tue
. Enlever la variable grav
de cette nouvelle baseunique(accidents$grav)
## [1] "Blesse hospitalise" "Indemne" "Blesse leger"
## [4] "Tue"
accidents_label = mutate(accidents, Y = recode_factor(grav,
"Blesse hospitalise" = "1",
"Indemne" = "0",
"Blesse leger" = "0",
"Tue" = "1")
)
accidents_label = select(accidents_label,-grav)
accidents
et accidents_label
. Effacer la mémoire et recharger la table accidents_label
dans un autre .Rmdwrite_csv(accidents,"./data_TP/accidents.csv")
write_csv(accidents_label,"./data_TP/accidents_label.csv")
```