A propos Ryma Hachi

Ryma Hachi est doctorante à l’UMR Géographie-cités depuis octobre 2014, sous la direction de Lena Sanders.
Architecte de formation, sa thèse vise à révéler, grâce à la théorie des graphes, les processus de formation et de transformation des réseaux viaires.

Réunions fmr : Cycle sur la détection de communautés

Après un cycle de formations sur l’analyse de réseaux sous R, fin 2017, les activités du groupe fmr reprennent. Pour démarrer l’année 2018, nous organisons quelques séances construites autour de la détection de communautés dans les graphes.

Devant la grande diversité d’algorithmes de détection de communautés, il n’est pas toujours évident de choisir des méthodes efficaces et en adéquation avec ses données et ses problématiques. Ainsi, les séances traiteront à chaque fois d’un aspect méthodologique et d’une dimension particulière (communautés dans l’espace, le temps, le texte), en tentant à chaque fois de présenter des solutions pratiques.

La première séance est intitulée « communautés et espace ». En géographie, les algorithmes de détection de communautés sont souvent utilisés pour étudier des flux. Néanmoins, les modèles de base permettant d’identifier des communautés « classiques » ne tiennent pas compte de l’effet probable de l’espace sur l’existence de relations. Les partitions obtenues peuvent donc être considérées comme biaisées ou produisant des résultats triviaux. L’objectif de cette intervention sera de présenter une solution alternative, basée sur la notion de modularité spatiale.

Cette séance sera animée par Serge Lhomme (UPEC, Lab’URBA) qui proposera une application sous le logiciel Qgis à partir de données de flux domicile-travail.

La séance aura lieu le mercredi 31 janvier, de 10h à midi, sur le campus de l’université Paris 7, bâtiment Olympe de Gouges, salle M019 (accessible depuis le rez-de-chaussée).

Nous espérons vous voir nombreux!

Ryma Hachi

Ryma Hachi est doctorante à l’UMR Géographie-cités depuis octobre 2014, sous la direction de Lena Sanders.
Architecte de formation, sa thèse vise à révéler, grâce à la théorie des graphes, les processus de formation et de transformation des réseaux viaires.

More Posts

3ème séance du cycle de formation à l’analyse de réseaux avec R

La troisième séance du cycle de formation organisé par fmr sur l’analyse de réseaux avec R a eu lieu le 19 décembre 2017, à l’Institut de géographie de Paris. Elle était animée par Hadrien Commenges, maître de conférence à l’université Paris 1. Le contenu de la séance est détaillé ci-dessous. Les données utilisées sont téléchargeables ici.

La séance avait pour objectifs de:

  • Savoir construire un graphe à partir d’une liste de liens
  • Connaître les principes de la détection de communautés
  • Savoir choisir parmi les différents algorithmes de détection
  • Être capable de concevoir une chaîne de traitement efficace

Présentation des données

Le fichier citibike042017.Rds contient tous les trajets effectués sur le réseau Citibike durant le mois d’avril 2017. Les données brutes sont téléchargeables sur le site http://www.citibikenyc.com/system-data. Elles sont enrichies par :

  • des variables calculées : distance euclidienne, distance de Manhattan, vitesse (calculée sur la distance de Manhattan)
  • une variable météorologique : pluie, variable binaire 0-non, 1-oui

Traitements préalables

Charger les packages

library(sf)
library(cartography)
library(igraph)
library(dplyr)

Charger les données

citiBike <- readRDS("DATA/citibike042017.Rds")

Créer un fichier de stations : tableau de points (data.frame) et objet spatial (sf)

# vérifier le nombre total de stations
citiBike$start_station_id %>% unique() %>% length()
## [1] 609
citiBike$end_station_id %>% unique() %>% length()
## [1] 608
c(citiBike$start_station_id, citiBike$end_station_id) %>% unique() %>% length()
## [1] 609
# créer un index de valeurs dupliquées
idUnic <- !duplicated(citiBike$start_station_id)

# filtrer et mettre en forme le tableau de points
tabStations <- citiBike[idUnic, c(1, 3, 4)] %>% 
  rename(id = start_station_id,
         lat = start_station_latitude,
         lon = start_station_longitude) %>% 
  arrange(id)

# transformer le tableau en objet spatial
spStations <- st_as_sf(tabStations,
                       coords = c("lon", "lat"),
                       agr = "constant",
                       crs = 4326, 
                       stringsAsFactors = FALSE)

Cartographier les stations

osmTiles <- getTiles(x = spStations, type = "osm", zoom = 14, crop = FALSE)
## Loading required namespace: raster
tilesLayer(osmTiles)
plot(spStations$geometry, pch = 20, add = TRUE)

Pour l’exploration utiliser leaflet

library(leaflet)
leaflet() %>% addTiles() %>% addCircleMarkers(data = spStations)

Construction du graphe

Le tableau dont on dispose (citiBike) peut être considéré comme une liste de liens : chaque station représente un noeud (sommet) du graphe, chaque trajet reliant deux stations représente un arc (arrête). En l’état il s’agit donc d’une liste de liens multiples non pondérés : entre deux stations il y a un nombre n de trajets. Pour pouvoir analyser ce réseau il sera utile d’agréger ces liens multiples : si 10 trajets relient la station A à la station B, on ne considère pas qu’il y a dix arcs non valués mais un seul arc de poids 10.

