Programiranje

Kako iskati Twitter z rtweet in R

Twitter je odličen vir novic o R - še posebej med konferencami, kot je useR! in konferenca RStudio. Zahvaljujoč R in paketu rtweet lahko ustvarite svoje orodje za prenos tvitov za enostavno iskanje, razvrščanje in filtriranje. Oglejmo si, korak za korakom.

Najprej želite namestiti katerega koli paketa projekta rtweet, ki ga še nimate: rtweet, reaktabilen, lepilo, stringr, httpuv in dplyr. Nato za začetek naložite rtweet in dplyr.

# Če morate namestiti katero koli od teh:

# install.packages ("rtweet")

# install.packages ("odziven")

# install.packages ("lepilo")

# install.packages ("stringr")

# install.packages ("httpuv")

# install.packages ("dplyr")

# install.packages ("purrr")

knjižnica (rtweet)

knjižnica (dplyr)

Pooblastite Twitter API

Če želite uporabljati rtweet, potrebujete račun Twitter, da boste lahko rtweet pooblastili za uporabo vaših poverilnic za vaš račun. To je zato, ker obstaja omejitev števila tweetov, ki jih lahko prenesete v 15-minutnem obdobju.

Michael Kearney, ki je napisal rtweet, uporabnikom rtweet ponuja dve možnosti. Najlažji način je, da preprosto zahtevate nekaj tweetov. Če v vašem sistemu ni shranjenih poverilnic, se mora odpreti okno brskalnika, ki zahteva, da zahtevo odobrite. Po tem se bo žeton za avtorizacijo shranil v vašo datoteko .Renviron, tako da vam v prihodnje ni treba ponovno pooblaščati.

Obiščete lahko rtweet.info in si ogledate drugo metodo, ki vključuje nastavitev računa razvijalca za Twitter in nov projekt za ustvarjanje poverilnic za avtorizacijo. Če boste veliko uporabljali rtweet, boste to verjetno želeli storiti. Toda za začetek je lažja pot, no, lažja.

Uvoz tweetov

Za iskanje tvitov z določenim hashtagom (ali besedno zvezo, ki ni hashtag) uporabite intuitivno poimenovano search_tweets () funkcijo. Potrebuje več argumentov, vključno s poizvedbo, na primer #rstudioconf ali #rstats; ali želite vključiti retweets; in število tweetov, ki jih je treba vrniti. Privzeto število je 100.

Čeprav lahko v 15 minutah prejmete do 18.000 tweetov, obstaja pomembna omejitev pri uporabi API-ja Twitter za iskanje besede ali fraze: rezultati iskanja se vračajo le šest do devet dni, razen če plačate za premium račun Twitter API. V nasprotju s spletnim mestom Twitter ni mogoče uporabiti rtweet za iskanje tweetov z lanske konference. Ne boste mogli iskati dva tedna po konferenci, da bi dobili te tvite. Tako boste želeli shraniti tvite, ki jih povlečete zdaj, ki bi jih morda želeli v prihodnosti.

Obstaja več argumentov, s katerimi lahko prilagodite iskanje, vendar začnimo z osnovnim iskanjem: 200 tweetov s hashtagom #rstudioconf, brez ponovnih tweetov.

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

include_rts = FALSE)

Če zaženete to kodo in še nikoli niste uporabljali rtweet, boste morali pooblastiti aplikacijo Twitter.

Upoštevajte, da čeprav zahtevate 200 tweetov, boste morda dobili manj. Eden od razlogov je, da v zadnjih šestih do devetih dneh za vašo poizvedbo morda ne bo 200 tweetov. Druga težava je, da je Twitter resnično sprva izdvojil 200 tweetov, a po filtriranju retweetov jih je ostalo manj.

Podatkovni okvir tweet_df se vrne z 90 stolpci podatkov za vsak tweet:

Sharon Machlis,

Kolumne, ki me običajno najbolj zanimajo, so status_id, created_at, screen_name, text, favorite_count, retweet_count, in urls_expanded_url. Morda boste želeli še nekaj stolpcev za analizo; ampak za to vadnico bom izbral samo te stolpce.

Iščite, filtrirajte in analizirajte svoje tvite

Obstaja veliko zanimivih vizualizacij in analiz, ki jih lahko naredite s podatki Twitterja in R. Nekatere so vgrajene kar v rtweet. Ampak to vadnico pišem v klobuku tehnološkega novinarja. Želim preprost način, da vidim nove in kul stvari, o katerih morda ne bi vedel.

