Les données sur les accidents auto corporels sont disponibles sur le site de data gouv.
Pour la visualisation géogrpahique des accidents, on peut utiliser le package R leaflet.
#### constitution de base ####
caracteristiques=data.table()
vehicules=data.table()
usagers=data.table()
lieux=data.table()
for (annee in seq(2010,2014,1)){
caracteristiques <- rbind(caracteristiques,
data.table(read.csv(paste0("caracteristiques_",annee,".csv"))))
# vehicules <- rbind(vehicules,
# data.table(read.csv(paste0("vehicules_",annee,".csv"))))
# usagers <- rbind(usagers,
# data.table(read.csv(paste0("usagers_",annee,".csv"))))
# lieux <- rbind(lieux,
# data.table(read.csv(paste0("lieux_",annee,".csv"))))
}
caracteristiques$lat[caracteristiques$lat == 0] <- NA
caracteristiques$lat <- caracteristiques$lat/100000
caracteristiques$lat <- as.double(caracteristiques$lat)
caracteristiques$long[caracteristiques$long == 0] <- NA
caracteristiques$long <- caracteristiques$long/100000
caracteristiques$long <- as.double(caracteristiques$long)
geoloc=data.table(lat=caracteristiques$lat,
long=caracteristiques$long,
dep=caracteristiques$dep)
geoloc=geoloc[is.na(lat)==FALSE,]
geoloc=geoloc[is.na(long)==FALSE,]
geoloc=geoloc[geoloc$long<1000,]
nrow(geoloc)/nrow(caracteristiques)
## [1] 0.339456
Dans un premier temps, on doit nettoyager la base de données :
adr1=geocode(paste0(caracteristiques[1,]$adr,",",caracteristiques[1,]$com,"000"))
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=71%20RUE%20JEAN%20JAURES,52000&sensor=false
m <- leaflet(width="100%") %>%
addTiles() %>% # Add default OpenStreetMap map tiles
addMarkers(lng=adr1$lon, lat=adr1$lat)
m # Print the map
Comme le nombre total de points est important, on choisit de visualiser les points individuels du déppartement 92 et 93.
geoloc92=geoloc[geoloc$dep==920,]
m <- leaflet(width="100%") %>%
addTiles() %>% # Add default OpenStreetMap map tiles
addCircleMarkers(lng=geoloc92$long, lat=geoloc92$lat,radius=1)
m # Print the map
geoloc93=geoloc[geoloc$dep==930,]
m <- leaflet(width="100%") %>%
addTiles() %>%
addCircleMarkers(lng=geoloc93$long, lat=geoloc93$lat,radius=1)
m
On peut construire un maillage pour repérer les endroits où les accidents sont fréquents.
h2d=function(x, y, pas,
na.rm = TRUE,
FUN = base::length) {
x.cuts <- seq(from = -5, to = 8.5, by = pas)
y.cuts <- seq(from = 42, to = 51.5, by = pas)
index.x <- cut(x, x.cuts, include.lowest = TRUE)
index.y <- cut(y, y.cuts, include.lowest = TRUE)
m <- tapply(x, list(index.x, index.y), FUN)
if (identical(FUN, base::length))
m[is.na(m)] <- 0
midpoints <- function(x) (x[-1] + x[-length(x)])/2
retval <- list()
retval$counts <- m
retval$x.breaks = x.cuts
retval$y.breaks = y.cuts
retval$x = midpoints(x.cuts)
retval$y = midpoints(y.cuts)
retval$nobs = length(x)
retval
}
pas=0.002
haccid=h2d(x=geoloc$long,y=geoloc$lat,pas=pas)
mmm=cbind(rep(haccid$x,each=1,time=length(haccid$y)),
rep(haccid$y,each=length(haccid$x),time=1),
as.vector(haccid$counts))
pts=data.table(mmm)
names(pts)=c("x","y","freq")
maille=pts[pts$freq>10,]
pal <- colorNumeric(
palette = "Spectral",
domain = maille$freq
)
m=leaflet(data=maille) %>%
addTiles() %>%
addRectangles(
lng1=~x-pas/2, lat1=~y-pas/2,
lng2=~x+pas/2, lat2=~y+pas/2,
color=~pal(freq),
popup=~as.character(freq))%>%
addMarkers(lng=~x, lat=~y,popup=~as.character(freq))
m
Grâce au package rMaps, on peut voir tous les points sous forme de heatmap.
L2 <- Leaflet$new()
L2$setView(c(46, 3), 5)
L2$tileLayer(provider = "MapQuestOpen.OSM")
L2$addAssets(jshead = c(
"http://leaflet.github.io/Leaflet.heat/dist/leaflet-heat.js"
))
# Add javascript to modify underlying chart
L2$setTemplate(afterScript = sprintf("
<script>
var addressPoints = %s
var heat = L.heatLayer(addressPoints).addTo(map)
</script>
", rjson::toJSON(geolocj)
))
L2$save("heatmap_accidents_auto.html")
D’autres visualisations sur la base d’accidents auto corporels :
Pour une étude plus approfondie sur la géolocalisation :
Copyright © 2016 Blog de Kezhan Shi