Tableauでサンキーダイアグラムを作成する

Version 4

    サンキーダイアグラムをTableauで描いてみる方法がTableau Communityに紹介されているので、こちらに解説を加えてご紹介したいと思います。

    この技法はナポレオン・ボナパルトのロシア侵攻のルートにも使われた可視化テクニックとのことです。

     

    Sankey diagram made of dynamically generated polygons

    https://community.tableau.com/thread/152115

     

    事前知識としてこちらに目を通しておくとさらに理解しやすいと思います。

    Using Improved Data Connectivity in Tableau 8.2 to Build Sankey Diagrams

    http://www.dataplusscience.com/SankeyinTableau82.html

     

     

     

    1.サンキーダイアグラムとは

    サンキー・ダイアグラム(Sankey diagram)は工程間の流量を表現する図表のことで、矢印の太さで流れの量を表します。特にエネルギーや物資の流れを表す目的で利用されることが多いようです。

     

    Sankey-1.JPG

     

     

     

    2.シグモイド関数を使ってグラフを書く

     

    サンキーグラフを描画するときに曲線を使いますが、この曲線を表現するためにシグモイド関数という数式を利用します。

     

    2.1.シグモイド関数とは

     

    A. 理解のために用意したエクセルシートの"Sankey Data 1row" と "Model_Simple"を link で結合します

     

    二つのシートにはどの行にも"link" が付いているので、全レコードを総当りで結合します。

    1つのレコードにmodelで定義してた97個の点をプロットするイメージです。

     

    B. sigmoid 関数を作成します。

    計算フィールド"sigmoid" を作成し、以下を入力します。

    1/(1+EXP(1)^-[t])

     

    C. t を列にドラッグし、右クリックしてディメンジョンに変更します。

     

    D. sigmoidを行にドラッグします。

     

    以下のようなグラフが作成されます。(1.Sigmoid関数の動き シート参照)

    この関数では、tの値がマイナスに大きくなると0に、tの値がプラスに増加すると1に近づく関数となります。

     

    1.sigmoid.JPG

     

     

     

    次に、この関数を使って開始点と終了点を曲線でつなぐ計算式を作成します。

     

     

    E. [0から1]の範囲でStartPpointEnd Point のパラメータを作成します。パラメータコントロールの表示をONにします。

     

     

    F.計算式Curveを作ります。

    [Start Point] +(([End Point]-[Start Point])*ATTR([Sigmoid]))

     

    G.列にt、行にCurveをドラッグします。

     

    H. Start Point , End Point を変更するとそれぞれの地点をつなぐシグモイド曲線が描画できます。

    2.sigmoid_parameter.JPG

     

     

    この曲線は tがマイナスのとき、Sigmoid関数は0なので、Start Pointに、t がプラスのときは1となるので、End Pointに近づきます。結果として、Start Pointから始まり、End Pointで終わる緩やかなカーブを描くことが出来ます。

     

     

    2.2.シグモイド関数を使って領域を描く

     

    次に、2つのシグモイド曲線で囲まれた領域をポリゴンで塗りつぶす方法を紹介します。

     

     

    A. 理解のために用意したエクセルシートの"Sankey Data 1row" と "Model_Simple"を link で結合します

    2-2-A.JPG

     

     

    B. パラメータ Width[0-1]の範囲で作成し、パラメータコントロールを表示します。

     

    C. Max Star Point, Max End Point をパラメータと同一にします

     

    D. Min Start Point, Min End Point を Max Start Point, Max End PointのそれぞれからWidth引いた値とします。

     

    C. 領域の上限ラインを作成します。計算式 Curve Maxを作成します

    [Max Start Point]+(([Max End Point]-[Max Start Point])*ATTR([Sigmoid]))

     

    D. 領域の下限ラインを作成します。計算式 Curve Minを作成します。

    [Min Start Point]+(([Min End Point]-[Min Start Point])*ATTR([Sigmoid]))

     

    E. Polygon Curve を作成します。

     

    CASE ATTR([Min or Max])

    WHEN 'Min' THEN [Curve Min]

    WHEN 'Max' THEN [Curve Max]

    END

     

    Path 048 の時は Curve Min を描き、9749 の時は Curve Maxを描くようにします。

     

    ここでグラフを作成します。

     

    F. マークを多角形にします

    G. Min or Maxを詳細にドラッグします。

    H. t を列にディメンジョンとしてドラッグします

    I. Polygon Curveを行にドラッグします

    J. Pathをパスにドラッグします

     

    2-2^J.JPG

     

    開始点、終了点、幅を設定してシグモイド曲線で区切られた領域を塗りつぶし、フローを作成することが出来ました。

    今度はより実用的なデータを使ってサンキーダイアグラムを作成してみましょう。

     

     

     

     

    3.携帯キャリア(を想定した)顧客の移動をサンキーダイアグラムで可視化

    それでは実際に携帯電話のキャリア移動を想定したデータをサンキーダイアグラムを作成してみましょう。データとして、Sankey Data_cellphone.csvには移動元(STEP1)、移動先(STEP2)数量のデータがあるとします。

    3.1.Sankey Cell data source.JPG

     

     

     

    A. データをジョインします。

    Sankey Data_cellphone.csv と Model をlink でジョインします。

     

    B. 計算式”Sigmoid"を作成し、Sigmoid関数を入力します。

    1/(1+EXP(1)^-[t])

     

    C. 計算し"Flow Size" を作成し以下を入力します。サンキーダイアグラムのフローの幅になります。Step1Step2のカテゴリー組み合わせが全体の何パーセントに当たるかを計算します。

     

    SUM([Size])/TOTAL(SUM([Size]))

    3-C-FlowSize1.JPG

     

     

     

    D. 上記”Flow Size"の既定の表計算をクリックし、次を使用して計算→詳細

    → 場所の指定→ Step1,Step2の順番で入力します。

     

    並べ替えにフィールド、Size: 合計:昇順とします。

    3.Sankey1.JPG

     

     

     

    ※ 次に、Max Curves(フロー領域の上端) Min Curves(フロー領域の下端)について、それぞれの開始点と終了点を計算します。

     

    E. Max Curvesの開始点を計算します。

    計算フィールド”Max Position 1”を作成し以下を入力します。

    RUNNING_SUM([Flow Size])

     

    F.計算フィールド”Max Position 1”の既定の表計算で 詳細→場所の指定で STEP1,STEP2 の順番を指定します。

     

    G. Max Curvesの終了点を計算します。

    計算フィールド”Max Position 2”を作成し以下を入力します。

    RUNNING_SUM([Flow Size])

     

    F.計算フィールド”Max Position 2”の既定の表計算で 詳細→場所の指定で STEP2,STEP1 の順番を指定します。 (Max Position 1 とは順番が反対になります。)

     

    H. Min Curvesの開始点を計算します。

    計算フィールド”Min Position 1”を作成し以下を入力します。

    RUNNING_SUM([Flow Size])-[Flow Size]

    既定の表計算で 詳細→場所の指定で STEP1,STEP2 の順番を指定します。

     

    I.  Min Curvesの終了点を計算します。

    計算フィールド”Min Position 1”を作成し以下を入力します。

    RUNNING_SUM([Flow Size])-[Flow Size]

    既定の表計算で 詳細→場所の指定で STEP2,STEP1 の順番を指定します。

     

     

    ※ 次に上限カーブ、下限カーブとその両方を表示するポリゴン領域用のカーブを作成します。

     

    J. 上限カーブを作成する計算式 ”Curve Max"を作成し以下を入力します。

    Curve Max: [Max Position 1]+(([Max Position 2]-[Max Position 1])*ATTR([Sigmoid]))

     

    K. 下限カーブを作成する計算式 ”Curve Min"を作成し以下を入力します。

    Curve Min: [Min Position 1]+(([Min Position 2]-[Min Position 1])*ATTR([Sigmoid]))

     

    L. 上限と下限の線を引く計算式"Curve Polygon"を作成します。

     

    CASE ATTR([Min or Max])  // remember the data we added to the model !

    WHEN 'Min' THEN [Curve Min]

    WHEN 'Max' THEN [Curve Max]

    END

     

    ※ では、サンキーダイアグラムを作成して行きましょう

     

    M. グラフタイプを"多角形"に変更します

     

    Step1,Step2 (Shiftを押しながら)色にドラッグします

    Min or Max”を詳細にドラッグします

    Path”をパスにドラッグします

     

    3-M.JPG

     

     

      

    N. "t" を列にドラッグし、右クリックしディメンジョンを選択します

    O. "Curve Polygon"を行にドラッグします

     

     

    P. ビューの調整をします。

    • 色の透明度を50%に設定
    • "t" の軸を -6 6 に変更
    • "Curve Polygon"の軸を固定し 0 1 に変更
    • 線の書式設定(筆マーク)から行と列のグリッド線をなしに設定
    • Step1,Step2の並べ替えを 降順、アルファベット順に設定

     

    3-P.JPG

     

     

    Q. 左右に棒グラフを追加するため、計算フィールド"Step Size" を追加します。

    SUM([Size])/TOTAL(SUM([Size]))

     

    こちらには表計算を設定しません。

     

    R.新しいシート"3.Sankeyダイアグラムを描く-軸1"を作成し、"Step Size" を行に、"Step1" を色にドラッグします。テキストにも"Step Size" をドラッグしましょう

     

    ヘッダーの非表示、線の書式設定よりグリッド線の非表示を選択します。

     

    S.新しいシート"3.Sankeyダイアグラムを描く-軸2"を作成し、同様に"Step2"の棒グラフを作成する

     

    T.新しいダッシュボード”3.Sankeyダイアグラム-ダッシュボード”を作成し、左右の棒グラフとサンキーダイアグラムを配置する。

     

    U.ダッシュボードのアクションよりハイライトアクションを追加する

     

     

    3-U.JPG

     

     

    いかがでしたでしょうか。 サンキーチャート魅力的な可視化技法ですね。

    データによって2段のサンキーチャートを作成したり、フィルターを追加したり等

    バリエーションは拡張できそうです。

     

    ただし、こちらの機能はTableauの基本機能を超えたカスタマイズとなりますので、サポートの範囲外となることをご了承ください。

    また、データ量が多くなる場合、それぞれについて、データプロット用のレコードが倍増しますので、大量データを可視化する際には

    パフォーマンスもご考慮ください。

     

    以上、ご参考になれば幸いです。