Pour faire l’agrégation il est possible de créer le graphe non valué qui aura 609 noeuds et 12,4 millions d’arcs puis de collapser les arcs multiple avec la fonction simplify() et l’argument remove.multiple. Cette option est assez mauvaise parce qu’elle demande une opération coûteuse de création d’un graphe à 12,4 millions d’arcs. Il est donc préférable de faire l’agrégation en amont, avec aggregate() ou avec les fonctions du packages dplyr.

tabAgr <- citiBike %>% 
  group_by(start_station_id, end_station_id) %>% 
  summarise(NB = n())

Explorons ce réseau.

summary(tabAgr$NB)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   1.000   3.000   9.111  10.000 761.000
nrow(tabAgr) / (609 * 608)
## [1] 0.3686587

Il y a donc 136504 arcs pondérés reliant les 609 stations. C’est un réseau très dense : le rapport entre nombre d’arcs observés et nombre d’arcs maximal est de 0,37. Les poids varient entre 1 et 761, avec une distributions très concentrée à gauche : min à 1, Q1 à 1, médiane à 3, Q3 à 10.

Ce tableau peut maintenant être transformé en objet de type igraph.

citiNet <- graph.data.frame(tabAgr, directed = TRUE, vertices = tabStations)

On peut explorer l’objet, mais éviter de le représenter : avec 136504 arcs ce serait long et le résultat serait illisible.

summary(citiNet)
## IGRAPH DN-- 609 136504 -- 
## + attr: name (v/c), lat (v/n), lon (v/n), NB (e/n)
components(citiNet)
## $membership
##   72   79   82   83  116  119  120  127  128  143  144  146  150  151  152 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  153  157  161  164  167  168  173  174  195  212  216  217  223  225  228 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  229  232  236  237  238  239  241  242  243  244  245  247  248  249  251 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  252  253  254  257  258  259  260  261  262  264  265  266  267  268  270 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  274  275  276  278  279  280  281  282  284  289  291  293  295  296  297 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  301  302  303  304  305  306  307  308  309  310  311  312  313  314  315 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  316  317  319  320  321  322  323  324  325  326  327  328  330  331  332 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  334  335  336  337  339  340  341  342  343  344  345  346  347  348  349 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  350  351  353  354  355  356  357  358  359  360  361  362  363  364  365 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  366  368  369  372  373  376  377  379  380  382  383  384  385  386  387 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  388  389  390  391  392  393  394  395  396  397  398  399  400  401  402 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  403  405  406  407  408  409  410  411  412  414  415  416  417  418  419 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  420  421  422  423  426  427  428  430  432  433  434  435  436  437  438 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  439  440  441  442  443  444  445  446  447  448  449  450  453  454  455 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  456  457  458  459  460  461  462  465  466  467  468  469  470  471  472 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  473  474  476  477  478  479  480  481  482  483  484  485  486  487  488 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  490  491  492  494  495  496  497  498  499  500  501  502  503  504  505 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  507  508  509  511  513  514  515  516  517  518  519  520  522  523  524 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  525  526  527  528  529  530  531  532  533  534  536  537  539  540  545 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  546 2000 2001 2002 2003 2005 2006 2008 2009 2010 2012 2021 2022 2023 3002 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3016 3041 3042 3043 3044 3046 3047 3048 3049 3050 3052 3053 3054 3055 3056 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3072 3073 3074 3075 3076 3077 3078 3080 3081 3082 3083 3085 3086 3087 3088 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3090 3091 3092 3093 3094 3095 3096 3100 3101 3102 3103 3105 3106 3107 3108 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3124 3125 3126 3127 3128 3129 3130 3131 3132 3134 3135 3136 3137 3139 3140 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3141 3142 3143 3144 3145 3146 3147 3148 3150 3151 3152 3155 3156 3157 3158 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3175 3176 3177 3178 3179 3180 3182 3221 3223 3224 3226 3231 3232 3233 3235 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3236 3238 3241 3242 3243 3244 3245 3249 3254 3255 3256 3258 3259 3260 3263 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3282 3283 3284 3285 3286 3288 3289 3290 3292 3293 3294 3295 3297 3298 3300 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3331 3332 3333 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3362 3363 3364 3365 3366 3367 3368 3370 3371 3373 3374 3375 3376 3377 3378 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3379 3381 3382 3383 3384 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3407 3408 3409 3410 3411 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3427 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3428 3429 3430 3431 3434 3435 3436 3438 3440 3441 3443 3445 3447 3449 3450 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3452 3453 3454 3455 3456 3457 3459 3462 3463 
##    1    1    1    1    1    1    1    1    1 
## 
## $csize
## [1] 609
## 
## $no
## [1] 1
diameter(citiNet)
## [1] 4

Ces mesures confirment le diagnostic précédent, une seule composante connexe et un diamètre égal à 4, le réseau est très dense. Quelques mesures sur les degrés des noeuds permettent de se faire une idée plus précise de la structure des flux.

