Archives de catégorie : Outils

Analyse quantitative de contenus 2.0

L’analyse quantitative de contenus connaît un renouvellement aussi récent que spectaculaire. Longtemps considéré par certains comme une technique mineure, la lexicométrie revient ainsi sur le devant de la scène. La numérisation automatique de nombreux textes comme les capacités de traitement ont donné une nouvelle jeunesse à ces pratiques désormais bien établies. Plusieurs initiatives démontrent cet intérêt renouvelé.

Une offre de logiciels en hausse

La première, c’est la multiplication des logiciels de lexicométrie. Car, bien qu’ancienne, l’étude quantitative des corpus textuels n’avait jamais complètement pris. Certes, dès les années 1950, le politiste Harold Lasswell la mettait en œuvre et inaugurait l’analyse quantifiée des contenus ; certes, elle avait connu des développement certains dans les années 1990 avec la diffusion de l’informatique, quand des modules avaient été développés pour les principaux logiciels statistiques et que des plateformes comme Prospero ou Alceste avaient été créées pour l’occasion ; certes, des revues publiaient des travaux qui mettaient en avant certains de ces travaux, comme c’est le cas de Mots. Mais ces méthodes n’ont jamais vraiment percé, en dépit des résultats intéressants qu’elles ont pu produire.

Outre une nouvelle version de Prospero en cours de développement chez les spécialistes de socio-informatique des controverses, trois nouveaux projets sont nés ces dernières années, qui offrent la possibilité de faire de l’analyse lexicométrique aisément. Deux sont des logiciels spécifiques : il s’agit d’Iramuteq, le logiciel développé depuis 2008 par Pierre Ratinaud, chercheur en sciences de l’éducation à Toulouse-2 et de TXM, le logiciel développé par une équipe de chercheurs de l’ENS-Lyon.

Des différences existent entre eux, du côté du codage initial (Iramuteq reprend le codage d’Alceste, un autre logiciel de traitement des données textuelles) comme de certaines fonctionnalités. Mais ils sont aussi assez proches. Par leur aspect ouvert et libre d’abord, ce qui n’était pas le cas de nombre de leurs prédécesseurs. L’un et l’autre s’appuient aussi sur le logiciel R, et permettent d’en exploiter les capacités sans en éprouver toutes les difficultés puisque des interfaces graphiques permettent de s’en servir sans programmer. Pour en savoir plus, les sites des logiciels fournissent des exemples et des tutoriels bien faits[1].

Le troisième projet, c’est RTemis (prononcer Artémis), le package R que viennent de créer Gilles Bastin et Milan Bouchet-Vallat, qui dispose lui aussi de son carnet sur Hypotheses. Dans l’esprit de ces promoteurs, RTemis (R Text Mining Solution) se veut être une plateforme gratuite, simple d’usage, dégagée des enjeux théoriques explicites qui gouvernent certains logiciels (Alceste repose sur la théorie des mondes lexicaux, Prospero sur une approche de sociologie des controverses). Il permet aussi une importation simple en acceptant différents formats (.txt, différents formats de texte délimité dont les .csv, mais aussi Alceste ou Twitter). Et il permet aussi une importation rapide depuis les grandes plateformes de référencement de textes médias (LexisNexis, Europresse, Factiva) – attention, plateformes payantes.

À partir de là, il propose toute une série de fonctions destinées à réaliser les différentes opérations standard de préparation du corpus (gestion de la casse, de la ponctuation, des « stopwords » et lemmatisation) ainsi que des outils pour traiter ces données. Je ne m’étends pas sur le sujet car un prochain billet illustrera les usages d’R.Temis, mais je recommande vivement la lecture de l’article de Bastin et Bouchet-Vallat, paru récemment dans le Bulletin de Méthodologie Sociologique. Les auteurs décrivent, statistiques à l’appui, le traitement de l’affaire Julian Assange par différentes agences de presse. Ce faisant, ils montrent en pratique les fonctionnalités du package.

 

Topic Modeling

