Pythonによる財務分析②-バフェットコードを用いて完全レクチャー! (全8回)

アイキャッチ 街並み



Python初心者
Python初心者
財務分析に必要なデータの取得のしかたがわからないよ…。

 

本記事では、バフェット・コードのAPIを使い「財務分析に必要なデータの取得方法」についてサンプルコードとともに解説をします!(記事にでてくるコードは配布しております。まとめにあるリンクからダウンロードください))

 

本記事は、全8回に渡って掲載される「Pythonによる財務分析バフェットコードを用いて完全レクチャー!」シリーズの第2回です!

 

このシリーズを読むとわかること
Python初心者でも、数百数千の企業の財務データを分析出来るようになる!

最終的に重回帰分析といった機械学習的手法もマスターできる!

 

今回取得するデータは、「 四半期毎の財務数値・日別の株価指標・直近営業日の株価指標」の3つになります。(本記事、2章で詳細を説明)

 

この3つは、財務諸表分析において、過去の業績をもとに企業評価をしたり、そうした財務情報から未来を予測する、といった観点から非常に大事なデータです。

 

記事の後半では、データを取得するために3種類それぞれ作成したコードを、関数化させ一気にまとめて取り込めるようにします。

 

関数化をすることで、複雑になったコードの読みやすくするだけでなく、ステップ数(コードの行数)を減らし、作業時間を少なくとも30分は減らすことができます。

 

「データの取得」は分析の全ての始まりです。

“Garbage In Garbage Out”という言葉があるように、取得が適当になるとそのまま分析結果に影響するため、気を引き締めて行いましょう!

 

それでは一緒に学んでいきましょう!

データの取得/データの加工/データの分析を学べる第1回はコチラ!

アイキャッチ 街並み

Pythonによる財務分析① バフェットコードをつかって完全レクチャー! (全8回)

 

Pythonによる財務分析をバフェットコードのAPIを利用して行おう!

キーボード 書類

第2回以降では、バフェット・コードのAPIを用いて財務分析を行っていきます!

こちらのAPIを利用することで、前回(第1回)と違い数百数千の企業の財務データを取得できるようになります!

アイキャッチ 街並み

Pythonによる財務分析① バフェットコードをつかって完全レクチャー! (全8回)

バフェットコードのAPIとは

  バフェットコードAPIとは、バフェットコードのプレミアム有料会員になることで利用できる圧倒的に便利なサービスです。

こちらのAPIを利用することで、EDINETをわざわざ介さず、加工しやすい数百数千の財務データを取得することができます!

豆知識
プレミアム会員になるには以下のURLを参照ください。

https://blog.buffett-code.com/entry/plans

バフェットコードのAPI買い

バフェットコードのプレミアム有料会員は月10,800円します。

金額的には高いですが、Pythonで財務分析を行う勉強代としてはかなり割安です。

大きな理由としては、2点。

①開発難易度が死ぬほど高い、有価証券報告書のデータ化をしてくれている。

バフェットコードのAPIをつかえば、めんどうな作業が不要になります。

有価証券報告書をデータ化してまとめる際の、企業ごとの会計基準や業種間の勘定科目の違いなどに対して、マルチに対応する労力がいっさいかかりません。

②バフェットコードのデータはあつかいやすい

バフェットコードのAPIではめんどうなデータを加工し、あつかいやすくしてくれています。

バフェットコードのAPIのデータ取得元はEDINETという金融庁の情報公開システムです。

その、EDINETから取得できるデータはEBRL形式というもので、直接あつかうとなるとクセが強いですが、バフェットコードのAPIをつかえば問題ありません。

ちなみに、初心者がすべての時間を使い開発をするとしたら、会計学やプログラミングなどの知識も今まで以上に増やす必要があり1年以上は軽くかかります

ご自身で開発するのもひとつの手ではありますが、時間と労力に見合った利益を得られるかはなんとも言えません。

機会損失を許容するかは個人の判断ですが、

1日コーヒー1杯ていどの金額で、バフェットコードのAPIを利用できるのは投資対象として、買いだと断言できます。

(めちゃくちゃ宣伝していますが、WineyTradeはバフェット・コード様と取引関係になく、お金をいただいているなど、一切ございません。)

バフェットコードのAPIによる「データの取得」の準備をしよう!

まず、APIで取得するデータをみていきます。

