Objectifs

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).

Résultats (sur 1 semaine de tweets)

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.

1/ Construction du dictionnaire ciblé

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)

2/ Accès à l’API Tweeter

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")

3/ Collecte des données

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")

4/ Scoring

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