見出し画像

EDINETから自動で財務諸表データを取得するシステムの作り方

今回は、EDINETから自動で財務諸表データを取得し、データを保存するシステムを作る方法を紹介したいと思います。
EDINETの使い方については、ブログでも紹介していますが、それを応用して、財務データベースのようなものを作ることを今回の目標にしました。

株式投資をするには、財務データは非常に重要なデータですが、なかなか長期のデータを無料で、一括取得するのは難しいです。

そこで、EDINETから直接データを取得して、データベースのように使えるようにすることにしました。

この記事で作成する内容

この記事で作成するのは、上場企業の有価証券報告書の財務データをGoogleDriveに毎日自動で保存するシステムになります。

データの保存方法や最適な形式は用途によって異なってくると思いますが、今回は、だれでも簡単にできるようにGoogleDriveにCSV形式で保存することにしました。
(もちろん、少しコードを変更して保存先をデータベースにすれば、データベースに保存可能です)

定期実行のため、Google CloudのCloud Functions(Cloud Run)を使用する方法を紹介しますが、Cloud Functionsを使わずに手動でもしくは、スケジューラーなどで実行すれば、コストはかかりません。Cloud Functionsのコストも無料枠で収まるか、月に数十円程度です。(私の環境の場合ですので、あくまで参考としてください)

すべてのデータを一つのファイルに保存すると非常に大きなデータとなってしまい扱いづらいため、ここでは、複数のファイルに分割して保存し、必要に応じて結合する方法を採用しました。

例えば、一部の決算項目を取り出して、整理すると次のような結果が得られるイメージになります。

また、今回紹介するコードでデータを取得し、主要な財務項目データを検索、取得できるようにしたのが以下のサイトになります。

このサイトでは一部の財務項目に絞っていますが、元データにはより多くの項目が含まれています。


保存データの構成

保存するデータは大きく3種類あり、メタデータと、詳細データ、ラベルデータになります。

メタデータは、有価証券報告書の基本情報(企業名、会計期間、公開日など)を保存したcsvファイルです。

詳細データは具体的な財務項目の数値を保存したファイルです。
財務項目にはQname(Name)と呼ばれる財務項目識別用のラベルがあります。そのラベルや、期間情報などと項目の数値を保存したcsvファイルです。

ラベルデータは、Qname(Name)がどのような項目か日本語で表示できるようにするためのデータを保存します。また、親子関係(資産の項目の子要素に固定資産や流動資産があるという関係)についても保存します。

メタデータは年単位でファイルを作成、詳細データに関しては、1日単位でファイルを作成、ラベルデータは全体で1ファイルとしています。

具体的には、例えば、2023年、2024年のデータを取得した場合、以下のようなフォルダ構成になります。

  • main

    • 2023

      • 20230101.csv(2023/1/1の詳細データ)

      • 20230102.csv.....

    • 2024

      • 20240101.csv(2024/1/1の詳細データ)

      • 20240102.csv.....

  • concept_dict.pkl(ラベルデータ)

  • 2023.csv(2023年のメタデータ)

  • 2024.csv(2024年のメタデータ)

詳細データはmainフォルダに年ごとのフォルダの中に保存、メタデータとラベルデータはmainフォルダと同じ階層に保存します。

コード実行環境について

この記事では2つの実行方法を紹介します。

  1. Google Colaboratoryでの実行

  2. Cloud Functions(Cloud Run)での実行

Google Colaboratoryでの実行についてはファイルを共有するため、そのまま実行可能です。

Cloud Functionsについては、スケジューラと組み合わせて定期実行が可能です。

必要な準備

この記事の内容を実行するためには、以下の準備が必要になります。

  • Google アカウント(無料)

  • EDINT API(無料)(取得方法は後述)

定期実行をCloud Functionsで行う場合

  • Google Cloudへの登録(クレジットカードの登録が必要)(一定の使用を超えると料金が発生)

Google Cloudは最初に無料でもらえるクレジットがあるので、1~2か月運用してみるだけであれば、無料クレジットを使えば費用はかかりません。その後は費用が発生する可能性がありますが、ある程度永久無料枠でカバー可能です。
(Google Cloudに関して私の場合は、ほぼ永久無料枠の範囲内で使用しているため、現状、月に5円程度しか発生していません。)

EDINET APIの取得方法

EDINET APIの取得方法と、基本的なAPIの使い方については、以下の記事で紹介していますので、確認して、EDINET APIを取得してください。

実行方法

この記事は途中から有料となっています。
Google Colabでそのまますぐに実行できるようにしていますが、そのリンクは有料部分に記載しています。

購入後のイメージがしやすいように、購入後のコードの実行方法を説明しておきます。

有料エリアに記載されているGoogle Colabのリンクを開きます。

Google Colabを開いたら、ランタイムからすべてのセルを実行をクリックします。

