ggmap : Interesting toolbox for spatial analysis
[This article was first published on Learning Data Science , and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
ggmap is a new tool which enables such visualization by combining the spatial information of static maps from Google Maps, OpenStreetMap, Stamen Maps or CloudMade Maps with the layered grammar of graphics implementation of ggplot2Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
The library is developped by David Kahle and Hadley Wickham and in the latest R/Journal (Volume 5/1, June 2013), there is a whitepaper, very interesting that should to be read.
Let’s use it to see where we can always buy tobacco at night in Paris.
Data are from data.ratp.fr, and give all authorized dealers by ratp. There’s long and lat in this file, but this geocoding use lambert. So to show how ggmap work, we can extract adress, run geocoding using api/google and then ouput thematic map.
> require(ggmap)
> setwd(“C:\\Users\\guibertt\\Desktop\\Geocodage – A faire”)
> fic<-"commerces.csv"
> commerces<-read.csv(fic,header=T,sep=";", dec=",")
> head(commerces[,c(1,3:6)])
DEA_CODE ADRESSE_LIVRAISON DEA_CODE_POSTAL_LIVRAISON DEA_COMMUNE_LIVRAISON INSEE_LIVRAISON
1 510001 11 R. Mozart 92230 Gennevilliers 92036
2 510002 81 Bd Voltaire 92600 Asnières-sur-Seine 92004
3 510003 60 Av. Jean Moulin 92390 Villeneuve-la-Garenne 92078
4 510004 2 Av. Michelet 93400 Saint-Ouen 93070
5 510006 31 R. d’Anjou 92600 Asnières-sur-Seine 92004
6 510007 45 R. Jules Larose 92230 Gennevilliers 92036
We use the api google (limited at 2500 requests by day/ip adress) to geocode our places
>ad<-as.vector(tabac$adresse2)
>system.time(gc <- geocode(ad,output='latlona',messaging=FALSE))
> head(gc)
lon lat address
1 2.267043 48.85066 108 avenue mozart, 75116 paris, france
2 2.297897 48.84552 56 rue de la croix nivert, 75015 paris, france
3 2.276529 48.84276 20 rue cauchy, 75015 paris, france
4 2.293242 48.83890 157 rue de la convention, 75015 paris, france
5 2.285362 48.83406 37 boulevard victor, 75015 paris, franc
>tabacp<-cbind(tabac,gc)
But, don’t forget that ggmap is just a ggplot and we can get this, for example using OpenStreetMap
So we can now plot our places
png(“paris4.png”, width=800,height=600)
map <- get_map(location = 'paris',zoom=13,maptype="roadmap",color="color",source="google")
mymap = ggmap(map, darken = c(.3,’white’))
mymap+
stat_bin2d(
aes(x = lon, y = lat, colour = typecommerce, fill = typecommerce),
size = .5, bins = 30, alpha = 1/2,
data = tabacp)
dev.off()
And at the end, with wrap, to split
png(“paris5.png”, width=800,height=600)
map <- get_map(location = 'paris',zoom=13,maptype="roadmap",color="bw",source="google")
mymap = ggmap(map, darken = c(.8,’white’))
mymap + stat_bin2d(
aes(x = lon, y = lat, colour = TCO_LIBELLE, fill = TCO_LIBELLE),
size = .5, bins = 30, alpha = 1/2,
data = tabacp)+facet_wrap(~ TCO_LIBELLE)
dev.off()
To leave a comment for the author, please follow the link and comment on their blog: Learning Data Science .
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.