---
title: "Régression logistique :  accidents de la circulation / (1) Préparation des données"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, warning=FALSE)
library(tidyverse)
```


# Introduction
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/"

## Description des données

### Données brutes        
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.

### Données étudiées
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
```{r}
accidents = read_csv("./data_TP/data_to_clean.csv")
```

## Nettoyage des données 
- Créer à partir de la variable `date` une variable `month`et une variable `year` et une variable `day`
```{r}
accidents = accidents %>% mutate(month = factor(lubridate::month(date)),year = lubridate::year(date),day = factor(lubridate::wday(date))) %>% select(-date)
```

- Quelle est la proportion de lignes contenant au moins une valeur manquante ?
```{r}
sum(accidents %>% is.na %>% rowSums>0) / nrow(accidents)
```

- Enlever toutes les colonnes qui contiennent plus de 5% de NA
```{r}
prop_missing = accidents %>% summarise_all(funs(sum(is.na(.)))) /nrow(accidents)
colonnes_a_enlever = colnames(accidents)[prop_missing>0.05]
colonnes_a_enlever
accidents = accidents %>% select(-colonnes_a_enlever)
```

- Quelle est maintenant la proportion de lignes contenant au moins une valeur manquante ? et quelles sont les colonnes qui contiennent des NA ?
```{r}
sum(accidents %>% is.na %>% rowSums>0) / nrow(accidents)
```
```{r}
col_missing = accidents %>% summarise_all(funs(sum(is.na(.)))) %>% gather(variable,n_missing) %>% filter(n_missing >0)
print(col_missing)
```
- Imputer les valeurs manquantes suivant la règle suivante : si la variable est factorielle remplacer la valeur manquante par le mode, si la variable est continue remplacer par la médiane
```{r}
col_missing_class = col_missing %>% left_join(accidents %>% summarise_all(class) %>% gather(variable,class))
print(col_missing_class)

```
```{r}
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)
  
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])
}
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)

accidents = bind_cols(accidents_numeric,accidents_charac)
```

On vérifie
```{r}
sum(accidents %>% is.na %>% rowSums>0) / nrow(accidents)
```


## Création du label
- Créer un nouvelle base en créant le label `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 base
```{r}
unique(accidents$grav)
accidents_label = mutate(accidents, Y = recode_factor(grav, 
                                      "Blesse hospitalise" = "1",
                                      "Indemne" = "0",
                                      "Blesse leger" = "0",
                                      "Tue" = "1")
                    )
accidents_label = select(accidents_label,-grav)
```
- Exporter les tables `accidents` et `accidents_label`. Effacer la mémoire et recharger la table `accidents_label` dans un autre .Rmd
```{r}
write_csv(accidents,"./data_TP/accidents.csv")
write_csv(accidents_label,"./data_TP/accidents_label.csv")
```
```





