Mawa Town

Mawaという人が作る小さな町でMawaTownです。技術と音楽が好き。

RESASというデータセットのAPIをPythonでいじってみたときのメモ2

RESASというデータセットがあり利用が無料ぽいので試してみた その2 今度は、csvファイルに落とし込むまでを記録したので実用に近づいたと思われる。 resas.go.jp
今回は県別の従業員数をcsvファイルにするまでを目標とします。
opendata.resas-portal.go.jp

今回もまずpythonスクレイピングモジュールで有名なもののひとつ、requestsでやってみました。

>>>import requests
>>>BASE_API_END_POINT = "https://opendata.resas-portal.go.jp/"
>>>TARGET_URL = "api/v1/municipality/employee/perYear"
>>>headers = {'X-API-KEY': '*****(API登録して取得する)******', 'content-type': 'application/json;charset=UTF-8'} #ヘッダ情報を追加
>>>TARGET = BASE_API_END_POINT+TARGET_URL
>>>payload = {'prefCode': '12'} #今回はパラメータを渡します。12は千葉県(勝浦のサンガ焼き好きです。)
>>>response = requests.get(BASE_API_END_POINT+TARGET_URL, headers=headers, params=payload)
>>>response.text
'{"message":null,"result":{"prefCode":12,"prefName":"千葉県","cityCode":"","cityName":"","sicName":"","sicCode":"","simcName":"","simcCode":"","data":[{"year":2009,"value":2118886},{"year":2012,"value":2042622},{"year":2014,"value":2103767}]}}'

例によってこのままだとresponse.textが巨大な文字列の状態なので参照不可能なので、辞書型データに変換します。

>>>import json
>>>dict = json.loads(response.text)
>>>dict
{'message': None,
 'result': {'cityCode': '',
  'cityName': '',
  'data': [{'value': 2118886, 'year': 2009},
   {'value': 2042622, 'year': 2012},
   {'value': 2103767, 'year': 2014}],
  'prefCode': 12,
  'prefName': '千葉県',
  'sicCode': '',
  'sicName': '',
  'simcCode': '',
  'simcName': ''}}

綺麗なjsonになりました。ここから従業員数と年数を抜き出しましょう。

>>>for i in range(3):
    print(dict["result"]["prefName"],dict["result"]["data"][i]["year"],",",dict["result"]["data"][i]["value"])
千葉県 2009 , 2118886
千葉県 2012 , 2042622
千葉県 2014 , 2103767

これをcsvに落とし込むだけです。あと一息。csvというそのまんまの名前のモジュールを使います。

import csv
csv_name = "RESAS_data.csv"
with open(csv_name, "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["area_name", "year", "number"])
    for i in range(3):
        writer.writerow(["{}".format(dict["result"]["prefName"]), "{}".format(dict["result"]["data"][i]["year"]), "{}".format(dict["result"]["data"][i]["value"])])

print("csvに記入完了")
csvに記入完了 #こうやって作業毎にprint書いとくと、安心できますね。

できたものはMacで見るとこんな感じ
f:id:k_mawa:20171014230235p:plain