Google Colaboratory と Altair で描く君の知らないグラフの物語

この記事は[リクルートライフスタイル Advent Calendar 2018](https://qiita.com/advent-calendar/2018/recruitlifestyle)の19日目の記事です。

#はじめに

はじめまして。社内で分析基盤を構築している[@_snow_narcissus](https://qiita.com/_snow_narcissus)です。

リクルートライフスタイルではデータ分析を用いた施策提案を積極的に行なっており、誰もが簡単にデータを扱える環境を整えています。

現在社内でのデータの可視化の際にはTableauを用いる場面が多いですが、ライセンスの問題から扱うことが困難な場面があります。

**安価で簡単に、そして社内での情報共有がしやすいデータ可視化ツール**を探していたところ、[Google Colabratory](https://colab.research.google.com/notebooks/welcome.ipynb)という素晴らしいツールに巡り会うことができました。

弊社ではGoogleスプレッドシート、Googleスライドを始めとするG Suiteを積極的に活用しており、Colaboratoryはこれらと同様にデータビジュアルを簡単に社内に共有することができます。

ちなみにこのColaboratoryですが、**なんと無料です。**その他にも「簡単にPython環境が手に入る」「BigQueryに簡単に接続できる」「GPUも無料で使える」「TensorFlowが事前インストールされている」といった特性をもつ**機械学習入門に最適なツール**になっております。

Colabratoryを用いた機械学習のお話は後々の投稿にて紹介するとし、**今回はデータの可視化に焦点を当ててお話をさせて頂きたいと思います。**

#Colaboratoryを使ってみよう

それでは実際にColaboratoryを使ってみましょう。Googleアカウントがあれば誰でも使用することができます。
![RunningColab.png](https://qiita-image-store.s3.amazonaws.com/0/47559/a1f00a40-6644-2115-5dae-3ef747ee5fa1.png)
上図のようにGoogle Driveの「新規」ボタンから「その他」→「Colaboratory」の順に辿ってみてください。しかし、おそらく初期段階では「Colaboratory」の項目がないかと思いますので、その場合には「アプリを追加」から「Colaboratory」を検索し追加をしてください。

<img width="1437" alt="ColabDisplay.png" src="https://qiita-image-store.s3.amazonaws.com/0/47559/a7c68088-506c-9438-e8cf-4b8016425e7a.png">

Colaboratoryを起動しますと、上記のようにJupyter Notebookによく似た画面が立ち上がり、この中でPythonを書くことができます。

データ分析に必要なパッケージはほぼ事前インストールされているので`import pandas` `import tensorflow`といったimport文は初めから使用することができます。

その他Colaboratoryの環境については[【秒速で無料GPUを使う】深層学習実践Tips on Colaboratory](https://qiita.com/tomo_makes/items/b3c60b10f7b25a0a5935)が詳しいので是非ご参照ください。[@tomo_makes](https://qiita.com/tomo_makes)さん、いつもありがとうございます！

#グラフ可視化ツールAltairとは

[Altair](https://altair-viz.github.io/)とは[Vega](https://vega.github.io/vega/)および[Vega-Lite](https://vega.github.io/vega-lite/)を基にしたPython可視化ライブラリです。個人的には星の名前なのが気に入っています。

VegaおよびVega-Liteは、JSON形式でデータとプロットの形式を指定するとWebブラウザ上でインタラクティブにグラフが描画できるJavaScriptライブラリであり、AltairはこれのPythonバインディングにあたります。

[Example Gallery](https://altair-viz.github.io/gallery/index.html)を見ていただければ分かるように、色合いも豊かで様々なグラフを単純な構文で描くことができます。また、描画したグラフをそのままSVGおよびPNGで保存することもできます。

そして重要なのが**ColaboratoryではAltairを初期設定なしに使うことができます。**これに関しては後の節で詳しくご説明したいと思います。

#実際にグラフを描いてみよう

Colaboratory上でAltairを用いたグラフを描画してみます。

<img width="1437" alt="ColabMenu.png" src="https://qiita-image-store.s3.amazonaws.com/0/47559/f7e917e8-9b2d-ab3f-3f84-452c0edf7044.png">

上図のボタンをクリックし、開いたメニューの中から「コードスニペット」を選択し、フィルターにて「Altair」と絞るとAltairに関連したスニペットの一覧が表示されます。

このうちから一つを選択し矢印ボタンを押すと、下図のようにコマンドが自動的に書き込まれますので、後はそれを実行するだけで**簡単にサンプルのグラフを得ることができます。**

![ColabAltairResize.png](https://qiita-image-store.s3.amazonaws.com/0/47559/df805857-d540-c321-8811-4be47fd7470c.png)

他にも多数スニペットが用意されておりますので、是非逐一試してみて下さい。Altairが描く綺麗なグラフを見ることができるかと思います。

また、先に触れたように**描画されたグラフを簡単に保存することができます。**

![ColabSaveGraph.png](https://qiita-image-store.s3.amazonaws.com/0/47559/bcc9f624-2c41-f171-f690-f1ae5e411f99.png)

上図のようにグラフの右上に表示されるボタンをクリックすることで、保存形式を指定してのダウンロードが可能です。

#Altairで任意のデータを描画してみよう

もちろん実際の作業ではサンプルではなく、実際にどうグラフを描くかが大切になってきますので、その部分についてもご紹介します。

Altairではデータの指定として、`Pandas DataFrame` `CSV` `JSON` の3つを主に選ぶことができます。`CSV` `JSON` については、[pandas.read_csv](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html)等で `Pandas DataFrame` に簡単に変換することができるので、ここでは `Pandas DataFrame` による描画についてご紹介します。

ここでは一般的によく用いられる株価の情報を図示してみます。是非下記のコマンドをColaboratory上で実行しグラフを描いてみて下さい。

```python
import pandas as pd
stock_price = pd.DataFrame(
    {'Date': ['2007-10-01', '2007-11-01', '2007-12-01',
              '2007-10-01', '2007-11-01', '2007-12-01',
              '2007-10-01', '2007-11-01', '2007-12-01'],
     'company': ['AAPL', 'AAPL', 'AAPL',
                 'AMZN', 'AMZN', 'AMZN',
                 'GOOG', 'GOOG', 'GOOG'],
     'price': [189.95, 182.22, 198.08,
               89.15,  90.56,  92.64,
               707.00, 693.00, 691.48]})
print(stock_price)
```

上のように`pandas`をimportし、`Pandas DataFrame`を作成します。

```text
        Date company   price
0  2007-10-01    AAPL  189.95
1  2007-11-01    AAPL  182.22
2  2007-12-01    AAPL  198.08
3  2007-10-01    AMZN   89.15
4  2007-11-01    AMZN   90.56
5  2007-12-01    AMZN   92.64
6  2007-10-01    GOOG  707.00
7  2007-11-01    GOOG  693.00
8  2007-12-01    GOOG  691.48
```

後はこのデータを用いてAltairで描画するだけです。`mark_line()`が描きたいグラフの種類を表し、ここでは折れ線グラフを使います。また、ここで列の指定の後に続く `T` `Q` `N` はそれぞれ `temporal` `quantitative` `nominal`の略で、時間データ、量的データ、カテゴリデータであることを表します。

```python
import altair as alt
alt.Chart(stock_price).mark_line().encode(
  x='Date:T',
  y='price:Q',
  color='company:N'
)
```

上記コマンドをColaboratory上で実行すると、下図のようなグラフが得られます。

![visualization (2).png](https://qiita-image-store.s3.amazonaws.com/0/47559/02e9ee17-7ce8-e41c-220d-dfe395393e25.png)

他にも色々な素敵なグラフが得られますので、是非[Example Gallery](https://altair-viz.github.io/gallery/index.html)をみながら、Colaboratory上で色々と試してみて下さい。

#おわりに

一般にデータを可視化する際には下記のような流れを辿ることが多いのですが、Colaboratoryには全てが用意されております。

1. データソースをBigQueryやCSVファイルからインポートしデータフレームに変換
2. データフレーム上で集計やNULL値埋めといった処理を行う
3. 処理を施したデータを可視化ツールを用いた描画
4. 可視化した内容をコミュニティに共有しフィードバックをもらう

**「Pythonで分析を始めてみたいのだけど何から手をつければいいのか分からない」という人にとって最適なツール**なのではないかと思います。

データ可視化、および機械学習に是非Colaboratoryを積極的に活用してみて下さい。