2019/04/09

サンプルプログラム

平成29年の医療施設調査のデータを総務省統計局のe-StatのウェブサイトからAPI経由で取得し、jupyter notebook内でグラフまで表示させるpythonプログラム。

import requests, json
import pandas as pd
import re
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

# APIキーの指定
apikey = "oooooooooooooooooooooooooooooooooooooooooooooooooo" # 各自取得したAPIキーに置き換え
    
# APIのURL設定
api = "http://api.e-stat.go.jp/rest/2.1/app/json/getStatsData?appId={key}&lang=J&statsDataId=0003286300&metaGetFlg=Y&cntGetFlg=N&sectionHeaderFlg=1"
url = api.format(key = apikey)

# APIにリクエスト
r = requests.get(url)
# JSON形式からデコード
data = json.loads(r.text)

# コード・デコード値取得
class_data = data["GET_STATS_DATA"]["STATISTICAL_DATA"]["CLASS_INF"]["CLASS_OBJ"]
df1 = pd.DataFrame(class_data[1]["CLASS"]) # cat01 年度
df2 = pd.DataFrame(class_data[2]["CLASS"]) # cat02 病床規模
df3 = pd.DataFrame(class_data[3]["CLASS"]) # cat03 データ種類

# データ取得
x_data = []
y_data = []

for value in data["GET_STATS_DATA"]["STATISTICAL_DATA"]["DATA_INF"]["VALUE"]:
    if value["@cat02"] == "1" and value["@cat03"] == "100": # cat02 総数  cat03 総数(病院数)
        x_data.append(value["@cat01"]) # cat01 年度
        y_data.append(value["$"]) # 値
        
# cat01 デコード(西暦の年度抽出)
x_label = []
year = re.compile(r'\d\d\d\d') # 正規表現で西暦抽出

for xlabel in x_data:
    labeldata = df1[df1['@code'] == xlabel]
    x_year = year.search(labeldata['@name'].to_string())
    x_label.append(int(x_year.group()))

# グラフ表示
plt.plot(x_label, y_data)

これを実行すると、下記のようなグラフが表示される。


今年度は、暇を見つけて、プログラムを出していこうかと・・・。