Archives de catégorie : R

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

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.

étienne

Chercheur CNRS (SAGE-Université de Strasbourg). Données numériques, sociologie politique, épistémologie des sciences sociales.

More Posts

Les calculs dans les nuages (2) – Tutoriel

Dans le billet précédent,  on avait discuté de l’intérêt du « cloud computing » pour les sciences sociales. La conclusion était qu’il peut parfois être utile d’avoir recours à la location de serveurs pour disposer d’une puissance de calcul décuplée. Si je l’ai utilisé dans le cas d’une vaste opération de nettoyage de données bibliométriques, c’est en fait utile dans bien d’autres cas. L’analyse de réseau, surtout si elle s’appuie sur des simulations, peut par exemple être très chronophage. Et quand chaque essai prend 20 minutes, l’exploration est ralentie d’autant.

Dès lors, il peut être utile de passer par le cloud. Le tutoriel ci-dessous propose de vous installer une image de R dans les nuages en moins de 10 minutes, montre en main. On va passer par le service d’Amazon, Amazon Web Service. La raison principale est qu’il existe une « image » de RStudio pré-programmée qui en rend l’installation très simple. Mais comme on l’a déjà dit, ce n’est pas forcément le moins cher, ni le plus performant. Caveat emptor!

1. Ouvrir un compte chez AWS.

C’est tout aussi simple que de créer un compte chez Amazon Web Service. Crééz le, et gardez-le ouvert.

2. Aller sur la page de Louis Aslett

Un statisticien d’Oxford, Louis Aslett, a créé une série d’images qui permettent de placer une console RStudio directement dans les nuages. Allez sur sa page, et sélectionnez l’image qui vous correspond en fonction de votre région, dans la boite en haut à droite.

3. Sélectionner une instance

Si tout va bien, vous êtes ramené directement sur le site d’AWS. Sélectionnez une instance. Vous avez le choix entre plusieurs formules, regroupées (barre de gauche) en quatre grandes familles :

– Micro instance (équivalent à un ordinateur de faible puissance)

– General purpose : diverses combinaisons relativement équilibrées, de puissance variable

– Memory optimized : Des instances avec des niveaux de RAM très élevé

– Storage optimized : Des niveaux de stockages très importants

– Computer optimized : Là, l’accent est mis sur le nombre de processeurs.

Comme je le disais dans le billet précédent, tout dépend alors du type d’opération et du temps que vous voulez y consacrer. Parfois, attendre un peu plus longtemps permet de faire des économies.

4. Détails

Viennent ensuite une série de pages, que vous pouvez passer rapidement :

– Configure instance details : cliquez sur Next sans rien toucher d’autre

–  Add Storage : cliquez sur Next sans rien toucher d’autre

– Tag instance : Donner des noms (Ex. Etienne – RStudio)

5. Configure Security Group

Ici, il faut configurer la liaison à internet. Sous l’onglet protocol, cliquer sur « Custom TCP Rule » dans le menu déroulant (au lieu de SSH). Le champ « Port Range » devient inscriptible. Mettre 80.  Laisser *Source* tel quel (ie. “Anywhere” et “0.0.0.0/0”).

Une fois cela fait, on vous demande de vérifier (Review) et de lancer. Il est possible qu’une fenêtre s’ouvre en vous demandant quelle « Security pair » choisir. Choisissez « no security pair ». Et c’est parti, maintenant, vous payez.

 

Screen Shot 2013-12-16 at 7.51.11 AM

 

Il faut attendre une minute ou deux le temps que tout se mette en place. Vous pouvez observer le processus depuis votre console (cf. ci-dessus). Dans le menu principal, vous avez la liste des instances que vous avez créées (là, j’en ai deux). Une micro (gratuite pendant un an avec l’inscription à AWS, mais plutôt du genre vieux coucou cacochyme), et une autre mise en place pour faire un gros calcul. La colonne « instance state » dit qu’une fonctionne, et que l’autre est à l’arrêt (ce que vous faites via l’onglet Actions).

