Portál AbcLinuxu, 1. května 2025 01:27

Wordcloud z dat z Twitteru

10.2.2014 10:25 | Přečteno: 657× | Stunome

Dnes si zopakujeme základy z blogu Wordcloud z dat z Facebooku, tentokráte se ale podíváme na právě probíhající olympiádu a stáhneme si z Twitteru nějaká ta data o hashtagu #zoh2014! A aby toho nebylo málo, použijeme na vykreslení místo tradičního Rka Tagul.

Twittere kde tě mám

Jestli někdo tvrdí, že Facebook je evil, pravděpodobně nic neví o Twitteru. Sociální síť, která je podle mnohých spíše protokol, vznikla na otevřenosti a podpoře stovek neoficiálních klientů. A copak se nestalo po tom co měla dostatečný market share? Ano děti, hádáte správně - s příchodem API v 1.1 byl konec s jakoukoliv otevřeností, místo toho přišlo strašlivé přihlašování přes OAUth a konec většiny neoficiálních klientů a Twitter tím podle mého překonal i tak "evil" společnost jakou je Facebook.

K přístupu do Twitter API je nyní tedy potřeba vytvořit si aplikaci s pokud možno co nejvyšším oprávněním. Tu vytvoříme na adrese apps.twitter.com, pod tlačítkem Create New App. Vyplňte jen povinné pole, rozhodně nevyplňujte Callback adresu. Occess level doporučuji "Read, write, and direct messages" < při slabším mi většina dotazů házela Not Authorized, ale je možné, že sem měl chybu i někde jinde. S tím jak se Twitter API mění je takřka nemožné najít na internetu na 100 % funkční návod.

Po vytvoření aplikace nás zajímá především záložka API keys a hodnoty API key a API secret, které použijeme v Rku pro generování přístupového tokenu.

R, R, R!

Potřebné balíčky nejprve nainstalujeme a následně načteme:

install.packages("ROAuth")
install.packages("twitteR")
install.packages("wordcloud")
install.packages("tm")
 
library("ROAuth")
library("twitteR")
library("wordcloud")
library("tm")

Pro ty z vás, kteří nedejbože používají Rko na Windows je nezbytné stáhnout certifikát, a jelikož mi CUrl házel nějaké neurčité chyby ohledně přístupu k /etc/ssl/certs, tak jsem byl tento postup nucen také použít:

download.file(url="http://curl.haxx.se/ca/cacert.pem", destfile="cacert.pem")

Teď jedna z nejdůležitějších částí, vytvoření OAuthFactory a její nastavení. Zde byl problém především v tom, že ve většině návodů byly cesty bez https, pouze jako http, což nyní nefunguje, ale vrací po handshaku neurčitou chybu "Unauthorized". Nezapomeňte nahradit API_key a API_secret za vaše hodnoty:

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

A teď to příjde, handshake:

cred$handshake(cainfo="cacert.pem")

Tento příkaz vygeneruje url s access_tokenem, která vám vrátí PIN, který musíte napsat do Rka. Jakmile přihlášení projde, uložte si token na horší časy:

save(cred, file="twitter_auth.Rdata")

Poté stačí už jen zaregistrovat OAuth, což vypíše něco jako TRUE:

registerTwitterOAuth(cred)

A můžeme se směle vrhnout na tahání dat, což je to jediné co nás zajímá, že. Budeme chtít stáhnout všechny twíty například z 8. 2. obsahující hashtag #zoh2014. Bude tedy třeba vyplnit parametry od, do - ty se vyplňují jako since a until, since nastaveníme na 8. 2., until pak na 9. 2. (který tam pak nebude):

r_stats <- searchTwitter("#zoh2014", n=3000, cainfo="cacert.pem", since='2014-02-08', until='2014-02-09')

A teď už jen převod na corpus, čištění a spočtení frekvence:

r_stats_text <- sapply(r_stats, function(x) x$getText())
r_stats_text_corpus <- Corpus(VectorSource(r_stats_text))
r_stats_text_corpus <- tm_map(r_stats_text_corpus, tolower)
r_stats_text_corpus <- tm_map(r_stats_text_corpus, removePunctuation)
r_stats_text_corpus <- tm_map(r_stats_text_corpus, function(x)removeWords(x,stopwords()))

ap.tdm <- TermDocumentMatrix(r_stats_text_corpus)
ap.m <- as.matrix(ap.tdm)
ap.v <- sort(rowSums(ap.m), decreasing=TRUE)
ap.d <- data.frame(word = names(ap.v), freq=ap.v)
write.table(ap.d, file="zoh2014.csv", append=FALSE, sep= "\t")

V tomto bodě opustíme R a vydáme se do Tagulu.

Proč Tagul?

Tagul je jendoduchý nástroj na wordcloudy, který má jednu zajímavou vlastnost: dokáže vyplnit wordcloudem obrázek, který mu připravíte. Zvládá od jednoduchých tvarů přes jakkoliv složité obrysy a má tu vlastnost, že používá barvu pozadí obrázku, který mu předhodíte. Z vygenerovaného CSV z posledního kroku v Rku si tedy zkopírujeme třeba posledních 150 slov a vložíme je do Tagulu. Dále si seženeme nějakou fotku, u kterou si podle potřeby upravíme. V našem případě to byly Olympijské kruhy, které jsem zvektorizoval a nastavil jednolitou barvu všech kruhů. Po vykreslení tedy dostaneme toto:

wordcloud #zoh2014

Závěr

Měření bylo úspěšné a nikdo při něm nebyl zraněn. O kostičku se hlašte v komentářích!

       

Hodnocení: 80 %

        špatnédobré        

Obrázky

Wordcloud z dat z Twitteru, obrázek 1

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

10.2.2014 11:46 gsnak | skóre: 22 | blog: gsnak
Rozbalit Rozbalit vše Re: Wordcloud z dat z Twitteru
Odpovědět | Sbalit | Link | Blokovat | Admin
Pozor, olympijské kruhy sú intelektuálne vlastníctvo Olympijského výboru. Ich používanie bez povolenia je trestné!
Čo Rys, to vrah!

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.