私の場合…WOW2024 Week49
今回は、選択した国を基準に上下左右にハイライトの帯が表示されるというとても実用的なお題でした。
一見、複雑な動きに見えるのですが、原理は知ってしまえば簡単で使っているテクニックも難しくないものです。
EXTRAとして提示されているインフォメーションシートの表示/非表示も、知っていると便利な機能なので、Viz表現のテクニックの引き出しを増やすのに絶好のお題だと思います。
▼今回のお題
https://workout-wednesday.com/2024w49tab/
私の場合、セットを使いましたが、パラメーターを使っても同じことができるので、ぜひ他の方のVizも参考にしてみてください。
以下、私の場合の手順です。
1.全体を眺める
・Life Expectancy × Co2 Pcap Cons の散布図
・選んだ国を中心に十字に帯が表示→リファレンスバンド?
・選んだ国は四角、帯の上とそれ以外で色が違う
・右の棒グラフは、帯の上とそれ以外で集計
・下の棒グラフは、選択した国とそれ以外で集計
2.データを読み込む
今回のお題は、2つのデータをつなげる必要があります。
データのつなげ方には「結合」「データブレンド」「リレーションシップ」といくつか方法があります。
どの方法を使うか、というのが今回のお題のポイントのひとつでした。
今回は、テーマが「セット」ということもあり「結合」でつなげています。
最初、「データブレンド」でやっていたのですが、これだと「セット」では解決できず「パラメーター」を使わないといけない部分がありました。
実現できることは同じなので「データブレンド」でも問題ないのですが。
お題に忠実に、ということで「セット」だけで解くために「結合」を使います。
結合のやり方にもいろいろあると思うのですが、今回の私の場合は、最もシンプルな方法になっています。
その反面、汎用性や拡張性(別の年で同じことを見たいとか)はゼロに近いのでご留意ください。
Tableauを立ち上げ、「接続」で「テキスト ファイル」を選び「co2_pcap_cons.csv」を読み込みます。
ここで「フィールド名」が「F1、F2・・・」となっている場合は、「キャンパス」(右の上側のデータを結合したりする場所)にある[co2_pcap_cons.csv]を右クリックし「フィールド名は1行目に含まれている」にチェックをいれます。
今回、2022年のデータしか使わないので不要な年のデータを非表示にしていきます。
「データグリッド」(右の下側にある横にデータが並んでいる場所)の「1800」から「2021」をシフトを押しながらすべて選択します。
すべて選択できたら、右クリックで「非表示」を選択します。
残った「2022」のフィールド名をダブルクリックし「Co2 Pcap Cons」に変更します。
次に「キャンパス」にある[co2_pcap_cons.csv]をダブルクリックして「co2_pcap_cons.csv」のデーブル構成の画面に「lex.csv」をドロップします。
「結合」画面が表示されるので「完全外部」を選びます。
※今回2つのデータは微妙に格納されている国の個数に違いがありました。こんな場合、「内部」結合がいいのですが、今回「内部」を選ぶと最終的に平均値がお題と微妙に違ってくるので「完全外部」を選んでいます。
この時点では、まだ2つのデータの関連付けができていないので「!」が表示されています。
「lex.csv」を右クリックして「フィールド名は1行目に含まれている」を選びます。
2つのデータを紐づけていきます。
「データソース」側で「country」、「lex.csv」側でも「country (lex.csv)」を選びます。
「データグリッド」にデータが追加になります。
先ほどと同様に2022年以外を選択し、非表示にします。
「2022 (lex.csv)」のフィールド名をダブルクリックし「Life Expectancy」に変更します。
これでデータの準備が完了です。
3.必要なデータを揃える
いつもは、「行」や「列」にデータを入れてグラフ作りから始めるのですが、今回はグラフの状態だと計算式の様子が分かりづらいので、はじめにグラフを作るために必要なデータを表の状態で確認してからグラフ作成に移りたいと思います。
散布図プロット用のデータ
新しいシートを開きます。
データペインにある[country](「co2_pcap_cons.csv」の方)を「行」にドラッグ&ドロップします。
次に、データペインから[メジャーバリュー]を表の右端にある「ABC」となっている領域にドロップします。
データペインから[メジャーネーム]を「列」に入れます。
「マーク」の下にできた「メジャー バリュー」の箱の中から、[カウント(co2_…)]を削除します。
この2つが散布図の位置をプロットするためのデータです。
選択した国のデータ
選択した国はセットを使って識別します。
データペインにある[country](「co2_pcap_cons.csv」の方)を右クリックし「作成」で「セット」を選びます。
ここでは一旦「Serbia」にチェックを入れ「OK」をクリックします。
次に、「計算フィールドの作成」から新しい計算式を作り[Co2_Select Country]と名付けます。
//Co2_Select Country
IF [country セット] THEN [Co2 Pcap Cons] END
続いて新しい計算式を作り[Lex_Select Country]と名付けます。
//Lex_Select Country
IF [country セット] THEN [Life Expectancy] END
[Co2_Select Country]を「マーク」の下にある「メジャー バリュー」に追加します。
続けて、[Lex_Select Country]も同様に「メジャーバリュー」に追加します。
Serbia(セットに入っている国=選択した国)にだけ数値が入っていることを確認します。
十字の帯用のデータ
お題のVizを見ると、十字の帯は、選択した国の数値を起点に上下に同じ幅だけプラスマイナスした数値になっている感じです。
今回、このプラスマイナスの幅には指定がなかったので私の場合は以下のようにしました。
・Co2 Pcap Cons:±1
・Life Expectancy:±3.9(もしかすると±4でもいいかも、です)
帯については、リファレンスバンドに上限と下限を設定して表示させます。
<Co2の帯>
①選択した国のCo2+1・・・帯の上
③選択した国のCo2ー1・・・帯の下
の2つの計算式を作ります。
「計算フィールドの作成」から新しい計算式を作り以下のとおり名前を変更します。
[Co2_Range_MAX]
//Co2_Range_MAX
[Co2_Select Country]+1
[Co2_Range_MIN]
//Co2_Range_MIN
[Co2_Select Country]-1
[Co2_Range_MAX]と[Co2_Range_MIN]の2つを「メジャー バリュー」に追加してみます。
すると、Serbiaにしか数値が表示されません。
リファレンスバンドの上限・下限として設定するには、すべての国に同じ数値が設定される必要があります。
なので、データペインにある[Co2_Range_MAX]を右クリックし「編集」で計算式を以下のように変更します。
//Co2_Range_MAX
WINDOW_MAX(SUM([Co2_Select Country]+1))
計算式を変更すると、[Co2_Range_MAX]がエラーになって赤色になります。「メジャー バリュー」にある[合計(Co2_Range_MAX)]の上に、修正した[Co2_Range_MAX]をドロップして上書きします。
すると、エラーが解消され、同じ数字がすべての国に展開されます。
[Co2_Range_MIN]についても同様に以下のように計算式を修正し、上書きします。
//Co2_Range_MIN
WINDOW_MAX(SUM([Co2_Select Country]-1))
<Lexの帯>
こちらも同様に
①選択した国のCo2+3.9・・・帯の上
③選択した国のCo2ー3.9・・・帯の下
の2つの計算式を作ります。
「計算フィールドの作成」から新しい計算式を作り以下のとおり名前を変更します。
[Lex_Range_MAX]
//Lex_Range_MAX
WINDOW_MAX(SUM([Lex_Select Coutry]+3.9))
[Lex_Range_MIN]
//Lex_Range_MIN
WINDOW_MAX(SUM([Lex_Select Coutry]-3.9))
[Lex_Range_MAX]と[Lex_Range_MIN]を「メジャー バリュー」に入れます。
これで、散布図用のデータはそろいました。
4-1.散布図の基本形を作る
「行」にある[country]を「マーク」の「詳細」に移動させます。
「列」にある「メジャーネーム」を削除します。
「メジャー バリュー」の箱から、[合計(Co2 Pcap Cons)]を「列」に、[合計(Life Expectancy)]を「行」に移動させます。
続いて「メジャー バリュー」の箱から以下4つの計算フィールドを「マーク」の「詳細」に移動させます。
・[Co2_Range_MAX]
・[Co2_Range_MIN]
・[Lex_Range_MAX]
・[Lex_Range_MIN]
最後、「マーク」の「テキスト」として設定されている(「T」のアイコン)[メジャーバリュー]を削除します。
右下に表示されているインジケーター(2個のNULL)を右クリックし「インジケーターを非表示」にしておきます。
※データ結合の時に2つのデータで国の個数が異なると説明していた部分
この時点で各国のマークにマウスをあててみると、表示されるツールヒントの「Co2」と「Lex」の「MAX」と「MIN」が空白になっていることに気づきます。
これは、表計算の参照先が崩れたために発生しているので、修正していきます。
「マーク」にある[Co2_Range_MAX]を右クリックし、「表計算の編集」を選びます。「表計算」の画面で「特定のディメンション」を選んで「Country」にチェックを入れます。
残り、[Co2_Range_MIN][Lex_Range_MAX][Lex_Range_MIN]の3つについても同じように修正します。
もう一度、各国のマークのツールヒントを見て、どの国にも同じ数字が反映されていることを確認します。
「フィルター」に残っている「メジャーネーム」を削除します。
選択されている国に国名のラベルをつけます。
新しく計算フィールドを作成し[Country_Select]と名付けます。
//Country_Select
IF [country セット] THEN [country] END
[Country_Select]を「マーク」の「ラベル」に入れます。
※「Serbia」が表示されます。
4-2.十字の帯を作る
Co2の帯
左側メニューで「アナリティクス」のタブをクリックし「リファレンスバンド」を「ビュー」の上にドラッグすると、「リファレンスバンドの追加」画面が表示されます。
「テーブル」の「合計(Co2…)」の角丸四角が反転する場所でドロップします。(一番左の上側)
「リファレンスライン、バンド、またはボックスの編集」画面で以下画像のように設定します。
Lexの帯
同様に、「アナリティクス」の「リファレンスバンド」をビューの上にドラッグし「テーブル」の「合計(Life…)」の角丸四角が反転する場所でドロップします。(一番左の下側)
「リファレンスライン、バンド、またはボックスの編集」画面で以下画像のように設定します。
これで、十字の帯が完成です。
4-3.見た目を整える
フォント
お題のVizをみると、全体的にフォントサイズが大きいので合わせます。
上段メニューバーの「書式設定」で「ワークブック」を選びます。
「フォント」の「ワークシート」の「▼」をクリックしてフォントサイズを「11」に変更します。
軸
横軸は小数点1ケタの表示になっています。
横軸を右クリックし「書式設定」で「軸」の「スケール」「数値」で「数値(カスタム)」を選び「小数点」を「1」に変更します。
マークの形
選択した国は四角、それ以外が丸です。
データペインの[country セット]を「マーク」の「形状」に入れます。
自動でうまく形状が割り当てられると思いますが、そうでない場合は、「マーク」の「形状」をダブルクリックして割り当てを変更してください。
マークの大きさ
選択した国の四角は、十字の帯と同じ幅と高さになっています。
データペインの「country セット]を「マーク」の「大きさ」に入れます。
私の場合、四角(In)が小さく、丸(Out)が大きかったので、右側にあるサイズの凡例で下にある「Out」をドラッグして「In」の上に持ってきました。こうすることで、サイズを簡単に逆転できます。
「マーク」の「サイズ」を調整し、四角が帯の幅と同じようになるようにします。
微調整が必要な場合は、右側にあるサイズの凡例の「▼」をクリックし「サイズの編集」で個別調整します。
マークの色
選択した国はオレンジ、十字の帯の中は青色、帯の外は水色の3色です。
選択した国とそれ以外は「country セット]を使って色分けができますが、更にそれ以外を帯の中と外に分ける必要があります。
このために、先ほど作ったリファレンスバンド用のMAX、MINの計算式を組み合わせて新しい計算式を作ります。
帯の中は、① and ② で表せます。
①[Co2_Range_MAX]より小さい &[Co2_Range_MIN]より大きい
②[Lex_Range_MAX]より小さい&[Lex_Range_MIN]より大きい
①[Co2_Range_IN/OUT]
//Co2_Range_IN/OUT
SUM([Co2 Pcap Cons])<=[Co2_Range_MAX]
AND
SUM([Co2 Pcap Cons])>=[Co2_Range_MIN]
②[Lex_Range_IN/OUT]
//Lex_Range_IN/OUT
SUM([Life Expectancy])<=[Lex_Range_MAX]
AND
SUM([Life Expectancy])>=[Lex_Range_MIN]
[country セット]を「マーク」の「色」に入れます。
[Co2_Range_IN/OUT]を「マーク」の「詳細」に入れ、先頭にある詳細のアイコン(1つの丸の下に3つの丸がフォークみたいになってるヤツ)をクリックして「色」を選びます。
※いきなり「色」に入れると上書きされてしまうので、「詳細」→「色」にすることで複数の要素を同時に色設定することが可能になります。
続いて[Co2_Range_IN/OUT]を右クリックし「表計算の編集」を選択します。「ネストされた計算」で[Co2_Range_MAX]と[Co2_Range_MIN]を切り替えて、両方で「特定のディメンション」の「country」と「Country_Select」「country セットのIn/Out」のすべてにチェックを入れます。
[Lex_Range_IN/OUT]についても同様に、「マーク」の「詳細」に入れてから「色」に変更し、表計算の編集で「特定のディメンション」を変更します。
※「ネストされた計算」でMINとMAXを切り替えて両方に設定するのを忘れずに!
この状態で色の設定は、
A:選択された国か(「In/Out(country セット)])
B:Co2の帯の中か([Co2_Range_IN/OUT])
C:Lexの帯の中か([Lex_Range_IN/OUT])
となり、以下、6パターンに分けられます。
- AかつBかつC→選択された国(オレンジ)
- AではないがBかつC→十字の帯が重なるところにいる国(青)
- A・CではなくB→真ん中の四角を除いたCo2の帯(青)
- A・BではなくC→真ん中の四角を除いたLexの帯(青)
- A・B・Cのどれでもない→帯の外(水色)
- A・B・NULL→2つのデータの国数の差分の部分なので帯の外(水色)
右側の色の凡例の「▼」をクリックし「編集」を選択します。
「色の編集」画面で以下画像のように設定します。
線
ゼロのライン以外の線はないので消していきます。
上部メニューバーの「書式設定」で「枠線」を選び「行の境界線」「列の境界線」を「なし」にします。
続いて「線の書式設定」で「ゼロライン」以外のすべての線を「なし」にします。
ツールヒント
今回ツールヒントは表示しないので、消します。
「マーク」の「ツールヒント」をクリックし「ツールヒントの表示」のチェックを外します。
これで散布図は完成です。
シート名を「scatter」に変更します。
5.平均の棒グラフを作る
新しくシートを開き、左側のデータペインから[country セット]を「行」に入れます。
次に[Co2 Pcap Cons]を平均にして「列」に入れます。
続いて[Life Expectancy]を平均にして「列」に入れます。
フィールド名
「In」は選択した国名、「Out」は「Others」に変えて、マークの凡例を頭につける必要があります。
まずは、In/Outのラベル変換用の計算フィールドを作ります。
新しく計算フィールドを作成し[Label_Country for IN/OUT]と名付けます。
//Label_Country for IN/OUT
IF [country セット] THEN [country] ELSE 'Others' END
マークの凡例をフィールド名の頭につける必要があるので、このまま「マーク」の「ラベル」に[Label_Country for IN/OUT]を入れるだけでは解決できません。
四角や丸は「形状」で表示したいので、そのためのフィールドが必要です。
何もないところにフィールドを作るときに活躍するのでが「MIN( )」です。
「列」の空白部分をダブルクリックし[MIN(1)]と直接計算式を入れます。
新しくできた[集計(MIN(1))]を「列」の一番左側に移動させます。
「マーク」で「集計(MIN(1))」を選びグラフの種類を「形状」に変更します。
右側の凡例の「▼」をクリックし「形状の編集」で、「In」が四角、「Out」が丸になるように変更します。
左側のデータペインから[country セット]を「形状」に入れます。
次に[Label_Country for IN/OUT]を「ラベル」に入れます。
※この時、どちらかのラベルが表示されない場合がありますが、安心してください。画面を「ビュー全体」にするか、「マーク」の「ラベル」で「マークがその他のラベルをオーバーラップするのを許可」にチェックをいれてください。
マークの左側にラベルがくるように位置を調整します。
「マーク」で「集計(MIN(1))」の「ラベル」をクリックし、「配置」で「水平方向」を「左」(一番左側)に変更します。
「行」にある[IN/OUT country…]をクリックし「ヘッダーの表示」のチェックを外してビューから消します。
「マーク」の「平均(Co2 Pcap Cons)」の「ラベル」をクリックし「マークラベルを表示」にチェックを入れます。
「平均(Life Expectancy)」のラベルも同様に表示させます。
両方とも、ラベル表示の桁数がお題のVizと異なるので、書式を変更します。
「列」にある[平均(Co2 Pcap Cons)]をクリックして「書式設定」を選択します。「軸」と「ペイン」の両方のタブで、「数値」の「数値(カスタム)」を選び「小数点」を「1」にします。
[平均(Life Expectancy)]についても同様に小数点1ケタに変更します。
データペインから[country セット]を「マーク」の「すべて」の「色」にドロップします。
右側の凡例で色の「▼」から「色の編集」を選び、色を変更します。
「In」が下、「Others」が上なので、右側の「IN/OUT country セット」の凡例で「In」「Out」の上下を入れ替えます。
フィールド名の部分の余分な軸を消します。
「MIN(1)」の軸をダブルクリックし「軸の編集」画面を表示させます。
「軸のタイトル」を空白にします。
「メモリ」タブに移動して、「大目盛り」「小目盛り」の両方を「なし」にします。
すべての線を消します。
上のメニューバーで「書式設定」をクリックし「枠線」を選びます。
「行の境界線」「列の境界線」を「なし」にします。
続いて「線の書式設定」ですべての線を「なし」にします。
フィールド名のマークと棒グラフでツールヒントが違うので、それぞれ以下のように設定します。
<フィールド名>
<Co2棒グラフ>
最初に「マーク」の「平均(Co2 Pcap Cons)」の「ツールヒント」に[Label_Country for IN/OUT]を入れます。
「ツールヒント」をクリックし、以下のように設定します。
<Lex棒グラフ>
Co2同様に、[平均(Life Expectancy)」についても「ツールヒント」に[Label_Country for IN/OUT]を入れます。
「ツールヒント」をクリックし、以下のように設定します。
シート名を「average」に変更して、平均の棒グラフは完成です。
6.カントリー数の棒グラフ
こちらは、十字の帯の中と外の国数をカウントして棒グラフにしています。「6.見た目を整える」の「マークの色」のところで作った計算式を活用します。
帯の外は、
・Co2の帯の外=[Co2_Range_IN/OUT]が偽
・かつ
・Lexの帯の中=Lex_Range_IN/OUT]が偽
です。
これを計算式で表します。
新しく計算式を作り[Country_IN/OUT]とします。
//Country_IN/OUT
IF NOT([Co2_Range_IN/OUT]) and NOT([Lex_Range_IN/OUT])
THEN 'Out'
ELSE 'IN'
END
データペインから[country]を「カウント」として「行」に入れます。
[Country_IN/OUT]を「列」に入れます。
「マーク」の「詳細」にデータペインから[country]を入れます。
「列」にある[Country_IN/OUT]をクリックし「表計算の編集」を選択します。
「表計算の編集」画面で、「特定のディメンション」で「country」にチェックを入れます。
「ネストされた計算」を変更して、以下の4つの計算式に対して同様の設定を行います。
・[Co2_Range_MAX]
・[Co2_Range_MIN]
・[Lex_Range_MAX]
・[Lex_Range_MIN]
[Country_IN/OUT]を「マーク」の「色」に入れます。
右側の色凡例の「▼」をクリックし「色の編集」でそれぞれの色を設定します。(「IN」は青、「OUT」は水色)
グラフの上部にある「Country_IN/OUT」の文字を右クリックし「列のフィールドラベルの非表示」にチェックを入れます。
線は全部消す必要があるので、上部メニューバーの「書式設定」で「枠線」を選び「行の境界線」と「列の境界線」を「なし」にします。
続いて「線」の「書式設定」ですべての線を「なし」にします。
「マーク」の「ツールヒント」をクリックしツールヒントを以下画像のように編集します。
シート名を「#of country」とする。
7.ダッシュボードを作る
今回のレイアウトは、タイトル、その下に散布図とカントリー数の棒グラフが横並び、その下に平均の棒グラフです。
新しくダッシュボードを開き、左側メニューの「ダッシュボード」で「サイズ」を「固定サイズ」とし幅1000px、高さ800pxに設定します。
左側メニューの「オブジェクト」から「テキスト」をダッシュボードにドラッグします。
お題のVizを参考にタイトルを記入し、フォントの調整をします。
次に、「オブジェクト」から「水平コンテナ」をダッシュボードに配置し、「シート」から「scatter」と「#of country」をその中に配置します。
もう一度「オブジェクト」から「水平コンテナ」をダッシュボードに配置し、その中に「シート」の「average」を入れます。
続けて「オブジェクト」から「空白」を選び、「average」の横に配置します。
すべてのシートについてタイトルの文字を右クリックし「タイトルの非表示」にチェックを入れます。
3つのシートと空白を調整して、お題のVizのような配置にします。
マウスオーバーした国を選択する動作の設定します。
上部メニューの「ダッシュボード」をクリックし「アクション」を選択します。
「アクション」の画面で左下にある「アクションの追加」ボタンをクリックし「セット値の変更」を選びます。
「設定アクションの編集」画面で以下の通り設定します。
8.EXTRAにトライする
今回は、EXTRAとして「informationのオーバーレイシートを作る」というのがあります。
いろんな実現方法があるのですが、私の場合、ダッシュボードの「[表示/非表示]ボタンの追加」機能を使いました。
ダッシュボードに配置したコンテンツに対して、クリックするごとに表示/非表示を繰り返す設定を簡単にできる機能です。
アイコンの準備
事前に矢印と虫眼鏡の中に「+」と「ー」が表示されているフリーアイコンを入手しておきます。
私の場合、いつもこのサイトにお世話になっています。
※今回のアイコンは「矢印」「拡大」「縮小」で検索
▼ICOOON MONO
informationのシートを作る
まずは、オーバーレイするシートを作ります。
左側の「ダッシュボード」メニューの「オブジェクト」で「浮動」ボタンをクリックし、「垂直コンテナ」をダッシュボードに配置します。
垂直コンテナが選択された状態のまま「レイアウト」メニューに切り替えて、「バックグラウンド」でグレーの半透明に色を変更します。(私の場合、左から2番目の一番下、50%)
グラフ全体をカバーするように大きさを調整します。
この垂直コンテナを3段に分けて、それぞれの段に水平コンテナと垂直コンテナを駆使してお題のVizのように矢印の画像(イメージ)と説明文(テキスト)を配置します。
私の場合、左右に「空白」を配置し、矢印と説明文のところに「垂直コンテナ」を配置して、更にその中に「水平コンテナ」や「空白」を組み合わせて位置を調整しました。
ざっくりとしたレイアウトはこんな感じです。
表示/非表示の設定をする
先ほど作成したオーバーレイ用のシートの「垂直コンテナ」全体を選択し、表示されるタブの「▼」をクリックし、「[表示/非表示]ボタンの追加」を選択します。
すると、コンテナの右上(もしくは左上)に「×」マークが追加されます。
「×」マークをお題のVizを参考にダッシュボード右上の余白部分に移動させます。
「×」マークを選択し、表示されるグレーのタブの「▼」をクリックし、「ボタンを編集」を選択します。
「ボタンの編集」画面で、「ボタンの外観」で「表示アイテム」が選択されている状態で「イメージ」の「選択」ボタンをクリックし、あらかじめダウントードしておいた「ー」の方のアイコンを指定します。
続いて、「ボタンの外観」を「非表示アイテム」に切り替えて、「イメージ」の「選択」ボタンをクリックして、「+」の方のアイコンを指定します。「OK」をクリックします。
これで虫眼鏡のアイコンに変更が完了しました。
※「Alt」を押しながらクリックすると挙動を確認できます。
最後にダッシュボードの名前を「WOW2024 W49 」に変更すれば完成です。
Tableau Publicにパブリッシュしたら、WOWのトラッカーに登録するのも忘れずに!
▼WOWトラッカー
https://workout-wednesday.com/track-submission/