Les sentiments de Tahiti

onou 2015

Les voyages sont faits pour être vécus mais ce qui en reste ce sont des mots. Des livres de voyageurs, le journal de bord des marins, et aujourd’hui le commentaire des expériences de consommation. A l’heure du post-exotisme ( pas celui-ci), quand le touriste pense rencontrer une culture authentique mais bien souvent façonnée par son propre regard, ce qui compte est moins ce que l’on a vécu que ce que l’on en garde : des selfies et le commentaire des lieux de séjours. C’est certainement moins poétique que Cook et Gauguin, mais plus profitable pour l’industrie du tourisme.

Et c’est à l’occasion d’un de ces voyages, avec l’aide des collègues du Cetop,  des étudiants du master de marketing de l’UPF, et l’écoute du team de Tahiti tourisme, que nous nous sommes lancés dans l’analyse des sentiments exprimés par les touristes à propos de leur séjour  avec une petite incursion dans les packages de text mining de r. Il n’y avait pas de meilleure place pour apprécier la critiques des auberges du paradis.

Pour la méthode, il s’agit d’abord de scrapper, avec les ressources du package rvest, le site de TripAdvisor. La Polynésie est isolée, trouvant ses clients dans trois grands bassins à plus de 10h de vol : l’Asie , les EU et la France. Il y a environ 150 hôtels et 300 pensions. Les résultats donnés dans cette note, sont établis sur la base d’une première extraction centrée sur Tahiti et portant sur 7700 commentaires. On généralisera plus tard sur les 77000 commentaires sur l’ensemble des archipels.

Ce corpus fait l’objet de deux types d’analyses comme on commence à le faire systématiquement dans ce type d’exercice : mesurer la tonalité positive ou négative (le sentiment) et les sujets évoqués ( topic analysis). Pour la première, on emploie tidytext, pour la seconde le modèle LDA du package Topicmodels.

Voici la présentation de travail (demo), avec quelques éléments de code, rendez-vous au piurn 2018 pour une présentation plus complète.

Publicités

Analyse des échanges collaboratifs avec igraph

blog1analyse du réseau d’échange

Le tableau analysé comprend toutes les paires orientées (Prêteurs ->Emprunteurs) donc un identificateur prêteur et un autre emprunteur. 2500 paires (arcs) sont analysées. Chaque arc est caractérisé par le nombre de transactions effectuées.

Dans la première ligne on indique que le graphe est orienté et que les noeuds sont identifiés par id .La seconde ligne commande le mode de representation. On a choisit ici un algorithme de forme kk dontla référence est :bbb. C’est un choix classique de repréentation des similarités utile quand le nombre d’objets représenté est grand.

g <- graph.data.frame(G, directed=TRUE, vertice=Id)
l <- layout_with_kk(g)
V(g)$label <- NA
V(g)$size <- 1*log(Id$Total)
E(g)$arrow.size <- 0.2*G$pret #épaisseur des arcs en fonction du nb de prets entre deux personnes
plot(g,layout=l)

blog01
La signature du graphe est donnée dans l’histogramme suivant de la distribution du nombre d’arc accordées aux nœuds. C’est une distribution clairement negative exponentielle, peut-étre puissance.Le graph log log avec le package poweRlaw, permet d’y répondre (on emprunte le code à Ruliana ).

deg <- degree(g, mode="all")
hist(deg, breaks=1:vcount(g)-1, main="Histogram of node degree",xlim=c(0,50))

blog02

library("poweRlaw")
library(ggplot2)
# Just loading my data

G.degrees <- degree(g)

# Let's count the frequencies of each degree
G.degree.histogram <- as.data.frame(table(G.degrees))

# Need to convert the first column to numbers, otherwise
# the log-log thing will not work (that's fair...)
G.degree.histogram[,1] <- as.numeric(G.degree.histogram[,1])

