Chapitre 1 : Collecter les données

16346611182_908e42559e_o
Manuscrit Frederic Mistral

Les données ne sont pas données! Elles sont obtenues, elles sont produites. C’est ce que rappellent les sociologues , un Bruno Latour ou Dominique Cardon ( chercher la ref), mais d’autres encore beaucoup plus nombreux qui en critiquent les agencements.

La mesure est d’abord un dispositif de collecte qui a sa politique et sa technique. Le dispositif emprunte à l’idée focaldienne, la politique de la mesure est l’effet systématique qu’elle produit et qui n’a été ni conçu ni anticipé par le concepteurs et le sujet de la la mesure.  Sa technique varie au gré des inventions et des champs pratiques : la médecine, la métho, la géographie, le commerce, l’industrie, le transport…..

La mesure textuelle n’échappent pas à la sociologie de la mesure. Elle bénéficie de la technique en celà qu’elle trouve des champs d’expression étendue qui font participer des foules. Ce que l’on dit n’est ni dans les romans ni dans les encyclopédie, mais dans la marées des chats, des comparateurs, des réseaux sociaux, des commentaires, jamais la parole n’a été aussi simple à recueillir en masse. Et dans un prochain avenir cette parole sera une voix avec sa prosodie, son timbre, ses rythmes.

Nous étions habitués à la mesure psycho-graphique, celle du questionnaire. Nous avons appris à traiter des données de transactions à partir de commande ou de ticket de caisses. Nous apprenons à placer des capteurs un peu partout et en particuliers dans les téléphones mobiles et autres ordinateurs. On a appris à capturer des log, puis des données de réseaux sociaux.

Avec le big data entre plus du volume et de l’immédiateté, c’est la diversité des données qui explose. Ce ne sont plus des codes numériques et contrôlés, mais du texte ouvert et des images qui sont recueillies. Le texte à lui seul ouvre un nouvel horizon d’étude. Pour l’image c’est un autre horizon qui est ouvert, autant celui de la voix. Elle fera peut être l’objet d’un ou deux chapitres, au moins d’un complément.

Pour s’en tenir au texte la première question est celle de leur acquisition.Examinons quelques méthodes pour collecter les données  :

  • Scanner des document écrits et compter sur la reconnaissance de caractère pour en obtenir les codes ascii.
  • Exploiter des bases textuelle telles que factiva
  • Proposer des questions ouvertes dans des questionnaires
  • scrapper les sites web pour recueillir par exemple de larges volumes de commentaires clients
  • utiliser les api des applications sociales/
  • enregistrer des conversations dans les chats

Dans ce chapitre, en terme d’application nous nous centreons sur deux exemples :  l’exploitation de l’api de twitter et le scrapping de tripadvisor.

(nous sommes preneurs d’autres techniques, bienvenue à des posts invités)

Méthode Api  : avec  TwittR

Le package Twittr permet d’accéder facilement au stock de donnée de twitter via le package TwittR.  Les principales étapes  sont les suivantes.

Etape 1 : ouvrir un compte

La première étape consiste à crée un compte sur l’API de twitter et d’obtenir les éléments suivants :

  • consumerKey
  • consumerSecret
  • access_token
  • access_secret

Etape 2 : se connecter à l’API depuis r

On s’appuie surtout sur twitteR

library(tm)
library(httr)
library(devtools)
library(twitteR)

la procédure suivante permet de se connecter à l’API de Twitter avec la function : setup_twitter_oauth

consumerKey<-"XsQJPktCbl62uql2RazYw"
consumerSecret<-"30m3bDmIAVF2R0Wd1hzHoazAw2KigdHFb4VAsisicLyq"
access_token<-"27122856-9RfJbwr9HG4c4YEmyKnNkUdny4JMQceijy"
access_secret<-"qA2KpVpGdNdTbUE7seXR2skbsYKKhqJEiv9w6o"
#setup_twitter_oauth(consumerKey, consumerSecret, access_token, access_secret)

Etape 3 : requête

En libre accès elles sont limitée à 1500 tweets tous les quart d’heures. En voici cinq qui varient selon les mots clés de recherche ( ici des hashtag) et le type de résultats souhaités

 

tweets1 <- searchTwitter("#IA", n = 2000, lang = "fr", resultType = "recent", since = "2017-08-01")
tweets2 <- searchTwitter("#ML", n = 2000, lang = "fr", resultType = "mixed", since = "2017-08-01")
tweets3 <- searchTwitter("#AI", n = 2000, lang = "fr", resultType = "recent", since = "2017-08-01")
tweets4 <- searchTwitter("#MachineLearning", n = 2000, lang = "fr", resultType = "recent", since = "2017-08-01")
tweets5 <- searchTwitter("#Deeplearning", n = 2000, lang = "fr", resultType = "recent", since = "2017-08-01")

