Introduction à R

Open Data France et datactivi.st

Introduction à R, le couteau suisse de la data science

Jour 6

Joël Gombin et Samuel Goëta (datactivi.st)

Retrouvez les matériaux sur : www.github.com/datactivist/IntroR_ODF

Pad collaboratif : https://frama.link/formationR_pad4

Ce qu’on a déjà appris

Ce qu’on a déjà appris

Consolidation des acquis

Exercice : importer un jeu de données, le nettoyer/préparer, représenter graphiquement la relation entre trois variables, la tester dans le cadre d’un modèle

Un exemple

R, un potentiel cartographique énorme

http://joelgombin.github.io/makingof.html

Des avantages

Quelques pistes/ressources

Notions de cartographie

Qu’est-ce qu’une carte ?

“Une carte est une représentation géométrique plane simplifiée et conventionnelle de tout ou partie de la surface terrestre, et cela dans un rapport de similitude convenable qu’on appelle échelle.” (F. Joly, 1976)

Référence : Béguin et Pumain, 2014 (3e éd.)

La notion de projection

La projection est l’outil mathématique qui permet de passer du géoïde représentant la Terre à une représentation plane.

Projections conformes (Mercator, Lambert) ou équivalentes (Eckert IV, Gall). Il y a toujours une déformation !

Les coordonnées géographiques sont exprimées en longitude et latitude. Les unités peuvent être des degrés ou des grades. La projection transforme les coordonnées géographiques en coordonnées x/y.

La notion de projection

Exemple de coordonnées géographiques :

largeur

La notion de projection

Un truc cool pour jouer avec les différentes projections :

http://bl.ocks.org/mbostock/raw/3711652/

La notion de projection

The West Wing, la série qui arrive à faire un sketch drôle sur les projections géographiques :

L’échelle

L’échelle d’une carte représente le rapport d’une distance mesurée sur la carte à sa valeur réelle sur le terrain.

Échelle 1 cm représente
1/10000 100 m
1/25000 250m
1/50000 500m
1/100000 1km
1/1000000 10km

L’échelle

Attention : “petite échelle” = grande superficie représentée “grande échelle” = petite superficie représentée

L’échelle est déformée à distance du centre de projection (équateur pour Mercator)

Échelle numérique et échelle graphique

largeur

La généralisation

“L’opération qui par sélection, schématisation et harmonisation reconstitue sur une carte la réalité de la surface représentée dans ses traits essentiels en fonction du but de la carte, de son thème, de son échelle et des particularités de la région cartographiée.”

La sélection

Quelles couches d’information représenter ? Ni trop (surcharge d’information, à la Google Maps) ni trop peu (rendre la carte intelligible au lecteur).

Le style “toner” peut être utile pour trouver cet équilibre, en cartographie thématique :

largeur

La schématisation

Opération de simplification, qui peut être structurale (tracés) ou conceptuelle (schéma).

Attention : on peut simplifier à partir de données détaillées, mais on ne peut pas faire l’inverse ! Donc toujours veiller à conserver les données dans leur forme la plus détaillée.

Le fond de carte

Le fond de carte est constitué des éléments repris d’une carte topographique (par exemple de l’IGN) et utilisés pour une carte thématique.

“Carte reproduite totalement ou partiellement, en une ou plusieurs couleurs souvent atténuées, servant de repère pour le report en surcharge de phénomènes localisables déterminés” (CFC). Peut concerner les découpages administratifs, le réseau routier, hydrographique, les courbes de niveau, etc.

Les sources de fonds de carte

Traditionnellement, en France : l’IGN.

De plus en plus : Google Maps, Open Street Map, Stamen…

http://maps.stamen.com/toner/#12/48.8974/2.2017

http://maps.stamen.com/watercolor/#12/48.8974/2.2017

Vecteur ou raster

Comment stocker et représenter l’information géographique ?

http://www.comeetie.fr/galerie/francepixels/#

Cartes choroplèthes

Une carte choroplèthe est une carte thématique où les régions sont colorées ou remplies d’un motif qui montre une mesure statistique, tels la densité de population ou le revenu par habitant. Ce type de carte facilite la comparaison d’une mesure statistique d’une région à l’autre ou montre la variabilité de celle-ci pour une région donnée.

Cartes en anamorphose ou cartogramme

“La cartographie en anamorphose a pour but d’adapter la forme de la carte non pas à la réalité physique mais plutôt à la réalité perçue.” (Langlois et Denain, 1996)

On déforme le fond de carte en fonction d’une variable quantitative (voire arbitrairement).

largeur

Le langage cartographique

Bertin, 1965 : travail sur la sémiologie graphique. La carte, comme le graphique, permettent de percevoir en même temps trois informations (X,Y,Z).

Mais pour que cette communication soit efficace, il faut respecter un langage précis et ses règles.

Assez comparable à la grammaire des graphiques.

Les composantes du langage cartographique

Les variables visuelles

La forme

La taille

Un exemple d’utilisation incorrecte (non-proportionnelle) de la taille :

La taille

largeur

La taille

La couleur

La couleur

http://hslpicker.com/

La couleur

La couleur

La couleur

La couleur

La valeur

La valeur

Un exemple de coloration continue :

largeur

Des cartes old school de densité, qui utilisent une trame :

largeur

Une autre coloration continue (pas très lisible parce qu’elle utilise trop de teintes [hues]) :

largeur

Le grain

L’orientation

L’orientation

Un exemple d’utilisation par Todd et Le Bras :

largeur

Distribution et découpage en classes des variables quantitatives

Distribution et découpage en classes des variables quantitatives

Voir cet article

Un moyen sympa de jouer avec les différentes méthodes de discrétisation.

Et concrètement, on fait comment ?

De très nombreux outils existent. QGIS est en train de s’imposer comme le SIG de référence dans le monde du libre. Malheureusement, en cartographie pure, aucune solution de référence ne permet de traiter aisément tous les cas de figure (vectoriel/raster ; print/web, etc.). En ce qui concerne la carto web, pas vraiment de solution de référence pour l’heure.

R n’est pas fait (du tout) au départ pour faire de la carto, mais offre aujourd’hui un workflow complet allant du nettoyage des données à leur représentation cartographique en passant par le nettoyage, l’analyse et la transformation des données.

R et les données spatiales

Un objet spatial, c’est quoi ?

Formats spatiaux

Il existe des outils libres pour passer d’un format à l’autre, en particulier OGR/GDAL. R possède des surcouches de ces librairies.

Et dans R ?

Plusieurs classes dans R pour représenter les objets spatiaux. La plus importante (et le seul qu’on utilisera) provient de la librairie sp et est SpatialPolygonsDataFrame (il existe aussi SpatialPoints* et SpatialLines*).

On peut créer un objet SpatialPolygonsDataFrame à la main, mais en réalité on ne le fait jamais, on importe un shapefile (ou autre) dans R. Plusieurs fonctions pour cela ; la meilleure est readOGR, dans le package rgdal.

#install.packages("sp")
#install.packages("rgdal")

library(sp)
library(rgdal)

departements <- readOGR("./data/departements", "DEPARTEMENT", stringsAsFactors = FALSE)
## OGR data source with driver: ESRI Shapefile 
## Source: "./data/departements", layer: "DEPARTEMENT"
## with 96 features
## It has 11 fields
## Integer64 fields read as strings:  ID_GEOFLA
summary(departements)
## Object of class SpatialPolygonsDataFrame
## Coordinates:
##       min     max
## x   99226 1242375
## y 6049647 7110480
## Is projected: TRUE 
## proj4string :
## [+proj=lcc +lat_1=44 +lat_2=49 +lat_0=46.5 +lon_0=3 +x_0=700000
## +y_0=6600000 +ellps=GRS80 +units=m +no_defs]
## Data attributes:
##   ID_GEOFLA          CODE_DEPT           NOM_DEPT        
##  Length:96          Length:96          Length:96         
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
##                                                          
##    CODE_CHF           NOM_CHF            X_CHF_LIEU      Y_CHF_LIEU   
##  Length:96          Length:96          Min.   : 1713   Min.   :61089  
##  Class :character   Class :character   1st Qu.: 5531   1st Qu.:64012  
##  Mode  :character   Mode  :character   Median : 6584   Median :66318  
##                                        Mean   : 6840   Mean   :66099  
##                                        3rd Qu.: 8461   3rd Qu.:68204  
##                                        Max.   :12285   Max.   :70594  
##    X_CENTROID      Y_CENTROID      CODE_REG          NOM_REGION       
##  Min.   : 1770   Min.   :61036   Length:96          Length:96         
##  1st Qu.: 5451   1st Qu.:64011   Class :character   Class :character  
##  Median : 6608   Median :66303   Mode  :character   Mode  :character  
##  Mean   : 6844   Mean   :66118                                        
##  3rd Qu.: 8416   3rd Qu.:68266                                        
##  Max.   :12112   Max.   :70442

