見出し画像

【Tableau】 ジッターチャートあれこれ ーーrandomとindex どちらを使うか

概要

  • Jitter Chart(ジッターチャート)とはどんなものか

  • 作り方

  • randomとindexどっちがいいのか

基本

・ジッターチャートは、データの粒をペイン内でバラつかせるテクニック
・データの粒(粒度)が細かいほど効果的
・X軸かY軸のどちらかでばらつきを作る場合…

 → X軸(横方向)にばらつかせる
   =列に<ばらつきを作る計算フィールド>を入れる
   =Y軸の値は変動しない=箱ヒゲ図で有用
 → Y軸(縦方向)にばらつかせる
   =行に<ばらつきを作る計算フィールド>を入れる
   =X軸の値は変動しない

・X軸とY軸の両方向にばらつきを作る場合…
両方向でばらつきを作るということは、X軸にもY軸にも集計された値(メジャー)が入っていないことを意味するため、これを表現する難易度は高い。

ありうるひとつは、WOW2023 Week7のように「データの粒の数自体に意味がある場合」で、ペインごとに最大個数に違いがあるため擬似的に棒グラフのような表現となり(jitter bar chart)比較できるようになる。
WOW2023 Week7では、横方向はrandomで縦方向はRUNNING_SUMを利用していた(indexで代用可)。

ありうるもうひとつが、「ばらつきの最大値を該当するメジャーの最大値までとして設定する」方法だ。これも擬似的な棒グラフとなっていて使いこなせたら自慢できる。


実際に作ってみる

データ:サンプルスーパーストア
お題:製品ごと(製品名)の平均割引率をカテゴリ別に表現する

そのままの場合

ここから粒をばらつかせて、どの割引率帯に製品が集まっているのか視覚的に把握したい。

random()の最小値にした場合

列にrandom()を作成すると製品名データひとつひとつにランダムな値が付与され、X軸方向にばらけた。
次にindex()を試してみる。

index()の場合
表計算の編集で製品名でindexを振るように変更

列にindex()を作成して表計算を特定のディメンション-製品名に変更するとX軸方向にばらけた。
しかし事務用品に比べて家具と家電のばらつきが弱い(もっとペインいっぱい使ってばらけて欲しい)。

どの範囲でばらついているのか

randomとindexでばらつき範囲がどうなっているのか確認したい。
サマリーを表示させてカテゴリを家具に絞ってみると…

randomのばらつき範囲を見る

randomは、最小値0.0013 最大値0.9997の幅でばらついている。

indexのばらつき範囲を見る

indexは、最小値1 最大値447の幅でばらついている。
1〜447というのは、家具カテゴリに含まれる製品名の数が447だということを意味する。
一方、事務用品は製品名の数が1000を超えるため、index()の軸が1000以上までとられているとわかる。
ということであれば、軸の編集でペインごとに軸範囲を独立させれば良い。

軸の編集処理
indexでペイン内にいい感じにばらつかせた

軸範囲がカテゴリごとに無駄なく設定された。

indexを使った別解

なお、軸の編集が面倒だったり、具体的に「このくらいばらつかせたい」という見込みがあるなら、index()%●● と計算フィールドを作ることでも対応できる。
ここで、index()%●●という計算は、
指定された粒度(ここでは製品名ごと)で付与されたindex番号を●●で割ったあまりを返す。
実際に計算して理解したが、この●●の値でいくつにばらけさせるかを決めることができる。

indexを使った別解

X軸方向に0〜499にばらけさせるとこうなった(●●を500にした場合)。
家具と家電は製品名の数が499よりも少ないため、右側にややスペースができているが、それでも軸が1000を超えていた時よりは良い。

理解しやすくするために、●●を5に指定すると…

index()%5の場合

X軸方向に0〜4の5つにばらけさせることができた。
もちろん、X軸方向の値には本来意味がないのだが、このままの形だとグループ化されているように見えてPreattentive Attributes的に誤認を招くことになるためペイン内にめいっぱいばらけさせるのが良い。

それで、結局randomとindexどっち使うのがいいの?

現時点での結論は「indexを使っておいた方が良さそう」だ。
正直なところ「好きな方を使えばいいんじゃないか」と思っていたし、「それなら自分はrandomの方が汎用性高そうだしこっち使うだろうな」と思っていた。
しかし上で書いたように、ばらつかせるための軸の取り方で誤認を誘導する危険があることには注意しなければならない。
ジッターチャートの作成とは別の文脈だが、random()は再計算のたびに異なる結果が出力されるため「一貫性のある結果が得られない場合がある」として将来非推奨になる可能性が示されている。

Tableau ナレッジベースより「RANDOM() 関数による一貫性のない結果の生成」

ジッターチャートで表現するという限定した状況では致命的なものではないが、読み手に不要な読解負荷をかけるべきでないという点では重要だと思う。
random()の再計算が走った時に製品名のX軸上の位置が変わるということは、チャートの見た目が(僅かであっても)変わるということだ。

試しに間違い探しをしてみよう。

左をTableau Publicに上げて、twbxをダウンロードして開いたものが右

どちらもデータはこれまでと同じものを使っている。
先に左(Jitter)の箱ひげ図を作成しTableau Publicにパブリッシュ、それをダウンロードして開いたものが右(Jitter-2)だ。
開くときにrandom()の計算が走っているため製品名の位置がX軸方向で違っているのがわかる。

例えば左のチャートを事前にPowerPointで印刷し配布していたとして、本番で画面投影する時には右側のようなチャートになっているかもしれない。
「X軸方向のばらつきには意味がないんですよ」と言う前に「点の位置が違うじゃないか」と指摘されるのは面倒だ。「データの改竄をしてるんじゃないか?」とまでは思われなくても「そのデータ大丈夫なの(笑)」と思われたら最悪だ。うまくいくものもいかなくなる。
ということでindex()を使っておいた方が良さそうだ。

ちなみに、indexで振られる番号は並び順によって決まるので、並び順を変えるとやはり見た目が変わる。

上は降順、下は昇順

最後に

Jitterって、体育の時間とかの「体操の隊形に…開け!」を思い出しませんかね。校庭いっぱいに広がって欲しいのになんだか塊ができたりやたら空いてるところがあったり。

ちょっと綺麗な感じに作ってみました(大きさ=売上、色=利益)。

綺麗な感じにしてみた

Tableau Publicにアップしました。


参考にしたサイト

参考にできなかったけどめっちゃ試したいサイト


この記事が気に入ったらサポートをしてみませんか?