Python
google
機械学習
可視化
DataVisualization

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

Facetsとは

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

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

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

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

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


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

pip install jupyter
pip install pandas

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

はじめるJupyter Notebook

追記(2017/9/28)

pipからjupiterをインストールした場合、

jupyter nbextension install facets-dist/

を行うことでjupiter上でfacets-distを動かすことが可能になります。

またラボ等の共用サーバーで動かす場合、

jupyter nbextension install facets-dist/ --user

で個別に行うことが出来ます。


次に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')

追記(2017/9/28)

facets_overviewを使いたい場合、上記の内容に加えProtocol Buffersのpython runtime libraryをインストールすればOKです。
google/protobuf
ドキュメントにインストール法は記載されているため、そちらをご確認ください。
google/protobuf/python


追記(2018/02/17)

How to see large datasets in dive similar to the one in overview

Dive, since it visualizes all data of all records provided to it in the browser, cannot handle huge datasets - you would need to sample from the dataset and show a subset of data. We often use dive with tens of thousands of records, but not hundreds of thousands. And each record has a handful of features. The more features per record, the smaller number of records that could be handled before browser memory issues.

サンプルレベルのデータなら使えますがあまり大きいサイズの可視化は出来ないそうです😥