29
R und Social Media am Beispiel von Twitter® Dozent: Dr. Guido Möser, GF masem research institute GmbH Workshop der Giessen R User Group Geschäftsführer: Dr. Guido Möser Wissenschaftlicher Beirat: Prof. Dr. Peter Schmidt, Dr. Gero Schwenk Stand: 09. Mai 2011

Giessen r user group treffen 10 05-2011 - foliensatz

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Giessen r user group treffen 10 05-2011 - foliensatz

R und Social

Media am Beispiel von Twitter®

Dozent: Dr. Guido Möser,

GF masem research institute GmbH

Workshop der Giessen R User Group

Geschäftsführer: Dr. Guido Möser

Wissenschaftlicher Beirat:

Prof. Dr. Peter Schmidt, Dr. Gero Schwenk

Stand: 09. Mai 2011

Page 2: Giessen r user group treffen 10 05-2011 - foliensatz

Inhalte R und Social Media am Beispiel von Twitter

• Literatur

• Social Media: Datengewinnung und Aufbereitung

• Anwendungen in R

• Twitter Search API Method

• Umsetzungsmöglichkeiten in R

– Pakete twitteR und XML

• Auswertungen in R - Textmining

• Diskussion

Page 3: Giessen r user group treffen 10 05-2011 - foliensatz
Page 4: Giessen r user group treffen 10 05-2011 - foliensatz

Literatur

Page 5: Giessen r user group treffen 10 05-2011 - foliensatz

Literatur

• Bollen, J., Mao, H., & Zeng, X.-J. (2010). Twitter mood predicts the

stock market.

• Feinerer, I. (2011). Package ‘tm‘.

• Lang, D. T. (2011). Package ‘XML‘.

• Feinerer, I. (2011). Introduction to the tm Package. Text Mining in R.

• Gentry, J. (2011). Twitter client for R.

• o.V. (2011). Twitter API Wiki: API Methods: Twitter Search API.

Method:search

• Blog: R-bloggers. Internet: http://www.r-bloggers.com

Page 6: Giessen r user group treffen 10 05-2011 - foliensatz

Social Media:

Datengewinnung und Aufbereitung

Page 7: Giessen r user group treffen 10 05-2011 - foliensatz

Datengewinnung und Aufbereitung

Data Processing

Web2.0

Daten-

quellen

CRAWLER

DATA

GATHERING

ETL

SUCH-

BEGRIFFE

RELEVANTE

QUELLEN

Web2.0

Warehouse

INTERFACE

MIT

DATENMATRIX

ROHDATEN

MUSTERTEXTEN

Analysen

Reporting

Datengewinnung

Tool: Radian 6®,

R® etc.

Optimal: IBM DB2® etc.

Mindestanforderung: MS Excel® R mit tm Paket,

...

...

Page 8: Giessen r user group treffen 10 05-2011 - foliensatz

Anwendungen in R

Page 9: Giessen r user group treffen 10 05-2011 - foliensatz

Anwendungen in R

• Text Data Mining with Twitter and R

– http://heuristically.wordpress.com/2011/04/08/text-data-mining-twitter-r/

• The structure of twitter participant relationships in conversations

around #Libya, #Bieber, and #Rstats

– http://www.babelgraph.org/wp/?p=120

• A quick look at #march11 / #saudi tweets

– http://www.michaelbommarito.com/blog/2011/03/12/a-quick-look-at-march11-

saudi-tweets/

• Dataset: Wisconsin Union Protester Tweets #wiunion

– http://www.michaelbommarito.com/blog/2011/02/21/dataset-wisconsin-union-

protester-tweets-wiunion/

Page 10: Giessen r user group treffen 10 05-2011 - foliensatz

Twitter® Search API Method

Page 11: Giessen r user group treffen 10 05-2011 - foliensatz

Twitter® Search API

• Twitter® Search API

– The API is entirely HTTP-based

– The API ... supports the following data formats: XML, JSON, ...

• Dokumentation Twitter® API:

– Twitter® exposes ist data via an Application Programming Interface (API).

– http://apiwiki.twitter.com/w/page/22554679/Twitter-API-Documentation

• Twitter Search API Method: search

– Returns tweets that match a specified query.

– Dokumentation: http://apiwiki.twitter.com/w/page/22554756/Twitter-Search-

API-Method:-search

Ref: http://apiwiki.twitter.com/w/page/22554679/Twitter-API-Documentation

http://apiwiki.twitter.com/w/page/22554756/Twitter-Search-API-Method:-search,

10.05.2011

Page 12: Giessen r user group treffen 10 05-2011 - foliensatz

Twitter® Search API - Limitations

• Search API Limit

– Clients may request up to 1,500 statuses…

– This artificial limit is in place to ensure the performance of the search system.

We also restrict the size of the search index by placing a date limit on the

