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 recettes de l’infidélité

Billet co-écrit avec Marie Bergström

Saint-Valentin oblige, on n’échappe pas aux reportages sur les sites de rencontre. Cette année, la tendance semble être aux sites extraconjugaux, qui proposent aux personnes en couple de trouver un autre partenaire « en toute discrétion ». Responsable des sites comme journalistes affirment à l’unisson qu’une révolution est en marche. Ces sites et leur prétendu succès témoigneraient d’un changement radical dans la sexualité. Tous sexes et âges confondus, les Français multiplieraient les partenaires, ce que les récentes aventures du premier d’entre eux ne feraient que confirmer.

Dans un souci poussé de scientificité, l’un de ces sites leaders du marché a même recensé toute une série de données, toutes éloquentes. Sur cette (unique) page web, on apprend que « 43% des Français avouent avoir été infidèles » une fois dans leur vie, une situation en hausse par rapport à 1970 (soit disant 19%). 63% des répondants déclarent qu’on « peut aimer son conjoint tout en lui étant infidèle » (+10 points par rapport à 2010). Et en se promenant, on trouve d’autres indicateurs : le palmarès des régions infidèles, ou les chiffres d’inscrits – bien sûr importants (au-delà du million pour certains). Toujours selon les sites, hommes et femmes seraient presque aussi infidèles.

Une bien improbable explosion

Pour le chercheur, ces chiffres laissent songeurs. D’abord parce qu’on ne connaît rien de leur provenance, ni la méthodologie qui a été utilisée pour les obtenir. Ensuite parce que même s’ils n’ont pas été inventés de toute pièce, ils proviennent sûrement d’un sondage commandé à un institut. Quand on sait que ce genre d’enquêtes est moins orienté vers la connaissance d’un phénomène que vers la promotion d’un produit, on peut s’interroger. Outils de communication commerciale financés par les demandeurs, ces sondages sur mesure présentent souvent des chiffres avantageux pour le commanditaire (ou sont enterrés)[1].

Enfin, et on quitte là la saine suspicion (la « critique des sources ») pour passer aux faits avérés, ces résultats sont tout simplement impossibles. Toutes les études sérieuses dont on dispose sur le sujet montrent en effet le contraire. C’est le cas de la dernière enquête Contexte de la sexualité en France [2] . Réalisée sur un échantillon de plus de 12 364 personnes (contre moins de 600 pour ces types de sondages…), mené dans des conditions précises avec la double expertise de l’INED et de l’INSERM, elle brossait un tableau bien différent de la sexualité des Français.

À la question : « Lorsque deux personnes sont en couple, quelle est la position dont vous vous sentez le plus proche ? », les réponses étaient les suivantes.

En %

La fidélité… Femmes Hommes
Pour la vie 48.2 45.5
Tant que l’on est ensemble 45.8 44.3
Avec la possibilité de quelques aventures 5.8 9.6
Autre 0,2 0.5

                                     (Champ : adultes de 18 à 69 ans)

Seuls 6 % des femmes et 10 % des hommes acceptaient l’idée de l’infidélité. On pourrait dire que derrière ces belles paroles se cachent des pratiques bien différentes. Comme une autre question portait sur les « partenaires simultanés », vérifions. Cette fois, ce sont seulement 0.8% des femmes mariées et 1,9 % des hommes mariés qui déclarent deux partenaires sexuels simultanés au moment de l’enquête. Bref, on est là encore très loin des chiffres avancés.

Enquête en terrain “extraconjugal”

Mais, avancent les sites, les pratiques changent rapidement et ces enquêtes ne mesurent que ce qu’on veut bien leur dire. Selon eux, la fréquentation qu’ils connaissent serait le meilleur indicateur. Aucun chercheur ne dira le contraire, mais personne ne peut vraiment savoir, puisque les chiffres clients sont des propriétés très bien conservées par ces sites.

On peut contourner cette difficulté avec un peu de patience et d’habileté. Via l’interface, on dispose des profils des inscrit-e-s. À condition d’en collecter suffisamment, on peut avoir une idée de leur activité. Comme les sites fournissent par ailleurs des éléments sur la dernière visite de chaque membre (afin que les inscrits ne s’acharnent à contacter des personnes parties depuis longtemps), on peut alors constituer un échantillon de personnes présentes récemment. Qui peuvent être exploités.

Après avoir créé deux profils entièrement vierges (Martin et Martine, 35 ans chacun) sur l’un des principaux sites « extraconjugaux », on a collecté des informations sur leurs derniers utilisateurs connectés. Et on répété l’opération plusieurs fois tout au long du week-end pour multiplier les prises. Une fois un peu de ménage fait (élimination des doublons en particulier), les résultats sont parlants.

AgeDispersionLecture: 25% des femmes sur ce site ont 34 ans ou moins, 50% ont 40 ans ou moins, 75% ont 47 ans ou moins.

Sur les effectifs d’abord. En dépit de leurs centaines de milliers d’abonnés revendiqués, on retrouve très vite les mêmes personnes. C’est particulièrement vrai quand on cherche uniquement parmi les personnes connectées. Souvent, on retrouve une partie de celles présentes sur les premières pages un peu plus loin sur le site. Ce doublonnage crée l’impression d’une abondance relative. Autre modalité : afficher des personnes qui sont certes connectées, mais dans d’autres régions, ou des dont la date de connexion date un peu. Ce n’est donc pas vraiment de la triche, mais c’est moins pratique. Trouver un-e amant à Montpellier quand on habite à Paris, ce n’est pas le plus simple pour une rencontre discrète.

Sur le sex-ratio ensuite.  Si on a l’impression que femmes et hommes sont présents à parité sur l’interface, on se rend vite compte que ce n’est pas vraiment le cas en pratique. Intuitivement d’abord. Mes deux profils sont restés connectés autant de temps à chaque fois. Si Martine a immédiatement reçu des demandes de chat, des cadeaux, des fleurs, des sourires, des visites par dizaines et des messages (je vous passe le contenu), tel ne fut pas le cas de Martin. Ce dernier a juste eu un rapide contact avec une personne qui lui proposait des relations « contre générosité » [sic]. À profil égal, succès inégal donc.

 Une manière concrète de mesurer ce déséquilibre est de faire une petite expérience. Soit une recherche des personnes « En ligne » et en « Ile de France ». L’interface nous renvoie plusieurs centaines de personnes, autant chez les hommes que chez les femmes. Mais quand on regarde en détail, on se rend compte que si beaucoup d’hommes sont présents en ligne, ce n’est pas le cas pour les femmes. Passée la première page, on voit s’enchainer les profils de femmes déconnectées. Ils sont visiblement présents pour remplir le site. Ce décalage s’accroit même quand on regarde d’où elles viennent. Plus de la moitié de ces femmes en ligne viennent en effet d’autres régions. Et pas toujours de très près : Languedoc-Roussillon, Midi-Pyrénées, PACA… fournissent des effectifs non négligeables.

Plots2

 Le graphique ci-dessous montre bien ce décalage. Si on part de la situation d’égalité parfaite (une homme se voit présenter autant de femmes qu’une femme d’hommes), un premier déséquilibre commence avec la connexion. On n’a plus que 40% de femmes contre 60% d’hommes qui sont effectivement en ligne parmi les centaines de profils affichés. Et si on ne considère que les personnes connectées et en Ile-de-France, on arrive à un ratio de 1 femme pour 4 hommes. À Paris seulement, le ratio est à peu près de cet ordre. Pas étonnant que Martine ait été autant sollicitée pendant que Martin attendait seul. Tout au long du week-end, ce chiffre a varié, de 70 à 80%.

On remarque par ailleurs que les usagers sont loin de se déclarer tous infidèles (c’est-à-dire en couple par ailleurs) mais sont nombreux (environ 40 %) à se présenter comme célibataires, séparés ou divorcés. Au-delà de l’infidélité, ces sites mettent en scène des rencontres à finalité sexuelle et sont sans doute fréquentés en grande partie par des individus désireux de vivre des relations de courte durée.

Plots1

L’infidélité fait elle recette ? C’est tout au moins le pari des concepteurs de sites qui  affrontent aujourd’hui un marché fort concurrentiel. Dans cette situation, comme le conseille tout bon manuel de marketing, mieux vaut viser une concurrence latérale que frontale avec les acteurs dominants (comme Meetic). Autrement dit, identifier et occuper des segments de marché. Ainsi, les sites « de niche » se multiplient (ils représentent près d’un tiers des sites hétérosexuels en 2008)[3] et proposent des sites de plus en plus ciblés (rencontres pour « écolos », « bcbg », militaires, amateurs de football…ou herpétiques). Souvent interprétés – comme les sites extraconjugaux – comme un signe de nouvelles normes conjugales et sexuelles, ces sites révèlent en premier lieu une stratégie de marketing : ils sont les produits des logiques du marché économique bien plus que des reflets du marché matrimonial.


[1] La situation est la même dans le cas de sondages publiés opportunément sur tel ou tel sujet lors d’une campagne électorale, comme le rappelait judicieusement Patrick Lehingue dans un ouvrage récent.

[2] M. Bozon, N. Bajos, La sexualité en France, La découverte, 2008.

[3] M. Bergström, “La toile des sites de rencontre”, Réseaux, 2011.

étienne

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

More Posts

Sur “Les dérives de la bibliométrie”

Spécialiste de sociologie des sciences, Yves Gingras propose dans son dernier ouvrage une réflexion sur l’évaluation de la recherche. Publié aux éditions Raisons d’Agir, l’ouvrage se présente comme une  nouvelle contribution critique aux débats très contemporains sur le sujet. Après d’autres, l’auteur se propose de décortiquer les indicateurs et les classements, et d’en montrer l’inconsistance, voire la nocivité potentielle. On se tromperait pourtant si on ne voyait dans ce livre qu’un énième pamphlet contre le gouvernement de la science contemporaine. Car l’ouvrage propose en fait bien plus qu’une critique – par ailleurs fine et appuyée sur plusieurs décennies d’étude du fonctionnement des sciences. On peut en effet lire ce livre sous au moins trois angles différents : la critique de l’évaluation bibliométrique actuelle, le plaidoyer en faveur d’une réappropriation de ces techniques par les sociologues des sciences, et l’invitation à une bibliométrie réflexive.

 

http://sciences.blogs.liberation.fr/.a/6a00e5500b4a64883301a51156784e970c-300wi

De quoi les citations sont elles le nombre ?

Le premier temps du livre, qui lui donne son titre, propose  une discussion critique des formes d’évaluation quantifiées de la recherche. Gingras rappelle l’histoire des techniques bibliométriques, nées entre science (une volonté de proposer un outil de repérage bibliographique pour les chercheurs d’un même domaine) et politique des sciences (mesurer la « qualité scientifique » d’un auteur). Reprenant les travaux de P. Wouters sur la naissance de la scientométrie, l’auteur montre que les fondateurs du Science Citation Index avaient d’abord pour objectif de proposer un outil de connaissance bibliographique à destination de la communauté scientifique.

Las, leur création leur a échappé et la National Science Foundation, qui financé les premières recherches sur l’outil bibliométrique, développe sur cette base une série d’indicateurs destinés à créer une évaluation scientifique de la science dans les années 1970. S’il ne peut raconter toute l’histoire, Gingras en évoque bien ses principales figures (Derek de Solla Price et sa tentative de créer une « science de la science », parfois avec des visées très appliquées), tout comme il montre l’explosion de la bibliométrie dans la politique des sciences contemporaines.

L’ouvrage revient alors sur les différents index et autres facteurs souvent évoqués pour mesurer la productivité des chercheurs. De manière particulièrement précise, mais toujours stimulante et lisible pour le non-spécialiste, l’auteur évoque les limites fortes de ces outils. Les critiques sont connues. Censé mesurer l’excellence des chercheurs, le h-index saisit en fait leur capacité à écrire de nombreux d’articles modérément cités (un auteur qui publie 7 articles cités 7 fois a un h-index de 7, quand un autre qui publie deux articles cités 100 fois chacun a un h-index de 2). Les classements internationaux des universités écrasent les différences de fonctionnement national et ne mesurent rien in fine. Les champs ont des pratiques de citations particulièrement différentes (qui varient dans le temps), et même à l’intérieur d’un champ, on trouve des variations tellement fortes que l’évaluation s’appuie sur des bases bien instables. De toute façon, le facteur d’impact des revues peut être manipulé via l’autocitation, ou par des revues complices afin d’être indument augmenté (les “cartels de citation”). Enfin, critique classique mais essentielle : ces techniques ne capturent pas la valence d’une citation, et une série de citations négatives (ou dans des revues invisibles, mineures, proches de l’auteur) comptent autant que celles dans une revue centrale.

Faut-il brûler le Web of Science ?

Là où l’ouvrage de Gingras se démarque des discours classiques sur la bibliométrie, c’est qu’il propose non pas de jeter mais de s’en réapproprier les données et les outils,  actuellement monopolisés par les administrateurs de la recherche. Car si elle est une bien piètre mesure de la qualité individuelle des chercheurs, elle peut devenir un outil particulièrement efficace pour la sociologie des sciences. L’auteur nous emmène alors dans un voyage à travers différents travaux qui utilisent la bibliométrie pour revisiter l’histoire des sciences. Dans une version résumée de son article sur la découverte de l’ADN, il montre ainsi, données de citations en main, que la découverte de la double hélice par Watson et Creek a eu une reconnaissance bien plus rapide que ce qu’en disaient les historiens.

Loin de tomber dans la fascination pour son objet critiqué quelques pages plus tôt, l’auteur explique pourquoi la sociologie des sciences peut faire un meilleur usage des données de citation que les administrateurs de sciences. D’abord, la question de la valeur de la citation — problème central de ces indicateurs, qui enregistre indifféremment louanges et critiques — importe peu quand on analyse le destin de controverses scientifiques. Qu’importe en effet que la citation soit positive ou négative, pourvu qu’on voit une discussion émerger. De la même manière, le chercheur qui étudie un champ donné peut contrôler les variations de citations, et ainsi détecter les renvois d’ascenseur, entre chercheurs, entre revues. Finalement, la connaissance  fine du champ permet d’interpréter correctement les données de citation et de les utiliser positivement.

Invitation à la bibliométrie réflexive

Loin de se cantonner à une critique de la bibliométrie, Gingras propose de l’utiliser de manière abondante, mais efficace. La bibliographie de l’ouvrage est, à elle seule, un outil unique pour tout chercheur qui voudrait travailler sur ou avec ces questions de mesure quantifiée de la science. Et à plusieurs reprises, l’expérience de l’auteur, assurément l’un des chercheurs les plus prolifique dans ce domaine (voir l’entretien publié récemment sur le carnet Zilsel), lui permet d’émettre des propositions innovantes. À la fin du livre, l’auteur propose ainsi de réfléchir à ce que serait un indicateur robuste de la productivité de la recherche. Plutôt que de vouer aux gémonies toute mesure quantifiée, il propose une série de critères censés assurer la fiabilité et le bon usage des index ainsi créés. La proposition peut sembler iconoclaste, mais elle a le mérite de poser les bases d’une réflexion sur ce que peut être une aide à l’évaluation par la quantification.

L’ouvrage est donc un tour de force, à la fois dense et plaisant à lire, utile aux spécialistes mais pédagogue pour les néophytes. On pourra noter qu’il est finalement moins question de l’évaluation de la recherche en général que de son versant purement quantitatif. Et que ce faisant, le titre est en décalage avec le contenu, d’autant plus que la tonalité est bien moins critique qu’il ne le suggère. Si on ne saurait en faire le reproche à l’auteur, on peut prolonger la discussion et s’interroger : faut-il recourir à des indicateurs quantitatifs pour juger la science actuelle, ou faut-il tout simplement laisser ces techniques aux sociologues des sciences ? Gingras semble plaider pour des méthodes mixtes qui allient analyse de citation et appréciation substantive.

Mais ce faisant, on occulte les différentes possibilités qui se passent volontiers de la quantification, ou lui font un véritable pied de nez. C’est le cas de l’idée, de plus en plus fréquemment évoquée, de ne juger que sur un nombre très limité de travaux… car on limiterait justement le droit d’un chercheur à publier (par période, par thème). Manière radicale de lutter contre la prolifération de textes que plus personne ne peut lire de toute façon, la proposition a le mérite de poser la clairement la question : ne vaut-il pas mieux écrire un excellent texte qui donne à penser tous les trois ans que publier une succession d’articles inaboutis ? À l’heure où se multiplient les injonctions à publier plus, il peut être salutaire de se poser cette question, quoiqu’elle ait déjà été tranchée depuis longtemps. La scientométrie tend en effet à montrer que les travaux qui restent sont, sauf exceptions, ceux qui ont mis longtemps à être produits.

é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

Les archives du web

Les ajouts et modifications apportés suite à la publication du billet sont indiqués par ce surlignage jaune.

Voilà maintenant plus de deux ans, la Revue d’Histoire Moderne et Contemporaine a consacré un dossier aux pratiques numériques des chercheurs. L’article de Nicolas Delalande et de Julien Vincent, « Portrait de l’historien-ne en cyborg », proposait un tour d’horizon utile sur le sujet. Récusant à la fois l’enthousiasme béat, le scepticisme radical ou l’indifférence polie vis-à-vis des données numériques, ils soulignaient les opportunités qu’elles fournissent aux chercheur.e.s. Les stratégies de recherche, formes de communication (entre chercheurs, ou avec d’autres publics) comme modalités de l’écriture sont selon eux radicalement modifiées par l’arrivée d’internet et de l’ordinateur.

Un aspect non évoqué par l’article – pour des raisons bien compréhensibles – concerne un aspect central du métier d’historien : les archives. Peut-on faire des archives sur internet ? Lieu et reflet de toute une partie de l’activité humaine, on trouve sur le web de très nombreuses informations (parfois même trop, comme le rappelait ce portrait d’un anonyme par la revue Le Tigre). Mais cette abondance disparaît assez rapidement. Probablement pas assez en ce qui concerne le droit à l’oubli, mais suffisamment pour qu’une enquête un peu rigoureuse soit rapidement contrariée.

C’est ce dont je me suis rendu compte récemment alors que je cherchais à faire une liste de tous les « administrateurs de science ». Dans le cadre du projet Go Science, nous cherchons à produire une liste des personnes investies dans l’administration de la science en France depuis les années 1960. Afin de rendre la tâche moins titanesque, nous avons choisi deux domaines, et fait des carrotages par périodes. Pour les collègues en charge du passé « lointain » (les années 1960), la solution est claire : il faut aller à Pierrefite-sur-Seine, fréquenter les archives du CNRS, et ouvrir des cartons. Visiblement, ils s’en sortent.

Pour les années 2010, les choses me paraissaient plus simples. Direction et commissions du CNRS, sections CNU, alliances scientifiques, organigrammes des grands EPST de recherche : tous publient une liste des membres. Sauf que… à chaque changement dans l’organigramme, à chaque nouvelle élection d’un bureau, la mémoire du passé est effacée. Je connaissais bien des manières de retrouver des documents dans le cache de Google, de faire des requêtes un peu complexes pour retrouver des fichiers pdf ou word, mais ça ne me permettait pas de reconstituer la direction du CNRS de 2008, ni ses sections.

C’est Christian Topalov qui m’a indiqué une solution. Engagé dans une entreprise assez similaire mais plus contemporaine et bien plus massive (les résultats de cette enquête collective en cours seront présentés dans le cadre du séminaire Politique des Sciences le 22 mai prochain), il m’a rappelé l’existence d’une « machine à remonter le temps ». Cette “wayback machine”, c’est le site d’une association qui propose des « photos » des sites du passé (On y accède via https://archive.org/). Plusieurs fois par an, parfois plus, la machine « crawle » le site, et en conserve une photo.

La partie de l’enquêt que je mène permet de démontrer en actes de l’intérêt, et ses limites. Si vous cherchez à connaître l’organigramme du CNRS et ses sections pour les années passées, vous rentrez l’adresse internet (l’URL) sur site que vous cherchez. Attention : Wayback Machine archive en fonction de l’URL, donc si le site a changé de nom de domaine (ou changé d’extension, de .fr à .eu par exemple), il faut le retrouver tel quel.  Vous arrivez sur une page avec une frise, qui montre le nombre de photos. Pour le CNRS, on voit que la collecte commence en 1997, et qu’à partir de 2005, les copies sont multiples. On a donc de bonnes chances.

WaybackJPEG

On clique donc sur une date, et on se promène sur le site comme on le ferait à l’heure actuelle. C’est un peu plus lent puisque qu’il faut que WB aille chercher dans ses archives (mais plus rapide que d’attendre une dérogation pour consulter un carton). Et vous pouvez accéder aux informations désirées… parfois. Car malheureusement, l’ensemble du site n’est pas toujours conservé. Les deux principales difficultés sont les suivantes :
• La machine conserve assez bien tout ce qui est écrit « en dur » sur le site, c’est à dire le HTML (et son CSS), ainsi que les liens vers des fichiers (word, pdf). Mais ce n’est pas la seule manière d’écrire le web, et tout ce qui est stocké dans une base de données pour être “injecté” a peu de chances d’avoir été conservé par WB Machine.
• La machine ne se promène pas non plus sur toutes les pages, loin s’en faut. Dans plusieurs cas, comme ici dans pour le CNU Santé de 2008, il n’y a pas de photo disponible.

wayback-Hum

C’est ce qui justifiera donc que j’aille faire un tour au ministère cette semaine pour récupérer ladite liste. Car comme d’habitude avec les données numériques, elles sont potentiellement très riches, mais rarement suffisantes en elles-mêmes. Les stratégies numériques ne constituent pas des stratégies de recherches suffisantes dans la plupart des cas. Ceci dit, c’est un temps précieux gagné dans certains cas.

À noter sur le sujet :

  • La Bibliothèque Nationale de France s’est depuis longtemps engagée dans l’archivage du web et propose un service à ses usagers. Les noms de domaine en .fr sont collectés « largement », et la bibliothèque propose des archivages ciblés. Voir ici  pour une brève histoire et ici pour savoir comment y accéder.
  • L’INA s’occupe de l’archivage du web audiovisuel. Voir ici pour les détails, et là pour le blog sur le dépot légal (avec des annonces de séminaires, des réflexions). [Merci à Anne Pavis pour cette piste].
  • La BNF et d’autres sites permettent de faire de l’archivage de bases de données. Elles permettent de contourner la difficulté évoquée ci-dessus, à savoir l’archivage des pages HTML uniquement (dont l’usage en solo se raréfie). Le nombre de sites concernés est cependant plus faible.
  • Le site de l’IIPC, l’initiative des bibliothèques nationales de différents pays afin de conserver une trace du web.

La liste comme le billet sont évidemment loin d’être exhaustifs, donc n’hésitez pas à laisser des commentaires pour faire des ajouts.

étienne

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

More Posts

Se réapproprier la bibliométrie (II) : Cite me maybe ?

Le blog reprend après quelques mois de pause, tout en continuant à travailler les questions de bibliométrie abordées précédemment. Il s’agit toujours, à partir d’une étude en cours, de questionner ce qu’une bonne connaissance des données bibliométrique peut être et peut permettre de faire, en tant qu’outil sociologique.

ERRATUM : Suite à une erreur dans les lignes de code, le graph de réseau avait des points de taille erronée (corrigé le 7 décembre 2013, merci à LW pour sa remarque).

Sous les dehors de l’objectivité des chiffres, le recours croissant à la bibliométrie comme indicateur de productivité scientifique pose plus de problèmes qu’il n’en résout. Censé déterminer de manière objective la qualité du travail (réduisant par là même la place des scientifiques dans le gouvernement de la science), les différents facteurs d’impact et autres indices mobilisés produisent des résultats difficiles à interpréter. Un article cité l’est-il pour ses qualités ou pour la polémique (parfois scientifiquement peu utile) qu’il suscite ? Un texte important est-il celui qui suscite des programmes de recherche, ou celui qu’on cite de manière routinisée ? Un auteur est-il crédité parce qu’il suscite des recherches innovantes, ou du fait qu’il occupe par exemple une position institutionnelle ou une niche scientifique qui le rendent incontournables ?

À ces remarques bien connues, il faut en ajouter autre, moins souvent évoquée mais tout aussi centrale : la très forte hétérogénéité des pratiques de citation. Que ce soit entre auteurs, dans le temps, d’une discipline ou d’un sous-champ à l’autre, elles varient sensiblement. Cette situation est bien connue des chercheurs qui travaillent sur ce matériau : pour s’en servir, il savent qu’il faut « normaliser » les résultats, par exemple en pondérant le nombre de citations (à un auteur, à un journal) par le nombre total par période et par unité. Et une telle pondération n’est pas une simple opération technique, mais suppose un choix scientifique, en l’occurrence un modèle de l’espace étudié.

Mais qui, au quotidien, prend la peine de le faire ? Les aficionados de Publish or Perish, ce petit logiciel qui permet de vérifier en deux clics si votre voisin de bureau a un meilleur impact factor que vous, ou les tableaux détaillés du Journal of Citation Report, qui offrent une batterie de résultats sur la vitesse de diffusion d’un article, ne les considèrent tout simplement pas et contribuent à les invisibiliser. Les différences sont pourtant prononcées. Et elles devraient remettent en cause les tentatives de comparaison, à moins de faire le travail de normalisation, ce qui est souvent lourd et suppose d’avoir des informations sur l’ensemble des citations.

Prenons l’exemple des revues de sociologie étasuniennes. Les données proviennent de la même source que pour le billet précédent (des données du Web of science largement retravaillées, soit 39 000 articles et 1 694 000 citations). La première remarque est que, comme on le voit sur un échantillon de 35 revues sur 40 années, le nombre moyen de citations par articles a fortement progressé, passant en moyenne de 22 à 56.

BXPLOT-Mean

Code:
Si le fichier mean est au format: year | journal | value:

p <- ggplot(mean2, aes(factor(year), value))+stat_boxplot(geom ='errorbar')
pl<-p + geom_boxplot() + theme(axis.text.x = element_text(angle = 90, hjust = 1))+ ggtitle("Nombre moyen de références bibliographiques dans les articles de sociologie aux États-Unis \n Par journal et par an (1970-2010)\n") + theme(plot.title=element_text(family="Arial", face="bold", size=14))+ labs(x = "\nAnnée", y = "Nombre moyen\n")

Une telle inflation signifie que la signification même de la citation varie au cours du temps. Si on ne prend qu’un indicateur quantitatif, la citation de 1970 « vaut » plus que celle de 2009. Et d’autres changements ont dû survenir. On retrouve ces variations à l’intérieur d’un même champ disciplinaire. Le graphique ci-dessous montre la dispersion des citations pour l’année 2009. On voit bien que si la panacée consiste à avoir de très nombreuses citations, mieux vaut être démographe (le Journal of Marriage and Family est à plus de 4000 références annuelles) que spécialiste des mathématiques (le Journal of Mathematical Sociology, qui en recense moins de 500 par an). Notons qu’on a aussi fait sortir du graphique Social Science and Medicine, qui est à plus de 16.000 citations, du fait d’une publication plus régulière (bimensuelle) mais aussi d’une proximité aux normes de publications dans les revues de médecine (qui ont la main lourde en termes de citations).

BXplot-Name2009

Si le fichier est year | journal | value | position* :
qplot(1, value, data = journals2009, geom = "boxplot", notch=T, xlim=c(0.3,1.7)) + annotate("text", x = journals2009$position, y = journals2009$value, label = journals2009$journal, cex=2.3, colour="#CC3333") + ggtitle("Nombre de références bibliographiques dans les revues de sociologie étasuniennes\n Année 2009\n") + theme(axis.line=element_blank(), axis.text.x=element_blank(), axis.ticks=element_blank()) + labs(x = "", y = "") + theme(plot.title=element_text(family="Arial", face="bold", size=14)) + labs(x = "\n", y = "\nNombre total annuel")

* Parce que certains journaux ont des valeurs proches qui rendent un graphique en ligne illisible, l’astuce consiste ici à faire attribuer une position parmi trois à chaque citation, afin qu'ils se déplacent sur l'axe horizontal.

À condition de prendre le temps et de contrôler ses données, on peut par contre obtenir des résultats intéressants à partir d’une étude des citations. On peut par exemple voir l’émergence de sous-champs, ne serait-ce qu’en regardant l’évolution de l’autocitation de la revue (ie. les articles qui citent des articles de cette revue). C’est clairement ce qui se passe pour Gender & Society et pour Criminology, dont les sujets respectivement s’institutionnalisent ou s’autonomisent au cours de la période. Ce faisant, elles deviennent plus autoréférentielles.

AutocitationSelect

Si les données sont au format : Citing | Cited | year | selfcite_ratio
p<-ggplot(TAB3, aes(x=year, y=ratio, colour=journal)) + ggtitle("L'autocitation au journal dans la sociologie étasunienne\nPar année et par journal (1970-2010)\n")+ theme(axis.text.x = element_text(angle = 90, hjust = 1))+ theme(plot.title=element_text(family="Arial", face="bold", size=14)) + labs(x = "\nAnnée", y = "Taux d'autocitation\n")

[Avec la même technique, on pourrait aussi voir si certains journaux n’essaient pas de faire augmenter artificiellement leur impact factor en rajoutant des citations à des articles qu’ils ont publié récemment]

Une analyse bibliométrique permet aussi de faire apparaître la structure des échanges entre revues. On regarde quelle revue cite quelles autres, et on tente de déterminer la structure des échanges. L’analyse des réseaux est ici plus appropriée, même si on arrive rapidement à saturation puisque le nombre de liens possibles (32*32 revues) est proche du nombre de liens effectifs (une revue cite au moins l’une des 32 autres dans l’année). Sur les conseils de B., j’ai ici fait un peu de ménage en considérant le réseau initial soustrait de sa distribution à l’indépendance. Puis j’ai fait une analyse de modularité pour tenter de détecter des classes à l’intérieur de cet ensemble.

US_Socind5NEW

Sans rentrer dans les détails, ce qu’on voit ici peut se résumer ainsi :

  • La taille du point montre que certaines revues reçoivent beaucoup plus de citations que d’autres. ASR, AJS et Organization studies ont été très citées en 2009. C’est le pendant des analyses précédentes, où on voyait les revues qui citent le plus. Evidemment, il y a une prime aux revues anciennes.
  • La structure du réseau donne à voir un cœur de la disciplines, ie. des revues qui se citent mutuellement et régulièrement (encore une fois, l’absence de lien ne veut pas dire aucune citation dans l’année, mais une citation moindre que ce que donnerait une distribution à l’indépendance). Là, et même si on sait que la preuve visuelle est relativement pauvre en sociologie des réseaux, c’est une analyse des degrés d’intégration qu’on voit ici, avec le centre et les marges d’une discipline.
  • Finalement, l’analyse de modularité (couleurs) permet de voir les revues qui ont les mêmes pratiques de citation. L’algorithme utilisé ici est walktrap (du package igraph), qui donnait les résultats les plus significatifs sociologiquement parmi la palette disponible [http://igraph.sourceforge.net/doc/R/communities.html]. Le principe de la modularité consistant à trouver les divisions optimales au sein d’un réseau, on a ici des petits groupes (pas forcément placés côte à côté, signe que la preuve graphique…). Selon cet algorithme, Social networks et le Journal of Mathematical Sociology ont donc des « pratiques » de citation relativement proches. Le fait que Social science & Medicine soit seul dans sa catégorie n’est pas étonnant : ses pratiques (citation forte, majorité de citations à l’extérieur de la discipline) en font un isolat.
  • [Je suis sûr qu’on peut faire une représentation du réseau avec ggplot aussi, mais je laisse cela à Fr. Briatte pour l’instant.]

    Ces traitements, certains très simples, montrent qu’on ne peut traiter la citation de manière agrégée et sans considération pour les variations d’usages, parfois même à l’intérieur d’un champ. Elles soulignent aussi ce qu’une bibliométrie descriptive offre comme ressources pour comprendre certaines logiques du champ scientifique, à condition qu’on cesse de l’interroger uniquement comme une métrique grossière de la qualité scientifique individuelle.

    étienne

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

    More Posts

    Données numériques en histoire – Conférence le 9 décembre 2013

    En attendant la reprise de ce blog (très prochaine), voilà l’annonce d’une conférence qui s’annonce vraiment intéressante.

    Les sources nativement numériques pour la recherche en histoire et patrimoine : pratiques et méthodes. Elle se tiendra au CNAM, le 9 décembre 2013.

    Les sciences humaines et sociales ont depuis quelques années vu s’accroître le regard réflexif des chercheurs sur leurs terrains et corpus, leurs gestes, leurs outils et instruments, en particulier dans le rapport aux technologies de l’information et de la communication à l’ère numérique.

    Si les « Digital Humanities » (Humanités numériques) ont montré les apports du traitement informatique pour des fonds de documents numérisés, de nouveaux documents sont produits dans l’usage même des techniques et environnements du numérique, et ce depuis que les ordinateurs sont nés il y a plus d’un demi-siècle. En quoi ces nouveaux documents peuvent-ils constituer de nouvelles sources pour les études qui s’interrogent sur le passé ? Quelles traces, générées dans l’usage des outils numériques et transmises par la mémoire d’usage des technologies informatiques, deviennent exploitables et analysables à côté des formes et contenus ? A quel nouveau type d’archives le chercheur en histoire ou en patrimoine doit-il se confronter ?

    La suite et les détails ici

    Sinon, la jeune revue RESET (Recherches en sciences sociales sur Internet) rejoint le portail de revues.org, signe de l’intérêt pour ces recherches et du dynamisme du journal. A suivre donc…

    étienne

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

    More Posts

    Se réapproprier la sociométrie

    Étrange devenir que celui de la sociométrie appliquée à l’étude des sciences. Initialement conçue comme une manière d’appréhender le travail des chercheurs et les relations qu’ils nouent, la méthode a connu un regain d’intérêt ces dernières années avec le développement d’indicateurs orientés vers l’administration de la science. Utilisées à des fins de classement et de réformes, ces techniques se sont diffusées avec une rapidité déconcertante [1]. H-index, impact factor et autres mesures de la supposée productivité des scientifiques ont depuis pris le dessus sur les autres formes d’analyses que permettaient ces techniques [2].

    Le problème est que, comme le fait justement remarquer Yves Gingras dans ses différents travaux (voir ici si vous ne connaissez pas), ces mesures sont sans intérêt tant qu’on ne s’intéresse qu’au niveau individuel (celui du chercheur). Outils de management et/ou de promotion (du) personnel, elles ne prennent pas en compte le contexte général dans lequel s’inscrivent ces mesures. Outre qu’elles ne disent rien de la qualité du travail (une citation positive vaut autant qu’une citation négative) ni de sa capacité a faire progresser le savoir dans le temps long, elles doivent être réinsérées dans une économie générale des pratiques de citations que les mesures individuelles ne peuvent saisir.

    Mais les errements actuels n’empêchent pas de mener une véritable étude quantitative des sciences sur la base des mêmes données. C’est d’ailleurs ce que fait Gingras dans un article qui revisite un moment de l’histoire des sciences. À partir d’une étude de citations, il montre alors que l’article de Watson et Crick (qui décrivait la double hélice de l’ADN) a connu des débuts bien plus rapides que ce qu’en disaient les historiens des sciences. L’étude est minutieuse et extensive, des qualités rarement combinées — permises par les données précises dont il dispose et les techniques d’analyse qu’il met en oeuvre.

    Au-delà de cette relecture, c’est un plaidoyer en actes pour une réappropriation de la scientométrie que propose Gingras. Bien utilisée, c’est-à-dire avec une connaissance du domaine et de ses pratiques de citation, la bibliométrie est un outil utile pour l’étude des sciences. Surtout, la disponibilité des données de citations depuis près d’un siècle croisée avec la capacité de traitement des ordinateurs permet d’opérationnaliser la notion de champ scientifique de Bourdieu, entendu comme espace de relation dans lequel évoluent les chercheurs.

    Ce alliage de précision et d’extension est ce qui est intéressant avec ces données bibliométriques. Il ne faut pas en être dupe, et ne jamais oublier qu’une citation a des significations bien différentes (dette intellectuelle, demandes des évaluateurs, volonté de démontrer un savoir ou l’appartenance à une communauté,…). Il convient aussi de garder à l’esprit que citation ne veut pas dire influence réelle : on peut ne pas citer et être influent, et réciproquement. Il faut enfin être conscient qu’un bon travail bibliométrique passe le plus souvent par un long moment de vérification et de recodage des données. Mais à  ces conditions, les résultats sont souvent intéressants[3].

    À une échelle moindre, j’ai récemment tenté de mener une étude de la réception des sociologues français aux États-Unis. Les premiers résulats de ce travail (mené avec A. Abbott) seront présentés ce jeudi matin, lors d’un colloque sur l’histoire de la sociologie française. On revient, statistiques à l’appui, sur quarante années de citations à des centaines d’auteurs français. Et on discutera des enjeux de ces méthodes pour l’étude des disciplines. D’ici là, voilà un premier graphique sur la présence de quelques sociologues français dans la sociologie étasunienne. Attention, il y a un détail à ne pas manquer.

     

    Figure 6 - Temps + Top - Freescale

     

    1. À ce propos, si vous n’avez pas lu Benchmarking. L’Etat sous pression statistique d’I. Bruno et E. Didier, vous devriez y jeter au moins un oeil
    2. Sur ce point, on peut relire les conseils ironiques de G. Chamayou aux enseignantes-chercheuses.
    3. Outre les citations, une autre possibilité est de travailler sur les co-occurrences de mots dans les articles. C’est ce qu’on récemment fait D. Chavalarias et J.-Ph. Cointet dans un article paru dans PlosOne J’en reparlerai bientôt

    étienne

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

    More Posts

    Collecter des donnés sur Wikipédia : l’exemple des salles du culte musulman à Paris

    En dépit de critiques récurrentes, on trouve des informations très utiles sur l’encyclopédie en ligne Wikipédia. Et, à condition de savoir les lire (i.e. de pratiquer la critique des sources), elle peut constituer une mine d’or pour les chercheurs. D’aileurs, vous pourriez y contribuer, ou contribuer.

    Comment faire pour collecter automatiquement ces informations ? De la même manière qu’on l’a déjà fait, mais le site impose de respecter certaines règles. Examinon-les en repartant de l’exemple des édifices religieux à Paris, traité dans un précédent billet. Cette fois, on s’intéresse au culte musulman.

    L’exemple des lieux de culte musulman à Paris

    Parmi les différents sites qui répertorient lieux du culte musulman à Paris, Wikipédia semble bien renseigné. Une rapide consultation montre une liste d’environ 75 sites, qu’on va récupérer afin de pouvoir la traiter (statistiques, visualisation), ou la sauvegarder. Assurément, on n’est pas en mesure de dire si elles sont fréquentées, toujours actives, ou si la liste est complète (mais des gens ici ou ont sûrement une idée – ainsi que l’administration française, comme le montrait la thèse de S. Jouanneau).

    Et on peut remarquer au passage une distinction qu’on ne retrouve pas chez d’autres groupes religieux plus établis : plus de la moitié des endroits recensés sont des “simples” salles de prières, et pas des édifices spécifiquement religieux (ce qui a sûrement trait à la croissance différentielle des groupes religieux, comme à leur histoire).

    Sur Wikipédia, les données sont souvent présentées sous forme de tableaux. Ceux-ci sont décrits par une balise <table> dans le code source. Dans ce cas, leur extraction est très simple, grâce à la fonction readHTMLTable (présentée ici également), que l’on va utiliser.

    Le premier “tableau” de la page est la table des matières de l’article, donc on s’intéresse au deuxième (mosquées), et au troisième (salles de prière). La fonction readHTMLTable peut s’utiliser directement avec l’URL (l’adresse) de la page, dans ce cas on extrait les tableaux comme ceci :

    # Modules
    library(RCurl)
    library(XML)
    
    # Adresse de la page Wikipédia
    lieux.islam.url <-
      "http://fr.wikipedia.org/wiki/Liste_des_mosqu%C3%A9es_de_Paris"
    
    # Récupération directe des tableaux
    lieux.islam.tableaux <- readHTMLTable(lieux.islam.url)
    mosquees      <- lieux.islam.tableaux[[2]]
    salles.priere <- lieux.islam.tableaux[[3]]
    

    Si on vérifie le contenu de salles.priere, on peut vérifier que ça fonctionne. Reste un problème d’accents, qui se traduit par des choses comme \u0080 (Mac OS) ou des caractères bizarres (Windows) et des avertissements ésotériques comme “it is not known that wchar_t is Unicode on this platform”. Il s’agit d’un malentendu d’encodage, c’est-à-dire d’interprétation des caractères accentués – qu’on traitera en détail prochainement [1].

    Pour y remédier, on va adopter une procédure légèrement plus longue. Cela va nous permettre également de se conformer aux conditions d’utilisation de Wikipédia, et plus généralement aux bonnes pratiques de collecte automatique de données.

    Collecter, à quelles conditions ?

    Collecter automatiquement des données peut être grisant, mais il ne faut pas oublier que l’opération peut être coûteuse pour l’hébergeur (en termes de bande passante, donc d’infrastructures matérielles), et que le droit protège la propriété des données : ce n’est pas parce que vous pouvez les consulter qu’elles sont à vous. Les sites peuvent, au-delà du droit, se protéger par divers outils techniques. Certains vous bloqueront l’accès en cas de non-respect des conditions d’utilisation ; il est donc vivement conseillé de lire celles-ci pour savoir ce que vous êtes autorisé à faire, et comment.

    Chez Wikipédia, les données sont librement accessibles, aux conditions des licences Creative Commons et GNU Free Documentation License : en gros, citer vos sources, ne pas en faire un usage commercial, etc. (un peu comme pour ce blog). Concernant la collecte automatisée de données, la règle veut qu’on se présente, qu’on donne les moyens au webmaster de vous contacter par email, et qu’on évite de revenir trop régulièrement. À défaut, l’accès vous sera bloqué après quelques requêtes. On va donc utiliser des fonctions qui permettent de charger des pages web tout en envoyant nos coordonnées au serveur.

    Pour cela, et toujours avec R, on prend un chemin découpé en plusieurs étapes. Les fonctions de très “haut niveau”, c’est-à-dire qui font beaucuop d’opérations complexes en une seule fois, ne permettent en effet pas toujours de contrôler assez finement la communication avec le serveur. Notre programme commence donc par la préparation d’une ligne, appellée User-Agent, qu’on envoie au serveur pour lui signaler notre identité (personnelle et logicielle) lorsqu’on lui demande une page [2].

    Ici, cette ligne est de la forme “RCurl (mon.adresse@moi.net)”, RCurl étant le “navigateur” qu’on utilise. On la communique comme ceci :

    # Modules utilisés ici
    library(RCurl)
    library(XML)
    
    # Adresse (URL) de la page
    lieux.islam.url <-
      "http://fr.wikipedia.org/wiki/Liste_des_mosqu%C3%A9es_de_Paris"
    
    # Identifiant que l'on envoie à Wikipedia pour se présenter
    # À remplacer par votre email !
    mon.adresse.mail <- "mon.adresse@moi.net"
    
    # Assemblage du message qui va être envoyé
    identifiant <- paste("RCurl", " (",
                         mon.adresse.mail, ")",
                         sep="")
    
    # Requête
    page.brute <- getURL(url = lieux.islam.url,
                         useragent = identifiant)
    
    # On traite ensuite cet objet, pour en analyser la structure
    page.lignes <- readLines(tc <- textConnection(page.brute))
                   close(tc)
    page.parsed <- htmlTreeParse(page.lignes,
                                 useInternalNodes=TRUE,
                                 asText=TRUE)
    

    La variable page.brute est le contenu de la page web chargée, en HTML. On la transforme en lignes (page.lignes), puis on analyse sa structure (parse). On pourra ensuite appliquer la fonction de lecture simplifiée des tableaux vue précédemment. Mais avant cela on va enlever les accents du texte.

    Enlever les accents

    L’intérêt de cette procédure est d’avoir un contrôle fin sur les opérations de téléchargement et de transformation de la page web. En particulier, on va pouvoir enlever les accents du texte, ce qui évitera toute confusion d’encodage [3].

    On utilise ici une fonction que l’on a détaillée ailleurs, et que l’on appelle Unaccent().

    Le moment le plus propice pour appliquer cette fonction, dans les opérations traitement de la page, est lorsqu’elle est sous forme de lignes, à l’étape page.lignes. Les accents (ou plutôt l’encodage) sont à ce moment correctement traités.

    Le programme intégral

    On reprend ainsi les morceaux présentés plus haut. Au passage, on englobe les opérations dont le résultat ne nous intéresse pas dans une fonction, ce qui évite de les garder en mémoire.

    # Modules utiles
    library(RCurl)
    library(XML)
    
    # Adresse (URL) de la page
    lieux.islam.url <-
      "http://fr.wikipedia.org/wiki/Liste_des_mosqu%C3%A9es_de_Paris"
    
    # Identifiant que l'on enverra à Wikipedia pour se présenter
    # À remplacer par votre email !
    mon.adresse.email <- "mon.adresse@moi.net"
    
    # Définition d'une fonction d'enlèvement des accents (et des '`^")
    Unaccent <- function(text) {
      text      <- gsub("['`^\"]", " ", text)
      text.unac <- iconv(text, to="ASCII//TRANSLIT")
      text.unac <- gsub("['`^\"]", "", text.unac)
      return(text.unac)
    }
    
    # Fonction de téléchargement, enlèvement des accents,
    # et analyse (parsing) de la structure HTML
    GetUnaccentURL <- function(url.page, email='') {
      identifiant <- paste("RCurl", " (",
                           email, ")",
                           sep="")
      page.brute <- getURL(url = url.page,
                           useragent = identifiant)
      page.lignes <- readLines(tc <- textConnection(page.brute))
                     close(tc)
      page.lignes.unac <- Unaccent(page.lignes)
      page.parsed <- htmlTreeParse(page.lignes.unac,
                                   useInternalNodes=TRUE,
                                   asText=TRUE)
      return(page.parsed)
    }
    
    # Téléchargement de la page sur les lieux de culte musulman
    lieux.islam <- GetUnaccentURL(url.page = lieux.islam.url,
                                  email = mon.adresse.email)
    
    # Extraction des tableaux
    mosquees      <- readHTMLTable(lieux.islam, which=2)
    salles.priere <- readHTMLTable(lieux.islam, which=3)
    

    Et voilà [4] !

    On peut maintenant cartographier ces résultats : il suffit de géocoder les adresses obtenues.

    La distribution géographique apparaît clairement localisée dans l’Est parisien, soit les quartiers les moins bourgeois de la capitale ; plus le quinzième arrondissement. Les salles de prière sont globalement situées dans les mêmes quartiers que les mosquées, mais avec de fortes variations.


    1. En deux mots, le problème est le suivant : les fichiers informatiques sont constitués d’octets, des blocs élémentaires de mémoire qui peuvent prendre chacun 256 valeurs. Pour communiquer un texte, il faut transformer la suite des caractères en une série d’octets, donc de valeurs entières entre 0 et 255, et pour cela utiliser un code. Si le code employé pour déchiffrer la suite de ces valeurs numériques n’est pas le même que celui employé la créer, alors cela déforme le texte initial. Les “encodages” désignent, dans le sens usuel (qui est assez imprécis), les différents codes utilisés, dont les plus généraux se nomment ASCII, iso–8859–1 (ou Latin–1), ou encore Unicode / UTF–8.  ↩

    2. Cette méthode n’est pas vraiment un outil de sécurisation : il est possible de déclarer une fausse identité sans difficulté, et le serveur n’a aucun moyen de le contrôler. En réalité, elle est utilisée sur le web avec une visée surtout pratique : en déclarant quel est votre navigateur et sa version (par exemple, “Mozilla/5.0 (X11; Ubuntu; Linux i686; rv : 15.0) Gecko/20100101” désigne Firefox 15.0 pour Ubuntu), le serveur peut savoir comment vous envoyer une page adaptée aux capacités techniques du navigateur, ou au format d’écran de votre machine (ordinateur, téléphone mobile, tablette, etc.).  ↩

    3. Plus précisément, les caractères latins non-accentuées, disons le clavier américain, sont transcrits de la même manière par les différents encodages occidentaux standards. On peut donc se tromper d’encodage dans l’interprétation de tels textes, le résultat est toujours correct. Désaccentuer un texte permet ainsi de ne (presque) plus se soucier des questions.  ↩

    4. On aurait pu, en réalité, éviter d’enlever les accents, en appliquant la transformation suivante à la fin (et avec un équivalent pour salles.priere) : for(i in 1:length(mosquees)) {mosquees[[i]] <- iconv(from="UTF-8", to="LATIN1", mosquees[[i]])}. Celle-ci est applicable au résultat de l’extraction directe des tableaux, mais ne permet pas de se conformer à la politique d’identification de Wikipédia.  ↩

    La féminisation des revues de sociologie depuis 1960

    Billet écrit par B. Coulmont, A. Hobeika et É. Ollion, et publié conjointement sur http://coulmont.com et http://data.hypotheses.org

    Dans un récent article (PDF), West (un biologiste, pas la sociologue du genre) et ses collègues montraient à partir des articles de JSTOR que si le sex-ratio évolue sensiblement au cours des dernières décennies, l’égalité n’est pas encore de mise entre hommes et femmes dans les publications. Ils soulignaient en particulier que les hommes sont toujours sur-représentés dans des positions de prestige (premier et dernier auteur).

    Qu’en est-il en France ? Partant d’une base des revues de sciences sociales françaises compilée par A. Hobeika et E. Ollion dans le cadre d’une recherche en cours sur l’histoire de la discipline par ses publications[1], on obtient une image de la sociologie dans le temps.

    D’un point de vue global, au cours des années soixante aux années quatre-vingt-dix, la féminisation progresse, mais très lentement : 81% des auteurs sont des hommes dans les années 1960, ils ne sont plus que 71% dans les années 1990[2].

    pie60s

    pie90s

     

     

    La féminisation est aussi très inégale suivant les revues. Certaines (Archives de sciences sociales des religions, Économie et statistique, Population) voient la part des auteures féminines augmenter substantiellement, alors que d’autres restent des bastions masculins (comme les Actes de la recherche en sciences sociales et la Revue française de sociologie)[3].

    paletteRdYlBu

    Déterminer le sexe des auteurs à partir de leurs prénoms ?

    Pour établir le sexe des auteurs, nous nous sommes appuyés sur leur prénom, méthode utilisée par West (cité plus haut) ou par Carrasco pour retrouver le sexe des pacsés [Carrasco V., 2007. — « Le pacte civil de solidarité : une forme d’union qui se banalise ». Infostat justice, 97 pp. 1–4.]

    Mais quand on cherche à inférer le sexe du prénom, plusieurs méthodes sont possibles.

    La première consiste à faire ce codage manuellement : la familiarité avec la discipline permet de savoir que Claude Poliak n’a pas le même sexe que Claude Dargent, que Dominique Méda et Dominique Wolton non plus. Mais c’est très chronophage.

    Parmi les techniques de codage automatique, deux autres sont possibles. On peut établir une liste de prénoms indiscutablement sexués (Baptiste, Yvette, Émile) à partir d’annuaires, et leur attribuer une valeur (M/F ou 0/1), laissant indéterminés les prénoms épicènes. Toutefois, si on dispose du fichier des prénoms (INSEE), une autre possibilité est d’associer à chaque prénom un score (de féminité, de masculinité) en fonction de son usage social : ainsi 99,95% des Catherine, au XXe siècle en France, ont été déclarées à la naissance comme étant du sexe féminin ; ce chiffre est de 0,08% pour les Simon. Les Dominique sont à 41% des filles, les Claude le sont à 12%, etc. Utiliser cette méthode revient donc à supposer que les prénoms des sociologues ont la même fréquence d’utilisation pour des hommes/femmes que dans la société française toute entière, ce qui semble raisonnable.

    On a ici mené un test de ces méthodes, en recodant manuellement le sexe des auteurs pour une revue, la Revue Française de Sociologie. On compare les résultats à ceux des deux autres procédures. Pour la période 1960-1999, le nombre d’articles de cette revue dans notre base est de 1723. En excluant ceux pour lesquels aucun auteur n’est mentionné[4], on a in fine 1329 prénoms.

    Les trois méthodes donnent sensiblement le même résultat, malgré des nombres de cas différents sur lesquels elles butent (« NA méthode » ci-dessous). Avec 17 prénoms non-détectés seulement (parfois répétés, d’où les 28 NA), le fichier des prénoms (INSEE) apparaît comme une solution à la fois commode et efficace pour un traitement automatisé tel que celui qu’on vient de faire[5].

    Codage manuel Liste restreinte de prénoms Fichier des prénoms
    Homme 79.08 78.64 78.67
    Femme 20.92 21.35 21.33
    Nb. individus 1329/1723 1063/1723 1301/1723
    Infos manquantes 394 394 394
    NA méthode 0 266 28

     

    Des chiffres sur la situation dans la sociologie étasunienne, calculés avec des méthodes similaires, sont disponibles chez Neal Caren et chez Philip Cohen.

    Et ci-dessous le graphique avec l’ensemble des revues de sociologies prises en compte dans l’analyse (cliquer pour agrandir).
    All-BuYlRd


    [1] Elle recense les publications dans les revues de sociologie française depuis les années 1960 (articles et symposiums, mais pas compte-rendus). La base est organisée par signatures : chaque ligne désigne un auteur et un article (par exemple, Bourdieu P. & Wacquant L. 1999 donne lieu à deux lignes dans la base : une pour chaque auteur).

    [2] La base recense plus de 20 000 articles et comptes-rendus dans une vingtaine de journaux : Agora, Actes de la Recherche en Sciences Sociales, Archives de Sciences Sociales des Religions, Critique internationale, Déviance et société, Espace population et sociétés, économie et statistiques, Genèses, Pôle Sud, Politix, Population, Réseaux, la Revue Française de Sociologie, Sociétés contemporaines, Sociologie et santé, Tiers-Monde. Elle s’appuie largement sur les données du site Persée, complétées ponctuellement pour les revues qui en sont absentes.

    [3] Dont B. Lahire disait récemment qu’elles étaient « les deux revues françaises de sociologie les plus académiques »).

    [4] Soit il n’y en avait pas, soit on n’a pas réussi à le dissocier du nom dans les rares cas où les deux n’étaient pas clairement séparés. C’est une limite de ce traitement complètement automatisé, même si on a de bonnes raisons de penser que cela ne change rien aux résultats présentés ici.

    [5] Si les prénoms sont à l’avenir plus épicènes, alors cette méthode pourrait s’avérer problématique. Elle l’est parfois entre pays, Jean Leca n’étant pas du même sexe que Jean Comaroff.

     

    Enlever les accents (avec R)

    En travaillant dans un langue autre que l’anglais, on est souvent amené à fréquenter des caractères exotiques : lettres munies d’accents (é), tildes (ñ), ronds (Å) et autres barres (ø) – sans compter les formes non-latines (de ∆ à भैं, en passant par ش). Mais comme l’informatique moderne a été développée avec des claviers étas-uniens, leur traitement ne va pas sans difficultés.

    Des procédures standardisées, dites d’encodage, permettent d’utiliser ces caractères dans des textes ou des bases de données. Toutefois, dans le cas du français, le plus simple est bien souvent d’enlever les accents, si bien sûr on ne perd pas d’information cruciale au passage.

    R permet d’effectuer cette opération, grâce à la fonction iconv munie d’une option de translittération : é est ainsi transformé en ´e, par exemple. On enlève ensuite les apostrophes (et équivalents) pour compléter la procédure de désaccentuation. Pour le faire de manière systématique, on définit la fonction suivante:

    Unaccent <- function(text) {
      text <- gsub("['`^~\"]", " ", text)
      text <- iconv(text, to="ASCII//TRANSLIT//IGNORE")
      text <- gsub("['`^~\"]", "", text)
      return(text)
    }
    

    Il suffit d’exécuter ces quelques lignes au début d’un script R et cette fonction Unaccent devient disponible pour toute la suite de votre programme. Trois remarques:

    • Elle ne fonctionne que pour les caractères latins.
    • Les apostrophes et guillemets anglais sont également évacués, et remplacés par des espaces.
    • Vous venez de créer une fonction en R, un outil très utile qui permet d’empaqueter un ensemble d’instructions (éventuellement long) plutôt que de les réécrire à chaque fois.

    Son utilisation donne ainsi :

    > Unaccent("à é î ø ü ç ß ñ ƒ")
    [1] "a e i o u c ss n f"
    
    > Unaccent("J'ai dévoré les Grundriße")
    [1] J ai devore les Grundrisse

    Attention, les caractères non-latins sont purement et simplement effacés :

    > Unaccent("∆")
    [1] ""

    Il est possible de travailler en gardant l’ensemble des caractères et des accents, mais cela nécessite d’être extrêmement soigneux dans la manipulation des encodages, voire des expressions régulières. Ces sujets, très techniques, seront abordés prochainement. Mais si vous pouvez y échapper, profitez-en !

    Alexandre Hobeika

    Docteur en sociologie politique de l'EHESS, CMH-ETT

    More Posts - Website

    Sciences sociales et internet : actualités

    Après une période période pionnière, les sciences sociales de l'”internet” connaissent une croissance rapide. Ce mois-ci, plusieurs publications ou événements montrent la structuration rapide de ce sous-champ émergent.

    Conférence

    La conférence Penser l’écosystème des données, sur les enjeux de la libération des données, aura lieu toute la journée du 14 février à Paris. Elle réunira de nombreux chercheurs de SHS intéressés à la production et aux usages multiple des informations numériques. Interdiscipinaire, la conférence est aussi internationale et promet d’être riche. À ne pas rater (attention, il faut s’inscrire).

    Manuel

    Ce Manuel d’analyse du web, ouvrage collectif dirigé par C. Barats (Paris-V), propose une série d’analyses sur le web pour les chercheurs en sciences sociales. Les différentes contributions, rédigées par des spécialistes français du domaine, montrent bien le double objectif de l’ouvrage. Il s’agit en effet de présenter des outils et des méthodes d’analyse du web, mais tout autant de prendre internet et ses usages comme objets.

    Une première partie présente certains enjeux théoriques, mais aussi méthodologiques. Une section méthode est elle consacrée à différentes techniques d’analyses du web (textométrie, sémiologie, et ethnographie). Les contributions de la dernière partie présentent elles des méthodes d’approche plus quantitatives des usages du web. Les contributions, courtes, rendent la lecture facile et permettent de naviguer facilement dans l’ouvrage. Par ailleurs, des encadrés complètent les textes en informant, au-delà de la réflexion méthodologique, sur les outils concrets disponibles.

    Revue

    Enfin, on peut mentionner la naissance de la revue en ligne RESET, explicitement consacrée aux Recherches en Sciences Sociales sur l’Internet. Les appels à contributions pour les numéros à venir montrent le spectre large couvert par la revue : famille, troubles mentaux et jeux en ligne, etc. Le premier numéro traite d’internet et classes sociales, avec là aussi une grande variété : pratiques numériques des adolescents, ségrégation spatiale, et même un texte sur Bourdieu et les rencontres en ligne (plutôt La distinction 2.0 que l’e-Bal des célibataires).

    étienne

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

    More Posts

    Des adresses à la carte : géocoder avec R et Google Maps

    Comment faire pour représenter des données dont on connaît l’adresse ? Si on veut les cartographier, il faut géocoder ces adresses, c’est-à-dire en obtenir les latitude et longitude. De nombreux sites existent pour cela, comme GetLatLon, simple et efficace pour une utilisation ponctuelle. D’autres outils permettent d’automatiser le processus et ainsi de traiter un grand nombre d’adresses.

    Pour R, il existe la fonction geocode, du module dismo[1]. Elle permet de facilement trouver ces informations, pour peu qu’on dispose d’une adresse précise. Par exemple, si on veut connaître les coordonnées du désormais trop célèbre village de Bugarach, il suffit de rentrer la requête suivante :

    library(dismo) 
    bugarach.latlon <- geocode(“Bugarach, France”, oneRecord=TRUE)

    L’option oneRecord permet de ne retenir que le premier résultat trouvé. Si on l’omet, on peut obtenir une pluralité de résultats, à trier ensuite manuellement.

    Les deux services mentionnés ci-dessus utilisent les données de Google Maps. Ils ne sont donc qu’une manière rapide de chercher dans cette base de données – et s’ils sont gratuits et efficaces, c’est parce que l’accès à cette base de données l’est elle-même.

    Plus précisément, le travail qu’ils effectuent en coulisses consiste à se connecter à l’API de Google Maps, et d’y adresser une requête en bonne et due forme, puis en traduire la réponse sous une forme simple. Une API (Application Programming Interface, interface de programmation) est, dans ce contexte, l’équivalent informatique d’un guichet : elle a ses conditions d’ouverture et d’accès (est-ce qu’il faut s’identifier, combien de requêtes sont autorisées sur une période de temps donnée, à quels tarifs, etc.), et ses “formulaires”, c’est-à-dire la forme que doivent prendre les requêtes, et celle selon laquelle sont renvoyées les réponses. Bref, c’est la manière de communiquer avec une boîte noire[2].

    Il existe plusieurs autres bases de données cartographiques, et une multitude de services de géocodage associés ; voir ce blog pour un comparatif des différents services gratuits. On présente ici quelques lignes de code R qui permettent d’interroger directement l’API de Google Maps avec R, et d’en exploiter (un peu) plus complètement les possibilités.

    Un exemple : les lieux de culte à Paris

    Dans l’exemple qui suit, on cherche à cartographier les lieux de culte à Paris. Par souci de simplicité, on part de données disponibles sur Wikipédia : une page y recense environ 250 édifices religieux à Paris. Il y a certainement bien plus de lieux de culte ; cette liste n’est probablement pas exhaustive, ni particulièrement claire. Elle a cependant le mérite de comporter des informations sur les grandes religions monothéistes, et se prête bien à la cartographie, donc elle nous suffira pour aujourd’hui.

    Concernant l’adresse, l’information y est relativement précise, mais pas parfaite : on a un nom, parfois une rue, mais pas l’adresse exacte. Quoi qu’il en soit, la première étape est de récupérer ces données par un petit programme, et d’en faire un fichier importable sous R[3]. Ce fichier est disponible ici, mais pour plus de facilité, on l’importera directement avec R dans un instant.

    C’est de ces données imparfaites qu’on part. Mais Google Maps a l’avantage d’être assez précis, même à partir de données approximatives.

    Interroger Google Maps par son API

    On va donc demander nos informations à l’API Geocode de Google Maps, qui est gratuite jusqu’à un certain seuil, et sur laquelle on peut facilement multiplier les requêtes : jusqu’à 2500 par jour, sur un même ordinateur – la fonction geocode du package dismo, utilisant le même service, est elle aussi limitée de cette façon. Pour travailler avec plus de données, il faudrait soit payer, soit utiliser un autre moteur de recherche (Yahoo permet 50.000 requêtes gratuites par jour, Bing 10.000 ; OpenStreetMap 86.400).

    Une API, comme on l’a dit, est une sorte de guichet. Les informations échangées ont ainsi l’air barbare, mais se comprennent, comme les formulaires administratifs, en lisant patiemment les modes d’emploi. Ici, l’API s’utilise simplement en demandant l’ouverture d’une page web. “L’adresse” de cette page est en réalité le contenu de la requête, formulée selon une syntaxe spécifique. On lit dans la documentation que celle-ci est de la forme suivante :

    http://maps.googleapis.com/maps/api/geocode/xml?address=LIEU&sensor=false

    où on remplace LIEU par le lieu dont on veut déterminer les coordonnées (soit ce qui est dans la troisième colonne du tableau, dans l’image ci-dessus). Il n’y a pas besoin de beaucoup nettoyer ces noms de lieux, par exemple enlever les accents n’est pas nécessaire. Comme tout est à Paris, pour plus de précision on ajoutera également le nom de la ville à la fin de l’adresse, et celle du pays (et nous épargner ainsi le tri parmi les villes homonymes du Texas ou de l’Illinois).

    # Lecture du fichier de données
    lieux.culte <- read.csv("http://jourdan.ens.fr/~eollion/documents/culte.csv")
    
    # On crée une variable vide, qui va contenir les requêtes
    requetes <- NULL
    
    # Traitement de chacune des adresses
    for(i in 1:nrow(lieux.culte)) {
    
      # Lit l'adresse, et remplace les espaces par "+" (syntaxe de l'API)
      lieu <- lieux.culte[i, "ADRESSE"]
      lieu <- gsub("\\s+", "+", lieu)
    
      # Construction de la requête
      requetes[i] <- paste("http://maps.googleapis.com/maps/api/geocode/xml?address=",
                           lieu,
                           ",+Paris,+France",
                           "&sensor=false",
                           sep="") 
    
    }

    En deux mots, cette partie du programme: crée une variable (requetes), copie grâce une boucle (for) la variable ADRESSE de chaque ligne du tableau lieux.culte tiré de Wikipédia, en la mettant en forme pour l’API, c’est à dire en remplaçant les espaces par des +. On peut le vérifier en examinant le vecteur requetes obtenu :

    [1] "http://maps.googleapis.com/maps/api/geocode/xml?address=Pagode+de+Vincennes,+bois+de+Vincennes,+Paris,+France&sensor=false"
    [2] "http://maps.googleapis.com/maps/api/geocode/xml?address=Temple+bouddhique,+dalle+des+Olympiades,+Paris,+France&sensor=false"
    [3] "http://maps.googleapis.com/maps/api/geocode/xml?address=Temple+taoiste,+rue+du+Disque,+Paris,+France&sensor=false"

    Collecter les données géographiques pour chaque adresse

    Si on ouvre l’une de ces "adresses" dans un navigateur, le site nous renvoie une page (en réalité un fichier XML), qui contient plusieurs informations, dont les coordonnées lat/lon. Le but maintenant est de les extraire de chacune de ces pages. C’est encore une fois assez simple, puisque les données sont structurées clairement, et toujours de la même façon. C’est ce que fait le code suivant :

    # Module nécessaire à l'exploration des résultats
    library(XML)
    
    # Variable dans laquelle on va stocker les résultats
    lieux.culte.latlon <- NULL
    
    # Traitement de chacune des requêtes
    # - ATTENTION : prend environ 10 minutes ici
    for(i in 1:length(requetes)) {
    
      # Envoie la requête, reçoit la réponse, analyse sa structure
      reponse.xml <- readLines(requetes[i])
      reponse <- xmlTreeParse(reponse.xml, useInternalNodes=TRUE)
    
      # Traitement des résultats ; on ne prend que
      # la première réponse (result[1] dans ce qui suit)
    
      # On initialise comme NA
      latitude <- NA
      # Si la valeur existe, remplace NA (sinon reste NA)
      latitude <- xmlValue(reponse[["//result[1]//geometry/location/lat"]])
    
      # Longitude : idem
      longitude <- NA 
      longitude <- xmlValue(reponse[["//result[1]//geometry/location/lng"]]) 
    
      # Champ adresse de la réponse : idem
      adresse.recue <- NA 
      adresse.recue <- xmlValue(reponse[["//result[1]//formatted_address"]]) 
    
      # Mise des résultats ensemble, sous forme de dataframe
      latlon.etc <- cbind(lieux.culte[i,], requetes[i], latitude, longitude, adresse.recue)
      lieux.culte.latlon <- rbind(lieux.culte.latlon, latlon.etc)
    
      # Pause de 3 secondes - courtoisie envers le serveur 
      Sys.sleep(3)
    
    }

    Pas besoin de tout comprendre pour s’en servir, mais voici quelques explications tout de même. On crée tout d’abord un objet vide (lieux.culte.latlon), puis on traite une à une les requêtes préparées précédemment (boucle for). La réponse à chacune de ces requêtes est un fichier XML (proche cousin du HTML), dont on analyse la structure en arbre (xmlTreeParse), qui est alors stockée dans l’objet reponse.

    On navigue ensuite, pour récupérer les informations qui nous intéressent, grâce à la syntaxe XPath (un billet bientôt sur ce sujet, mais de nombreux tutoriels sont disponibles, par exemple ici). Une petite précaution (initialiser à NA les variables de résultats) assure que, dans les cas où la donnée recherchée par le chemin XPath spécifié n’existe pas, la valeur indiquée soit NA (ce qui permet de repérer les erreurs facilement).

    Enfin, on colle ces informations et d’autres dans une variable (latlon.etc) pour chaque ligne, qu’il ajoute à l’objet lieux.culte.latlon pour chaque nouvelle valeur de i. Pour terminer, Sys.sleep est une commande qui permet de faire prendre une pause au script (ici de 3 secondes). C’est très conseillé, afin de ne pas trop solliciter le serveur - par courtoisie, et parce que sinon ce dernier pourrait vous refuser l’accès.

    Le résultat est visible dans l’objet lieux.culte.latlon : à côté de l’adresse, vous avez maintenant les coordonnées. La variable adresse permet ici de vérifier que les données correspondent bien spécifiquement au lieu demandé. En effet, dans le cas inverse, ce champ indique seulement Paris (il faut alors recoder à la main, ou préciser quelque chose dans l’adresse).

    On a visualisé les données à l'aide d'une rapide carte. Le premier résultat (voir image en haut de cette page) est qu'il y a des églises un peu partout dans Paris, ce qui n'est pas révolutionnaire. Plus précisément, un zoom sur la zone de la Bastille montre l'alignement de synagogues, certaines dans le Marais, et d’autres à proximité. En revanche, le cas de l'Islam est très mal représenté ici, mais c’est dû à un effet de sources, à savoir qu'on est parti des édifices religieux, et pas des simples lieux de culte ; or la distinction est particulièrement importante dans le cas de cette religion, comme on le verra dans un prochain billet.

    Lieux de culte près de Bastille

    Pour aller plus loin

    On vient, dans cet exemple d’utilisation de l’API de Google Maps, de réinventer la fonction geocode de dismo mentionnée plus haut, tout en contrôlant mieux les résultats obtenus.

    On a ce faisant utilisé une API de type REST, qui est un standard très répandu. Or les autres services que Google, comme OpenStreetMap, MapQuest, Bing, Nokia, etc., disposent rarement d’une fonction directement disponible sous R, mais offrent tous des API, dont souvent l'une de ce type.

    La syntaxe est alors extrêmement proche de celle qu'on a employée ici. Il est alors possible d'utiliser, par exemple, le projet Nominatim de la fondation Open Street Map, dont la limite d'utilisation est d'une requête par seconde (soit 86.400 par jour - ce dernier fait par ailleurs partie d'un projet plus général de mise à disposition gratuite de données géographiques. Les requêtes se font de la même manière, comme l'explique cette page de documentation, et l'extraction des données ne suppose qu'un léger ajustement[4]. Essayez donc !


    1. Merci à Baptiste Coulmont pour l’information.  ↩
    2. Le terme d’API est en réalité utilisé, en informatique, de façon un peu plus large ; toutefois l’analogie du guichet et de la boîte noire reste globalement correcte.  ↩
    3. Voir les tutoriels efficaces de F. Guillem sur son blog
    4. Remplacer xmlValue(reponse[["//result[1]//geometry/location/lat"]]) par xmlGetAttr(reponse[["place[1]"]], "lat") pour la latitude, et un équivalent pour la longitude.

    étienne

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

    More Posts

    Comment on écrit le web : structure du langage HTML (1)

    La collecte automatisée de données sur le web consiste à ordonner à un programme d’aller sélectionner des informations bien précises dans une série de pages. Ce billet est une brève introduction à la structure du langage HTML, dans lequel ces pages sont écrites. On aborde les pages simples (la grande majorité d’entre elles), et on abordera plus tard les les pages plus complexes, ainsi que les évolutions contemporaines du langage.

    Quel rapport entre un navigateur et le HTML ?

    Des visualisateurs de code HTML

    Que se passe-t-il quand on utilise le web, par exemple quand vous venez visiter la page de ce billet ? Vous utilisez un navigateur, vous tapez l’adresse de la page, vous pressez entrée ; et après ?

    L’adresse est celle d’un serveur, un ordinateur allumé tout le temps, et appuyer sur entrée revient à lui demander une page particulière. Le serveur nous renvoie alors la page demandée sous forme d’un fichier écrit en HTML : il s’agit d’un langage informatique simple, qu’on va préciser dans une seconde[1].

    Votre navigateur reçoit ensuite ce fichier HTML, qu’on appelle le code source de la page et le transforme en une page mise sous une forme lisible et graphique, que vous avez sous les yeux.

    Le langage HTML est donc une manière de décrire des instructions typographiques pour les pages du web. Il s’est imposé grâce à sa relative simplicité d’écriture et d’interprétation (pour les concepteurs de navigateurs).

    Comme la collecte automatisée de données sur internet consiste souvent à demander à un programme de récupérer des informations dans une série de pages web, c’est-à-dire dans des pages écrites en HTML, il nous faut savoir comment désigner dans ce langage les informations qui nous intéressent.

    Tout ce qui apparaît régulier dans le navigateur, doit être régulier dans le code source

    Un principe fondamental de la collecte automatisée de données est ainsi le suivant : si on observe une certaine régularité formelle sur une page web affichée par un navigateur, alors celle-ci doit exister dans le code source de la page. Dans l’imprimerie de système Gutenberg, si on voit des lignes (de texte), c’est que l’imprimeur a utilisé des outils pour créer des lignes (des suites de caractères métalliques de même hauteur). Ici, si on voit à l’écran des blocs de texte similaires alors, comme le navigateur ne fait que traduire visuellement le code source, on doit très probablement trouver des instructions similaires qui correspondent à ces blocs de texte dans le code source.

    La structure du langage

    Les balises HTML

    Le HTML est un langage assez facile d’accès. Son nom est explicite, HyperText Markup Language : HyperText signifie qu’il y a des liens cliquables, et Markup signifie « balises ». C’est donc un langage de balises (avec des liens cliquables). Le point principal est donc de comprendre la notion de balises et l’usage qu’il y en est fait.

    Une structure en arbre

    Les balises sont de la forme suivante :

    <typeBalise>
        Contenu
    </typeBalise>
    

    Trois éléments sont présents : un couple de balises ouvrante et fermante, leur type, et un contenu entre les deux. Ce contenu peut être du simple texte, mais aussi d’autres balises. Ainsi une page HTML a toujours une structure de la forme suivante :

    <tronc>
    
        <branche>
    
            <sousBranche>
                contenu_1.1
            </sousBranche>
    
            <sousBranche>
                contenu_1.2
            </sousBranche>
    
        </branche>
    
        <branche>
            contenu_2
        </branche>
    
    </tronc>
    

    C’est donc une structure en arbre, exactement comme un texte avec des parties et des sous-parties – à la différence que celles-ci peuvent être de plusieurs types : pour poursuivre l’analogie, comme dans les textes de philosophie analytique ou de mathématiques, texte principal, scolie, lemme, démonstration, figues, etc.

    En HTML, les balises peuvent être d’un ensemble limité de types, qui correspondent à des instructions typographiques : div = bloc, a = lien, etc. ; <tronc>, <branche>, <sousBranche> et <typeBalise> n’existent pas en réalité[2].

    Les espaces et sauts de ligne n’ont pas d’importance, on n’adopte cette présentation que pour le rendre plus lisible ; le code suivant a la même signification :

    <tronc>
        <branche>
            <sousBranche>contenu_1.1</sousBranche>
            <sousBranche>contenu_1.2</sousBranche>
        </branche>
        <branche>contenu_2</branche>
    </tronc>
    

    On pourrait même écrire tout à la suite, en enlevant tous les espaces et sauts de ligne ci-dessus, ce serait inintelligible mais techniquement correct.

    Les attributs de balises

    Remarquez que jusqu’ici, seuls les types des balises sont présents, elle n’ont pas d’identifiant particulier, et rien ne permet de différencier la première branche de la deuxième, si ce n’est qu’elle est placée avant dans le code – ce qui est un moyen réel de l’identifier, bien que pas très pratique. C’est l’intérêt des attributs de balises.

    En effet, les balises peuvent s’écrire plus complètement de la façon suivante, par exemple pour une balise de type div :

    <div class="titre_1">
        Texte, sous-branches…
    </div>
    

    Dans la balise ouvrante, on peut ajouter des attributs, qui servent à enrichir leur description et à faciliter leur identification. Dans la page actuelle, vous pouvez vérifier que les titres de deuxième niveau sont repérés par des balises <div class="h2">. Un autre exemple est celui des liens hypertexte, qui sont décrits par des balises a, avec l’adresse indiquée comme attribut href (hypertext reference) ; voici comment on écrit ce lien renvoyant vers cette page :

    <a href="http://data.hypotheses.org/243">
        lien renvoyant vers cette page
    </a>
    

    Ce qui identifie une balise

    On a ainsi les trois éléments pour identifier une balise, qui sont :

    • Son type (div, p, a, etc.),
    • Ses attributs éventuels (class, attr, href, etc.),
    • Le contenu de texte et les sous-branches qui y naissent.

    Pour des branches (ou sous-branches) formellement identiques, comme dans l’exemple vu précédemment, il nous reste l’ordre dans lequel celles-ci apparaissent dans le code HTML.

    Avec ce système d’identification, on aura toujours au moins une manière, et souvent plusieurs, de repérer une ou plusieurs balises, celles dont on voudra collecter automatiquement les données.

    Dans la pratique

    La tête et le corps

    La structure d’un fichier HTML est standardisée. Elle est de la forme :

    <!DOCTYPE html (…)>
    <html>
        <head>
            <meta> …
            <meta> …
            <link type="text/css" href="http://…">
        </head>
        <body>
            <div>
                <h1> Titre </h1>
                <p>
                    Texte 
                </p>
            </div>
            …
        </body>        
    </html>
    

    La première ligne (DOCTYPE) désigne la version du langage HTML que la page utilise. On n’aura jamais à s’en servir. Ensuite le contenu de la page est situé entre les balises html. Ce tronc se divise en deux branches : head, puis body.

    La branche head contient un ensemble d’informations sur la page (balises meta), des instructions de mise en page (chargées avec link), etc., mais aucun contenu affiché.

    Toutes les informations affichées, comme le texte, les images, sont décrites dans la partie body.

    Les balises réelles courantes

    Celui-ci est construit avec les balises du langage. Il n’est pas indispensable de les connaître pour faire de la collecte automatisée de données. À titre indicatif voici le plus courantes :

    • <div> : un bloc rectangulaire de la page, contenant du texte ou des images ; souvent l’attribut class (ou parfois id) est présent ;
    • <a> : un lien hypertexte, renvoyant vers l’adresse indiquée par l’attribut href ;
    • <h1>, <h2>, <h3>, etc. : des titres, de niveaux décroissants ;
    • <p> : un paragraphe de texte ;
    • <ul>, <ol> : une liste, respectivement sans et avec numérotation ;
    • <img> : une image ;
    • <!-- … --> : un commentaire, c’est-à-dire du texte que le navigateur ignore.

    Il existe d’autres balises, et chaque nouvelle version du langage en apporte pour simplifier l’écriture et étendre les fonctionnalités disponibles (voir l’histoire du HTML). De nombreux manuels existent en ligne. Le plus simple est de vous y référer si besoin, ou simplement de rechercher sur un moteur de recherche la signification d’une balise, comme le font tous les programmeurs.

    Comment se fait la mise en page (facultatif)

    Pour être complet, mentionnons, sans rentrer dans les détails, qu’il existe deux manières de préciser les instructions de mise en page – par exemple pour un bloc <div> : ses dimensions, sa couleur de fond, etc.

    La première manière est de spécifier ces instructions comme attributs de la balise, directement dans le code HTML, par exemple : <div style="width:100px;border:1pxsolidblack">. Le HTML des années 1990 est écrit de cette manière lourde et pédestre, et on rencontre encore des pages sous cette forme.

    La seconde consiste à utiliser une feuille de style, au format CSS. Dans ce cas, on précise dans le HTML un attribut du bloc, par exemple <div class="grand"> ; et dans un autre fichier, on précise les propriétés des blocs div possédant l’attribut class ayant la valeur grand, de manière générique. On peut ainsi en écrire plusieurs sans avoir à préciser à chaque fois les propriétés graphiques.

    Dans ce dernier cas, la page web ne se résume donc pas au code HTML, mais est la résultante aussi de la feuille de style (CSS). De manière générale, une page web est décrite par un ensemble de fichiers, dont le HTML est le centre et contient quasiment toutes les informations affichées à l’écran.

    Faire le lien entre le contenu affiché et le code source

    Visualiser le code source

    Une fois arrivé là, le code source d’une vraie page ne devrait plus rien avoir d’effrayant. Pour voir le code de cette page, demander à votre navigateur “Montrer le code source” ; le raccourci clavier est souvent Cmd-U (Mac) ou Ctrl-U (Windows), en ajoutant éventuellement Alt à cette combinaison (Safari ou Chrome, et ça dépend des versions) ; si vous ne trouvez pas, chercher “source” dans l’aide du logiciel.

    Vous devriez obtenir une fenêtre un peu terne, mais qui permet quand même de vérifier ce qu’on vient de présenter.

    Cela dit, ce n’est pas commode à lire. Pour disposer d’outils plus puissants et confortables, on vous encourage très vivement à installer Firebug pour Firefox, ou activer les outils de développeur, pour Safari (dans les préférences, menu “Avancées”, option “Afficher le menu Développement”) ; ou bien pour Chrome ouvrir les “Outils de développement”. Le raccourci clavier est souvent Cmd/Ctrl-(Alt)-I.

    Ainsi, normalement, vous obtenez quelque chose de ce genre-là :

    Inspecteur web de Safari

    À quel morceau de code correspond un élément affiché ?

    Plutôt que de chercher à l’aveuglette à quel morceau de code correspond un élément affiché, on peut utiliser l’inspecteur web. Cliquez sur l’icone en forme de main ( Safari), de rectangle avec une flèche ( Firebug) ou de loupe ( Chrome), puis promenez votre curseur sur les éléments de la page qu’il vous intéresse de connaître : des zones de la page doivent se colorer en bleu. Cliquez ensuite sur un élément, et l’inspecteur web vous indique où se trouve son équivalent dans le code HTML.

    On peut alors observer ce qu’on annonçait au début de ce billet, à savoir que les éléments qui sont affichés de la même manière existent, dans le code source, de façon également similaire. Testez-le par exemple sur la colonne “liens”, dans la colonne de droite de cette page :

    Une fois qu’on a repéré où sont, dans le code source, les informations que l’on veut récupérer, la moitié du chemin est fait. Il reste à savoir comment faire comprendre cette localisation à un programme ; pour cela, on utilisera la syntaxe XPath, qui fera l’objet d’un prochain billet.


    1. Certaines pages sont écrites, totalement ou partiellement, en PHP, un autre langage qui permet d’étendre les fonctions du HTML, et notamment faire communiquer l’utilisateur avec une base de données : cela est utile pour créer des formulaires, par exemple. Le principe est globalement le même : notre navigateur envoie une requête, et le serveur nous renvoie du HTML. Il existe encore d’autres langages pour ajouter des fonctions au HTML, comme le javascript, mais dans quasiment tous les cas on peut se dispenser de les connaître.  ↩
    2. En XML, qui est un cousin du HTML, tous les types sont autorisés.  ↩

    Alexandre Hobeika

    Docteur en sociologie politique de l'EHESS, CMH-ETT

    More Posts - Website