{"word_count": 390, "character_count": 3924}
Il y a quelques mois, j'avais commencé à reprendre des codes que j'avais vu passer dans les projets de R que j’avais donnés pour la formation Data Science pour l’Actuariat. J'avais commencé avec un billet sur sur cartographier le vote pour le Brexit (qui avait été repris - et amélioré - sur le site des voisins de rgeomatic). Aujourd'hui, en rangeant un peu mon ordinateur, je suis tombé sur un code de Quentin sur les acccidents de la route à Paris.Comme toujours on charge quelques packagesrequire(downloader)require(ggmap)require(stringr)options(encoding = "UTF-8")et on récupère les données, en ligne sur https://opendata.paris.frpath="https://opendata.paris.fr/explore/dataset/accidentologie/download/?format=csv&#38;timezone=Europe/Berlin&#38;use_labels_for_header=true"dest="test"download(path,destfile=dest,mode="wb")loc=paste(getwd(),"/",dest,sep="" )obj &#60;- read.csv(file = loc, stringsAsFactor = FALSE,sep=";")file.remove(dest)On peut commencer par regarder quand on eu lieu les accidents, quelle jour et à quelle heure. On va alors agréger les donnéest=data.frame(obj,counter=1)parJour=aggregate(t$counter, by=list(format(as.Date(t$Date),"%A")), sum)et créer une base qui contient toutes les informationsvec_dat=data.frame();vec_dat[ (1:3),1]=parJour$Group.1[3:5]vec_dat[ (1:3),2]=parJour$x[3:5]vec_dat[ 4,1]=parJour$Group.1[2]vec_dat[ 4,2]=parJour$x[2]vec_dat[ 5,1]=parJour$Group.1[7]vec_dat[ 5,2]=parJour$x[7]vec_dat[ 6,1]=parJour$Group.1[6]vec_dat[ 6,2]=parJour$x[6]vec_dat[ 7,1]=parJour$Group.1[1]vec_dat[ 7,2]=parJour$x[1]on va rajouter un nom, pour que ce soit plus clairnames(vec_dat)[1]="Jour";names(vec_dat)[2]="Nbsinistre"On choisit éventuellement une palette de couleursPalette&#60;-colorRampPalette(c("lightblue","darkblue"))et on fait un barplot, pour compter le nombre d'accidents, par jour de la semaine, sur Parisbarplot(vec_dat$Nbsinistre,names.arg=vec_dat$Jour,main="Répartition du nombre d'accidents par jour de la semaine ", col=Palette(10), xlab="jour de la semaine", ylab="nombre d'accidents")On peut ensuite regarder par heure de la journée (en données brutes, sans lissage)parHeure=aggregate(t$counter, by=list(format(strptime(t$Heure,format="%H:%M"),"%H")), sum)plot(parHeure,type="l", col=c("blue"), main=" Répartition du nombre d'accidents par heure de la journée", xlab="heure de la journee", ylab="nombre d'accidents")Passons maintenant à de la géolocalisationt2 = subset(t, Coordonnées!= "")coord=data.frame(t(matrix(as.numeric(unlist(strsplit(t2$Coordonnées,"[,]"))),nrow=2)))t2$lat=coord[,1]t2$lon=coord[,2]t2 = subset(t2, ((48.81 &#60;= lat) &#38; (lat&#60;=48.90) &#38; (2.25&#60;=lon) &#38;(lon&#60;=2.43) ) )On peut regarder sur une carte où ont eu lieu les accidentsmap&#60;-get_map(location = "Paris", zoom=12, maptype="roadmap", color="bw")vis &#60;- ggmap(map) + geom_point(data = t2, aes(x=lon, y=lat, color=1)) + theme( legend.position="none") + labs(title="Cartographie des accidents à Paris")visOn peut tenter une densité (brute, non corrigée d'une densité de routes, ou de population)overlay&#60;-stat_density2d(data=t2, aes(x=lon, y=lat, fill=..level.., alpha=..level..), contour=T, n=100, geom="polygon")densi&#60;- ggmap(map) + overlay + scale_fill_gradient("Accident Density") +scale_alpha(range=c(0.4,0.75),guide=FALSE) + guides(fill=guide_colorbar(barwidth=1.5, barheight = 10))densi = densi + labs(title="Densite des accidents à Paris")densiet non-corrigée ici d'effets de bords (ce qui donne l'illusion qu'il y a plus d'accidents intra-muros que sur le boulevard périphérique par exemple). On peut également regarder en fonction de variables explicatives, comme le type de véhicules impliqués, ou la gravitédensi_byGravUs&#60;- densi + facet_wrap(~ Usager.1.Grav, nrow=2)densi_byGravUs = densi_byGravUs + labs(title="Densité des accidents à Paris par gravité d'accident")densi_byGravUsBref, on peut faire facilement plein de chose à partir de ces données.