キモオタがやってみるデータサイエンス〜その3:ミスコン支援アプリを作ってしまった話〜

きょうはこんなこと書くよ

  • ミスコン出場者の相関関係がわかるアプリつくったよ
  • ついでだから、Mr用にも作ってやったよ。
  • みんな投票してね♡
テクニカルにはこんな内容だよ

こんばんは。

さて、きょうはでーた・さいえんすの力を使ってミスコンをさらに楽しむアプリを作ったので、紹介しますお。*1

さて、スクリーンショットとともに紹介しましょう。

全体的にはこんな簡素な作りでございます。

f:id:kensuke-mi:20151013220721p:plain

上に表示されているのは「相関図」*2と呼ばれるグラフです。

相関図では、あらゆるデータを2の軸があるグラフに表示してしまいます。

なので、データの様子をながめて、うひひ・・ぐへへへへするのに最適なのです。

さて、相関図の下にある表は、出場者全員の情報がある表です。

なんと!知りたい行を押すと、相関図の中で、どこにデータがあるのか?すぐにわかります。

f:id:kensuke-mi:20151013221127p:plain

あら!素敵!

さらに、なんと!表の項目名を押すと、ソートができます。いまは身長でソートしてます!

f:id:kensuke-mi:20151013221249p:plain

まだまだおどろくなかれ!なんと、相関図の点をプロットすると・・・

f:id:kensuke-mi:20151013221403p:plain

出場者の情報が吹き出しになってでてきます!

こんにちは〜福井セリナさん〜。私の同僚がイチオシする出場者のお方です。

もう、すでに投票してくれたんですって。も・う・ほ・れ・ちゃ・う・ぞ!*3

まだまだあるぞ!おもむろに点をクリックすると・・・・なんと出場者のプロフページに飛べるのダァァァ!*4

こんな素敵なアプリにはここからアクセスできます。

さあ、いますぐあなたもアクセス!


いかがでしたか?*5

これで、あなたもミスコンに投票するっきゃないですね!

トップページはここからアクセスできますお。

あ、ちなみに私、このミスコンサイトを運営している会社とはなんら一切の関係がありません

所属している会社もなんら関係ありません

ただ、自分の興味のままにやりました。*6え?何が興味があるのかって?

そんなの出場者の一覧をながめてうひひひしたいに決まっているじゃないですか。

これがデータサイエンティスト()なのです。

あ、Mrコンテストとかいうのもあるので、作ってやりましたよ。これをみてくださいね

てくにかるのーと

いちおう、データサイエンティスト()なので、簡単に概略を述べます。

今回やったことを簡単にまとめると、こんな流れです

  1. プロフ情報とQA文で出場者のベクトルを作る
  2. SVDで次元圧縮をする。2次元まで圧縮します
  3. 圧縮した座標に従って、プロットします

1 ベクトルをつくろう

ベクトルの作り方ですが、プロフからは

  • 年齢
  • 身長
  • 血液型

の情報をいただきました。 QA文は形態素分割した後に、BOW(単語が出現したかOR NOTの0と1で構成される)でベクトル空間にします。

なので、できあがった出場者ベクトルは

[ 年齢:int 身長:int 血液型:カテゴリ数値化 ここからずっとBOWの0 or 1 ~ ]

という形です。

さらに今回は、特別にQAを細かく分割しています。なので、「ここからずっとBOWの0 or 1」の部分は

[ 質問Aへの回答BOW_a_1 .... 質問Aへの回答BOW_a_n 質問Bへの回答BOW_b_1 質問Bへの回答BOW_b_n]

みたいな感じで分割してます。

なので、結果的に高次元になりました。1万2千次元くらいにはなったかと思います。

さらに、今回は正規化をしています。

なぜなら、身長と年齢はかなり大きな数値を取るのに対して、BOW特徴量は0か1しかないからです。

もちろんscikit-learnを使いました。

2 次元圧縮しよう

Scikit-learnのSVDを使いました。

以上!

3 プロットしよう

今回は、インタラクティブなグラフを作るために、Bokehを使いました。

Bokehはpythonで簡単にインタラクティブグラフが作れる素敵なライブラリです。

実態はJavaScriptのラッパーです。

Galleryで作ることができるグラフを眺められるので、どんな感じなのか。感じてください。考えるのではないです。感じるのです。

今回、各機能を作るのあたって、下記のメソッドを呼び出ししてます。

こんな感じです。

その集大成のコードはipython notebookにまとまっています。こちらをごらんください。

そう、Bokehはipython notebookで作ることができるのです!

インタラクティブな環境でインタラクティブなグラフを作るのが新時代のpythonistですよ。がっはっは。

ぜひ、データサイエンティスト()のみなさんも、そうでないみなさんも手持ちのデータをプロットしてお楽しみください。


*1:実はすべてhtml埋め込み・・というたいへーんシンプルなものです。なので、狭義の意味ではWebアプリとは呼べないっす

*2:おいんぐりっしゅではscatter graphといいます

*3:ちなみに同僚は外国人、身長180cm超、金髪のナイスガイです

*4:飛べる先のページはこの場合ここです

*5:いつもいろんな記事を見ていて、みんな様式美()みたいに使うので、いつか使ってみたいと思っていた

*6:私はノーベル賞受賞された梶田先生のお言葉「研究者個人の好奇心でやっている分野」(中略)「きちんと(研究を)やっていけば、何かに結びつくんじゃないかと思ってきちんとやった。自分の進んでいる道が正しいと思って頑張った」というお言葉にとても感銘を受けました。