警告が表示されますが、このまま実行をクリックします。

EDINET APIを入力します。

取得したいデータの日付範囲を入力します。

この場合は、2020/1/1から30日分のデータになります。

Google Driveへのアクセス許可が出た場合は、接続をクリックします。

アカウントを選択し、次へ、続行をクリックします。

その後、全体のコードが実行されていきます。

実行すると以下のようにファイルが生成されます。

保存したファイルを読み込んで整形すると例えば、以下のようなデータを取得できます。

この記事で紹介するコードの説明は記事の一番最後に簡単なものを掲載していますが、細かい部分を説明するとかなりの長さになるため、解説は少なめです。

その代わりに、すぐに動かせるようにGoogle Colabでの実行やコピペで簡単にCloud Runでの実行ができるようにしています。

基本的な処理の流れ

基本的な流れは以下のようになります。

  1. 指定した範囲の日時から、その期間に公開された有価証券報告書の一覧を取得する

  2. 現在も閲覧可能な状態であり、上場している企業の有価証券報告書(銘柄コードの存在する)を抽出する

  3. 抽出した対象の有価証券報告書をダウンロードする

  4. ダウンロードした有価証券報告書の xbrl ファイルを解析して、数値データを取得する。

  5. 数値に対応するqnameやcontextID, label,親子関係などを整理してCSV に保存する
    本格的にデータベースとして扱う場合には、CSV に保存するよりも、MySQLなどのデータベースに登録する方が良いと考えられます。
    今回は、簡単に実装できることを重視して、CSV 保存 としました。

Cloud Functionsでの定期実行

ここからはGoogle CloudのCloud Functionsを使って、EDINETから取得した財務データを Google ドライブ 上に定期実行で保存していくためのGoogle Cloudの設定を見ていきます。
これができれば自分で毎回実行しなくても、自動でEDINETの財務諸表データを蓄積していくことができます。

GoogleDriveAPIキー の取得方法

まずは Google Cloudのトップページにアクセスをし、コンソールをクリックします。

コンソールにログインすると、まだプロジェクトが存在しない場合には新しいプロジェクトを作成する画面になります。

すると次のような同意画面が表示されることがあるので、同意して続行を行います。

コンソールにログインすると、まだプロジェクトが存在しない場合には新しいプロジェクトを作成する画面になります。

プロジェクトの選択から新しいプロジェクトをクリックしてプロジェクトを作成していきます。

プロジェクト名は自由に決めて、作成を行います。

プロジェクトが完成したら続いてAPI キーの取得を行います。プロジェクトのホーム画面から、左側のメニューを開き、API と サービスを選択します。その中から有効な API と サービスをクリックします。

API と サービスの画面になったら、API と サービスを有効にする をクリックします。

すると 次のような API ライブラリに遷移します。ここで Drive API を検索します

Google Drive API が見つかったら有効にする をクリックします

続いて認証情報を取得していきます。API と サービスの中にある認証情報をクリックします。右側の認証情報を作成から、サービスアカウントを選択します。

サービスアカウントの詳細を入力する画面になりますので、任意のサービスアカウントや ID を入れて作成を進めます

作成したサービスアカウントは Google クラウドのコンソールの左側のメニューで、IAMと管理という項目のサービスアカウントをクリックすることで確認できます。

まだキーが存在しないのでキーを取得していきます。上記の画像のメールと書いてあるメールアドレスが表示されている部分をクリックします。するとサービスアカウントの詳細ページに移動します。

項目の中にキーという項目があるのでキーを選択し、鍵を追加から新しい鍵を作成をクリックします。

するとキーのタイプが表示されるのでJSONを選択し、作成を行います。

するとファイルがダウンロードされるので、credentials.jsonなど分かりやすい名前に変更しておきます。

Google ドライブの設定

Google ドライブのファイルを外部から操作するためには、先ほど作成したサービスアカウントにドライブへのアクセス権限を付与する必要があります。
まずはドライブで操作したいフォルダを作成し、そのフォルダの共有から、ユーザー入力の部分に、サービスアカウントのメールアドレスを入力します。
今回は、MyDrive上に「EDINET」フォルダを作成、その下に「main」フォルダーを作成してください。



こちらの赤枠内は以下の画像で黒塗の部分に表示されているメールアドレスになります。

また、ここで作成した、フォルダの ID を取得する必要があります。フォルダー ID は、URL のfolder/の後ろに続く文字列になります。この部分をメモしておきます。

ここまでで基本的な設定は終了です。

コードの中身

ここから先は、有料にさせていただきます。

ここから先は

36,635字 / 14画像

¥ 8,000

期間限定!Amazon Payで支払うと抽選で
Amazonギフトカード5,000円分が当たる

この記事が気に入ったらチップで応援してみませんか?