見出し画像

【Python】有価証券報告書データをAPIを使って取得しよう!(数千社分のデータを取得できます。)

*筆者が開発したのサービスのプロモーションを含みます。

 この記事では、有価証券報告書のデータをJP Funda APIというWebAPIを使って取得する方法を紹介します。

得られるデータの参考として、トヨタのデータを載せておきます。

{
    '会社名': 'トヨタ自動車株式会社',
    'EDINETコード': 'E02144',
    '証券コード': '7203',
    '有価証券報告書提出日': '2020-06-24',
    '会計期首': '2019-04-01',
    '会計期末': '2020-03-31',
    '連結経営指標': {
        '売上高': 29929992000000, 
        '売上収益': None,
        '営業収益': None,
        '営業収入': None,
        '営業総収入': None,
        '営業利益又は営業損失': None,
        '経常収益': None,
        '経常利益又は経常損失': None,
        '税引前利益又は税引前損失': 2554607000000,
        '当期利益又は当期損失': None,
        '親会社株主に帰属する当期純利益又は親会社株主に帰属する当期純損失': None,
        '包括利益': 1866642000000,
        '当期包括利益_親会社の所有者に帰属': None,
        '純資産額': None,
        '総資産額': 52680436000000,
        '一株当たり純資産額': None,
        '一株当たり当期純利益又は当期純損失': 735.61,
        '潜在株式調整後一株当たり当期純利益': 729.5,
        '自己資本比率': 0.381, '株価収益率': 8.8,
        '株主資本収益率': None,
        '営業活動によるキャッシュフロー': 3590643000000,
        '投資活動によるキャッシュフロー': -3150861000000,
        '財務活動によるキャッシュフロー': 397138000000,
        '現金及び現金同等物の残高': None,
        '従業員数': 359542,
        '平均臨時雇用人員': 86219
    }, 
    '非連結経営指標': {
        '売上高': 12729731000000,
        '売上収益': None,
        '営業収益': None,
        '営業収入': None,
        '営業総収入': None,
        '経常収益': None,
        '正味収入保険料': None,
        '経常利益又は経常損失': 1735365000000,
        '当期純利益又は当期純損失': 1424062000000,
        '正味損害率': None, '正味事業費率': None,
        '利息及び配当金収入': None,
        '運用資産利回り_インカム利回り': None,
        '資産運用利回り_実現利回り': None,
        '持分法を適用した場合の投資利益又は投資損失': None,
        '資本金': 635401000000,
        '発行済株式総数_普通株式': 3262997000,
        '純資産額': 12590890000000,
        '総資産額': 17809246000000,
        '預金残高': None,
        '貸出金残高': None,
        '有価証券残高': None,
        '一株当たり純資産額': 4377.19,
        '一株当たり配当額': 220.0,
        '一株当たり中間配当額': 100.0,
        '一株当たり第一四半期配当額': None,
        '一株当たり第二四半期配当額': None,
        '一株当たり第三四半期配当額': None,
        '一株当たり第四四半期配当額': None,
        '一株当たり当期純利益又は当期純損失': 504.25,
        '潜在株式調整後1株当たり当期純利益': 500.27,
        '自己資本比率': None, '自己資本利益率': 0.114,
        '株価収益率': 12.9,
        '配当性向': 0.436,
        '営業活動によるキャッシュフロー': None,
        '投資活動によるキャッシュフロー': None,
        '財務活動によるキャッシュフロー': None,
        '現金及び現金同等物の残高': None,
        '従業員数': 74132,
        '平均臨時雇用人員': 10795,
        '株主総利回り': 0,
        '株価指数における総利回り': 1
    },
    '研究開発_設備投資費': {
        '研究開発費': 1110369000000,
        '設備投資費': 1393014000000
    }
}

 こんな形のデータを上場しているほぼ全社分とることができます。
 データは少しわかりづらいところがあると思うので、最後の方で説明を加えます。

​ このAPIを使うと、プログラミングで処理しやすいJson形式で有価証券報告書のデータを取得することができます。現在約20,000通の有価証券報告書データをプログラムから取得できるので、大量のデータ(ビッグデータ?)を用いた企業分析が簡単にできます。

*この記事は、企業分析(ファンダメンタル分析)についての内容は含みません。あくまで、情報の取得方法について紹介しています。

以下の流れで紹介していきます。

1. APIにアクセスするためのトークンを発行

まずは、APIにアクセスするためのトークンを発行します。聴き慣れない言葉なので、難しそうですが、3分くらいで終わる簡単な作業です。
ではやっていきます!

まず、JP Funda APIのホームページ、Sing Up(ユーザー登録)ページに行きます。

スクリーンショット 2021-03-21 14.40.53

SignUpページにいくと、メールアドレスとパスワードの入力フォームがあるので、入力して下さい。ユーザー登録が完了すると、下の画像のようなユーザーホームに移動します。

スクリーンショット 2021-03-21 14.47.37

この画面まできたら、APIキーを取得することができます。先ほど登録したメールアドレスと、パスワードを左側のフォームに入力して、APIキーを表示というボタンを押すとAPIキーが表示されます。

