政府の統計データを大量に閲覧,取得できるe-Statというサービスがあります.
しかもAPIでデータを扱えるというので,今回は試しに政府が発表している人口データをPythonで可視化してみました.
API機能の使い方は以下のサイトを参考にしました.
記事のコードはこちらで実行可能です.一緒に実行してみてください.
APIの取得
APIの利用には,ユーザ登録が必要です.まずはこちらから,登録を行ってください.
ログインすると,マイページのAPI機能から,アプリケーションIDを発行することができます.
個人利用で,公開の予定がなければ,
名称→test
URL→http://test.localhost/
とでもしておけば良いと思います.
発行ボタンを押すと,appIdが表示されます.これを後で使います.
統計データの取得
API利用できるデータは,開発者向けページのAPI機能から探すと便利です.
今回は,人口データを取得して使ってみます.
使いたいデータのAPIを押すと,APIリクエストURLが表示されます.
http://api.e-stat.go.jp/rest/2.1/app/getStatsData?appId=&lang=J&statsDataId=0003412313&metaGetFlg=Y&cntGetFlg=N§ionHeaderFlg=1
このURLのappIdのところに,先ほど取得したappIdを入力します.さらに今回はJSON形式でデータを取得したいので,app/getStatsData?のところを,app/json/getStatsData?に書き換えます.
こんな感じになります.
http://api.e-stat.go.jp/rest/2.1/app/json/getStatsData?appId=<先ほど取得したappId>&lang=J&statsDataId=0003412313&metaGetFlg=Y&cntGetFlg=N§ionHeaderFlg=1
それでは,PythonでAPIのリクエストを送ってみましょう.
urlのところには,さっきのAPIリクエストURLを入れてください.
1 2 3 4 5 6 7 8 | import urllib import json import matplotlib.pyplot as plt url = '' with urllib.request.urlopen(url) as response: data = response.read() d = json.loads(data.decode()) |
人口データの可視化
データ構造を理解するには少し慣れが必要そうです.
とりあえず,今回は適当な関数を作って,必要なデータを取り出してみました.
1 2 3 4 5 6 7 8 | def get_data(cat01="001",cat02="001"): x = [] y = [] for value in d["GET_STATS_DATA"]["STATISTICAL_DATA"]["DATA_INF"]["VALUE"]: if value["@unit"]=="千人" and value["@cat01"]==cat01 and value["@cat02"]==cat02: x.append(int(value["@cat03"])-1001) y.append(int(value["$"])) return x,y |
それでは,グラフとして表示してみます.
1 2 3 4 5 6 7 8 9 10 11 12 | x_sum,y_sum = get_data(cat01="001",cat02="001") x_male,y_male = get_data(cat01="002",cat02="001") x_female,y_female = get_data(cat01="003",cat02="001") plt.plot(x_sum[1:],y_sum[1:],label="Sum") plt.plot(x_male[1:],y_male[1:],label="Male") plt.plot(x_female[1:],y_female[1:],label="Female") plt.tick_params(labelsize=15) plt.legend(fontsize=13) plt.xlabel("Age [years old]",fontsize=15) plt.ylabel("Number of people [thousands]",fontsize=15) plt.show() |
総人口を青,男性人口をオレンジ,女性人口を緑で表示しました.単位は千人です.
グラフにしてみるとなかなか面白いですね.
60代以降では女性人口が多いのがわかりますね.本当に女性の方が長生きなんだなと思いました.
他にも,総人口と日本人口を分けて表示してみました.
20代,30代は外国人人口がそこそこいることがわかりますね.
まとめ
今回は,政府の統計データを取得して,Pythonで可視化してみました.
大量のデータがAPIで取得できる上,面白い統計データがたくさんあったので,しばらくこれで遊んでみたいと思います.
クレジット
「このサービスは、政府統計総合窓口(e-Stat)のAPI機能を使用していますが、サービスの内容は国によって保証されたものではありません。」
(https://www.e-stat.go.jp/api/api-info/credit)
My favorite food is Sushi and Yakiniku.
コメント