Des listes aux matrices (réseaux de mode 2)

Date 19 mars 2014

La multiplication des informations disponibles en ligne a peut-être eu un effet relativement inattendu : le retour en grâce d’analyses de réseau bi-mode. Une partie significative de données disponibles en ligne facilement sont en effet des listes « d’individus » appartenant à des « groupes » (entreprises, commissions, conseil d’administration, films). Or c’est justement ce lien entre deux types d’entités que fait l’analyse bimode. C’est le cas de l’exemple bien connu des entreprises du CAC 40 et des membres de leurs conseils d’administration respectifs, représentés ci-dessous (voir ici pour la source).

CAC

Après une période faste[1], le two-mode (aussi connu sous le nom de réseau d’affiliation) a fait l’objet d’une attention plus distante de la part des spécialistes. La critique à son égard est bien connue : parce que les « liens » entre individus étaient des liens supposés plutôt qu’établis, le two-mode serait un mode pauvre. Peut-on, par exemple, inférer de la co-présence à un conseil d’administration un « lien » entre deux personnes. Et si on le fait, de quelle nature est-il et que peut-on en dire (au-delà de « c’est un – plus ou moins – petit monde ») ? Et les personnes sont-elles là pour les mêmes raisons ? Comment savoir si elles sont actives ou pas dans le groupe ? Si Bernard Arnault et Bernadette Chirac (Chodron de Courcel) siègent (au moins en théorie) ensemble au CA de LVMH, ont-il le même poids dans ses prises de décision ?

À la faveur de la disponibilité nouvelle de certaines sources et de l’intérêt croissant pour les méthodes quantitatives (et de réseau en particulier), le two-mode semble pourtant revenir en grâce. En témoignent me semble t-il  certains fort jolis dessins, et un numéro spécial de la revue phare du domaine, « Social Networks ». En témoignent aussi les nombreuses demandes que j’ai reçues depuis le début de l’année de faire de telles analyses, ou de mettre en forme des données. Je saisis donc l’occasion pour faire un rapide tutoriel pour transformer les listes en matrices, lisibles par différents logiciels.

Préparer les données

Une des difficultés de l’analyse de réseau se situe souvent en amont de l’analyse, dans la mise au format des données requises. Le plus souvent, les traitements demandent que celles-ci  soient présentées sous forme d’une matrice avec en ligne les entités de type A (par exemple les individus) et en colonne les entités de type B (par exemple les organisations). Dans les cellules, on a 0 ou 1 (ou un autre entier) selon que l’individu (en ligne) en question appartient à l’entité indiquée en colonne.

matrice

L’image ci-dessus est un exemple de ce à quoi on veut arriver.  À des fins d’illustration, on travaille ici partir d’un extrait de la base de données compilée en ce moment par les chercheur.e.s réunies autour de l’enquête SOMBRERO. Cette étude des manifestations et de leurs acteurs dans trois villes (Paris, Lille, Marseille, Rennes) cherche à voir les participations conjointes d’organisations (partis politiques, syndicats, associations) à des manifestations de rue. L’ensemble est saisi à partir d’archives et de sources de presse. En ligne (EVT), les manifestations (on leur a donné un chiffre). En colonne (value), le nom des organisations qui y participent.

Les manières de coder sont nombreuses, tout comme le sont les manières d’importer les données sous R. Mais certains logiciels (UCINET, très prisé par certain.e.s car simple et efficace) préfèrent les matrices (avec les individus en lignes, et les organisations en colonnes). Comment passer à cette matrice quand on a un autre format? Deux cas classiques peuvent être distingués.

Le cas des listes simples

Souvent, les données collectées sont présentées sous la forme de deux colonnes. L’une représente les entités de type A, l’autre représente les entités de type B. On les a recopiées (ou aspirées) depuis une source (un site web). Le format liste est pratique car il est souvent bien plus rapide que la création manuelle d’une matrice avec les individus et les organisations uniques.

Mais pour bien des logiciels, il faut repasser cette liste en matrice. Le passage d’une liste à une matrice (qui peut être pondérée) est assez simple. Si notre liste s’appelle ma_liste, alors ma_table est une matrice au format requis


#Crée une liste fictive, pour l'exemple
ma_liste<-as.data.frame(cbind(c("manif1", "manif1", "manif2", "manif3", "manif4", "manif4", "manif5"), c("orga1", "orga2", "orga3", "orga3", "orga1", "orga1", "orga3")))
colnames(ma_liste)<-c("MANIF", "ORGAS")

#Transforme cette liste en matrice
ma.table<-as.matrix(table(ma_liste))

On passe alors de l’image de gauche à celle de droite.La commande as.matrix permet juste de s’assurer que le format reconnu est bien une matrice, ce qui est souvent préférable en la circonstance.

list-table

 Listes multiples

Parfois, on se retrouve dans le cas où, pour des raisons de lisibilité, on a sur une même ligne l’entité A (par exemple les individus), puis toutes les personnes qui y participent. S’il est plus lisible au moment de la saisie, ce format n’est pas le plus maniable. Plusieurs solutions existent, on en propose une qui nous ramène au format liste simple évoqué ci-dessus.

Soit une série de manifestations et les organisations qui y participent.  Chaque ligne représente une manifestation unique (EVT) et les identifiants des organisations (IDORGA1, IDORGA2, ….jusqu’à 10 possibles ici).

head.sombrero

