黄昏より暗きもの、血の流れより赤きもの

黄昏より暗きもの、血の流れより赤きもの

自分の好きな事を好きなように書いて行きます。

ラブライブ!の西木野真姫の誕生日にかこつけ、pixivのイラスト投稿数を1年間集計した感想を書いた

序章:西木野真姫ちゃんと言えば...

ラブライブ!と言えばメンバーが9人の高校生アイドル(μ's)のお話。その1人の西木野真姫ちゃんと言えば、ピアノの上手い子で卒業式の時に、「【音樂】愛してるばんざーい! 西木野真姬 (完整版)」を演奏しているのが印象的。そんな訳で西木野真姫ちゃんスライドを見ながら、色々話していこうと思う。

本記事の対象


f:id:program_study:20150418234204j:plain

第1章:概要

本記事のここからの概要を話そうと思う。pixivのイラストのページに入って、タグを選択すると下のように投稿枚数の累計が出て来る。これを12時間*1毎に集計し、その推移を取ってみようというもの。今回は「西木野真姫」タグのイラストの投稿枚数の変化を見ると言うものだ。主な使用機材はスライドの通りだ。


f:id:program_study:20150418234215j:plain

第2章:はじめたきっかけ

このラブライブ!統計と言うべきものをはじめたきっかけは、とにかく数値を使って何かをしたかったからだ。時を遡る事昨年。丁度ラブライブ!が第二期が放送されていたのもあり、丁度良いと思いはじめた。


f:id:program_study:20150418234231j:plain

pixivのデータ収集〜集計まで

又データ分析だと良くオープンデータを使ってはじめる事がある。さてTokyoWebMining 45thを見ながら本稿を執筆していたものだが、日本の省庁のオープンデータの使いにくさに爆笑しまくると言うコーナを見ていた。そこではデータがExcelで提供されていたり、はたまた訳の分からないJSONだったり、「どうするんだ!」と言う声が挙っていた。さらにはデータを恣意的にカテゴリー分けしていると言う、こりゃこりゃな話まで。


さて自分の場合はと言えば、この集計作業をコンピュータにやらせる事にした。上の話の通りデータ分析をやる場合、実際問題として自分で調査できる体勢を整えなければならない場合が多い。今回の場合まずさくらVPSを用意。次にPHPでpixivの投稿数の部分のhtmlを調査し、数字の部分を抜き取り(Webスクレイピング)、これを直してMySQLに保存。それをcronによって12時間ないしは24時間毎に実行させ、定期的にデータを収集することにした(プログラムはこちら)。

そんな訳でいざ投稿数収集の骨格が完成した。下のスライドのP44のような、DeNAレベルの大規模なデータともなれば、Hadoopなどで骨格を組んだりする。しかし今回の集計程度ではここまでは必要ない。

というのもラブライブのタイトル含めたキャラ数は10キャラクター、加え1日に1回集計なので、データベースに保存される(レコード)件数は(10件/日)程度。1年で3,650件/年程度だ。最もこの点から考えても、DeNAには到底適わないが、手始めの段階を無事終えられた事に大変満足したものだ。


以下はこの骨格を、運用していった上での思い出話を。

第3章:運用上の思い出話/さくらVPS(CentOS) がメモリリークを起こす

この章では運用上の思い出話について。思い出と言えばさくらVPSメモリリークを起こして、データ収集が止まった事が懐かしい。

やれやれ。データ収集上あってはならない事が起こってしまった。これは色んなプログラムが動いていた事が原因だ。このためこのVPSをpixiv用に用途を絞り、一定時間毎にメモリを解放するように変更。どうも余計な事は極力しないというのが、安定運用の鍵と言えよう。


f:id:program_study:20150418234256j:plain

しかしこれが実務でサーバー(システムやサービス)が1日止まったとなれば、最悪数億レベルで損害が出ていただろう。ここから機材を運用する上できちんとメンテナンスする事の重要性を知った。

機材の故障率、耐用年数を考慮して売上を見込む

以下、こんな事から色々考えてみた事を話す。一点目は機材の故障率を考慮した売上高計算も重要と言う事。好きな数学を使って話をすると、現在ある機材Mを使用してn年が経過している。このとき機材Mが1年間における稼働率P_n、その売上高をS_nとする。又機材故障による損失額をL_nとすれば、機材Mの1年当たりの売上高は:T = P_n * S_n - (1-P_n) * L_n(期待値)と表せる。

例えばWebサービスだとユーザー数が増えると、サーバーの負荷が増大し、故障率(1-P_n)も増えると考えてよい。この為故障率も一定期間事に増える事が見込まれ、定期的に故障率の更新を行なう必要がある。ちょうどサイコロの丁半勝負で言うなら、動いている場合を丁、故障した場合を半と考え、機械の故障をバクチの当たり外れで考えていて、その期待値を考えている訳だ。

無論P_nの算定方法についても考えてみたが、今はやりの手法を使うなら故障する要因を複数探し、回帰分析するなどして決めてもよいだろう。

止まらないWebサービスに感謝!

二点目は、止まらないWebサービス、及び全てのインフラエンジニア様は素晴らしいと言う事だ。こういう商売をやっていると、プログラムのバグはつきものだし、常にトラブルに頭を抱える事が多い。自分でこうして同じような事をやっていると、常に止まらないかヒヤヒヤものだ。サーバー関連でも負荷が増えた対応など、日々追われているに違いない。

今こうして俺がブログを書いているのも、株式会社はてなのブログの基幹システム、およびそれを支えている全てのスタッフの努力なしにはなし得ない。各スタッフには心より感謝する次第だ。

第4章:集計結果

さてこの章では、こうして集計されたデータを公開する。まず最初の資料から。上のイラスト投稿数の累計値は徐々に上がっており、下のイラスト投稿数の推移もばらつきが激しい。


f:id:program_study:20150418234340j:plain

下のグラフの四分位数を見るに、多くの場合で1日当たり20枚〜30枚投稿されていると見て良い。キャラ事に投稿枚数に対する変動は少なく、誕生日の時などイベントの時のイラスト投稿枚数の差が、累計のイラスト投稿枚数に影響を大きく与えていると考えられる。尚10月の一部の区間でグラフが欠損しているのは、第3章で話した事が原因である。


f:id:program_study:20150418234349j:plain

最終章:最後に/ここ最近の自分の動向について

今回はWeb関係の技術が中心に話をした。さて自分はこういう業界に入ったものの、特に作りたいものも無く日々を過ごしていた。そんな俺がある日突然思い立ってはじめたのがこれだった。ここで、 何かを思い立ったときはとりあえず始めてみる事も有効だ。

一方でこれ単体では一般受け、業界人受けしない事は分かっていた。この為イベントに行ってきた記事を書いたりして、少しでも業界人に注目されるよう心がけた。TwitterなどでもRTしてくれる方、フォローしてくれる方が居て嬉しい。

それはともかく何も無い場合程、何か1ジャンルを基点として、そこを基点として動いてしまう事だ。自分もデータ分析が好きか?と聞かれると謎だし、データマイニングエンジニアなりデータサイエンティストになれるとも思っていない。ただ基点が見つかっただけ良かったと思っている。

後自分のやっている事が、一般に受け入れられやすいされにくいジャンルこそ、受け入れられやすい場所を探す事も大切だ。過去の情報から未来を予測する手段として、確率統計、機械学習素粒子物理学と言ったジャンルが脚光をあび、こういったイベントが開催される現代に感謝する。

一方でブログを読んでくれた人から、「何かやってる人だな」と言う事は伝わったりするものである。と、こんな風に技術面でダメだと思っても、他の面で突破口が見つかる事があるので是非お試しあれ

ということで、今回の話はここまで。ラブライブ!と関係のない話をしてしまったし、真姫ちゃんのイメージに合うか謎だ。それはともかく西木野真姫というキャラクターの誕生日を祝うのと、こんな話に付き合って頂いた全ての皆様に感謝申し上げたい。

使用イラストなど

本スライドのイラストは「西木野真姫:hirataku氏(pixiv)」に依る物だ。綺麗なイラストが多いので是非見てみてほしい。

*1:最初の頃は24時間だった