Sweetviz で Google Colab からデータを見たい(けどできなかった → できた)

機械学習に先立つデータの確認は必須とも言える作業です。
データの分布や特徴、相関などを最初に確認し、使用できる列や必要な前処理のあたりをつけます。
このデータの確認を Google Colaboratory で、サクッと始めてみよう、というお題です。

### 実行環境

Google Colaboratory を使用します。
データの確認に Explanatory Data Analysis(EDA, 探索的データ解析)用の Sweetviz を使用します。

今回のノートブックのリンク
https://colab.research.google.com/drive/1eAA6EeEvfqHtgzb3jbdls2AqcwmtdmTj?usp=sharing


### 実行方法

sweetviz をインストールします。

```python
! pip install sweetviz
```

Google Colab はサンプルデータとして、scikit-learn でおなじみ、カリフォルニアの住宅のデータが入っていますので、これを可視化してみます。自前の csv ファイルをアップロードして使用することもできます。

```python
import pandas as pd
import sweetviz as sv

sweet_report = sv.analyze(pd.read_csv("sample_data/california_housing_train.csv"))
sweet_report.show_html('california_housing.html')
```

結果の html ファイルが出力されますので、ダウンロードして Webブラウザーで開いて結果を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323666/5271e9f0-d18e-b8c6-c117-e7257aa1f6cb.png)

### 結果の確認

Sweetviz は 1枚の html ですが、インタラクティブに操作可能なファイルとして、結果を出力してくれます。

各特徴量ごとの概要と選択対象の詳細が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323666/edb12b48-c8b1-5b12-fdc4-4da1df7dff62.png)

特徴量間の相関などを確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323666/ce1b7892-9000-ce33-8e45-683e18ad4ecb.png)

しかし、手動でダウンロードして参照するあたりが、どうもイマイチな感じです。

### ページ内で表示したい~~(未完)~~

ノートブック内で結果まで表示できると、なんとなく美しい気がします。
Google drive にファイルを格納し、html を表示できないでしょうか。

**[追記] 以下の Google drive を利用する方法は不要です。後述の「ページをインポートして表示する」 に記載の手順で OK です。**

まず Google drive をマウントします。
OAuth のトークンは実行時に表示される URL のページに飛ぶと表示されるので、コピー&ペーストなどで入力します。

```python
from google.colab import drive
drive.mount('/content/drive')
```

マウントできたら、出力した html ファイルをコピーします。

```python
!cp california_housing.html /content/drive/My\ Drive/
```

Google drive から共有設定し、URL を取得します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323666/ccda4b93-7665-bb0b-96ca-ad7456de3949.png)

これを iframe で表示してしまえば、、

```python
from IPython.display import IFrame
IFrame(src='https://drive.google.com/file/d/DOC_ID/view?usp=sharing', width=900, height=600)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323666/f52b9e39-80d2-102b-ae45-64676c325478.png)

Google センパイから、つれないお返事が。。。

しかし、preview(URL の view を preview に変える)ならいけるという情報を発見！
やってみると、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323666/dcb31195-f44c-bdec-cf7c-240eb5a14cc1.png)

**見たいのそれじゃないです。。。**

ということで、 iframe だとうまくいきません(iframe 内表示拒否のヘッダーが入っている?)。

#### ページをインポートして表示する

同じく EDA 用ツールである pandas-profiling の記事を拝見して気づきました。HTML をインライン表示する際にファイルを指定すれば良いと。

インライン表示の機能は調べて気づいていたのですが、文字列に読み込んでから HTML 解釈させるのもどうも回りくどい感じがしていたところでした。

pandas-profiling はノートブックで表示できるようになっているようで HTML からの表示には不要ですが、以下の記事の過去の編集履歴の中にヒントがあります。

参考記事(「成功例」のところのコード)
https://qiita.com/wakame1367/items/39faf5d91e20a5cf5772/revisions/1

この通りやってみると、以下のようになります。

```python
from IPython.display import HTML
HTML(filename='california_housing.html')
```

できました。
ノートブックのセルの中に分析結果の html ファイルが表示され、選択操作などもできています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323666/95609fea-4856-4c39-7e87-68f97b9e9a2a.png)


ノートブックは、以下で参照できます(Google drive の箇所は削除してあります)。
https://colab.research.google.com/drive/1eAA6EeEvfqHtgzb3jbdls2AqcwmtdmTj?usp=sharing


### おわりに

~~だれかクリスマスプレゼントに、やり方のアイディアください。。~~

とりあえずは目的達成できました。~~(Google drive いらんやんけ)~~
もっと良い方法などあれば教えていただけると嬉しいです！