データ可視化のアイデア帳

データ可視化にまつわるあれこれ

ヒストグラムと平均線 - Tableau の場合

よくある質問のひとつ「ヒストグラムに縦線 (補助線) を入れたい」というのが今回のお題です。イメージはこちら。
f:id:zkn360:20190308172027p:plain

一見簡単そうなのですが、ヒストグラムの性質と Tableau の機能の両方を知らないとできないちょっと厄介な Viz だったりします。今回はヒストグラムの作り方から始めて完成を目指したいと思います。データセットはおなじみの「サンプル - スーパーストア」です。

まずは普通のヒストグラムから

何はともあれヒストグラムが作れないことには始まりません。まずは基本の作成方法です。

表示形式からヒストグラムを作成する

最も簡単なのは、Tableau のビルトイン機能である「表示形式」を使うことです。ヒストグラムにしたいメジャーをひとつ選択すると、表示形式からヒストグラムが選択できるようになります。(今回は [利益] を使用します。)
f:id:zkn360:20190308142957p:plain

表示形式の中のヒストグラムの図を選択すると、すぐにヒストグラムが出来上がります。簡単!
f:id:zkn360:20190308143119p:plain

ビンとは

ワークシートをよく確認すると、列シェルフとディメンションに [利益(ビン)] という項目が出来ていることがわかります。このビンとは、ヒストグラムの幅のことでいわゆる階級幅のことです。*1表示形式からビンを作成すると、自動計算された値が設定されています。これを変更するにはディメンション内の [利益(ビン)] > 編集 > ビンの編集 を選択し、ビンのサイズを直接入力します。今回は 10000 を指定しました。(図はデフォルトの値になってますが汗)
f:id:zkn360:20190308143946p:plain

縦軸の編集

これで完成でもいいのですが表示形式からヒストグラムを作成した場合、縦軸が [利益のカウント] に自動的に指定されています。これを顧客数に変えたい場合はディメンションから [顧客名] を行シェルフに追加すればいいのですが、顧客名はディメンションのためメジャーに変換が必要です。行シェルフの [顧客名] > メジャー > カウント(個別)*2 を選択します。
f:id:zkn360:20190308144443p:plain

これで顧客数を縦軸とするヒストグラムができました。
f:id:zkn360:20190308144706p:plain

あとはもともとあった [利益のカウント] を削除*3します。これで単純なヒストグラムが完成しました。
f:id:zkn360:20190308144829p:plain

ビンはメジャーから直接作成可能

慣れてくると縦軸の再設定が面倒なので、いきなりビンを作成してしまった方が手間が省けます。ビンは対象のメジャーを選択 > 作成 >ビン からでも作成できます。
f:id:zkn360:20190308145029p:plain

ビンに平均線は追加できない

あとは平均線を追加するだけ、ということでアナリティクス タブから平均線を追加しようとすると問題が発生します。[利益] に対して平均線を追加したいのですが、メジャーの選択肢が表示されません。
f:id:zkn360:20190308145312p:plain

とりあえず「表全体」を選択して平均線を追加すると想定と異なる結果になります。
f:id:zkn360:20190308150157p:plain

結論から言うと見出しの通りビンに平均線が追加できないので、ワークシート内にある他のメジャー (この場合は [個別のカウント(顧客名)]) に対しての平均線が追加された形になります。


コレジャナイ!!


なんですが、諦めるのはまだ早いです。

メジャーを追加すれば平均線が利用できる

ここまでのところで「ビン」に対しては平均線*4が追加できないことがわかったので、逆にメジャーを組み合わせれば出来そうだということがわかります。ここからは機能や計算を知らないとできないのでこの記事にまとめておこうと思います。ということで手順です。

1. メジャーを追加する

列シェルフにメジャーを追加します。今回の場合は [利益] です。

2. メジャーをディメンションに変換する

追加した [利益] をクリック、メニューから「ディメンション」を選択します。
f:id:zkn360:20190311100659p:plain

3. 二重軸にして表示を重ねる

Tabloid *5にはおなじみの手順ですね。
f:id:zkn360:20190308160943p:plain

表示が重なりました。
f:id:zkn360:20190308161007p:plain

4. 軸を同期させる

