Semin-R, autour de R, le 24 mai

L’équipe de Sémin-R (MNHN, Université Paris Diderot, INED) organise une journée autour du logiciel gratuit R, le 24 mai prochain.

Cette journée aura lieu au Muséum national d’Histoire naturelle, Amphithéâtre Rouelle, 47 rue Cuvier, Paris 5e .

Le nombre de places étant limité à 75 (!) et les demandes déjà nombreuses, il  est impératif de s’inscrire en utilisant ce formulaire ou en passant par la page du Semin-r, onglet Conferences.

Les intervenants sont :

9h30 : Accueil

10h00 – 10:25, Séverine Zirah (MNHN, Paris), Le package XCMS pour l’analyse de profils de chromatographie liquide – spectrométrie de masse

10:25 – 10:50, Pascal Bessonneau (MEN, Paris), knitr, produire des documents dynamiques intégrant les dernières évolutions de R

10:50 – 11:10, pause

11:10 – 11:45, Adrien Perrard (MNHN, Paris), Mclust : déceler des groupes dans un jeu de données grâce aux mélanges gaussiens

11:45 – 12:10,  Hadrien Commenges, Robin Cura, Hélène Mathian, (UMR Géographie-cités, Paris),  R et espace : retour sur les aspects spatiaux du manuel ElementR

12:10 – 12:25, Laurent Beauguitte (UMR IDEES, Rouen), L’analyse de réseaux avec R – un état des lieux

12:30 – 14:00, Pause

14:00 – 14:25, Gilles Le Pape (AnaStats, Tours), R commander pour utiliser R avec des menus déroulants

14:25 – 14:50, Fabrice Dessaint (INRA, Dijon), Automatiser la production de fiches : exemple de création d’un atlas botanique

14:50 – 15:15, Clélia Bilodeau (LADYSS, Paris 7), Nathalie Thommeret (Laboratoire de Géographie Physique), Une chaîne de traitement automatisée sous R : du chargement de données à la production de cartes et de modèles statistiques pour l’analyse d’une base de données hydromorphologiques nationale

15:15 – 15:30, Pause

15:30 – 15:55, Bénédicte Garnier (INED, Paris), Analyse de textes avec des outils R de statistique textuelle

15:55 – 16:15, Nicolas Chazot (MNHN, Paris), Diversitree : un package pour lier évolution et diversification des caractères biologiques

16:15 – 16:30 Discussion générale

Pour télécharger ce programme en PDF, c’est par.

Françoise Bahoken

Géographe et cartographe, je suis accueillie en détachement depuis décembre 2010 à l’IFSTTAR ; je suis par ailleurs membre-associée de l’UMR 8504 Géographie-Cités.

More Posts

Communautés, QGIS, R (igraph) et Python…

Toujours dans la continuité des billets précédents (billet 1) (billet 2) qui présentent des plugins d’analyse de réseaux spatiaux, ce billet présente un plugin permettant d’identifier des communautés au sein de ces réseaux. En effet, ce billet permet d’aborder d’une part un sujet important de l’analyse de réseaux, l’identification de communautés, et d’autre part les relations possibles entre R et QGIS via Python, puisque la bibliothèque choisie pour ces analyses est igraph.

