📍

地理情報取得のためのYahoo! APIの利用方法

2024/10/02に公開

出店戦略のヒント

店舗出店戦略は一般的に「どこに出店するべきか・するべきでないか」という問いに集約されます。その際に検討される出店判断軸は、経営者・担当者の「カンや経験」に基づくことが多く、属人的な知識であり再現性にも課題があります。
そこで既存店舗の地理的条件と売上の間の関係を分析することで、店舗出店時に考慮すべき様々な判断軸を具体的に考察します。

企業が提供するサービスや顧客層によって、立地戦略の重要性は異なります。
例 コンビニ:集中出店(配送コスト優位性)など

モデル的に考えるとは・・
「店舗売上は地理情報で説明することできる」という考え方です

◯地理情報の例
最寄駅
・最寄駅からの距離
・最寄駅の乗降客数
周辺
・周辺の競合店舗数
・周辺のスーパー・コンビニ数(様々)
店舗
・店舗面積
・店舗築年数
・店舗家賃
道路
・店舗前車道の本数
etc…

周囲に何があるかとかはAPIが利用できる。今回はYahoo! のAPIを利用しました。

利用例①

# Yahoo! APIを使ったジオコーディング 住所から緯度・経度を出力
import requests
import json

def make_LatLog(query):
    # APIエンドポイントのURL
    url = 'https://map.yahooapis.jp/geocode/V1/geoCoder'
    # 送信するデータ
    params = {
        'appid': ClientID,
        'query': query,
        'output': "json"
    }
    try:
        response = requests.get(url, params=params)
        response.raise_for_status()
        data = response.json()
        if 'Feature' in data:
            feature = data['Feature'][0]
            coordinates = feature['Geometry']['Coordinates']
            latitude, longitude = map(float, coordinates.split(","))
            return latitude, longitude  # 緯度と経度をタプルで返す
        else:
            print(f"No coordinates found for {query}")
            return None, None
    except requests.exceptions.RequestException as e:
        print(f"Request failed: {e}")
        return None, None

利用例②

次に緯度・経度を中心として半径〇〇m以内にある特定の店舗情報を取得することができる

def Count_Shop(lat, lon, gc, dist=0.5, sort="geo"):
    # APIエンドポイントのURL
    url = 'https://map.yahooapis.jp/search/local/V1/localSearch'
    # 送信するデータ
    params = {
        'appid': ClientID,
        'lat': lat,
        'lon': lon,
        'dist': dist,
        "gc":gc, 
        # 'sort': sort,
        'output': "json"
    }
    try:
        response = requests.get(url, params=params)
        response.raise_for_status()
        data = response.json()
        return data["ResultInfo"]["Total"]
    except requests.exceptions.RequestException as e:
        print(f"Request failed: {e}")
        return None

出力例です。

{'ResultInfo': {'Count': 10,
  'Total': 21,
  'Start': 1,
  'Status': 200,
  'Description': '',
  'Copyright': '',
  'Latency': 0.1},
 'Feature': [{'Id': '10000042156',
   'Gid': 'sCtG0OacIRg',
   'Name': 'ペインクリニカルセンター',
   'Geometry': {'Type': 'point', 'Coordinates': '139.7271072,35.73030323'},
   'Category': ['あん摩マッサージ指圧師,カイロプラクティック・整体'],
   'Description': '',
   'Style': [],
   'Property': {'Uid': 'c11c354fc390a333a2bf2fa92284d1af9803f30d',
    'CassetteId': 'a8bcd9450c541521bba8260a9170f8a7',
    'Yomi': 'ペインクリニカルセンター',
    'Country': {'Code': 'JP', 'Name': '日本'},
    'Address': '東京都豊島区南大塚3丁目38-9',
    'GovernmentCode': '13116',
    'AddressMatchingLevel': '6',
    'Tel1': '03-3987-1146',
    'Genre': [{'Code': '0403', 'Name': 'マッサージ、整体、治療院'},
     {'Code': '0403003', 'Name': '整体、マッサージ'},
     {'Code': '0403004', 'Name': 'カイロプラクティック'}],
    'Station': [{'Id': '22562',
      'SubId': '2256201',
      'Name': '大塚(東京都)',
      'Railway': 'JR在来線',
      'Exit': '南口',
      'ExitId': '3411',
      'Distance': '233',
      'Time': '2',
      'Geometry': {'Type': 'point', 'Coordinates': '139.728656,35.731314'}},
     {'Id': '23004',
      'SubId': '2300401',
      'Name': '向原(東京都)',
      'Railway': '都電荒川線',
      'Exit': '出口',
      'ExitId': '5272',
      'Distance': '246',
      'Time': '3',
      'Geometry': {'Type': 'point', 'Coordinates': '139.725101,35.729064'}},
     {'Id': '22563',
      'SubId': '2256301',
      'Name': '大塚駅前',
      'Railway': '都電荒川線',
      'Exit': '出口',
      'ExitId': '3413',
      'Distance': '298',
      'Time': '3',
      'Geometry': {'Type': 'point', 'Coordinates': '139.729323,35.731646'}}],
    'SmartPhoneCouponFlag': 'false'}},
    ...

今回は地理情報分析時のデータ収集のtipsでした!

TODO
・変数が揃ってきたら主成分分析してみる⇨周辺や店舗が似ている店舗群を抽出、比較

別PJ
・顧客ペルソナを作成。(変数を作成する際に、併売・利用を推定できる, 施策立案時に便利)
・併買分析(アトリビューション分析)

memo
普通に考えてコンビニ・スーパーは誰でも行くし、コンビニが多ければ顧客が来るとかって見込めないですよね。

Discussion