Tableau のフィールド型


Tableau というデータ可視化のツールがあります。使用料が一人年間十万円と少々お高いのですが、この分野では他のツールを抜きん出ています。Tableau のコンセプトには、データ可視化のために有用なものが含まれていますので、Tableau 自体の説明というよりこのツールの中で一般的に便利なアイデアについてまとめます。

サンプル: https://public.tableau.com/views/datatypes_15891882575140/Dashboard1?:display_count=y&publish=yes&:origin=viz_share_link

## Tableau Public

秘密のデータを扱わないなら、無料版の Tableau Public https://public.tableau.com/s/ でも十分に Tableau の機能を体験出来ます。一番大きな有料版との違いは、データをローカルに保存出来ない事だと思います。代わりに Tableau Public サービスにアカウントを作成してアップロードします。Tableau Public の [Gellery](https://public.tableau.com/en-us/gallery) ではかっこいいグラフが公開されていて大変勉強になります。

ここでは話題を考え方に絞るので操作方法は省略します。操作方法に興味のある方は [ディメンションとメジャー、青と緑](https://help.tableau.com/current/pro/desktop/ja-jp/datafields_typesandroles.htm) などを参考にしてください。

## コンセプト

### フィールド型

Tableau では、数値、文字列、時刻型等様々なデータを扱う事が出来ますが、それとは別に図として表現する際の解釈の仕方を表すフィールド型という概念があります。フィールド型には次の種類と組み合わせがあります。

* Dimensions (定性値) と Measures (定量値) の種別がある。
    * 見分け方: Measures を図に割り当てると SUM のような集計関数が付く。
* Discrete (離散) と Continuous (連続) の種別がある。
    * 見分け方: Discrete は青色。Continuous は緑色。

これを組み合わせる事で四パターンのタイプがあります。

* (一般的) Dimensions/Discrete 定性値で離散: 商品 ID や文字列など
* (特殊) Dimensions/Continuous 定性値で連続: 日付時刻や散布図の値など
* (特殊) Mesures/Discrete 定量値で離散: 用途が思い浮かびませんでした。
* (一般的) Mesures/Continuous 定量値で連続: 売上高や計測データ

## 図への割り当て

Tableau はこれらのデータを以下のいずれかに割り当てる事で図を作成します。

* Column: 図の横軸
* Row: 図の縦軸
* Mark: 図の中身。データを色、大きさ、ラベル等に割り当てる事が出来る。

## データ形式

Tableau で表示するデータは他のアプリで作ります。例えば以下のような単純な例で説明します。Tableau で扱えるデータはこんな風に同じ幅のデータが縦に並んだ RDB のテーブルのようなデータです。

| A | B | C |
|---|---|---|
| 1	| 20 | 1 |
| 2	| 5  | 10 |
| 2	| 5  | 100 |
| 3	| 10 | 1000 |
| 4	| 15 | 10000 |

## Dimension と Measure の違い

話を単純にするために、A と B だけを使います。A を Columns に、B を Rows に割り当てると次のような図が出来ます。

<img width="360" alt="Screen Shot 2020-05-11 at 16.23.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35350/a9e7af84-8756-f6a2-b3db-a26180b7178c.png">

これは、Tableau が数値データをデフォルトで Mesure-Continuous と判定するからです。Mesure を図に割り当てると SUM のような集計関数が現れます。ここでは、A 欄をすべて足した値と、B 欄をすべて足した値の位置 (12, 55) に点が表示されます。ここで、A だけ Dimension に変更します。

<img width="360" alt="Screen Shot 2020-05-11 at 16.40.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35350/bf96b63f-c7f0-8341-1b69-208a4cc1af84.png">

すると A の集計関数が消えて、A のそれぞれの位置を通る線が表示されます。B は Mesure のままなので、B の Sum がそのまま表示されます。例えば A = 2 に対応する B は以下のように二行分あるので、10 となります。

| A | B | C |
|---|---|---|
| 2	| 5  | 10 |
| 2	| 5  | 100 |

次に、B も Dimension に変更します。すると B の Sum も外れてそれぞれの値が表示され、結果として散布図になります。

<img width="360" alt="Screen Shot 2020-05-11 at 16.23.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35350/7ddf339e-984f-7b9e-a4eb-685a844d2b33.png">

つまり、Dimension と Mesure は次のような違いがあります。

* Dimension を指定するとそれぞれの値がそのまま表示される。
* Mesure を指定すると、他の軸によって集計された値だけが表示される。

## Continuous と Discrete の違い

二番目の図(線グラフ) Measure-Dimension の B を Discrete に変更します。すると以下のような棒グラフになります。離散量であると伝えることで、グラフの形も離散量に適した物になります。

<img width="360" alt="Screen Shot 2020-05-11 at 16.54.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35350/8ba9c41e-0859-e15e-31e1-4643a5bd9140.png">

次に三番目の図(散布図) Dimensions の A と B の両方を Discrete に変更します。すると今度は以下のようなクロス集計表になります。

<img width="360" alt="Screen Shot 2020-05-11 at 16.54.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35350/756ffc1c-7abd-dc0c-c073-dd7b80e76234.png">

ここで、C を Marks の Text に割り当てるとと次のようなそれっぽい表になります。

<img width="360" alt="Screen Shot 2020-05-11 at 17.00.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35350/26576e75-e2c9-5700-1970-b33061a870bf.png">

## まとめ

Tableau とは、大量のデータを見やすい図に変換するツールです。見やすく整理するために、Dimension か Measure を使ってデータの省略の仕方を指定します。Dimension / Measure の違いは図の構造を大きく変えます。

一方で、Discrete か Continous の違いで離散値か連続値かを表現します。こちらはわりと表面上の変化です。

* Dimension を指定したフィールドの値は位置に変換します。
* Measure を指定したフィールドの値は、他のフィールドを元にまとめて集計します。
* Discrete を指定したフィールドの値は離散値として表現します。例: 棒グラフ、カラーパレット。
* Continuous を指定したフィールドの値は連続値として表現します。例: 線グラフ、グラデーション。

以上は Tableau に使われるアイデアとしてご紹介しましたが、データを視覚化するにあたって一般的に有用な概念なので、自分で一から図を作成する際にも気をつけたいと思います。

## 参考

* ディメンションとメジャー、青と緑: https://help.tableau.com/current/pro/desktop/ja-jp/datafields_typesandroles.htm