Premiers pas en cartographie avec R

Cercles sur carte leaflet

La semaine dernière, j’ai fait mes premiers pas dans le domaine de la cartographie sous R. En réalité, c’était aussi un peu mes premiers pas en cartographie tout court, parce que mes connaissances étaient très basiques (niveau collège grand max), et qu’elles dataient de…..loin !
J’ai donc dû reprendre pas mal de choses. Et puis coté R, je me suis rendu compte qu’il existe plein de packages qui touchent aux objets spatiaux (sf, raster, sp, etc…) avec parfois des formats d’objet différents (un peu comme data frame et tibble) et plein de packages qui s’intéressent à la cartographie (ggmap, tmap, leaflet, cartography..etc). Sans compter qu’il existe aussi des formats de fichiers SIG (fichier de codage de l’information géographique) différents (shapefile, TIFF, ect…). J’ai vraiment eu du mal à m’y retrouver. Et même s’il y a encore plein de zones d’ombre, j’ai eu envie de partager mes avancées, en espérant aider au moins un peu, d’autres débutants.

Pour ceux qui maîtrisent le sujet, merci par avance d’être indulgent ! N’hésitez pas à contribuer à l’amélioration de cet article en laissant un commentaire !

1. Mon but

Si je me suis lancée dans la cartographie sous R, c’est parce que j’avais besoin de créer une carte avec les pays de l’Europe de l’Ouest, sur laquelle je pourrais afficher les valeurs de variables relatives à ce pays . Par exemple des statistiques de foot récupérées ici :

 

2. Quelques notions de bases de cartographie qui m’ont été utiles :

  • La Terre est une sphère, autrement dit un objet en 3 dimensions.
  • Sur cette sphère, un lieu est défini par des coordonnées géographiques qui sont la latitude et la longitude ; ce sont des mesures angulaires. Si vous avez besoin d’une piqûre de rappel, je vous
    conseille cette vidéo.
  • Ces angles peuvent être exprimés sous différents formats : en degrés sexa-décimaux: 43°49′43″ ou en degrés décimaux: 43°49.7298′Nord.
  • Une carte est un objet en deux dimensions.
  • Représenter une sphère sur une carte s’appelle une projection, et il en existe de trois grands types (conique, cylindrique et azimutal). Pour plus de détails, je vous conseille cette vidéo.
  • Sur une carte, les lieux sont aussi définis par des coordonnées, mais dans un environnement cartésien cette fois, c’est-à-dire en X et Y.
  • Dans cet environnement cartésien, la latitude correspond à l’axe des Y et la longitude à l’axe de X.
  • Il existe différentes unités pour exprimer la latitude et la longitude d’un lieux sur une carte :
    • en degrés décimaux : par exemple, 43.8333° de latitude et 5.78306° de longitude dans ce cas là, on est dans un référentiel appelé WGS84 (utilisé par les GPS).
    • en mètre, dans ce cas là, on est en projection Lambert93, par exemple X : 923825 Y : 6307755.

 

3. Mon point de départ concernant R pour la cartographie :

  • L’utilisation du package ggmap n’est pas envisageable car il faut avoir un compte google map qui nécessite d’entrer une carte bancaire : je n’ai pas envie !
  • Le package leaflet permet d’avoir un fond de carte provenant d’Open Street Map : j’ai déjà essayé vite fait, il y a deux ou trois ans.
  • La représentation d’un pays sur un fond de carte fait appel à la notion de polygons.
  • Il existe plusieurs formats d’objets spatiaux et ils ont l’air assez compliqués !
  • Il existe plein de package pour faire de la cartographie !
  • Sébastien Rochette a écrit un article d’initiation à la cartographie, qui me sera sans doute utile.

 

4. Mon cheminement

4.1 Le fond de carte avec leaflet :

Pour obtenir ce fond de carte, je me suis appuyé sur la vignette de “leaflet” qui est vraiment très bien faite.

J’ai utilisé la fonction fitBounds() pour limiter le fond de carte. J’ai trouvé cette fonction dans l’onglet AdditionalFeatures. Les arguments à fournir sont long1, lat1, lng2, lat2, tels que définis dans la page d’aide :

cartographie leaflet R

C’est-à-dire les longitudes et les latitudes min et max de la fenêtre qu’on souhaite afficher.

 

Pour les déterminer :

  • je suis allée sur Open Street Map
  • je me suis positionné sur deux pays extrêmes : l’Islande et la Grèce, et j’ai recueilli leur coordonnées ( Island : 65, -20, Grèce :40,20).

<!– –>

 

cartographie R

 

C’était pas trop mal, mais je voulais les noms des pays en anglais ! J’ai donc essayé plusieurs fonds de carte avec la fonction addProviderTiles()(trouvé dans l’onglet BaseMap du tuto leaflet).
L’option CartoDB.Positron me convenait assez, même si j’aurais préféré voir les mers et océans en bleu, plutôt qu’en gris !

 

cartographie couche R

Pour vous amuser, vous pouvez essayer :

  • addProviderTiles(providers$Stamen.Toner)
  • addProviderTiles(providers$Esri.NatGeoWorldMap)
  • addProviderTiles("Stamen.Watercolor")
  • addProviderTiles("Stamen.TonerHybrid")

Il y en a d’autres de disponibles, vous trouverez une liste ici, certains nécessitent une inscription au préalable (pas testé !).

 

4.2 Ajouter un contour sur les pays

C’est là, que l’affaire s’est corsée ! Pour ajouter des contours sur une carte leaflet, il faut des données de contour ! Et ces données il faut aller les chercher dans un fichier de format shapefile, qu’il faut lui-même aller chercher quelle que part sur internet ! Ça n’a l’air de rien, mais comprendre ça c’est déjà une victoire  ! Merci Sandrine Roux !

4.2.1 A la recherche d’un fichier shapefile

A cette étape, je me suis dit que je trouverais peut être ça sur le site d’Eurostats , puisque je l’avais déjà un peu exploré pour cet article “A la découverte des statistiques européennes d’Eurostat“et que j’avais vu des cartes. Bonne pioche !

shapefile cartographie R

 

Comme je ne savais pas trop quelle échelle choisir, j’ai pris celle du milieu !

Le ficher zip comportait de nombreux autres dossiers compressés:
shape file contour pays

 

J’ai choisi d’utiliser le dossier “CNTR_RG_10M_2016_4326.shp” car en lisant le fichier “release_notes.txt”, j’ai vu que :

  • RG correspond aux “regions (multipolygons)” (je savais que j’avais besoin de polygons )
  • 4326 correspond au référentiel WGS84, avec des coordonnées en degrés décimal, et que ça me semblait “courant”.

4.2.2 Contenu du fichier shapefile

Au final j’ai décompressé le fichier “CNTR_RG_10M_2016_4326.shp” et j’ai placé les 5 fichiers qu’il contient dans un dossier “data_carto” lui même à la racine de mon projet R, comme ça :

 

Pour plus de détail sur ces différents fichiers, vous pouvez consulter cette page.

4.2.3 L’Importation dans R

En lisant cette page, j’ai vu que le fichier .DBF pouvait être ouvert avec Excel. En le faisant (d’abord ouvrir Excel, puis aller chercher le fichier), j’ai vu que les données concernaient tous les pays du monde et pas que l’Europe. J’allais donc être obligé de sélectionner les pays de l’Europe de l’Ouest qui m’intéressaient.

Je me suis alors souvenu d’un article de blog de Sébastien Rochette (Initiation à la cartographie avec sf et compagnie) dans lequel il sélectionnait des départements à partir des données de tous les départements de la France :

Cet article m’a été d’une grande aide, car j’ai appris qu’en important mes données shapefile avec la fonction st_read() du package sf elles allaient devenir une table de données classiques et que je pourrais utiliser les fonctions du tidyverse pour filtrer les lignes des pays qui m’intéressaient !

 

 

4.2.4 Sélection des pays d’intérêt