degIn <- strength(citiNet, mode = "in", weights = E(citiNet)$NB)
degOut <- strength(citiNet, mode = "out", weights = E(citiNet)$NB)
hist(degIn, col = "firebrick", border = "white")

hist(degOut, col = "firebrick", border = "white")

plot(degIn, degOut, pch = 20)
abline(a = 0, b = 1, col = "red")

Détection de communautés

Sur un graphe simple, tous les algorithmes de détection de communautés donneront un résultat correct et rapide. Voici un exemple.

g <- make_full_graph(5) %du% make_full_graph(5) %du% make_full_graph(5)
g <- add_edges(g, c(1,6, 1,11, 6, 11))

Avec l’algorithme basé sur l’intermédiarité des liens :

betweenClus <- cluster_edge_betweenness(g, weights = NULL, directed = FALSE)
plot(g, vertex.color = betweenClus$membership)

Avec l’algorithme fast greedy :

greedyClus <- cluster_fast_greedy(g, weights = NULL)
plot(g, vertex.color = greedyClus$membership)

Avec l’algorithme de Louvain :

louvainClus <- cluster_louvain(g, weights = NULL)
plot(g, vertex.color = louvainClus$membership)

La notion principale mobilisée dans la détection de communauté est la modularité (modularity), elle s’écrit :

où m est la demi-somme des poids, Aij est le poids de l’arc reliant les noeuds i et jki et kj sont les sommes marginales des noeuds i et (i.e. leur degré entrant et sortant) et la fonction δ une fonction binaire qui prend la valeur 1 si i et j sont dans la même communauté (et 0 sinon).

La modularité peut être calculée a posteriori sur n’importe quel objet de type communities pour caractériser le partitionnement :

modularity(betweenClus)
## [1] 0.5757576
modularity(greedyClus)
## [1] 0.5757576
modularity(louvainClus)
## [1] 0.5757576

Dans un grand nombre d’algorithmes, la modularité n’est pas utilisé comme mesure a posteriori de la qualité du partionnement mais comme quantité à maximiser. C’est ce que font les algorithmes suivants :

  • fast greedy avec cluster_fast_greedy()
  • Louvain avec cluster_louvain()
  • optimum de modularité avec cluster_optimal()
  • principale valeur propre avec cluster_leading_eigen()

Application aux données citibike

Parmi les algorithmes présentés (il existe d’autres algorithmes qui ne s’appuient pas sur la modularité et qui n’ont pas été présentés) :

  • celui de l’intermédiarité des liens est clairement hors de propos : il est itératif, donc lent, et surtout la notion d’intermédiarité a peu de sens dans un graphe aussi dense (voir plus haut)
  • celui de la valeur propre est rarement applicable parce qu’il crée seulement deux clusters
  • celui de l’optimum de modularité donnerait le meilleur résultat mais il est inapplicable sur un graphe d’une telle taille
  • les deux autres – fast greedy et Louvain – sont applicables et donneront des résultats semblables, il donnent un approximation rapide de l’optimum de modularité

Attention la plupart des algorithmes demandent un graphe non orienté. On commence donc par transformer le réseau : on considère que s’il y a un lien bidirectionnel entre une station i et une station j il convient de sommer les deux sens au moment de l’agrégation. Bien sûr d’autres fonctions pourraient être appliquées.

citiNetUn <- as.undirected(graph = citiNet, mode = "collapse", edge.attr.comb = sum)
summary(citiNetUn)
## IGRAPH UN-- 609 84105 -- 
## + attr: name (v/c), lat (v/n), lon (v/n), NB (e/n)

On applique maintenant l’algorithme de Louvain et on récupère l’appartenance des noeuds aux communautés. L’intérêt de cette méthode est de produire plusieurs niveaux d’agrégation (multilevel) si le réseau est complexe. Dans ce cas, le dernier niveau est donné par le vecteur membership, l’ensemble des niveaux est donné dans la matrice memberships. Dans l’exemple de Citibike le réseau est simple et un seul niveau d’agrégation est produit, la matrice memberships ne contient qu’une seule ligne :

multCom <- cluster_louvain(graph = citiNetUn, weights = E(citiNetUn)$NB)
vecMember <- multCom$membership
matMember <- multCom$memberships

Le réseau reste difficile à représenter avec ses 84105 arcs, on sélectionne une centaine d’arcs parmi les flux principaux en supprimant tous les arcs dont le poids inférieur à 300.

mainNet <- delete_edges(graph = citiNetUn, edges = E(citiNetUn)[E(citiNetUn)$NB < 300])
summary(mainNet)
## IGRAPH UN-- 609 124 -- 
## + attr: name (v/c), lat (v/n), lon (v/n), NB (e/n)

On cherche à afficher les noeuds aux coordonnées géographiques correspondantes aux stations. Il faut donner dans la fonction plot() une matrice de coordonnées : les noeuds du graphe (qui contiennent comme attribut la longitude et la lattitude), on fabrique une matrice contenant long et lat (dans cet ordre : la longitude est l’axe des x et la latitude l’axe des y), on désigne cette matrice avec l’argument layout =.

