Utiliser R pour placer des lycées sur la carte d’Ile-de-France

Prenons un exemple au hasard, tiens, une liste de lycées d’Ile-de-France. Je veux apprendre à utiliser R pour tracer une carte de l’Ile-de-France et y placer dessus les lycées de ma liste.

Pourquoi R ? parce que c’est un environnement informatique de calcul statistique disposant de fonctionnalités graphiques, et puis c’est libre et gratuit, et ça fonctionne sur Windows, Linux et Mac OS. Donc tout lecteur de ce billet peut tester sur son propre ordinateur si je ne raconte pas n’importe quoi.

Tout d’abord, il me faut récupérer les données géographiques de ma carte. Pour cela, je vais sur le site GADM (global administrative areas) qui met gracieusement à disposition une base de données contenant les coordonnées spatiales des régions administratives du monde entier. Puis je télécharge les données correspondant à la France, niveau 2, au format « R data ».

Avant d’aller plus loin, je dois installer plusieurs librairies R spécialisées dans les coordonnées spatiales: « sp », « maptools », gpclib » et l’excellent « ggplot2 ». La procédure d’installation est simple: ouvrez R et utilisez la commande install.packages( « sp » ). Pour ceux qui utilisent Ubuntu, l’installation de « maptools » directement dans R utilise trop de mémoire (voir ce thread). Il faut donc l’installer via la commande suivante:

$ R CMD INSTALL --no-latex package.tar.gz

Maintenant, je dois apprendre à manipuler les coordonnées spatiales dans R afin de tracer la carte en question. Pour cela, j’ouvre R, je charge les librairies dont j’ai besoin, je charge les données spatiales, je les convertis et je les trace:

library(ggplot2)
library(sp)
library(maptools)
library(gpclib)
gpclibPermit()
load("FRA_adm2.RData")
gadm_idf <- gadm[ gadm$NAME_1 == "\xcele-de-France", ]
idf <- fortify( gadm_idf, region="ID_2" )
qplot( long, lat, group=group, data=idf, geom="polygon", colour=I("white") )

Et voilà, on obtient le graphique ci-dessous:

Voilà une bonne chose de faite. A présent, je dois récupérer les coordonnées géographiques exactes des lycées qui m’intéressent (longitude et latitude). Heureusement Google Maps permet de faire ça mais il faut au préalable activer cette fonctionnalité (en savoir plus ici). Je reconnais que c’est un peu long et fastidieux, mais à la fin vous obtenez quelque chose comme ça:

lycée Jean Rostand,Mantes-la-Jolie,48.998052,1.696765

lycée Romain Rolland,Ivry-sur-Seine,48.800683,2.392895

etc…

Enfin, il ne me reste plus qu’à ajouter un point sur la carte à l’emplacement de chaque lycée. Pour cela rien de plus facile, commençons par ajouter le lycée Jean Rostand dont les coordonnées sont ci-dessus:


qplot( long, lat, group=group, data=idf, geom="polygon", colour=I("white") )
last_plot() + geom_point( aes(x, y, group=1), colour="red", data=data.frame(x=1.696765, y=48.998052) )

Pour ajouter tous les lycées d’un coup et placer des points de taille proportionnelle au nombre d’élèves dans ces lycées, voici la marche à suivre. Les données sont maintenant prises au hasard, à titre d’exemple. La fonction « theme_whiteMap() » n’est utilisée qu’à titre esthétique.


n <- 80
lycees 0, 1, 0))
lycees$bac[lycees$bac < 0.3] <- NA
lycees <- lycees[ lycees$lat1.5, ]
theme_whiteMap <- function(base_size = 12)
{
structure(list(axis.line = theme_blank(),
axis.text.x = theme_blank(), axis.text.y = theme_blank(), axis.ticks = theme_blank(),
axis.title.x = theme_blank(), axis.title.y = theme_blank(),
axis.ticks.length = unit(0.3, "lines"), axis.ticks.margin = unit(0.5, "lines"),
legend.background = theme_rect(colour = NA),
legend.key = theme_rect(colour = "grey80"), legend.key.size = unit(1.2, "lines"),
legend.text = theme_text(size = base_size * 0.8),
legend.title = theme_text(size = base_size * 0.8, face = "bold", hjust = 0),
legend.position = "right",
panel.background = theme_rect(fill = "white", colour = NA),
panel.border = theme_blank(),
panel.grid.major = theme_blank(),
panel.grid.minor = theme_blank(),
panel.margin = unit(0.25, "lines"),
strip.background = theme_blank(), strip.text.x = theme_blank(), strip.text.y = theme_blank(),
plot.background = theme_blank(),
plot.title = theme_text(size = base_size * 1.2, face = "bold"), plot.margin = unit(c(1,
1, 0.5, 0.5), "lines")), class = "options")
}
png( "ex_lycees_idf.png", width=600, height=500 )
pl <- qplot(long, lat, data = lycees, geom = "point")
pl <- pl + geom_polygon(aes(group=group), data=idf, colour=I("lightcyan4"), fill=I("transparent"))
pl <- pl + geom_point(aes(colour = bac, shape = factor(internat), size = eleves))
pl <- pl + theme_whiteMap()
pl <- pl + opts(title = "Exemples de lycées en Ile-de-France")
pl <- pl + labs(colour = "Réussite au bac", shape = "Internat", size = "Nombre d'élèves")
print(pl)
dev.off()

Au final, on obtient une carte avec plein d’infos dessus:

Merci à TJ sans qui j’étais bien incapable de faire tout ça…

Les observateurs auront remarqué que j’ai publié ce billet dans les catégories « Politique » et « Science ». La première parce que les données sont fortement inspirées des activités d’une association « œuvrant pour la cité ». La deuxième parce que l’acquisition de données, leur analyse et leur visualisation sont au cœur du travail quotidien des scientifiques.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :