LoginSignup
7
6

More than 5 years have passed since last update.

地域経済分析システム(RESAS:リーサス) API を使ってみる(2) 企業数を調べる

Posted at

市町村の企業数の産業大分類付きのデータをとってくるスクリプトのサンプルです。

なんちゃって状態での公開
自分にとって便利なようにつくってあるので、他のかたにはわかりにくいところがあるとは思いますので、適宜変更してつかってください。

コードはつなぎ合わせれば動くはずです。jupyter お使いの方ならセルにコピペしてください。最後に、csv で出力されるようになっています。

まず、産業大分類コード 各種コードも、API で取得できます。
産業大分類コード別にしか、データを取得できないので、このリストをつかって、一括して、データを取得します。

# 産業大分類
sicCode_list = {'A': '農業,林業',
 'B': '漁業',
 'C': '鉱業,採石業,砂利採取業',
 'D': '建設業',
 'E': '製造業',
 'F': '電気・ガス・熱供給・水道業',
 'G': '情報通信業',
 'H': '運輸業,郵便業',
 'I': '卸売業,小売業',
 'J': '金融業,保険業',
 'K': '不動産業,物品賃貸業',
 'L': '学術研究,専門・技術サービス業',
 'M': '宿泊業,飲食サービス業',
 'N': '生活関連サービス業,娯楽業',
 'O': '教育,学習支援業',
 'P': '医療,福祉',
 'Q': '複合サービス事業',
 'R': 'サービス業(他に分類されないもの)',
 'S': '公務(他に分類されるものを除く)',
 'T': '分類不能の産業'}

なんちゃってクラスです。

コンストラクタで、API-KEY を読み込みます。
連想配列を引数に送り込んで、execute します。

get_cat で、カテゴリデータ(産業大分類)を一括でとってきて、year_df で、データフレームに変換します。

大きなCSVファイルで公開していれば、このような作業は不要なのにと思いつつ、クラスつくりました。

#!/usr/bin/env python
# -*- encoding:utf-8 -*-
# anaconda default package のみ使う予定
import sys,os,re,json,inspect,requests
import datetime as dt
from pprint import pprint as pp
import numpy as np
import pandas as pd
from bs4 import BeautifulSoup
from IPython.display import display, HTML


# class 名の先頭は大文字のはずなんですが、面倒なんで、小文字にしています。
# my_args という連想配列を送り込んで処理します。
# rs という変数でつかいます。
class resas:
    # コンストラクタ
    def __init__(self):
        # ★★★ api-key の読み込み 同じフォルダ内にある前提です。必要に応じて書き換えてください。
        self.api_key =open('api-key.txt','r').read().rstrip()
        # action で、method を指定しています
        self.action_list = ['x',
                'get',
                'get_cat',
                'year_df',
                'dummy']

        pass

    # エラーのときは、None を返します。
    def execute(self,my_args={'action':'dummy'}):
        self.args = my_args
        action = self.args['action']

        # test 実行のとき dry = True
        self.dry =False
        if 'dry' in self.args:
            self.dry = self.args['dry']




        if action not in self.action_list:
            print(action + ' not in list' )
            return(None)

        # 実行結果をそのまま返します。 
        return(eval('self.' + action + '()'))
        pass

    def get(self):
        x = json.loads(requests.get('https://opendata.resas-portal.go.jp/' + self.args['url'], 
                 headers={'X-API-KEY':self.api_key}).text)
        return(x['message'],x['result'])




    def dummy(self):
        # under construction
        try:
         pass
        except:
         pass
        print('dummy......')
        return(None)

    # 産業分類などのデータをカテゴリーごともってくる
    def get_cat(self):

        cat_list = eval(self.args['cat'] + '_list')
        plist = "&".join([x + '=' + str(self.args['params'][x]) for x in self.args['params']])
        base_url = 'https://opendata.resas-portal.go.jp/' + self.args['url'] + '?' + plist
        xlist = {}
        for one in cat_list:
            url = base_url + "&sicCode=" + one
            if self.dry :
                print(url)
            else:
                xlist[one] = json.loads(requests.get(url,headers={'X-API-KEY':self.api_key}).text)['result']
        return(xlist)


    def year_df(self):
        cat_list = eval(self.args['cat'] + '_list')
        # year 一覧
        xlist = []
        for cat_id in cat_list:
            try:
                self.args['data'][cat_id]['data']
                for one in self.args['data'][cat_id]['data']:
                    tmp_xlist = [one['year']]
                    for item in self.args['items']:
                        tmp_xlist.append(self.args['data'][cat_id][item])

                    tmp_xlist.append(one['value']) 
                    xlist.append(tmp_xlist)

            except:
                pass

        xdf = pd.DataFrame(xlist,columns = ['year'] + self.args['items'] + ['value'])

        return(xdf)
        # 年ベースの csv にする
        # 対象 + カテゴリ


# 初期化までこのセル内で行います。
rs = resas()

神奈川県、平塚のデータを年をキーにした辞書形式で、取得します。都道府県コード prefCode を指定しないとデータをひっぱってこないようです。下位コードが指定してあるならば、上位のコードの指定は不要だと思うのですが、どうなんでしょうか?

次のコードは、産業大分類のデータを一括でとってきて、xlist に格納します。
year の指定はできないので、年は、リストで戻ってきます。
年指定が必要だったり、そうでなかったりするようです。

dry を True に指定すると、アクセスはせずに、URLを表示します。
神奈川県、平塚のパラメータは、params で指定します。

#全産業花火図 企業数、GET  api/v1-rc.1/municipality/company/perYear
my_args = {'action':'get_cat',
           'cat':'sicCode',
           'params':{'prefCode':14,'cityCode':14203},
           'dry':False,
           'url':'api/v1-rc.1/municipality/company/perYear'}
xlist = rs.execute(my_args)

辞書では、使いづらいので、dataframe に変換し、csv 形式で、temp.csv に保存します。

my_args = {'action':'year_df',
           'data':xlist,
           'cat':'sicCode', 
           'items':['prefName','cityName','sicCode','sicName']}
xdf = rs.execute(my_args)
xdf.to_csv('test.csv',index=False)
7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6