
こんにちは。truestar 藤です。
今回は簡単なボロノイ図を作って可視化してみます。
最終形を先に出してしまうと下のようなポリゴン作成と可視化がゴールです。

簡単に言うと、領土を分配する際に、単純に直線距離が近いほうの領土とするイメージです。二拠点だと垂直二等分線で分かりやすいですが、複数拠点だと上のような図になります。
簡易な商圏分析などでは非常に有効です。
ボロノイ図を描くためのポリゴンデータは Alteryx で作れます。拠点のポイントデータとポリゴンデータを Tableau 上で結合して地図を重ねれば完了です。
Alteryx と Tableau の組み合わせでボロノイを作るのは、2016年に下のブログを見てトライしたことがあります。
しかし、当時は Tableau でポリゴンと点を重ねることが難しく(技術的にはできたが、事実上機能しない)、日の目を見ずにお蔵入りさせた過去があります。
2016年当時からは Tableau も格段に進化したので、改めて実装してみようと思います。
今回は(いつもですが)国土数値情報のデータを使います。
神奈川県の医療機関データと二次医療圏データを用いて、ボロノイ図を作ってみます。
実際に作った Alteryx のワークフローはこんな感じです。

短いですね。
細かな説明に入る前に、久々に SHP(シェープ)ファイルを取り扱ってみて、今回躓いた点がいくつかあるので先に共有します。
- SHP(シェープ)ファイルについて
- アウトプット時に複数のジオデータ(ポリゴンとかポイントとか)は持てない
- カラム名に日本語は使えない
- カラム名は10文字以下
- Tableau 上では複数のジオデータを持てる(ジョインするだけ)
以下の2つのサイトなどを参考にさせてもらいました。
https://pro.arcgis.com/ja/pro-app/tool-reference/appendices/geoprocessing-considerations-for-shapefile-output.htm
https://www.thedataschool.co.uk/mina-ozgen/alteryx-solutions-2-outputting-mixture-spatial-objects-points-lines-polygons/
では、細かく見て行きます。
まず上述した SHP ファイルの課題をどう克服したか。
1. アウトプット時に複数のジオデータ(ポリゴンとかポイントとか)は持てない
これは下図のようにアウトプットを分けて、Tableauで結合する方式をとります。

2. カラム名に日本語は使えない
3. カラム名は10文字以下
カラム名はアルファベットで短くしますが、そのままだとカラムの中身がわかりづらいのでDescription に日本語で情報を持ちます。

アウトプットした SHP ファイルは Description 情報を持たないため、[Field Info] ツールでメタ情報を取得し、エクセルでアウトプットしておくと、Alteryx Workflow を開かなくてもカラムの情報が得られるので便利です。


4. Tableau 上では複数のジオデータを持てる(ジョインするだけ)
Alteryx で出力した二つの SHP ファイルを Tableau 側で 結合します。以下のような形です。

では、さらにAlteryx Workflow を細かく見てみます。
まずは二種類のデータと下ごしらえ。


次はポリゴンのグルーピング


次に Spatial Match を用いて医療圏に含まれる施設に絞り込みます。

各施設の円商圏を作成し、重なりをボロノイの定義で分割します。

アウトプットは下のような感じ。

次は、医療圏から外れる領域をカットします。

こんな感じで切れました。

この後は、Tableau で可視化するための処理です。
SHP ファイルとして、ポリゴンとポイントのファイルを分けるため、Join 用のマッチングキーを作ります。

最後に出力されるカラム構成はこんな感じ。

あとは SHP としてアウトプット。


Alteryx 側はこれで完了。
次は Tableau です。
まずはファイル読み込み。

二つの SHP を読み込み、Join します。

続いて画面を作ります。
最初にあらためて最終形です。
今の Tableau だと二重軸にすることで、ジオデータを重ねられますね。

二重軸となっている、両方の層の設定は以下です。




最後におまけのアクション設定

ダッシュボードにして公開!
https://public.tableau.com/views/-20190130/sheet0?:embed=y&:display_count=yes&publish=yes