En face de Public DNS, vous avez maintenant une adresse URL (en surbrillance bleue sur la copie d’écran). Copiez-là, et collez-là dans votre navigateur. On va vous demander vos codes (qui sont: rstudio/rstudio). Une fois cela fait, les utilisateurs de R retrouvent un environnement assez familier.

Quelques petits conseils avant de démarrer

  • Pour travailler des données, il faut les importer via l’onglet upload. Selon leur taille et votre connexion, cela sera plus ou moins long.
  • Aucune extension n’est pré-installée, donc il faut le faire. Choisir un miroir (chooseCRANmirror()) puis refaire une procédure d’installation manuelle (ex: >install.packages(‘questionr’)).
  • Une fois les données traitées, on les exporte via l’onglet « More » dans le panel en bas à droite. Attention, si vous n’avez pas assez de RAM (par ex. si vous utilisez la micro instance sur une tâche un peu costaud), vous pouvez rester bloqués à ce stade, ce qui est contrariant puisqu’il faut tout refaire …. avec une instance plus puissante. Contrairement au nom du sous-service (Elastic Cloud), Amazon ne permet pas d’augmenter la taille de ses instances une fois qu’elles sont créées.
  • IMPORTANT : Une fois que vous avez terminé : déconnectez-vous (sign out). Vous avez quitté R dans les nuages, mais pas AWS, qui lui continue de tourner. Donc n’oubliez pas d’aller sur votre console pour arrêter l’instance. Car sinon, vous continuez de payer. Allez dans le menu ACTION, et choisissez. Soit vous choisissez Stop, auquel cas vous conservez l’instance en mode pause, et vous ne payez que pour les données que vous avez stockées sur l’image (à un taux très faible). Vous pouvez alors la réactivez quand vous le souhaitez. Soit, maintenant que vous savez créer des instances à tout va, vous faites « terminate ». Et là, tout disparaît pour de bon : instance, données, etc.

Voilà pour les informations de base. Commentaires et questions bienvenus. Et je suis aussi preneur de tout tutoriel pour installer une instance sur un opérateur concurrent.

étienne

Chercheur CNRS (SAGE-Université de Strasbourg). Données numériques, sociologie politique, épistémologie des sciences sociales.

More Posts

Les calculs dans les nuages

La légende veut qu’une année, au moment des fêtes de fin d’année, Amazon ait connu un problème technique. Proche de leurs limites depuis plusieurs heures, les serveurs auraient rendu l’âme de manière inopportune, faisant perdre des sommes considérables à l’entreprise de Seattle. Pour éviter que cette déconvenue ne se reproduise, cette dernière aurait décidé d’investir massivement dans des infrastructures. Mais tout cela ne va pas sans coûts : le matériel est onéreux, il devient rapidement obsolète, il faut l’entretenir, payer des factures astronomiques en climatisation (ou s’installer en Islande)… Pour rentabiliser le tout, Amazon aurait donc proposé de louer ses serveurs, d’abord à des entreprises, puis à des particuliers.

L’offre est désormais bien rodée, et Amazon Web Services est l’un des nombreux prestataires de services dans le « cloud ». On peut louer de l’espace de stockage, mais aussi de la bande passante, ou de la puissance de travail… ce qui est non négligeable quand on travaille avec des quantités de données assez vastes. Ça l’est d’autant plus, comme de nombreux chercheurs, on travaille avec R – connu pour ses problèmes de mémoire.

J’ai récemment été confronté à cette situation lors du traitement d’une base de données un peu lourde. Pour le projet sur la réception des sociologues français aux États-Unis (déjà évoqué ici) déjà évoqué, je cherchais à repérer une série d’informations dans des bibliographies. Mais 40 années multipliées par 35 journaux correspondent à 40 000 articles, et à 1,6 millions de citations. Et je devais faire 200 requêtes modérément complexes (une par auteur) sur chacun de ces items. Ce n’est pas énorme pour certains logiciels, mais du fait de la manière dont R gère sa mémoire et du fait de la manière dont j’abordais le problème, mon ordinateur n’y suffisait pas.

