隗より始めよ

今後はいろいろ考え始めます。

PythonでヤフーのAPIを使って、住所を経緯緯度情報に変換する!

f:id:mazarimono:20181123112331j:plain

日本もデータを開放して行こうみたいな動きがあるようで、データカタログサイトなるものが存在します。データを触りたい人としてはありがたいことです。

www.data.go.jp

「PDFばっかりやん!」と思いましたが、凄腕の人にはそれでも大丈夫なのでしょうか?わかりません。
PDFにする前のデータを出してほしいところですが、そんな意見は気にされないのでしょう。

ひとまず、エクセルとかcsvでサワれるデータはないかなぁと探して、行き着いたのが京都の旅館許可施設一覧です。これはエクセルで作られているので、触りやすいのと、最近話題の民泊の現状が分かるし良いかなぁなんて思って開いてみました。

全然わかってなかった

ひとまず、どのへんにどれほど宿泊施設があるのか見るために、住所を地図にプロットしてみようと思いました。・・・・

「どうやったらええんや・・・」

地図に住所をプロットするなんてことはやったことがなかったので、やり方すらわかりませんでした。

というわけでググりました。

ググる

「地図 プロット python」でひとまずググりました。すると下のサイトがでてきました。foliumというライブラリで可視化するのが良いことと、経度緯度情報が必要なことがわかりました。

ohke.hateblo.jp

次に「python 住所 経度緯度」でググりました。するとグーグルのAPIが良いという話と、グーグルのAPIは有料だという話が出てきました。うーむ。有料は困るな。ということで、色々と記事を読んでいるとヤフーは無料だよみたいな記事があったので、ヤフーのAPIを使ってみることにしました。

ヤフーのAPIその前に

ヤフーのAPIを使うにはアプリケーションIDというのが必要で、それを取得する必要があります。

登録は以下のサイトからアプリの名前を入れたらとりあえずできます。

Yahoo!デベロッパーネットワークヘルプ - アプリケーションIDを登録する

これができたらAPIでデータを取得です。

requestsを使って簡単に経緯度情報をゲット

requestsを使ったら簡単に経緯度情報が取得できます。

import requests
import json

base_url = "https://map.yahooapis.jp/geocode/V1/geoCoder"

wantoknow = {
    'appid': 'あなたの取得したID',
    'output': 'json',
    'ei': 'UTF-8',
    'al': 4,
    'recursive': True,
    'query': '京都府京都市下京区東塩小路高倉町8'
}

keiido = requests.get(base_url, params=wantoknow)

keiido.json()

appidのところにさっき取得したIDを入力して、queryのところに知りたい住所を入力します。ちなみにこれは京都駅の住所となっています。本当の京都駅の住所は「京都府京都市下京区東塩小路高倉町8-3」なんですが、−3まで入れたら経緯度情報が返ってこないので1つ目の数値までしか入れられません。ということで、大体の場所の目安みたいな感じになってしまいます。

これを実行すると以下のようなデータが帰ってきます。

{'ResultInfo': {'Count': 1,
  'Total': 1,
  'Start': 1,
  'Status': 200,
  'Description': '',
  'Copyright': '',
  'Latency': 0.019},
 'Feature': [{'Id': '26106.413.8',
   'Gid': '',
   'Name': '京都府京都市下京区東塩小路高倉町8',
   'Geometry': {'Type': 'point',
    'Coordinates': '135.76081113,34.98479642',
    'BoundingBox': '135.75521113,34.97919642 135.76641113,34.99039642'},
   'Category': [],
   'Description': '',
   'Style': [],
   'Property': {'Uid': '12205fd80a65696f994da04f46699ecb6bd006bf',
    'CassetteId': 'b22fee69b0dcaf2c2fe2d6a27906dafc',
    'Yomi': 'キョウトフキョウトシシモギョウクヒガシシオコウジタカクラチョウ',
    'Country': {'Code': 'JP', 'Name': '日本'},
    'Address': '京都府京都市下京区東塩小路高倉町8',
    'GovernmentCode': '26106',
    'AddressMatchingLevel': '6',
    'AddressType': '地番・戸番'}}]}

GeometoryのCoordinatesのところに経緯緯度が帰ってきています。requestsを使うと、パラメーターのところをurllibを使わずぱっと入力するだけで良いのも素敵です。

これから

経緯と緯度が出たらあとはプロットするだけ・・・という感じですが、そこのツールをどうするかというのも悩みどころ。今の所、最近気に入っているDash、Plotlyでできたらなぁなんて思っています。

連休中の自由課題として頑張りたい。最近はフロントの方にかなり興味が向いていて、そのへんの勉強も頑張りたい。頑張りたいことにあふれているけどw加油把!

中国に勝つ 日本の大戦略 プーチン流現実主義が日本を救う

中国に勝つ 日本の大戦略 プーチン流現実主義が日本を救う