Si les logiciels précédents améliorent des techniques désormais bien établies, d’autres approches en développement ouvrent elles de nouveaux horizons. C’est le cas du topic modeling, qui permet de déterminer automatiquement les thèmes contenus dans un ensemble de textes, afin d’en saisir leur répartition. La technique, développée depuis une dizaine d’année par David Blei, un informaticien de Princeton, suscite un intérêt croissant. Et ce jusque dans les sciences sociales : un numéro récent de Poetics, lui était justement consacré récemment. Coordonné par John Mohr, un sociologue intéressé de longue date aux formes de quantification en sociologie de la culture, il réunissait une dizaine de chercheurs, moitié sociologues, moitié informaticiens.

Comment fonctionne le topic modeling ? Sans rentrer dans les détails, on peut dire que la technique (qui dispose de modules prêts à l’emploi pour C, Python et R entre autres)

  1. Recherche les mots qui reviennent régulièrement ensemble dans un document
  2. Les rassemble dans un « thème », c’est-à-dire une série d’une dizaine de mots (deux mots peuvent appartenir à un thème). Le chercheur doit alors voir si le thème fait sens, et le cas échéant le nommer.
  3. Mesure la fréquence de chacun de ces thèmes dans chacun des documents du corpus.

 

Sur le plan technique, les résultats sont impressionnants et démontrent les capacités toujours croissantes du Machine Learning, cette branche de l’intelligence artificielle en plein développement. Mais y a t-il un intérêt pour les sciences sociales? Il me semble que les résultats des différents articles de Poetics font sens uniquement parce que les auteurs ont une connaissance du sujet qu’ils traitent, et savent donc sur la base d’une connaissance empirique précise ce qu’ils veulent dire, ou au moins comment sélectionner les informations pertinentes dans le maelström d’informations offertes par les programmes. C’est clairement le cas pour deux articles particulièrement intéressants du numéro : celui de P. DiMaggio et al. sur les discours relatifs aux musées (un sujet dont l’auteur est familier depuis plus de trente ans), ou pour l’article d’E. Marshall sur l’évolution croisée de la démographie en France et en Grande-Bretagne (à laquelle l’auteure vient de consacrer une thèse).

Reste à savoir si le topic modeling peut apporter autre chose qu’un vernis scientisé à des analyses qui seraient déjà plus ou moins établies par les chercheurs par des méthodes plus classiques ? Une présentation Gabriel Lewertowski et Nicolas Bourgeois lors du dernier colloque du SAMM (Statistique, Analyse, Modélisation Multidisciplinaire) semble montrer qu’au-delà de la pyrotechnie, le topic modeling peut effectivement servir la recherche.

À partir d’une étude du corpus du Monde Diplomatique, ils montraient bien l’utilité de ce genre d’analyses. Le graphique ci-dessous représente les résultats relatifs à un thème déterminé automatiquement, mais qui porte sans ambigüités sur le Moyen-Orient. À gauche, on trouve les mots qui constituent le topic (avec un score, qui permet de mesurer sa contribution au thème). A droite la répartition dans le temps. À partir de là, les utilisations sont nombreuses : on peut chercher à voir le rôle d’un auteur ; les variations de ligne éditoriale ; le type d’item consacré à ce thème (dossier, article, encadré, tribunes, etc.). Ou, pour une période donnée, on peut réaliser des mesures qui relient des thèmes à leurs auteurs, afin de saisir les vecteurs d’importation comme la division du travail au sein d’une rédaction. Bref, la sociologie du journalisme, celle de l’expertise et la sociologie des idées (pour ne citer que quelques sous-domaines) pourraient tirer profit du topic modeling, surtout que se développent des techniques qui permettent d’éprouver la significativité des résultats. Affaire à suivre donc !

 

SAMM-TM

 


[1] On trouve aussi de nombreux conseils sur le carnet Devenir historien-ne, de la plateforme Hypotheses.

étienne

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

More Posts

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

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

CAC

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

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

Préparer les données

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

matrice

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

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

Le cas des listes simples

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

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


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

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

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

list-table

 Listes multiples

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

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

head.sombrero

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


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

 

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

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

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

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

Marseille - 2mode


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

étienne

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

More Posts

Les calculs dans les nuages (2) – Tutoriel

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

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

1. Ouvrir un compte chez AWS.

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

2. Aller sur la page de Louis Aslett

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

3. Sélectionner une instance

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

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

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

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

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

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

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

4. Détails

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

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

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

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

