今回したいこと
今回したいことは、ある Twitter アカウントのツイートを、リツイート数が多い順に並べることだ。これは、Rの rtweet
パッケージを使えばできる。
例えば、NHKニュースの Twitter アカウント (@nhk_news) の直近の1000個のツイートの中で、リツイートされた回数が多いものから順に並べたいとしよう。このことは、次のスクリプトで実行できる。
library("tidyverse") library("rtweet") nhk_news_tw <- get_timeline("nhk_news", n = 1000) nhk_news_tw %>% arrange(desc(retweet_count)) %>% select(text, retweet_count)
以下、解説。
rtweet
パッケージの準備
Rでは、 rtweet
パッケージで Twitter のツイートを分析できる。このパッケージはCRANに入っているので、以下のようにして簡単にインストールすることができる。
install.packages("rtweet")
実際に使うときには、library
を使って読みこんでおこう。
library("rtweet")
ツイートの取得
rtweet
パッケージでは、get_timeline
という関数でツイートを取得できる。この関数は、引数として 取得したいアカウントの文字列や取得したいツイートの数をとる。
以下では、@nhk_news の最新のツイートを1000件取得している。
nhk_news_tw <- get_timeline("nhk_news", n = 1000)
取得したツイートは tibble [1] になる。この例で言うと、nhk_news_tw
が@nhk_news の最新のツイート1000件分が入った tibble になる。
この tibble には、ツイートの文章そのものだけでなく、ツイートに付随するさまざまな情報も入っている。例えば、ツイートが行われた時間やどんなハッシュタグが含まれているかといったものが入っている。
リツイートが多い順に並べ替える
先ほど作った tibble の中には、retweet_count
という列がある。ここには、リツイートがなされた回数が収められている。dplyr
パッケージの [2] arrange
関数を使って retweet_count
の値が大きい順に並べ替えれば、リツイートが多い順に並ぶことになる。
具体的には以下のようにする。
nhk_news_tw %>% arrange(desc(retweet_count)) %>% select(text, retweet_count)
arrange
の中に desc
が入っているのは、昇順(リツイートが少ないものが先に来る順番)でなく、降順(リツイートが多いものが先に来る順番)にしたいからである。また、nhk_news_tw
の tibble の中には色々な情報が入っているので、ツイートの文章そのものとリツイート数だけに限定するために select
を使っている。
こうすると、こんな感じで、リツイート数が多い順に、ツイートの文章とリツイート数が出てくる。
1 "新型コロナの影響で売り上げが減少した飲食店の支援のため、山梨県富士吉田市でウマで弁当を配達す… 18333 2 【速報 JUST IN 】東京都 新たに30人以上の感染確認 新型コロナウイルス #nhk_n… 16124 3 「次亜塩素酸水」現時点では有効性は確認されず NITEが公表 #nhk_news https:… 7026 4 東京都 新たに20人余り感染確認 20人超は15日ぶり 新型コロナ #nhk_news htt… 5372 5 北九州 小学校でクラスター発生 感染5人に 新型コロナ #nhk_news https://t… 4365
「新型コロナの影響で売り上げが減少した飲食店の支援のため、山梨県富士吉田市でウマで弁当を配達……」というツイートが、リツイート数 18,333 回で最も多かったことが分かる。
応用その1:他のアカウントのツイートをリツイートしたものを排除する
上で取得したツイートの中には、他のアカウントがツイートしたものをNHKニュースの Twitter アカウント (@nhk_news) がリツイートしたものも入ってしまっている。他のアカウントのツイートを排除したければ、次のようにすれば良い。
nhk_news_tw %>% filter(is_retweet == FALSE) %>% arrange(desc(retweet_count)) %>% select(text, retweet_count)
get_timeline
関数で得られる tibble の中には、is_retweet
という列がある。この列には、他のアカウントのツイートのリツイートかどうかという情報が入っている。他のアカウントのツイートのリツイートでなければ、ここは FALSE
になるので、filter(is_retweet == FALSE)
によって他のアカウントのツイートのリツイートを排除できる。
応用その2:いいねの数が多い順に並べる
get_timeline
関数で得られる tibble の中には、いいね (like) の数の情報も含まれている。具体的に言うと、favorite_count
の行にその情報がある。だから、以下のようにすると、いいねの数が多い順に並べることができる。
nhk_news_tw %>% filter(is_retweet == FALSE) %>% arrange(desc(favorite_count)) %>% select(text, favorite_count)