Google Maps APIで近くのバインミーショップを一覧してみた
ちょっとお客さんからの相談である特定の業種の一覧がほしいと言われたのでGoogle Maps APIで東京の中心から100KM圏内の「バインミー」の店舗リストとついでに評価も取得してみました。
Google Cloud ConsoleでPlaces APIとGeocoding APIをアクティブにする
1. Google Cloud Consoleにアクセス
Google Cloud Consoleにログインします。
2. 新しいプロジェクトの作成
左上の「プロジェクト選択」をクリックし、「新しいプロジェクトを作成」を選択します。
プロジェクト名を入力し、「作成」をクリック。
3. APIを有効にする
左側のメニューから「APIとサービス」 > 「ライブラリ」を選択します。
Places APIを検索し、「有効にする」をクリック。
同様に、Geocoding APIを検索し、「有効にする」をクリック。
4. APIキーの作成
左側のメニューから「APIとサービス」 > 「認証情報」を選択します。
「認証情報を作成」をクリックし、「APIキー」を選択します。
生成されたAPIキーをコピーしておきます。
5. APIキーの制限(オプション)
セキュリティを高めるために、APIキーに使用制限をかけることが推奨されます。
「APIキーを制限」をクリックし、使用するAPI(Places API、Geocoding API)だけを許可する設定にします。
東京の中心から50KM圏内のバインミーショップで検索
Google colabを開く
Google Colabを開き新しいファイルを作ります。
google driveにマウントしてCSVファイルを保存
from google.colab import drive
drive.mount('/content/drive')
1. ライブラリのインポート
import googlemaps
import pandas as pd
googlemaps: Google Maps APIを使用するためのライブラリです。このライブラリを使って、場所の情報やジオコーディング(住所を座標に変換)を行います。
pandas: データを扱うためのライブラリで、特に表形式のデータ(DataFrame)を操作するために使います。
2. APIキーの設定とGoogle Mapsクライアントの作成
API_KEY = '# あなたのAPIキー' # あなたのAPIキーをここに入力してください
gmaps = googlemaps.Client(key=API_KEY)
API_KEY: Google Cloud Consoleで取得したAPIキーをここに入力します。これにより、Google Maps APIにアクセスできるようになります。
googlemaps.Client(key=API_KEY): Google Maps APIにアクセスするためのクライアントオブジェクトを作成します。このオブジェクトを通じてAPIリクエストを行います。
3. 東京のジオコーディング
location = gmaps.geocode('Tokyo, Japan')
lat_lng = location[0]['geometry']['location']
center_lat = lat_lng['lat']
center_lng = lat_lng['lng']
gmaps.geocode('Tokyo, Japan'): "Tokyo, Japan"という地名をGoogle Maps APIでジオコーディングし、緯度と経度を取得します。
lat_lng = location[0]['geometry']['location']: 最初の結果から緯度(lat)と経度(lng)を取得します。center_latとcenter_lngにそれぞれ緯度と経度を保存します。
4. 場所を検索する関数の定義
def search_places(keyword, lat, lng, radius=50000, language='en'):
places_result = gmaps.places_nearby(
location=(lat, lng),
radius=radius, # 半径50KM(50000メートル)
keyword=keyword, # 検索キーワード「バインミー」
type='restaurant', # レストランに絞る
language=language # 英語で結果を取得
)
return places_result
search_places: 特定のキーワード(banh mi)に基づいて、指定した座標(lat、lng)の周辺を検索する関数です。
radius=50000: 半径50KM以内を検索する指定です。
keyword=keyword: 検索キーワード(例: banh mi)を使って、対象となる店舗を探します。
type='restaurant': レストランとして分類される場所に絞っています。
language='en': 英語で結果を取得します。
5. バインミーショップを検索
banhmi_results = search_places('banh mi', center_lat, center_lng)
この部分で、先ほど定義したsearch_places関数を使って、「バインミー」を提供するレストランを東京の中心から半径50KM以内で検索します。
6. 検索結果を解析してDataFrameに変換する関数の定義
def parse_results(results):
places = []
for place in results['results']:
name = place['name'] # 店名
address = place.get('vicinity', 'N/A') # 住所
rating = place.get('rating', 'N/A') # レビューの評価
user_ratings_total = place.get('user_ratings_total', 'N/A') # レビューの数
places.append({'店名': name, '住所': address, '評価': rating, 'レビュー数': user_ratings_total})
return pd.DataFrame(places)
parse_results: 検索結果を解析し、店名、住所、評価、レビュー数を抽出して、pandas.DataFrame形式に変換する関数です。
name: 店舗名を取得します。
address: 住所を取得します(取得できない場合は'N/A'を返す)。
rating: レビューの平均評価を取得します(取得できない場合は'N/A'を返す)。
user_ratings_total: レビュー数を取得します(取得できない場合は'N/A'を返す)。
places.append(): 各店舗の情報をリストに追加します。
7. 検索結果をDataFrameに変換
banhmi_df = parse_results(banhmi_results)
banhmi_results: 検索結果を先ほどのparse_results関数に渡し、DataFrame形式に変換します。これで、バインミーショップのリストがbanhmi_dfに格納されます。
8. Google DriveにCSVファイルとして保存
banhmi_df.to_csv('/content/drive/My Drive/banhmi_shops_near_tokyo.csv', index=False)
banhmi_df.to_csv(): 検索結果をCSVファイルとしてGoogle Driveの「My Drive」フォルダに保存します。index=Falseは、CSVファイルにインデックスを保存しない設定です。
まとめ
このコードでは、Google Maps APIを使って東京の50KM圏内で「バインミー」を提供するレストランを検索し、店舗名、住所、評価、レビュー数を取得します。その後、結果をpandas.DataFrameにまとめ、Google DriveにCSV形式で保存します。
応用したらいろいろできますね!
最近、機械学習も勉強し始めたのでgoogle cloud apiでデータを取得して回帰分析や重回帰分析ロジスティック回帰分析などにとにかく数多くやってみたい。
おもしろい!!
この記事が気に入ったらサポートをしてみませんか?