※2019年03月06日追記
修正版マクロを公開しています。詳しくはこちらの記事をご参照下さい。
こんにちは。truestar 藤です。
truestar は
Alteryx User Group in Tokyo Advent Calendar 2018
に参戦中ですが、残すところ二日になりました。
アドベントカレンダー
Alteryx User Group in 東京 Advent Calendar 2018 – Qiita
今回は
API を用いたジオコーディング
についてご紹介します。
実は2016年も同じネタで記事を書いています。
API経由で住所データをジオコーディングしてみる #Alteryx #08 | Alteryx Advent Calendar 2016
当時、Yahoo さんの API を使用していましたが、
2018年12月24日現在、この方法を使って同じように Tableau で可視化してしまうと
利用規約違反
です。つまり、コンプラ問題発生します・・・
Yahoo さんの場合、API 経由で取得したデータの保存と二次利用が明確に禁止されています。
https://map.yahoo.co.jp/promo/yolp/faq.html#14
ちなみに Google さんの API もダメです。
Google Maps API は今年5月に Google Maps Platform と名称が変わり、
Google Map への利用以外でも使えるようになったようなのですが、
少なくとも 2018年12月24日時点では、Google Map 以外の地図でのデータ利用は禁止されています。
つまり、Tableau や Alteryx で利用可能な Open Street Map や Mapbox でのデータ利用は NG です。
※あくまで2018年12月24日時点の情報です。今後変更になる可能性は大いにありますので予めご了承下さい。
ということで、
汎用的なジオコーディングは手軽にはムリ
と、ここ最近はすっかり諦めていました。
しかし・・・
Tableau などでも二次利用可能な地図データを提供する API があったのです。その名は
MapFan API
って、MapFan はスマホのアプリとして普通にメジャーブランドですね。
サービス提供するインクリメントP 社もカーナビの世界では国内トップです。
結局、単に私が API の存在を知らなかっただけで・・・。
2018年8月に、Tableau社の連携に関する以下のような記事を目にして
https://tech.nikkeibp.co.jp/it/atclact/activer/nkpr/RSP487381_08082018/
インクリメントP 社の公式サイトを見て、初めて MapFan API の存在を知りました。
直接サポートに問い合わせるところから始まり、利用規約を念入りに確認させていただきながら
少なくとも以下の機能で取得した地図データについて、
- 緯度経度⇒住所データ
- 住所⇒緯度経度データ
- ドライブタイム及びドライブ距離
データの蓄積と Open Street Map を含むサードパーティーの地図への二次利用も問題ない、
というお墨付きをいただき、今回あらためてご紹介することにしました。
API への接続については、今回のアドベントカレンダーでも
AlteryxでSpotify APIの認可を試してみた
Alteryxユースケース「RESAS API を使って 宿泊動向を さくっとビジュアライズしてみました」
で取り扱われているように、Download ツールで簡単に接続してデータ取得できます。
ただ、提供元の API の仕様を理解して使う必要が当然ありますので難易度は少し高いですね。
また、いつも同じ API の機能を使うのであれば、 Download ツールとか Json Parse ツールとかで
毎回同じようなフローを組むのは手間ですね。
そんな時は
マクロ
です。
マクロの作成についても、今回のアドベントカレンダーにて
データ準備でよく使うツールと簡単なマクロのつくり方
Loop_Loop_Loop
で紹介されています。
こちらも初級者にはやや難しいものの、各記事にあるようにノンプログラムで作成可能な非常に便利な機能です。
ということで、弊社の こえび に作ってもらいました。
奇しくも今日はクリスマスイブ。
Alteryx ファンの皆様に、1日早いクリスマスプレゼントです。
じゃーん!
Alteyrx Gallery – MapFan Geocoder
※20190306追記
古いマクロは削除しました。新しいマクロはこちら。詳しくはこちらのブログ記事を。
以下の情報は古いバージョンのものなります。予めご了承ください。
さすが truestar が誇る Alteryx 職人。
時間の無い中、無理な注文にも関わらず、うまいことロゴまで作ってくれました。
無償配布!
しかも
ホワイトボックス!
あとは、MapFan API に登録して、ID を取得すればいきなり自由に使えます。
API サービスの登録は下のアドレスに空メールを送付すると
インクリメントP 社から登録用の情報が届くそうです。(折り返しはインクリメントP 社営業時間中のみ)
datasalesATincrementp.co.jp ※ATは@に変更の上ご利用ください。
公式ページ上にも登録フォームがあるのですが、インクリメントP 社さんによると
メール経由での登録のほうが手続き上対応が早く、またメールを介すため、
技術的なサポートも可能な範囲で受けつけられる、とのことです。
(登録フォームからの場合、無料プランはサポート無し)
MapFan API は、無償プランとして、月間 5,000PV 使えます。
つまり、一か月で最大 5,000 件の住所に緯度経度取得ができます。
有償プランもあるようなので、大量なジオコーディングが必要な場合にはそちらで。
詳細情報は以下で。
https://business.mapfan.com/service/api/
※全て2018年12月24日時点での情報です。
※このマクロは、Alteryx Designer Ver 2018.2 以上で可能ですが、
Ver 2018.4 は、2018.4.4 までマクロ内部の [Download] ツールのバグによりエラーが出るため、
2018.4.5 以上でご利用ください。
では実際に使ってみましょう。
まず、以下のサイトからマクロをダウンロードしておきます。
yxzp ファイルはダブルクリックすると Alteryx で解凍でき、任意のフォルダに yxmc ファイルを格納しておきます。
続いてローデータを拾ってきます。
今回は
国土数値情報 市区町村役場データ
の神奈川県のデータを使ってみましょう。
簡単なアンケートに答えるだけですぐにダウンロードできます。
2014年の情報なので少し古いですが、新しくてキレイに整備されたデータよりは現実的なのであえて使います。
また、このデータはシェープ形式でポイント情報も最初からもっていますが、とりあえず施設住所を使います。
簡単に説明します。
[Input] では、国土数値情報から取得したデータを指定します。
いきなり文字化けしていますので、文字コードの変更が必要そうです。
最初に [Detour] ツールの分岐を入れています。
アドベントカレンダー3日目の投稿でも取り上げたようにサンプルデータが多い場合もそうですが、
データの取得によって従量課金されるようなケースにおいても、本番運用以外では、
データの流量を極力控えたいものだと思います。その際には非常に有用です。
[Detour] のチェックのみで、フローを切り替えられます。
[Detour End] は設定がなく、分岐処理を合流するだけです。
次に文字コードを解消します。
[Multi-Field Formula] でテキストデータの文字コードを一括で変更可能です。
文字化けは解消しました。
[Select] で必要なカラムへの絞り込みと名称変更を行います。
ここで [MapFan Geocoder] の投入です。
事前に取得した MapFan ID を入力し、今回は『住所から緯度経度へ』を選択します。
マクロ後の出力結果を [Browse] で除くとこんな感じです。
MapFan API から緯度経度の情報と MapFan の地図データベース上の住所が取得されています。
今回はスマホでテザリングという環境化にて 150 件の住所データにジオコーディングしましたが、
わずか 18 秒で完了。
楽勝でジオコーディングができました。
続いて、別のフローで今回の出力結果を細かく検証してみますが、かなり細かい話なので
良く分からなければすっ飛ばしていいと思います。若干マニア向けなので・・・。
MapFan API から取得した緯度経度を空間データである Point 情報に変換し、
国土数値情報の元データに含まれる Point 情報との二点間距離を測定し、ズレを見てみます。
各ツールの設定は、フロー上の注釈の通りなので割愛します。
結果どうなったかというと・・・
150 拠点中 12 拠点で、200 メートル以上のズレが発生。
測地系に関しては、国土数値情報も MapFan API も世界測地系のため
基本的に測地系の違いによる大きな誤差は発生しないはず。
ジオコーディングは、町丁目レベルの領域とのマッチングになるため、
その領域の代表点の取り方によってズレは生じる可能性があります。
とは言え、数百メートルレベルのズレは許容しがたいですね。
ズレの大きい 12 拠点を詳しく見てみると、上位 10 レコードは相模原市です。
相模原市は政令指定都市なので区が存在しますが、元データの住所に区が含まれていません。
つまり、元データの住所データが厳密には存在しない住所となるので、元データの誤りです。
一方、相模大野は相模原市南区のようですが、API から緑区の情報が取得されています。
そもそも元データに誤りがあるとは言え、なんとも微妙ですね・・・。
ちなみに、相模市役所の住所には中央区が含まれており、誤差もほとんどありません。
とりあえず相模原誤差問題は一部住所データの不整備が原因ということで。
縁もゆかりもない相模原市に少し詳しくなってしまいました。
残りは 2 拠点。
まず、横浜市泉区。これもローデータの問題です。
横浜市泉区和泉町4636-2 は少なくとも現在存在しないようです。
グーグル先生で調べてもマップが表示されません。
最後は、箱根町箱根1。これは MapFan API で誤った値が取得されている模様。
グーグル先生で調べてみると、国土数値情報が正しいと思われます。
ちなみに MapFan API で取得した緯度経度をグーグルマップで表示すると
住所が少し異なりますね。
このあたりは相模大野の話と一緒に、サポートに連絡して確認してみようかと思います。
いずれにせよ、今回は全 150 件のうち、元データ側の不完全な住所情報を除くと、
懸念が残る取得データはわずか 1 件のみ。
これらの結果を踏まえると、町丁目粒度でのジオコーディングであれば大きな問題なく使えそうで、
Alteryx での空間分析や Tableau などの BI でのマッピングが、格段に身近なものになると思います。
という訳でマクロを使って簡単にジオコーディングができるようになりました。
コンプライアンスの問題もなく、思う存分 Alteryx や Tableau などの BI で
マップを使った分析や可視化ができるようになりますね。
Alteryx には空間データ分析系のツールも多数ラインナップされています。
以下のような記事を参考に、空間データ分析という新しい世界に飛び込んでみてはいかがでしょうか?
最終日のクリスマスは、日本で唯一のAlteryx Aceであるじょんすみす先生が
DevelopersIOに降臨します。お楽しみに。
注意)
このマクロはあくまでMapFan APIのサービスに簡易につなぐためのものです。
MapFan APIのサービス内容・仕様・利用規約については、インクリメントP社さんにお問い合わせ下さい。
マクロそのものの機能に関するご質問やご要望は、サイト右上のメールアイコンからいつでもお気軽にどうぞ。
truestar 藤