updates we allow you to search. This limit varies depending on the number of

Tweets being created and the relevance of the results.

• REST API Rate Limiting

– Anonymous calls are based on the IP of the host and are permitted 150

requests per hour. This classification includes unauthenticated requests (such

as RSS feeds), and authenticated requests to resources that do not require

authentication.

– OAuth calls are permitted 350 requests per hour.

Ref: http://dev.twitter.com/pages/every_developer, 10.05.2011

http://dev.twitter.com/pages/rate-limiting; 10.05.2011

Page 13: Giessen r user group treffen 10 05-2011 - foliensatz

Beispiele - Twitter® Search API Method: search

• Containing a word:

– http://search.twitter.com/search.atom?q=twitter

• From a user:

– http://search.twitter.com/search.atom?q=from%3Aal3x

• Replying to a user (tweet starts with @mzsanford):

– http://search.twitter.com/search.atom?q=to%3Amzsanford

• Mentioning a user (tweet contains @rstats):

– http://search.twitter.com/search.atom?q=%40biz

Ref: http://apiwiki.twitter.com/w/page/22554756/Twitter-Search-API-Method:-search,

10.05.2011

Page 14: Giessen r user group treffen 10 05-2011 - foliensatz

Beispiele - Twitter® Search API Method: search

• Containing a hashtag (up to 16 characters)

– http://search.twitter.com/search.atom?q=%23haiku

• Combine any of the operators together.

– http://search.twitter.com/search.atom?q=happy+hour&until=2009-03-24

• Originating from an application:

– http://search.twitter.com/search.atom?q=landing+source:tweetie

Ref: http://apiwiki.twitter.com/w/page/22554756/Twitter-Search-API-Method:-search,

10.05.2011

Page 15: Giessen r user group treffen 10 05-2011 - foliensatz

Umsetzungsmöglichkeiten in R

Pakete XML / twitteR

Page 16: Giessen r user group treffen 10 05-2011 - foliensatz

Paket XML

• Twitter® API unterstützt XML (siehe Dokumentation)

• Mittels XML-Paket können geeignete Suchanfragen programmiert und

mittels http-request übergeben werden

• Die eigene Erzeugung nach den gezeigten Regeln des Tweitter® API

stellt die flexibelste Lösung dar, auf Probleme zugeschnittene Abfragen

zu erzeugen

• Dazu muss in R das XML Paket installiert werden