# Now, plot it!
ggplot(G.degree.histogram, aes(x = G.degrees, y = Freq)) +
  geom_point() +
  scale_x_continuous("Degree\n(nodes with this amount of connections)",
                     breaks = c(1, 3, 10, 30, 100, 300),
                     trans = "log10") +
  scale_y_continuous("Frequency\n(how many of them)",
                     breaks = c(1, 3, 10, 30, 100, 300, 1000),
                     trans = "log10") +
  ggtitle("Degree Distribution (log-log)") +
  theme_bw()+ geom_smooth(method='lm')

blog03

On peut raffiner en selectionnant des noeuds ou des arc. Ici on supprime les arcs entre des paires à échange unique, ce qui éclaircit le graphique.

h <- delete_edges(g, E(g)[pret<2]) #supprime les arc inférieur à
plot(h,layout=l)

blog04

 

Identifier les influenceurs

On peut faire varier la taille des noeuds en fonction de leurs caractéristiques, dans l’exemple suivant on la définit comme proportionnelle au « degré » des noeuds en calculant d’abord cette variable à partir de la fonction degree et du graphe g. Ce qui met mieux en valeur les nœuds centraux, et le nuage des échanges uniques.

plot(g, vertex.size=deg*0.1)

blog05

 

L’analyse peut être un peu plus compliquée et on peut chercher à évaluer l’Autorité et la Centralité des agents qui échangent. On utilise pour celà les fonctions hub_score et authority_score, calculé comme le score sur la première composante de A’A, respectivement AA’, sur la base du modèle Hits de  Jon Kleinberg« Authoritative sources in a hyperlinked environment »Journal of the ACMvol. 46, no 5,‎ p. 604-632 (DOI 10.1145/324133.324140lire en ligne ).

hs <- as.data.frame(hub_score(g, weights=NA)$vector) 
hs$owner_email<-row.names(hs)
hs$hub<-hs$`hub_score(g, weights = NA)$vector`
as <- as.data.frame(authority_score(g, weights=NA)$vector)
as$receiver_email<-row.names(as)
as$authority<-as$`authority_score(g, weights = NA)$vector`
par(mfrow=c(1,2)) #pour juxtaposer les graphes
plot(g, vertex.size=hs$hub, main="Hubs : prêtent à de nombreuses pers.")
plot(g, vertex.size=as$authority*8, main="Authorities : empruntent aux hubs")

hub et authorité

 

Post zéro

15839676911_6acdb5988c_k

Créé par Sophie Balech et Christophe Benavent, pour simplifier un travail d’analyse de contenu en rassemblant différent outils dans un carnet de notes,  mais aussi dans l’idée de partager des manières de faire et une nouvelle culture des données et de contribuer à encourager l’utilisation des méthodes moderne d’analyse textuelle. C’est une sorte de manuel très pratique.

Deux domaines d’application correspondent à nos réflexions et nourrissent les exemples :

  • l’emploi de ces méthodes dans les travaux doctoraux et la recherche en management – en particulier l’examen de corpus d’entretien, de discours managériaux.
  • l’applications aux données commerciales : avis de consommateurs, réponses aux questions ouvertes, conversations, commentaires de posts…

Le contenu :

  • des posts de blog consacrés aux tricks et aux nouveaux packages, il ont vocation à être technique, et publié au fil de l’eau. On fait appel à nos amis pour les alimenter, toute contribution est bienvenue pourvu qu’elle respecte le style. Il suffit d’envoyer un message pour ouvrir un compte de contributeur.
  • Le manuel donne les grandes étapes et des procédures précises pour traiter des corpus textuels. Il se centre sur les méthode modernes : ngrams, vectorisation, analyse du sentiment, topic analysis.
  • Les tricks, sont des trucs glanés ici et là. Un package où une ligne de code.
  • Des jeux de données.

La production est réalisé dans l’environnement rstudio en Markdown et les documents html sont tricotés par Knitr.