Pri tem vam lahko pomagajo najbolj všečni tviti s konference. In če uporabljam rtweet in Twitter API, se mi ni treba zanašati na Twitterjev "priljubljeni" algoritem. Lahko opravljam lastna iskanja in nastavim svoja merila za »priljubljeno«. Morda bom želel poiskati najbolj priljubljene tweetove šele od trenutnega dne, ko je v teku konferenca, ali filtrirati določeno temo, ki me zanima - na primer »sijoča« ali »purrr« - razvrščena po večini všečkov ali večini retvitov.

Eden najlažjih načinov za tovrstno iskanje in razvrščanje je razvrščljiva tabela. DT je ​​en priljubljen paket za to. Toda v zadnjem času eksperimentiram z drugim: odzivno.

Privzeto odziven () je nekako bla Na primer:

tweet_table_data <- izberite (tweets, -user_id, -status_id)

knjižnica (odzivna)

odziven (tweet_table_data)

Ta koda ustvari tabelo, ki je videti takole:

Sharon Machlis,

Lahko pa dodamo nekaj prilagoditev, kot so:

odziven (tweet_table_data,

filtriranje = TRUE, iskanje = TRUE, obrobljeno = TRUE,

črtasto = TRUE, poudari = TRUE,

defaultPageSize = 25, showPageSizeOptions = TRUE,

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

stolpci = seznam (

created_at = colDef (defaultSortOrder = "asc"),

screen_name = colDef (defaultSortOrder = "asc"),

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

favorit_count = colDef (filtriranje = FALSE),

retweet_count = colDef (filtriranje = FALSE),

urls_expanded_url = colDef (html = TRUE)

)

)

Rezultat je tabela, ki je videti nekako takole:

Sharon Machlis,

Konfigurirajte podatkovno tabelo, ki jo je mogoče odzvati

V zgornjem delu kode je filtriranje = TRUE argument dodal iskalne filtre pod glavo vsakega stolpca in iskanje je dodal celotno iskalno polje tabele zgoraj desno. Vklopiti obrobljen, črtasto, in poudarite naredi tisto, kar bi lahko pričakovali: doda obrobo tabele, doda barvne "črte" izmenične vrstice in označi vrstico, če nanjo postavite kazalko.

Nastavil sem svoje defaultPageSize do 25. TheshowPageSizeOptions argument mi omogoča interaktivno spreminjanje dolžine strani, nato pa določim možnosti velikosti strani, ki se prikažejo v spustnem meniju pod tabelo (niso vidne na posnetku zaslona). The showSortable argument poleg imen stolpcev doda ikone puščic, tako da uporabniki vedo, da lahko kliknejo za razvrščanje. In nastavim vsakega stolpcadefaultSortOrder do padajočega namesto naraščajočega. Torej, če kliknem na stolpec s številom ponovnih tweetov ali všečkov, bom to videl kot največ do najmanj, nenazadnje do večine.

Končno je tu še stolpci prepir. To je seznam z definicijo stolpcev za vsak stolpec. Za več podrobnosti o drugih razpoložljivih možnostih si oglejte odzivne datoteke pomoči. V tem primeru sem nastavil created_at in zaslonsko ime stolpci, da imajo privzeti vrstni red razvrščanja naraščajoče. Za besedilo stolpec, sem jo nastavil tako, da HTML prikaže kot HTML, da lahko dodam klikljive povezave. Določil sem tudi najmanjšo širino stolpca 190 slikovnih pik in omogočil spreminjanje velikosti stolpca - tako da lahko uporabniki kliknejo in povlečejo, da ga povečajo ali ožijo.

Izklopil sem tudi filtrirna polja za najljubši_števek in reply_count. To je zato, ker reaktivni filtri žal ne razumejo, kdaj so stolpci številke, in jih bodo filtrirali kot znakovne nize. Medtem ko je reaktiven vrste pravilno oštevilčiti stolpce, so polja s filtri problematična. To je glavna pomanjkljivost odzivnega paketa DT: DT ustrezno razume vrste stolpcev in filtre. Toda v ta namen mi je dovolj številčno razvrščanje.

V videoposnetku na vrhu tega članka si lahko ogledate, kako je videti, ko razvrščate stolpec ali širši in ožji stolpec besedila v tweetu.

Naredite svojo podatkovno tabelo bolj uporabno

Nekaj ​​stvari bo to tabelo bolj uporabno. Ta koda ne prikazuje slik ali videoposnetkov, vključenih v tvite. To je v redu, ker je moj namen tukaj skenirati besedilo, ne pa ponovno ustvarjati aplikacije Twitter. To pa pomeni, da bo včasih koristno videti originalni tweet, če si želite ogledati fotografije, videoposnetke ali komentarje.

