20
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

目的

CSVファイルで持っている住所一覧データに対して、それぞれの緯度・経度を取得したい。
image.png

背景

Tableauでのマップ形式の可視化には、緯度・経度が必要だが、
使いたいデータソースには「住所」情報のみしかなかった。
データ量は10万件以下程度。

使ったもの

試せてないけど他候補

-Google Maps Platform Geocoding API(有料)
https://developers.google.com/maps/documentation/geocoding?hl=ja

-シンプル ジオコーディング 実験(無料)
https://geocode.csis.u-tokyo.ac.jp/home/simple-geocoding/

手順

Yahoo!ジオコーダAPIの利用準備 アプリケーションの登録

こちらの手順に沿って登録。※Yahoo!JAPAN IDが必要。
https://developer.yahoo.co.jp/start/

ガイドライン
https://developer.yahoo.co.jp/guideline/

Client IDを取得できれば準備OK。

Excel上でカラム追加していき緯度・経度を取得

Yahoo!ジオコーダAPIのサイトより、作りたいURLは下記

https://map.yahooapis.jp/geocode/V1/geoCoder?appid=<取得したClient ID>&query=<UTF-8でエンコード化された住所>

元データ住所に対して、下記の流れで取得。
image.png

①ENCODE
 住所をUTF-8形式にエンコードする(URLに埋め込むために必要)

=ENCODEURL([@住所])

②URL
 URL生成

="https://map.yahooapis.jp/geocode/V1/geoCoder?appid="<取得したClient ID>&"&query="&[@ENCODE]

③XML
 リクエスト実行してXML形式のレスポンスを取得

=WEBSERVICE([@URL])

④緯度経度抽出
 XMLから緯度・経度情報のみ抽出

=INDEX(FILTERXML([@XML],"//Coordinates"),1)

レスポンスフィールドのドキュメントより、Coordinatesが座標情報なので、
その要素のみをFILTERXML関数で取得。
FILTERXML関数 参考:https://www.helpaso.net/archives/2359/

今回の住所は~丁目までで番地情報がないので、
そのままだとレスポンスが「スピル形式」というもので1セルに複数入ってくる。
Ex. 東京都中央区日本橋本町4丁目、4丁目8、4丁目4・・・
image.png

これだと困るので先頭のもののみ取得するためにINDEX関数で1つめを取得。
※FILTERXML関数で要素指定できそうなものではと思ったもののうまくいかず断念。方法あるかも?

⑤経度、緯度
 抽出したカラムから、カンマで分割して取得(区切り位置で切ってしまった)

サンプルで調べたところ④で返ってくる並びは
[経度,緯度]

まとめ

スピル形式に初めて出会ったところで若干面食らった。
Excelの関数、ほんとに色々ある。

:sheep:

20
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?