Kako pretraživati ​​Twitter s rtweet i R

Twitter je sjajan izvor vijesti o R-u - posebno tijekom konferencija poput useR! i RStudio konferencija. A zahvaljujući R-u i paketu rtweet možete izraditi vlastiti alat za preuzimanje tweetova za jednostavno pretraživanje, sortiranje i filtriranje. Pogledajmo korak po korak.

Prvo želite instalirati bilo koji od paketa projekta rtweet koji još nemate: rtweet, reaktivan, ljepilo, stringr, httpuv i dplyr. Zatim za početak učitajte rtweet i dplyr.

# Ako trebate instalirati bilo što od ovoga:

# install.packages ("rtweet")

# install.packages ("reagira")

# install.packages ("ljepilo")

# install.packages ("stringr")

# install.packages ("httpuv")

# install.packages ("dplyr")

# install.packages ("purrr")

knjižnica (rtweet)

knjižnica (dplyr)

Odobri Twitter API

Da biste koristili rtweet, potreban vam je Twitter račun da biste mogli odobriti rtweet da koristi vaše vjerodajnice vašeg računa. To je zato što postoji ograničenje broja tweetova koje možete preuzeti u razdoblju od 15 minuta.

Michael Kearney, koji je napisao rtweet, korisnicima rtweet-a daje dva izbora. Najlakši je način jednostavno zatražiti neke tweetove. Ako na vašem sustavu nisu pohranjene vjerodajnice, trebao bi se otvoriti prozor preglednika koji traži da autorizirate zahtjev. Nakon toga, token za autorizaciju pohranit će se u vašu .Renviron datoteku, tako da ubuduće nećete morati ponovno autorizirati.

Možete posjetiti rtweet.info kako biste vidjeli drugu metodu koja uključuje postavljanje računa programera na Twitteru i novi projekt za generiranje vjerodajnica za autorizaciju. Ako ćete često koristiti rtweet, vjerojatno ćete to htjeti učiniti. Ali za početak je lakši način, pa, lakši.

Uvoz tweetova

Da biste pretraživali tweetove s određenim hashtagom (ili frazom koja nije hashtag), koristite intuitivno imenovanu earch_tweets()funkciju s . Potrebno je nekoliko argumenata, uključujući upit, poput #rstudioconf ili #rstats; želite li uključiti retweete; i broj tweetova koje treba vratiti. Broj je prema zadanim postavkama 100.

Iako u roku od 15 minuta možete primiti do 18.000 tweetova, postoji važno ograničenje prilikom upotrebe Twitter API-ja za traženje riječi ili izraza: rezultati pretraživanja vraćaju se samo šest do devet dana unatrag ako ne platite premium Twitter API račun. Za razliku od web stranice Twitter, ne možete koristiti rtweet za traženje tweetova s ​​konferencije prošle godine. Nećete moći pretraživati dva tjedna nakon konferencije da biste dobili te tweetove. Stoga ćete biti sigurni da ćete spremiti tweetove koje povučete sada, a možda biste ih poželjeli u budućnosti.

Postoji više argumenata koje možete upotrijebiti za prilagođavanje pretraživanja, ali krenimo s osnovnim pretraživanjem: 200 tweetova s ​​# hashtag #rstudioconf, bez retweeta.

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

include_rts = FALSE)

Ako pokrenete taj kôd i nikada prije niste koristili rtweet, morat ćete odobriti aplikaciju Twitter.

Imajte na umu da, iako tražite 200 tweetova, možda ćete dobiti manje. Jedan je razlog što u posljednjih šest do devet dana možda neće biti 200 tweetova za vaš upit. Druga je činjenica da je Twitter možda doista izdvojio 200 tweetova, ali nakon filtriranja retweeta ostalo je manje.

Okvir podataka tweet_df vraća se s 90 stupaca podataka za svaki tweet:

Sharon Machlis,

