Subscribed unsubscribe Subscribe Subscribe

ももクロの人気上昇ぶりをグラフで可視化する

Ruby JavaScript momoclo

「最近、ももクロの人気が急上昇中。」とだけ盲目的に言っていてもアレなので、参考になる資料を用意したく。
ちょうど最近ファンの間で「メンバーのブログへのコメント件数が増えているよね」というのがあったので、その推移をグラフで可視化してみた。

各メンバーのブログ記事についているコメント件数の推移を色別に分けてグラフにした。横軸が時間軸、縦軸がコメント件数となっている。表示範囲、表示する対象メンバーは調整できるようにした。


ももいろクローバーZ」になってから今に至るまでの全員の推移がこうなる。


昨年夏はメンバーの誕生日で500や1000にようやく届く(2011年6, 7月の領域に見られるスパイク)程度だったが、冬くらいからはどんどん右肩あがりになっていて500を越えるのは当たり前のような状態になってきているのが一目で分かる。最高値を叩き出しているのは今年3月の、メンバー有安杏果の誕生日直前の記事に対するおめでとうコメントで2,665件。


ちなみに僕が大好きな「あーりん」こと佐々木彩夏のブログコメント数だけを見るとこんなカンジになる。


今年3月1日の「高校進学が決まりました」という報告に対するおめでとうコメントで1,307件。


更新頻度はメンバーによってバラバラ(特に杏果、あーりんが更新頻度高い)なので一概に比較はできないが、メンバーによる平均的なコメント数の差はそれほど無いようだ。

実装

ソースコードGithubに。

Herokushared-databaseschedulerを使用、10分毎にスクレイピングしてPostgreSQLのデータを更新しつつ、SinatraアプリによるAPIでそれを引っぱってきて、Highchartsを使ってグラフ描画している。

コメント数の取得

アメブロから各ブログ記事のタイトルやコメント数を取得するためのAPIなどは無いようだったので、素直にスクレイピングすることにした。
最初はDBを使う必要も無いか、と思ってNode.jsでスクレイピングしたものをGoogle SpreadsheetsにPOSTして、表側では1枚のHTMLでそのAPIを叩いてデータ取得する、というものを作っていた

これはこれでスクレイピングの処理とSpreadsheetsへのPOSTをリクエスト完了待たずに並行して行なうことができて良かったのだけど、
考えてみたらデータは頻繁に更新されるのだから定期的な実行が必要、そうなるとherokuとかでscheduler使えた方が良いな、と思って、そしてどうせheroku使うならRubyとか挑戦してみようか、と思って結局スクレイピング処理もnokogiriを使ったもので書き直した。

Ruby, PostgreSQL

RubyPostgreSQLもほとんどマトモに触ったことがなかったので結構ググりながら試行錯誤だった。なんとか一応動いたけどもっと上手く書けるんだろうな、と思っているので詳しい方からツッコミや添削をいただけると有り難いです。特にDBとの接続周りはどうするのが良いのだろう?この程度のものならO/R Mapperも必要ないかなと思って使わなかった、というのもあるけど、DataMapperやSequel, ActiveRecordなどの違いもよく分かっていなかったので普通に敬遠した。
Sinatra+HamlはNode.jsでExpress+Jadeの経験があると非常に馴染みやすい、と思った。
PostgreSQLはtime zoneまわりで結構ハマった。なかなか使いこなすのは難しそう。

グラフ描画ライブラリ Highcharts

これはスゴい便利だと思った。データさえ用意されていれば簡単にキレイなグラフが描ける。設定項目やオプションが多すぎて調べるのが大変だったりはしたけど、グラフの見た目が良いだけでなく表示範囲の調整がやりやすくとても見易いものが作れるので、これからも重用していきたい。