Twitterclouds

Navigation

Voraussetzungen

  1. 1.Herunterladen und Installieren der Rtools 3.1 von CRAN
  2. 2.Ausführen von find_rtools() in R (sollte [1] TRUE ausgeben)
  3. 3.Installieren des Packages "devtools"
  4. 4.Ausführen von library(devtools) in R
  5. 5.Ausführen von install_github("twitteR", username="geoffjentry") in R

Damit hätte man die Schnittstelle zu Twitter in R. Es fehlen noch die Credentials für die API. Dazu benötigt man

 

  1. 1.Einen Twitter Account
  2. 2.Eine eigene Twitter-APP, die man unter https://dev.twitter.com/apps anlegt.
  3. 3.Für die App die Definition der Rechte (Access Level) "Read, write, and direct messages" im "Settings"-Tab der App
  4. 4."Consumer key", "Consumer secret", "Access token" und "Access token secret", die man im Details-Tab der App findet.


Für die Datenaufbereitung wird das Package "tm" benötigt und für das Generieren der Wordcloud "wordcloud" sowie die abhängigen Bibliotheken, die inzwischen von R währen der Package-Installation selbständig geladen und installiert werden:

 

install.packages("wordcloud")
install.packages("tm")


Durchführung


Ausführung des folgenden Codes:

 
# Laden der Bibliotheken
library(twitteR)

library(tm)
library(methods)
library(RColorBrewer)
library(wordcloud)

# bei erstmaliger Ausführung:

consumerKey <- "hier den Consumer key der App einfügen"
consumerSecret <- "hier das Consumer secret der App einfügen"
accessToken <- "hier das Access token der App einfügen"
accessSecret <- "hier das Access token secret der App einfügen"
setup_twitter_oauth(consumerKey, consumerSecret, accessToken, accessSecret, credentials_file="cred_twitter")
 
# danach reicht
 
load("cred_twitter") # hier ist es wichtig, dass das Arbeitsverezichnis für R richtig gesetzt ist. In R-Studio geht das z.B. über das Menü "Session" -> "Set Working Directory"
setup_twitter_oauth(consumerKey, consumerSecret, accessToken, accessSecret, credentials_file=NULL)
getCurRateLimitInfo(c("lists", "users")) # damit wird z.B. das Maximum für den Parameter "n" im nächsten Schritt ermittelt
# suchen in Twitter (alle öffentlichen Tweets)
# nach dem Hashtag #searchtag im Umkreis von 300km um den geografischen Mittelpunkt der Schweiz
tweets <- searchTwitter("#searchtag", geocode="46.798449,8.231879,300km", n=180)
 
tw.df=twListToDF(tweets)
mtweet <- as.vector(sapply(tw.df$text, CleanTweet))

 

# dies sind zwei benötigte Funktionen, die auch in ein separates File ausgelagert werden können und nur 1x/Sitzung aufgerufen werden müssen

generateCorpus= function(df,my.stopwords=c()) {

# The following is cribbed and seems to do what it says on the can
tw.corpus= Corpus(VectorSource(df))
# remove punctuation
tw.corpus = tm_map(tw.corpus, removePunctuation)
#normalise case
tw.corpus = tm_map(tw.corpus, tolower)
# remove stopwords
tw.corpus = tm_map(tw.corpus, removeWords, stopwords('english'))
tw.corpus = tm_map(tw.corpus, removeWords, my.stopwords)

tw.corpus
}

 

wordcloud.generate=function(corpus,min.freq=3) {
require(wordcloud)
doc.m = TermDocumentMatrix(corpus, control = list(minWordLength = 1))
dm = as.matrix(doc.m)
# calculate the frequency of words
v = sort(rowSums(dm), decreasing=TRUE)
d = data.frame(word=names(v), freq=v)
#Generate the wordcloud
wc=wordcloud(d$word, d$freq, min.freq=min.freq)
wc

}

 

print(wordcloud.generate(generateCorpus(mtweet,'#searchtag'),7))