5. Configure Security Group

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

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

 

Screen Shot 2013-12-16 at 7.51.11 AM

 

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

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

Quelques petits conseils avant de démarrer

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

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

étienne

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

More Posts

Les calculs dans les nuages

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

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

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

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

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

Louer un supercalculateur depuis votre bureau

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

Quelle offre choisir?

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

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

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

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

À quel prix ?

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

 

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

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

 

étienne

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

More Posts

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

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

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

Et pourtant, ils mentent…

Âges déclarés et sites de rencontres : une procédure de collecte automatisée de données

S’il est un fait sur lequel s’accordent toutes les études sur les sites de rencontre, c’est la tendance de leurs utilisateurs à sous-déclarer leur âge. Il est souvent démontré en comparant les profils en ligne à une source d’information plus fiable, le plus souvent un entretien. On propose de retrouver ce résultat  à partir d’une analyse quantitative faite à distance, sans rencontrer d’usager de ces sites, et en quelques minutes. Disons le immédiatement, les résultats obtenus sont moins riches et plus incertains qu’une véritable enquête. Mais parce que l’objectif est d’illustrer les techniques de collecte automatique de données, on repart de ce fait bien établi pour proposer une méthode pas-à-pas.

Lire la suite sur Quanti

Vers une data-sociologie?

Pierre Mercklé vient de publier (sur Quanti) une présentation que nous avions faite en juin sur le thème des « big data » en sciences sociales. Elle propose un premier tour d’horizon des outils de collecte automatisée de données sur internet et évoque plusieurs enjeux dont il sera question ici

Ces vingt dernières années ont vu le développement de techniques et d’outils informatiques qui permettent d’automatiser la collecte et la mise en forme de données, en particulier celles provenant d’internet[1]. Plus puissantes et plus faciles d’accès, ils sont aussi de plus en plus utilisés dans de nombreuses professions. Leur diffusion intéresse donc les chercheurs en sciences sociales, à la fois parce qu’elles permettent de collecter rapidement des informations sur divers aspects du monde social, mais aussi parce qu’elle conteste un peu plus leur monopole dans la production de données quantitatives. On se propose ici de réaliser un rapide tour d’horizon sur cette question qui souligne le potentiel, et évoque certains enjeux, du recours croissant à ces méthodes pour nos disciplines…. Lire la suite sur Quanti

Voir aussi les remarques et compléments apportés sur Polit’bistro

étienne

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

More Posts

Mesurer l’espace télévisuel accordé à un sujet

Cet exemple condense trois des éléments qui sont développés dans ce blog : la présentation d’une base de données publique et son utilisation; des éléments de programmation, et des résultats de visualisation des données.

Les émissions de télévision, un matériau sous-exploité

Beaucoup de chercheurs en sciences sociales sont amenés à s’intéresser au traitement médiatique d’un sujet donné. Pour les sources, si les dépêches d’agence étaient autrefois privilégiées du fait de leur brièveté, c’est aujourd’hui vers la presse écrite qu’ils se tournent majoritairement. Il s’agit en effet d’une source commode d’accès : bien archivée, disponible de façon exhaustive en bibliothèques et de plus en plus directement sur internet et interrogeables par mots-clés (Factiva, par exemple).

Cependant, on pourrait contester cet usage privilégié :

  • le public touché est très restreint par rapport à celui de la télévision, et cet écart ne fait que s’accroître
  • méthodologiquement, le contenu textuel brut est long et malaisé à traiter. En particulier, il ne peut — sauf à recoder intégralement — distinguer les usages propres et figurés d’un mot (et donc faire la différence entre deux occurrences aussi différentes que « le danger des sectes » et « François Bayrou, chef de secte », la première seulement étant intéressante pour nous)

Les contenus télévisuels sont paradoxalement très peu représentés dans les études quantitatives qui prennent les médias pour objet. Pour paraphraser Solow, on pourrait presque dire que la télévision est partout, sauf dans les statistiques des chercheurs en sciences sociales. Le problème principal est d’ordre technique : comment coder et synthétiser rapidement l’information sur les programmes télévisuels ?

Une source commode et fiable : la base de l’INA

Complétude

