sf & cartography v2.0.0

Ce billet évoque les évolutions récentes du traitement des données spatiales avec R ainsi que la mise à jour du package cartography pour prendre en compte ces changements.

Le package sf

Le 31 octobre 2016 le package sf a été mis à disposition sur le CRAN par Edzer Pebesma (déjà maintainer de sp et contributeur actif à rgeos et rgdal).
Le package sf est une implémentation du standard Simple Features de l’OGC.

Jusqu’à présent l’import, l’export, la gestion, le traitement des données spatiales dans R se faisaient grâce à 3 packages principaux : rgdal (pour l’import/export des données et les opérations de projections), sp (pour la gestion et l’affichage des données) et rgeos (pour les géotraitements). sf rassemble en un seul package la plupart des fonctionnalités de ces trois packages.

Le nouveau format fourni par sf et visant a remplacer les formats Spatial*DataFrame est le data.frame enrichi d’une « colonne-liste » de géométries :

Simple Features for R – Edzer Pebesma

Ce format est considéré comme tidy et les fonctions de sf sont compatibles avec l’opérateur pipe.
Vous trouverez à la fin du billet une liste de ressources sur le package sf.

Le package cartography

L’avenir du spatial dans R s’oriente à plus ou moins court terme vers l’utilisation de sf en lieu et place du trio rgdal/sp/rgeos.
Nous avons donc décidé de rendre le package cartography compatible avec les objets de type sf, nous utilisons également les fonctions et formats sf dans les fonctions du package.

La plupart des fonctions restent inchangées, mis à part l’ajout d’un argument x en première place, destiné à l’utilisation des objets sf.
Avant :

choroLayer(spdf, spdfid, df, dfid, var, ...)

Après :

choroLayer(x, spdf, spdfid, df, dfid, var, ...)

Les objets sf contiennent les données attributaires et les géométries d’une manière beaucoup plus pratique que les Spatial*DataFrame. Si l’argument x est utilisé les données attributaires doivent être contenues dans l’objet sf et les arguments spdf, spdfid, df, dfid ne sont pas pris en compte.

Certaines fonctions ont changé plus profondément d’input et d’output (getBorders, getLinkLayer, getGridLayer, discLayer…), l’ensemble des changement est visible ici : NEWS.

La version de cartography prenant en compte sf est pour l’instant disponible sur GitHub et sera bientôt sur le CRAN.

require(devtools)
install_github("riatelab/cartography")

Ressources sur le package sf

La page GitHub du package sf
C’est dans ce dépôt GitHub que se déroule le développement du package et que se tiennent les discussions à son sujet.

Ressources publiées par Edzer Pebesma

Billets de blogs / tutoriels

linemap

Le package linemap permet de réaliser des cartes composées de lignes. Le package contient deux fonctions, linemap et getgrid.

  • La fonction linemap permet d’afficher la carte. Elle prend en entrée un data frame contenant les coordonnées des points d’une grille régulière et au moins une variable.
  • La fonction getgrid permet de transformer un maillage de polygones irrégulier en data frame pouvant être utilisé avec la fonction linemap. Les polygones en entrée doivent être au format sf et, la fonction reposant sur des calculs d’intersections, il est fortement conseillé d’utiliser le package sf dans une version supérieure ou égale à 0.5-1. En effet à partir de cette version sf intègre les index spatiaux, ce qui accélère très significativement certains géotraitements (dont les calculs d’intersections).

Exemples d’utilisation

linemap

library(linemap)
data("popOcc")
data("occitanie")
opar <- par(mar=c(0,0,0,0), bg = "ivory2")
plot(sf::st_geometry(occitanie), col="ivory1", border = NA)
linemap(x = popOcc, var = "pop", k = 2.5, threshold = 50,
        col = "ivory1", border = "ivory4", lwd = 0.6, add = TRUE)
mtext(text = "Population\nen Occitanie", side = 3, line = -4, 
      col = "white", font = 4, adj = 0.05, cex = 2 )
mtext(text = "Données carroyées à 1 kilomètre, INSEE 2010", side=1, 
      line = - 1, col = "white", font = 3, adj = 0.98, cex = 0.8 )
par(opar)

getgrid

library(linemap)
library(sf)
data("bretagne")
data("france")
bret <- getgrid(x = bretagne, cellsize = 2000, var = "POPULATION")
opar <- par(mar = c(0,0,0,0))
plot(st_geometry(france), col="lightblue3", border = NA, 
     bg = "lightblue2",
     xlim = c(min(bret$X), max(bret$X)), 
     ylim= c(min(bret$Y), max(bret$Y)))
linemap(x = bret, var = "POPULATION", k = 5, threshold = 1,
        col = "lightblue3", border = "white", lwd = 0.7,
        add = TRUE)
mtext(text = "GEOFLA® 2016 v2.2 Communes France Métropolitaine", 
      side=4, line = - 0.9, col = "lightblue1", font = 3, 
      adj = 0.01, cex = 0.4 )
par(opar)

Installation

Le package est disponible sur Github.

library(devtools)
install_github("rCarto/linemap")

Inspiration

Ce package s’inspire évidement de la pochette de l’album Unknown Pleasures de Joy Division. Il s’inspire également des réalisations de James Cheshire (Population Lines: How and Why I Created It) et Ryan Brideau (GeospatialLineGraphs).

Pourquoi et comment inscrire la production de cartes statistiques dans un processus de recherche reproductible

Le 9 juin, Nicolas Lambert et moi participions à la journée « Cartostats – La cartographie statistique : Quelles méthodologies dans un contexte d’accélération et de diversification des pratiques ? » avec la présentation suivante :

Pourquoi et comment inscrire la production de cartes statistiques dans un processus de recherche reproductible.

La manière la plus répandue pour construire des cartes statistiques mobilise un ensemble de logiciels variés (tableur, logiciel de statistique, SIG, édition vectoriel…) utilisant une série de formats de données et de fichiers différents. Cette grande diversité d’outils rend difficile la reproduction, la mise à jour et la pérennité des analyses et des cartes produites.
L’utilisation du logiciel R et de son langage nous permet de couvrir l’ensemble de la chaîne de traitement allant de l’analyse à la représentation de l’information géographique. Particulièrement adapté aux traitements statistiques, R dispose également de fonctionnalités spatiales permettant de manipuler et de représenter les données.
Le package cartography, développé à l’UMS RIATE, permet de réaliser la plupart des cartes statistiques usuelles et de les insérer dans des analyses traçables et complexes.