この記事は2017年2月1日現在の情報です。
#概要
BIツール「Tableau」には標準で地図上にマッピングする機能がついているが、
初期設定では都道府県レベルまでしかポリゴンがない。
政府の公開情報やマーケティングデータは市区町村で整理されているものも数多くあり、
これを可視化するには自分でポリゴンを準備する必要がある。
#環境
OS: Windows7
Tableauのバージョン: 10.1
※朗報! Tableauのバージョン 10.2 から空間ファイルコネクタがサポートされるようになりました。
shpファイルが提供されている場合はそのまま使えます。
提供されていない場合は、下記の方法を試してみてください。
#手順
##データの準備
Tableauでは地図上のポイントをパスでつなぐことでポリゴン(閉じた領域)を表示するが、
地図上のポイントと認識するためには緯度経度情報が必要となる。
これは国土交通省政策局国土情報課のサイトからダウンロードすることができる。
国土数値情報ダウンロードサービス
GML(JPGIS2.1)シェープファイル形式でダウンロード、ZIPを展開する。
下図はZIP内容物のサンプル(福岡県の行政区データを解凍したところ)
この図で言えば、最下段の「N03-16_40_160101.xml」が緯度経度データの本体。
但し、TableauはXMLをそのまま取り込めないので、テーブル様の形式(CSV等)に加工しなければならない。
先ほどのXMLの一部を抜き出すと次のようになっている。
<!-- 図形 -->
<gml:Curve gml:id="cv0_0">
<gml:segments>
<gml:LineStringSegment>
<gml:posList>
33.86784628 131.00049789
33.86786372 131.00000000
この場合、gml
名前空間のposList
要素に緯度経度が入っていることが分かる。
構造が分かれば、ExcelVBAでもPHPでもJavascriptでも何を使ってもいいので表の形に展開すればよい。
なお、行政区データはXML内に次のような3種類のデータがある。つまり表は3つできると考えてよい。
要素 | 内容 |
---|---|
gml:Curve | ひとつの領域。ひ孫要素に緯度経度情報を持つ |
ksj:AdministrativeBoundary | 市区町村名や地方公共団体コードなどの領域属性 |
gml:Surface | 上記の2つを結びつけるためのxlink |
それぞれを整理しておけば、あとはTableauで結合できる。
##加工時の注意点
ひとつの閉じた領域を作るために、「どの点とどの点を結ぶか」という情報が必要になるが、
少なくとも行政区のXMLデータ内にはこの情報が無い。
そのため、表の形に展開するときに「ポイントをつなぐ順番」を書き加える必要がある。
ひとつのposList
要素内に複数の緯度経度情報があるので、単純に上から順番に連番を割り当てればよい。
連番はIDごとでも良いし、全IDの通し番号でも良い。
##Tableauへの接続
データの準備ができたらTableauに接続する。
Tableau Desktopを立ち上げ、接続 -> ファイルを指定。
行政区データをExcelに接続したときのデータソースの例が下図となる。
行政区の場合はCurve
要素のgml:id
属性とSurface
要素の中のgml:curveMember xlink:href
属性を結合し、
Surface
要素のgml:id
属性とAdministrativeBoundary
要素のksj:bounds xlink:href
属性を結合する。
データソースを構築したらシートに移動し、緯度を行、経度を列に入れて、マークタイプを「多角形」に変更。
ディメンションの「cityName」と「id」を詳細に入れて、加工時に割り当てた連番をパスに入れれば地図が出来る。
上図の例では、マークシェルフの「curve_serial_number」が加工時に割り振った連番となっている。
実績データ(国勢調査や自社のマーケティングデータ)を可視化するときは、
別のデータソースに新しく接続し、データブレンディングで処理をするとレコードの重複が無いのでオススメ。
#まとめ
将来的にTableauが日本の市区町村レベルポリゴンを標準搭載する可能性が高いですが、
これを応用すれば「好きな地図を作る」ことが可能になります。
地図上で表計算を行う方法、ポリゴンを粗くする(ポイントを間引きする)方法についても
別途記事を作りたいと思います。