On a certes un tableau, mais ca ne ressemble pas vraiment à la matrice qu’on veut car chacune des colonnes ne renvoie pas à une organisation donnée, mais seulement à la première qui apparait comme présente à cette manifestation dans les sources.
Pour obtenir une représentation matricielle, il faut repasser cela en liste. On charge pour cela le package reshape, qui permet des manipulations de données aisées (1), puis on relie les différentes colonnes les unes sous les autres tout en conservant le numéro de l’événement (2). On supprime la colonne des identifiants orgas, qui ne sert plus à rien (3), et on n’oublie pas d’enlever les non-réponses (4).


(1) require(reshape)# l'installer si on ne l'a pas!
(2) base.sombrero <- melt(base.sombrero, c=”ID_MANIF”)
(3) base.sombrero <- base.sombrero [,-c(2)]
(4) base.sombrero <- base.sombrero [!is.na(base.sombrero),]

 

L’objet base.sombrero est prêt à être traité comme une liste simple, comme évoqué précédemment. Il ressemble d’ailleurs à la première liste représentée ci-dessus.

Voilà pour la transformation de listes en matrice. Pour la transformation à l’inverse, les mêmes procédures s’appliquent, mais dans l’autre sens. Comme c’est souvent le format matrice qui est attendu, on ne s’y attarde pas ici. Et comme les tutoriels pour apprendre à se servir des différents packages d’analyse de réseaux sont nombreux, je ne m’y attarde pas non plus (voir par exemple la documentation de igraph ou les bons conseils de L. Beauguitte sur le site du groupe FMR).

Pour avoir une idée de l’intérêt heuristique de la chose, voilà une représentation (bipartite donc) d’une partie de la base Marseille de l’équipe Sombrero (cliquer pour zoomer).

Pour plus d’informations sur cette enquête, Mathilde Pette (Clersé, Lille-1) et Julie Pagis (CERAPS/CNRS) présenteront les premiers résultats des traitements via l’analyse de réseaux lors de du colloque ‘Reconstruire des espaces militants dans une perspective comparée’ (programme en PDF ici) qui aura lieu a Lausanne les jeudi 27 et vendredi 28 mars.

Marseille - 2mode


[1] Voir par exemple R. Breiger (« The duality of persons and groups », Social Forces) 1974, qui affirmait que le two-mode était le meilleur site pour étudier la co-construction des individus et des structures sociales, et les nombreuses études d’interlock.


Imprimer ce billet Imprimer ce billet

4 commentaires pour  “Des listes aux matrices (réseaux de mode 2)”

  1. Claire Lemercier a dit le 07/04/2014 à 12:58 :

    En fait le pb d’Ucinet c’est que la documentation n’avance pas aussi vite que les fonctionnalités, qui ne cessent de m’épater (même si bien sûr ce serait mieux si c’était dans R, si c’était au moins libre, ou si l’interface était plus avenante).
    Mais pour l’import il y a une doc pas trop mal en anglais ici : http://obssr.od.nih.gov/issh/2011/files/Tutorial%201%20Entering%20data.docx (même si elle est probablement déjà en retard sur les fonctionnalités)
    Et la liste d’utilisateurs est très active, efficace et accueillante aux débutants (http://www.analytictech.com/ucinet6/ucinet_list.htm).
    En revanche le récent bouquin papier n’est pas terrible, malheureusement, et le très bon tutoriel en ligne de Hanneman n’est plus vraiment à jour (il est plus compliqué que la version actuelle du logiciel et n’inclut pas toutes ses fonctions), même s’il reste recommandable : http://faculty.ucr.edu/~hanneman/
    Quand j’aurai le temps (soupir) je posterai un petit tutoriel d’intro générale à Ucinet que j’avais fait pour un atelier (en anglais). Les gens motivés peuvent déjà m’écrire pour avoir la version bêta…

    Répondre
  2. Claire Lemercier a dit le 04/04/2014 à 2:03 :

    Merci pour le tuto !
    Mais incidemment, si des gens veulent utiliser Ucinet parce que c’est plus simple (ce qui est vrai), il faut leur rappeler que précisément un des très grands atouts d’Ucinet est dans la souplesse des formats d’entrée et des transformations entre formats. Il accepte directement en entrée, entre autres, des copier-coller de tableaux Excel avec sur chaque ligne une organisation + une manif (Edgelist 2 pour les intimes), ou encore avec sur chaque ligne une manif + toutes les organisations présentes (Nodelist 2). Oui, je continue à bien aimer Ucinet :)

    Répondre
    • étienne a dit le 04/04/2014 à 9:19 :

      Ah, j’ignorais! Et je crois que ceux qui me l’ont demandé récemment utilisaient aussi UCINET (qui est en effet bien pratique). Est-ce que tu as un tutoriel d’importation à recommander, qu’on partage l’information?

      Répondre
  3. […] joli tutoriel sur les premières étapes d’une construction de réseau bipartite avec R remarque que ce […]

    Répondre

Laisser un commentaire

XHTML: Vous pouvez utilisez ces balises :<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <embed style="" type="" id="" height="" width="" src="" object="" allowfullscreen="" allowscriptaccess="" cachebusting="" bgcolor="" quality="" flashvars=""> <iframe width="" height="" frameborder="" scrolling="" marginheight="" marginwidth="" src=""> <object style="" height="" width="" param="" embed=""> <param name="" value="">


Carnets de recherche