Deep Visualization NightのVizレビュー② ~我如古氏~

この記事からの続きです

アメリカでは世代によってお金の使い方はどう違う? (分離積み上げ棒グラフ)

言わずと知れたPublicの巨匠 我如古さんの発表ですが、グラフの発明という令和のナイチンゲールのようなことをされました。

①課題設定

・「アメリカでは世代によってお金の使い方はどう違う?」は元々Make Over Mondayのネタのようですが、ジェネレーションギャップを知っておくことはコミュニケーションやビジネス戦略の上でも極めて重要
・100%積み上げ棒グラフの課題として、凡例が増えてくると中央に積み上げた凡例の比較がしづらいという、教科書にも載っているような課題に切り込んでいる

②ストーリーテリング

・発表を拝見していないがTwitterを見ていると、最初の「Polygonal Spiral」で会場が沸いたとのこと。さすが最初の惹きつけがすごい
・"分離積み上げ棒グラフ"の作成過程を丁寧に書かれており、自分でもできそうと思わせる構成 
・最終形Vizでは、①世代の呼び名定義→②世代毎 消費の分野別の割合(100%積み上げ棒グラフ)→③分離積み上げ棒グラフ→④考察 という、流れるような構成

③Vizテクニック

分離積み上げ棒グラフについて
・「途中経過1」では凡例となっていたディメンジョンを軸に入れるだけ。ここで書式設定でゼロラインを消せば、実はこれだけでも業務的には使えると思う (汎用性があるのでここでとどめておくのが良いかも)
・「途中経過1」の課題として、ディメンジョンの幅が固定になるので、積み上げ棒グラフっぽく見えない。そのため「途中経過2」でガントチャート形式にした上で下端そろえを行っている。この下端そろえの計算フィールドがすごい。Jedi Boot CampでやったPrevious_Value()を使いこなしている。。。

IF First()=0 THEN 0
ELSE Previous_Value(0) + lookup([下端そろえ用各Category長さ],-1) END

・「Step3」では、要素間隔をパラメータで調整するために、「途中経過2」の計算フィールドを修正。ここでちょっとついていけなくなった。。

IF ATTR([Category ID])=1 THEN 0 ELSEIF ATTR([Category ID])= ATTR({FIXED :MAX([Category ID])})
THEN [3 各Category中間点]+ATTR({FIXED [Category]: MAX([% of Spending])/2 } )-ATTR([% of Spending]) ELSE [3 各Category中間点]-ATTR([% of Spending])/2
END

汎用性・可読性を考えると、実務的には「途中経過1」でとどめておくのが良いと思った。ただ料理と同じで、最後のひと手間が味を決めるので、細部に拘るのがやはりプロ。

(2019/7/22追記)
我如古氏より、簡易方法があるとの返信あり。https://twitter.com/ritz_Tableau/status/1152354520711565313
確かにこの方法の方が、記載は冗長だがやっていることはわかるので比較的実用的。
それにしても、一つ一つの棒グラフの位置をガントチャートで、長さをマークのサイズで表現するアイデア、、、やはりナイチンゲール。

凡例の表示・非表示について
・「Step1」で×ボタンを押すと凡例が消える操作がある。2019.2の新機能。https://blog.truestar.co.jp/tableau/20190523/36310/

Polygonal Spiralについて
・数学Ⅲ・Cで習った極座標を使っているのだと思う。そのときの半径Rの計算フィールド(下記)の解釈で力尽きた。。。
IIF (FIRST()=0,100, SIN(( pi() - 2*PI()/[corners])/2) * PREVIOUS_VALUE(0) /SIN( PI() - [angle]/180*PI() - ( pi() - 2*PI()/[corners])/2 ))

(2019/7/22追記)
同じく我如古氏より、極座標ではなく正弦定理を使っているとの返信あり。
https://twitter.com/ritz_Tableau/status/1152405770257850368
なるほど、次の半径を正弦定理で求めているのか!

それにしても本当に美しいスペクタクル。。。