Et dans R ?

Les objets SpatialPolygonsDataFrame sont complexes, mais comprennent pour simplifier d’une part les polygones (auxquels on accède directement : departements[1,]) et d’autre part le dataframe, qui est un slot de l’objet :

summary(departements@data)
##   ID_GEOFLA          CODE_DEPT           NOM_DEPT        
##  Length:96          Length:96          Length:96         
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
##                                                          
##    CODE_CHF           NOM_CHF            X_CHF_LIEU      Y_CHF_LIEU   
##  Length:96          Length:96          Min.   : 1713   Min.   :61089  
##  Class :character   Class :character   1st Qu.: 5531   1st Qu.:64012  
##  Mode  :character   Mode  :character   Median : 6584   Median :66318  
##                                        Mean   : 6840   Mean   :66099  
##                                        3rd Qu.: 8461   3rd Qu.:68204  
##                                        Max.   :12285   Max.   :70594  
##    X_CENTROID      Y_CENTROID      CODE_REG          NOM_REGION       
##  Min.   : 1770   Min.   :61036   Length:96          Length:96         
##  1st Qu.: 5451   1st Qu.:64011   Class :character   Class :character  
##  Median : 6608   Median :66303   Mode  :character   Mode  :character  
##  Mean   : 6844   Mean   :66118                                        
##  3rd Qu.: 8416   3rd Qu.:68266                                        
##  Max.   :12112   Max.   :70442
library(tidyverse)
departements@data %>%
  filter(NOM_REGION %in% "ILE-DE-FRANCE")
##   ID_GEOFLA CODE_DEPT          NOM_DEPT CODE_CHF                  NOM_CHF
## 1        76        75             PARIS      101 PARIS-1ER-ARRONDISSEMENT
## 2        78        77    SEINE-ET-MARNE      288                    MELUN
## 3        79        78          YVELINES      646               VERSAILLES
## 4        92        91           ESSONNE      228                     EVRY
## 5        93        92    HAUTS-DE-SEINE      050                 NANTERRE
## 6        94        93 SEINE-SAINT-DENIS      008                  BOBIGNY
## 7        95        94      VAL-DE-MARNE      028                  CRETEIL
## 8        96        95        VAL-D'OISE      500                 PONTOISE
##   X_CHF_LIEU Y_CHF_LIEU X_CENTROID Y_CENTROID CODE_REG    NOM_REGION
## 1       6516      68624       6517      68620       11 ILE-DE-FRANCE
## 2       6748      68266       6950      68362       11 ILE-DE-FRANCE
## 3       6364      68564       6149      68578       11 ILE-DE-FRANCE
## 4       6579      68361       6441      68249       11 ILE-DE-FRANCE
## 5       6416      68659       6458      68556       11 ILE-DE-FRANCE
## 6       6588      68679       6617      68687       11 ILE-DE-FRANCE
## 7       6598      68532       6609      68531       11 ILE-DE-FRANCE
## 8       6342      68838       6365      68873       11 ILE-DE-FRANCE

Et dans R ?

On peut ainsi sélectionner une partie seulement d’un SpatialPolygonsDataFrame, en fonction de données de la table attributaire.

Nouveau package pour utiliser la syntaxe du tidyverse avec sp : https://cran.r-project.org/web/packages/spdplyr/vignettes/spdplyr.html

library(spdplyr)
iledefrance <- departements %>% 
  filter(NOM_REGION %in% "ILE-DE-FRANCE")

Et dans R ?

On peut aisément visualiser les objets spatiaux au moyen de la fonction plot :

plot(departements)

## ou :
## departements %>% plot()

Et dans R ?

Mais aussi grâce au package mapview :

library(mapview)
mapview(departements)
mapview(departements, zcol = "CODE_REG")