概要
本記事ではプログラミング言語Pythonを用いて、RESASのAPIを叩き、データを取得する工程をとりあげます。
RESASは地域経済分析システムの略称で、地域に関する様々なデータが搭載されているシステムです。そのデータを利用できるAPIが解放されているので(アカウント作成の必要あり)、今回はその利用方法をとりあげます。
APIはプログラミングを利用してデータを取得します。今回は、Pythonを使います。Pythonを使う理由は、様々なツールがそろっており、いろいろなことが簡単にできるからです。
今回の記事では、RESASから京都市の人口データを取得し、可視化します。
アカウントの作成
RESASのAPIを利用するのに、まず次のリンク先から無料で利用登録します。メアド、パスワード、氏名、職業の業種、利用目的などが必須の入力項目となります。

アカウントを作成したあと、マイページに移動します。ここで先ほど入力した情報と共に、APIキーが提供されます。APIキーがデータ取得に必要となります。
APIを使って都道府県と京都市の番号を取得する
まずは、上記で取得したAPIキーを使って、京都府の都道府県番号と、京都市の市町村番号を取得します。
余談ですが、RESASのAPIの仕様書は分かりやすく作られています。仕様書に目を通すだけで、大体の使い方は理解できます。
RESASのAPIのエンドポイントは https://opendata.resas-portal.go.jp となります。これに、欲しいデータのAPIのURLを足し、ヘッダーにパスワード、パラメータに必要事項を渡すことで、データを取得できます。
都道府県番号を取得する
まずは、都道府県番号を取得します。コードは次の通りです。
import requests
import pandas as pd
header = {“X-API-Key”: your_password} #①
endpoint = “https://opendata.resas-portal.go.jp/”
todofuken_ichiran = “api/v1/prefectures” # ②
r = requests.get(endpoint + todofuken_ichiran, headers=header) #⓷
print(r.status_code) #④
pref = pd.DataFrame(r.json()[“result”] #⑤
上のコードを解説します。
①. APIキーのデータを辞書に格納します。キー名”X-API-Key”はAPIの詳細仕様に書かれている通りに設定しています。
②. 都道府県の一覧を取得できるAPIのURLを設定します。ドキュメントも詳細なものがあります。
⓷. APIのデータを取得します。引数headersに①で作成したAPIキーを渡しています。
④. ⓷の取得がうまくいったかのコードが返されます。
⑤. ⓷がうまくいった場合、返されるデータを人が見やすいデータに整形します。
コードがうまく動くと画像2のようなデータが取得できます。データはprefCodeとprefNameというデータが返されます。今回は京都府の番号が欲しかった。ということで26がその番号であるということが、こちらのデータから分かります。

市町村番号を取得する
都道府県番号が分かったので、次に京都市の市町村番号を取得します。市町村番号一覧のドキュメントを参考にコードを作成します。コードは次の通りです。
import requests
import pandas as pd
header = {“X-API-Key”: your_password}
param = {‘prefCode’: 26} # ①
endpoint = “https://opendata.resas-portal.go.jp/”
city_ichiran = “api/v1/cities” # ②
r = requests.get(endpoint + city_ichiran, headers=header, params=param) #⓷
print(r.status_code)
city = pd.DataFrame(r.json()[“result”]
上のコードを解説します。
①: 京都府の市町村の番号を取得したいので、prefCodeをパラメータとして渡す準備をします。
②: 市町村についてのデータを取得したいので、聞きに行くAPIのURLを変更します。
⓷: 引数paramsに①で作ったパラメータを渡します。
これ以外は先ほどと似たコードとなります。得られるデータは次のようになります。京都市のcityCodeは26100となります。
京都市の人口構成のデータを取得する
市の番号が分かったので、人口構成のデータを取得します。人口構成のAPIのドキュメントを読むと、どのようなパラメータを渡せばよいかと、返り値も分かります。
4つほどデータが返ってくるので、今回はデータを先ほどまで同様、pandasのデータフレームにしながら、ラベルをキーとして辞書に格納します。
コードは次の通りです。
import requests
import pandas as pd
header = {“X-API-Key”: your_password}
param = {'prefCode': 26, 'cityCode': 26100} # ①
endpoint = “https://opendata.resas-portal.go.jp/”
jinko = '/api/v1/population/composition/perYear' # ②
r = requests.get(endpoint + jinko, headers=header, params=param)
print(r.status_code)
data_dict = dict()
for d in r.json()['result']['data']: #⓷
data_dict[d['label']] = pd.DataFrame(d['data'])
コードを解説します。
①. パラメータに都道府県番号、市町村番号を設定します。
②. APIのURLを人口構成に設定します。
⓷. 総人口、年少人口、生産年齢人口、老年人口のデータを、それぞれデータフレームにして辞書に格納します。
以上のようにデータが作成できました。どのようなデータが返ってきているか、生産年齢人口を確認します。画像のように、1980年から2045年のデータが返されています。予想値も得れることが分かります。

棒グラフを作る
京都市の生産年齢人口の割合と人口数を棒グラフにします。plotly.expressを使うことで、容易に可視化できます。
割合
import plotly.express as px
fig = px.bar(data_dict['生産年齢人口'], x='year', y='rate', title='京都市の生産年齢人口割合')
fig.show()
人口
import plotly.express as px
fig = px.bar(data_dict['生産年齢人口'], x='year', y='value', title='京都市の生産年齢人口')
fig.show()
人口、割合とも減少していることが分かります。
まとめ
本記事では、Pythonを使ってRESASのAPIを利用しました。容易にデータが取得できることが分かっていただけたら幸いです。このようなデータを手動でダウンロードしている企業もあるかもしれませんが、外部データ取得の自動化は容易にでき、その時間短縮は生産性の向上につながります。
RESASは、以前登録して使っていなかったのですが、ドキュメントも親切で使いやすく、興味深いデータもあるのだなと勉強になりました。