data-science Pca Julia

Strengths Finderで似ている人を見つけるためにJuliaで主成分分析

私の最近所属しているグループでは、自分の強みを知ることができる Strength Finder を皆がやっています。

スプレッドシートに情報が溜まっていたのですが、34項目あるので、自分と同じ傾向の人が探しにくいなと思って、主成分分析を使ってグラフで近い人を見つけられるようにしてみました。

せっかくなのでJulia言語で書いてみることに。

PCA(主成分分析)

主成分分析 - Wikipedia 次元を減らすために使われる処理ですが、今回はグラフにしたかったので、34項目の情報(34次元)を2次元にしています。似ている人が近く表示されるようになるはず。

利用するデータ

流石に個人情報なのと、34項目だと多いのでサンプルデータを用意してみました。

コルクラボでもこんな感じでしたが、実際は人によって、34位まで書いている人と上位5項目までの人がいたので合わせるために、上位5項目以外は0にして処理しました。残りは、1の方を大きい値にするために全体の数値を逆数にして処理しました。

開発環境

  • Julia: v1.0.3
    • この記事書いている時に v1.1 リリースされたけど v1.0.3 で書いてます。
  • MultivariateStats.jl
    • PCAを使うためのライブラリ
  • PlotlyJS.jl
    • Plotly.jl もあるんですが、PlotlyJS.jl の方がメンテナンスもされているので、こちらを使いました。

Julia のコード

出来上がったグラフ

サンプルのデータなのでそこまで意味は無いですが、ちゃんと上位が一緒の人(父ちゃんとおまわりさん、兄ちゃんと姉ちゃん)が近い所にいますね。説明変数についてもベクトル表示していて、人が少ない回復志向とかは全員の反対側の方を向いたりしているのでちゃんとできてるっぽい?

気になること

  • 逆数で処理してるけど、もっと良さそうな計算方法を知りたい