RESASから京都市の人口データを取得しました(with Python)
RESASから京都市の人口データを取得しました(with Python)

RESASから京都市の人口データを取得しました(with Python)

概要

本記事ではプログラミング言語Pythonを用いて、RESASのAPIを叩き、データを取得する工程をとりあげます。

RESASは地域経済分析システムの略称で、地域に関する様々なデータが搭載されているシステムです。そのデータを利用できるAPIが解放されているので(アカウント作成の必要あり)、今回はその利用方法をとりあげます。

APIはプログラミングを利用してデータを取得します。今回は、Pythonを使います。Pythonを使う理由は、様々なツールがそろっており、いろいろなことが簡単にできるからです。

今回の記事では、RESASから京都市の人口データを取得し、可視化します。

アカウントの作成

RESASのAPIを利用するのに、まず次のリンク先から無料で利用登録します。メアド、パスワード、氏名、職業の業種、利用目的などが必須の入力項目となります。

画像1

アカウントを作成したあと、マイページに移動します。ここで先ほど入力した情報と共に、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は、以前登録して使っていなかったのですが、ドキュメントも親切で使いやすく、興味深いデータもあるのだなと勉強になりました。

コメントを残す

メールアドレスが公開されることはありません。