見出し画像

初心者がPythonを使ってAPI経由で郵便番号から住所情報を取得してみた

皆さん、こんにちは。高速検索の会社、フォルシア株式会社でデータクレンジングを担当しています。秋山と申します。

今回はPythonを使ってAPI経由で都道府県の市区町村一覧情報を取得してみました。

今回このような記事を書く背景としては、私はビジネスサイドの人間で、PythonをProgateで勉強してみたので、実践の場として活用してみたくなったことと、API、APIとはよく聞くが実際どのようなものなのかを実際に取得してみることによって、より理解が深まるのではと感じ、記事にしてみることにしました。

以前、オープンデータの記事も書かせていただきましたので、ぜひこちらもご関心ございましたら、ご一読いただけますと幸いです。

Pythonを自分のPCで使えるようにする

それでは、早速Pythonを使える環境を整えてみたいと思います。Pythonを使えるようにするにはインストールする方法もありますが、今回は手間なので、Googleのcolaboratoryを使ってWebブラウザ上でPythonを使える環境を整えました。特段インストールは不要で、そのままGoogleDriveの環境で使えるので、学習するだけの環境ならば、こちらで十分すぎるほどでした。

Webブラウザ上でPythonを使える環境としては、他にもJupyter Notebookがあるようですが、今回はcolaboratoryを使って試していきます。

実際にPythonを触ってみる

今回は、以下のAPIを使ってみます。利用規約より商用利用も常識の範囲内では可能とのことですので、今回利用させていただきました。

郵便番号APIドキュメント:http://zipcloud.ibsnet.co.jp/doc/api

こちらのドキュメントを参考に、まず結論のコードから記述していきます。様々なサイトや学習サイトを参考に作ってみました。

import requests
import pandas as pd

def zipinfo(zipcode):
    url = "https://zip-cloud.appspot.com/api/search?zipcode=" + str(zipcode)
    x = requests.get(url)
    x = x.json()
    x = x['results']
    y = pd.DataFrame(x)
    print(y)

zipinfo(1400001)

こちらのリクエストのレスポンスですが、以下となります。

 address1 address2 address3   kana1   kana2    kana3 prefcode  zipcode
0      東京都      品川区      北品川  トウキョウト  シナガワク  キタシナガワ       13  1400001

それでは、個々ブロックごとに分解して見ていきたいと思います。

import requests
import pandas as pd

まずは、requestsとpandasのライブラリを呼び出します。

def zipinfo(zipcode):
    url = "https://zip-cloud.appspot.com/api/search?zipcode=" + str(zipcode)
    x = requests.get(url)

次に、zipinfoという関数を定義します。requestsのライブラリーのgetメソッドを活用し、URL情報を取得します。

 x = x.json()

次に、json形式に展開する関数を記述します。ここまでの情報をレスポンスすると以下となります。

{'message': None, 'results': [{'address1': '東京都', 'address2': '品川区', 'address3': '', 'kana1': 'トウキョウト', 'kana2': 'シナガワク', 'kana3': '', 'prefcode': '13', 'zipcode': '1400000'}], 'status': 200}

辞書型のデータとしてレスポンスされました。ここでキー'results'のバリューのみ抽出したいので、以下を記述します。

    x = x['results']

すると、以下のようなリスト型としてデータが展開されました。次にこのデータを展開してみたいと思います。padasのDataFrameという関数で展開できるので、展開してみます。※DataFrameに関してはこちらに詳細は記述がございます。

[{'address1': '東京都', 'address2': '品川区', 'address3': '北品川', 'kana1': 'トウキョウト', 'kana2': 'シナガワク', 'kana3': 'キタシナガワ', 'prefcode': '13', 'zipcode': '1400001'}]

データを展開すると以下のようなレスポンスとなりました。

 address1 address2 address3   kana1   kana2    kana3 prefcode  zipcode
0      東京都      品川区      北品川  トウキョウト  シナガワク  キタシナガワ       13  1400001

ここでzipinfoの関数ができました。この関数に他の数字を入れてレスポンスを試してみたいと思います。

zipinfo(1000001)

レスポンス結果は以下となります。

  address1 address2 address3   kana1  kana2 kana3 prefcode  zipcode
0      東京都     千代田区      千代田  トウキョウト  チヨダク  チヨダ       13  1000001

このようにAPIを介して郵便番号より様々な住所情報を取得することができました。

さいごに

まだまだ勉強途中なので、このような簡単な記述しかできないですが、今後も時間があるときを見つけて、Pythonを使ってみたいと思います。

最終的な目標としては、スクレイピングなどを自身で構築できるようになっていきたいと思っています。

また、弊社プロダクトのMassteryはデータクレンジングをノーコードで簡単に実装できるツールとなります。もし製品にもご関心ございましたら、お気軽にお問い合わせいただければと思います。

ご一読いただきありがとうございました!

私達がご提供している製品「Masstery(マスタリー)」は、 多くの人手が必要だったデータ整備を自動化する画期的なデータクレンジングツールです。フォーマットの統一、カテゴリーの自動分類、独自の変換、差分情報の取得等、データ整備に必要なあらゆる機能をご提供しています。
Masstery 公式サイト:https://mstr.forcia.com/(データクレンジング) 
フォルシア株式会社 企業サイト:https://www.forcia.com/ (高速検索)

この記事が参加している募集

やってみた

週末プロジェクト

この記事が気に入ったらサポートをしてみませんか?