Comment faire pour traiter des données lorsque la puissance de sa machine est insuffisante ? La question ne se pose pas que dans le cas d’opérations de data-mining, on y est aussi confronté quand on fait des calculs un peu gros (comme en analyse de réseau). On a alors plusieurs possibilités. La première chose consiste à voir s’il n’est pas possible d’améliorer son programme, pour l’adapter au mieux à la manière dont R gère la mémoire (on lira à profit R Inferno, que m’avait utilement conseillé Y. Savina). Ensuite, on peut utiliser des outils plus adaptés par exemple les modules (ff ou bigmemory). Enfin, on peut passer par un autre langage de programmation qui ne s’étouffe pas devant ces nombres, soit en l’appelant depuis R, soit directement.

La solution que j’ai retenue est autre. Outre l’optimisation du calcul, j’ai décidé de louer une grande puissance de calcul contrôlable à distance. C’est ce qu’on appelle le cloud computing.

Louer un supercalculateur depuis votre bureau

Le principe est le suivant : vous louez de l’espace de travail (puissance de calcul + RAM + stockage), vous installez une « image » d’un logiciel que vous voulez faire tourner, vous chargez vos données, et c’est parti. Le résultat est surprenant. En moins de vingt minutes, j’avais loué l’équivalent de 28 processeurs. Et quelques heures plus tard mon problème était résolu alors que mon tout nouvel ordinateur plantait au bout de 14h des mêmes calculs avec R sans avoir fini.

Quelle offre choisir?

De très nombreuses offres commerciales existent, censées s’adapter à vos besoins. Certaines ne vous concernent pas du tout, qui visent à satisfaire des besoins industriels. Mais même parmi celles qui peuvent s’adresser à nous, il faut choisir : faut-il plus de RAM (mémoire vive) ? plus de cœurs ? plus de processeurs (CPU) ? C’est cette question (qui est l’objet de l’algorithmique, versant « théorie de la complexité ») à laquelle on se retrouve confronté quand on compare les offres de cloud computing. Sans rentrer dans les détails, voilà les grandes lignes :

– Si vous avez à répéter de très nombreuses fois un calcul très simple, il vaut mieux privilégier un nombre élevé de CPU (processeur). Plus vous en avez, plus vous enchainez les calculs rapidement.

– Mais si vos objets sont gros ou que vos calculs sont complexes et prennent une place importante, vous voulez avoir de la RAM. C’est particulièrement vrai avec R, qui en consomme plus que de raison.

Ces règles ne sont pas intangibles, ni linéaires, car d’autres facteurs rentrent en ligne de compte. On peut aussi chercher à optimiser le temps en les combinant, par exemple en faisant faire toute une série de pré-calculs en amont et en les stockant dans la RAM avant de lancer le calcul principal.

À quel prix ?

La question centrale est évidemment celle du prix. Combien coûte cette location, et est-elle rentable ? Du point de vue de nos disciplines, la réponse aux deux questions est : « ça dépend ». Sur le papier, louer une série d’ordinateurs dans les nuages ne coûte pas grand chose. En général, bien moins de $0.5 de l’heure. Mais tout dépend du mode de paiement. Certains louent à l’heure, mais plus cher. D’autres vous louent un espace mais pour le mois. Vous pouvez comparer en regardant ici les prix pour AmazonRackspaceinternap, et l’entreprise française OVH qui lance son service en ce moment.

 

Bien sûr, avant de commencer une location, il vaut mieux tester bien son code et ses données pour éviter de devoir faire les calculs plusieurs fois, sachant que le compteur tourne. Et attention ne pas oublier de se déconnecter quand on a terminé ! Cet été, j’ai fait tourner l’équivalent d’une trentaine de machines pendant 48h et cela m’a coûté 20 euros – mais j’avais un peu surestimé mes besoins. L’autre danger, c’est qu’une fois qu’on a utilisé ces moteurs sur des analyses de réseau dont les utilisateurs de R savent qu’elles sont un peu gourmandes, on trouve que son ordinateur est horriblement long. Mais s’habituer à ce confort risque de coûter cher, en tout cas aux tarifs actuels.

Le prochain post proposera un tutoriel pour utiliser l’un de ces services de calculs dans les nuages.

 

étienne

Chercheur CNRS (SAGE-Université de Strasbourg). Données numériques, sociologie politique, épistémologie des sciences sociales.

More Posts