Data Science, Machine Learning und KI
Kontakt

Im letzten Beitrag zu dieser Reihe hatten wir bereits gelernt, wie man RStudio mit der Twitter API verbindet. In diesem Beitrag werden wir uns nun das zurückgegebene Objekt des API Calls genauer anschauen. Wie bereits beim letzten Mal angedeutet gibt der Call ein Listenobjekt zurück. Diese zu strukturieren ist der erste wichtige Schritt auf dem Weg zur Analyse der Daten. Im Folgenden werden wir getrennt die Objekte für Tweets und Profile betrachten.

Tweet Objekt

So ziemlich jeder weiß was ein Tweet ist. Einfach ein kurzes Gedanken-Snippet, ein Zitat, oder manchmal auch – unglücklicherweise – ein offizielles Statement eines Amtsinhabers oder einer Amtsinhaberin. Aus einer Datenperspektive ist ein solcher Tweet natürlich durchaus komplexer. Neben der inhaltlichen Ebene besteht ein Tweet aus extrem vielen Informationen, von welchen die meisten direkt von R abgezogen werden können. Diese Informationen, wie zum Beispiel die Zeit oder der Ort des Tweets, Anzahl der Retweets, oder Anzahl der Likes können für Analysen äußerst hilfreich sein.

Beispieltweet

In dem Listenobjekt ist jeder Slot durch einen eigenen Tweet belegt. Der obige Tweet z.B. kommt mit einer ganzen Menge zusätzlicher Informationen.

Struktur eines Beispieltweets in R

Neben dem reinen Inhalt des Tweets (text) zieht R ebenfalls die Anzahl der Likes (favoriteCount), die Zeit in der getweeted wurde (created) und zum Beispiel die Anzahl der Retweets (retweetCount).

User Objekt

Neben einfachen Tweets haben wir beim letzten Mal schon gelernt, wie wir Profile minen können. Sicherlich jeder Social Network User hat schon die ein oder andere Stalking-Tour hinter sich. Auch hier verbergen sich hinter einem Profil durchaus mehr Daten, als bei bloßem Profilbesuchen zu vermuten wäre. Mit dem API Call ziehen wir diese Informationen direkt ab.

Beispielhafter Twitteruser

Für unseren eigenen Twitter Account z.B. bekommen wir eine Masse an zusätzlichen Informationen. Auch diese sind in einem Listen-Objekt gespeichert.

Struktur eines Beispielusers in R

Das Objekt enthält z.B. die Beschreibung des Twitter-Accounts (description), die Anzahl der Tweets (statusesCount), Anzahl der Follower (followersCount), Anzahl der Likes (favoritesCount), aber auch auf die Sekunde genau, den Zeitpunkt des Launches des Accounts (created).

Analyse von Tweets

Da die Analyse von Tweets deutlich populärer ist, werden wir uns im Rest des Blogeintrags erstmal anschauen, wie wir Tweets analysieren können.

Hat man die Struktur des heraus gegebenen Objekts erst einmal verstanden, so ist es leicht eine Analysestrategie zu erörtern. Eine beliebte Analysemethodik von Tweets ist das sog. Text Mining. Mein Kollege David hat hierzu einen schönen Blogeintrag verfasst. Da solltet ihr auf jeden Fall reinschauen (in guter Twitter-Manier: #productplacement).

Beginnen wir einfach mal damit die letzten 50 Tweets mit #DataScience abzufragen. Um eine Textanalyse zu starten, müssen wir natürlich erst das Textelement des Tweets herausfiltern.

# zuerst fragen wir die Tweets ab (hier ohne Retweets und nur auf Englisch) 
tweets <- searchTwitter("#DataScience –filter:retweets", n=50, lang="en") 

# nun konvertieren wir die Tweets zu einem data.frame 
tweets_df <- twListToDF(tweets) 

Um nun die Tweets für die Textanalyse vorzubereiten, müssen wir erstmal die Tweets bereinigen. Schauen wir uns zuerst einen exemplarischen Tweet an.

Beispieltweet bereinigt

Der Tweet beginnt mit dem Account-Namen des „Tweeters“. Informationen wie diese stehen uns im Weg, wenn wir einfach nur eine Inhaltsanalyse machen wollen. Ebenfalls stören jegliche Links und Emojis. Die folgenden Zeilen an Code beheben all diese Probleme.

# nun säubern wir die Tweets 
for (i in seq(nrow(tweets_df))){ 
  tweets_df$clean_text[i] <- gsub("&amp", "", tweets_df$text[i]) 
  tweets_df$clean_text[i] <- gsub("(RT|via)((?:bW*@w+)+)", "",  
          tweets_df$clean_text[i]) 
  tweets_df$clean_text[i] <- gsub("@w+", "", tweets_df$clean_text[i]) 
  tweets_df$clean_text[i] <- gsub("[[:punct:]]", "", tweets_df$clean_text[i]) 
  tweets_df$clean_text[i] <- gsub("[[:digit:]]", "", tweets_df$clean_text[i]) 
  tweets_df$clean_text[i] <- gsub("httpw+", "", tweets_df$clean_text[i]) 
  tweets_df$clean_text[i] <- gsub("[ t]{2,}", "", tweets_df$clean_text[i]) 
  tweets_df$clean_text[i] <- gsub("^s+|s+$", "", tweets_df$clean_text[i]) 
  tweets_df$clean_text[i] <- gsub("n", "", tweets_df$clean_text[i]) 
} 

tweets_df$clean_text <- sapply(tweets_df$clean_text,  
                               function(x) iconv(x, "latin1", "ASCII", sub="")) 

Nun liegen uns die jeweiligen Tweets wie ganz normale Strings vor und können auch so behandelt werden. Mit Hilfe des  texttt{tm} Packages, können wir den Text nun noch um unnötige Wörter bereinigen.

# Laden des tm Packages 
library(tm) 

# nun ziehen wir den Corpus der Tweets heraus 
tweets_corpus <-  Corpus(VectorSource(tweets_df$clean_text)) 

# und setzten unsere Stopwords 
my_stopwords <- c(stopwords("en")) 
tweets_corpus <- tm_map(tweets_corpus, removeWords, my_stopwords) 

# Nun können wir auch schon unsere Textmatrix blden 
tdm <- TermDocumentMatrix(tweets_corpus) 

# und zum Beispiel die häufigsten Begriffe betrachten 
term_freq <- rowSums(as.matrix(tdm)) 
term_freq  10) 

