Programmering

Sådan søger du på Twitter med rtweet og R.

Twitter er en god kilde til nyheder om R - især under konferencer som useR! og RStudio Conference. Og takket være R og rtweet-pakken kan du oprette dit eget værktøj til download af tweets til nem søgning, sortering og filtrering. Lad os kigge trin for trin.

Først vil du installere nogen af ​​rtweet-projektets pakker, du ikke allerede har: rtweet, reagerbar, lim, stringr, httpuv og dplyr. Start derefter rtweet og dplyr for at starte.

# Hvis du har brug for at installere en af ​​disse:

# install.packages ("rtweet")

# install.packages ("reagerbar")

# install.packages ("lim")

# install.packages ("stringr")

# install.packages ("httpuv")

# install.packages ("dplyr")

# install.packages ("purrr")

bibliotek (rtweet)

bibliotek (dplyr)

Autoriser Twitter API

For at bruge rtweet skal du have en Twitter-konto, så du kan give rtweet tilladelse til at bruge dine specifikke kontooplysninger. Det skyldes, at der er en grænse for, hvor mange tweets du kan downloade i en periode på 15 minutter.

Michael Kearney, der skrev rtweet, giver rtweet-brugere to valg. Den nemmeste måde er simpelthen at anmode om nogle tweets. Hvis der ikke er gemt legitimationsoplysninger på dit system, skal et browservindue åbnes, hvor du bliver bedt om at godkende anmodningen. Derefter gemmes et autorisationstoken i din .Renviron-fil, så du ikke skal godkende igen i fremtiden.

Du kan gå til rtweet.info for at se den anden metode, der involverer oprettelse af en Twitter-udviklerkonto og et nyt projekt for at generere autorisationsoplysninger. Hvis du vil bruge rtweet meget, vil du sandsynligvis gøre det. Men for at starte er den lettere måde godt, lettere.

Importer tweets

For at søge efter tweets med et bestemt hashtag (eller en sætning, der ikke er et hashtag), bruger du det intuitivt navngivne search_tweets () fungere. Det kræver flere argumenter, herunder forespørgslen, såsom #rstudioconf eller #rstats; om du vil medtage retweets og antallet af tweets, der skal returneres. Antallet er som standard 100.

Mens du kan modtage op til 18.000 tweets inden for 15 minutter, er der en vigtig begrænsning, når du bruger Twitter API til at søge efter et ord eller en sætning: søgeresultater går kun seks til ni dage tilbage, medmindre du betaler for en premium Twitter API-konto. I modsætning til Twitter-webstedet kan du ikke bruge rtweet til at søge efter tweets fra en konference sidste år. Du kan ikke søge to uger efter en konference for at få disse tweets. Så du vil sørge for at gemme tweets, du trækker nu, som du måske vil have i fremtiden.

Der er flere argumenter, du kan bruge til at tilpasse din søgning, men lad os starte med en grundlæggende søgning: 200 tweets med hashtagget #rstudioconf uden retweets.

tweet_df <- search_tweets ("# rstudioconf", n = 200,

include_rts = FALSE)

Hvis du kører denne kode og aldrig har brugt rtweet før, bliver du bedt om at godkende en Twitter-app.

Bemærk, at selvom du beder om 200 tweets, kan du få færre tilbage. En af årsagerne er, at der muligvis ikke er 200 tweets til din forespørgsel i de sidste seks til ni dage. En anden er, at Twitter muligvis oprindeligt har hentet 200 tweets, men efter at have filtreret retweets ud, var der færre tilbage.

Datarammen tweet_df kommer tilbage med 90 kolonner med data for hver tweet:

Sharon Machlis,

De kolonner, som jeg normalt er mest interesseret i, er status_id, created_at, screen_name, text, favorite_count, retweet_countog urls_udvidet_url. Du vil måske have nogle andre kolonner til din analyse; men til denne vejledning vælger jeg netop disse kolonner.

Søg, filtrer og analyser dine tweets

Der er masser af interessante visualiseringer og analyser, du kan gøre med Twitter-data og R. Nogle af dem er indbygget lige ind i rtweet. Men jeg skriver denne vejledning iført min techjournalisthat. Jeg vil have en nem måde at se nye og seje ting på, som jeg måske ikke kender til.

Mest lide tweets fra en konference kan hjælpe med det. Og hvis jeg bruger rtweet og Twitter API, behøver jeg ikke stole på Twitters "populære" algoritme. Jeg kan foretage mine egne søgninger og indstille mine egne kriterier for "populær". Jeg vil måske søge efter top-tweets lige fra den aktuelle dag, mens en konference er i gang, eller filtrere efter et bestemt emne, jeg er interesseret i - som "skinnende" eller "purrr" - sorteret efter de fleste likes eller de fleste retweets.

