Dans cette étude nous analysons les tweets autour du digital. L’objectif est de mesurer la présence de chaque acteur sur le débat “digital” sur Tweeter.
Ceci est possible grâce à l’API tweeter qui renvoie les tweets sur la base de mots clés entrés en paramètres. Ensuite, il suffit de construire un dictionnaire ciblé (ex : “digitalisation”,“numérique”…) et de calculer le nombre de matchs. Il en résulte un “score” pour chaque acteur, comme présenté dans le graphe ci-dessous.
Remarque : l’API tweeter ne renvoie pas 100% des tweets sur le mot clé choisi, mais filtre les tweets les plus “pertinents” (selon des critères prédéfinis par Tweeter).
PWC semble largement en tête en termes de tweets sur les sujets digitaux.
Hypothèse : notre analyse porte sur 7 jours de données seulement (limitation Tweeter). Date de collecte : 04/12.
Remarque : les big four tweetent au total plus de 1000 fois / semaine.
C-dessous le dictionnaire utilisé => il peut être complété pour enrichir l’analyse.
## Dictionnaire
agile <- c("digital","numériq","démat","DSI agile","IT agile","agilité du SI","fast IT","DSI bimodal","IT bimodal","devops","transformation digitale de la DSI","scrum","lean IT","DSI multimodale")
len_agile <- length(agile)
Pour des raisons techniques, les lignes ci-dessous ont été passées en commentaires : mais le code est ré-utilisable.
Note : les credentials “XXX” sont à remplacer par les votres (en prérequis un compte tweeter “développeur”" est nécessaire).
##install.packages("twitteR")
library(twitteR)
##install.packages("ROAuth")
##library(ROAuth)
##setwd("C:/Users/FR013525/Desktop/STATISTICAL INFERENCE")
##consumer_key <- "XXX"
##consumer_secret <- "XXX"
##access_token <- "XXX"
##access_secret <- "XXX"
##setup_twitter_oauth(consumer_key, consumer_secret, access_token, access_secret)
# Download "cacert.pem" file
##download.file(url="http://curl.haxx.se/ca/cacert.pem",destfile="cacert.pem")
#create an object "cred" that will save the authenticated object that we can use for later sessions
##cred <- OAuthFactory$new(consumerKey="XXX",
##consumerSecret="XXX",
##requestURL='https://api.twitter.com/oauth/request_token',
##accessURL='https://api.twitter.com/oauth/access_token',
##authURL='https://api.twitter.com/oauth/authorize')
##cred$handshake(cainfo="cacert.pem")
## 5612056
#save for later use for Windows
##save(cred, file="twitter authentication.Rdata")
##load("twitter authentication.Rdata")
La collecte se fait par mot clé. Pour PWC et EY, nous utilisons à la fois le sigle et le nom complet afin d’éviter de “rater” des tweets.
Du coup, la fonction “unique” est utilisée pour ne pas compter les tweets en doublons.
## Les lignes ci-dessous ont effectivement permi de collecter les données => elles sont reproductibles
##tweets <- searchTwitter("pwc", n=5000, lang="fr") # top 5000 tweets that contain search term
##tweetsDF_pwc1 <- twListToDF(tweets) # more info about tweets.
##tweets <- searchTwitter("pricewaterhousecoopers", n=5000, lang="fr") # top 5000 tweets that contain search term
##tweetsDF_pwc2 <- twListToDF(tweets) # more info about tweets.
##pwc <- unique(cbind(tweetsDF_pwc1$text,tweetsDF_pwc2$text))
##save
##save(pwc, file="pwc.Rdata")
## La ligne ci-dessous est une simplification (copie locale)
load("C:/Users/FR013525/Desktop/STATISTICAL INFERENCE/pwc.Rdata")
## Les lignes ci-dessous ont effectivement permi de collecter les données => elles sont reproductibles
##tweets <- searchTwitter("ey", n=5000, lang="fr") # top 5000 tweets that contain search term
##tweetsDF_ey1 <- twListToDF(tweets) # more info about tweets.
##tweets <- searchTwitter("ernst and young", n=5000, lang="fr") # top 5000 tweets that contain search term
##tweetsDF_ey2 <- twListToDF(tweets) # more info about tweets.
##ey <- unique(cbind(tweetsDF_ey1$text,tweetsDF_ey2$text))
##save
##save(ey, file="ey.Rdata")
## La ligne ci-dessous est une simplification (copie locale)
load("C:/Users/FR013525/Desktop/STATISTICAL INFERENCE/ey.Rdata")
## Les lignes ci-dessous ont effectivement permi de collecter les données => elles sont reproductibles
##tweets <- searchTwitter("deloitte", n=5000, lang="fr") # top 5000 tweets that contain search term
##tweetsDF_deloitte <- twListToDF(tweets) # more info about tweets.
##deloitte <- tweetsDF_deloitte$text
##save
##save(deloitte, file="deloitte.Rdata")
## La ligne ci-dessous est une simplification (copie locale)
load("C:/Users/FR013525/Desktop/STATISTICAL INFERENCE/deloitte.Rdata")
## Les lignes ci-dessous ont effectivement permi de collecter les données => elles sont reproductibles
##tweets <- searchTwitter("capgemini consulting", n=5000, lang="fr") # top 5000 tweets that contain search term
##tweetsDF_cap <- twListToDF(tweets) # more info about tweets.
##cap <- tweetsDF_cap$text
##save
##save(cap, file="cap.Rdata")
## La ligne ci-dessous est une simplification (copie locale)
load("C:/Users/FR013525/Desktop/STATISTICAL INFERENCE/cap.Rdata")
Il reste à compter le nombre d’occurences de chaque mot du dictionnaire, et en déduire un scoring pour chaque acteur.
## Scoring
score_agile_pwc <- c(0,0,0)
names(score_agile_pwc) <- c("Neutre","1 référence","2 références")
for (i in 1:length(pwc)) {
tweet_i <- pwc[i]
nb_match <- 0 ## calculons le nombre de matchs
for (j in 1:len_agile) {if (grepl(agile[j],tweet_i)) {nb_match <- nb_match+1}}
if (nb_match==0) {score_agile_pwc[1] <- score_agile_pwc[1]+1}
if (nb_match==1) {score_agile_pwc[2] <- score_agile_pwc[2]+1}
if (nb_match>1) {score_agile_pwc[3] <- score_agile_pwc[3]+1}
}
score_agile_ey <- c(0,0,0)
names(score_agile_ey) <- c("Neutre","1 référence","2 références")
for (i in 1:length(ey)) {
tweet_i <- ey[i]
nb_match <- 0 ## calculons le nombre de matchs
for (j in 1:len_agile) {if (grepl(agile[j],tweet_i)) {nb_match <- nb_match+1}}
if (nb_match==0) {score_agile_ey[1] <- score_agile_ey[1]+1}
if (nb_match==1) {score_agile_ey[2] <- score_agile_ey[2]+1}
if (nb_match>1) {score_agile_ey[3] <- score_agile_ey[3]+1}
}
score_agile_deloitte <- c(0,0,0)
names(score_agile_deloitte) <- c("Neutre","1 référence","2 références")
for (i in 1:length(deloitte)) {
tweet_i <- deloitte[i]
nb_match <- 0 ## calculons le nombre de matchs
for (j in 1:len_agile) {if (grepl(agile[j],tweet_i)) {nb_match <- nb_match+1}}
if (nb_match==0) {score_agile_deloitte[1] <- score_agile_deloitte[1]+1}
if (nb_match==1) {score_agile_deloitte[2] <- score_agile_deloitte[2]+1}
if (nb_match>1) {score_agile_deloitte[3] <- score_agile_deloitte[3]+1}
}
score_agile_cap <- c(0,0,0)
names(score_agile_cap) <- c("Neutre","1 référence","2 références")
for (i in 1:length(cap)) {
tweet_i <- cap[i]
nb_match <- 0 ## calculons le nombre de matchs
for (j in 1:len_agile) {if (grepl(agile[j],tweet_i)) {nb_match <- nb_match+1}}
if (nb_match==0) {score_agile_cap[1] <- score_agile_cap[1]+1}
if (nb_match==1) {score_agile_cap[2] <- score_agile_cap[2]+1}
if (nb_match>1) {score_agile_cap[3] <- score_agile_cap[3]+1}
}
score_agile_pwc
## Neutre 1 référence 2 références
## 1516 60 0
score_agile_ey
## Neutre 1 référence 2 références
## 4855 9 0
score_agile_deloitte
## Neutre 1 référence 2 références
## 1117 16 0
score_agile_cap
## Neutre 1 référence 2 références
## 62 3 0