Diese sind in unserem Fall:

Tweet - Haeufigkeiten

Ausblick

Für die Analyse von Tweets gibt es keine Grenzen – naja, bis auf ein paar, natürlich. Wenn ihr euch stärker für weitere Aspekte der Textanalyse interessiert, dann könnt ihr natürlich die aufbereiteten Tweets z.B. durch eine Sentiment Analyse – wie bei David– jagen. Eurer Fantasie sind hier also kaum Grenzen gesetzt.

In der nächsten Runde werden wir uns mal anschauen, was man mit Twitter-Accounts analysieren könnte und vor Allem, welche Aufbereitungsschritte wichtig sind. Lukas Strömsdörfer

Spätestens durch den US-Präsidentschaftswahlkampf rückte der Microblogging Dienst Twitter stärker in den öffentlichen Fokus. Wem es allerdings nicht reicht, einfach nur durch das Soziale Netzwerk zu stöbern, der kann mit ein paar wenigen Tricks vom Datenreichtum Twitters profitieren.

Datenzugang

Twitter, so wie viele andere Online-Dienste, bietet sog. APIs („Application Programming Interface“) an. Durch diese können Interessierte ganz einfach einen Link zwischen der Datenbank der Online Plattform und dem eigenen Analysetool (z.B. R, Python) einrichten.

Um den Datenzugang seitens Twitter zu ermöglichen, müssen Interessierte allerdings einen aktiven Twitter Account haben. Mit diesem können dann eigene Apps erstellt werden. Im Folgenden werden wir nun einmal exemplarisch alle Schritte nach dem Erstellen eines aktiven Twitter Accounts durchgehen.

Wir haben einen aktiven Twitter Account und erstellen uns nun eine App. Hierzu besuchen wir zuerst apps.twitter.com und erstellen eine neue App.

Erstellen einer Twitter App

Beim Ausfüllen der Maske müssen wir darauf achten, dass der gewählte Name einzigartig ist. Die Beschreibung kann natürlich generisch sein. Sollte man keine eigene Website besitzen, so kann man ganz einfach einen generischen Placeholder wählen. Die Callback URL können wir vorerst auslassen.

Erfolgreiches Erstellen einer App

Um auf die API zugreifen zu können, brauchen wir nun folgende Information:

  • Consumer Key (API-Key)
  • Consumer Secret (API-Secret)
  • Access Token
  • Access Token Secret

Die Consumer Key Elemente können wir ganz einfach unter dem Reiter „Keys and Access Tokens“ einsehen.

Consumer Keys

Den Access Token und das Access Token Secret müssen wir zuerst generieren.

Access Token

Schon ist die App erstellt und wir haben alle Informationen, um unser Analyseprogramm mit der Twitter API zu verbinden.

API Abfrage mit RStudio

Twitter bietet zwei verschiedene APIs an: zum einen die sog. Search oder Rest API und zum anderen die Streaming API. Mit der Rest API können bereits geschriebene Tweets und Profilinformationen abgefragt werden. Mit der Streaming API können kontinuierlich Tweets abgezogen werden. Für den Rest des Blogeintrags schauen wir uns aber zuerst einmal die Rest API an.

RStudio und die Rest API

Um Tweets und Profile über die Rest API direkt von RStudio abzufragen, brauchen wir die folgenden Zeilen Code. Hierbei müssen consumer_key, consumer_secret, access_token und access_secret entsprechend vorher definiert werden.

# Benötigte Packages für den Link zur Rest API 
install.packages("twitteR") 
library(twitteR) 

# Nun kann der Link zur Twitter API aufgesetzt werden 
setup_twitter_oauth(consumer_key, consumer_secret, access_token, access_secret) 

