コロナが人の移動に影響しているかみれたら面白いと思って、e-Statの住民基本台帳人口移動報告を使って今年(2020年)の国内外の人口の移動をグラフにしてみました。
Pythonスクリプト
APIで情報取得
STAT_NAME取得
import os import io import requests import pandas as pd %matplotlib inline pd.plotting.register_matplotlib_converters() app_id = "{{APP_IDは個人ごとに取得}}"
def get_stats_name_list(): url = "http://api.e-stat.go.jp/rest/3.0/app/getSimpleStatsList" params = {"appId": app_id, "statsNameList": "Y"} response = requests.get(url, params=params) csv_text = response.text[response.text.find('"TABLE_INF",') :] df = pd.read_csv(io.StringIO(csv_text), dtype="object") return df
df_stats_name = get_stats_name_list().pipe( lambda df: df[df.STAT_NAME.str.contains("人口移動")] )
df_stats_name
TABLE_INF STAT_CODE STAT_NAME GOV_ORG_CODE GOV_ORG_NAME 30 00200523 00200523 住民基本台帳人口移動報告 00200 総務省
TABLE_INF取得
stats_code = df_stats_name.TABLE_INF def get_stats_list(stats_code): url = "http://api.e-stat.go.jp/rest/3.0/app/getSimpleStatsList" params = {"appId": app_id, "statsCode": stats_code} response = requests.get(url, params=params) csv_text = response.text[response.text.find('"TABLE_INF",') :] df = pd.read_csv(io.StringIO(csv_text), dtype="object") return df
表作成
CLASS一覧
df_stats_list = get_stats_list(stats_code).pipe( lambda df: df[ (df.CYCLE == "月次") & (df.TITLE.str.contains("全国")) & (df.TITLE.str.contains("2020年1月")) & (df.TITLE.str.contains("転入者数")) ] )
stats_data_id = df_stats_list.iloc[0].TABLE_INF def get_meta_info(stats_data_id): url = "http://api.e-stat.go.jp/rest/3.0/app/getSimpleMetaInfo" params = {"appId": app_id, "statsDataId": stats_data_id} response = requests.get(url, params=params) csv_text = response.text[response.text.find('"CLASS_OBJ_ID",') :] df = pd.read_csv(io.StringIO(csv_text), dtype="object") return df
df_meta_info = get_meta_info(stats_data_id).dropna(axis=1).drop_duplicates('CLASS_OBJ_ID')
def get_stats_data(stats_data_id, cat01, cat02, area): url = "http://api.e-stat.go.jp/rest/3.0/app/getSimpleStatsData" params = { "appId": app_id, "statsDataId": stats_data_id, "cdArea": area, "cdCat01": cat01, "cdCat02": cat02, } response = requests.get(url, params=params) csv_text = response.text[response.text.find('"tab_code",') :] df = pd.read_csv(io.StringIO(csv_text), dtype="object") return df
2020年の全国の移動者についての一覧
df_stas_data = get_stats_data( stats_data_id, **df_meta_info.groupby("CLASS_OBJ_ID") .first() .CLASS_CODE[["area", "cat01", "cat02"]] .to_dict() )
df_stas_data
tab_code 表章項目 cat01_code 性別 cat02_code 国籍 area_code 全国・都道府県・大都市 time_code 時間軸(月次) unit value annotation 0 15 国外からの転入者数 0 総数 60000 移動者 00000 全国 2020001010 2020年10月 NaN 20611 NaN 1 15 国外からの転入者数 0 総数 60000 移動者 00000 全国 2020000909 2020年9月 NaN 13347 NaN 2 15 国外からの転入者数 0 総数 60000 移動者 00000 全国 2020000808 2020年8月 NaN 14229 NaN 3 15 国外からの転入者数 0 総数 60000 移動者 00000 全国 2020000707 2020年7月 NaN 14028 NaN 4 15 国外からの転入者数 0 総数 60000 移動者 00000 全国 2020000606 2020年6月 NaN 11516 NaN 5 15 国外からの転入者数 0 総数 60000 移動者 00000 全国 2020000505 2020年5月 NaN 9021 NaN 6 15 国外からの転入者数 0 総数 60000 移動者 00000 全国 2020000404 2020年4月 NaN 42266 NaN 7 15 国外からの転入者数 0 総数 60000 移動者 00000 全国 2020000303 2020年3月 NaN 53419 NaN 8 15 国外からの転入者数 0 総数 60000 移動者 00000 全国 2020000202 2020年2月 NaN 38842 NaN 9 15 国外からの転入者数 0 総数 60000 移動者 00000 全国 2020000101 2020年1月 NaN 47273 NaN 10 16 国外への転出者数 0 総数 60000 移動者 00000 全国 2020001010 2020年10月 NaN 18758 NaN 11 16 国外への転出者数 0 総数 60000 移動者 00000 全国 2020000909 2020年9月 NaN 20472 NaN 12 16 国外への転出者数 0 総数 60000 移動者 00000 全国 2020000808 2020年8月 NaN 21720 NaN 13 16 国外への転出者数 0 総数 60000 移動者 00000 全国 2020000707 2020年7月 NaN 15566 NaN 14 16 国外への転出者数 0 総数 60000 移動者 00000 全国 2020000606 2020年6月 NaN 9818 NaN 15 16 国外への転出者数 0 総数 60000 移動者 00000 全国 2020000505 2020年5月 NaN 5727 NaN 16 16 国外への転出者数 0 総数 60000 移動者 00000 全国 2020000404 2020年4月 NaN 10211 NaN 17 16 国外への転出者数 0 総数 60000 移動者 00000 全国 2020000303 2020年3月 NaN 33492 NaN 18 16 国外への転出者数 0 総数 60000 移動者 00000 全国 2020000202 2020年2月 NaN 24043 NaN 19 16 国外への転出者数 0 総数 60000 移動者 00000 全国 2020000101 2020年1月 NaN 28161 NaN
チャート作成
cufflinksをcufflinksを使ってチャートを描画
import cufflinks as cf cf.go_offline() df_stas_data['value'] = pd.to_numeric(df_stas_data['value']) df_stas_data.sort_values('time_code').iplot( x='時間軸(月次)', y='value', title='国内外の移動者数', categories='表章項目' )
人の移動(チャート)
今年の4,5月から人の移動が少なくなっていることがみてとれました。。。