Skrap Twitter med R

Korleis kan du hente ut alle tweets frå ein person, eller alle tweets med ein særskild hashtag? Det er enkelt med R.


I dag publiserte bt.no denne saka der eg laga ordskyar basert på alle Twitter-meldingane til Jens Stoltenberg, Erna Solberg og Siv Jensen.
Arbeidet med å hente ut alle Twitter-meldingane gjorde eg i R, nærare bestemt med pakka twitteR.

Det første du må gjere, etter å ha installert R, er å skaffe deg autentisering hjå Twitter. Det er enkelt viss du følgjer denne guiden laga av twitteR-skapar Jeff Gentry.

Deretter er det berre å setje i gang. getTwitterOAuth() lagar koblinga mellom R og Twitter.
For å hente ut til dømes Jens Stoltenbergs 50 siste tweets, kan du skrive:

jens <- userTimeline('jensstoltenberg', n=50)

Det ser ut som om Twitter set ei grense på 3200 tweets. Det var i alle fall nok til å hente alle Erna Solberg sine tweets (om lag 2700 sidan 2008).

Resultatet du får, er ei R-liste med tweets. Viss du vil sjå meir info om meldingane, til dømes kven Jens har svart eller kor mange gonger meldingane har vore retvitra, kan det vere greitt å setje dei inn i ein data.frame:

jens <- twListToDF(jens)

Ein del av kolonnane som følgjer med, er ikkje alltid interessante. Her bed eg R om å droppe nokre av dei:

droppes <- c("favorited", "truncated", "replyToSID", "id", "statusSource", "retweeted", "longitude", "latitude", "replyToUID")
jens <- jens[,!(names(jens) %in% droppes)]

Og det skal ikkje meir til for å få ein fin liste, som sjølvsagt kan eksporterast som .csv-fil til anna bruk.

TwitteR har òg innebygde funksjonar for å søkje på hashtag. Du kan dessutan setje ein radius for tweetsa du ønskjer.
Under analysen av Janne-saka i BT ville eg sjå korleis «Janne» vart tvitra om. Då var det nyttelaust med eit globalt søk fordi Janne er eit såpass vanleg namn i andre delar av verda. Derfor avgrensa eg det til radius 500km frå Bergen sentrum:

janne <- searchTwitter('Janne', geocode='60.3880732,5.331851,500km', n=1000, retryOnRateLimit=1)
janne <- twListToDF(janne)
janne <- janne[,!(names(janne) %in% droppes)]
janne <- janne[-325,]
janne <- janne[-304,]
janne <- janne[-305,]
janne <- janne[-324,] # Fann fire tweets som ikkje hadde med Janne-saka å gjere

Resultata kan sjølvsagt bearbeidast med vanleg R-metode. Her hentar eg ut meldingane som ein av journalistane har skrive:

BTIngunn <- subset(janne, janne$screenName == "BTIngunn")

Konklusjon? Med berre litt R-kunnskap er TwitteR eit svært bra analyseverktøy.