スクリーンショット 2021-03-21 14.57.31

赤字で表示されるAPIキーをコピーしてください。ここまででAPIキーの取得は完了です。APIキーはログインしてユーザーホームに行けば何度でも取得可能なので、保存する必要はありません。

次は、curlで動作確認をします。(Pythonでやるから不要!という人は次のところは飛ばして、3. Pythonでデータを取得からみて下さい。)

2. curlで動作確認(任意です、飛ばしてもOK!)

JP Fundaのホームにいくと、curlでの使用例が下の方に乗っているので、こちらの通りに、curlでの動作確認をしていきます。ホームページにいろんなデータ取得方法の例が乗っているので、そちらを参照することもおすすめです。

では、ターミナルからcurlを使っていきます。今回は、証券コードでデータを取得します。

(ターミナル)
curl -X GET https://www.jp-funda.com/api/jp/securities_code/7203 -H 'Authorization: Token 888888888888888888888888888888888888888'

888888888888888888888888888888のところはAPIキーを入力するところです。先ほどコピーしたご自身のAPIキーを入力して下さい。

このように入力しエンターをすると、この記事の最初に載せてあるトヨタの有価証券報告書データが取得できるはずです。

スクリーンショット 2021-03-21 15.08.57

このままだと見にくいので、Jsonフォーマットサイトなどで整形して確認してみて下さい。

これでcurlでの動作確認は終了です。他にもいろんなやり方がホームページに乗っているので、試してみて下さい。

3. Pythonでデータを取得

 では、本題のPythonを使ったデータの取得をしていきます。Pythonのバージョンは3を使っています。
 全体のコードをGithubで公開しておくので、必要な方はダウンロード等して使って下さい。

まず、必要なライブラリをインストールします。(requests)

pip install requests

次にPythonコードです。

import requests

# ご自身のAPIキーを入れてください
API_KEY = '8888888888888888888888888888888888'


def get_by_securities(securities_code: str):
   """
   企業の証券コードを指定して有価証券報告書データを取得する
   使用例: get_by_securities('7203')<=トヨタ
   返り値: 取得したJsonデータを返す
   """
   # JP Funda APIのエンドポイントurl
   url = 'https://www.jp-funda.com/api/jp/securities_code/' + securities_code
   headers = headers = {'Authorization': f'Token {API_KEY}'}

   res = requests.get(url, headers=headers)
   return res.json()

if __name__ == '__main__':
   data = get_by_securities('7203')
   print(data)

こんな感じのコードで超簡単に取得できます。

↓Print結果

{'会社名': 'トヨタ自動車株式会社', 'EDINETコード': 'E02144', '証券コード': '7203', '有価証券報告書提出日': '2020-06-24', '会計期首': '2019-04-01', '会計期末': '2020-03-31', '連結経営指標': {'売上高': 29929992000000, '売上収益': None, '営業収益': None, '営業収入': None, '営業総収入': None, '営業利益又は営業損失': None, '経常収益': None, '経常利益又は経常損失': None, '税引前利益又は税引前損失': 2554607000000, '当期利益又は当期損失': None, '親会社株主に帰属する当期純利益又は親会社株主に帰属する当期純損失': None, '包括利益': 1866642000000, '当期包括利益_親会社の所有者に帰属': None, '純資産額': None, '総資産額': 52680436000000, '一株当たり純資産額': None, '一株当たり当期純利益又は当期純損失': 735.61, '潜在株式調整後一株当たり当期純利益': 729.5, '自己資本比率': 0.381, '株価収益率': 8.8, '株主資本収益率': None, '営業活動によるキャッシュフロー': 3590643000000, '投資活動によるキャッシュフロー': -3150861000000, '財務活動によるキャッシュフロー': 397138000000, '現金及び現金同等物の残高': None, '従業員数': 359542, '平均臨時雇用人員': 86219}, '非連結経営指標': {'売上高': 12729731000000, '売上収益': None, '営業収益': None, '営業収入': None, '営業総収入': None, '経常収益': None, '正味収入保険料': None, '経常利益又は経常損失': 1735365000000, '当期純利益又は当期純損失': 1424062000000, '正味損害率': None, '正味事業費率': None, '利息及び配当金収入': None, '運用資産利回り_インカム利回り': None, '資産運用利回り_実現利回り': None, '持分法を適用した場合の投資利益又は投資損失': None, '資本金': 635401000000, '発行済株式総数_普通株式': 3262997000, '純資産額': 12590890000000, '総資産額': 17809246000000, '預金残高': None, '貸出金残高': None, '有価証券残高': None, '一株当たり純資産額': 4377.19, '一株当たり配当額': 220.0, '一株当たり中間配当額': 100.0, '一株当たり第一四半期配当額': None, '一株当たり第二四半期配当額': None, '一株当たり第三四半期配当額': None, '一株当たり第四四半期配当額': None, '一株当たり当期純利益又は当期純損失': 504.25, '潜在株式調整後1株当たり当期純利益': 500.27, '自己資本比率': None, '自己資本利益率': 0.114, '株価収益率': 12.9, '配当性向': 0.436, '営業活動によるキャッシュフロー': None, '投資活動によるキャッシュフロー': None, '財務活動によるキャッシュフロー': None, '現金及び現金同等物の残高': None, '従業員数': 74132, '平均臨時雇用人員': 10795, '株主総利回り': 0, '株価指数における総利回り': 1}, '研究開発_設備投資費': {'研究開発費': 1110369000000, '設備投資費': 1393014000000}}

他のエンドポイントの利用方法もGithubの方に載せておきますので、良かったらみて見てください。

補足. 取得できるデータの説明

取得できるデータは、決算に詳しい方じゃないと、結構わかりづらいものかと思いますので、ちょっとした説明をします。

取得できるJsonのルートだけを見てみると、以下のようになっています。

{
   "会社名": "トヨタ自動車株式会社",
   "EDINETコード": "E02144",
   "証券コード": "7203",
   "有価証券報告書提出日": "2020-06-24",
   "会計期首": "2019-04-01",
   "会計期末": "2020-03-31",
   "連結経営指標": {...},
   "非連結経営指標": {...},
   "研究開発_設備投資費": {...}
}

 ルートには、基本的な情報である、会社名・証券コード・決算期間のデータが乗っています。そして、売上高や総資産といった企業分析に使用したいデータは下の方の、連結経営指標・非連結経営指標というところに入っています。

 基本的に株価に関係している指標というのは連結経営指標なので、企業分析に使用するデータは主にここから取得できます。ただし、少し注意が必要で、子会社を持たない企業は連結経営指標には何もデータが入らないので、非連結経営指標のデータを利用する必要があります。子会社を持たない企業の例としては、ホテル・ニューグランドがあります。この場合、得られるデータは以下のように連結経営指標は全てNoneとなります。

{
'会社名': '株式会社ホテル、ニューグランド',
'EDINETコード': 'E04566',
'証券コード': '9720',
'有価証券報告書提出日': '2021-02-25',
'会計期首': '2019-12-01',
'会計期末': '2020-11-30',
'連結経営指標':
    {
    '売上高': None,
    '売上収益': None,
    '営業収益': None,
    '営業収入': None,
    '営業総収入': None,
    '営業利益又は営業損失': None,
    '経常収益': None,
    '経常利益又は経常損失': None,
    '税引前利益又は税引前損失': None,
    '当期利益又は当期損失': None,
    '親会社株主に帰属する当期純利益又は親会社株主に帰属する当期純損失': None,
    '包括利益': None,
    '当期包括利益_親会社の所有者に帰属': None,
    '純資産額': None, '総資産額': None,
    '一株当たり純資産額': None,
    '一株当たり当期純利益又は当期純損失': None,
    '潜在株式調整後一株当たり当期純利益': None,
    '自己資本比率': None, '株価収益率': None,
    '株主資本収益率': None, 
    '営業活動によるキャッシュフロー': None,
    '投資活動によるキャッシュフロー': None,
    '財務活動によるキャッシュフロー': None,
    '現金及び現金同等物の残高': None,
    '従業員数': None, '平均臨時雇用人員': None
    },
'非連結経営指標':
    {
    '売上高': None,
    '売上収益': None,
    '営業収益': 3060721000,
    '営業収入': None, '営業総収入': None,
    '経常収益': None,
    '正味収入保険料': None,
    '経常利益又は経常損失': -785581000,
    '当期純利益又は当期純損失': -1095337000,
    '正味損害率': None, '正味事業費率': None,
    '利息及び配当金収入': None,
    '運用資産利回り_インカム利回り': None,
    '資産運用利回り_実現利回り': None,
    '持分法を適用した場合の投資利益又は投資損失': None,
    '資本金': 2011878000,
    '発行済株式総数_普通株式': 1179000,
    '純資産額': 1870367000,
    '総資産額': 7876952000,
    '預金残高': None,
    '貸出金残高': None,
    '有価証券残高': None,
    '一株当たり純資産額': 1586.56,
    '一株当たり配当額': None,
    '一株当たり中間配当額': None,
    '一株当たり第一四半期配当額': None,
    '一株当たり第二四半期配当額': None,
    '一株当たり第三四半期配当額': None,
    '一株当たり第四四半期配当額': None,
    '一株当たり当期純利益又は当期純損失': -929.78,
    '潜在株式調整後1株当たり当期純利益': None, '自己資本比率': None,
    '自己資本利益率': -0.457, '株価収益率': None, '配当性向': None,
    '営業活動によるキャッシュフロー': -758870000.0,
    '投資活動によるキャッシュフロー': -81619000.0,
    '財務活動によるキャッシュフロー': 1001546000.0,
    '現金及び現金同等物の残高': 542432000.0,
    '従業員数': 225, '平均臨時雇用人員': 75,
    '株主総利回り': 1, '株価指数における総利回り': 1
    },
'研究開発_設備投資費':
    {
    '研究開発費': None,
    '設備投資費': 57610000
    }
}

以上で終了です。ありがとうございます。
JP Fundaについて、コメント等あればTwitterからいただければ幸いです。
今後、DCFでの企業価値評価なども追加していこうと考えてます。


この記事が気に入ったらサポートをしてみませんか?