En af de nemmeste måder at udføre denne slags søgninger og sorteringer på er med en sorterbar tabel. DT er en populær pakke til dette. Men for nylig har jeg eksperimenteret med en anden: reagerbar.

Standardindstillingen reagerbar () er lidt bla. For eksempel:

tweet_table_data <- vælg (tweets, -user_id, -status_id)

bibliotek (reagerbar)

reagerbar (tweet_table_data)

Denne kode producerer en tabel, der ser sådan ud:

Sharon Machlis,

Men vi kan tilføje nogle tilpasninger, såsom:

reagerbar (tweet_table_data,

filtrerbar = SAND, søgbar = SAND, afgrænset = SAND,

stribet = SAND, fremhæv = SAND,

defaultPageSize = 25, showPageSizeOptions = SAND,

showSortable = SAND, pageSizeOptions = c (25, 50, 75, 100, 200), defaultSortOrder = "desc",

kolonner = liste (

created_at = colDef (defaultSortOrder = "asc"),

skærmnavn = colDef (defaultSortOrder = "asc"),

text = colDef (html = TRUE, minWidth = 190, resizable = TRUE),

favorite_count = colDef (filterable = FALSE),

retweet_count = colDef (filtrerbar = FALSK),

urls_expanded_url = colDef (html = SAND)

)

)

Resultatet er en tabel, der ser sådan ud:

Sharon Machlis,

Konfigurer din reagerbare datatabel

I kodestykket ovenfor er filtrerbar = SAND argument tilføjede søgefiltre under hver kolonneoverskrift, og søgbar tilføjede det overordnede søgefelt i tabellen øverst til højre. Tænder afgrænset, stribetog fremhæve gør hvad du kunne forvente: Tilføjer en tabelkant, tilføjer "striber" med skiftevis farve og fremhæver en række, hvis du lægger en markør på den.

Jeg indstiller min defaultPageSize til 25. DenshowPageSizeOptions argument giver mig mulighed for at ændre sidelængden interaktivt, og så definerer jeg sidestørrelsesindstillinger, der vises i en rullemenu under tabellen (ikke synlig i skærmbilledet). Det showSortable argument tilføjer små pilikoner ud for kolonnenavne, så brugerne ved, at de kan klikke for at sortere. Og jeg indstiller hver kolonnedefaultSortOrder til faldende i stedet for stigende. Så hvis jeg klikker på kolonnen med antallet af retweets eller likes, vil jeg se det som mest til mindst, ikke mindst for de fleste.

Endelig er der kolonner argument. Det er en liste, der indeholder en kolonnedefinition for hver kolonne. Se på de reagerbare hjælpefiler for flere detaljer om andre tilgængelige muligheder. I dette eksempel indstiller jeg oprettet_på og skærm navn kolonner for at have en standardsorteringsrækkefølge på stigende. Til tekst kolonne, jeg indstiller det til at vise HTML som HTML, så jeg kan tilføje klikbare links. Jeg indstillede også en mindste kolonnebredde på 190 pixels og gjorde kolonnen tilpasbar - så brugerne kan klikke og trække for at gøre den bredere eller smallere.

Jeg slukkede også filterkasserne for favoritantal og svarantal. Desværre forstår reaktive filtre desværre ikke, når kolonner er tal, og filtrerer dem som tegnstrenge. Mens det er reagerbart sorterer antal kolonner korrekt, er filterkasserne problematiske. Det er den største ulempe ved reagerbar vs. DT-pakken: DT forstår kolonnetyper og filtre i overensstemmelse hermed. Men at sortere numerisk er nok for mig til dette formål.

Du kan tjekke videoen øverst i denne artikel for at se, hvordan den ser ud, når du sorterer en kolonne eller gør tweettekstkolonnen bredere og smallere.

Gør din datatabel mere nyttig

Et par ting vil gøre denne tabel mere nyttig. Denne kode viser ikke billeder eller videoer, der er inkluderet i tweets. Det er fint, fordi mit formål her er at scanne tekst, ikke genskabe en Twitter-applikation. Men det betyder, at det nogle gange vil være nyttigt at se den originale tweet for at se fotos, videoer eller kommentarer.

Jeg synes det er praktisk at tilføje et lille klikbart noget i slutningen af ​​hver tweet's tekst, som du kan klikke for at se den aktuelle tweet på Twitter. Jeg besluttede det >> skønt det kunne være en hvilken som helst karakter eller tegn.

For at konstruere en URL skal jeg kende formatet på en tweet, som hvis du ser på en tweet på Twitter-webstedet, kan du se er//twitter.com/username/status/tweetID. 

