e-Statは各府省が公表する統計データをまとめた政府統計のポータルサイトです。
今回もe-Statの政府統計情報を使ってチャートにする練習をしてみました。
関連
これまでやったこと
e-StatのAPIを使って政府統計情報を取得する方法
e-StatのAPIを使って政府統計情報を取得する方法 (その3)
プログラム
pythonスクリプトを使って宮城県の人の移動をチャートにしてみます。
import json, requests #E-stat のAPIの使い方参照 appid = '{{app_id}}' statsdataid = '0003097041' paramid = '&metaGetFlg=Y&cntGetFlg=N&explanationGetFlg=Y&annotationGetFlg=Y§ionHeaderFlg=1' url_estat = 'http://api.e-stat.go.jp/rest/3.0/app/json/getStatsData?appId={}&statsDataId={}{}'.format(appid, statsdataid, paramid) res = requests.get(url_estat) json_res = json.loads(res.text)
tabは内訳らしい
code | name |
---|---|
01 | 都道府県(自都市)内移動者数 |
02 | 他都道府県(他市町村)からの転入者数 |
03 | 他都道府県(他市町村)への転出者数 |
04 | 転入超過数 |
{'@id': 'tab', '@name': '表章項目', 'CLASS': [{'@code': '01', '@name': '都道府県(自都市)内移動者数', '@level': '', '@unit': '人'}, {'@code': '02', '@name': '他都道府県(他市町村)からの転入者数', '@level': '', '@unit': '人'}, {'@code': '03', '@name': '他都道府県(他市町村)への転出者数', '@level': '', '@unit': '人'}, {'@code': '04', '@name': '転入超過数', '@level': '', '@unit': '人'},
cat01は性別らしい
code | name |
---|---|
1 | 男 |
2 | 女 |
{'@id': 'cat01', '@name': '性別', 'CLASS': [{'@code': '0', '@name': '総数', '@level': '1'}, {'@code': '1', '@name': '男', '@level': '1'}, {'@code': '2', '@name': '女', '@level': '1'}]},
cat02は国籍らしい
code | name |
---|---|
60000 | 移住者 |
61000 | 日本人移住者 |
62000 | 外国人移住者 |
{'@id': 'cat02', '@name': '国籍', '@description': '・2013年(平成25年)7月結果の移動者(外国人含む)には,7月1日から7日までの外国人移動者は含んでいない。・移動者(外国人含む)について,2013年6月結果以前は該当数値がない。', 'CLASS': [{'@code': '60000', '@name': '移動者', '@level': '1'}, {'@code': '61000', '@name': '日本人移動者', '@level': '1'}, {'@code': '62000', '@name': '外国人移動者', '@level': '1'}]},
都道府県ごとに。。。
json_stat = json_res['GET_STATS_DATA']['STATISTICAL_DATA']['DATA_INF']['VALUE'] area = [] increace = [] time = [] tab=[] cat01 = [] cat02 = [] for stat in json_stat: area.append(stat['@area']) increace.append(stat['$']) time.append(stat['@time']) tab.append(stat['@tab']) cat01.append(stat['@cat01']) cat02.append(stat['@cat02']) from pandas import DataFrame import pandas as pd df = pd.DataFrame( { "area" : area, "increace" : increace, "time" : time, "tab" : tab, "cat01" : cat01, "cat02": cat02 } ) #面倒なのでJupyter Notebookで出力してコピった todohuken = [{'@code': '00000', '@name': '全国', '@level': '1'}, {'@code': '01000', '@name': '北海道', '@level': '1'}, {'@code': '02000', '@name': '青森県', '@level': '1'}, {'@code': '03000', '@name': '岩手県', '@level': '1'}, {'@code': '04000', '@name': '宮城県', '@level': '1'}, {'@code': '05000', '@name': '秋田県', '@level': '1'}, {'@code': '06000', '@name': '山形県', '@level': '1'}, {'@code': '07000', '@name': '福島県', '@level': '1'}, {'@code': '08000', '@name': '茨城県', '@level': '1'}, {'@code': '09000', '@name': '栃木県', '@level': '1'}, {'@code': '10000', '@name': '群馬県', '@level': '1'}, {'@code': '11000', '@name': '埼玉県', '@level': '1'}, {'@code': '12000', '@name': '千葉県', '@level': '1'}, {'@code': '13000', '@name': '東京都', '@level': '1'}, {'@code': '14000', '@name': '神奈川県', '@level': '1'}, {'@code': '15000', '@name': '新潟県', '@level': '1'}, {'@code': '16000', '@name': '富山県', '@level': '1'}, {'@code': '17000', '@name': '石川県', '@level': '1'}, {'@code': '18000', '@name': '福井県', '@level': '1'}, {'@code': '19000', '@name': '山梨県', '@level': '1'}, {'@code': '20000', '@name': '長野県', '@level': '1'}, {'@code': '21000', '@name': '岐阜県', '@level': '1'}, {'@code': '22000', '@name': '静岡県', '@level': '1'}, {'@code': '23000', '@name': '愛知県', '@level': '1'}, {'@code': '24000', '@name': '三重県', '@level': '1'}, {'@code': '25000', '@name': '滋賀県', '@level': '1'}, {'@code': '26000', '@name': '京都府', '@level': '1'}, {'@code': '27000', '@name': '大阪府', '@level': '1'}, {'@code': '28000', '@name': '兵庫県', '@level': '1'}, {'@code': '29000', '@name': '奈良県', '@level': '1'}, {'@code': '30000', '@name': '和歌山県', '@level': '1'}, {'@code': '31000', '@name': '鳥取県', '@level': '1'}, {'@code': '32000', '@name': '島根県', '@level': '1'}, {'@code': '33000', '@name': '岡山県', '@level': '1'}, {'@code': '34000', '@name': '広島県', '@level': '1'}, {'@code': '35000', '@name': '山口県', '@level': '1'}, {'@code': '36000', '@name': '徳島県', '@level': '1'}, {'@code': '37000', '@name': '香川県', '@level': '1'}, {'@code': '38000', '@name': '愛媛県', '@level': '1'}, {'@code': '39000', '@name': '高知県', '@level': '1'}, {'@code': '40000', '@name': '福岡県', '@level': '1'}, {'@code': '41000', '@name': '佐賀県', '@level': '1'}, {'@code': '42000', '@name': '長崎県', '@level': '1'}, {'@code': '43000', '@name': '熊本県', '@level': '1'}, {'@code': '44000', '@name': '大分県', '@level': '1'}, {'@code': '45000', '@name': '宮崎県', '@level': '1'}, {'@code': '46000', '@name': '鹿児島県', '@level': '1'}, {'@code': '47000', '@name': '沖縄県', '@level': '1'}, {'@code': '48000', '@name': '東京圏', '@level': '1'}, {'@code': '49000', '@name': '名古屋圏', '@level': '1'}, {'@code': '50000', '@name': '大阪圏', '@level': '1'}, {'@code': '00416', '@name': '21大都市計', '@level': '1'}, {'@code': '01100', '@name': '札幌市', '@level': '1'}, {'@code': '04100', '@name': '仙台市', '@level': '1'}, {'@code': '11100', '@name': 'さいたま市', '@level': '1'}, {'@code': '12100', '@name': '千葉市', '@level': '1'}, {'@code': '13100', '@name': '東京都特別区部', '@level': '1'}, {'@code': '14100', '@name': '横浜市', '@level': '1'}, {'@code': '14130', '@name': '川崎市', '@level': '1'}, {'@code': '14150', '@name': '相模原市', '@level': '1'}, {'@code': '15100', '@name': '新潟市', '@level': '1'}, {'@code': '22100', '@name': '静岡市', '@level': '1'}, {'@code': '22130', '@name': '浜松市', '@level': '1'}, {'@code': '23100', '@name': '名古屋市', '@level': '1'}, {'@code': '26100', '@name': '京都市', '@level': '1'}, {'@code': '27100', '@name': '大阪市', '@level': '1'}, {'@code': '27140', '@name': '堺市', '@level': '1'}, {'@code': '28100', '@name': '神戸市', '@level': '1'}, {'@code': '33100', '@name': '岡山市', '@level': '1'}, {'@code': '34100', '@name': '広島市', '@level': '1'}, {'@code': '40100', '@name': '北九州市', '@level': '1'}, {'@code': '40130', '@name': '福岡市', '@level': '1'}, {'@code': '43100', '@name': '熊本市', '@level': '1'}] #都道府県のマッピング convert_rules_dict = {} for rule in todohuken: convert_rules_dict.update({rule['@code'] : rule['@name']}) df['area'] = df['area'].map(convert_rules_dict) #市区町村等のいらないものを削除 df = df.dropna()
データフレームの中確認
area increace time tab cat01 cat02 0 全国 208821 2020001010 01 0 60000 1 全国 200814 2020000909 01 0 60000 2 全国 202596 2020000808 01 0 60000 3 全国 210497 2020000707 01 0 60000 4 全国 194219 2020000606 01 0 60000 ... ... ... ... ... ... ... 99995 相模原市 267 2020000303 03 0 62000 99996 相模原市 105 2020000202 03 0 62000 99997 相模原市 136 2020000101 03 0 62000 99998 新潟市 32 2020001010 03 0 62000 99999 新潟市 32 2020000909 03 0 62000
チャートができるかテスト(宮城県で絞り込み)
import cufflinks as cf cf.go_offline() df[df.area == '宮城県'].iplot(x='time', y='increace', kind='bar')
以下のように絞り込み
df[ df['tab'].isin(["01"]) & df['cat01'].isin(["0"]) & df['cat02'].isin(["60000"]) & df['area'].isin(["宮城県"]) ]
area increace time tab cat01 cat02 352 宮城県 4117 2020001010 01 0 60000 353 宮城県 4130 2020000909 01 0 60000 354 宮城県 3955 2020000808 01 0 60000 355 宮城県 4270 2020000707 01 0 60000 356 宮城県 3990 2020000606 01 0 60000 ... ... ... ... ... ... ... 435 宮城県 4257 2013001111 01 0 60000 436 宮城県 4700 2013001010 01 0 60000 437 宮城県 4109 2013000909 01 0 60000 438 宮城県 4464 2013000808 01 0 60000 439 宮城県 5184 2013000707 01 0 60000 88 rows × 6 columns
なんかもうひといき。。。