Nun steht der Link zwischen RStudio unter der Twitter API. Im nächsten Schritt können wir die ersten Twitterdaten abfragen.

Kurzes Beispiel

Angenommen, wir interessieren uns für Tweets zum Thema Data Science, dann können diese über die twitteR Funktionen abgefragt werden. Mit searchTwitter() ziehen wir hier die letzten beiden Tweets mit dem Hashtag #DataScience ab.

tweets <- searchTwitter("#DataScience", n=2) 

Allerdings beschränkt sich die Rest API nicht nur auf Tweets. Wir können auch gezielt Profile minen. Mit getUser() können Profildaten abgefragt werden, hier z.B. für den STATWORX Account.

user <- getUser("@statworx") 

Ausblick

In der nächsten Ausgabe werden wir uns mit der Struktur der gespeicherten Objekte befassen. Die Funktionen aus dem twitteR Package erlauben uns, eine Vielzahl von Informationen mit abzuziehen. Beim nächsten Mal verwenden wir diese, um die Informationen zu strukturieren, aufzubereiten und zu analysieren. Lukas Strömsdörfer

Spätestens durch den US-Präsidentschaftswahlkampf rückte der Microblogging Dienst Twitter stärker in den öffentlichen Fokus. Wem es allerdings nicht reicht, einfach nur durch das Soziale Netzwerk zu stöbern, der kann mit ein paar wenigen Tricks vom Datenreichtum Twitters profitieren.

Datenzugang

Twitter, so wie viele andere Online-Dienste, bietet sog. APIs („Application Programming Interface“) an. Durch diese können Interessierte ganz einfach einen Link zwischen der Datenbank der Online Plattform und dem eigenen Analysetool (z.B. R, Python) einrichten.

Um den Datenzugang seitens Twitter zu ermöglichen, müssen Interessierte allerdings einen aktiven Twitter Account haben. Mit diesem können dann eigene Apps erstellt werden. Im Folgenden werden wir nun einmal exemplarisch alle Schritte nach dem Erstellen eines aktiven Twitter Accounts durchgehen.

Wir haben einen aktiven Twitter Account und erstellen uns nun eine App. Hierzu besuchen wir zuerst apps.twitter.com und erstellen eine neue App.

Erstellen einer Twitter App

Beim Ausfüllen der Maske müssen wir darauf achten, dass der gewählte Name einzigartig ist. Die Beschreibung kann natürlich generisch sein. Sollte man keine eigene Website besitzen, so kann man ganz einfach einen generischen Placeholder wählen. Die Callback URL können wir vorerst auslassen.

Erfolgreiches Erstellen einer App

Um auf die API zugreifen zu können, brauchen wir nun folgende Information:

Die Consumer Key Elemente können wir ganz einfach unter dem Reiter „Keys and Access Tokens“ einsehen.

Consumer Keys

Den Access Token und das Access Token Secret müssen wir zuerst generieren.

Access Token

Schon ist die App erstellt und wir haben alle Informationen, um unser Analyseprogramm mit der Twitter API zu verbinden.

API Abfrage mit RStudio

Twitter bietet zwei verschiedene APIs an: zum einen die sog. Search oder Rest API und zum anderen die Streaming API. Mit der Rest API können bereits geschriebene Tweets und Profilinformationen abgefragt werden. Mit der Streaming API können kontinuierlich Tweets abgezogen werden. Für den Rest des Blogeintrags schauen wir uns aber zuerst einmal die Rest API an.

RStudio und die Rest API

Um Tweets und Profile über die Rest API direkt von RStudio abzufragen, brauchen wir die folgenden Zeilen Code. Hierbei müssen consumer_key, consumer_secret, access_token und access_secret entsprechend vorher definiert werden.

# Benötigte Packages für den Link zur Rest API 
install.packages("twitteR") 
library(twitteR) 

# Nun kann der Link zur Twitter API aufgesetzt werden 
setup_twitter_oauth(consumer_key, consumer_secret, access_token, access_secret) 

Nun steht der Link zwischen RStudio unter der Twitter API. Im nächsten Schritt können wir die ersten Twitterdaten abfragen.

Kurzes Beispiel

Angenommen, wir interessieren uns für Tweets zum Thema Data Science, dann können diese über die twitteR Funktionen abgefragt werden. Mit searchTwitter() ziehen wir hier die letzten beiden Tweets mit dem Hashtag #DataScience ab.

tweets <- searchTwitter("#DataScience", n=2) 

Allerdings beschränkt sich die Rest API nicht nur auf Tweets. Wir können auch gezielt Profile minen. Mit getUser() können Profildaten abgefragt werden, hier z.B. für den STATWORX Account.

user <- getUser("@statworx") 

Ausblick

In der nächsten Ausgabe werden wir uns mit der Struktur der gespeicherten Objekte befassen. Die Funktionen aus dem twitteR Package erlauben uns, eine Vielzahl von Informationen mit abzuziehen. Beim nächsten Mal verwenden wir diese, um die Informationen zu strukturieren, aufzubereiten und zu analysieren. Lukas Strömsdörfer