事前準備
API
https://www.e-stat.go.jp/api/sites/default/files/uploads/2019/07/API-specVer3.0.pdf
https://www.e-stat.go.jp/api/sample/testform3-0/
JSON
このサービスは、政府統計総合窓口(e-Stat)のAPI機能を使用していますが、サービスの内容は国によって保証されたものではありません。
import pandas as pd import requests from pandas.io.json import json_normalize params = { "appId": "", "lang": "J", "statsDataId": "0003191360", "metaGetFlg": "Y", "cntGetFlg": "N", "sectionHeaderFlg": "1", } r = requests.get( "https://api.e-stat.go.jp/rest/3.0/app/json/getStatsData", params=params ) # URL確認 r.url # JSON data = r.json() # 内容確認 data # normalize df = json_normalize(data["GET_STATS_DATA"]["STATISTICAL_DATA"]["DATA_INF"]["VALUE"]) df
CSV
import io import pandas as pd import requests import japanize_matplotlib import matplotlib.pyplot as plt params = { "appId": "", "lang": "J", "statsDataId": "0003191360", "metaGetFlg": "Y", "cntGetFlg": "N", "sectionHeaderFlg": "1", } r = requests.get( "https://api.e-stat.go.jp/rest/3.0/app/getSimpleStatsData", params=params ) # URL確認 r.url # CSV内容確認 print(r.text) # CSVファイル読込 df = pd.read_csv(io.BytesIO(r.content), skiprows=26) # データ確認 df.head(20) # 欠損値確認 df.isna().any(axis=0) # データ型確認 df.dtypes # 列名確認 df.columns # 年度ごとに集計 pv = df.pivot_table( index=["認知・検挙件数・検挙人員", "重要犯罪・重要窃盗犯"], columns="時間軸(年次)", values="value", aggfunc="sum", ).astype(int) # CSVに保存 pv.to_csv("data.csv") # グラフ pv.loc[[("認知件数", "重要犯罪"),("検挙件数", "重要犯罪")],:].T.plot(ylim=0, figsize=(8, 6)) # 凡例を枠外 plt.legend(bbox_to_anchor=(1.05, 1), loc="upper left", borderaxespad=0, fontsize=10) # グラフ表示 plt.show()
強姦
# グラフ pv.loc[[("認知件数", "重要犯罪_強姦"),("検挙件数", "重要犯罪_強姦")],:].T.plot(ylim=0, figsize=(8, 6)) # 凡例を枠外 plt.legend(bbox_to_anchor=(1.05, 1), loc="upper left", borderaxespad=0, fontsize=10) # グラフ表示 plt.show()