Pour cela, j’ai récupéré la liste des pays qui m’intéressaient dans le fichier data_foot, et j’ai filtré les lignes correspondante dans le fichier “Monde”,(variable NAME_ENGL) en utilisant la fonction filter() de dplyr:

 

4.2.5 Ajout sur la carte leaflet

Pour cela, j’ai utilisé la fonction addPolygons() :

 

cartographie R leaftlet

 

C’était déjà pas mal, mais je me suis dit que je pourrais renforcer le blanc sur les pays qui ne m’intéressent pas. Pour cela, j’ai filtré comme précédemment leurs lignes à partir du fichier Monde et j’ai ajouté l’option fillOpacity=0.65 dans une seconde fonction addPolygons() que j’ai
placé en premier pour que les polygons orange des pays d’intérêt recouvrent le blanc :

 

cartographie logiciel R polygon

 

5 Ajout de valeurs sur la carte

5.1 Collecte des coordonnées gps du centre des pays

Pour ajouter mes scores de foot sur la carte, il a fallu que je récupère les coordonnées des pays. Pour cela, j’ai utilisé les packages rworldmap et rgeos qui permettent d’obtenir les coordonnées des centroides de tous les pays du monde :

 

J’ai ensuite modifié les noms “x” et “y” en “long” et “lat”.

 

Si vous avez besoin de collecter d’autres types de coordonnées gps (par exemple celles d’une gare), je vous conseille de consulter l’article de Marie Vaugoyeau : ‘Visualiser des zones géographiques autour de points d’intérêt avec leaflet” . A la fin de celui-ci, Marie donne une astuce pour le faire avec Open Cage Data !

5.2 Ajout des coordonnées aux données

J’ai ensuite sélectionné uniquement les pays de l’Europe de l’Ouest qui m’intéressaient :

 

Et j’ai ajouté leur coordonnées dans la table des données de foot, en utilisant la fonction left_join(). Pour plus d’infos sur les jointures, vous pouvez consulter cet article , et celui là.

 

5.3 Gestion de leaflet :

Pour ajouter les scores sur la carte, j’ai utilisé la fonction addLabelOnlyMarkers()

 

ajouter valeur sur carte R

 

Là, j’ai trouvé que ça manquait un peu de visibilité, et je me suis dit que ça serait mieux avec des cercles de couleurs qui seraient d’autant plus gros que la valeur du score est importante. Pour ajouter cela, l’article “Les bases de la cartographie dynamique avec R Leaflet” d’Aline Deschamps m’a été très utile. J’ai alors utilisé la fonctionaddCircle(), et j’ai un peu tâtonné pour régler la dimension des rayons des cercles.

 

Cercles sur carte leaflet

 

Le rendu final, me convient assez. Néanmoins, j’aurais bien voulu avoir les mers et océans en bleu plutôt qu’en gris, j’ai essayé plein de chose et je n’ai pas réussi. Donc si vous savez comment faire, dites le moi en commentaire !

 

Et si cet article vous a plu, n’oubliez pas de le partager 😉

 

Poursuivez votre lecture

A la découverte des statistiques européennes d’Eurostat

Initiation à la manipulation de données avec le package dplyr

Huit raccourcis clavier à utiliser sous R Studio !

 

Partager l'article
  •  
  •  
  •  
  •  
  •  
    64
    Partages
  • 64
  •  
  •  
  •  
  •  

4 commentaires

  1. Dany OTRON Répondre

    Merci encore Claire pour cet article qui vient renforcer encore nos connaissances.

  2. Gislain MEKOMPOAMB Répondre

    Merci Claire pour cet article. je me suis essayé, sauf que je me suis heurté à la fonction “st_read” qui n’a pas fonctionné chez moi. Donc je n’ai pas pu paramétrer à ma convenance. Peut-on contourner le problème?
    Avez-vous une idée de l’écriture des opérateurs de la physique (divergence, rotationel, gradient…) en langage r ?

    merci encore pour tout.

  3. N. Yohan Répondre

    Bonjour Claire

    Merci pour ce tutoriel ! Je suis vraiment un débutant sur R et cet article tombe bien, car j’aimerai faire une carte. J’espère y arriver

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *