Tableauではデータを人が読みやすく、示唆を得やすい形にすることができます。特に地理的な分析を行う際、マップはよく利用されています。
例えばアメリカの州ごとに人口を比較したい場合には下記のようなマップは使いやすいです。
ただ、細かい粒度で地理的な分析を行いたい場合、デフォルトの表現では物足りなくなります。例えば、郵便番号を使って人口を比較したい場合には顕著です。郵便番号をそのままプロットしてみると粒度が細かいためドットがたくさん重なり、分析がしづらくなってしまいました(下図)。
このような場合はHexbinマップの利用をおすすめします。Hexbinマップは隣接するデータを適度にまとめ、地図上のデータを見やすくする方法です。
TableauのHexbin機能とは?
Hexbinマップを紹介する前に、まずTableauのHexbin機能を軽く簡単に説明します。
Tableauの計算式の説明を見れば、Hexbin機能にはHEXBINX, HEXBINYという二つの関数があります。
関数の説明には、“(x,y)座標を最も近い六角ビンのx座標(y座標)にマッピングします。”と記載されています。
つまり、(x, y)座標を持っているドットを六角形ごとにまとめる機能です。
例えば下記のように同じ六角ビンに所属している(x1,y1), (x2,y2), (x3,y3)三つのドットであれば、HEXBINX(), HEXBINY()で計算する場合、どれも同じ計算結果になり、青いドットにまとめられます。
Hexbinマップとは?
Hexbinマップは隣接するデータを適度にまとめ、地図上のデータを見やすくする方法です。
経度緯度は地理的な役割を持っています。ここで経度=x座標, 緯度=y座標とすると、同じく六角形ごとにまとめることが可能です。
簡単なHexbinマップの作り方
Hexbin機能を利用すれば、簡単にHexbinマップを作成できます。
手順は以下のとおりです。
- 経度緯度を利用して、各地理ポイントを六角形グループごとにまとめる
- カスタム形状を導入する
ステップ1 経度緯度を利用して、各地理ポイントを六角形グループごとにまとめる
まず下記二つの計算式を作成して、各地理ポイント(例えば郵便番号)の経度緯度を利用して、所属する六角形の経度、緯度を特定します。また、それぞれ地理的役割を割り振ります。
計算➀ HEXBIN(X)
計算式:HEXBINX([経度], [緯度])
地理的役割:経度
計算② HEXBIN(Y)
計算式:HEXBINY([経度], [緯度])
地理的役割:緯度
ステップ2 カスタム形状を導入する
計算式➀を列に、計算式②を行に入れて、マークを形状に変更します。その後、形状を六角形に指定します。
※カスタム形状の導入方法は「ビュー内のマークの表示を制限する – Tableau」を参照ください
最後に、エリアごとに分析した指標を色に入れれば、簡単なHexbinマップは完成です。
簡単なHexbinマップには制限がある
ただ、簡単なHexbinマップでは手動調整しかできないという問題点があります。
先ほどのHexbin機能の計算式説明で最後に下記の記述がありました。
“ビンの辺の長さは1なので、入力は必要に応じて拡大、縮小する必要があります。”
これは以下のような動作をすることを意味します。
- 六角形の大きさは表示スペースによって手動調整が必要
- ズームイン/ズームアウトすると隣接する六角形は重なってしまう/離れすぎてしまう
柔軟なHexbinマップを作るには?
より柔軟にエリア分析できるためには、簡単なHexbinマップに加えて下記2点の変更が必要です。
- 六角形のサイズ(密度)を調整可能にする
- ズームしても六角形はちょうどフィットする
ステップ1 六角形のサイズ(密度)を調整可能にする
まず、六角形のサイズ(密度)を調整可能にするため、「サイズ」というパラメーターを作成し、計算①と計算②を用いて計算③と計算④を作ります。
計算③ HEXBIN(X)_plus
計算式:HEXBINX([経度]/[サイズ], [緯度]/[サイズ]) / [サイズ]
地理的役割:経度
計算④ HEXBIN(Y)_plus
計算式:HEXBINY([経度]/[サイズ], [緯度]/[サイズ]) / [サイズ]
地理的役割:緯度
次に、カスタム形状を導入するためには、形状で六角形を描くのではなく、各六角ビンの座標を利用して、自分で頂点、辺を描く必要があります。
ステップ2 各六角ビンに六つの頂点を作成
繰り返しになりますが、Hexbin機能を利用すれば、各ドットを(最も近い)六角ビンごとにまとめられます。ただ、六角ビンに存在するドットの数にかかわらず、1つのビン(六角形)に対して、六つの頂点は必要です。
それを実現するには、LOD計算とTableauのビン機能を利用して、無理やり六角ビン内のドットを六つのグループに分けます。
例えば、1つの六角ビンに下記3つのドット(郵便番号)があります。
郵便番号 | x座標 | y座標 |
---|---|---|
1000001 | x1 | y1 |
1000002 | x2 | y2 |
1000003 | x3 | y3 |
まず、郵便番号を使って、LOD計算で最小値とその他という二つのグループに分けます。
計算⑤ ToPad
計算式:
IF [郵便番号] = { fixed [HEXBIN(X)/plus],[HEXBIN(Y)/plus]: MIN([郵便番号])}
THEN 1
ELSE 6
END
次はToPadからビンを作成し、ビンのサイズは1と指定します。すると、最小値(1)とその他(6)以外にも、2,3,4,5という四つの空グループが無理やり作成されました。
計算⑥ ToPad(ビン)
ビンのサイズ:1
ステップ3 各六角形頂点の座標を計算する
次に、六角ビンの座標(青いドット)を原点として、各頂点の座標を計算します。
例えば先ほどの頂点1の座標は下記形で計算できます。
頂点1(緑)と青いドットで直角三角形を描くと、SIN/COS関数を使って、直角をはさむ2つの辺の長さを計算できます。青いドットのx, y座標にそれぞれ足したら、緑の頂点1の座標になります。
同様に、頂点2~6もそれぞれの角度を利用して計算できます。まとめて下記三つの計算式を利用します。
計算⑦ 角度
計算式:PI()/3*INDEX()
計算⑧ HEXBIN(X)_頂点
計算式:WINDOW_AVG( AVG([HEXBIN(X)_plus]) ) + (1/[サイズ]) * COS([角度])
地理的役割:経度
計算⑨ HEXBIN(Y)_頂点
計算式:WINDOW_AVG( AVG([HEXBIN(Y)_plus]) ) + (1/[サイズ]) * SIN([角度])
地理的役割:緯度
ステップ4 グラフを作成する
最後に、下記の手順でグラフを作成します。
- 計算⑧を列、計算⑨を行に入れて、表計算を計算⑥レベルに指定
→ 各六角形レベルでそれぞれ六つの頂点を描く - マークを多角形にする
- 計算③、計算④を詳細に入れる
→ 各六角形レベルの起点を決める - 計算⑥をパスに入れる
→ 各頂点を繋いで辺を描く
まとめ
この記事ではTableauのデータを用いたHexbinマップの作り方を解説しました。これにより、より細かなエリア分析が可能になります。少しでも参考になれば幸いです。