> install.packages('XML‘, dependencies = TRUE)

> library(XML)

Page 17: Giessen r user group treffen 10 05-2011 - foliensatz

Einfache Abfrage mittels XML-Paket (1)

• Zum Abspeichern der Tweets einen Vektor erzeugen

> req.tweets <- character(0)

• Abfrage erzeugen:

• Suchbegriff(e)

> twitter_q <- URLencode('rstats')

• URL für Abfrage erzeugen

> twitter_url =

paste('http://search.twitter.com/search.atom?q=',twitter_q,'&rpp=100&1=', 1,

sep='')

Ref: http://heuristically.wordpress.com/2011/04/08/text-data-mining-twitter-r/, 10.05.2011

Page 18: Giessen r user group treffen 10 05-2011 - foliensatz

Einfache Abfrage mittels XML-Paket

• Übergabe

> mydata.xml <- xmlParseDoc(twitter_url, asText=F)

• Titel extrahieren

> req.tweets <- xpathSApply(mydata.xml, '//s:entry/s:title', xmlValue,

namespaces =c('s'='http://www.w3.org/2005/Atom'))

• Anzahl der geernteten Tweets

> length(req.tweets)

Ref: http://heuristically.wordpress.com/2011/04/08/text-data-mining-twitter-r/, 10.05.2011

Page 19: Giessen r user group treffen 10 05-2011 - foliensatz

Erweiterungen - XML-Paket

• Der Block von Heuristic Andy legt um die Abfrage eine Schleife

herum, so dass eine größere Zahl an Tweets abgefragt werden

können, ohne Limits zu überschreiten

mydata.vectors <- character(0)

# paginate to get more tweets

for (page in c(1:15))

{

# search parameter

twitter_q <- URLencode('rstats')

# construct a URL

twitter_url = paste('http://search.twitter.com/search.atom?q=',twitter_q,'&rpp=100&page=', page, sep='')

# fetch remote URL and parse

mydata.xml <- xmlParseDoc(twitter_url, asText=F)

# extract the titles

mydata.vector <- xpathSApply(mydata.xml, '//s:entry/s:title', xmlValue, namespaces =c('s'='http://www.w3.org/2005/Atom'))

# aggregate new tweets with previous tweets

mydata.vectors <- c(mydata.vector, mydata.vectors)

}

Ref: http://heuristically.wordpress.com/2011/04/08/text-data-mining-twitter-r/, 10.05.2011

Page 20: Giessen r user group treffen 10 05-2011 - foliensatz

Beispiel - XML-Paket

• Suchbegriff rstats am 10. Mai 2011 um 15:51 Uhr

• Abruf der ersten 4 geernteten Tweets

> req.tweets[1:4]

[1] "@revodavid I have just recieved a box of goodies! Thank you in behalf of Serbian RUG!

@RevolutionR #rstats"

[2] "RT @Rbloggers: First-Cut Approach to Synchronizing Field Notes with GPS Data: After

a week's worth… http://goo.gl/fb/zjjgt #rstats"

[3] "RT @Rbloggers: making meat shares more efficient with R and Symphony: In my

previous post, I… http://goo.gl/fb/M3d8z #rstats"

[4] "RT @Rbloggers: Comments on an R Connections API: I wrote this post months ago but

never hit 'Publish… http://goo.gl/fb/eHDTJ #rstats"

Ref: http://heuristically.wordpress.com/2011/04/08/text-data-mining-twitter-r/, 10.05.2011

Page 21: Giessen r user group treffen 10 05-2011 - foliensatz

Paket twitteR

• Hinweis: Das Paket twitteR läuft nur eingeschränkt auf unter Windows 7

Systemen, die folgenden Analysen wurden mittels Ubuntu 8.04 erzeugt

– http://cran.r-project.org/web/packages/twitteR/

• Für das Paket steht eine umfangreiche Dokumentation zur Verfügung

– http://cran.r-project.org/web/packages/twitteR/twitteR.pdf

– http://cran.r-project.org/web/packages/twitteR/vignettes/twitteR.pdf

• Viele nützliche Abfragen sind bereits implementiert

• Auf eine Demonstration wird hier verzichtet!

Page 22: Giessen r user group treffen 10 05-2011 - foliensatz

Auswertungen in R mit Paket tm:

Text Mining

Page 23: Giessen r user group treffen 10 05-2011 - foliensatz

Das Paket tm

• Das Paket tm (Autor: Ingo Feinerer) stellt Möglichkeiten zur Durchführung

von Text Mining bereit

– http://cran.r-project.org/web/packages/tm/vignettes/tm.pdf

• Es steht eine ausführliche Dokumentation zur Verfügung

– http://cran.r-project.org/web/packages/tm/index.html

– http://cran.r-project.org/web/packages/tm/tm.pdf

• Das Paket muss zuerst installiert und geladen werden

> install.packages("tm", dependencies = TRUE)

> library(tm)

Der Datensatz aus Beispiel 1 (req.tweets) muss in R zur Verfügung stehen

Page 24: Giessen r user group treffen 10 05-2011 - foliensatz

Corpus erzeugen und Transformationen

• Corpus aus Twitter-Abfragen erzeugen (siehe Beispiele 1 und 2)

> mydata.corpus <- Corpus(VectorSource(req.tweets))

> mydata.corpus

• Transformation 1 - Kleinbuchstaben

> mydata.corpus <- tm_map(mydata.corpus, tolower)

• Satzzeichen entfernen

> mydata.corpus <- tm_map(mydata.corpus, removePunctuation)

• Entfernen der stopwords - generische und manuell vorgegebene

> my_stopwords <- c(stopwords('english'), 'rstats', '#rstats')

> mydata.corpus <- tm_map(mydata.corpus, removeWords, my_stopwords)

Page 25: Giessen r user group treffen 10 05-2011 - foliensatz

tdm erzeugen und inspizieren

• Term-Document Matrix bauen

> mydata.dtm <- TermDocumentMatrix(mydata.corpus)

• Inspizierung der Matrix

> mydata.dtm

• Matrizen erzeugen

> mydata.df <- as.data.frame(inspect(mydata.dtm))

Page 26: Giessen r user group treffen 10 05-2011 - foliensatz

Analysen

• Inspizierung der häufigsten Wörter

> findFreqTerms(mydata.dtm, lowfreq=3)

• Assoziationsanalyse

> findAssocs(mydata.dtm, 'quantmod', 0.20)

Page 27: Giessen r user group treffen 10 05-2011 - foliensatz

Reduzierte Matrizen

• Selten vorkommende Begriffe entfernen, um die Darstellung der Matrix zu

verbessern

– Hinweis: Den sparse Parameter ein wenig modifizieren, um eine gute Anzahl

an Wörtern zu finden

– 10 - 30 Wörter stellt eine gute Zahl dar, um noch den Überblick zu behalten

> mydata.dtm2 <- removeSparseTerms(mydata.dtm, sparse=0.95)

• Matrizen erzeugen

> mydata2.df <- as.data.frame(inspect(mydata.dtm2))

Page 28: Giessen r user group treffen 10 05-2011 - foliensatz

Diskussion

Page 29: Giessen r user group treffen 10 05-2011 - foliensatz

Vielen Dank für Ihre Aufmerksamkeit!