Stupci koji me obično najviše zanimaju su status_id, created_at, screen_name, text, favorite_count, retweet_count i urls_expanded_url. Možda ćete htjeti neke druge stupce za svoju analizu; ali za ovaj tutorial odabrat ću samo te stupce. 

Pretražujte, filtrirajte i analizirajte svoje tweetove

Mnogo je zanimljivih vizualizacija i analiza koje možete napraviti s Twitter podacima i R. Neki od njih ugrađeni su izravno u rtweet. Ali ovaj tutorial pišem noseći kapu tehnološkog novinara. Želim jednostavan način da vidim nove i cool stvari o kojima možda ne bih znao.

U tome bi vam mogli pomoći tweetovi s konferencije koji se najviše sviđaju. A ako koristim rtweet i Twitter API, ne moram se oslanjati na Twitterov "popularni" algoritam. Mogu pretraživati ​​i postavljati vlastite kriterije za "popularno". Možda bih želio potražiti najpopularnije tweetove tek od trenutnog dana dok je konferencija u tijeku ili filtrirati određenu temu koja me zanima - poput "sjajno" ili "purrr" - poredano po većini lajkova ili većini retvitova.

Jedan od najjednostavnijih načina za ovu vrstu pretraživanja i sortiranja je sortirajuća tablica. DT je ​​jedan popularni paket za to. Ali u posljednje vrijeme eksperimentiram s još jednim: reaktivan. 

Zadana reactable()je vrsta bla. Na primjer: 

tweet_table_data <- odaberite (tweetovi, -user_id, -status_id)

knjižnica (reagira)

reaktivan (tweet_table_data)

Ovaj kod stvara tablicu koja izgleda ovako:

Sharon Machlis,

Ali možemo dodati neke prilagodbe, kao što su:

reaktivan (tweet_table_data,

filtrirajuće = ISTINO, pretraživo = ISTINO, obrubljeno = ISTINO,

prugasta = TRUE, istaknuti = TRUE,

defaultPageSize = 25, showPageSizeOptions = TRUE,

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

stupci = popis (

created_at = colDef (defaultSortOrder = "asc"),

ime_ekrana = colDef (defaultSortOrder = "asc"),

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

omiljeni_broj = colDef (filtriranje = FALSE),

retweet_count = colDef (filtriranje = FALSE),

urls_expanded_url = colDef (html = ISTINITO)

)

)

Rezultat je tablica koja izgleda otprilike ovako:

Sharon Machlis,

Konfigurirajte svoju reaktabilnu tablicu podataka 

U gornji dio koda, filterable = TRUEargument je dodao filtre za pretraživanje ispod zaglavlja svakog stupca i searchabledodao okvir za cjelokupno pretraživanje tablice u gornjem desnom kutu. Uključivanje bordered, stripedi highlightčini ono što možete očekivati: Dodaje granicu stol, dodaje boju naizmjenično-red „pruge” i naglašava zaredom Ako stavite kursor na njega.

I set my defaultPageSize to 25. The showPageSizeOptions argument lets me change the page length interactively, and then I define page size options that will show up in a drop-down menu below the table (not visible in the screen shot). The showSortable argument adds little arrow icons next to column names so users know they can click to sort. And I set each column’s defaultSortOrder to descending instead of ascending. So if I click on the column of number of retweets or likes, I will see that as most to least, not least to most.

Finally, there is the columns argument. That’s a list containing a column definition for each column. Look at the reactable help files for more details on other available options. In this example, I set the created_at and screen_name columns to have a default sort order of ascending. For the text column, I set it to display HTML as HTML so I can add clickable links. I also set a minimum column width of 190 pixels and made the column resizable — so users can click and drag to make it wider or narrower.

I also turned off the filter boxes for favorite_count and reply_count. That’s because, unfortunately, reactable filters don’t understand when columns are numbers and will filter them as character strings. While reactable sorts number columns properly, the filter boxes are problematic. That’s the major drawback to reactable vs. the DT package: DT understands column types and filters accordingly. But sorting numerically is enough for me for this purpose. 

