Giessen r user group treffen 10 05-2011 - foliensatz

Preview:

DESCRIPTION

 

Citation preview

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

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

Literatur

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

Social Media:

Datengewinnung und Aufbereitung

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,

...

...

Anwendungen in R

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/

Twitter® Search API Method

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

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

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

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

Umsetzungsmöglichkeiten in R

Pakete XML / twitteR

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)

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

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

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

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

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!

Auswertungen in R mit Paket tm:

Text Mining

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

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)

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))

Analysen

• Inspizierung der häufigsten Wörter

> findFreqTerms(mydata.dtm, lowfreq=3)

• Assoziationsanalyse

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

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))

Diskussion

Vielen Dank für Ihre Aufmerksamkeit!

Recommended