Tabloid にはおなじみの手順ですね。(再) 利益軸*6をダブルクリックまたは右クリック >軸の編集 で「二軸を同期」にチェックを入れます。
f:id:zkn360:20190308161104p:plain

5. 見た目を調整する

二重軸にするとヒストグラムの表示が線グラフ表示に変わってしまっています。これを調整していきます。

5-1. 色の準備

[メジャーバリュー] が色に設定されていますが、[利益] と [利益(ビン)] で個別に色を設定したいのでまずこれを削除します。

5-2. グラフ形状の変更

線グラフを棒グラフに変更します。 5-1. と 5-2. は順不同で大丈夫でしたね…

5-3. 色の調整

実は見た目上 [利益] のグラフは表示されている必要がないので、見えないように魔法をかけます。マーク シェルフ > [利益] > 色 > 不透明度 でデフォルト 100% になっている箇所を思い切って 0% にします。
f:id:zkn360:20190308161846p:plain

これで見た目は元のヒストグラムと全く同じ形になったはずです。
f:id:zkn360:20190308161954p:plain

5. 平均線を追加する

ようやく平均線の出番です。アナリティクス タブから平均線を追加しましょう。
f:id:zkn360:20190308162049p:plain

[利益] が追加できるようになっていますので、 [利益] に対して平均線を追加します。
f:id:zkn360:20190308162142p:plain

6. 平均線を追加する (検算は確実に&リファレンス ライン)

手順 5 で平均が追加できた、終わったと思った方、それはです。この「サンプル - スーパーストア」の利益の平均額は 2739 円です。ところが上記では 3181 円とずれがあります。これは手順 1 で利益をディメンションに変換していることに由来します。ディメンションに変換した場合、複数のレコードが同じ金額だった場合、それは 1 つとしてカウントされます。つまり合計と分母がずれちゃってるんですね。これを防ぐためにリファレンス ラインを利用します。

6-1. 集計の粒度に影響を受けない平均値を作成する

Tableau はワークシート内に配置した情報を元に集計を行います。今回配置したい平均値は「すべての値の平均値」なのですがここまでの手順だと「すべての値」を表現する粒度がありません。そこで計算式を利用してワークシート内の集計の粒度に影響を受けない値を計算フィールドで作成します。計算式は下記です。(フィールド名は任意でどうぞ。今回は便宜上 [平均利益] としました。)
f:id:zkn360:20190308171305p:plain
{FIXED: AVG([利益])}

*** 6-2. 詳細に追加する
リファレンス ラインで上記の [平均利益] が反映できるよう。マーク シェルフの [利益] の「詳細」にメジャーのリストから [平均利益] をドラッグ アンド ドロップで追加します。
f:id:zkn360:20190308171527p:plain

その後でアナリティクス タブのリファレンス ラインを[利益] に対して追加します。リファレンス ラインの編集ダイアログで、線セクションの値を [利益] から [合計(平均利益)] に変更します。
f:id:zkn360:20190308171846p:plain

これで正しい平均線が追加できました。あとは 利益軸の表示をオフにする (「ヘッダーを表示」のチェックを切る)、平均線の表示を調整する、全体の色味を整える等の調整を行えば、トップに表示したような形の Viz を作成することができます。

意外と簡単なようで、奥の深いヒストグラムに補助線を追加する方法でした。もう少し追及したい方は KB も参考になります。
https://kb.tableau.com/articles/howto/histogram-of-aggregated-values?lang=ja-jp

おまけ: ビンでフィルター

あまり知られていない機能なのでここで紹介します!(笑) ビンをフィルター カードに入れると「値の範囲」というフィルターが出てきます。これはビンの数を指定してフィルターできる機能なんですね。ゼロを起点にして前後 5 つずつの階級幅だけを見たい、外れ値が遠くにありすぎて全体が見づらい時などにご活用ください。*7
f:id:zkn360:20190308172648p:plain

*1:大雑把にいうと棒グラフの太さです。

*2:COUNTD のこと

*3:外すとか取るとか言ったりします。

*4:リファレンス ラインやリファレンス バンドも同様です。

*5:Tableau ユーザーのこと

*6:後から追加した方のメジャーの軸

*7:遠くの外れ値はレコード数も少ないことが多く、選択して除外しようにも選択しづらかったり、そもそも見えなかったりすることが多いので…