Cartographie de flux avec le package cartography

Depuis hier, le package cartography développé par nos collègues Timothée Giraud (http://rgeomatic.hypotheses.org/) et Nicolas Lambert (http://neocarto.hypotheses.org), tous deux ingénieurs à l’UMS RIATE, est en ligne sur le CRAN. Il permet de faire beaucoup de cartes différentes dont des cartes de flux. Le script et les données utilisés dans ce billet sont téléchargeables ici (j’arrête provisoirement github, j’y fais un peu n’importe quoi…) – le script est encodé en utf-8 (pour règler l’encodage dans RStudio : Tools > Global Options > Default text encoding).

La documentation sur les fonctions est lisible et homogène et les exemples fonctionnent mais, bien entendu, ce qui est intéressant est de pouvoir importer et cartographier ses propres données. Deux fichiers sont attendus en entrée : une liste de liens (origine, destination, intensité de la relation) et un fond de carte au format .shp. Les deux donneront dans R un data.frame et un  SpatialPolygonsDataFrame (noté SPDF dans la suite du  billet). Il est bien entendu nécessaire que le code des unités spatiales soit le même dans les deux fichiers…

La première étape consiste à attribuer des coordonnées à la liste de liens à l’aide de la fonction getLinkLayer. La fonction prend comme argument : le nom du SPDF et les colonnes origine-destination du data.frame. Si l’identifiant commun n’est pas la première colonne du SPDF, il est nécessaire de préciser la colonne adéquate avec l’argument spdfid = « Nom_de_la_colonne ». Dans l’exemple téléchargeable, l’argument est utilisé.

La fonction plot(SPDF) permet ensuite de visualiser le fond de carte.

Deux fonctions permettent de cartographier les flux : propLinkLayer (épaisseur proportionnelle à l’intensité) et gradLinkLayer (flux discrétisés). Le script téléchargeable devrait vous permettre de comprendre la logique d’utilisation et les principales options. Dans les deux cas, l’orientation des flux n’apparaît malheureusement pas.

Signalons enfin la fonction legendPropLines qui permet de personnaliser la légende de la carte réalisée (fonction non encore testée à ce jour).

La réalisation de cartes est plutôt aisée mais, comme toujours pour la cartographie des flux, cela ne garantit pas nécessairement un résultat d’une grande lisibilité…

 

 

Sélection de flux avec R : le package flows

L’analyse et la représentation des flux supposent le plus souvent une sélection de ces derniers. La méthode classique en analyse spatiale des flux dominants (voir ce billet) et les méthodes des flux majeurs (garder x premiers flux par lieu, les x flux les plus install.packages(« flows », dependencies = TRUE)importants en volume, les flux représentant plus de x % d’un volume donné etc.) forment les deux grandes familles de sélection couramment employées.

Le package flows, développé en juin-juillet au sein de l’UMS RIATE avec mes collègues Timothée Giraud (voir le blog rgeomatic) et Marianne Guérois permet de choisir ses critères de sélection, de calculer des indicateurs statistiques et, pour les flux dominants, de visualiser la sélection effectuée. Il est disponible sur le CRAN donc s’installe normalement avec un install.packages(« flows », dependencies = TRUE).

Les fonctions de sélection et d’analyse prennent en entrée une matrice carrée origine – destination. Si les données de départ sont de type origine – destination – intensité, la fonction prepflows permet de passer en format carré.

La fonction statmat fournit pour une matrice origine destination un certain nombre d’éléments utiles pour connaître les données de départ mais également justifier statistiquement la méthode ou le seuil retenu. On obtient notamment le volume total de flux et les indicateurs statistiques de base sur ces flux (quartiles, moyenne, etc.), la densité, le nombre, la taille et la composition des composantes connexes, le degré pondéré et non pondéré des sommets. Des sorties graphiques permettent d’étudier la distribution des degrés (pondérés et non pondérés) et des liens (boîte à moustache et courbe de Lorenz sur l’intensité des flux).

En ce qui concerne la sélection, trois familles de méthode sont implémentées :

  • flux dominants classiques ;
  • critères locaux (pour chaque sommet, garder les flux obéissant à tel critère) ;
  • critères globaux (considérant l’ensemble des flux, garder ceux obéissant à tel critère).

La fonction compmat permet de comparer deux matrices origine-destination de même dimension, notamment pour connaître la perte d’information consécutive à une sélection.

Enfin, la représentation graphique est limitée aux résultats issus de la méthode des flux dominants dans la mesure où d’autres packages existent pour visualiser des graphes valués ou réaliser des cartes de flux (un package de cartographie développé par le déjà cité Timothée Giraud et son collègue Nicolas Lambert devrait être disponible très prochainement). Elle permet d’obtenir des figures de ce type :

exemplemap

Exceptionnellement, je ne fournis pas de script : je me permets de renvoyer à la vignette qui accompagne le package et qui explique tant les méthodes que l’utilisation des fonctions.

Dernier point : n’hésitez pas à envoyer vos remarques (par mail ou en commentaire), demandes et critiques, pour que nous puissions améliorer ce package.

ENSAI TD2 – Manipulation de matrices et cartographie de flux avec R

L’objectif du TD est double : manipuler des matrices pour cartographier des indicateurs calculés à partir des marges (cf cours 3) ; mettre en œuvre avec R les méthodes de flux dominants, de flux majeurs et les modèles gravitaires. Ce TD reprend en partie une séance donnée avec Claude Grasland dans le cadre du groupe elementR (cf ce billet). Outre Claude Grasland, les scripts utilisés pour ce TD doivent beaucoup à Timothée Giraud (cf le blog R Géomatique), Nicolas Lambert (cf le blog néocarto) et Malika Madelin.

Packages utilisés : reshape2, maptools, rCarto, RColorBrewer.

Les données utilisées sont les migrations entre les dix régions tchécoslovaques en 1965 (téléchargement).

Manipulations de base

Deux manipulations sont nécessaires pour travailler sur les matrices : passer d’une matrice carrée à un format origine – destination – flux et réaliser l’opération inverse. De plus, pour cartographier des flux, il est nécessaire d’avoir un fond de carte au format .shp (avec des codes pour les unités spatiales similaires aux codes utilisées dans les fichiers de données pour permettre la jointure), de calculer les coordonnées des centroïdes et enfin les distances entre ces centroïdes. L’exemple ci-dessous détaille les étapes :

library(reshape2)

#passage data.frame type matrice en objet matrix

#importation de la matrice
tab <- read.table("matrice.csv", ... ,stringsAsFactors=FALSE)

#passage d'un objet data.frame à un objet matrix
mat <- as.matrix(tab[,-1])
row.names(mat) <- tab[,1]

#passage d'une matrice au format origine - destination - flux
tabflow <- melt(mat)
names(tabflow) <- c("i","j","Fij")
head(tabflow)

#passage d'une liste i-j-Fij au format matrice
tempo <- melt(tabflow,
             id.vars=c("i","j"),
             measure.vars="Fij")
tempo2 <- dcast(tempo, i~j)
matflow2 <- as.matrix(tempo2[,-1])
rownames(matflow2) <- tempo2[,1]

library(maptools)

#import d'un shape
fdc <- readShapeSpatial("carte.shp")

#calcul des centroides
centres <- cbind(fdc@data[,"CODE"], as.data.frame(coordinates(fdc)))
colnames(centres) <- c("CODE","X","Y")
head(centres)

#calcul de la distance
#2 étapes : passer en format long et coller les xi, yi, xj, xj
#appliquer la formule dij = round(sqrt((xi-xj)**2 + (yi-yj)**2)/1000, 1)

Déroulement du TD

Les scripts détaillant toutes les étapes sont disponibles ici.

Opérations élémentaires sur les matrices

  • importer le fichier matmig_1961_1965.csv et le tranformer en objet matrice (Fij)
  • calculer la transposée (Fji)
  • calculer le volume et le solde des échanges
  • à l’aide de la fonction apply, calculer les sommes marginales (arrivée, départ, volume, solde, asymétrie)
  • importer le fichier tch10.shp
  • cartographier différents indicateurs à l’aide du package rCarto (somme des départs, volume et asymétrie migratoire)
  • cartographier les flux d’émigration

Voici deux exemples de cartes à produire.

solde

echanges

Flux dominants et flux majeurs

  • à l’aide des fonctions apply, sum, max et de l’argument which.max, déterminer les flux dominants
  • à l’aide des foncions apply et rank, déterminer les flux majeurs (x premiers flux de i vers j)
  • repérer les flux supérieurs à 2% du volume total des flux et les cartographier

Modèles gravitaires

  • calculer les marges de la matrice de flux et les centroïdes des dix régions
  • passer la matrice en format i – j – Fij et coller masses et coordonnées
  • importer le fichier attributaire tchpop_1965_1990.csv et coller les éléments utiles au tableau i j Fij
  • le tableau final comprendra les éléments suivants : i j Fij Fji Fi Fj Xi Yi Xj Yj Dij POPi POPj
  • tester un modèle gravitaire prenant en compte masses et distance de type glm(Fij~log(POPi)+log(POPj)+log(Dij), data=mydata, family=poisson)
  • étudier les paramètres – summary(model) –, analyser la variance puis calculer et cartographier les résidus
  • mêmes étapes avec un modèle à double contrainte (origine et destination) – glm(Fij~i+j+log(Dij), data=mydata, family=poisson)

(re)lire les classiques : A graph theory interpretation of nodal regions de Nystuen et Dacey, 1961

Quand on s’intéresse à l’utilisation de la théorie des graphes par les géographes, deux références historiques s’imposent : l’ouvrage de Kansky consacré essentiellement aux réseaux de transport ; l’article de Nystuen et Dacey exposant la méthode des nodal flows, devenue chez les quantitativistes francophones la méthode des flux dominants. Ce court article paru en 1961 mérite une (re)lecture attentive tant il propose une solution élégante, efficace et simple pour trouver une hiérarchie au sein d’un réseau valué – il est donc susceptible d’intéresser bien d’autres disciplines…

L’objectif de la méthode proposée est donné dès la première phrase : ordonner et grouper les villes en fonction de l’intensité et de la direction des flux de biens, de personnes et de communications entre elles (« The purpose of this paper is to describe a procedure for ordering and grouping cities by the magnitude and direction of the flows of goods, people and communications between them », p. 29). Cette méthode est présentée comme pouvant s’appliquer à un grand nombre de phénomènes dans la mesure où il suffit que le phénomène soit de nature relationnel entre des objets pouvant être symbolisés par des points (« A particular phenomenon is suitable for this type of analysis when it may be viewed as a relationship or flow that links objects that are properly mapped as points », p. 30).

Le principe est simple : 1) calculer la somme des flux reçues par sommet puis 2) garder le plus grand flux émis par chacun des sommets : il s’agit donc d’une logique du gagnant qui emporte tout (p. 31 «  »The remaining non-dominant associations are not used, even though the magnitudes of some of these associations may he relatively large. »). Un sommet est dit dominant quand son flux le plus important (appelé nodal flow dans l’article) est dirigé vers un sommet qui reçoit moins de volume de flux que lui ; un sommet est dominé quand son flux le plus important est à destination d’un sommet recevant plus de volume de flux que lui (« [A city is] independent if its largest flow is to a smaller city  […] a subordinate city is a city whose largest flow is to a larger city. », p. 34). La relation est transitive : si a est dominé par b et b dominé par c, alors c est dominée par a, et le graphe produit est acyclique, un sommet ne pouvant être le subordonné d’un de ses subordonnés.