En France, l’existence et l’accessibilité des archives de l’Institut national de l’audiovisuel (INA) permettent fournir de pallier cette difficulté. Au titre du dépôt légal de l’audiovisuel français, l’INA conserve l’ensemble des programmes diffusés par les différentes chaines de télévision ou de radio. Le recensement opéré est ainsi a priori complet, et chaque document est déjà codé de manière relativement fiable, précise et complète, par mots-clefs et selon diverses informations (chaine de diffusion, durée, type d’émission…).

Fiabilité

Le codage est réalisé par le personnel au moment du dépôt des fichiers. Certes imparfait (les fiches sont remplies par des personnes différentes, sur une période de plus de quinze ans), il est cependant relativement efficace. Les recoupements ponctuels effectués sur la base des recensions faites par d’autres moyens montrent que le codage n’est pas arbitraire, et que la chronologie que l’on peut en tirer correspond assez bien à celle obtenue par d’autres moyens. De fait, tout sujet relativement institué, même s’il a des frontières floues, a de bonnes chances d’être bien représenté. C’est par contre moins vrai des « nouveaux » sujets : il faut sûrement attendre qu’un « problème public » soit reconnu comme tel pour qu’on puisse trouver une notice qui le mentionne). De manière générale, il est de bonne politique de chercher à « étendre » les mots clés, c’est-à-dire de faire des requêtes pour des termes proches (par exemple, pour secte : gourou, manipulation mentale, etc.), et de compiler tous les résultats obtenus.

Accessibilité

Si l’INA est une institution accueillante[1], il se trouve que depuis peu, une partie de sa base de données est accessible directement et gratuitement par internet. La période couverte commence au 1er janvier 1995, et la base recense les différents médias hertziens et câblés ainsi que les radios, au fur et à mesure de leur création. La recherche par mots-clefs permet donc une étude rapide et exhaustive sur un terme donné.

Un petit obstacle technique

Comment télécharger les résultats correspondant à une requête particulière, pour les traiter finement (nettoyages, tris croisés, représentations graphiques) ? Ceux-ci sont présentés sous la forme d’un tableau de texte, qui devrait être simple à utiliser, par un copier-coller dans un tableur par exemple.

Malheureusement, cela se révèle impossible, pour des raisons liées au fonctionnement du site[2]. Cependant, comme le navigateur affiche une forme régulière (tableau), il doit bien y avoir un moyen de récupérer les données affichées en gardant la régularité de cette forme.

On se propose de présenter ici une procédure simple qui permet de résoudre ce problème. Elle passe par le recours à quelques lignes de programmation, ici en R. On présente ici rapidement le code, qui est réutilisable tel quel. L’explication détaillée de tous les élélemnts de la syntaxe fera l’objet de prochains billets.

Une procédure de collecte automatisée des données

Faire une recherche sur le catalogue en ligne

Dans le cadre d’une recherche sur la question des sectes en France, on a tenté de trouver une manière de faire une étude exhaustive des émissions télévisuelles sur le sujet. Une fois connecté au catalogue en ligne, on saisit alors la requête que l’on souhaite effectuer dans un formulaire simple. Ici, on veut obtenir toutes les occurrences du terme « secte » ou « sectaire » (au singulier et au pluriel), du 1er janvier 1995 au 31 décembre 2010, sur les chaines hertziennes.

Formulaire de requête sur la base de l’Inathèque

On obtient environ 2500 résultats, qu’on veut conserver afin de les consulter ; on clique alors sur « Afficher tous les résultats ». Le navigateur affiche lentement l’ensemble de la page (plusieurs minutes parfois), et c’est cette page que l’on va manipuler pour ensuite pouvoir l’ouvrir avec un tableur classique ou un logiciel de statistiques. Notons pour l’instant l’adresse (URL) de cette page, qui est de la forme http://inatheque.ina.fr/Ina/ws/dltv/dlweb/general avec de nombreux signes cabalistiques après (si vous regardez bien, vous verrez les mots que vous avez demandé entre deux signes %).

Extraire les données de la page web

On va ensuite travailler avec R, à partir de cette URL, pour la traduire en un fichier lisible par un tableur (au format .csv : simple fichier texte où les données sont séparées par des points-virgules).

Installer R

