読者です 読者をやめる 読者になる 読者になる

いずにゃんの研究日記

専門性を広げるための練習場

RでAnime APIから季節のアニメ情報を読み込んで一覧できるデータフレームにする

R

3か月ごとに,アニメの新番組チェックが忙しくなる時期がやってくる。 こんなとき,放映されるアニメ番組一覧の情報を手軽に作成できたら便利である。 それがRでできたらさらに心健やかになるに違いない。

アニメ番組一覧の情報について,アニメとITの融合「Anitech」を 促進している秋葉原IT戦略研究所さまがとても素晴らしい 仕組みを提供している。

qiita.com

これにアクセスすれば,JSON形式で様々なアニメ番組情報が取得できる。 以下,Rでどうやって行うかを解説する。なお,R Studioを使用している。


RからAnime APIを呼び出す

library(RCurl)

getURL()関数で読み込む先のURLを指定する。 ここでは,2017年の冬アニメを指定しているので,URLの末尾が/2017/1となっている。ここの西暦(2014年以降)と最後の番号(1~4)を変えれば,他の季節のアニメ情報も取得できる。

getdata.json <- getURL('http://api.moemoe.tokyo/anime/v1/master/2017/1')

これでJSON形式の情報はRに読み込めた。しかし,Rでこれを閲覧するためには,まずJSON形式からlist形式に変換する必要がある。そこで登場するのが次のパッケージである。

library(rjson)

変換は次のコードの通りである。

getdata.list <- fromJSON(getdata.json)

少し出力が長くなってしまうがstr()を使うとどういうデータが 読み込まれているのか,listの構造を把握できる。

str(getdata.list)

最初の1作品の結果を示すと,

List of 40
 $ :List of 15
  ..$ title_short2    : chr ""
  ..$ twitter_account : chr "anime_aimaimi"
  ..$ public_url      : chr "http://www.dreamcreation.co.jp/aimaimi3/"
  ..$ title_short1    : chr "あいまいみ"
  ..$ sex             : num 0
  ..$ twitter_hash_tag: chr "あいまいみー"
  ..$ id              : num 475
  ..$ sequel          : num 3
  ..$ created_at      : chr "2017-01-03 01:10:03.0"
  ..$ city_name       : chr ""
  ..$ cours_id        : num 13
  ..$ title           : chr "ちょぼらうにょぽみ劇場第三幕 あいまいみー~Surgical Friends~"
  ..$ city_code       : num 0
  ..$ title_short3    : chr ""
  ..$ updated_at      : chr "2017-01-03 01:10:03.0"

のようになる。しかしこれでは少し中身が把握しづらい。 こんなときに便利なのが,listviewerパッケージである。

qiita.com

library(listviewer)
jsonedit(getdata.list)

と実行すると,以下のようにRstudio内で見やすい形式に中身を 確認して,listの構造も確認できる。

f:id:izunyan:20170108200619j:plain


listから必要なデータを抜き出して,データフレームにする

1つのアニメ作品に様々な情報が付与されているので,分かりやすくするためとりあえず,3つの変数(作品名,webサイトURL,twitterアカウント) として情報を抜き出してみる。これにはlapplyを使う。

Title <- as.character(lapply(getdata.list, '[[','title'))
Web <- as.character(lapply(getdata.list, '[[','public_url'))
Twitter <- as.character(lapply(getdata.list, '[[','twitter_account'))

ここの'[['というのが最初よく理解できないと思うが,詳しい説明は

複数の行列、データフレームからなるリストの各成分から特定要素を抽出する (from r-help, 2004.09.17)

などを参照すると分かるかもしれない。あとは,この3つの変数(ベクトル)をデータフレームにまとめるだけである。データ表示に便利なtibble形式にする。

library(dplyr)
dat <- data_frame(title=Title,web=Web,twitter=Twitter)
dat

f:id:izunyan:20170108200711j:plain

環境によっては長くなっている部分の変数名は省略されて表示されているかもしれないが,これで今季のアニメ視聴に役立つリストがデータフレームとして作成できた。あとはcsvで出力するなど好きなように使えばよい。


追記(2017/02/12)

申し遅れてしまったが,本記事のコードは以下の解説を大いに参考にさせていただいている。RESAS-APIについてもその内まとめてみたい。

qiita.com