けものフレンズのTwitterアカウントフォロワー変動履歴をAnime APIから読み込んでグラフにしてみる
2月6日頃から,ネット上で「けものフレンズ」への関心が急激に高まっていたようである。下図はGoogleトレンドのグラフであるが,2月9日を100とした場合に,2月5日に9だった指標が,6日に35,2月8日に90,といった具合に変化していた。
公式Twitterアカウントのフォロワー数もこれに連動していると考えられる。本記事では,Rでデータを取得し,ggplot2
パッケージを使って「けものフレンズ」Twitterアカウントフォロワー数の推移をグラフに表してみたいと思う。
すごーい!
以前の記事
で紹介したAnime APIでは,アニメ作品のTwitterアカウントのフォロワー数の履歴といった貴重なデータを取得することができる。すごーい!
わーい!
まずは使用するパッケージを読み込む
library(tidyverse) #あとで使うdplyrもggplot2もこれをロードしておけばOK library(RCurl) library(rjson)
Anime APIからデータを読み込む
これは次のコードだけである。
kemono <- getURL('http://api.moemoe.tokyo/anime/v1/twitter/follower/history?account=kemo_anime') #&end_date=1486740607
URLの?account=
以下のkemo_anime
がけものフレンズのtwtterアカウントである。ここを他作品のものに変えれば,その作品のデータが取得できる。デフォルトだと,現在時刻から前の100件のデータが読み込まれる。コメントアウトされている#&end_date=
というのは,後で解説する。
リスト形式に変換する
読みこまれたデータはjson形式であるため,Rで表示しやすくするために,リスト形式にする
kemono.list<-fromJSON(kemono)
データフレーム形式に変換する
なじみあるデータ構造にするために,情報を抜き出してまとめる
Date <- as.character(lapply(kemono.list, '[[','updated_at')) Follower <- as.character(lapply(kemono.list, '[[','follower')) dat_kemono <- data_frame(date=Date,follower=Follower) dat_kemono
作成されたdat_kemono
は以下のような内容になる。
# A tibble: 100 × 2 date follower <chr> <chr> 1 1486740606 18411 2 1486738806 18370 3 1486737005 18313 4 1486735205 18250 5 1486733405 18202 6 1486731605 18142 7 1486729805 18077 8 1486728006 18019 9 1486726206 17953 10 1486724406 17911 # ... with 90 more rows
dateの列は,日付のUNIXタイムスタンプ(1970年1月1日午前0時0分0秒からの経過秒数)で,followerの列がフォロワー数を表している。
過去100件より前の履歴を取得する
kemono2 <- getURL('http://api.moemoe.tokyo/anime/v1/twitter/follower/history?account=kemo_anime&end_date=1486560610') kemono.list2 <- fromJSON(kemono2)
履歴を取得するには,どの時点より前なのかの情報を&end_date=
の部分に加える必要がある。履歴の更新は大体30分間隔で行われているようなので,60秒*30分*100行
で,大体180,000の数字の違いを指定してやればよい
今回は,1行目のデータが1486740606
だったので,これから180000を引いて,数秒増やした数字1486560610
を指定した。
1486740606-180000 [1] 1486560606
後は,同様にデータフレーム形式にする。リスト形式でまとめた方が手順が少なくて済みそうだが,自分がまだ慣れてないのでこのやり方を紹介する。もしかしたら無駄が多い作業になっているかもしれない。
Date <- as.character(lapply(kemono.list2, '[[','updated_at')) Follower <- as.character(lapply(kemono.list2, '[[','follower')) dat_kemono2 <- data_frame(date=Date,follower=Follower) dat_kemono2
後は同様の作業を繰り返して,集めたい期間の情報を取得してくるだけである。今回は, あと3回繰り返してdat_kemono5まで取得してみた。
データフレームを1つにつなげる
取得したデータはそれぞれ違う時間帯で,縦に長く連結するだけなので,dplyr
パッケージのbind_rows()
関数を使う。
dat_kemono_all <- bind_rows(dat_kemono, dat_kemono2, dat_kemono3, dat_kemono4, dat_kemono5)
これでデータセットが完成した。わーい!
たーのしーい!
さあ,いよいよグラフを描いていく。が,まずは準備。
date変数がUNIXタイムスタンプのままなので日付形式に変換しておく
これには大変便利なanytime
パッケージを使う。date変数が文字型なので,as.numeric()
で数値にしてanytime()
関数の中に放り込む。あとはタイムゾーンtz=
を東京に指定する。
library(anytime) dat_kemono_all$date2 <- anytime(as.numeric(dat_kemono_all$date), tz = "Asia/Tokyo")
# A tibble: 500 × 3 date follower date2 <chr> <dbl> <dttm> 1 1486740606 18411 2017-02-11 00:30:06 2 1486738806 18370 2017-02-11 00:00:06 3 1486737005 18313 2017-02-10 23:30:05 4 1486735205 18250 2017-02-10 23:00:05 5 1486733405 18202 2017-02-10 22:30:05 6 1486731605 18142 2017-02-10 22:00:05 7 1486729805 18077 2017-02-10 21:30:05 8 1486728006 18019 2017-02-10 21:00:06 9 1486726206 17953 2017-02-10 20:30:06 10 1486724406 17911 2017-02-10 20:00:06 # ... with 490 more rows
このように,新しい変数date2を作成し,日付と時刻が示されるようになった。
折れ線グラフを描く
ついに今回やりたかった所にたどりついた。みゃみゃみゃみゃみゃみゃみゃみゃー
ggplot(data = dat_kemono_all) + geom_line(mapping = aes(x = date2, y = follower))
こんな風に簡単に図が作成できた。これをみると,2月6日前でも徐々にフォロワー数が増加していたのだが,7日にかけて傾きが急に大きくなった様子が読み取れる。ちゃんと下地は形成されつつあったのだろう。この後の勢いが大きく,3日間でフォロワー数が倍増し,その後も増え続けている。たーのしーい!