Etape 4 : fabrication du fichier

On transforme le résultat des recherche et data.frame avec la fonction twListToDF() , on compile les fichiers obtenus et on ajoute une petite déduplication, pour obtenir un corpus de 4500 twitter relatif à l’ Intelligence artificielle.

#transformer en data frame
tweets_df1 <- twListToDF(tweets1) 
tweets_df2 <- twListToDF(tweets2) 
tweets_df3 <- twListToDF(tweets3) 
tweets_df4 <- twListToDF(tweets4) 
tweets_df5 <- twListToDF(tweets5)
tweets_df <- rbind(tweets_df1,tweets_df2,tweets_df3,tweets_df4,tweets_df5)
tweets_text <- tweets_df$text # on isole le corpus des twits
tweets_text <- unique(tweets_text) #deduplication des twits

Et le tour est joué!

On retrouvera le reste de l’analyse sur ce post. ( IA faire le lien)

Scrapping

Si les sites n’offrent pas d’interface pour accéder à leur données, ni de langages pour y faire des requêtes, il reste la possibilité d’interroger automatiquement les pages et de les lire automatiquement, le parsing, en profitant des propriétés du html, qui langage à balises facilite l’identification d’informations récurrentes.

Il existe de nombreux outils pour réaliser cette tâche qui consiste à collecter du texte en interrogeant les sites web. Donnons en un exemple avec Tripadvisor et le package rvest crée par Hadley. Cet art consiste à utiliser les vertu pour html pour identifier des éléments récurrents d’information ; un avis consommateur, une note, un nombre d’avis…

#https://github.com/hadley/rvest/blob/master/demo/tripadvisor.R

# Inspired by
# http://notesofdabbler.github.io/201408_hotelReview/scrapeTripAdvisor.html
#https://www.worldfullofdata.com/basics-web-scraping-r-rvest/

library(rvest)
library(tidyverse)
# info niveau hotel 
url<-paste0("https://www.tripadvisor.fr/Hotel_Review-g294352-d5989587-Reviews-Maison_D_Hotes_Tutehau-Papeete_Tahiti_Society_Islands.html")
Hotel <- "Maison_D_Hotes_Tutehau-Papeete"

Rating <- url %>%
  read_html() %>%
  html_nodes(".overallRating")%>%
  html_text()
Avis <- url %>%
  read_html() %>%
  html_nodes(".reviews_header_count")%>%
  html_text()
Prix <- url %>%
  read_html() %>%
  html_nodes(".bb_price_text")%>%
  html_text()

Hotel01<-data.frame(Hotel,Rating,Avis, Prix, stringsAsFactors = FALSE)

#boucle de consultation des pages
for (page in (1:60)) {
  url <- paste0("https://www.tripadvisor.fr/Hotel_Review-g294352-d5989587-Reviews-or",page*5,"-Maison_D_Hotes_Tutehau-Papeete_Tahiti_Society_Islands.html")
print(url)
reviews <- url %>%
  read_html() %>%
  html_nodes(".review-container")

id <- reviews %>%
  html_node(".quote a") %>%
  html_attr("id")

quote <- reviews %>%
  html_node(".quote span") %>%
  html_text()

review <- reviews %>%
  html_node(".entry .partial_entry") %>%
  html_text()

Mobile <- reviews %>%
  html_node(".viaMobile") %>%
  html_attr("title")

date <- reviews %>%
  html_node(".ratingDate") %>%
  html_attr("title") 
datebits <- lapply(date, function(x) unlist(strsplit(x, " "))[2:4])
date <- unlist(lapply(datebits, function(x) paste0(paste(x[1:2], collapse=" "))))

txt<-data.frame(id, date, quote, review, stringsAsFactors = FALSE)

if (page == 1 ) {
  trip_df <- data.frame(txt)
} else {
  trip_df <- rbind(trip_df, txt)  
}
}
trip_df$hotel<-"Maison_D_Hotes_Tutehau-Papeete"
trip01<-trip_df

Nous avons répter l’opération d’abord sur les hotels de tahiti, ensuite de la polynésie, en nou centrant sur l’analyse du sentiment et des variables qui en expliquent les variation. Voir ici pour le béut du projet et là pour une autre étape.

Traitements des questions ouvertes :

Si on peut raiter aisément du contenu textuel, il il a une forte incitation à susciter des reponses élaborées par des méthodes de questions ouvertes.

Cependant, autant que dans l’analyses des commentaires on est confronté à la grande question de l’orthographe : voir préparation des données.

Publicités