tabCoord <- get.data.frame(citiNetUn, what = "vertices")
matCoord <- as.matrix(tabCoord[, c(3, 2)])

plot(mainNet, 
     vertex.color = multCom$membership, 
     vertex.label = NA, 
     vertex.frame.color = NA,
     vertex.size = 2,
     edge.color = "firebrick",
     edge.width = 2,
     layout = matCoord)

Si on veut cartographier le résultat il faut extraire un tableau, éventuellement l’enrichir de mesures calculées sur le graphe (ici les clusters et les degrés des noeuds), puis créer un objet spatial.

tabCoord$CLUS <- multCom$membership
tabCoord$DEGIN <- degIn
tabCoord$DEGOUT <- degOut

spClus <- st_as_sf(tabCoord,
                   coords = c("lon", "lat"),
                   agr = "constant",
                   crs = 4326, 
                   stringsAsFactors = FALSE)

Cet objet peut être représenté :

  1. avec la fonction plot()
  2. avec les fonctions du packagecartography
  3. avec le packageleaflet si on veut explorer et comprendre pourquoi certaines stations du Sud de Manhattan font partie du même cluster que Brooklyn.

Option 1

plot(spClus$geometry)

Option 2

tilesLayer(osmTiles)
propSymbolsLayer(x = spClus, var = "DEGIN", inches = 0.1, col = "black", border = "white")
## Warning in st_centroid.sfc(st_geometry(x), of_largest_polygon =
## of_largest_polygon): st_centroid does not give correct centroids for
## longitude/latitude data

Option 3

Ici on ajoute des tuiles CartoDB (voir la liste des tuiles disponibles sur ce site)

colPal <- c("firebrick", "grey", "springgreen", "blue")
leaflet() %>% 
  addProviderTiles(provider = "CartoDB.DarkMatter") %>% 
  addCircleMarkers(data = spClus, 
                   stroke = FALSE, 
                   fillColor = colPal[spClus$CLUS],
                   fillOpacity = 0.6)

Poursuite de l’analyse

Créer des sous-graphes en filtrant le tableau des déplacements en amont, faire par exemple :

  • le graphe des déplacements en jour de pluie
  • le graphe des déplacements des abonnés vs. utilisateurs occasionnels
  • le graphe des déplacements en heure de pointe du matin

 

Ryma Hachi

Ryma Hachi est doctorante à l’UMR Géographie-cités depuis octobre 2014, sous la direction de Lena Sanders.
Architecte de formation, sa thèse vise à révéler, grâce à la théorie des graphes, les processus de formation et de transformation des réseaux viaires.

More Posts

2ème séance du cycle de formation à l’analyse de réseaux avec R

La deuxième séance du cycle de formation à l’analyse de réseaux avec R a eu lieu le 21 novembre 2017 à Paris dans le bâtiment Olympe de Gouges (Université Paris 7). Elle était animée par Antoine Peris (doctorant, TU Delft) et Romain Leconte (doctorant, UMR Géographie-cités).

La séance s’est déroulée en deux parties. Un premier temps était consacré au calcul des indicateurs les plus fréquemment utilisés en analyse de réseau, à l’aide du package igraph. Les personnes présentes ont ainsi pu se familiariser avec les lignes de commandes permettant d’inspecter le graphe (nombre de liens et de nœuds, attributs, requêtes attributaires), de calculer des indicateurs globaux (connexité, densité, degré moyen, diamètre), ainsi que des indicateurs locaux (degré de centralité total, degrés de centralités entrant et sortant, centralité d’intermédiarité). Ces résultats ont ensuite été visualisés de façon graphique.

La seconde partie de séance était consacrée à l’analyse d’un réseau dont les nœuds étaient spatialisés. Le but était de partir d’un gros volume de données individuelles brutes (les trajets des vélos partagés à New York) afin de les modéliser sous la forme d’un graphe valué et orienté, calculer quelques indicateurs et faire une carte de résultat avec ggplot2.

Distribution et cartographie des degrés des stations du réseau citibike

Les scripts et les données ayant servi à animer la séance sont disponibles ici.

À noter que la troisième et dernière séance de ce cycle de formation aura lieu le 19 décembre 2017, entre 10h et 12h30. Elle sera animée par Hadrien Commenges (UMR Géographie-cités), et permettra notamment d’aborder la question du filtrage des données, de la pondération des graphes, et de la détection de communautés.

Les inscriptions sont ouvertes. Il suffit d’indiquer votre intérêt pour la formation par mail à l’adresse de Ryma Hachi (hachiryma<a>gmail.com).

Cette fois-ci la formation se tiendra à l’Institut de géographie de Paris, 191 rue Saint-Jacques, 75005, en salle 405.

Ryma Hachi

Ryma Hachi est doctorante à l’UMR Géographie-cités depuis octobre 2014, sous la direction de Lena Sanders.
Architecte de formation, sa thèse vise à révéler, grâce à la théorie des graphes, les processus de formation et de transformation des réseaux viaires.

More Posts

Initiation à sDNA (Spatial Design Network Analysis) sous Qgis