以下のものを取得します。

  • 四半期毎の財務数値
  • 日別の株価指標
  • 直近営業日の株価指標

 

ちなみに、バフェットコードのAPIで取得できるデータ群は他にもあるよ。下の画像をみてね。

バフェットコード API データ群

出典:『バフェットコードAPI

新規ファイルを作成する

ジュピター・ノートブックを立ち上げ、新規ファイルを作成します。

前回作成した「python財務分析」フォルダの中に、下の画像のように今回(第2回)のファイルを作成します!

(記事のまとめにてファイルを添付していますので、必要であればダウンロードしてください。)

APIを取得するための関数を作成する

requestsjsonをインポートし、最初のセルに下記のようなfetch関数を作成します。

jupoter フォルダ

このfetch関数は下記、バフェット・コード様の公式ブログを参考にしました。

プレミアムプランの目玉!Web API機能を使ってみよう

 

Pythonを使い財務分析に必要な3種類のデータを取得しよう!

取得を行う前に、「四半期毎の財務数値」「日別の株価指標」「直近営業日の株価指標」それぞれのデータの使い道について解説します。

四半期毎の財務数値
四半期決算や本決算といった企業の業績データのことで、成長性や安全性など多くの財務指標に加工するときに使います。

財務諸表分析でオーソドックスに用いられる財務データです。

日別の株価指標
株価や株価によって算出されるPER,PBRといった株価指標を取得できるデータのことで、株の割安性やリターンを求める際に用いられます。

本シリーズでは主に重回帰分析の目的変数として利用します。

直近営業日の株価指標
「日別の株価指標」と同じように、株価や株価によって算出されるPER,PBRといった株価指標を取得できるデータのことです。

同じく、主に重回帰分析の目的変数として利用します。

それでは、3種類の財務データの取得方法を順番にみていきましょう!

四半期の財務数値を取得する

バフェットコードのAPIの仕様で、一回のリクエストにつき3社のデータを取得できるため、3社分取得できるように下記のようなコードを書きます。

APIキーは伏せています。)

python コード api

四半期の財務数値は、1リクエストあたり最大3年分(12四半期)取得できますが、今回は直近1年間分を取得します。

理由は、次の章で行う毎日の株価指標が、1リクエストあたり最大1年分のため、時系列のスケールを合わせるためです。試しに実際に実行してみます!

バフェットコード データ

ちなみに、一つのみ取得したい場合は下の画像のように“None”を入れると空のデータが返ります。

バフェットコード API

日別の株価指標を取得する

四半期のセルの下に下記のようなコードを書いていきます。

その際、期間を四半期の財務数値の時系列と合わせるように指定します。

df_d_list[2]は確認用だよ。

python コード

試しに実行してみます。

バフェットコード 取得データ

日別の株価指標を、四半期ごとにデータを分割し平均化をする

現時点で四半期と日別のデータを取得していきました。

このままですと時間のスケールが異なるため、日別の株価指標を四半期ごとに分割し平均化をしていきます。

datetimeをインポートし、下記のようなコードを書いていきます!

その際、期間の指定の方法として、少し変更を加えていますので注意しましょう。

python コード

python コード

試しに実行させると、画像の通り4分割されたことが確認できます。

python コード

直近営業日の株価指標を取得する

 最後に直近営業日の株価指標のコードを書いていきます。

下の画像では既に実行しています。

python コード



バフェットコードのAPIで取得できるデータを、一気に取り込めるようにしよう!

 データの取得の際に今まで書いてきたコードを関数化させ、銘柄を入力するだけで3種類のデータを一気に取り込めるようにします!

 関数化をする(一気に取り込めるようにする)ことで以下のメリットがあります。

  1. 引数(今回だと銘柄コード)を入れると返り値(今回だと財務データ)が出力される、といった簡単な設計になり、コードが読みやすくなるだけでなく、出力したい値をまとめることができる。
  2.  機能ごとに関数化(やクラス化)をすることで、コードの一部変更が起きてもバグが起きにくい。
  3. 共通の処理を行うプログラムをわざわざ重複して書く必要がないため、ステップ数(コードの行数)が約1/2の節約になる。

他にも、基本的に現場だとチーム開発が主流ですので、他人に読ませるコードを書くために、機能ごとに関数化させることがメジャーです。

是非、関数化をして一気に取り込めるようにしましょう!

今まで書いてきたコードを関数化させて一つにまとめる