Menim, da je na koncu besedila vsakega tvita priročno dodati majhno klikljivo stvar, na katero lahko kliknete in si ogledate dejanski tweet na Twitterju. Odločila sem se >> čeprav je lahko kateri koli znak ali znaki.

Če želite zgraditi URL, moram poznati obliko tvita, ki ga lahko pogledate, če pogledate katerega koli tvita na spletnem mestu Twitter.//twitter.com/username/status/tweetID. 

Z uporabo paketa lepila, ki bi bil upodobljen tako:

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

Če še niste uporabljali lepila, je to odličen paket za lepljenje vrednosti besedila in spremenljivk. V zgornji kodi se izračuna vsako ime spremenljivke med oklepaji.

Moja celotna koda za ustvarjanje stolpca s klikljivo povezavo do tvita po besedilu tvita:

Tweet = lepilo :: lepilo ("{besedilo} >>") 

In koda za ustvarjanje podatkovnega okvira za interaktivno tabelo:

tweet_table_data%

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

mutiraj (

Tweet = lepilo :: lepilo ("{besedilo} >>")

)%>%

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

Prav tako bi rad naredil klikljive povezave iz stolpca URL, ki je zdaj samo besedilo. To je nekoliko zapleteno, ker je stolpec URL stolpec seznama ker nekateri tviti vključujejo več kot en URL.

Prepričan sem, da obstaja bolj eleganten način za ustvarjanje povezav, ki jih je mogoče klikniti, iz stolpca s seznamom URL-jev v golem besedilu, vendar spodnja koda deluje. Najprej ustvarim funkcijo za generiranje HTML-ja, če ni URL-jev, enega URL-ja ali dveh ali več:

make_url_html <- funkcija (url) {

if (dolžina (url) <2) {

if (! is.na (url)) {

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

} še {

""

}

} še {

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

}

}

tečem purrr :: map_chr () na vrednosti URL-ja, če sta dva ali več URL-jev, tako da vsak URL dobi svoj HTML; nato jih prilepim in strnem v en sam znakovni niz, ki se prikaže v tabeli.

Ko moja funkcija deluje, jo uporabim purrr :: map_chr () še enkrat za ponovitev vsakega elementa v stolpcu:

tweet_table_data $ URL-ji <- purrr :: map_chr (tweet_table_data $ URL-ji, make_url_html)

Ne skrbite, če tega dela ne razumete, saj gre res bolj za purrr in seznam stolpcev kot za rtweet in odziven. In ni treba iskati in razvrščati tweetov; vedno lahko kliknete na izvirni tweet in tam vidite povezave, ki jih je mogoče klikniti.

Končno lahko zaženem svojo prilagojeno odziven () koda na novih podatkih tabele tweetov:

odziven (tweet_table_data,

filtriranje = TRUE, iskanje = TRUE, obroba = TRUE, črta = TRUE, oznaka = TRUE,

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

stolpci = seznam (

DateTime = colDef (defaultSortOrder = "asc"),

User = colDef (defaultSortOrder = "asc"),

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

Likes = colDef (filtriranje = FALSE, format = colFormat (ločila = TRUE)),

RTs = colDef (filtriranje = FALSE, format = colFormat (ločila = TRUE)),

URL-ji = colDef (html = TRUE)

)

)

Če ste sledili, bi morali imeti lastno interaktivno tabelo, ki lahko išče, razvršča in filtrira tvite o konferencah ali temah.

Nasveti za zbiralce tweetov

Ne pozabite si nekaj: če med konferenco spremljate hashtag konference, boste želeli povleči dovolj tweetov, da boste dobili celotno konferenco. Torej preverite najzgodnejši datum v svojem podatkovnem okviru za tweet. Če je ta datum po začetku konference, zahtevajte več tweetov. Če ima vaš hashtag konference več kot 18.000 tweetov (kot se je zgodilo, ko sem sledil CES), boste morali pripraviti nekaj strategij, da boste dobili celoten sklop. Oglejte si retryonratelimit argument za search_tweets () če želite zbrati celotnih 18.000+ sklopov tweetov za hashtag konference za 6 dni ali manj

Na koncu shranite podatke v lokalno datoteko, ko se konferenca konča! Teden dni kasneje ne boste več imeli dostopa do teh tvitov prek search_tweets () in Twitter API.

In si oglejte bonus epizodo »Naredi več z R«, če želite videti, kako to aplikacijo za sledenje Twitterja spremeniti v interaktivno aplikacijo Shiny.

Za več nasvetov R pojdite na stran Naredite več z R na //bit.ly/domorewithR ali na seznam predvajanja Naredi več z R na kanalu TECHtalk YouTube.

$config[zx-auto] not found$config[zx-overlay] not found