Ce tutoriel reprend en partie la présentation « Initiation à sDNA sous Qgis » préparée dans le cadre de l’atelier « Analyse de réseaux spatiaux et SIG » organisée par le groupe fmr à SAGEO 2017 (6-9 Novembre, Rouen). Les slides de la présentation sont disponibles ici.

Ces dernières années, plusieurs plugins permettant d’analyser des réseaux spatiaux grâce à Qgis ont été développés ; citons notamment Space Syntax Toolkit (J. Gil et al.), Network Analysis (S. Lhomme), Morpheo (C. Lagesse) ou encore sDNA (C. Cooper, A. Chiaradia, C. Webster). Ces plugins sont souvent utilisés pour analyser des réseaux viaires, mais chacun d’entre eux a une conception différente de la manière de passer de ce réseau à un graphe. Dans ce tutoriel, nous présenterons le plugin sDNA pour Spatial Design Network Analysis. Ce tutoriel est basé sur le manuel du plugin, disponible à l’adresse: http://www.cardiff.ac.uk/sdna/software/documentation.

1) Préalable théorique :

sDNA peut être utilisé pour tout type de réseaux spatiaux, mais la communauté de chercheurs qui l’utilise s’intéresse particulièrement aux réseaux urbains et aux systèmes de transport : réseau de véhicules, réseaux piétons (en intérieur ou en extérieur), cyclistes, transport public. Le plugin peut donc être utilisé aussi bien en planification des transports, en aménagement et en architecture.

Le postulat de ces travaux est que la structure des réseaux permet de capturer des informations sur un très grand nombre de phénomènes : la santé, la cohésion sociale, la valeur du foncier, la « vitalité » d’un quartier, l’usage du sol, les déplacements piétons, la pollution, les accidents ou encore l’insécurité. Ainsi, l’objectif de ces travaux est de fournir des arguments pour la conception de « meilleurs » réseaux dans l’environnement bâti.

sDNA permet d’étudier des réseaux spatiaux, c’est-à-dire des réseaux contenant des informations spatiales. Les nœuds ont donc des positions dans un espace euclidien à deux ou trois dimensions.

L’une des particularités de sDNA, par rapport aux plugins d’analyse de réseaux les plus classiques, est qu’il se focalise sur l’analyse des liens plutôt que des nœuds. Dans le cas des réseaux viaires, les rues sont souvent représentées par la polyligne qui passe par leur centre. Ces polylignes seront donc les liens du réseau, et les carrefours entre les rues seront les nœuds du réseau.

Autre particularité, ces liens ne prennent pas nécessairement la route la plus directe : ils peuvent avoir une forme physique différente de la ligne droite.

sDNA accepte le format « lien-nœud » mais seuls les liens sont réellement indispensables. On peut ainsi importer un shapefile contenant uniquement les rues d’une ville, et l’analyser avec sDNA.

2) Avant de commencer :

Installation :

Préparation du réseau :

A noter que l’analyse des réseaux viaires requiert souvent un travail préalable de nettoyage du réseau. Bien que sDNA propose quelques outils de nettoyage dans « Network preparation », nous recommandons d’utiliser plutôt les outils de nettoyage de vecteurs de Qgis, et de nettoyage topologique d’un réseau disponibles sur OpenJump.

Pour que le réseau soit correctement traité par sDNA, quelques vérifications sont nécessaires :

  • Vérifier le système de projection ;
  • Vérifier la connectivité : pour que deux lignes soient connectées, leurs extrémités doivent coïncider. Dans le cas contraire, sDNA considérera que c’est un pont ou un tunnel, un non-lien ;
  • Vérifier les erreurs de géométrie, particulièrement pour les analyses où les changements de directions sont importants ;
  • Les traffic islands (cf. figure) introduisent un changement de direction et une augmentation de la longueur de ces rues. Pour ne pas en tenir compte (les considérer comme des liens simples) ajouter un champ avec la valeur 1 pour les traffic islands à supprimer et 0 pour le reste. Utiliser ensuite le « Network preparation » de sDNA en cochant la case de correction des traffic islands.

Traffic island (sDNA 3.4.5 documentation)

3) Quelques basiques :

Définitions :

Un lien désigne soit la portion située entre deux jonctions, soit entre une jonction et une extrémité. Une jonction est un point où sont connectées au moins trois liens.

sDNA utilise souvent le terme polyligne plutôt que lien, et ce afin de signifier que ces liens peuvent avoir une forme physique.

Chaque polyligne de sDNA est considérée comme une origine indivisible, tous les flux partants d’une polyligne sont considérés comme émanant de son milieu. En revanche, en tant que destinations, deux choix sont possibles. Dans le Discrete Space Mode, les polylignes sont soit considérées comme des destinations indivisibles. En revanche, dans le Continuous Space Mode, elles sont considérées comme divisibles.

