Google製可視化OSSのFacetsがめっちゃ便利だから使ってみてくれ

  • 378
    Like
  • 0
    Comment

Facetsとは

Facetsとは、Google製の可視化ツールです。

データセットの可視化を素早く簡単に行うことが出来ます。
機械学習のデータセットを可視化する「Facets」で遊んでみた
Google、機械学習のデータセットを視覚化するオープンソースツール「Facets」を公開

機械学習を行う時、前処理の前にデータの可視化を一通り行うことは多いと思います。
この時用いられる可視化ツール・ライブラリとしては、Redash・Pandasなどが多く使われています。
上記2つのツールはとても便利ですが、RedashはSQLを、PandasはPythonを少し書かないといけません。

Facetsなら上記2つより簡単に、素早くデータの可視化を行うことが出来ます!

では、以下から導入・簡単な説明をします。


Facetsを使う前に、まずJupyterをインストールします。

pip install jupyter

これだけで基本は大丈夫ですが、詳しくは以下をどうぞ↓

はじめるJupyter Notebook

次にFacets本体をgit cloneして Facetsのディレクトリに移動します。

git clone https://github.com/PAIR-code/facets
cd facets

Facetsの中には

  • facets_dive
  • facets_overview

という2つのディレクトリが入っています。
facets_diveは多次元のデータををインタラクティブに探索することが、facets_overviewではデータセットの概要や、2つ以上のデータセットの比較を行うことが出来ます。

今回はよく用いるであろう、facets_diveを使ってみます。
cdでディレクトリに移動し、以下のコマンドを打ちます。

cd facets_dive
jupyter notebook

するとブラウザ上にいつものJupyterの画面が出てくると思います。

スクリーンショット 2017-09-18 23.00.05.png

ここで、Dive_demo.ipynbを選択します。
いつも通り Shift+Enter を押します。

たぶんここでこんなエラーが出るかと思われます。

[W 22:40:58.498 NotebookApp] IOPub data rate exceeded.
    The notebook server will temporarily stop sending output
    to the client in order to avoid crashing it.
    To change this limit, set the config variable
    `--NotebookApp.iopub_data_rate_limit`.

可視化を行う場合データが大きすぎてたまに怒られることがあります。
これを治すために一旦ターミナルに戻って以下のコマンドを打ちます。

jupyter notebook --generate-config

これでJupyterのconfigが出来ました。
以下のコマンドで.jupyter/jupyter_notebook_config.pyを開きます。(エディタはなんでも良いです。)

nvim .jupyter/jupyter_notebook_config.py 

ここに書かれているc.NotebookApp.iopub_data_rate_limit = 1000000の部分をコメントアウトを消して1000000の部分をより大きな数字に変更します。

IOPub data rate exceeded when viewing image in Jupyter notebook

これを行いもう一度Jupyterを開いて Dive_demo.ipynb にて Shift+Enter を押すと動くと思います。
するとこんな画面が出てきます。

movie.gif

こんな感じ。
インタラクティブにデータを見られることがわかっていただけたと思います。

実際のデータを扱いたい場合、以下の部分でPandasなどを用いてデータを読み込み、JSONにパースすることで使えるようになります。
データはSQL,CSVなどなんでも大丈夫です!
ぜひ使ってみてください!


jsonstr = pd.read_csv(
    "https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.test",
    names=features,
    sep=r'\s*,\s*',
    engine='python',
    skiprows=[0],
    na_values="?").to_json(orient='records')