Download - CaRtogRaphie avec R

Transcript
Page 1: CaRtogRaphie avec R

©  Sensorly  Confiden.al

Hang Khuc Pôle études et statistiques

1

CaRtogRaphie avec R !

2014-06-18

Page 2: CaRtogRaphie avec R

©  Sensorly  Confiden.al2

Page 3: CaRtogRaphie avec R

©  Sensorly  Confiden.al3

1

Qu’est ce que la cartographie ? Les données spatiales ?

Page 4: CaRtogRaphie avec R

©  Sensorly  Confiden.al4

1 Cartographie et données spatiales

Selon Wikipédia « La cartographie désigne la réalisation et l’étude des cartes géographiques et géologiques. (…) Le principe majeur de la cartographie est la représentation de données (…). L’objectif de la carte est d’offrir une représentation concise et efficace permettant la simplification de phénomènes complexes pour une compréhension rapide et pertinente. » !Les données spatiales

• Célèbre jeu de données : emplacement où ont eu lieu les crimes et délits à Chicago ; • Répliques de tremblements de terre sont détectés et leur latitude, longitude et l'heure

de l'événement sont enregistrées ; • La localisation des personnes touchées par une maladie pour étudier la propagation

de la maladie et retrouver son origine : Légionellose à Québec en 2012. • Votre localisation lors d’un post sur Facebook ou Twitter ; • Le lieu public où vous vous trouvez lorsque vous faites un check-in dans Foursquare ; • Niveau de signal capté par votre smartphone lorsque vous contribuez à notre

application ; • Les données OSM : Prolifération des services de géolocalisation : trouver l’arrêt

de métro le plus proche, afficher un itinéraire, chercher une pharmacie, un magasin, etc.

!! Les données spatiales sont partout !

Page 5: CaRtogRaphie avec R

©  Sensorly  Confiden.al5

!1. Création du fond de carte !!2. Sélection de l’information !!3. Choix du type de représentation !!4. Définition des éléments à faire apparaître sur la carte !!But : Proposer une lecture spatialisée du phénomène pour mieux comprendre son mécanisme !

2 Data visualisation

Page 6: CaRtogRaphie avec R

©  Sensorly  Confiden.al6

2

Les données spatiales à la loupe

Page 7: CaRtogRaphie avec R

©  Sensorly  Confiden.al7

1 Coordonnées géographiques

Situer un point géographique sur le globe terrestre revient à attribuer des coordonnées à un objet dans un repère lié à la Terre :

• coordonnées polaires et ses variantes : N 43°51’45.6" E 03°48'28.3" • avec coordonnées latitude-longitude : latitude=48.84262 longitude=2.291257

• avec 3 dimensions x,y et z : x=718.260 y=174.690

!!!!!!!!!Une valeur de coordonnées est toujours situé dans un système géodésique de référence terrestre (Coordiante Reference System - CRS)

Page 8: CaRtogRaphie avec R

©  Sensorly  Confiden.al8