Ved hjælp af limpakken ville det blive gengivet sådan:

lim :: lim ("// twitter.com/{screen_name}/status/{status_id}")

Hvis du ikke har brugt lim før, er det en god pakke til at indsætte tekst og variable værdier sammen. I ovenstående kode evalueres ethvert variabelnavn mellem seler.

Min fulde kode for at oprette en kolonne med et klikbart link til tweetet efter tweetteksten:

Tweet = lim :: lim ("{text} >>") 

Og koden til at oprette en dataramme til en interaktiv tabel:

tweet_table_data%

vælg (user_id, status_id, created_at, screen_name, text, favorite_count, retweet_count, urls_expanded_url)%>%

mutere (

Tweet = lim :: lim ("{text} >>")

)%>%

vælg (DateTime = created_at, User = screen_name, Tweet, Likes = favorite_count, RTs = retweet_count, URLs = urls_expanded_url)

Jeg vil også lave klikbare links fra URL-kolonnen, som nu kun er tekst. Dette er lidt kompliceret, fordi URL-kolonnen er en liste kolonne fordi nogle tweets indeholder mere end en URL.

Jeg er sikker på, at der er en mere elegant måde at oprette klikbare links fra en listekolonne med almindelig tekst-webadresser, men koden nedenfor fungerer. Først opretter jeg en funktion til at generere HTML, hvis der ikke er nogen URL'er, en URL eller to eller flere:

make_url_html <- funktion (url) {

hvis (længde (url) <2) {

hvis (! is.na (url)) {

som.karakter (lim ("{url}"))

} andet {

""

}

} andet {

indsæt0 (purrr :: map_chr (url, ~ paste0 ("", .x, "", kollaps = ",")), kollaps = ",")

}

}

jeg løber purrr :: map_chr () på URL-værdien, hvis der er to eller flere URL'er, så hver URL får sin egen HTML; så indsætter jeg dem sammen og kollapser dem i en enkelt tegnstreng for at blive vist i tabellen.

Når min funktion fungerer, bruger jeg purrr :: map_chr () igen for at gentage hvert element i kolonnen:

tweet_table_data $ URLs <- purrr :: map_chr (tweet_table_data $ URLs, make_url_html)

Bare rolig, hvis du ikke forstår denne del, da det virkelig handler om purrr og listekolonner end rtweet og reagerbar. Og det er ikke nødvendigt at søge og sortere tweets; du kan altid klikke på den originale tweet og se klikbare links der.

Endelig kan jeg køre min tilpassede reagerbar () kode på de nye data om tweet-tabellen:

reagerbar (tweet_table_data,

filtrerbar = SAND, søgbar = SAND, kantet = SAND, stribet = SAND, fremhæv = SAND,

showSortable = SAND, defaultSortOrder = "desc", defaultPageSize = 25, showPageSizeOptions = SAND, pageSizeOptions = c (25, 50, 75, 100, 200),

kolonner = liste (

DateTime = colDef (defaultSortOrder = "asc"),

Bruger = colDef (defaultSortOrder = "asc"),

Tweet = colDef (html = TRUE, minWidth = 190, resizable = TRUE),

Likes = colDef (filtrerbar = FALSK, format = colFormat (separatorer = SAND)),

RTs = colDef (filtrerbar = FALSK, format = colFormat (separatorer = SAND)),

URL'er = colDef (html = SAND)

)

)

Hvis du har fulgt med, skal du have din egen interaktive tabel, der kan søge, sortere og filtrere konference- eller emnet tweets.

Tips til tweet-samlere

En ting at huske: Hvis du følger et hashtag under en konference, vil du gerne hente nok tweets til at få hele konferencen. Så tjek den tidligste dato i din tweet-dataramme. Hvis denne dato er efter konferencens start, skal du anmode om flere tweets. Hvis din konference-hashtag har mere end 18.000 tweets (som det skete, da jeg sporede CES), skal du komme med nogle strategier for at få hele sættet. Tjek retryonratelimit argument for search_tweets () hvis du vil samle hele 18.000+ sæt konferenceshashtag tweets tilbage 6 dage eller derunder

Endelig skal du sørge for at gemme dine data i en lokal fil, når konferencen slutter! En uge senere har du ikke længere adgang til disse tweets via search_tweets () og Twitter API.

Og tjek bonus-episoden "Gør mere med R" for at se, hvordan du gør denne Twitter-sporingsapp til en interaktiv skinnende app.

For flere R-tip, gå til siden Do More With R på //bit.ly/domorewithR eller Play More With R-playlisten på TECHtalk YouTube-kanalen.