2019/04/09

サンプルプログラム

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

  1. import requests, json
  2. import pandas as pd
  3. import re
  4. import matplotlib.pyplot as plt
  5. import seaborn as sns
  6. %matplotlib inline
  7.  
  8. # APIキーの指定
  9. apikey = "oooooooooooooooooooooooooooooooooooooooooooooooooo" # 各自取得したAPIキーに置き換え
  10. # APIのURL設定
  11. 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"
  12. url = api.format(key = apikey)
  13.  
  14. # APIにリクエスト
  15. r = requests.get(url)
  16. # JSON形式からデコード
  17. data = json.loads(r.text)
  18.  
  19. # コード・デコード値取得
  20. class_data = data["GET_STATS_DATA"]["STATISTICAL_DATA"]["CLASS_INF"]["CLASS_OBJ"]
  21. df1 = pd.DataFrame(class_data[1]["CLASS"]) # cat01 年度
  22. df2 = pd.DataFrame(class_data[2]["CLASS"]) # cat02 病床規模
  23. df3 = pd.DataFrame(class_data[3]["CLASS"]) # cat03 データ種類
  24.  
  25. # データ取得
  26. x_data = []
  27. y_data = []
  28.  
  29. for value in data["GET_STATS_DATA"]["STATISTICAL_DATA"]["DATA_INF"]["VALUE"]:
  30. if value["@cat02"] == "1" and value["@cat03"] == "100": # cat02 総数 cat03 総数(病院数)
  31. x_data.append(value["@cat01"]) # cat01 年度
  32. y_data.append(value["$"]) # 値
  33. # cat01 デコード(西暦の年度抽出)
  34. x_label = []
  35. year = re.compile(r'\d\d\d\d') # 正規表現で西暦抽出
  36.  
  37. for xlabel in x_data:
  38. labeldata = df1[df1['@code'] == xlabel]
  39. x_year = year.search(labeldata['@name'].to_string())
  40. x_label.append(int(x_year.group()))
  41.  
  42. # グラフ表示
  43. plt.plot(x_label, y_data)

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


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