You can check out the video at the top of this article to see what it looks like when you sort a column or make the tweet text column wider and narrower.

Make your data table more useful

A couple of things will make this table more useful. This code doesn’t display images or videos included in tweets. That’s fine, because my purpose here is to scan text, not re-create a Twitter application. But that means it will sometimes be helpful to see the original tweet in order to view photos, videos, or comments.

I think it’s convenient to add a small clickable something at the end of each tweet’s text that you can click to see the actual tweet on Twitter. I decided on >> although it could be any character or characters.

To construct a URL, I need to know the format of a tweet, which if you look at any tweet on the Twitter website, you can see is //twitter.com/username/status/tweetID. 

Using the glue package, that would be rendered like this: 

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

If you haven’t used glue before, it’s a great package for pasting together text and variable values. In the above code, any variable name between braces is evaluated.

My full code to create a column with a clickable link to the tweet after the tweet text:

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

And the code to create a data frame for an interactive table:

tweet_table_data %

select(user_id, status_id, created_at, screen_name, text, favorite_count, retweet_count, urls_expanded_url) %>%

mutate(

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

)%>%

select(DateTime = created_at, User = screen_name, Tweet, Likes = favorite_count, RTs = retweet_count, URLs = urls_expanded_url)

I'd also like to make clickable links from the URL column, which is now just text. This is a bit complicated, because the URL column is a list column because some tweets include more than one URL.

I’m sure there is a more elegant way to create clickable links from a list column of plain-text URLs, but the code below works. First I create a function to generate the HTML if there are no URLs, one URL, or two or more:

make_url_html <- function(url) {

if(length(url) < 2) {

if(!is.na(url)) {

as.character(glue("{url}") )

} else {

""

}

} else {

paste0(purrr::map_chr(url, ~ paste0("", .x, "", collapse = ", ")), collapse = ", ")

}

}

I run purrr::map_chr() on the URL value if there are two or more URLs so that each URL gets its own HTML; then I paste them together and collapse them into a single character string to appear in the table.

Once my function works, I use purrr::map_chr() again to iterate over each item in the column:

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

Don’t worry if you don’t understand this part, since it’s really more about purrr and list columns than rtweet and reactable. And it’s not necessary to search and sort the tweets; you can always click to the original tweet and see clickable links there.

Finally, I can run my customized reactable() code on the new tweet table data: 

reactable(tweet_table_data,

filterable = TRUE, searchable = TRUE, bordered = TRUE, striped = TRUE, highlight = TRUE,

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

columns = list(

DateTime = colDef(defaultSortOrder = "asc"),

User = colDef(defaultSortOrder = "asc"),

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

Likes = colDef(filterable = FALSE, format = colFormat(separators = TRUE)),

RTs = colDef(filterable = FALSE, format = colFormat(separators = TRUE)),

URLs = colDef(html = TRUE)

)

)

If you’ve been following along, you should have your own interactive table that can search, sort, and filter conference or topic tweets.

Tips for tweet collectors

One thing to remember: If you’re following a conference hashtag during a conference, you will want to pull enough tweets to get the whole conference. So check the earliest date in your tweet data frame. If that date is after the conference started, request more tweets. If your conference hashtag has more than 18,000 tweets (as happened when I was tracking CES) you’ll need to come up with some strategies to get the whole set. Check out the retryonratelimit argument for search_tweets() if you want to collect a whole 18,000+ set of conference hashtag tweets going back 6 days or less 

Finally, make sure to save your data to a local file when the conference ends! A week later, you’ll no longer have access to those tweets via search_tweets() and the Twitter API.

Pogledajte i bonus epizodu „Učini više s R“ da biste vidjeli kako pretvoriti ovu aplikaciju za praćenje Twittera u interaktivnu sjajnu aplikaciju.

Za više savjeta o R, idite na stranicu Učini više s R na //bit.ly/domorewithR ili Popis za reprodukciju Učini više s R na YouTube kanalu TECHtalk.