{"word_count": 326, "character_count": 4962}
Encore un billet dans le cadre du projet R de la formation en Data Science pour l’Actuariat, avec quelques lignes de codes pour visualiser les accidents corporels, en France. Il y aura d'autres billets sur ces données dans les jours à venir. Le premier s'inspire du projet de Guillaume Gerber. L'idée est de normaliser par la population d'un département, quand on va visualiser le nombre d'accidents.On va commencer par récupérer notre fond de cartelibrary(rgdal)library(sp)library(data.table)library(dplyr)library(plyr)download.file(url = "http://professionnels.ign.fr/sites/default/files/GEOFLA_1-1_SHP_LAMB93_FR-ED111.tar.gz",destfile="GEOFLA.tar.gz")untar("GEOFLA.tar.gz")Ces données contiennent la population. Mais par commune. Donc on va aggréger pour l'avoir par départementcom &#60;- readOGR(dsn = "./GEOFLA_1-1_SHP_LAMB93_FR-ED111/COMMUNES/", layer="COMMUNE", stringsAsFactors=FALSE,encoding = "UTF-8")com &#60;- readOGR(dsn = "/home/arthur/Téléchargements/projet-R-DSA-2016/GEOFLA_1-1_SHP_LAMB93_FR-ED111/COMMUNES/", layer="COMMUNE")dep &#60;- readOGR(dsn = "/home/arthur/Téléchargements/projet-R-DSA-2016/GEOFLA_1-1_SHP_LAMB93_FR-ED111/DEPARTEMENTS/", layer="DEPARTEMENT", stringsAsFactors=FALSE,encoding = "UTF-8")pop &#60;- as.data.table(tapply(X=com$POPULATION, INDEX = com$CODE_DEPT, FUN = sum), keep.rownames=TRUE)colnames(pop) &#60;- c("CODE_DEPT","POPULATION")superficie &#60;- as.data.table(tapply(X=com$SUPERFICIE, INDEX = com$CODE_DEPT, FUN = sum), keep.rownames=TRUE)colnames(superficie) &#60;- c("CODE_DEPT","SUPERFICIE")dep@data &#60;- inner_join(dep@data, pop)dep@data &#60;- inner_join(dep@data, superficie)dep@data$POPULATION &#60;- dep@data$POPULATION * 1000On va ensuite récupérer les données d'accidents de la routedebut_url_base_accident = "https://www.data.gouv.fr/s/resources/"acc_caract &#60;- read.csv(file = paste(debut_url_base_accident,"base-de-donnees-accidents-corporels-de-la-circulation-sur-6-annees/20150806-155035/caracteristiques_2010.csv",sep=''),colClasses=c("com"="character","dep"="character"))acc_caract &#60;- rbind(acc_caract,read.csv(file = paste(debut_url_base_accident,"base-de-donnees-accidents-corporels-de-la-circulation-sur-6-annees/20150806-154723/caracteristiques_2011.csv",sep=""), colClasses=c("com"="character","dep"="character")))acc_caract &#60;- rbind(acc_caract,read.csv(file = paste(debut_url_base_accident,"base-de-donnees-accidents-corporels-de-la-circulation-sur-6-annees/20150806-154431/caracteristiques_2012.csv",sep=""), colClasses=c("com"="character","dep"="character")))acc_caract &#60;- rbind(acc_caract,read.csv(file = paste(debut_url_base_accident,"base-de-donnees-accidents-corporels-de-la-circulation-sur-6-annees/20150806-154105/caracteristiques_2013.csv",sep=""), colClasses=c("com"="character","dep"="character")))acc_caract &#60;- rbind(acc_caract,read.csv(file = paste(debut_url_base_accident,"base-de-donnees-accidents-corporels-de-la-circulation-sur-6-annees/20150806-153701/caracteristiques_2014.csv",sep=""), colClasses=c("com"="character","dep"="character")))acc_caract &#60;- rbind(acc_caract,read.csv(file = paste(debut_url_base_accident,"base-de-donnees-accidents-corporels-de-la-circulation/20160909-181230/caracteristiques_2015.csv",sep=""), colClasses=c("com"="character","dep"="character")))acc_caract$dep[which(acc_caract$dep %in% "201")] &#60;- "2A0"acc_caract$dep[which(acc_caract$dep %in% "202")] &#60;- "2B0"acc_caract$dep &#60;- substr(acc_caract$dep, 1, 2)Maintenant, on peut compter, par année, par département (ou en aggrégeant, temporellement)dep_with_nb_acc &#60;- function(acc_caract, dep,nb_an=1,normalize=FALSE){acc_nb_par_dep &#60;- count(acc_caract,"dep")acc_nb_par_dep$dep &#60;- substr(acc_nb_par_dep$dep, 1, 2)names(acc_nb_par_dep)[names(acc_nb_par_dep) == "dep"] &#60;- "CODE_DEPT"dep@data &#60;- inner_join(dep@data, acc_nb_par_dep)dep@data$SUPERFICIE &#60;- dep@data$SUPERFICIE/100 # en km^2dep@data$freq_par_hab &#60;- (dep@data$freq/nb_an)/dep@data$POPULATIONm &#60;- sum(dep@data$freq/nb_an)/sum(dep@data$POPULATION)if(normalize) dep@data$freq_par_hab &#60;- log(dep@data$freq_par_hab/m)return(dep)}On va alors constituer nos bases,data_plot &#60;-  c("2010_2015" = dep_with_nb_acc(acc_caract, dep,nb_an = 6),"2010_2015_n" = dep_with_nb_acc(acc_caract, dep,nb_an = 6,normalize=TRUE))La première correspond juste au nombre d'accident, sur 6 ans, normalisé par la population (ce qui pourraît être vu comme une fréquence d'accident corporel)zmax = max(data_plot[[1]]@data$freq_par_hab)spplot(obj = data_plot$'2010_2015',"freq_par_hab",at = seq(0, zmax, by = zmax/10),main = "")mais on peut aussi normaliser par la fréquence nationale, afin de faire ressortir les départements les plus dangereux. On est également passé sur une échelle logarithmique,zmin = min(data_plot[[8]]@data$freq_par_hab)zmax = max(data_plot[[8]]@data$freq_par_hab)spplot(obj = data_plot$'2010_2015_n',"freq_par_hab",at = seq(zmin, zmax, by = (zmax-zmin)/10),main = "")