Alteryx * Tableau でボロノイ図

こんにちは。truestar 藤です。

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

Wikipedia: ボロノイ図

簡単に言うと、領土を分配する際に、単純に直線距離が近いほうの領土とするイメージです。二拠点だと垂直二等分線で分かりやすいですが、複数拠点だと上のような図になります。
簡易な商圏分析などでは非常に有効です。

ボロノイ図を描くためのポリゴンデータは Alteryx で作れます。拠点のポイントデータとポリゴンデータを Tableau 上で結合して地図を重ねれば完了です。

Alteryx と Tableau の組み合わせでボロノイを作るのは、2016年に下のブログを見てトライしたことがあります。



しかし、当時は Tableau でポリゴンと点を重ねることが難しく(技術的にはできたが、事実上機能しない)、日の目を見ずにお蔵入りさせた過去があります。

2016年当時からは Tableau も格段に進化したので、改めて実装してみようと思います。

今回は(いつもですが)国土数値情報のデータを使います。

国土数値情報

神奈川県の医療機関データと二次医療圏データを用いて、ボロノイ図を作ってみます。

実際に作った Alteryx のワークフローはこんな感じです。

短いですね。

細かな説明に入る前に、久々に SHP(シェープ)ファイルを取り扱ってみて、今回躓いた点がいくつかあるので先に共有します。

  • SHP(シェープ)ファイルについて
    1. アウトプット時に複数のジオデータ(ポリゴンとかポイントとか)は持てない
    2. カラム名に日本語は使えない
    3. カラム名は10文字以下
    4. 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 を開かなくてもカラムの情報が得られるので便利です。

Field Info のアウトプット


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



では、さらにAlteryx Workflow を細かく見てみます。

まずは二種類のデータと下ごしらえ。

医療機関のポイントデータ
医療圏のポリゴンデータ

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

Summarizeでポリゴンをグループ化
二次医療圏「湘南東部」として一つのポリゴンに

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

Spatial Match でマッチング

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

Trade Area で Eriminate Overlap を選ぶと、ボロノイの切り方になる・・・超簡単

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

3つのジオデータ

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

Spatial Process で切り分け、重なった部分を取得

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

ボロノイポリゴン

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

RecordID をテキストデータとして付与

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

SHPのカラム名は英数字10文字までなので微調整

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

施設のポイントデータのほう
施設のボロノイポリゴンのほう

Alteryx 側はこれで完了。

次は Tableau です。
まずはファイル読み込み。

空間ファイルを指定

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

RecordID で結合

続いて画面を作ります。

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

最終形

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

ボロノイ
RecordID を忘れずに
RecordID を入れないとこうなります。
ポイント

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

おまけのアクション

ダッシュボードにして公開!

https://public.tableau.com/views/-20190130/sheet0?:embed=y&:display_count=yes&publish=yes