Twitter-mining mit R – Teil 1 – Wie bekommt man die Daten?
In meinem ersten Blogeintrag geht es darum, wie in RStudio eine Verbindung zu Twitter als Datenquelle eingerichtet werden kann, um Daten für eigene Auswertungen zu erhalten.
Was ist Twitter?
Twitter ist ein soziales Netzwerk, das häufig als „Microblogging“ bezeichnet wird. Micro, weil Tweets auf 140 Zeichen beschränkt sind. Also 20 Zeichen weniger als eine SMS. Im Unterschied zur SMS gibt es auch nicht nur einen Empfänger, sondern so viele Empfänger wie einer Person folgen. Twitter ist überdies ein asymetrisches soziales Netzwerk. Wenn ich einem Account folge, heisst dies nicht, dass dieser Account auch automatisch mir folgt. Wenn man eine bestimmte Person adressieren möchte, macht man das mit dem Namen des Accounts, der mit einem „@“-Zeichen beginnt. Das sollte als grobe Information reichen.
Wie ein Twitter-Account in der Praxis aussieht, kann hier rechts in der Seitenleiste gesehen werden.
Twitter als Datenbasis
Um auf die Daten von Twitter zuzugreifen gibt es zwei Zugänge bzw. APIs.
API ist die Kurzform für „Application Programming Interface“ und ermöglicht es Entwicklern, auf die Daten zuzugreifen und sie für eigene Projekte zu nutzen. Ich beschränke mich hier auf kostenlose Zugänge, die jedoch limitiert sind. Wer vollen Zugriff möchte und Kosten nicht scheut, kann seinen Zugang z.B. mittels Twitter Firehose realisieren.
Für den Moment sind diese beiden APIs interessant:
- Search API (auch: Rest API)
Retrospektive Suche in schon geschriebenen Tweets mit best. Kriterien
- Streaming API
Prospektive Festlegung von Kriterien, nach denen Tweets fortlaufend „aufgezeichnet“ werden
Der Unterschied liegt also darin, dass die Search API vom Zeitpunkt der Abfrage ungefähr eine Woche rückwärts nach den entsprechenden Tweets sucht, die Search API Abfrage hingegen erst in dem Moment beginnt, in dem sie gestellt wird. Der Stream ist limitiert auf ca. 1% aller Tweets. Wieviele Tweets die Search-API liefert, hängt von der Art der Abfrage ab. Die Search API bietet speziellere Abfragemöglichkeiten an, ist aber insgesamt stärker begrenzt als die Streaming API.
Vorraussetzungen für Twitter-Mining mit R
- aktuelle Version von RStudio
- Diverse R-libraries
- Twitter-Account
- Twitter-App im Entwicklerbereich von Twitter-erstellen
Twitter-App für Datenzugang erstellen
Das R-Paket „twitteR“ ermöglicht die Verbindung zur Twitter Search-API mittels Oauth. Oauth ist ein Protokoll, dass einer Anwendung ermöglicht sich mit dem Twitter-Account anzumelden, ohne ein Passwort eingeben zu müssen. Das funktioniert über einen ACCESS-TOKEN. Diese Access-Tokens haben eine beschränkte Lebensdauer. Man kann sie aber jederzeit neu generieren.
- Twitter öffnen und mit eigenemAccount einloggen
- http://dev.twitter.com/ öffnen
- ganz unten unter „tools“ auf „manage your Apps“ klicken
- Auf der erscheinenden Seite „create new app“ anklicken
- Name der App eingeben (Darf nicht schonmal vergeben worden sein)
- Beliebige Website URL eingeben
- callback URL freilassen
- Auf die Seite der Anwendung gehen und unter den „Application Settings“ auf „manage keys and access tokens“ gehen, eventuell „Create Access TOKEN“ anklicken und die Oauth-Keys kopieren (Darauf achten, keine Leerzeichen mitzukopieren)
Diese Informationen müssen rüber zu R kopiert werden:
- Consumer Key (API-Key)
- Consumer Secret (API-Secret
- Access-Token
- Access Token Secret
Sie finden sich hier:
Variante 1: R-Code um R mit der Search/Rest API von Twitter zu verbinden
#—————————————————–
# — Mit Twitter verbinden —
#—————————————————–
# Das twitteR package muss wie folgt installiert werden install.packages(c("devtools", "rjson", "bit64", "httr")) library(devtools) install_github("twitteR", username="geoffjentry") #twitteR package laden library(twitteR) # Authentifizierungsschlüssel eingeben api_key <- "**************************" api_secret <- "***************************" access_token <- "*****************************" access_token_secret <- "******************************" setup_twitter_oauth(api_key,api_secret,access_token,access_token_secret) #--- Suchabfrage: 450 tweets mit dem Hashtag #rstats --- tweets<-searchTwitter("#rstats",n=450)) tweets
Variante 2: R mit Streaming API von Twitter verbinden
Die Verbindung per Streaming-API erfordert eine leicht abgeänderte Vorgehensweise.
#----------------------- # API Verbindung einrichten #----------------------- install.packages('streamR') install.packages("ROAuth") install.packages("RCurl") library(RCurl) library(ROAuth) library(streamR) #API Key und API Secret kopieren api_key<-"************" api_secret<-"**************" # SSL certs festlegen options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))) #dieser Schritt ist bei manchen Windows-PCs nötig #Verbindungsdaten my_oauth <- OAuthFactory$new(consumerKey=api_key, consumerSecret=api_secret, requestURL='https://api.twitter.com/oauth/request_token', accessURL='https://api.twitter.com/oauth/access_token', authURL='https://api.twitter.com/oauth/authorize') my_oauth$handshake(cainfo = system.file("CurlSSL",+ "cacert.pem", package = "RCurl"))
An diesem Punkt öffnet sich das Browserfenster. Der App muss nun die Verbindung erlaubt werden, anschließend wird eine PIN angezeigt. Diese PIN muss in die Console von R eingeben werden.
Nun besteht die Verbindung von R und Twitter und wir können die Streaming API nutzen:
library(streamR) # 30 Sekunden Stream aller Tweets mit Hashtag #ff tweets<-filterStream(file.name="C:/Speicherort/tweets.json",+ track=c("ff"), timeout=30, oauth=my_oauth) tweets
Falls das Ergebnis keine Tweets bringt, am besten ein Hashtag auswählen, zu dem aktuell viel getwittert wird, oder einen längeren Streaming-Zeitraum nutzen.
Hier geht es mit der Teil 2 – Visualisierung von Worthäufigkeiten in Wordclouds weiter.