igraph, qui est un package réputé sous R pour l’analyse de réseaux, dispose d’une extension Python. Dans un premier temps, il s’agit d’utiliser cette extension qui permet de travailler sous QGIS avec igraph et ce indépendamment de R. Pour utiliser igraph avec Python et par conséquent QGIS, c’est néanmoins un peu plus compliqué qu’avec NetworkX, car il faut cette fois-ci compiler la bibliothèque en question. Le plus simple consiste à télécharger l’installateur Windows pour Python 2.7 (http://igraph.sourceforge.net/download.html). Une fois l’installateur lancé, il suffit de bien préciser l’emplacement de Python dans QGIS « C:/Program Files/Quantum GIS Lisboa/apps/Python27 ». Normalement, dès le premier lancement de QGIS, tout fonctionne. Il est alors possible d’importer igraph via la console Python de QGIS.

Exemple de test du fonctionnement de IGraph sous QGIS via la console Python.

Exemple de test du fonctionnement de IGraph sous QGIS via la console Python.

Il convient ensuite de télécharger le nouveau plugin (cliquer ici pour l’obtenir). Il faut le dézipper, puis placer le dossier dans le répertoire suivant : « C:\Program Files\Quantum GIS Lisboa\apps\qgis\python\plugins ». Il suffit alors de lancer QGIS pour que le plugin apparaisse dans « Extension -> Analyse de Graphe… -> Detection de communautes ». S’il n’apparaît pas, il faut aller dans « Extension -> Gestionnaire d’extensions » et cocher l’extension « Detection de communautes (version 0.1) ». Après avoir lancé le plugin, une boîte de dialogue s’ouvre. Elle permet de sélectionner les nœuds et les arcs du graphe à étudier. Après avoir validé cette première boîte de dialogue, une deuxième boîte de dialogue apparaît. Elle permet de sélectionner les champs des extrémités des arcs, de préciser si le graphe est orienté ou non, de préciser si le graphe est pondéré ou non (et si oui, quel est le champ de cette pondération : distance, flux, importance…). Enfin, différents algorithmes sont proposés afin d’identifier les communautés au sein du réseau étudié.

Présentation de la deuxième boite de dialogue.

Présentation de la deuxième boite de dialogue.

Les différents algorithmes proposés par le plugin utilisant igraph sont les suivants :

  • Walktrap, algorithme développé par Latapy et Pons et fondé sur des marches aléatoires ;
  • Betweenness, algorithme fondé sur la centralité des arcs. Les arcs les plus centraux sont retirés progressivement, chaque nouvelle composante connexe définissant alors une nouvelle communauté ;
  • Multilevel, algorithme fonctionnant par agrégation de nœuds à une communauté afin d’améliorer la modularité ;
  • Eigenvector, algorithme séparant progressivement les communautés à partir des valeurs propres du graphe ;
  • Infomap, deuxième algorithme fondé sur des marches aléatoires.

Pour chaque algorithme, seule la solution optimale est retenue (c’est-à-dire celle offrant la modularité la plus forte). C’est pourquoi le nombre de communautés n’est pas demandé avant le calcul. La valeur finale de la modularité est indiquée afin de comparer les résultats obtenus par les différents algorithmes. Une fois le calcul terminé, les valeurs stockées correspondent aux communautés auxquelles appartiennent les nœuds. Il est alors possible d’afficher ces communautés :

Communautés issues de l’algorithme fondé sur la centralité des arcs.

Communautés issues de l’algorithme fondé sur la centralité des arcs.

Le fait d’utiliser l’extension Python de igraph interrogera sans doute quelques utilisateurs invétérés de R. Faut-il recoder en Python tous ses codes R et trouver une extension Python pour éventuellement les utiliser sous QGIS ? La réponse est non, puisqu’il est possible de faire interagir QGIS et R à l’aide notamment de la bibliothèque RPy. En effet, RPy est une interface Python pour R. Ainsi, cette interface permet en utilisant le langage Python d’interagir avec R et de bénéficier de l’ensemble des développements réalisés sous R. L’inverse est aussi possible. Pour cela, il faut repartir pour une opération de téléchargement (http://sourceforge.net/projects/rpy/files/OldFiles/) et de compilation. En partant du principe que le package igraph est bien installé sous R (il faut notamment vérifier sa présence dans « C:\Program Files\R\R-(x.xx.x)\library\ »), il est très simple d’exécuter des codes R sous QGIS et par conséquent de les exploiter. Par exemple, on va exécuter à partir de QGIS le code R suivant :

test <- function () {
library(igraph)
g <- barabasi.game(100,m=2)
eb <- edge.betweenness.community(g)
return(eb$bridges)
}

Ce code peut être sauvegardé comme étant le fichier test.r. Pour appeler ce fichier sous QGIS, il est possible d’utiliser la console Python de QGIS. Plus précisément, il suffit de taper les lignes de code suivantes :

>>> from rpy import * # Import de la bibliothèque Rpy
>>> r.source('C:/Users/serge.lhomme/Documents/R/test.r') # Chargement du fichier test.r
{'visible': False, 'value': <Robj object at 0x0CBBDA00>}
>>> resultat=r.test() # Exécution de la fonction test
Message d'avis :
package 'igraph' was built under R version 2.12.2
>>> resultat # Affichage du résultat
[198.0, 196.0, 194.0, 192.0, 190.0, 188.0, 186.0, 184.0, 182.0, 180.0, 178.0, 176.0, 174.0, 
172.0, 170.0, 169.0, 168.0, 167.0, 166.0, 165.0, 164.0, 163.0, 162.0, 161.0, 160.0, 159.0, 
158.0, 157.0, 156.0, 155.0, 154.0, 153.0, 151.0, 150.0, 149.0, 148.0, 147.0, 145.0, 144.0, 
143.0, 140.0, 138.0, 137.0, 136.0, 135.0, 134.0, 133.0, 132.0, 131.0, 130.0, 128.0, 126.0, 
124.0, 122.0, 121.0, 119.0, 118.0, 117.0, 115.0, 114.0, 112.0, 111.0, 110.0, 109.0, 108.0, 
106.0, 105.0, 104.0, 102.0, 101.0, 100.0, 98.0, 96.0, 94.0, 92.0, 90.0, 89.0, 87.0, 85.0, 
83.0, 81.0, 79.0, 77.0, 75.0, 73.0, 71.0, 69.0, 67.0, 65.0, 64.0, 62.0, 61.0, 59.0, 57.0, 
56.0, 52.0, 51.0, 47.0, 45.0]

A partir de ces simples commandes, il est possible d’appliquer ses codes R sous QGIS. Ce qui sera sans doute utile pour certains et ce qui augmente encore les possibilités offertes par QGIS.

Serge Lhomme

Maitre de conférences à l’université Paris Est Créteil – Docteur en géographie de l’université Paris VII spécialité « dynamique des milieux et risques »

More Posts - Website

L’analyse de réseaux avec R, les premiers pas

R est un logiciel libre, multiplateforme et qui permet de réaliser à peu près tous les traitements de données possibles dont, bien entendu, l’analyse de réseaux. Seul inconvénient, il fonctionne à l’aide de scripts et nécessite donc l’apprentissage d’un langage particulier. Pourquoi alors l’utiliser ? Parce qu’il s’agit d’un logiciel très puissant, qu’il permet de tout faire, et surtout parce que, une fois le langage maîtrisé, il permet de gagner un temps fou. Une fois le script écrit, obtenir toute une série de mesures sur un graphe prend quelques secondes alors que la même opération avec un logiciel presse boutons nécessite quelques dizaines de clics… Ce billet s’adresse aux personnes tentées par R mais qui n’osent pas encore franchir le pas.

La première partie explique comment installer R, l’interface RStudio (et son utilité), comment charger les modules (packages) d’analyse de réseaux et le fonctionnement de l’aide. La deuxième partie montre quelques manipulations basiques sur les graphes fournis en exemple avec les modules. Un second billet détaillera les procédures d’importation de ses propres données (sommets, liens et attributs) et les possibilités graphiques du logiciel (mise en ligne prévue pour fin avril).

Installer R et RStudio

Première étape : se rendre sur le site http://cran.r-project.org/ et télécharger la version de R compatible avec votre système d’exploitation. Puis se rendre sur le site http://www.rstudio.com/ et télécharger la dernière version de RStudio. RStudio est une interface graphique qui facilite l’utilisation de R en rendant un certain nombre de fonctions (rubriques d’aide, actualisation des modules etc.) beaucoup plus simples à utiliser. Elle n’est pas indispensable mais elle est fortement recommandée quand on débute avec R.

Une fois les deux logiciels téléchargés, installez-les (sous Windows, clic droit et exécuter en temps qu’administrateur). Les choix proposés par défaut sont généralement pertinents, vous pouvez donc les laisser. Lancer ensuite RStudio et vous obtenez une fenêtre de ce type (la capture a été effectuée sous environnement Windows 7, RStudio version 0.97.336). Quatre fenêtres sont ouvertes : celle en haut à gauche accueille les scripts, c’est-à-dire la suite d’instructions que vous allez exécuter ; les résultats apparaîtront dans la fenêtre en bas à gauche appelée la console. La fenêtre en haut à droite liste les jeux de données utilisés et l’historique des manipulations effectuées. Enfin, la fenêtre en bas à droite héberge les rubriques d’aide, les sorties graphiques et la liste des packages installés.

Interface de RStudio

Charger un package

R est un logiciel modulaire. Certains modules sont inclus par défaut lors de l’installation du logiciel, d’autres plus spécifiques doivent être installés. Pour débuter en analyse de réseaux, deux modules sont indispensables : le package statnet (qui est en réalité un ensemble de packages dépendants les uns des autres) et le package igraph. D’autres packages existent et plusieurs billets de ce blog en présentent certains (voir les billets sur le module intergraph, le module bipartite, le module QuACN ou le module qgraph).

statnet et igraph sont des packages inclus dans la version de base de R mais ils ne sont pas actifs au démarrage. Il convient donc de les charger à l’aide des fonctions library(statnet) et library(igraph). Attention, mais j’y reviendrai pas la suite, ces deux packages ne peuvent pas fonctionner ensemble. Pour exécuter une fonction, deux possibilités existent : la taper directement dans la console puis taper Entrée ; la taper dans un script et taper Ctrl + Entrée pour l’exécuter. Le résultat est exactement le même. Mais tout l’intérêt de R est de créer des scripts (des suites de commandes) qui peuvent être sauvegardés (ce sont de simples fichiers texte ayant l’extension .R) et réutilisés ensuite. Une bonne habitude est donc, à l’ouverture de RStudio, de créer un nouveau script à l’aide des menus déroulants File > Create new R script. Le menu File permet de créer les scripts, de les sauvegarder à l’endroit de son choix, de les ouvrir etc.

Créer un script avec RStudio

Au fait, pourquoi deux packages ? statnet est développé par des sociologues férus de modèles statistiques (ERGM) ; igraph est développé par des physiciens et des informaticiens. On trouve dans les deux les mesures les plus communes en analyse de réseaux mais certaines ne sont proposées que dans l’un de ces deux packages. Par ailleurs, la simplicité des commandes et la clarté des résultats varie d’un package à l’autre. A titre personnel, l’importation des données attributaires me semble beaucoup plus simple avec igraph mais je préfère les visualisations proposées par statnet. Mais ceci est affaire de goût… Autre avantage d’utiliser deux packages, ce qu’on ne parvient pas à faire avec l’un,  on réussit généralement à le faire avec l’autre.

Les rubriques d’aide

Dans RStudio, lorsque que vous chargez un package à l’aide de la commande library(nom_du_package), l’aide s’affiche dans un onglet de la fenêtre Help. Si vous avez besoin de savoir comment fonctionne une instruction, il suffit de la taper dans la console, de taper Ctrl + Entrée et la rubrique s’affiche alors dans la fenêtre Help. Quand les créateurs et/ou créatrices du package ont fait du bon boulot, vous trouvez une définition de la fonction, sa structure (éléments indispensables et optionnels), les éléments pris en entrée et ceux fournis en sortie et enfin un exemple d’utilisation. La rédaction de la documentation étant en grande partie normée, ces rubriques sont généralement de bonne qualité (mais en anglais évidemment…).

Aide d'igraph dans RStudio

Les rubriques d’aide sont  – avec les forums et listes de diffusion consacrés à R – sont vos meilleurs alliés pour progresser rapidement. Lorsque que vous utilisez un package pour la première fois, prendre le temps de regarder les différentes fonctions, d’examiner les jeux de données disponibles, de tester les scripts d’exemple proposés vous fera gagner un temps précieux.

Mais il est temps d’entrer dans le vif du sujet… La suite du billet suppose que vous avez installé R et RStudio… et c’est tout.

Pour les deux packages, les manipulations proposées sont les suivantes : chargement d’un jeu de données, calcul de la densité du graphe, du nombre et de la taille des composantes connexes, et enfin calcul de deux mesures de centralités des sommets (degré et intermédiarité, soit en bon anglais degree et betweenness). Comme indiqué plus haut, les aspects liés à la visualisation et à l’importation de ses propres billets seront abordés dans un second billet.

Manipulations basiques avec statnet

Le petit texte qui suit est un script, c’est-à-dire une liste d’instructions. Les étapes sont toujours les mêmes : nettoyer l’espace de travail (rm = remove), charger le package, charger un jeu de données puis effectuer les opérations souhaitées sur ce jeu de données. Quand on débute (et même après), il est vivement conseillé de commenter ses scripts : il suffit de placer un croisillon (AltGr + 3 sur Windows, Maj + @ sur Mac). Et c’est bien un croisillon et non un dièse1…) et ce qui est tapé ensuite n’est pas pris en compte par le logiciel.

Plusieurs jeux de données sont fournis avec statnet et l’exemple proposé ici utilise le jeu de données nommé faux.magnolia.high. Ce graphe simule les liens d’amitiés sur un campus américain (pour obtenir plus d’informations, taper ?faux.magnolia.high dans la console, Entrée et les détails s’affichent dans la fenêtre Help).

rm(list=ls()) #supprimer tous les objets importés ou créés auparavant
library(statnet) #chargement du package  statnet
data(« faux.magnolia.high ») #chargement du jeu de données
g <- faux.magnolia.high #attribution d’un nom court (facilite la saisie)
g  #informations de base sur le graphe

Taper le nom de l’objet g permet d’obtenir les informations suivantes : nombre de sommets (vertices = 1461), caractéristiques du graphe (ici on apprend qu’il est non-orienté, non multiple, ne comprend pas de boucles et qu’il ne s’agit pas d’un hypergraphe : directed = FALSE hyper = FALSE loops = FALSE multiple = FALSE bipartite = FALSE). On apprend enfin qu’il comprend 974 liens et qu’il n’y a pas de données manquantes (total edges= 974 missing edges= 0 non-missing edges= 974). Dernier point, mais qui ne sera pas utilisé dans ce billet, l’existence d’attributs (sur les sommets et/ou les liens) est indiqué : chaque sommet comprend un nom et des indications portant sur le niveau scolaire, le genre et l’ethnie (Vertex attribute names: Grade Race Sex vertex.names).

gden(g) #calcul de la densité
component.dist(g) #nombre et compositions des composantes connexes

Cette dernière fonction crée trois objets différents : un objet membership qui précise pour chaque sommet la composante connexe à laquelle il appartient ; un objet csize (component size) qui donne la taille de chacune des composantes connexes ; un objet cdist qui décrit la distribution des tailles des composantes connexes. Si je souhaite utiliser ces résultats ensuite – et la remarque s’applique aux opérations suivantes – j’ai tout intérêt à créer un objet qui va stocker ces résultats et me permettre de les réutiliser ensuite. La procédure est simple, je fais précéder l’instruction d’un nom (prendre un nom explicite est recommandé) et du petit symbole <-, ce qui donne la ligne de commande suivante. Les résultats ne s’affichent pas dans la console mais sont stockés – et réutilisables – dans l’objet comp.connexe.

comp.connexe <- component.dist(g)
deg <- degree(g) #calcul des degrés
summary(deg) #informations sur les degrés (min, Q1, médiane, moyenne, Q3 et max)
bet <- betweenness(g) #calcul de la centralité d’intermédiarité
summary(bet) #informations sur la centralité d’intermédiarité
tab <- as.data.frame(cbind(g$vertex.names, deg, bet)) #création d’un tableau

Cette dernière ligne appelle un petit commentaire : je crée un tableau de données (as.data.frame) qui consiste à coller côte à côte 3 colonnes (cbind), ces 3 colonnes étant le nom des sommets (g$vertex.names), leur degré (deg) et leur centralité d’intermédiarité (bet). Cette étape n’est pas obligatoire mais on peut préférer stocker tous les résultats concernant les sommets dans un même tableau plutôt que de multiplier les objets à manipuler.

Manipulations basiques avec igraph

Le mini-script qui suit réplique la même suite d’opérations mais avec le package igraph (et avec un jeu de données différent, le fameux Zachary karate club dataset). Comme vous le verrez, les noms des fonctions se ressemblent parfois fortement. Mais, statnet et igraph ne pouvant être utilisés de façon simultanée, il convient tout d’abord de détacher le package statnet puis de charger le package igraph.

rm(list=ls()) #nettoyer l’espace de travail
detach(package:statnet) #détacher le package statnet
library(igraph) #charger le package igraph
library(igraphdata)#charger les jeux de données du package igraph
data(karate) #charger le jeu de données du Zachary karate club
g <- karate #lui donner un nom plus court
g #principales propriétés

Taper g donne le résultat suivant : IGRAPH U-W- 34 78 — Zachary’s karate club network + attr: name (g/c), Citation (g/c), Author (g/c), Faction (v/n), weight (e/n). Ce qui en termes compréhensibles se traduit de la manière suivante : le graphe est non-orienté (U undirected) et valué (W weighted), il comprend 34 sommets et 78 liens, son nom est Zachary’s karate club network et il comprend un certain nombre d’attributs : sur le graphe (g : nom, auteur et citation), sur les sommets (v comme vertex ) et sur les lien (e comme edge).

graph.density(g) #densité du graphe
comp.connexe <- clusters(g) # composantes connexes

La fonction clusters crée trois objets : un objet membership qui indique à quelle composante appartient chaque sommet ; un objet csize indiquant la taille des composantes connexes et enfin un objet no donnant le nombre de composantes connexes. Le graphe étant ici connexe, les résultats de cette commande sont d’un intérêt relatif.

deg <- degree(g) #degré des sommets
bet <- betweenness(g) #centralité d’intermédiarité
tab <- as.data.frame(cbind(deg, bet)) #création d’un tableau
head(tab,10) #examen des 10 premières lignes du tableau

Et c’est tout pour aujourd’hui… Dernier conseil pour finir : avec R, il est important de prendre son temps et d’examiner les problèmes de manière séquentielle. Si vous abordez R pour la première fois, vous ne pouvez pas en deux heures apprendre à importer vos données, à lancer et interpréter un modèle ERGM puis à produire une superbe visualisation. Mais, avec des recours réguliers aux rubriques d’aide, de petits scripts (abondamment commentés) que vous enrichissez au fur et à mesure (j’ai créé un tableau avec 2 indicateurs, il est facile d’en ajouter…), votre progression sera rapide et efficace.

Ressources en ligne

Ayant déjà souvent écrit sur l’analyse de réseaux avec R – et je ne compte pas m’arrêter là -, je me permets de renvoyer à ce billet publié il y a quelques mois.

1 Robin Cura est la personne  qui m’a permis de comprendre l’étendue de mon ignorance sur cet aspect crucial. Et il a évidemment raison : ♯ est un dièse, # est un croisillon….

ElementR pour les géographes, et les autres

Le groupe de travail ElementR piloté par Hadrien Commenges – auquel participe d’ailleurs Laurent Beauguitte du groupe fmr – vient de livrer à la communauté un manuel permettant l’analyse (spatiale) et la cartographie de données géographiques à l’aide du logiciel libre R.

« Ce manuel a pour ambition d’offrir un support technique à des étudiants, enseignants-chercheurs, ingénieurs, etc. qui partagent notre intérêt pour l’utilisation des méthodes d’analyse des données en géographie et souhaiteraient pouvoir développer leurs travaux à l’aide du logiciel libre R. Plus spécifiquement nous proposons dans ce manuel une prise en main dédiée à des personnes s’initiant simultanément au traitement de données géographiques et à l’environnement R. L’éclairage est celui de l’analyse spatiale, à savoir des méthodes mises en œuvre pour l’étude des organisations dans l’espace. Ce manuel est largement inspiré d’autres manuels « R » spécifiques ainsi que de nos différents cours pour les aspects méthodologiques : ils sont signalés dans le manuel pour permettre aux utilisateurs de les approfondir« .

Deux chapitres se prêtent particulièrement à l’analyse des graphes et des matrices. Il s’agit des chapitres 7 et 8.

Le chapitre 7 porte sur les méthodes de classification. Il propose un court mais bienvenu rappel méthodologique et une section 7.3 spécifique à la classification des lignes d’un tableau de contingence.

Le chapitre 8 porte sur l’analyse des graphes. Il propose une prise en main complète depuis la préparation des données jusqu’à leur visualisation, en passant par le calcul de mesures locales, globales, de cliques et de communautés.

Outre l’intérêt méthodologique d’un tel manuel qui n’est pas à démontrer, il convient de noter que sont toujours fournis les lignes de code ainsi qu’un jeu d’exemple qui permet de reproduire les méthodes proposées.

Les utilisateurs sont invités à faire remonter leurs commentaires, remarques et critiques en envoyant un mail à l’adresse : elementr<at>parisgeo.cnrs.fr

Pour en savoir plus sur le groupe ElementR, c’est par ici.

Pour télécharger le manuel (et les données), c’est par là.

Pour télécharger le logiciel, sur le site du R-project, c’est ici.

Françoise Bahoken

Géographe et cartographe, je suis accueillie en détachement depuis décembre 2010 à l’IFSTTAR ; je suis par ailleurs membre-associée de l’UMR 8504 Géographie-Cités.

More Posts

Analyse de réseaux avec R : des ressources gratuites pour un logiciel libre !

Alors que se développe de plus en plus la fâcheuse tendance à produire des manuels payants (et parfois chers, et parfois médiocres) pour des logiciels libres – voir par exemple la récente collection Pratique R chez Springer  -, il est toujours rassurant de trouver d’excellentes ressources gratuites en ligne. La liste de ressources présentées ici ne prétend évidemment pas à l’exhaustivité mais constitue une sélection de sites complémentaires pour toute personne désireuse de s’initier ou de se perfectionner dans l’analyse de réseaux avec le logiciel R.

Les cours disponibles à l’adresse http://sna.stanford.edu/rlabs.php méritent le détour pour plusieurs raisons (McFarland Daniel, Solomon Messing, Michael Nowak et Sean J. Westwood, 2010, Social Network Analysis Labs in R, Stanford University). Tous les scripts sont abondamment commentés et il est donc facile de s’approprier les commandes. Les thèmes abordés couvrent un large spectre de la Social network analysis, des mesures de centralité aux modèles ERGM en passant par les dyades et triades. Certains scripts peuvent générer des erreurs (celui du cours 6 notamment) car ils utilisent des packages de R qui ont depuis été supprimés du CRAN (le CRAN constitue le dépôt officiel des modules R compatibles avec la dernière version du logiciel). Mais les scripts méritent un examen approfondi car ils permettent de résoudre certains problèmes récurrents, pour l’importation des données notamment (j’ai enfin compris comment importer simplement des attributs de sommets !). Autre intérêt, dans le cours n°2 consacré aux mesures triadiques et de cohésion, les auteurs proposent une fonction permettant de mesurer le degré d’hétérogénéité des liens et la fonction est commentée pas à pas. Les mesures et méthodes proposées intègrent les derniers développements en analyse de réseau et les méthodes de détection basées sur l’intermédiarité des liens ou le walktrap sont clairement expliquées. Les résultats obtenus sont également commentés et interprétés. Bref, un modèle du genre…

L’un des points de chute est bien entendu les sites des packages d’analyse de réseaux :

  • statnet (package généraliste, ERGM). Voir notamment les liens vers les workshops proposés par Butts et al. dans les Sunbelt successives (scripts, méthodologie et résultats commentés). Mailing list très active et très pointue et dédiée essentiellement au calibrage des modèles ERGM.
  • igraph (package généraliste). Peu de documentation mais une mailing-list (je viens tout juste de m’abonner, je mettrai un mot en commentaire sur son activité et les thèmes évoqués d’ici quelques semaines).
  • tnet (analyse de graphes valués, simples ou bipartis). Excellent site avec description claire des méthodes et mesures, scripts d’exemple, références bibliographiques etc. Tore Opshal maintenant seul ce package, espérons qu’il puisse le faire longtemps encore.
  • RSiena (modèle Siena développé par T. Snijders). Site très complet (articles, tutoriel, jeux de données, scripts commentés) pour une méthode délicate à maîtriser.

Je ne liste pas toutes les présentations disponibles sur internet, une simple recherche « network analysis with R » permet d’en récupérer des dizaines. Celle de Gabor Csardi sur igraph est particulièrement bien faite. Le blog, peu actif ces derniers temps, de Dai Shizuka mérite la visite car il a eu l’idée simple – mais très utile – de lister et de comparer les différentes mesures et commandes disponibles dans statnet et igraph.

Plus orienté analyse spatiale, le wiki spatial analyst (http://spatial-analyst.net/wiki/index.php?title=Main_Page) est une mine d’or et on y trouve des scripts, des jeux de données et des tutoriels de bonne qualité. En ce qui concerne la cartographie des flux, qui n’est pas le type de cartographie le plus facile à réaliser avec R, visiter la partie du wiki consacrée aux Global datasets montre l’étendue des possibles, et les résultats sont visuellement impressionnants comme le montre l’exemple des routes maritimes ci-dessous. Le script concernant les routes aériennes, abondamment commenté, mérite l’examen.

Cartographie des routes maritimes

Autre ressource, et sans doute l’une des plus utiles, l’indispensable agrégateur de blogs http://www.r-bloggers.com/ où l’on trouve plus de 50 billets avec les mots clés « network analysis » 30 billets avec les mots clés « social network » et, bizarrement, 3 seulement avec « complex network » (recherche faite le 15 décembre). La visualisation des informations issues de Twitter, Facebook et autres fait l’objet de nombreux billets mais on trouve bien d’autres sujets dont un billet récent et particulièrement pédagogique expliquant les modèles ERGM via les relations sexuelles dans la série Grey’s Anatomy.

Le point commun entre toutes ces ressources ne vous aura pas échappé : elles sont toutes en anglais…

Côté francophone, les ressources sont généralement moins complètes mais on trouvera plusieurs exemples de scripts utiles sur le blog http://fltaur.wordpress.com/ (voir notamment la présentation Cartographie sous R avec igraph par Joachim Timotéo).  Signalons l’excellent tutoriel de Julien Barnier disponible ici. Même s’il est loin d’être parfait, le tutoriel de la collection fmr sur halshs peut constituer un bon point de départ qu’il est possible de compléter avec un TD disponible en accès libre sur le site de l’Université Paris 7. Par ailleurs, plusieurs billets sont consacrés à igraph sur le blog http://pegasusdata.com/. Pour un problème spécifique, on peut également chercher du côté des groupes d’utilisateurs (http://forums.cirad.fr/logiciel-R/ , je n’ai  par contre rien trouvé du côté de semin-R). Je m’excuse auprès des personnes que j’ai pu oublier dans cette courte liste, n’hésitez pas à vous signaler !

Enfin, et même si n’y a pas (pas encore…) d’ouvrage dédié à l’analyse de réseaux, l’éditeur Framabook constitue une excellente alternative aux éditeurs scientifico-commerciaux évoqués plus haut : les livres sont sous licence libre, disponibles en version papier à un tarif raisonnable (entre 15 et 20 euros le volume) ou gratuitement téléchargeables en version .pdf ou .tex. Si vous voulez vous initier à Drupal, Ubuntu, LaTeX ou OpenOffice, et en attendant R (des projets sont en cours), les ouvrages sont de très bonne qualité.

Enfin de beaux graphes avec R ? Le package qgraph à l’essai

Je l’ai déjà écrit, R me paraît être aujourd’hui le logiciel le plus performant en analyse de réseau, et ce quel que soit le type de réseau étudié. Reste que lorsqu’il s’agit de passer de l’exploration des données à la communication, les graphes produits par R ne font pas le poids face aux visualisations générées par des outils comme Cytoscape, Gephi ou Tulip. Est-ce que l’arrivée du récent package qgraph change les données du problème ? Pas sûr…

Développé par de psychologues, l’objectif du package qgraph est de permettre des visualisations lisibles de graphes denses tout en minimisant la taille des fichiers vectoriels exportables. Si l’objectif premier affiché par les auteurs est la visualisation de matrices de corrélation, il est évidemment possible de l’utiliser pour représenter un graphe simple valué.

Le nombre de commandes est on ne peut plus limité : qgraph est la seule du module. Comme l’expliquent les auteurs dans le Journal of Statistical Softwares, le nombre de packages permettant l’analyse de graphes est largement suffisant – et ils n’ont pas tort. Pourtant, le package permet d’obtenir les mesures de graphe valué proposés par Tore Opshal dans ses articles, sur son blog (dont la visite est très recommandée : http://toreopsahl.com/) et… dans son package tnet.

Si on teste les scripts d’exemple du mode d’emploi, on obtient des résultats visuellement plus attractifs que la très grande majorité des images produites dans R.

visualisation avec qgraph

Le code R utilisé pour générer cette image est le suivant :

library(qgraph)

data(big5)

qgraph.panel(cor(big5),groups=big5groups,minimum=0.25, borders=FALSE,vsize=1,cut=0.3)

Le format des données en entrée est le même que pour le package igraph et, pour utiliser qgraph(x), x doit être une matrice (valuée), une liste de liens ou un objet de type qgraph. Le script suivant importe un tableau de données (individus – variables), calcule la matrice des corrélations puis la visualise en faisant varier couleur et valeur en fonction de la corrélation – seules celles supérieures à |0.5| sont représentées (option minimum).

library(qgraph)

#import du tableau de données

d <- read.table(« donnees.txt », sep= »\t », header=TRUE, row.names=1)

#calcul de la matrice de corrélations

m <- cor(as.matrix(d))

#visualisation

qgraph(m, layout= »spring », minimum=0.5)

Et on obtient une image de ce type-là : les corrélations négatives sont en verts, les corrélations positives en rouge, et l’épaisseur dépend de l’intensité de la relation entre les variables.

visualisation avec qgraph

Si on résume, le package peut produire des images plus sympathiques que la majorité des packages d’analyse de graphe dans R – sauf à écrire dans ces derniers d’interminables scripts – mais les limites sont évidentes : seuls les graphes simples et valués sont concernés. Et le résultat reste quoi qu’il en soit moins attrayant que ceux obtenus avec les logiciels évoqués au début de ce billet. Donc, ce package vous sera utile si et seulement si vous représentez souvent des matrices de corrélation…

Références

S. Epskamp, A.O.J. Cramer, L.J. Waldorp, V.D. Scmittmann et D. Borsboom, 2012, qgraph: Network Visualizations of Relationships in  Psychometric Data, Journal of Statistical Softwares, 48(4): 1-18, http://www.jstatsoft.org/v48/i04/.

Blog de Sacha Epskamp : http://sachaepskamp.com/qgraph.

Du côté de chez QuACN – module R pour l’analyse de réseaux

Il est des jours où l’on se croit parvenu à un niveau de connaissance concernant l’analyse de réseaux tout à fait honorable. Pas de quoi faire  carrière au MIT ou révolutionner l’analyse de réseaux, certes. Mais enfin, on est capable de lire des sociologues, des historiens, des physiciens, on est capable d’apprécier la nouveauté des approches et d’échanger avec des praticiens de ces disciplines.

Et puis, on découvre en fouillant sur le CRAN un package R intitulé QuACN (Quantitative Analysis of Complex Networks). Le module est récent, la documentation de bonne qualité et, au premier coup d’œil, on se croit en terrain bien balisé. Les indicateurs standards sont là, du diamètre au clustering coefficient (global et local) en passant par les degrés.

Puis, on regarde la documentation en détail et là, oh surprise, je ne connais pas la moitié des indices et mesures proposés. La documentation étant bien faite, toutes les formules correspondantes sont indiquées et les références bibliographiques sont nombreuses. Et il y a visiblement de quoi creuser, que ce soit du côté des mesures d’entropie, des indices variés (Harary, Wiener ou Balaban J – ???) ou des mesures de complexité disponibles pour sommet, graphe et liens (valués ou non).

L’importation des données se fait sans souci majeur.

Le format des données doit être de type graphNEL. Convertir  un objet igraph en objet graphNEL se fait à l’aide de la fonction igraph.to.graphNEL. L’opération inverse – convertir un objet graphNEL en objet igraph, par exemple pour permettre sa visualisation – se fait avec la fonction igraph.from.graphNEL. Il est également possible d’importer des matrices ou des listes de liens. Pour le premier cas (matrice d’adjacence valuée ou non), il suffit de la transformer à l’aide de la commande as(nom_matrice, « graphNEL »). S’il s’agit d’une liste de liens, il faudra après l’importation la transformer en matrice (as.matrix) puis en objet graphNEL. Un certain nombre des mesures disponibles nécessite des graphes de type particulier (orienté ou non, valué ou pas).

De tous les packages testés ces dernières semaines, celui-ci paraît l’un des plus riches en mesures (pour moi) inédites et il est aisé d’utilisation – à creuser donc.

Références

Laurin AJ Mueller, Karl G Kugler, Andreas Dander, Armin Graber et Matthias Dehmer, 2011, QuACN – An R Package for Analyzing Complex Biological Networks Quantitatively, Bioinformatics, 27, p.140-141.
Package QuACN sur CRAN : http://cran.r-project.org/web/packages/QuACN/index.html

Récolter, explorer et visualiser ses données avec R (séminaire Ined, SFdS, MHMN)

La prochaine séance du séminaire du Service des Méthodes Statistiques (SMS) de l’Ined, organisée conjointement avec le Semin-R (SFdS, MHMN) aura lieu le 3 décembre prochain à 9h15, en salle Alfred Sauvy de l’Ined (133 bd Davout à Paris).

Les intervenants sont :

– Elisabeth Morand (Ined) et Christophe Pouzat (Laboratoire de Physiologie Cérébrale-CNRS UMR 8118-UFR biomédicale Paris V) : Introduction de la séance.

– Eric Matzner-Lober (Université Rennes II) : Pourquoi R devient incontournable en recherche, enseignement et développement.

– Stéphane Dray (Laboratoire de Biométrie et Biologie Evolutive – Université Lyon I) : Ade4 : outils statistiques et graphiques pour l’analyse de données multivariées.

– Marta Severo (Université Lille III) et Timothée Giraud (UMS 2414 Riate) : Visualisation de données géographiques et médiatiques avec R.

-Pierre Ratinaud (Laboratoire LERASS – Université Toulouse II) : Visualisation de données textuelles avec R et Iramuteq.

On rappelle que le Service Méthodes Statistiques de l’Ined  propose régulièrement un séminaire de statistique appliquée. Ce séminaire est ouvert à tous, sans frais de participation. Il est toutefois nécessaire de s’inscrire ici.
Pour tout autre renseignement, vous pouvez contacter Bénédicte Garnier.

Françoise Bahoken

Géographe et cartographe, je suis accueillie en détachement depuis décembre 2010 à l’IFSTTAR ; je suis par ailleurs membre-associée de l’UMR 8504 Géographie-Cités.

More Posts

Jongler avec les objets R, le package intergraph

Plusieurs modules existent pour analyser les graphes dans R, les plus fréquemment commentés étant sna et igraph. Ces packages utilisent des objets particuliers [1] : sna utilise des objets network, igraph des objets… igraph [2]. Le module intergraph permet de jongler entre les modules et les objets et deux commandes s’avèrent particulièrement utiles : as.igraph et as.network. La première transforme un objet network en objet igraph, la seconde fait l’inverse. La fonction netcompare permet ensuite de contrôler que la transformation s’est déroulée correctement. Autre fonction très utile asDF qui transforme objets network et igraph en data.frame.

Exemple de script tiré de la documentation du package

#chargement des packages

library(intergraph)
library(statnet)
library(igraph)

#jeux de données statnet

g1 <- faux.mesa.high

#type et structure

class(g1)
summary(g1)

#transformation en objet igraph

g2 <- as.igraph(g1)

#contrôle

netcompare(g1, g2)

#jeux de données igraph

g3 <- exIgraph

#transformation en objet network

g4 <- as.network(g3)

#contrôle

netcompare(g3,g4)

#transformation en data.frame
#et contrôle

d1 <- asDF(g1)
str(d1)
d2 <- asDF(g3)
str(d2)

Référence : Michal Bojanowski, Package ‘intergraph’, Coercion routines for network data objects in R, 19 Juin 2012.

http://intergraph.r-forge.r-project.org, http://www.bojanorama.pl

[1] Le type d’un objet x dans R s’obtient avec la commande class(x).

[2] Le problème ne se pose pas avec tnet qui utilise des objets matrix.

Un module R pour l’analyse des graphes bipartis : le package bipartite

Dans un tutoriel disponible sur Cours en ligne, j’ai présenté trois modules R pour l’analyse de réseaux (statnet, igraph et tnet). D’autres modules sont disponibles et ce court billet présente les principales fonctions du module bipartite (version 1.17). Les termes anglophones sont en italique, les commandes et les scripts R en gras.

Pour mémoire, un graphe biparti (bipartite, two-mode network ou affilliation network) représente les liens entre deux ensembles d’acteurs différents. L’un des jeux de données les plus étudiés de ce type est ainsi le graphe dit Davis’ Southern Women Club, à savoir le graphe symbolisant la participation de 18 femmes à 14 réunions dans une ville du sud des États-Unis dans les années 30 (ce jeu de données est disponible dans quasiment tous les logiciels d’analyse de réseau).

Le package bipartite étant développé par des écologues, les réseaux inclus concernent essentiellement des liens fleurs – pollinisateurs.

La structure des données en entrée doit être de forme matricielle, le package traitant des objets de type « matrix« . Le graphe peut être valué.

Contrairement à la plupart des modules qui proposent un (voire plusieurs) fonction(s) pour obtenir un seul indicateur, bipartite a l’excellente idée de proposer deux fonctions, l’une portant sur les sommets (specieslevel), l’autre sur l’ensemble du graphe (networklevel). Dans les deux cas, les mesures proposées sont nombreuses et mêlent indicateurs canoniques (densité, degré) et innovations de ces dix (quinze) dernières années (modularité). Certaines fonctions créent des graphiques bienvenus, telle la fonction degreedistr qui permet de représenter fréquence cumulée et droite de régression.

Résultat des commandes

data(Safariland)                   #réseau de pollinisation argentin

degreedistr(Safariland)

sortie graphique de la commande degreedistr

Il est également possible de comparer les caractéristiques du graphe étudié et celles de graphes aléatoires bipartis (voir script téléchargeable ci-dessous).

Les visualisations produites sont moins attrayantes que celles disponibles avec des réseaux one-mode et cela est logique dans la mesure où les algorithmes de visualisation pour les graphes bipartites sont – à ma connaissance – rares. Trois types sont disponibles (voir les sorties graphiques par défaut ci dessous) : matrice d’adjacence, graphe bipartite et graphe de co-occurence.

Résultat des commandes

data(Safariland)
visweb(Safariland)
résultat de la commande visweb

Résultat des commandes

data(Safariland)
plotweb(Safariland)
résultat de la commande plotweb

Résultat des commandes

data(Safariland)
plotPAC(Safariland)
résultat de la commande plotweb

Comme toujours avec R, le plus utile est encore de tester le package et de fouiller les rubriques d’aide des différentes fonctions. Le script téléchargeable ci-dessous présente les principales fonctions et les options de visualisation disponibles. Il ne prétend évidemment pas à l’exhaustivité.

Script R pour le package bipartite

Toute la documentation est ici : http://cran.r-project.org/web/packages/bipartite/index.html

Référence : Dormann, C.F., Gruber B. & Fründ, J. (2008). Introducing the  bipartite Package: Analysing Ecological Networks. R news Vol 8/2, 8-11.