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

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

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

【Webスクレイピング】pixivにおけるラブライブ!イラスト投稿数を収集しよう(1):MySQLの検索結果をcsvで出力する作業を見直し、自動化してみた


f:id:program_study:20141025130341j:plain

俺はラブライブのキャラクターが好きで、pixivやTwitterなどに投稿されているイラストを楽しむことがある。去る10月21日キャラクターの一人の絢瀬絵里が誕生日を迎えたようだ。誕生日だから騒ごうと思い、早速トップ画のような画像を作って楽しんだ。又キャラクターが誕生日を迎えて丁度良かったので、今までの作業を見直してみた。以下その経緯を話そうと思う。

はじめに:こんな事が現在進行中!

まずどんな事をやっているかについて軽く説明する。イラスト投稿サイトのpixivに入り、特定のキャラクターのタグの貼られた絵を見ようとすると以下の画面が登場する。


f:id:program_study:20141025130544j:plain

この画面に「xxx件」と表示されているのが分かるだろうか?この部分を12時間おきにデーターベースに保存し記録している。1日毎の投稿数を確認する事ができるため、例えばキャラクターの誕生日の前後でどれだけ投稿されたか等を調べる事ができるわけだ。

ちなみに絢瀬絵里の場合だと、10月21日0時から10月21日12時までの間で271枚のイラストが投稿され、1日間累計で527枚もののイラストが投稿された。1時間平均約21枚のイラストが投稿されていると言う凄い計算だ。

趣味や職業などでプログラムを触る方、データ収集をやりたい方の参考になればと思い、以下何をどのように使い回しているかを以下にまとめてみた。

pixivの投稿数を集計するプログラムの流れ
[1].言語はPHP、投稿数はWebスクレイピングを使って取得(詳細はgist参照)
[2].1.で取得したものをMySQLに保存
[3].1〜2の作業を書いたPHPプログラムを数種類、12時間おきに実行するようにcronで設定

手順書のススメ

さて今日は今までやってきた事の手順書を書いてみようと思う。手順書を書く理由として、書きながら作業を細かく分割する事にある。これは自分が今やっている作業を細かく分割することで、作業の進み具合を把握しやすくなるからだ。また作業手順を見直しやすくなると言うのも大きなメリットだ。さて本記事を公開するまでの手順を大まかにまとめてみた。

手順書:本記事作成の手順
(1).イラストを投稿している絵師さんを探し、連絡を取る
(2).UNIX/Linuxを操作し、ファイルを本番サーバーからダウンロード(FTP)
(3).Excelにてcsvファイルを編集
(4).入手したイラスト、図表をPhotoshop上で編集
(5).(1)から(4)までの材料を基に、ブログの記事に起こす

余談だが自分はイラストが描けないため、pixivの絵師さんに掲載許可を得て画像を作っている。尤も版権絡みの画像のため、何かあったら消さなくてはならないものの、毎度ながらこの記事に全面協力して下さっている絵師さんに感謝だ。

手順書(改善前):UNIX/Linux上でMySQLの検索結果をcsvに出力するまで

さて今回にてこ入れしたのが、(2)のファイルを本番サーバーからダウンロードする箇所だ。(2)の手順をまとめると以下のようになる。

(1).sshでサーバーに接続
(2).「mysql -u root -p」でmysqlを起動
(3).「use ***」でデータベースに接続
(4).「select * from *** where *** = *** into outfile '***' fields terminated by ','」で目的のファイルをcsv出力
(5).FTPソフトでダウンロード

これはUnix/Linux上にインストールしているMySQLに接続し、SQLの結果をcsv出力するまでの手順だ。恐らく結果を出力する画面が無い場合、あるいはコマンドで出力した方が確実な場合、万一の場合等はこの方法が有効であろう。慣れると所要時間的に1〜2分位で済む。

上記の作業を自動化してみた!

上記の手順を踏んでいたがやや大変だ。そこで(2)〜(4)までの作業を自動化するスクリプトを書いてみた所体感的に30秒程度で済んだ。コマンドの入力ミスが減る、UNIX/Linuxを起動せずとも結果を確認できると言う点で大きい。この結果(2)〜(4)の作業が省け、FTPソフトでダウンロードするだけでよくなった。具体的なプログラムは以下の通り。

しかしこれで終わりと言う訳では無い。今度は「crontab -e」でこのスクリプトを12時間毎に実行し、常に最新のファイルをに更新するようにした。


f:id:program_study:20141025130633j:plain

まず上の画像の上3行はデータを収集するスクリプトだ。crontab左側に注目すると毎日0:00と12:00に設定されている。この時間帯にcsvに出力する事はできないので、6行目〜10行目のように毎日3:15と15:00に実行するようにした。これをExcelの表にまとめると以下の通りとなる。


f:id:program_study:20141025130715j:plain

こんな風にアルバイト君のシフト管理表のようなものを作るのも有効だ。ここで、お互いの勤務時間がぶつからないようにシフトを組むとよい。

手順書(改善後):UNIX/Linux上でMySQLの検索結果をcsvに出力する

このようにセットすることで手順書の項目が大分減った。

(1).FTPソフトでダウンロード

これで一枚の手順書に収まるようになったものだが、口で言う事をプログラムで実践するのは大変だ。モノを作るのが面倒で嫌いなクチの自分としては、何とか上手く動いてよかったと実感している。

最後に:自己満足の域を超えないと...

とこんな風にプログラムのテコ入れ自慢をしてみた。プログラムの面はこれで良いとしても、当のデータを調査する面で課題を潰したい。今回の段階ではまだまだ自己満足極まりない状況で、最終目標である誰かを納得させる所まではかなり遠い位置にある。

改善案らしきものとして、ラブライブのCDの売上枚数を縦軸、pixivの投稿数を横軸とした散布図を取って調査。これを「単回帰分析により、ラブライブ!のCDの売上数を...の面から調査してみた」と言う記事を書いてみるとか、マーケティング、データサイエンティスト、コンサルタントの方々が見てくれるような記事が書ければと思う。

最終的には「懐かしの「y=ax+b」でアイスコーヒーの注文数を予測しよう 散布図、分析ツールで求める単回帰式:MarkeZine」のような記事が書ければと思う今日この頃だ。