2022年12月04日
Tableau Publicでは毎日世界中で公開される多くのVizの中から優れたものについてViz of the Day (VOTD)としてピックアップしている。毎日公開されるVizの数は年々増加しているため、VOTDを獲得することは年々困難になっているが、密かに獲得を目標としているTableauユーザ、DATA Saberもいることだろう。
先日筆者の作成したVizが久々(VOTD Overviewによれば38ヶ月ぶり7回目)にVOTDに選出された。Tableau Tips * Tabjo Advent Calendar 2022に参加するにあたって、なんか良いネタはないかなと探していたところだったので、このVizを作るにあたって利用したTipsを紹介することにしたい。本当はVOTDの獲り方とか解説できれば良いのだが、残念ながらそれを記述するには力不足なので、興味がある人はVOTD - How to get Viz of the Dayをチェックすると良いだろう。
Tableau Public@tableaupublic
Check out this #MakeoverMonday #VizOfTheDay to see @LunarModule7 visualize, with a stacked area chart, who people s… https://t.co/65gPnRAsHw
2022/11/18 06:40:06
先日筆者の作成したVizが久々(VOTD Overviewによれば38ヶ月ぶり7回目)にVOTDに選出された。Tableau Tips * Tabjo Advent Calendar 2022に参加するにあたって、なんか良いネタはないかなと探していたところだったので、このVizを作るにあたって利用したTipsを紹介することにしたい。本当はVOTDの獲り方とか解説できれば良いのだが、残念ながらそれを記述するには力不足なので、興味がある人はVOTD - How to get Viz of the Dayをチェックすると良いだろう。
年齢別、アメリカ人が一緒に過ごす相手
こちらが今回のVizだ。#MakeoverMonday で公開されたデータであり、非常に興味深い結果となっている。アメリカ人が、独り、パートナー、家族、子供、友人、同僚と過ごす1日あたりの平均時間を折れ線グラフで折れ線グラフで示している。若い頃は子供達や同僚と過ごす時間が長いが、歳を取るに従いパートナーと過ごすか、独りで過ごす時間が長くなり、最期は独りで過ごす時間が支配的になっていく。日本人に対するデータがあれば良いのだが、おそらく同じような結果になるのだろう。幸福な例外を除いて多くの人は独りで人生の最期を迎えることになる──
インタラクティブ性も付与しており、グラフ上でマウスを動かすことで、青い点線で示す年齢における時間の配分の状況を左上の矩形内に棒グラフで示す。自分の年齢はどのような構成になっているのかを確認する場合には有用だろう。
利用しているのは折れ線グラフと棒グラフであり、特に目を引くような凝った可視化をしているわけではなく、ベーシックなVizとなっている。基本に忠実なわかりやすいVizを作ることで難しいことをしなくてもVOTDを獲得できる可能性があるということは良いことだ。
右上のダウンロードからワークブックファイルをダウンロードできるので、Tableau Desktopで開いて解析してもらいたい。以下の解説と組み合わせて参照すれば、そんなに難しくはないはずだ。
注:確認せずに本稿を記述したので一部のフィールド名がワークブックと本稿とで異なってしまっている。適宜読み替えていただきたい。
グラフタイプの選択
元データを見ると、年齢ごとの独り、パートナー、家族、子供、友人、同僚と過ごす1日あたりの平均時間が与えられている。しかしそれを積み上げても24時間(=1440分)にはならず計上外の時間があることがわかる。1日が24時間なのは変わらないのにエリアグラフの高さが変わるのは誤解を与えるし、美しくないので積み上げグラフはあまり良い選択ではなさそうだ。
簡易表計算の「全体に対する割合(下へ)」を使って割合にしてしまえばきれいに揃うが、計上外の時間を無視してこの割合を出すことが正しいか疑問だ。また、各年齢でどの割合が多いかということを直観的に把握することが困難になる。もう少し項目数(色数)が少なければ、エリアグラフでも問題ないが、項目数が多いときにはエリアグラフだと比較がしにくい事が多い。たとえば40歳が一番多く過ごす人は誰か答えられるだろうか?
結局シンプルに折れ線グラフを選択することにした。こうすることで各年齢においてどの項目が一番大きいのかを簡単に把握することができる(40歳は独りの時間が一番長い)。一方で、エリアグラフと異なり面が塗られていないので、パッと見たときに支配的なものを視覚的に訴える力が弱くなっている。
こういうときは折れ線グラフとエリアグラフを組み合わせることで、両方の利点を生かしたVizにすることが可能だ。
TIPS1: 折れ線グラフとエリアグラフを組み合わせる
折れ線グラフとエリアグラフを組み合わせるのは二重軸を利用する。その際に軸の同期を行うことで、2つのグラフがピッタリと重なることになる。
- 列シェルフに2つ目の[Minutes]を配置し、ピルのコンテストメニューから二重軸とする。
- 右側の軸のコンテキストメニューから「軸の同期」を選択し、「ヘッダの表示」のチェックを外して、左の軸だけにする。
- マークカードの上側の「合計(Minutes)」のマークタイプを「自動」から「エリア」に変える。
- エリアグラフは積み上げになっているので、「分析」>「スタックマーク」>「オフ」にして積み上げないようにする。
「スタックマーク」はTableauの酷い翻訳の一つで何を示しているか極めてわかりにくいが、「積み上げ」を制御する項目だ。オンにすると積み上げグラフになり、オフにすると解除される。自動はグラフの種類により自動的に決定される。エリアグラフはデフォルトオン、折れ線グラフはデフォルトオフなので上述のような挙動になる。
TIPS2: 色凡例の代わりに、折れ線グラフの横にラベルを表示する
色凡例が6つあり色との組み合わせを理解するのが若干難しくなっている。こういう場合はラベルを付与するほうが望ましい。単純に折れ線グラフにラベルを付与すると読みにくくなるので、ラベルが入るようX軸を少し伸ばし、ラベルを配置する。
- マークカードの下側の「合計(Minutes)」のラベルに[With]を配置し、ラベルを表示する。
- ラベルアイコンをクリックし、フォントの「マークカラーの一致」をクリック、配置の「右」と「中」を選択、ラベルがその他のマークをオーバーラップするのを許可にチェックを入れる。
- X軸のコンテキストメニューから「軸の編集」を選び、X軸の範囲を「固定」とし終了値を適当な値に大きくする。
あとはエリアグラフの不透明度を20%ぐらいにすればメインのグラフはほぼ最終形だ。
Viz in Tooltipによって特定の年齢の棒グラフを表示する
このままでも良いのだが、ある年齢を切り取ったときの割合の棒グラフをViz in tooltipで表示してみる。
- Viz in tooltipに表示する用のシート(ツールヒント)を作成する。行に[With]、列に[合計(Minutes)]、色に[With]、ラベルに[合計(Minutes)]を配置し、軸を削除。シートの自動調整を「ビュー全体としておく」
- 元のシートに戻り、マークカードの「ツールヒント」をクリックし、「挿入」>「シート」から上で作成した「ツールヒント」を挿入する。
- 年齢でフィルタさせるためにfilter="<Year>"に変更する。
Viz in Tooltipsはデフォルトでポイントしているマークの全てのフィールドでフィルタされるが、filter項目を任意のフィールドに変更することで当該フィールドのみでフィルタするように変更できる。複数フィールドを指定するときはカンマで区切って記載すれば良い。
マウス位置の年齢にリファレンスラインを引く
これでツールヒントが表示されるわけだが、年齢が変わっていることがわかりにくいのでマウスの位置にリファレンスラインを引いて、今どの年齢が表示されているのかをユーザに視覚的に見えるようにしたほうが良いだろう。
マウス位置の年齢に追随するリファレンスラインを引くには、マウス位置を表すパラメータ[Age]を作成し、その位置にリファレンスラインを引く。さらにパラメータアクションを用いて、マウス操作に追随してパラメータ[Age]の位置を動的に更新するように構成する。これにより、マウスを動かすとリファレンスラインが同位置に移動するようになる。
- パラメータ[Age]を作る。整数値。範囲は15-85。
- X軸にリファレンスラインを設定し、値を[Age]とする。
- このままではパラメータの値が変わらないので、ダッシュボードにパラメータアクションを追加する。アクションの実行対象は「カーソルを合わせる」、ターゲットパラメータは[Age]、ソースフィールドは[Year]、選択項目をクリアした結果は「現在の値を保持」とする。
これでマウスに追随してリファレンスラインが移動し、ツールヒントにViz in Tooltipで棒グラフが表示される。
TIPS3: 重いViz in Tooltipを止めてツールヒント用シートを固定位置に配置する
触ってみるとわかるが、Desktopで実行していてもパラメータアクションでリファレンスラインを移動させつつ、Viz in Tooltipを表示させるというのは重い処理だと言うことがわかる。Tableau Publicにパブリッシュしてブラウザで動作させると更に重くなることが予想される。
これでは閲覧体験を大きく損ねるので、Viz in Tooltipを止め代替手段を考える。Viz in Tooltipが重いのは、ツールヒントの表示位置が動的に決まるため描画に時間がかかることが大きい。そのため、ダッシュボード上に位置固定でViz in Tooltip用に作成したツールヒントシートを配置することで、描画時間を短縮できる。
Viz in Tooltip用に作成した「ツールヒント」シートをダッシュボード上の適当な位置に配置する。ツールヒントシートは年齢でフィルタされねばならないが、これをフィルタアクションを使って実装するとまた重くなってしまうので、単純なフィルタで実装することが必要だ。このあたりで説明に息切れしてきたので、ワークブックを参照していただきたい。
実際そのように作成した「ツールヒント」シートは下で示すようにストレス無く快適に動作する(Public上では流石にこの速度では動かないが、Viz in Tooltipよりは軽い)。
微調整
あとはタイトルや作者名、データソースなどを追加し、色やフォントを調整していく。グリッドラインなど余分な線は極力減らしてシンプルにするとともに、パディングを調整して周囲に十分な余白を入れる。なお、85歳以上のX軸は不要なので、白く塗りつぶした空白オブジェクトを重ねて隠している。
TLを振り返ってみると2022年11月7日16:42に出題があり、2022年11月7日19:31に筆者が最初の回答者として本Vizを投稿しているので、最大でも3時間以内の作業時間で本Vizを作成している。実際はデータを入手してから完成するまで1時間半程度であったと記憶しており、長時間かけて作ったVizではない。基本的なVizを作れるスキルがあるならば、技巧に凝らなくても長時間かけなくてもVOTDに選ばれるVizを作成することはできる。継続的にVizを投稿することが何よりも大切だ。
本稿が良いVizが生まれるヒントになれば嬉しい。
P.S. 本稿はTableau Tips * Tabjo Advent Calendar 2022の12/5分として作成したものだが、もっと簡単な内容にすればよかったと書き始めてから後悔することになった。
lunarmodule7 at 00:00│Comments(0)││Tableau