Pour l’installation et les premiers usages de R, on se permet de renvoyer au site du programme. On suppose aussi que vous disposez d’un tableur (de type Excel ou, mieux, Libre Office). Pour faire fonctionner le programme, il faut en plus installer deux modules[3] spécifiques de R : RCurl et XML, qui permettent de télécharger la page web et d’en extraire les informations qui nous intéressent.

Charger la page et en extraire les informations

Un petit programme permettant de télécharger et traiter la page dont on a noté l’URL :

library(RCurl)
library(XML)

webpage <- getURL("http://inatheque.ina.fr/Ina/ws/dltv/dlweb/general/ResultSet?rpp=-50&upp=0&w=NATIVE%28%27ITOUSTEXT+ph+like+%27%27secte%27%27%2C%27%27sectes%27%27%2C%27%27sectaire%27%27%2C%27%27sectaires%27%27%27%29&r=1", .encoding="LATIN1")
page <- readLines(tc <- textConnection(webpage)); close(tc)
arbre.page <- htmlTreeParse(page, useInternalNodes = TRUE)

emissions <- xpathSApply(arbre.page,
                         "//div[contains(@class, 'result_line')]",
                         xmlValue)

emissions.clean <- gsub("\\t|\\n", "", emissions)
emissions.final <- gsub(" {20,180} ", ";", emissions.clean)

write.csv(emissions.final,
          file="/Users/eollion/SectesTV/INA-sectes.csv",
          fileEncoding='latin1')

Les deux premières lignes chargent les modules. L’opération de téléchargement de la page s’effectue ensuite (getURL), puis on analyse la structure de la page web chargée (on parse du HTML).

Le bloc suivant (xpathSapply) sélectionne ce qui correspond aux lignes du tableau affichées dans le navigateur. Elles sont identifiées d’une certaine manière dans le code HTML pour être affichées sous forme de lignes, et c’est ainsi qu’on peut les repérer ; ça paraît obscur, mais il y a des outils pour se repérer et écrire ce genre de commandes assez facilement. Voir chez François Guillem pour des bonnes premières explications sur ce point.

Ce qu’on a récupéré dans emissions ressemble presque à ce qu’un navigateur afficherait, sauf qu’ici les écarts de position sur la page sont représentés par des espaces. Il suffit de les remplacer par des points-virgules, et après un peu de nettoyage d’espaces, on a le notre tableau sous format .csv. Il ne reste plus qu’à l’écrire dans un fichier en sortie.

Voilà, normalement on peut ouvrir le fichier produit dans un tableur, et en principe tout va bien, y compris les accents (il se peut qu’Excel soit capricieux, on verra plus tard comment contourner ça). On peut alors faire un peu de nettoyage si nécessaire, et de recodage, par exemple les chaînes (rechercher « La Cinquième » et remplacer par « France 5 », etc.), ou pour mettre ensemble des « types » d’émissions proches.

Après constitution de la base, nettoyage et recodage de celle-ci, on en a conservé 1834 entre le 1er janvier 1995 et le 31 décembre 2010. La table est donc prête, on peut procéder à des représentations graphiques, ou des statistiques, et commencer les analyses sociologiques.

Les graphiques ci-dessous sont un exemple de visualisations possibles et rapides grâce à ggplot, moyennant quelques manipulations, que l’on abordera prochainement.

 

Représentation par chaine
Histogrammes

 


Représentation par type de programme et par chaine
Polygones de fréquence

 

Représentation par chaine

Nombre de programmes par jour
(période de 2 mois)

 


  1. De nombreux chercheurs ont d’ailleurs tiré profit des opportunités offertes par l’Inathèque. Située dans les locaux de la Bibliothèque nationale de France, elle met à disposition du public un ensemble important de ressources : les enregistrements comme les notices sont librement consultables, et un service d’aide à la recherche dans la base de données de l’INA est proposé.  ↩

  2. On peut imaginer que c’est volontaire, le résultat d’une stratégie visant à éviter le pillage des données par des robots.  ↩

  3. Packages et modules sont deux mots pour la même chose. Aller dans le menu « Installateur de Package », cliquer sur « Acquérir liste », rechercher ceux que vous souhaitez (ici RCurl et XML), puis installer.  ↩

étienne

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

More Posts