Quelques options :

  • Start grade separation et End grade separation:
    • Cette option permet de choisir une colonne origine et une colonne destination dans la table attributaire. Dans ce cas, seuls les liens qui partagent une origine ou une destination seront connectés.
    • Cette option peut s’avérer utile dans le cas d’un réseau multi-niveaux: rue et métro par exemple. En effet, cela permet de connecter les rues ensemble et les lignes de métro ensemble, en jouant sur les valeurs de grade separation (utiliser par exemple les valeurs 0, 1, 2… pour les rues, et 10, 11, 12… pour le métro).
  • La métrique d’analyse (le type de distance à prendre en compte):
    • Euclidienne= distance ordinaire
    • Angulaire= distance mesurée en termes de changement angulaire, que ce soit sur le même lien ou aux jonctions
    • Customisée= sélectionner un champ de métrique (par exemple un champ avec la distance en temps..)
    • Hybride= nécessite d’écrire la formule correspondante (en utilisant la ligne de commande- voir advanced_config dans le manuel)
    • Métrique prédéfinies= piéton, véhicule, cycliste, transport public, mais dont la formule peut être modifiée en utilisant advanced_config. Les formules sont décrites dans Preset metric variables (cf. manuel)– ce sont des distances pondérées selon les tournants, le trafic, les arrêts (si transport en commun) …
  • La pondération (Weight) :
    • Elle peut se faire sur les liens, les longueurs ou les polylignes.
    • Elle dépend de ce qu’on considère comme quantité importante dans notre analyse: le nombre de liens, la longueur, ou une variable donnée telle que la population, le nombre d’emplois…
    • La pondération recommandée est le nombre de liens, car la densité de liens est connue pour augmenter avec le nombre d’emplois et la population, ainsi en pondérant par le nombre de liens on capture déjà ces informations.

4) Les mesures calculées par sDNA :

Mesures sur les polylignes :

  • Lconn= nombre d’extrémités de lignes connectées à cette ligne
  • Llen= longueur de la polyligne
  • LAC= courbure angulaire cumulée le long de la ligne (en degré)
  • Line Hybrid Metrics= la métrique pour les polylignes est donnée, on peut utiliser cela pour signaler les sens interdits, les escalators, …
  • LSin= longueur de la ligne divisée par la distance à vol d’oiseau entre ses extrémités
  • LBear= écart d’orientation entre les deux extrémités de la ligne
  • Lfrac= proportion du lien que cette ligne représente

Mesures de la forme globale du réseau :

  • HullA= surface de l’enveloppe convexe couverte par le réseau
  • HullP = périmètre de l’enveloppe convexe
  • HullR (convex hull maximum radius)= plus longue distance à vol d’oiseau
  • Convex Hull Bearing= orientation de la plus longue distance à vol d’oiseau (souvent par rapport au nord cardinal)
  • Hull Shape Index= Hull Perimeter au carré, divisé par le produit de 4π et Hull area

Farness, Betweenness et Analyse de détours :

farness :

  • MEDn= longueur moyenne des chemins les plus courts entre ce lien et les autres (farness). C’est l’inverse de la closeness centrality. Cette mesure est pondérée par le poids des destinations.
  • La farness peut être calculée avec les autres types de métrique. Par exemple, MADn= longueur moyenne des chemins qui minimisent le changement de direction entre ce lien et les autres.

Betweenness :

  • BtEn= nombre de chemins les plus courts entre deux liens qui passent par ce lien. La betweenness peut aussi être calculée avec les autres types de métrique.

Analyse de détour : à quel point le réseau dévie des chemins les plus directs ?

  • MCFn= moyenne des distances à vol d’oiseau entre chaque origine et tous les liens.
  • DivEn= proportion de détour = ratio moyen entre plus courts chemins et chemins directs (à vol d’oiseau).

Analyse de voisinage :

  • L’ensemble des mesures évoquées jusqu’ici peut être calculée dans un rayon n choisi. Ceci permet de s’intéresser par exemple aux plus courts chemins, non pas par rapport à l’ensemble du réseau, mais dans le voisinage de chaque polyligne. Ce voisinage dépendra par exemple du type de déplacement (piéton, cycliste, …).
  • Quelques mesures de voisinage :
    • Lnkn= nombre de liens dans un rayon choisi
    • Lenn= longueur du réseau dans un rayon choisi
    • AngDn=courbure totale des liens dans le rayon choisi (en degré)
    • Wtn= poids total dans le rayon choisi

« Learn » et « Predict » :

  • Certaines des mesures calculées par sDNA sont connues pour être corrélées à des phénomènes réels tels que le trafic ou le prix du foncier.
  • Pour repérer ces corrélations, sDNA propose les outils Learn et Predict:
    • Learn = après avoir joint au réseau des données réelles – de population par exemple, Learn prend un échantillon de ces données et crée un modèle qui les relie aux mesures calculées par sDNA ;
    • Predict = permet de prendre le modèle créé par Learn et de l’appliquer à des régions où les données réelles ne sont pas disponibles (en se basant sur les mesures sDNA calculées dans ces régions).

 

Pour citer ce logiciel: Cooper, C., Chiaradia, A., Webster, C. (2016) Spatial Design Network Analysis software, version 3.4, Cardiff University, http://www.cardiff.ac.uk/sdna/

Ryma Hachi

Ryma Hachi est doctorante à l’UMR Géographie-cités depuis octobre 2014, sous la direction de Lena Sanders.
Architecte de formation, sa thèse vise à révéler, grâce à la théorie des graphes, les processus de formation et de transformation des réseaux viaires.

