Google Maps API を利用して、住所情報から郵便番号を取得しよう!!【Python】
概要
エクセルなどで顧客リストなどを管理している場合に、住所はわかるけど、郵便番号がわからない!!!といったことはありませんか?
メーカーさんや小売業の方から、「簡単に取得できない?」と相談されることがあります。
ということで、顧客の住所リストから自動的に郵便番号を取得するツールを作りました。
Google Maps API を活用することで、住所から郵便番号を簡単に取得することができます。
使用技術
Python ⇨ Pandas(データ操作)
Google Maps API(住所から郵便番号の取得)
Excel 出力機能
インプットデータの用意
インプットデータは郵便番号のわからない住所のリストだけです。イメージは下記の通りです。場合によっては数百行あるかもしれません。
1.必要なライブラリのインポート
import pandas as pd
import googlemaps
データ処理には pandas ライブラリ、住所から郵便番号を取得するために googlemaps ライブラリが使用されています。
2.Google Maps API の設定
# Google Map Direction API トークンの設定
api_key = "YOUR_API_KEY"
gmaps = googlemaps.Client(key=api_key)
Google Maps API を利用して住所から郵便番号を取得するための設定が行われています。APIキー (api_key) を使って gmaps クライアントを作成しています。
3.住所データの読み込みと変換
# ファイルの読み込み
item_df = pd.read_excel('住所.xlsm')
# 住所の列をリストに変換
my_list = item_df['住所'].tolist()
# 結果を格納するDataFrameを初期化
results = pd.DataFrame()
Excel ファイル (住所.xlsm) から住所データを読み込み、リスト形式に変換しています。また、郵便番号の結果を格納するための DataFrame (results) を準備しています。
4. 住所から郵便番号を取得する処理
# 住所から郵便番号を取得
for address in my_list:
result = gmaps.geocode(address, language='ja') # geocodeメソッドを使用
if result:
# postal_codeを含む部分を取得
address_components = result[0]['address_components']
postal_code = next((comp['long_name'] for comp in address_components if 'postal_code' in comp['types']), None)
else:
postal_code = None
print(postal_code) # 確認用に郵便番号を出力
# 住所と取得した郵便番号を DataFrame に追加
results = pd.concat([results, pd.DataFrame({'住所': [address], 'postal_code': [postal_code]})], ignore_index=True)
gmaps.geocode() を使用して、各住所に対応する郵便番号を取得しています。
address_components の中から postal_code タイプのコンポーネントを検索し、郵便番号を抽出します。
住所と取得した郵便番号を新しい DataFrame (results) に追加していきます。
5. 結果のエクスポート
# 元のデータフレームと郵便番号の結果を結合
df = pd.merge(item_df, results, how='outer', on='住所')
# 必要なカラムを選択してエクスポート
df = df.loc[:, ['住所', 'postal_code']]
df.to_excel('アウトプットデータ.xlsx', index=False)
住所と郵便番号の結果を元のデータフレームと結合し、最終的な表を作成しています。
その後、必要なカラム(住所と郵便番号)を選択し、Excelファイルとして出力 (アウトプットデータ.xlsx) しています。
6. アウトプット確認
各住所に対して、しっかりと郵便番号が割り当てられてますね。
Google Maps API を利用することで、たくさん住所があった場合でも対応することができます。
是非、活用してみてください。