【Python】郵便番号から地理情報(住所、緯度・経度、最寄り駅)を取得する方法
郵便番号から都道府県、緯度・経度などの地理情報を取得する方法を調べてみました。
調べた範囲では、緯度・経度の情報が欲しい場合の取得方法としては『HeartRails Geo API』が適しています。そこで、本記事では『HeartRails Geo API』の使用方法を記載します。 また、郵便番号が同じでも都道府県・市区町村・町域が異なる場合があるので、ご注意を下さい。
地理情報の取得方法
地理情報の取得方法比較
地理情報の取得方法を比較すると、次のようにまとめられます。
『zip cloud』は、郵便番号データを検索する機能をRESTで提供しているものです。 そのため、『郵便番号DB』と『zip cloud』のデータは実質同じものです。
もともと郵便番号から地図上にその場所をプロットしたかったため、緯度・経度を取得できる『HeartRails Geo API』を採用しました。 次の章でその詳細を記載します。
項目 | HeartRails Geo API | 郵便番号DB | zip cloud |
---|---|---|---|
都道府県コード | X | O | O |
都道府県名(読み含む) | △(読みなし) | O | O |
市区町村名(読み含む) | O | O | O |
町域名(読み含む) | O | O | O |
緯度・経度 | O | X | X |
最寄駅情報 | O | X | X |
参考URL:郵便番号DB・zip cloud の説明
www.post.japanpost.jp zipcloud.ibsnet.co.jp
参考URL:郵便番号DB・zip cloud の利用方法
https://miga-dev.hatenablog.com/entry/python_apimiga-dev.hatenablog.com news.mynavi.jp
HeartRails Geo API
HeartRails Geo APIとは?
『HeartRails Geo API』のサイトで次のように説明されています。 使用方法もとてもシンプルで便利なので、ぜひ活用してみて下さい。
「HeartRails Geo API」 は、郵便番号/住所/緯度経度データ等の地理情報を、XML、JSON(P) 形式の API により無料でご提供させていただくサービスです。この API をご利用になることにより、お客様側ではサーバーサイドの処理を実装することなく、サンプルのようなアプリケーションを簡単に開発することができます。 (ジオコーディング、逆ジオコーディングにも対応しております。)
HeartRails Geo APIの使用方法
調べたい郵便番号の地理情報と最寄駅情報を取得する方法を記載します。
まず、地理情報の取得方法です。
import requests, json postal = '1000001' #調べたい郵便番号 url = 'http://geoapi.heartrails.com/api/json?method=searchByPostal&postal=' res_dict = requests.get(url+postal).json()['response']['location'][0] #地理情報 print(res_dict['prefecture']) #東京都 print(res_dict['city']) #千代田区 print(res_dict['town']) #千代田 print(res_dict['x'],res_dict['y']) #139.753336 35.684473
次に、最寄駅情報の取得方法です。 郵便番号から最寄駅情報を取得できるのは、斬新で面白いですよね。 ただ、残念ながら現状最寄駅情報を使う機会がないので、何かしら活用してみたいです笑
import requests, json postal = '1000001' #調べたい郵便番号 url = 'http://geoapi.heartrails.com/api/json?method=getStations&postal=' res_dict = requests.get(url+postal).json()['response']['station'][0] #最寄駅情報 print(res_dict['name']) #竹橋 print(res_dict['prefecture']) #東京都 print(res_dict['line']) #東京メトロ東西線 print(res_dict['prev'],res_dict['next']) #九段下 大手町 print(res_dict['x'],res_dict['y']) #139.756817 35.690662
郵便番号の使用上の注意
郵便番号と都道府県名・市区町村名・町域名が一対一対応しているわけでは無いようです。 つまり、同じ郵便番号であっても都道府県名・市区町村名・町域名が異なる場合があります。 そのため、事前に重複がある郵便番号を調べてから、『HeartRails Geo API』を利用するのが良いと思います。
2020年2月28日更新データの重複郵便番号の調査
上記の『郵便番号DB』を基に地理情報が重複する郵便番号を調べてみました。 2020年2月28日更新データを調査したため、時期によって異なる場合があるのでご注意下さい。
# | 同じ郵便番号に対して | 件数 |
---|---|---|
1 | 都道府県が異なる | 3 |
2 | #1+市区町村が異なる | 136 |
3 | #2+町域が異なる | 1,533 |
4 | 重複なし | 1187,46 |
5 | 合計 | 120,279 |
郵便番号が同じなのに都道府県が異なるデータ
上表の#1の郵便番号が同じなのに都道府県が異なるデータを記載します。 件数自体は少ないですが、郵便番号と都道府県が一致していないのは意外でした。
郵便番号 | 都道府県 |
---|---|
4980000 | 愛知県 |
4980000 | 三重県 |
6180000 | 京都府 |
6180000 | 大阪府 |
8710000 | 福岡県 |
8710000 | 大分県 |
まとめ
郵便番号から地理情報を取得する方法としては、緯度経度も調べられる『HeartRails Geo API』が適しています。 また、郵便番号が同じでも都道府県・市区町村・町域が異なる場合がありますので、ご注意下さい。