More Posts

Rentrée: trois séances d’initiation à l’analyse de réseaux avec R

En cette rentrée universitaire, le groupe fmr vous propose de vous initier à l’analyse de réseaux avec R. Cet atelier réparti sur trois séances est à destination des débutants : pour la séance 1, aucun prérequis ne sera nécessaire concernant R.

Ces séances sont ouvertes à tous alors n’attendez plus pour vous inscrire, en envoyant un mail à groupe_fmr@yahoo.fr

Planning des séances (des informations complémentaires seront diffusées ultérieurement):

– Le mardi 24 octobre, de 10h à 12h.

– Le mardi 21 novembre, de 10h à 12h.

– Le mardi 19 décembre, de 10h à 12h.

 

La séance du 24 octobre aura lieu sur le campus de l’université Paris 7, dans la salle M019 du bâtiment Olympe de Gouges, 8 place Paul Ricoeur, 75013 Paris.

 

 

Ryma Hachi

Ryma Hachi est doctorante à l’UMR Géographie-cités depuis octobre 2014, sous la direction de Lena Sanders.
Architecte de formation, sa thèse vise à révéler, grâce à la théorie des graphes, les processus de formation et de transformation des réseaux viaires.

More Posts

Séance du 20 juin 2017 : L’intégration de données socio-économiques urbaines et régionales dans l’analyse des réseaux

La prochaine séance du groupe fmr aura lieu le mardi 20 juin 2017 à 10 h, au 13 rue du four, 5e étage (bibliothèque), à Paris. Elle sera animée par César Ducruet, Chargé de recherches CNRS à l’UMR 8504 Géographie-cités.

Titre : L’intégration de données socio-économiques urbaines et régionales dans l’analyse des réseaux.

Présentation : Traditionnellement en géographie et dans les autres sciences, les réseaux sont analysés de façon purement topologique. Les 10-15 dernières années ont vu émerger un certain nombre de travaux qui, bien que dispersés et disparates du point de vue des méthodes et données employées, permettent de souligner, de façon statistique, certains déterminants de la centralité et autres caractéristiques des sommets mais aussi des liens. Ceci marque une évolution non négligeable de l’analyse de réseau qui jusqu’à lors n’envisageait ces liens avec le territoire qu’in fine, de façon qualitative. L’un des enjeux est notamment la nécessité de faire coïncider les nœuds à des unités spatiales de référence, d’où des questions d’agrégation et de jointure de sources différentes. Cette difficulté supplémentaire explique la rareté des travaux sur la question mais exprime toute la richesse de mener des analyse bivariées ou multivariées à partir de matrices valuées par d’autres indicateurs que ceux émanant du graphe-lui-même : masse démographique, produit intérieur brut, taux de chômage, spécialisation de l’emploi par branches d’activité, etc. On insistera également sur les points communs et différences entre modèles d’interaction spatiale (type modèle gravitaire) et analyse de réseaux dits spatiaux.

 

Ces séances ont lieu les mardis matin de 10 heures à midi au 13 rue du Four à Paris, 5e étage, bibliothèque. Elles sont ouvertes à toute personne intéressée mais il peut être prudent de signaler sa venue (groupe_fmr@yahoo.fr), la bibliothèque étant vite remplie.

Ryma Hachi

Ryma Hachi est doctorante à l’UMR Géographie-cités depuis octobre 2014, sous la direction de Lena Sanders.
Architecte de formation, sa thèse vise à révéler, grâce à la théorie des graphes, les processus de formation et de transformation des réseaux viaires.

More Posts

Du réseau au récit… Une analyse diachronique des rues de Beauvais (Picardie)

Ces dernières années, le nombre d’outils permettant d’analyser des réseaux spatiaux au moyen de SIG a augmenté. Ceci a notamment engendré la multiplication de travaux ayant pour objet l’analyse des réseaux de rues, et leur comparaison tant spatiale que temporelle. En général, les comparaisons temporelles visent soit à mettre en lien usage du sol et configuration du réseau (Psarra, Kickert, et Pluviano 2013; Vaughan, Dhanani, et Griffiths 2013), soit à mettre en lien ces configurations avec des phénomènes connus tels la densification (Barthelemy et al. 2013), l’étalement urbain (Gudmundsson et Mohajeri 2013), ou encore la croissance et le renforcement de structures préexistantes (Strano et al. 2012).

Le travail présenté ici s’inscrit dans cette lignée, puisqu’il vise à mettre en lien la configuration du réseau de rues (sa forme) avec l’ensemble des processus de formation/ transformation d’une ville. Pour ce faire, la forme du réseau est étudiée, puis comparée de manière diachronique sur le temps long. On recherche ensuite des changements dans ces formes, changements qui sont enfin mis en relation avec des facteurs explicatifs, soit en introduisant les processus urbains en cours, soit en faisant appel au contexte (socio-économique, politique, …) du moment.