今回は下の画像のように、make_df関数を作成しました。

その下に、各データ操作で行われる、3つの銘柄コードを分割するsplitをすぐに書きました。

他に関しては、各指標をコピペするだけで基本的には大丈夫です。

python コード

コピペの注意点が、2つあります。

  1. 確認用の変数とinput関数を、コメントアウトさせるか削除して、make_df関数の処理に影響させないようにします。
  2. from datatime import*」をmake_df関数の外側に書きimportエラーを防ぎます。

他にも、重複部分をこちらでコメントアウトさせてますが①・②を意識して頂ければプログラムは正常に動きます。

python コード python コード
最後にreturnを設定するよ。

 

python コード

返り値を df_list, df_day,df_c_listとしています。

実行し一気に取り込めることを確認する

最後に実行をさせ、取り込めることを確認します。

make_df関数のセルの下に下記のようなコードを書きます。

python コード



まとめ

2回では、Pythonで本格的な財務分析を行うための、

  • バフェットコードのAPIについて知る
  • 「データの取得」で必要な3種類の財務データを取得する
  • 取得するためのプログラムコードを関数化させ、データを一気に取り込む

について、レクチャーしました。

次回の第3回では、for文やwith構文を用いて数百数千の財務データを取得し保存する流れをレクチャーしていきます!

記事にでてくるコードはLINE@にて配布をしております!
ラインのメッセージ欄に「財務分析」とお送りいただければ、ダウンロードリンクを送付いたします!

 

コード配布はLINE@にて!!
  友だち追加

6件のコメント

こんにちは。fetch関数について、コードを拝見したく思いましたが、LINEの方ではすでにポートフォリオ理論についてのpythonコードしか確認できませんでした。願わくばpythonによる財務分析についてのコードを公開していただきたいのですが、構わないでしょうか?

python_zaimuさん、記事をご覧いただきありがとうございます!

>LINEの方ではすでにポートフォリオ理論についてのpythonコードしか確認できませんでした
>願わくばpythonによる財務分析についてのコードを公開していただきたいのですが、構わないでしょうか?

大変失礼いたしました。
結論、LINE@にて「財務分析」とお送りいただければソースコード(全8回分)のダウンロードが可能な状態へ修正いたしましたので、
ご確認のほどお願いいたします!

WineyTradeのコンテンツを楽しんでくださり、ありがとうございます!
今後も「おもしろい!」と思っていただけるようなコンテンツを発信していきますので、
よろしくお願いいたします!

こんばんは。本記事を参考にコードを書いているのですが、今回(第2回)の最初のコードの実行でつまづいてしまいました。
LINEからソースコードはダウンロードしたのですが、どの部分に自分のAPIキーを入力すればいいのかが分からず、先に進むことができなくなってしまいました。
もしよろしければどの部分を書き換える必要があるのかをお教えいただきたく思います。
バフェットコードのプレミアムプランには入会しました。

ご連絡ありがとうございます!プレミアムプラン入会されたのですね!

回答に答えさせていただきます。
記事の3.0.1の「四半期の財務数値を取得する」という節以降で、
各セルの中にある、
apikey = “YourApiKey”
という行の、
YourApiKeyという文字列を自分のAPIキーに上書きしてください。

くわしくはこちらを参考にすると良いと思われます!
https://www.google.co.jp/amp/s/blog.buffett-code.com/entry/how_to_use_api%3famp=1

ご返信いただきありがとうございます。
LINEからダウンロードした第2回のソースコードをお教えいただいた方法で変更を加えましたが、実行しても結果が表示されず、コードの左の欄に”入力[*]”のような文字が出ます。エラー表示はありません。

お教えいただいたリンク先のコードをコピーして自分のAPIキーに変更したところ、そちらは問題なく実行結果が表示されました。

この場合、実行できない原因はどのようなものが考えられるのでしょうか。
たびたび申し訳ございませんが、ご返信いただけると幸いです。

こんばんは。
masaと申します。
こちらの記事を参考にさせてただいているのですが、LINEからダウンロードした第2回のソースコードを実行しても結果が表示されず、コードの左の欄に”入力[*]”のような文字が出てしまいます。エラー表示はありません。
apikey = “YourApiKey” のYourApiKeyを自分のAPIキーに書き換える以外で変更が必要な部分はありますか?
お教えいただけたら幸いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA