長時間の調査不要!ChatGPT×Google Maps APIで物件周辺情報を即座に入手

Google Maps APIとChatGPTの組み合わせを活用することで、物件の周辺情報を手早く入手することができます。物件を検討する際には、周辺環境や利便性が重要な要素となりますが、これまでは詳細な情報を収集するために時間を費やす必要がありました。この記事では、ChatGPTとGoogle Maps APIを組み合わせることで、物件の周辺情報を瞬時に取得する方法を紹介します。
目次
はじめに
店、ホテルなどの周辺の競合相手を調べたくなる時はありませんか?
物件の周辺情報を取得することは、競合店の分析やビジネス戦略の立案において重要です。しかし、手動では情報収集やデータ処理には多くの手間と時間がかかりますよね。そこで、Google Maps APIを利用することで、簡単かつ効率的に物件の周辺情報を取得する方法をご紹介します。
この方法を知れば、ChatGPTを使って短時間で実装することができ、物件の周辺にあるコンビニ数やスーパーの数、最寄駅までの徒歩時間などの情報を手に入れることができます。
しかし、利用にはいくつかのデメリットがあります。まずは、以下のデメリットについてご説明します。
デメリット
1.APIの制限と実行速度の制約: Google Maps APIは利用制限があり、実行速度が遅くなる場合があります。特に大量のデータを処理する場合には注意が必要です。
2.検索結果の制限: Google Maps APIでは、一度の検索で取得できる情報は最大で20件までです。これを超える場合は、追加の処理が必要になります。
3.有料: 一部のGoogle Maps API機能は有料で提供されています。詳細な情報や高度な機能を利用する場合には、料金が発生することがあります。
これらのデメリットにも注意しながら、Google Maps APIを使いながら簡単に物件の周辺情報を取得していきましょう。
Google Maps API キーを取得
まず、Google Maps APIを使用するためにはAPIキーの取得が必要です。しかし、心配しないでください。APIキーの取得は簡単で、以下の参考記事に従って手順を進めれば大丈夫です。
【参考記事】【Pythonで学ぶ】Google Maps APIを利用する手順 | チュートリアル – AIconsult
ChatGPTを使いながら、短い時間でAPIキーを発行できるので、手順を確認してスムーズに進めましょう。
物件の最寄り駅と最寄り駅までの徒歩時間を算出
それでは、物件の最寄り駅と最寄り駅までの徒歩時間を算出する方法を見ていきましょう。
まず、Airbnbの東京物件データ(listings_detail.csv)を用意します。このデータには物件の名前や
緯度経度などが含まれています。
Airbnbの公式の東京物件情報データはこちらから↓
Inside Airbnb: Get the Data
そして、ChatGPTを活用して、物件の緯度経度を取得し、Google Maps Distance Matrix APIを使用して最寄り駅までの徒歩時間を算出する関数を作成します。この関数を使えば、物件ごとに徒歩時間を取得できます。
短時間で実装できるChatGPTの力を借りながら、物件の周辺情報を手にします。
Airbnbの東京物件データ(listings_detail.csv)
ここからはChatGPTに作成してもらいましょう。
APIキーはすでにあることを示し、ざっくりとお願いしています。
返ってきたコードがこちらになります。
import googlemaps
def get_nearest_station(hotel_lat, hotel_lng):
gmaps = googlemaps.Client(key='YOUR_API_KEY')
# ホテルの緯度経度を指定
hotel_location = (hotel_lat, hotel_lng)
# 最寄りの駅を検索
stations = gmaps.places_nearby(location=hotel_location, radius=1000, type='train_station')
if len(stations['results']) > 0:
# 最寄り駅の緯度経度を取得
nearest_station_location = stations['results'][0]['geometry']['location']
nearest_station_lat = nearest_station_location['lat']
nearest_station_lng = nearest_station_location['lng']
# 最寄り駅からホテルまでの距離と所要時間を取得
distance_matrix = gmaps.distance_matrix(origins=(nearest_station_lat, nearest_station_lng),
destinations=hotel_location,
mode='walking',
units='metric')
if distance_matrix['status'] == 'OK':
# 所要時間を取得(単位は分)
duration = distance_matrix['rows'][0]['elements'][0]['duration']['text']
return duration
else:
return None
else:
return None
# ホテルの緯度経度を指定
hotel_latitude = 35.123456 # ホテルの緯度
hotel_longitude = 139.789012 # ホテルの経度
# 最寄り駅との所要時間を取得
duration = get_nearest_station(hotel_latitude, hotel_longitude)
if duration:
print(f"ホテルから最寄り駅までの所要時間は {duration} 分です。")
else:
print("最寄りの駅が見つかりませんでした。")

この通りにAPIキーと緯度経度だけ変え試しに実行してみると徒歩で10分かかると出ました。
しかし、注意点としてこのコードの中身を見てみると本当にホテルから一番近い最寄り駅なのか疑問です。
なのでChatGPTに修正してもらいましょう。
筆者「# 最寄り駅の緯度経度を取得
nearest_station_location = stations[‘results’][0][‘geometry’][‘location’]
これは返された結果の最初の駅ってこと?
」
ChatGPT「はい、その理解で正しいです。提供されたコードは、Google Maps Places APIからの検索結果(stations)の中で最初の駅(インデックス0)の緯度経度情報を取得しています。つまり、stations[‘results’][0]は最初の駅を指し、[‘geometry’][‘location’]はその駅の緯度経度情報を示しています。
Google Maps Places APIの応答には、検索クエリに基づいて取得された複数の駅情報が含まれる場合があります。上記のコードでは、最初の駅の情報を取得しているため、その駅の緯度経度を nearest_station_location に格納しています。
もしも複数の駅情報が返される可能性がある場合や、特定の駅を取得したい場合は、適宜コードを調整してください。」
私「これはでもホテルから一番近い駅であるとは限らないよね?」
ChatGPT「申し訳ありません、先ほどのコードは必ずしもホテルから一番近い駅を取得するものではありません。提供されたコードは、Google Maps Places APIからの検索結果の最初の駅の緯度経度を取得するものです。
Google Maps Places APIでは、検索結果は一定の基準に基づいてソートされ、最も関連性の高い順に表示されます。しかし、最初の駅が必ずしもホテルから最も近い駅であるとは限りません。APIの応答は、検索クエリやその他の要素に基づいてランキングされるため、結果は場所や条件によって異なることがあります。(以下略)」
やはりこれではだめそうですね。こういうことがあるのであっているのか自分で精査することが必要です。修正版をChatGPTに出せばすぐに修正してくれます。
今回はお試しなのでさくっと次に進みます。
物件周辺のスーパーとコンビニの数を取得する関数もChatGPTに作らせる
同様にChatGPTに作ってもらうように命令しました。
返ってきたコードがこちらになります。
import googlemaps
def count_convenience_stores(latitude, longitude, radius):
gmaps = googlemaps.Client(key='YOUR_API_KEY')
# 指定された緯度経度を位置情報オブジェクトに変換
location = (latitude, longitude)
# コンビニを検索
places = gmaps.places_nearby(location=location, radius=radius, type='convenience_store')
# コンビニの数を取得
count = len(places['results'])
return count
# 指定された緯度経度
latitude = 35.123456 # 緯度
longitude = 139.789012 # 経度
# 半径500m以内のコンビニ数を算出
radius_500m = 500 # 半径500m
count_500m = count_convenience_stores(latitude, longitude, radius_500m)
# 半径1km以内のコンビニ数を算出
radius_1km = 1000 # 半径1km
count_1km = count_convenience_stores(latitude, longitude, radius_1km)
# 半径2km以内のコンビニ数を算出
radius_2km = 2000 # 半径2km
count_2km = count_convenience_stores(latitude, longitude, radius_2km)
print(f"半径500m以内のコンビニ数: {count_500m} 件")
print(f"半径1km以内のコンビニ数: {count_1km} 件")
print(f"半径2km以内のコンビニ数: {count_2km} 件")
これはこのままで問題なさそうです。
自動でAirbnbの物件データの周辺情報を格納したデータを作成する
私「Colabでlistings_detail.csvのlistings_detail_dataシートをデータフレームdfとして読み込みたい。
id,listing_url,name,latitude,longitude,number_of_reviews,
review_scores_location,review_scores_value列をdfから抜き出してdf_v2データを作成。
そして、nameにはホテル名が記載されていてlatitude、longitude列にそれぞれ緯度、経度の数字が格納されている。ホテルごとにさっきの関数を用いてlatitude、longitude列の数値から、半径50m以内、半径100m以内、半径500m以内、半径1km以内、半径2km以内のスーパーマーケットとコンビニの数、さらに、最寄り駅の名前と最寄り駅までの徒歩所要時間を新たに取得し列に加えたい。
さきほどのべた関数のプログラムコードは省略して良い」
そして最終的に完成したコードはこちらになります。
import pandas as pd
import googlemaps
# listings_detail.csvの読み込み
df = pd.read_csv('/content/listings_detail.csv',encoding='cp932')
# 必要な列を抽出して新しいデータフレームdf_v2を作成
df_v2 = df[['id', 'listing_url', 'name', 'latitude', 'longitude', 'number_of_reviews',
'review_scores_location', 'review_scores_value']]
# 最初の1000個のデータのみを抽出
df_v2_100 = df_v2.head(1000)
# Google Maps APIのクライアントを作成
gmaps = googlemaps.Client(key='APIキー')
def count_places(latitude, longitude, radius, place_type):
# 位置情報オブジェクトに変換
location = (latitude, longitude)
# 指定された半径内の指定された種類の場所を検索
places = gmaps.places_nearby(location=location, radius=radius, type=place_type)
# 場所の数を取得
count = len(places['results'])
return count
def get_nearest_station(latitude, longitude):
# 最寄りの駅を検索
stations = gmaps.places_nearby(location=(latitude, longitude), radius=1000, type='train_station')
if len(stations['results']) > 0:
# 最寄り駅の緯度経度と名前を取得
nearest_station_location = stations['results'][0]['geometry']['location']
nearest_station_lat = nearest_station_location['lat']
nearest_station_lng = nearest_station_location['lng']
nearest_station_name = stations['results'][0]['name']
# 最寄り駅からホテルまでの距離と所要時間を取得
distance_matrix = gmaps.distance_matrix(origins=(nearest_station_lat, nearest_station_lng),
destinations=(latitude, longitude),
mode='walking',
units='metric')
if distance_matrix['status'] == 'OK':
# 所要時間を取得(単位は分)
duration = distance_matrix['rows'][0]['elements'][0]['duration']['text']
return nearest_station_name, duration
else:
return None, None
else:
return None, None
# 新たな列を追加するためのリスト
radius_list = [50, 100, 500, 1000, 2000]
supermarket_counts = []
convenience_store_counts = []
nearest_station_names = []
walking_times = []
# ホテルごとに情報を取得
for index, row in df_v2_100.iterrows():
latitude = row['latitude']
longitude = row['longitude']
# 半径ごとにスーパーマーケットとコンビニの数を算出
supermarket_count_list = []
convenience_store_count_list = []
for radius in radius_list:
supermarket_count = count_places(latitude, longitude, radius, 'supermarket')
convenience_store_count = count_places(latitude, longitude, radius, 'convenience_store')
supermarket_count_list.append(supermarket_count)
convenience_store_count_list.append(convenience_store_count)
# 最寄り駅と所要時間を取得
nearest_station, walking_time = get_nearest_station(latitude, longitude)
# リストに追加
supermarket_counts.append(supermarket_count_list)
convenience_store_counts.append(convenience_store_count_list)
nearest_station_names.append(nearest_station)
walking_times.append(walking_time)
# 新たな列を追加
df_v2_100['supermarket_count_50m'] = [counts[0] for counts in supermarket_counts]
df_v2_100['supermarket_count_100m'] = [counts[1] for counts in supermarket_counts]
df_v2_100['supermarket_count_500m'] = [counts[2] for counts in supermarket_counts]
df_v2_100['supermarket_count_1km'] = [counts[3] for counts in supermarket_counts]
df_v2_100['supermarket_count_2km'] = [counts[4] for counts in supermarket_counts]
df_v2_100['convenience_store_count_50m'] = [counts[0] for counts in convenience_store_counts]
df_v2_100['convenience_store_count_100m'] = [counts[1] for counts in convenience_store_counts]
df_v2_100['convenience_store_count_500m'] = [counts[2] for counts in convenience_store_counts]
df_v2_100['convenience_store_count_1km'] = [counts[3] for counts in convenience_store_counts]
df_v2_100['convenience_store_count_2km'] = [counts[4] for counts in convenience_store_counts]
df_v2_100['nearest_station'] = nearest_station_names
df_v2_100['walking_time'] = walking_times
# 結果を表示
print(df_v2_100)
そして、最終的に周辺のコンビニ数、スーパーの数、徒歩時間も格納されたデータを作成できました。

まとめ
なんと数十分でコードの実装自体は終了しました。
これはありがたいですね!
ChatGPTによるまとめです。
「この記事では、ChatGPTを活用しながらGoogle Maps APIを使用して物件の周辺情報を簡単に取得する方法について紹介しました。
記事では、物件ごとに周辺情報を取得し、データフレームに結果を追加する手順も紹介しました。具体的には、物件の緯度経度を取得し、Google Places APIを使用して周辺のコンビニ数やスーパーマーケット数を取得しました。
ただし、この方法にはいくつかのデメリットもあります。APIの制限により実行速度が遅くなる場合や、一度に取得できる情報の上限があること、さらに使用には一定の費用がかかることなどが挙げられます。
以上がGoogle Maps APIを使用して物件の周辺情報を取得する方法の概要です。これにより競合店分析など、売り上げを上げるための有益な情報を取得することができます。」
ぜひ、実際に試してみてください。