カフェの出店にRESAS APIを利用する
カフェの出店にRESAS APIを利用する

カフェの出店にRESAS APIを利用する

カフェの出店地探しもデータを活用してみましょう!
カフェの出店地探しもデータを活用してみましょう!

これまでRESASのAPIに関して2回取り上げました。

最初の記事は「RESAS APIから京都市の人口データを取得しました(with Python)」です。この記事では、APIをどのように使えるかを見ました。2つ目の記事は「RESAS APIを使って人の地域間の地域間移動を確認する(with Python)」です。この記事ではRESASにある地域ブロック別純移動数というデータを取得して、ここ10年程度の人の移動データを観察しました。

今回の記事は、企業でRESASのデータがどのように活用できるかを取り上げます。

想定する企業の課題

京都市北区でカフェを営んでいる経営者Aさん。次の出店を京都府内で考え始めました。出店を考えるにあたりデータを活用してみることにしました。

最近の不安は日本の人口減少です。「長期的に人口の減少が大きい場所では次の店舗は出したくない」との意見から、人口が増えている、もしくは減少の緩やかな地域に出展したいと考えました。

RESASの人口増減率データを使う

京都府内の市町村の人口増減のデータは、RESASの人口増減率データを使えば取得できそうです。1985年から2045年までのデータを取得できるため、将来的な人口の動きも確認できそうです。

まずは、各市町村のデータを取るため、次のようなコードを書きました。

import requests
import pandas as pd
import plotly.express as px
from sklearn.cluster import KMeans

end_point = 'https://opendata.resas-portal.go.jp/'
num_human = 'api/v1/population/composition/perYear'
gain = 'api/v1/population/sum/perYear'
 
# 京都の市町村番号を取得する
cities = 'api/v1/cities'
params = {'prefCode': 26}
r = requests.get(end_point+cities, params=params, headers=header)
kyoto_cities = pd.DataFrame(r.json()['result'])
 
# 各市町村の人口増減率のデータをリストに格納する
data_dict = dict()
for city_num in range(len(kyoto_cities)):
   city_name = kyoto_cities.loc[city_num, 'cityName']
   code = kyoto_cities.loc[city_num, 'cityCode']
   params = {'prefCode': 26, 'cityCode': code}
   r = requests.get(end_point+gain, params=params, headers=header)
   data_dict[city_name] = r.json()['result']
 
# 各市町村の人口増減率のデータフレームを作成する
data_list = list()
 
for k in data_dict.keys():
   d = pd.DataFrame(data_dict[k]['line']['data']).set_index('year')
   d.columns = [k]
   data_list.append(d)
 
data = pd.concat(data_list, axis=1)   code = kyoto_cities.loc[city_num, 'cityCode']
   params = {'prefCode': 26, 'cityCode': code}
   r = requests.get(end_point+gain, params=params, headers=header)
   data_dict[city_name] = r.json()['result']
 
# 各市町村の人口増減率のデータフレームを作成する
data_list = list()
 
for k in data_dict.keys():
   d = pd.DataFrame(data_dict[k]['line']['data']).set_index('year')
   d.columns = [k]
   data_list.append(d)
 
data = pd.concat(data_list, axis=1)

これでデータが取得できました。取得できたデータは次のようになります。37市町村もあるので、将来に向かって減少することはわかるものの、細かい分類は分かりません。

RESASから取得できたデータ
取得できたデータ

そこで、KMeansを使ってクラスタリングします。クラスタリングの中央値を見ると3に分類されている所が、人口増が長く続くことがわかります。ちなみに北区は4のすでに緩やかながら減少が始まっているクラスタに含まれます。

datat = data.T
kmeans = KMeans(n_clusters=6, random_state=42).fit(datat)
cl = pd.DataFrame(kmeans.cluster_centers_.T)
cl.index= data.index
fig = px.line(cl, title='centers')
fig.show()

3のラベルが含まれる地域を確認すると、京田辺市と木津川市であることがわかります。

人口ピラミッドを確認する

人口の増減のペースが異なるということは、人口の年齢構成も異なることが予想されます。カフェのスタイルにも関わることなので重要です。そこで、北区と京田辺市、木津川市でどのように年齢構成が異なるのか、2020年のデータを確認することにしました。

# データ読み込み
pyramid = 'api/v1/population/composition/pyramid'
params = {'prefCode': 26, 'cityCode': code, 'yearLeft':2020, 'yearRight': 2020}
 
data_list = list()
for city_num in range(len(kyoto_cities)):
   city_name = kyoto_cities.loc[city_num, 'cityName']
   code = kyoto_cities.loc[city_num, 'cityCode']
   params = {'prefCode': 26, 'cityCode': code,  'yearLeft':2020, 'yearRight': 2020}
   r = requests.get(end_point+pyramid, params=params, headers=header)
   d = pd.DataFrame(r.json()['result']['yearLeft']['data'])
   d['name'] = city_name
   data_list.append(d)
 
# データ整形
kyoto_ages = pd.concat(data_list)
kitaku = kyoto_ages[kyoto_ages['name'] == '京都市北区']
kidu = kyoto_ages[kyoto_ages['name'] == '木津川市']
tanabe = kyoto_ages[kyoto_ages['name'] == '京田辺市']
kitaku['age_percent'] = kitaku['manPercent'] + kitaku['womanPercent']
tanabe['age_percent'] = tanabe['manPercent'] + tanabe['womanPercent']
kidu['age_percent'] = kidu['manPercent'] + kidu['womanPercent']
age_p = pd.merge(kitaku[['age_percent', 'class']], tanabe[['age_percent', 'class']], on='class')
age_p = pd.merge(age_p, kidu[['age_percent', 'class']], on='class')
age_p = age_p.set_index('class')
age_p.columns = ['kitaku', 'kyotanabe', 'kidugawa']

できたデータをグラフで確認してみます。北区は20−25歳が飛び抜けて多く、高齢者も多いことがわかります。一方で、他の2市町村は30−50代が多くなっています。この辺り、落ち着いた店作りをしているカフェだと、他の2市町村を選んだ方が良い可能性も考えられます。

人口もみておきましょう。北区は約11万人、他の2市町村は7万人半ばです。この辺りは人口密度も考慮したいところです。

まとめ

今回はRESASのAPIを活用して、将来の人口という面からカフェを出店する市町村を探しました。データを活用することにより、将来の人口を考慮した出店計画が可能となります。このような感じでRESASを使って出店計画を練ることもできますので、地方間のデータを比較して何かしてみたいと考えておられるなら、ぜひ長目にご相談ください。

「あれ。人口密度は?」と思われた方もおられるかもしれません。人口密度などを考慮した出店地選びは次の記事で扱います。

RESAS APIの使い方無料セミナー開催のお知らせ

合同会社長目が、PythonからRESAS APIを使う無料セミナーを開催します。

ウェブセミナーなので、全国からご参加いただけます。開催日時は7月20日水曜日19時から20時までです。

お申し込みはテックプレイよりお願いいたします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です