Les tweets sont des sources d’informations publiques qu’on peut récupérer et analyser. Grâce à ses nombreux packages, R permet d’analyser des tweets.
Les packages utilisés sont :
library("twitteR") # recupération des tweets
library("wordcloud") # création de nuages de mots
library("tm") # text mining
Afin de se connecter avec l’API de twitter, il est nécessaire de créer un compte pour avoir les identifiants.
## [1] "Using direct authentication"
consumer_key <- 'donnees_de_votre_compte'
consumer_secret <- 'donnees_de_votre_compte'
access_token <- 'donnees_de_votre_compte'
access_secret <- 'donnees_de_votre_compte'
setup_twitter_oauth(consumer_key,
consumer_secret,
access_token,
access_secret)
On peut récupérer les tweets du timeline de l’argus de l’assurance :
tweets <- userTimeline("argusassurance", n=1000) # récupérer le journal d'un utilisateur
Dans un tweet (format json), on peut récupérer plusieurs informations. Pour cela, il est nécessaire de créer un data.frame pour organiser ces informations :
df <- do.call("rbind", lapply(tweets, as.data.frame))
head(df)
## text
## 1 Allianz France crée un fonds dinvestissement pour soutenir les start-up https://t.co/D0TT5B8qD2
## 2 Munich Re veut céder son activité dassurance en Australie https://t.co/G2VJMAIH4L
## 3 La Mutuelle Générale à la recherche dun nouveau partenaire https://t.co/GvVPJiJyaD
## 4 La Blockchain expérimentée dans la titrisation des risques catastrophes https://t.co/GlXarcQvuA
## 5 Sécurité routière : la mortalité sur les routes continue de progresser https://t.co/F0idhMUp3L
## 6 Associations dépargnants : la loi Sapin 2 veut rendre le pouvoir aux Assemblées générales https://t.co/nxKRaQpDL0
## favorited favoriteCount replyToSN created truncated
## 1 FALSE 0 NA 2016-06-16 08:28:01 FALSE
## 2 FALSE 1 NA 2016-06-16 07:30:04 FALSE
## 3 FALSE 0 NA 2016-06-15 20:36:12 FALSE
## 4 FALSE 10 NA 2016-06-15 16:22:55 FALSE
## 5 FALSE 1 NA 2016-06-15 11:07:46 FALSE
## 6 FALSE 0 NA 2016-06-15 09:37:07 FALSE
## replyToSID id replyToUID
## 1 NA 743359462946201601 NA
## 2 NA 743344880227749889 NA
## 3 NA 743180326696980481 NA
## 4 NA 743116589038342144 NA
## 5 NA 743037277069135872 NA
## 6 NA 743014463222091777 NA
## statusSource
## 1 <a href="http://twitterfeed.com" rel="nofollow">twitterfeed</a>
## 2 <a href="http://twitterfeed.com" rel="nofollow">twitterfeed</a>
## 3 <a href="http://twitterfeed.com" rel="nofollow">twitterfeed</a>
## 4 <a href="http://twitterfeed.com" rel="nofollow">twitterfeed</a>
## 5 <a href="http://twitterfeed.com" rel="nofollow">twitterfeed</a>
## 6 <a href="http://twitterfeed.com" rel="nofollow">twitterfeed</a>
## screenName retweetCount isRetweet retweeted longitude latitude
## 1 argusassurance 3 FALSE FALSE NA NA
## 2 argusassurance 0 FALSE FALSE NA NA
## 3 argusassurance 4 FALSE FALSE NA NA
## 4 argusassurance 8 FALSE FALSE NA NA
## 5 argusassurance 4 FALSE FALSE NA NA
## 6 argusassurance 3 FALSE FALSE NA NA
A part le corpus des tweets, on voit qu’il y a des métadata qui peuvent être intéressantes:
Grâce au package tm
, on peut faire du text-mining facilement :
tweets_text <- sapply(tweets, function(x) x$getText())
myCorpus <- Corpus(VectorSource(tweets_text))
# inspect(myCorpus)
myCorpus =tm_map(myCorpus ,tolower)
myCorpus <- tm_map(myCorpus, removePunctuation)
myCorpus <- tm_map(myCorpus, removeNumbers)
myStopwords <- c(stopwords('french'), "available", "via","data")
myStopwords <- c(stopwords('french'), "assureurs","assurance","lassurance","assurances")
myCorpus <- tm_map(myCorpus, removeWords, myStopwords)
myCorpus <- tm_map(myCorpus, PlainTextDocument)
myDtm <- TermDocumentMatrix(myCorpus, control = list(minWordLength = 1))
findFreqTerms(myDtm, lowfreq=10)
## [1] "axa" "france" "groupe" "gtgt" "inondations"
## [6] "lance" "mutuelle" "nouveau" "nouvelle" "prévoyance"
## [11] "résultats" "santé" "vie"
findAssocs(myDtm, 'santé', 0.30)
## $santé
## complémentaire lance
## 0.51 0.31
wordcloud(myCorpus,min.freq=10)