Tableauで前年比をクールに表現する技術
前年比をグラフ化する
前年比ってよく使いますよね。
色々な表現方法があると思うんですけど、カッコよくスマートに表現する方法って何かな?って色々考えてる内に知見がたまってきたので放出しようかと思った次第です。
今から色々な見せ方を紹介するので、何か一つでも参考になるのがあれば幸いです。
分かりやすく、こんな感じの簡単なデータで初めていきます。
店舗,当年,前年
T001,230,194
T002,315,291
T003,102,96
T004,108,102
T005,400,380
T006,202,192
T007,100,98
T008,97,97
T009,206,208
T010,303,306
T011,202,204
T012,291,294
T013,380,396
T014,396,416
T015,388,408
T016,158,170
T017,178,192
T018,291,315
T019,464,524
T020,348,420
前年比はTableauの計算式で定義して、
表でパパっと表すとこんな感じになりますね。
棒グラフだとこうですね。
ではこの棒グラフをどんどんカッコよくしていきましょう。
まずはじゃあ、分かりやすく100%の所でリファレンスラインでも入れてみますか。
せっかくなので100%を基準に色も変えてみましょう。
横軸の目盛りがあるならテキストラベルいらないんじゃないかという考え方もあり得ます。マウスオーバーすればツールヒントで数値も確認できますし。
「いやー、そうは言ってもクライアントはラベル欲しいって言ってるんだよねえ」という事であれば戻して付ける方向で考えましょう。付けた上で、ラベルがあるなら目盛りも列のグリッド線もいらないんじゃ?と逆から攻める考えもアリですね。見た目はスッキリしてきました。
「店舗」のラベルも外してみましょう。
その代わり、グラフの上にタイトルを付けて何のグラフか分かるようにしておけばよいです。
「ラベル付けてほしいとは言ったものの、なんかこう、数字の圧がすごいよねえ」
何て言われるかもしれません。
ラベルは表示しつつも、部分的に表示する方法はあるかな?と考えてみます。
Tableauのラベル表示オプションではそこまで選択肢が無い事が分かります。
「最小値/最大値」は使えるケースも多いですね。
しかし真ん中周辺の数字ももうちょっと表示してほしいとなるケースもあるでしょう。
その場合は少し工夫する必要があります。
まず、ラベルを付けるマークは「すべて」に戻します。それで方針としては、新たにラベル表示用の計算式を定義し、その中で表示したい条件の場合だけ表示するIF文を書けば、ケースに合わせたカスタムな表示というのが可能になります。
ラベルを小数点単位で間引いて表示する
今回は次のような表示をゴールとして実装を考えてみましょう。
これはどういう仕組みかというと、「パーセントの1の位が繰り上がった時だけラベルを表示する」という事をやっているグラフになります。上のグラフでは4行目の105.9%があって、その下の2行は空欄ですが、これはそれぞれ「105.3%」、「105.2%」なので、同じ105%台なので表示してないという感じです。
この表示方法のメリットは、第一に表示がスッキリするという事、第二に数値の変動が捉えやすくなるという事です。ようは近い数値でグループ化して一番上の行を代表にしてラベルを出すという事をやっているので、数値がはっきり動いた所だけ強調できる訳ですね。
ラベルが無い所はツールヒントを当てずともおおよそ数値が予測が出来るのもポイント高いです。例えば9行目の99.0%から下3行は空欄ですが、全て99%台である事は確実ですし、13行目で96.0%と来ているので、なるほど97%, 98%台は一つも無いのかというのも分かる訳です。
まあ、ここまでのロジックは全て、数値を最後にソート表示する事が前提のロジックなので、全てのケースでベストプラクティスになる訳ではないです。選択肢の一つとして頭に入れておくくらいが丁度よいでしょう。
ではこのグラフの実装方法を考えていきます。
まずは「前年比_間引き表示用」という計算式を作成し、ロジック確認用に前年比の右に並べて表示してみましょう。
ROUND([前年比], 3) * 100
小数点を切り捨てる為、FLOOR関数を追加します。
FLOOR(ROUND([前年比], 3) * 100)
「前年比_間引き表示用」に表計算を追加します(簡易表計算⇒差)。
そうするとこのように、一つの上の行との差を返してくれます。
ここで気付いた方もいるかもしれません。
ようはこの表示が0以外の所だけ表示すればいい訳ですよね!
という事で、新たに下記の計算式を定義します。
[前年比_間引き表示]
IF ZN([前年比 (間引き表示用)]) - LOOKUP(ZN([前年比 (間引き表示用)]), -1) <> 0 THEN
[前年比]
END
なんだこの式は!となるかと思いますが、これを書くのは簡単で、一つ前で設定した表計算フィールドを計算式内にドラッグ&ドロップすれば、勝手に上記の式が入ってくれるのです。なので式の細かい意味は完全に理解できなくとも、とにかくこの表計算と同じ意味の式が入ってくれたんだ!と捉えるくらいで十分でしょう。
ドロップ直後はこのようになるので、
IF文を足してあげれば完成です。
そうしてできた計算式のみテキストラベルに表示させて、他のラベルは消しちゃってください。
書式設定は%で小数点第一位まで表示にしてみます。
そうすると下記のように表示できますね!
もし一部表示されないラベルがある方は、下記のチェックを付けてみて下さい。
単純に表示領域が足りてないと判定されている場合は、これで解決できます。
それで、気付いた方もいるかと思いますが、一番上の行はラベルが表示されてないですね。
一番上の上は無いので、差分が取れてない訳です。
なので一番上は無条件で出すという式を加えましょう。
INDEX() = 1
これで問題無く表示できました!
前年比の見せ方を工夫する
さて、ここまで見てきた方法である程度見やすくはなりました。しかしこう思う事はないですか?
この赤い部分、いらなくない?
どちらかと言えば、見たいのは100%付近の黄色枠の部分ですよね。
データにもよりますが、前年比が100%付近に多くのレコードが密集している事もよくあります。
その場合、そこだけ眺めても変化がいまいちわかりづらいでしょう。そういった場合に簡単で効果的な策は、前年比から1を引く事です。
[前年比-1] という計算式を定義して、
グラフに配置してみます。
100%のリファレンスライン(縦線)はいらなくなるので消しておきましょう。
テキストラベルだけ100%基準になったままなので、
[前年比_間引き表示]を編集して赤枠の部分にあった[前年比]を[前年比-1]に変更します。
いい感じになりました!
ただ、-4.0%の次に-4.8%が来ているのはおかしいですね。
同じー4%台なのでここは非表示になっていないといけない所です。
計算式[前年比_間引き表示用]を次のように変更しましょう。
変更前:FLOOR(ROUND([前年比], 3) * 100)
↓
変更後:FLOOR(ROUND(ABS([前年比-1]), 3) * 100)
[前年比]を[前年比-1]にし、更にABSで囲っています。ABSは絶対値を表示する関数です。これを付ける事により、前年比が負数になってもFLOOR関数が意図通り機能するようになります。あとは横軸のヘッダーと目盛りも消して、
ばっちりですね!
最初のグラフより大分変化が見やすくないでしょうか?
真ん中の0が基準になるので、前年比100%以上なのか、未満なのかも分かりやすいです。
どうしてこのような変形が可能なのかというと、例えば、
前年比120%、前年比+20%、前年比20%増
これらは全て同じ意味なんですね。
負数側も、
前年比80%、前年比ー20%、前年比20%減
これらも全て同じ意味です。
(要は表現方法が異なるというだけです)
余談ですが、1を引いたときの値を成長率とか、変化率、増減率、伸び率などと表現する場合もありますが、中身は全て同じです。なのでわざわざ「前年比成長率」のような大層な言葉を使わなくても「前年比」にプラスマイナスの符号を加えるだけで同じ意味の事は表現可能なんですね。
まあ、状況によって色々な言葉を使い分けるのは普通ですので、それらが相互に変換可能という事を押さえていただき、その時々に合わせたベストな言葉を選んでいただければよいかと思います。
更に余談ですが、前年比成長率として紹介される式では、
(当年ー前年)/当年
という式を多く見かけるかと思いますが、
これは数式を整理すると
当年/前年ー1
になります。
なので両者とも同じ数値を言っている訳です。
という事を踏まえると!
上記の式で「前年比成長率」ではなくあくまで「前年比」という言葉を使う場合ですと、数値の前にプラスマイナスの符号が無いといけない訳です。従ってこのグラフでも符号を表示してみましょう。符号は文字列のフィールドをわざわざ定義する必要は無く、書式設定から可能です。
書式設定のカスタムの欄に以下のように入力します。
+#,##0.0%;-#,##0.0%
これで符号も問題無く表示できました。
実数も表示する
「前年比のグラフはいい感じだけど、実数も表示できない?」
と言うもっともな指摘を受ける可能性もあります。
「カーソル当ててツールヒントで確認して下さい」と言うのは簡単ですが、果たしてそれで納得してもらえるでしょうか?前年比を構成する実績値というのは重要な要素なので、わざわざカーソルを当てずとも一画面で瞬時に把握したいというのも当然の欲求です。
例えば1/2=50%と100/200=50%では意味する情報は全然違いますからね。前年比は同じでも同列に評価はできないでしょう。
という事で早速実数も表示してみたいと思います。ダッシュボード画面で合体する事を前提に、別シートでExcelのようなクロス表を作成するという手もありますが、今回は同じシートで棒グラフで表現してみたいと思います。
やり方は簡単で、ただ単に列シェルフに「当年」を追加して、二つ目のグラフを作るだけです。
フォントや色を工夫する
灰色系が左右で被ってしまっているので、このタイミングでいい感じの色に設定を済せましょう。
まずは右側のグラフに手を付けます。色カードの「前年比1以上」を「前年比-1」に上書きします。方法としては、列シェルフにある「前年比-1」をCtrlを押しながら「前年比1以上」に被せるようにドラッグ&ドロップすればよいです。
※Ctrlを押さないと複製がされず、失敗してしまいます。
そうするとこのようになりますね。
次に「色の編集」を押し、
ステップドカラーを6に設定し、「詳細」メニューを開いて「中央」を0に設定します。
こうする事により、前年比が+0%以上の時と0未満の時とで色が明確に別れるようにできます。色をみるだけでプラス成長かマイナス成長か一目で分かる訳ですね。ステップドカラーの6は設定例なので好きな数値でよいですが、奇数にしてしまうと真ん中が灰色とかになってしまうので、プラスかマイナスかというのがその近辺では分かりづらくなります。
今回の例では更に、前年比がプラスなのかマイナスなのかというのが、色のイメージからも分かりやすい色に変えてみます(ここら辺は趣味の領域なのでケースバイケースで選択して下さい)。
プルダウンから「赤 - 緑の分化」にしてみました。
するとこんな感じです。
分かりやすくていいですね。
さて、次はフォントに手を付けます。正直なんでもいいのですが、デフォルトのTableau Bookの9Ptのフォントはやや小さい気がしますので、もう少しはっきり見える設定に変えてみましょう。
今回は「Verdana」でサイズは10Ptに変えてみました。大分はっきりと見えるようになりますね。Desktopだと10Ptはやや大きいと感じるかもですが、パブリッシュしてサーバーで見ると9Ptでは小さいと感じる場合もあるので今回10Ptにしてますが、好きな値で設定して下さい。
※左側のグラフも同様の設定にしておきます。
するとこんな感じです。
大分いい感じですね。
プラスとマイナスでグラフだけでなくフォントももう少し強調したいですか?
その場合はプラス用の計算式、マイナス用の計算式で二つ作成し、テキストラベルで並べて配置して色をそれぞれ設定しておけばよいです。
※ここでついでにBoldにしてます↓
するとこんな感じです。
いいですね!
コンパクトに表示する
ここまでの改良で大分クールなグラフにはなってきましたが、最後にもう一捻り考えてみましょう。
ダッシュボードの要件によっては、
「いやー、ここのスペースに前年比のグラフ配置したいけど、このグラフだと横幅取り過ぎるから入らないんだよな・・・」
「もう少しコンパクトにならない?」
そんな声が聞こえてくるかもしれません。
なのでこのグラフをいかに良さを失わずにコンパクトにできるかを考えてみます。
まず、店舗のディメンションヘッダーの幅は取り過ぎですね。これはもう少し縮めましょう。
次に、ラベルの配置を内側に持ってきましょう。
まずは左側のグラフからやっていきます。
水平方向の配置を「左」に設定します。
それで、このままだと数字が見辛いので、グラフの色を薄くします。
色々な設定方法があるかと思いますが、今回は色自体は黒にして不透明度を10%にしてみます。
右側も同じようにやっていきます。
水平方向の配置を「左」に設定し、不透明度は40%にしてみましょう。
中々いい感じですが、右側のグラフはラベルテキストをもう少し濃くした方が見やすそうです。
カラーパネルで適当に今より濃い色を選択してもらえればよいですが、
ピッタリ合わせたい方の為にカラーコードを記載しておきます。
赤:#6f2c2e
緑:#254220
いい感じではないでしょうか!
このワークシート上では勿論幅の見た目は変わってませんが、ラベルが内側に引っ込んだ事により、ダッシュボードシートで配置してシート自体の幅をどんどん狭めても、最初の外側にあるタイプよりか狭い幅に耐えうるのは想像に難くないかと思います。
しかしながら!
この記事では更にもう一歩踏み込みたいと思います。
ここで終わってしまっては普通のTableau記事と変わりありません。
他では見られないようなグラフの表現方法を提案してみたいと思います。
まずとっさに思いつくのは、下図の赤枠のスペース・・ここもったいないよなって、
ここに・・・実数のグラフをフュージョンさせたい・・させたくない!?
こう閃いたのは私だけでしょうか。
というかそれ、見やすいのか?
ハイセンス過ぎないか?笑
何て不安も無きにしも非ずですが、物は試しで実装してみる事にしましょう!
前年比+実数のフュージョングラフ
えー、まずはですね。
当年_フュージョン用という計算式を定義します。
※無難に日本語で当年_合体用でも、名前はなんでもよいですw
これは何をしているかというと、赤枠の所にはめたいという事はつまり、[前年比-1]の符号を反転させればいい訳です。従ってマイナス1を掛ける事により反転できますので、それが0以上であれば1、それ以外であればー1を当年に掛けてあげる事により、当年の数値はそのままで符号のみが行単位で反転がされると。。そういう訳ですね。
作成した「当年_フュージョン用」で当年の棒グラフを表示したいので、列シェルフにある「当年」を置き換えます。すると下記のようになるので、あとはこの状態から・・・
二重軸にするだけ!!
といいつつ、しれっとタイトルにも手を加えてますが笑
ようは色の凡例くらいは付けておかないと、どれが何を意味するグラフかわかりづらいので、最低限このくらいの説明は必要かと思います。
中々見ないタイプかと思いますが、個人的には面白いグラフじゃないかと思います!
実数と前年比の表示位置が近いので、目線移動が最小で済むのもポイント高いですね。
あるいは「前年比の方だけはっきり強調したいので、実数の棒グラフは無しで数値だけ見えればいい」という事でしたら、実数の棒グラフの不透明度を0%にしてしまえばいいですね。
その状態で枠線だけ付けるのも面白いかもしれません。
薄い灰色+枠線でやると前年比グラフとの違いが鮮明になってより見やすいかも?
こういうのって拘り出すとキリが無いんですよねw
外れ値にも耐えうるグラフを考える
少し前の項で、この赤い部分いらないんじゃないかという視点を示しましたが、実はこのスペースを生かす見せ方というのもあるんです。
それは例えばこんな感じです。
グラフスペースが十分にあるので、前年比100%以上は濃い青にして白文字が出るようにしました。[前年比-1]グラフではラベル位置を左にした場合、数字がラベルに完全に乗っかってなくても見えるように考慮された配色にする必要がありましたが、100%基準であれば100%以上は必ずこのように広いスペースがあるはずなので、色を反転させてより強調させる事ができています。色表現の幅が広がるんですね。
それにかなり狭い幅でも割と使えるグラフになるんですよ。実数を入れてみても、どうでしょう。コンパクトにまとまってるので目線移動も少なく済みます。
右側の%の方はラベルを小数点単位で間引いて表示するのもアリですね。
さて、ここで標題の外れ値について考えてみます。
試しにこんな無理やりな式を書いてみました。
ようは前年比がとんでもなく大きな数値になった時のシミュレーションをしてみようという訳です。こういうのって実データでも結局あり得ますよね。例えば前年が極端に少なくて当年が普通の数値でも飛び抜けてしまうとか。
これで表示させてみるとどうでしょう。
当然のことながら、グラフが壊れてしまいましたね。。
「これはこれで仕方のないこと」とするのは簡単ですが、もう少し工夫できないでしょうか。例えば店舗フィルターを付けてユーザーが手動で外れ値店舗を取り除く余地を作るとかはあり得ます。しかしわざわざそういう事をさせるのは使い勝手が良いとは言えないかもしれません。
これは一つの例ですが、軸の上限を決め打ちしてしまうというのは有力な策です。
例えば「軸の編集」から上限を150%に設定してみましょう。
するとどうでしょう!
グラフが生き返りました。
その上で、150%以上になった場合はもう一段階色を変えておきましょう。
ようはこれで、グラフが右端に突き刺さって上限超えている場合は色も強い色に変えて分かりやすくしようという訳です。
※実際使われる場合は配色も軸の上限値も状況に合わせて自由に設定して下さい。
表現は自由
ここまで色々なテクニックを見てきました。
正解は一つではありません。
多様な表現方法を手軽に試せるのがTableauの魅力の一つですね!
フュージョングラフはTableau Publicにも上げておきました。
ワークブックのダウンロードも出来るので、解析したい方は是非参考にしてみて下さい。
Discussion