Cette méthodologie a été appliquée à la ville de Beauvais (en Picardie), sur trois dates : 1849, 1888 et 1960. Ici, un indicateur assez simple a été choisi : la largeur des rues. Une fois cette variable calculée pour les trois dates, nous avons établi des classes de largeur, puis cumulé les longueurs des rues comprises dans chaque classe de largeur. La distribution (longueur ; largeur) obtenue a ensuite été comparée à une loi de puissance inverse (cf. graphiques), qui correspond à un modèle très hiérarchisé, avec un très grand nombre de ruelles étroites, un nombre moyen de rue moyennement larges, et un très petit nombre de rues larges. L’objectif ici était d’obtenir pour chaque date un indicateur d’écart à cette loi, ce qui permettait de comparer plus facilement les trois distributions, et d’observer des changements.

Histogramme représentant, pour chaque catégorie de largeur, le linéaire des rues de 1849 (en bleu) et la distribution suggérée par une loi de puissance inverse (en rouge) Indicateur d’écart : 0,22. (Hachi, 2014).

Histogramme représentant, pour chaque catégorie de largeur, le linéaire des rues de 1849 (en bleu) et la distribution suggérée par une loi de puissance inverse (en rouge) Indicateur d’écart : 0,22. (Hachi, 2014).

Plan de la ville de Beauvais en 1871

Les résultats ont permis de révéler la proximité entre la distribution de 1849 et la loi de puissance inverse (graphique ci-dessus), chose qui indique que les largeurs de rues étaient très hiérarchisées durant cette période, avec un très grand nombre de rues étroites (de 1 à 7 m) et peu de rues larges.

capture-decran-2016-11-29-a-23-07-10histogramme_1888

Histogramme représentant, pour chaque catégorie de largeur, le linéaire des rues de 1960 (en bleu) et la distribution suggérée par une loi de puissance inverse (en rouge) Indicateur d’écart : 9,69. (Hachi, 2014).

Histogramme représentant, pour chaque catégorie de largeur, le linéaire des rues de 1960 (en bleu) et la distribution suggérée par une loi de puissance inverse (en rouge) Indicateur d’écart : 9,69. (Hachi, 2014).

Photographie de Beauvais après la reconstruction (alain.tairnaite.free.fr)

Photographie de Beauvais vers 1960 (alain.tairnaite.free.fr)

En 1888, la distribution s’éloigne d’une loi de puissance inverse, mais l’indicateur d’écart reste faible. En 1960, la distribution s’éloigne encore plus de la loi de puissance, ce qui confirme l’émergence d’un nouveau modèle. Cette comparaison semble révéler deux types de changements, un premier relativement faible entre 1849 et 1888, puis un changement plus important en 1960.

Beauvais, vue aérienne prise par M. Lecointre, M. Serre pilote

Beauvais, vue aérienne prise par M. Lecointre, M. Serre pilote, 1948.

Le contexte historique de Beauvais fournit des hypothèses d’explication à ces phénomènes. La tardive industrialisation de la ville à la fin du XIXe siècle n’a engendré que de faibles changements dans son tissu urbain, resté très marqué par son centre médiéval. Mais en 1945, ce dernier est presque entièrement détruit lors d’un incendie, et la reconstruction opérée jusqu’en 1960 est alors l’occasion de « moderniser » le tissu, et d’élargir les rues pour permettre le passage des automobiles.

Cet exemple illustre l’apport que peut constituer l’étude des caractéristiques spatiales des réseaux de rues dans l’identification de différents types de changements, plus ou moins impactants, qui affectent les tissus urbains. Une étude plus complète, sur un temps plus long et avec divers indicateurs (topologiques en particulier) devrait nous permettre de révéler des régularités dans la manière dont interagissent ces réseaux spatiaux avec les processus de formation/ transformation de la ville.

 

Références :

  • Barthelemy, Marc, Patricia Bordin, Henri Berestycki, et Maurizio Gribaudi. 2013. « Self-organization versus top-down planning in the evolution of a city ». Scientific reports http://www.nature.com/srep/2013/130708/srep02153/full/srep02153.html?WT.ec_id=SREP-639-20130801.
  • Gudmundsson, Agust, et Nahid Mohajeri. 2013. « Entropy and order in urban street networks ». Scientific Reports 3 (novembre). doi:10.1038/srep03324.
  • Psarra, Sophia, Conrad Kickert, et Amanda Pluviano. 2013. « Paradigm lost: Industrial and post-industrial Detroit–An analysis of the street network and its social and economic dimensions from 1796 to the present ». Urban Design International 18 (4): 257–281.
  • Strano, Emanuele, Vincenzo Nicosia, Vito Latora, Sergio Porta, et Marc Barthélemy. 2012. « Elementary processes governing the evolution of road networks ». Scientific Reports 2 (mars). doi:10.1038/srep00296.
  • Vaughan, L. S., Ashley Dhanani, et Sam Griffiths. 2013. « Beyond the suburban high street cliché-A study of adaptation to change in London’s street network: 1880-2013 ». Journal of Space Syntax 4 (2): 221–241.

 

 

Ryma Hachi

Ryma Hachi est doctorante à l’UMR Géographie-cités depuis octobre 2014, sous la direction de Lena Sanders.
Architecte de formation, sa thèse vise à révéler, grâce à la théorie des graphes, les processus de formation et de transformation des réseaux viaires.

More Posts