Les systèmes géodésiques/de projection les plus couramment utilisés reposent sur une représentation ellipsoïde de la Terre. Par exemple, pour représenter la Terre on utilise le système géodésique mondial dit WGS-84. !La représentation de la France que l’on utilise est celle du Lambert-93 qui utilise une projection conique de la Terre. !Chaque système a un code unique appelé code EPSG (European Petroleum Survey Group) : - WGS-84 : 4326 - Lambert-93 : 2154 - Lambert-92 étendu : 27572 !Attention, il peut exister des différences pouvant aller jusqu’à plusieurs centaines de mètres entre deux systèmes. !Transformation de la coordonnée : passer d’un système de référence à un autre. - En utilisant les formules mathématiques de transformation - Fonction spTransform du package rgdal spTransform(…,CRS(« +init=epsg:27572"))

2 Les projections

Page 9: CaRtogRaphie avec R

©  Sensorly  Confiden.al9

3

Un exemple de use case

Page 10: CaRtogRaphie avec R

©  Sensorly  Confiden.al10

Pour chaque restaurant que j’ai fréquenté : - Date - Nom - Coordonnées géographiques latitude/longitude - Le temps approximatif que j’ai passé dans ce restaurant - La note que j’ai attribué à la nourriture que j’ai pu gouter

1 Données

date nom la.tude longitude tps note02/01/2014 indien 48.842617 2.291257 00:45:00 313/01/2014 espagnol 48.846107 2.303054 03:00:00 502/02/2014 italien_1 48.861085 2.300355 01:30:00 408/02/2014 libanais 48.871137 2.334830 01:15:00 322/02/2014 sushi_1 48.860052 2.350237 00:50:00 3

Page 11: CaRtogRaphie avec R

©  Sensorly  Confiden.al11

« This package serves two purposes: "

" (i) Provide a comfortable R interface to query the Google server for static maps, "

" (ii) Use the map as a background image to overlay plots within R. "

This requires proper coordinate scaling. »"

!RgoogleMaps sert donc à faire des cartes statiques. Choix : - Type de fond de carte : roadmap, terrain, mobile, satellite - Couleur ou noir et blanc - Carte centrée : qbbox (quantile bounding box) et niveau de zoom - Tracer : - des points

- des pie charts - polygone - à partir d’un shape - une image raster - courbes de béziers - Ajouter - un texte - une légende - Et pleins d’autres choses !

2 Data visualisation avec RgoogleMaps

Page 12: CaRtogRaphie avec R

©  Sensorly  Confiden.al12

3 Chargement d’une carte (1/2)

# Chargement de la cartebbox<-qbbox(lat= meetup$latitude,lon= meetup$longitude)nzoom<-min(MaxZoom(bbox$latR,bbox$lonR,size=c(640,640)))-1MyMap1<-GetMap(center=c(mean(bbox$latR),mean(bbox$lonR)),zoom=nzoom,maptype="roadmap",destfile=paste("carte.png",sep=""))MyMap2<-GetMap(center=c(mean(bbox$latR),mean(bbox$lonR)),zoom=nzoom,maptype="terrain",destfile=paste("carte.png",sep=""))MyMap3<-GetMap(center=c(mean(bbox$latR),mean(bbox$lonR)),zoom=nzoom,maptype="satellite",destfile=paste("carte.png",sep=""))MyMapBW<-GetMap(center=c(mean(bbox$latR),mean(bbox$lonR)),zoom=nzoom,maptype="mobile",destfile=paste("carte.png",sep=""),GRAYSCALE=T)PlotOnStaticMap(MyMap1,mar=rep(1,4))title("Roadmap",cex.main=0.8)PlotOnStaticMap(MyMap2,mar=rep(1,4))title("Terrain",cex.main=0.8)PlotOnStaticMap(MyMap3,mar=rep(1,4))title("Satellite",cex.main=0.8) PlotOnStaticMap(MyMapBW,mar=rep(1,4))title("Mobile noir et blanc",cex.main=0.8)

Page 13: CaRtogRaphie avec R

©  Sensorly  Confiden.al13

3 Chargement d’une carte (2/2)Roadmap Terrain

Satellite Mobile noir et blanc

Page 14: CaRtogRaphie avec R

©  Sensorly  Confiden.al14

# Avec PlotOnStaticMapPlotOnStaticMap(MyMapBW,lat=meetup$latitude,lon=meetup$longitude,pch=21,bg="#8073ac80",col="#2d004b",cex=2)!# Avec les markersmmarkers<-NULLfor (i in 1:nrow(meetup)){mm<-paste0("&markers=color:green|label:",LETTERS[i],"|",meetup[i,"latitude"],",",meetup[i,"longitude"])mmarkers<-paste0(mmarkers,mm)}!> &markers=color:green|label:A|48.842617,2.291257&markers=color:green|label:B|48.846107,2.303054&markers=color:green|label:C|48.861085,2.300355 (…)!!MyMapMK<-GetMap(center=c(mean(bbox$latR),mean(bbox$lonR)),zoom=nzoom,maptype=« mobile",destfile=paste("carte.png",sep=""),markers=mmarkers)PlotOnStaticMap(MyMapMK)

4 Localiser les restaurants (1/2)

Page 15: CaRtogRaphie avec R

©  Sensorly  Confiden.al15

4 Localiser les restaurants (2/2)

Page 16: CaRtogRaphie avec R

©  Sensorly  Confiden.al16

Dessiner des piecharts (1/3)5

# Réorganiser les données! date nom latitude longitude tps note1 02/01/2014 indien 48.84262 2.291257 00:45:00 32 13/01/2014 espagnol 48.84611 2.303054 03:00:00 53 02/02/2014 italien_1 48.86109 2.300355 01:30:00 4 4 08/02/2014 libanais 48.87114 2.334830 01:15:00 3 5 22/02/2014 sushi_1 48.86005 2.350237 00:50:00 3 6 16/03/2014 francais_1 48.87097 2.334089 02:10:00 5 7 24/03/2014 espagnol 48.84611 2.303054 02:30:00 5 8 03/04/2014 coreen 48.86620 2.336010 02:20:00 5 9 11/04/2014 italien_2 48.87283 2.341554 01:15:00 1 10 18/04/2014 francais 48.86673 2.365907 02:30:00 4 11 19/04/2014 espagnol 48.84611 2.303054 02:10:00 3 12 04/05/2014 francais_2 48.83559 2.329515 03:15:00 5 13 09/05/2014 creperie 48.84358 2.321071 01:35:00 4 14 21/05/2014 coreen 48.86620 2.336010 01:05:00 4 15 29/02/2014 indien 48.84262 2.291257 00:30:00 3 !

Page 17: CaRtogRaphie avec R

©  Sensorly  Confiden.al17

# Choix des couleurscouleur<-paste0(brewer.pal(11,"Paired")!# Mise en forme du temps passétps<-hms(meetup$tps)meetup$tps_sec<-hour(tps)*3600+minute(tps)*60+seconds(tps)!# Temps moyen passé dans chaque restaurantaa<-melt(meetup[,c("nom","tps_sec")],id="nom")bb<-dcast(aa,nom~variable,value.var="value",mean)cc<-meetup[!duplicated(meetup$nom),c("nom","latitude","longitude")]dd<-merge(cc,bb,by=« nom")!# Représentation graphiquePlotOnStaticMap(MyMapBW)!for (n in 1:nrow(dd)){!!! newcoord<- LatLon2XY.centered(MyMapBW,lat=dd[n,"latitude"],lon=dd[n,"longitude"],zoom=nzoom)!!!! r<-dd[n,"tps_sec"]/500!! ! ! !! floating.pie(xpos=newcoord$newX,newcoord $newY,x=100,radius=r,col=paste0(couleur[n],"95"),border=couleur[n],lwd=2)!!! shadowtext(newcoord$newX,newcoord$newY-(6+r),paste(round(dd[n,"tps_sec"]/3600,0)," h",sep=""),cex=0.6,col="white",bg="blue")!!}!!# Rajout d’une légendelegend("topleft",legend=dd$nom,col=couleur,lwd=10,bg="white")

5 Dessiner des piecharts (2/3)

Page 18: CaRtogRaphie avec R

©  Sensorly  Confiden.al18

5 Dessiner des piecharts (3/3)

2 h2 h2 h2 h2 h2 h2 h2 h2 h

2 h2 h2 h2 h2 h2 h2 h2 h2 h3 h3 h3 h3 h3 h3 h3 h3 h3 h

2 h2 h2 h2 h2 h2 h2 h2 h2 h

2 h2 h2 h2 h2 h2 h2 h2 h2 h

3 h3 h3 h3 h3 h3 h3 h3 h3 h

1 h1 h1 h1 h1 h1 h1 h1 h1 h

2 h2 h2 h2 h2 h2 h2 h2 h2 h

1 h1 h1 h1 h1 h1 h1 h1 h1 h1 h1 h1 h1 h1 h1 h1 h1 h1 h

1 h1 h1 h1 h1 h1 h1 h1 h1 h

coreencreperieespagnolfrancaisfrancais_1francais_2indienitalien_1italien_2libanaissushi_1

Page 19: CaRtogRaphie avec R

©  Sensorly  Confiden.al19

# Enveloppe convexetr<-tri.mesh(cc[,"longitude"], cc[,"latitude"])trch<-convex.hull(tr)trch!> $x[1] 2.291257 2.329515 2.365907 2.341554 2.334089 2.300355!$y[1] 48.84262 48.83559 48.86673 48.87283 48.87097 48.86109!$i[1] 1 10 9 8 6 3!!# Mise en forme des donnéesmypolygon<-data.frame(trch$x,trch$y)colnames(mypolygon)<-c(« X","Y")!# Représentation graphiquePlotOnStaticMap(MyMapBW)PlotPolysOnStaticMap(MyMapBW, mypolygon,add=T,col=paste0("#66bd63","40"),lwd=.5, border="#a6d96a")

6 Polygones (1/2)

Page 20: CaRtogRaphie avec R

©  Sensorly  Confiden.al20

6 Polygones (1/2)

Page 21: CaRtogRaphie avec R

©  Sensorly  Confiden.al21

7 Image raster (1/2)# Importation des pngcontent<-readPNG("sticker-smiley-content.png")pascontent<-readPNG("smiley-pascontent.png")pouce<-readPNG("Smiley_pouce.png")!# Note moyenne pour chaque restaurantaa<-melt(meetup[,c("nom","note")],id="nom")bb<-dcast(aa,nom~variable,value.var="value",mean)cc<-meetup[!duplicated(meetup$nom),c("nom","latitude","longitude")]dd<-merge(cc,bb,by="nom")!# Représentation graphiquePlotOnStaticMap(MyMapBW)for (i in 1:nrow(dd)){ if (dd[i,"note"]<=3){ nomsmiley<-"pascontent" } else { if (dd[i,"note"]==5) { nomsmiley <-"pouce" } else { nomsmiley <-"content" } } Rcoords0<-LatLon2XY.centered(MyMapBW,dd[i,"latitude"],dd[i,"longitude"]) x<-Rcoords0$newX y<-Rcoords0$newY rasterImage(get(nomsmiley),x,y,x+60,y+60) }

Page 22: CaRtogRaphie avec R

©  Sensorly  Confiden.al22

7 Image raster (1/2)

Page 23: CaRtogRaphie avec R

©  Sensorly  Confiden.al

Hang Khuc Pôle études et statistiques

23

On recrute Java Platform Engineer

!

https://www.linkedin.com/jobs2/view/10976225 !!

Merci !!!!!