L’exemple traité ensuite concerne le volume d’appels téléphoniques inter-urbains autour de Seattle. Pour des raisons liées à la disponibilité des données, aux capacités informatiques de l’époque et à la présence de plusieurs opérateurs, seule une matrice 40 x 40 villes est analysée pour produire la carte ci-dessous.

Figures p. 35

p35a

p35b

Extrait de la page 39

map

Les auteurs prennent bien soin de préciser que leur méthode suppose des flux hiérarchisés pour donner un résultat interprétable (« An assumption of this type is tenable only for intercity relations which may be ranked or have a unique, largest interaction », p. 33).

La méthode proposée a-t-elle encore une pertinence aujourd’hui ? Oui dans la mesure où elle donne des informations utiles sur le squelette du réseau valué étudié. Il s’agit en fait de produire un arbre couvrant minimum (ou une forêt, c’est-à-dire une série d’arbres non connexes)  prenant en compte l’intensité des liens. Chaque fois que l’on a affaire à un graphe dense, ce peut être une méthode exploratoire utile. Cette méthode simple, facile à implémenter dans un logiciel, fournit en somme des schématisations de relations entre sommets.

De nombreuses variations ont été proposées autour de ce qui a rapidement été surnommé la méthode des flux dominants : on peut notamment citer toutes les variantes des flux majeurs (on garde soit les x premiers flux par sommet, soit les flux dont l’intensité représente plus de x % du volume total des flux). Les résultats obtenus sont souvent plus compliqués à lire – ces méthodes augmentent automatiquement le nombre de liens, et de nombreux géographes ont tendance à mettre les lieux à leur place, ce qui crée le redoutable phénomène des cartes spaghettis… – et si l’ambition de prendre mieux en compte la complexité des phénomènes est louable, le résultat peut être décevant. Tout d’abord, décider de prendre x flux par sommet sans aucun critère d’intensité n’aurait guère de sens ; inversement, se baser seulement sur un pourcentage du volume total crée le plus souvent un grand nombre de sommets isolés – on retrouve souvent la règle des 20-80 dans les flux, soit 20% des flux portant 80% de l’intensité du trafic.

La méthode des flux dominants ne convient certes pas à toutes les données de flux, ni à toutes les questions de recherche mais elle a tout de même le grand avantage de ranger dans une catégorie (dominé, relais, dominant) l’ensemble des sommets et de s’appuyer sur des règles de construction simples et rigoureuses.

Références : John D. Nystuen et Michael F. Dacey, 1961, A graph theory interpretation of nodal regions, Papers and Proceedings of the Regional Science Association, vol. 7, p. 29-42. On le trouve désormais gratuitement en ligne (il était temps…). Par contre, l’article pionnier de Garrison, Connectivity of the interstate highway system, paru en 1960 et cité par Nystuen et Dacey est toujours payant chez Wiley…