RedashでのSankey Diagram、Sunburst Sequence Diagramの利用

社内での共有に作成したメモですが、折角なので、ちょっと手直しをして晒しておくパターンです。
最近のredashに組み込まれているちょっと変わり種のビジュアライゼーションの使い方・使い所についてご紹介します


### Sunburst Sequence / Sankey Diagram ってなーにーー
![](https://cdn-images-1.medium.com/max/1600/1*3Ca1MGagAK4WhWvdo1DWVA.gif)
https://blog.redash.io/whats-new-with-redash-new-parameters-ui-better-slack-support-52873c5adee

#### Sankey DIagram(サンキーダイアグラム、サンキー図)
工程(ステップ、ノード)ごとの流入量を可視化する手法。
ノードの大きさと、ノードを結ぶグラフや矢印の太さで「地点Aから地点Bに、どのくらいの遷移があったか」を分析するときに使う。

#### Sunburst Sequence(サンバースト図、多重円グラフ)
>階層の各レベルを一周する円で示し、一番内側の円が階層の最上位に相当する。階層を持たない(1階層しかない) サンバースト・チャートは、ドーナツ・グラフのように表示されてしまう。通常は複数の階層を持ち、内側から外側に向かって階層構造が下がっていく。そのためサン・バースト（太陽の爆発）と呼ばれる。
(https://qiita.com/yuichy/items/0fc278cee4604160e6fd)

#### example
redashのdemo画面にあるものを御覧ください。  
※利用しているご自身のGoogle Accountでログインできます。
http://demo.redash.io/queries/2280#3113

### `Sequence` の可視化
これらの手法に共通しているのは、「連続性」に関する可視化ということです。「組み合わせとなる要素」と「順番」を意識する！という際に効果を発揮するということです。

#### 類似
類似要素を持つものをまとめると、こんな感じ？という可視化手法を並べてみました。
(「なんとなく」で分類しているので、正当性にはあまり自信ありません :no_mouth: )

ダイアグラムの選択は「どういうときに使うんだろう」が肝で、それによって薬にも毒にもなると思っています。うまく付き合うために、SankeyやSunburstが「大体どんな立ち位置なの」のイメージを膨らませてみてください。

* 組み合わせに関する可視化
    * 二次元表(テーブル)
    * 散布図
    * [デンドログラム](https://bl.ocks.org/mbostock/4063570)、ディシジョンツリー
    * ベン図
* 連続性に関する可視化
    * 折れ線グラフ
    * [ファネルチャート](https://community.modeanalytics.com/gallery/funnel-chart/)
        * Redashの4.xで入ったらしいですね！
    * yes/no図

#### `Sequence` の扱い方、対応する内容
「パス(経路)」と、それぞれのパスにおける「流量」をインプットデータとして扱うことになります。

身近な例としては、Google Analyticsの行動フローもその一環です。
![Users Flow example with Campaign dimension selected](https://lh3.googleusercontent.com/uqDY6VSR3F-6QNg2lQMNM_eWrv3R_cQYpxaS5Ty50ANKj05a-wmUdHio62ue=w678)
(from: https://support.google.com/analytics/answer/1713056?hl=en&ref_topic=2542044)

これについては、「ページA・ページB・ページCをみた」「アクションをした」という観点と「Aの次にBに来ていること」「Bから(Xではなく)Cに行っていること」という観点の双方が同時に可視化されている訳です。  
それは、「 **次に** どこにいったのか」が価値のある情報であるという分析者の意思を反映しています。「各ページに発リンクがあるから」という根拠に基づき、「行動順」を連続性の軸としてプロットしているわけです。

裏を返せば、「時系列順」「行動順」だけがこれの可視化手法にハマる観点ではない！とも言えるかも・・？と個人的には考えています。  その枠を外して発想すると、意外と活用用途は広いかもしれません。

#### 使い分け
感覚的な説明をすると、Sankeyの方はより「タイミング」に着目していてSunburstの方は「組み合わせ」に着目する技法になると思います。
「2ページ目にどのカテゴリを見たか」に重点を置くのが前者で、「ページA→ページBと進んだ次にどこをみたか」に重点を置くのが後者です。「①X → ②Z → ③Y」「①Y → ②Z → ③Y」という2つのデータがあったときに、「Zにどのくらいきたか」「Zの次にどのくらい流れていったか」をハッキリさせるのであれば前者です。「最初にYからスタートしたこと」をハッキリさせるなら後者です。



### redash上で扱うために必要なこと & サンプル

redashに要求されるフォーマットに沿って、データを用意する必要があります。
それがこちらです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/941/add3171a-bef7-6695-5572-752452ee7fdb.png)


わかりづらいので、「実際にインプットとする表データ」を示します。
[こちらの図](https://pbs.twimg.com/media/C1u-QIIVEAABclS.jpg)を @itosho さんに教えていただきました。
こちらを題材に例を占めします

#### Sankey
* ステップを列に定義し
* どのパスを通ったかを行(セル)に定義します
* **途中のステップが欠落したら動きません**
* 5ステップまでしかレンダリングされないかも

##### input
![image.png](https://qiita-image-store.s3.amazonaws.com/0/941/e4670639-5a37-06cc-0c38-ac2f0fccd75e.png)

##### output
![image.png](https://qiita-image-store.s3.amazonaws.com/0/941/d29503f9-9d50-be0c-d85a-df6147e5e646.png)


#### Sunburst
* 基本的にはSankeyで利用したデータをそのまま転用可能です！
* 「ステップ」でなく「ノード」を列にとり
* パスを行に定義するという形でも可能
* **途中のステップの欠落が認められます**


##### input
![image.png](https://qiita-image-store.s3.amazonaws.com/0/941/3b69c9e0-ecb7-6b59-5f85-193f906187d6.png)


##### output
![image.png](https://qiita-image-store.s3.amazonaws.com/0/941/6a120878-6908-161e-c0f3-b3c201501986.png)

### データの取り出し方について
Redash上で扱うために、↑での表現を使えば「input」となるデータを用意する必要が、当然ながらあるわけです。
SQLでいえば、`GROUP BY` `COUNT` `RANK` `COALESCE` 辺りを組み合わせると手軽に利用できるのかもしれません。

-------
適切に利用すればとても便利な場面も多いと思うのでぜひ触れてみてください :tada: