Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

Tableauで市区町村レベルポリゴンを表示する

この記事は2017年2月1日現在の情報です。

概要

BIツール「Tableau」には標準で地図上にマッピングする機能がついているが、
初期設定では都道府県レベルまでしかポリゴンがない。

政府の公開情報やマーケティングデータは市区町村で整理されているものも数多くあり、
これを可視化するには自分でポリゴンを準備する必要がある。

環境

OS: Windows7
Tableauのバージョン: 10.1

※朗報! Tableauのバージョン 10.2 から空間ファイルコネクタがサポートされるようになりました。
 shpファイルが提供されている場合はそのまま使えます。
 提供されていない場合は、下記の方法を試してみてください。

手順

データの準備

Tableauでは地図上のポイントをパスでつなぐことでポリゴン(閉じた領域)を表示するが、
地図上のポイントと認識するためには緯度経度情報が必要となる。
これは国土交通省政策局国土情報課のサイトからダウンロードすることができる。
国土数値情報ダウンロードサービス

GML(JPGIS2.1)シェープファイル形式でダウンロード、ZIPを展開する。
下図はZIP内容物のサンプル(福岡県の行政区データを解凍したところ)

キャプチャ.PNG

この図で言えば、最下段の「N03-16_40_160101.xml」が緯度経度データの本体。
但し、TableauはXMLをそのまま取り込めないので、テーブル様の形式(CSV等)に加工しなければならない。
先ほどのXMLの一部を抜き出すと次のようになっている。

N03-16_40_160101.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に接続したときのデータソースの例が下図となる。

キャプチャ3.png

行政区の場合はCurve要素のgml:id属性とSurface要素の中のgml:curveMember xlink:href属性を結合し、
Surface要素のgml:id属性とAdministrativeBoundary要素のksj:bounds xlink:href属性を結合する。

データソースを構築したらシートに移動し、緯度を行、経度を列に入れて、マークタイプを「多角形」に変更。
ディメンションの「cityName」と「id」を詳細に入れて、加工時に割り当てた連番をパスに入れれば地図が出来る。

キャプチャ0.PNG

上図の例では、マークシェルフの「curve_serial_number」が加工時に割り振った連番となっている。

実績データ(国勢調査や自社のマーケティングデータ)を可視化するときは、
別のデータソースに新しく接続し、データブレンディングで処理をするとレコードの重複が無いのでオススメ。

まとめ

将来的にTableauが日本の市区町村レベルポリゴンを標準搭載する可能性が高いですが、
これを応用すれば「好きな地図を作る」ことが可能になります。

地図上で表計算を行う方法、ポリゴンを粗くする(ポイントを間引きする)方法についても
別途記事を作りたいと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
7
Help us understand the problem. What are the problem?