Google製可視化OSSのFacetsをGoogleColaboratoryで使ってみる

こちらの記事を読んで、[Google製可視化OSSのFacetsがめっちゃ便利だから使ってみてくれ](https://qiita.com/inoue0426/items/071c127428112f498421)
「Facetsを使うための準備が大変そうだなぁ」と思ったのでGoogleColaboratoryを利用すれば簡単にできるよという話。

# GoogleColaboratoryについて
GoogleColaboratoryって何という人はこちらの記事を読んで下さい。

- [Google Colaboratoryよくある質問](https://research.google.com/colaboratory/faq.html)
- [Google Colaboratory事始め](https://qiita.com/kouki_outstand/items/cd24dccbaa92274be39e)

記事と同じことがやりたい人はGoogleアカウントが必要になるので作っておいてください。

# Facetsを利用した可視化
Kagglerおなじみのタイタニックデータセットを可視化してみます。
下記リンク、**> Download All** からCSVをダウンロードしておいてください。
[Kaggle - Titanic: Machine Learning from Disaster](https://www.kaggle.com/c/titanic/data)

![kaggle_titanic_download_1.png](https://qiita-image-store.s3.amazonaws.com/0/40310/dbdd6fea-d75c-60ea-ae19-fc46b4fba776.png)

これ以降のコードはGoogleColaboratory上で実行するコードになります。
コピーしてセル毎に貼り付けて実行(Run)してみて下さい。

```python3:GoogleColabUpload
# ローカルにダウンロードしたCSVをアップロードします
from google.colab import files
uploaded = files.upload() # then browse, select the files. It's then uploaded
```

![google_colab_upload.gif](https://qiita-image-store.s3.amazonaws.com/0/40310/d050adeb-c4bc-9843-ed7a-af0672504719.gif)


```python3:titanic_datasets
# datasets load
import pandas as pd
titanic_train_data = pd.read_csv("train.csv")
titanic_test_data = pd.read_csv("test.csv")

titanic_train_data = titanic_train_data.drop(['PassengerId','Name','Ticket','Cabin'], axis=1)
titanic_test_data = titanic_test_data.drop(['Name','Ticket','Cabin'], axis=1)
```

## Facets Dive
```python:facets_titanic_dive
# Display the facets overview visualization for this data
from IPython.core.display import display, HTML
jsonstr = titanic_train_data.to_json(orient='records')
HTML_TEMPLATE = """<link rel="import" href="https://raw.githubusercontent.com/PAIR-code/facets/master/facets-dist/facets-jupyter.html">
        <facets-dive id="elem" height="600"></facets-dive>
        <script>
          var data = {jsonstr};
          document.querySelector("#elem").data = data;
        </script>"""
html = HTML_TEMPLATE.format(jsonstr=jsonstr)
display(HTML(html))
```

![demo_facets_dive.gif](https://qiita-image-store.s3.amazonaws.com/0/40310/70b7c9f7-9fcb-db97-b7f5-dd3ec8ea9daf.gif)

## Facets Overview
```python:facets_titanic_overview
import base64
from generic_feature_statistics_generator import GenericFeatureStatisticsGenerator
gfsg = GenericFeatureStatisticsGenerator()
proto = gfsg.ProtoFromDataFrames([{'name': 'train', 'table': titanic_train_data},
                                  {'name': 'test', 'table': titanic_test_data}])
protostr = base64.b64encode(proto.SerializeToString()).decode("utf-8")


HTML_TEMPLATE = """<link rel="import" href="https://raw.githubusercontent.com/PAIR-code/facets/master/facets-dist/facets-jupyter.html" >
        <facets-overview id="elem"></facets-overview>
        <script>
          document.querySelector("#elem").protoInput = "{protostr}";
        </script>"""
html = HTML_TEMPLATE.format(protostr=protostr)
display(HTML(html))
```

![demo_facets_overview.gif](https://qiita-image-store.s3.amazonaws.com/0/40310/4ca80691-3cec-e95c-4af6-6bf0ad9e0c25.gif)


# 参考

- [Google製可視化OSSのFacetsがめっちゃ便利だから使ってみてくれ](https://qiita.com/inoue0426/items/071c127428112f498421)
- [Github - facets/colab_facets.ipynb](https://github.com/PAIR-code/facets/blob/master/colab_facets.ipynb)
- [Google Colaboratoryよくある質問](https://research.google.com/colaboratory/faq.html)
- [Google Colaboratory事始め](https://qiita.com/kouki_outstand/items/cd24dccbaa92274be39e)
- [Kaggle - Titanic: Machine Learning from Disaster](https://www.kaggle.com/c/titanic/data)