株式投資

バフェット・コード API データを取得・分析する GUI ツールを Python で作った

はじめに

バフェットコードという財務分析サイトが提供する web API(プレミアム会員になる必要があります)の活用について、当ブログでもいくつか記事を書いてきました。

バフェット・コード の API でデータを全取得する 1/3(準備編)
バフェット・コード の API でデータを全取得する 2/3(取得編)
バフェット・コード の API でデータを全取得する 3/3(後処理編)
バフェット・コード API データで作る!自分だけの最強株スクリーニング

今回はその発展です。
API データの取得と散布図プロットを行う GUI 上で行うツールを Python で作り、GitHub に上げました。

sarubee/buffett-code-api-tools
バフェット・コード web API 活用のための Python ツール. Contribute to sarubee/buffett-code-api-tools development by creating an account on GitHub.

このレポジトリに含まれる、bc-analizer.py (名前はそのうち変えるかも・・)がその GUI ツールのメインプログラムです。
バフェット・コードさんがかなり色々な項目のデータを提供してくださっていることで自由度が高いツールが作れたと自負しています。有望な銘柄の発掘や全体傾向の把握に活用できるはずです。
ご興味あればぜひお試しいただければと思います。
ただし、ご使用は自己責任でお願いします。当方は一切の責任を負いません。

何ができるの?

  • バフェット・コード API (仕様はこちら) にて提供されるデータを手元に取得
  • さらにそれらのデータを様々な形で散布図プロットして銘柄間で比較

・・と、書いてもイメージしづらいかと思いますので、こんな感じでプロットできます、という例を載せておきます。

  • 例1
    X軸: PBR, Y軸:予想PER、プロットサイズ:時価総額、で全銘柄をプロット

  • 例2
    X軸: 営業利益成長率, Y軸:予想PER、プロットサイズ:従業員一人辺り営業利益、で不動産業の予想配当利回り 3% より大きい会社をプロット

使用方法

起動

Python で bc-analyzer.py というスクリプトを指定して実行します。

$ python bc-analyzer.py [root_directory]

root_directory はデータの保存先(ロード元)ディレクトリを指定します。後で GUI 画面でも選択できるのでここでは省略も可能です。

データ取得

まずは API からのデータ取得です。
データ設定の画面は以下のような感じ。

各項目の意味は以下の通りです。

- Root Directory: データの保存先(ロード元)ディレクトリ (**必須**)
- Fetch: データ取得に関する設定
    - Overwrite CSVs: 保存済み CSV を上書きするかどうか
    - API Key: バフェット・コード web API のキー (データ取得時には**必須**)
    - Company: 会社情報データを取得するかどうか
    - Quarter: 財務データを取得するかどうか
        - Start : 財務データの取得開始年
        - End : 財務データ取得終了年
    - Indicator : 株価指標データを取得するかどうか
    - Fetch ボタン: 上記の設定に従い、データの取得を開始します
    - Stop ボタン: データの取得を停止します
- Log: プログラムの実行状況を出力します
Quarter、Indicator データ取得は取得済みの Company データの各銘柄について行うので Company データが先に取得されている必要があります(同時指定も OK)。

取得されたデータは、Root Directory 以下、次のような構成で保存されます。

保存ファイルツリー
{Root Directory}/
  ├- company/
  |    ├- columns.json   # company データ列名定義
  |    └- company.csv    # 全社 company データ
  ├- quarter/
  |    ├- columns.json   # quarter データ列名定義
  |    ├- {ticker}.csv   # 各社 quarter データ
  |    └- all.pickle     # 全社 quarter データを一つにまとめたもの (pandas.DataFrame)
  └- indicator/
       ├- columns.json   # indicator データ列名定義
       ├- {ticker}.csv   # 各社 indicator データ
       └- all.pickle     # 全社 indicator データを一つにまとめたもの (pandas.DataFrame)
all.pickle は Fetch 終了時または Stop 時に、{ticker}.csv を基に作成されます。
デモ

“Fetch” ボタンを実行すると、以下のような感じで API 経由でデータを順次取得していきます。
(右側のは単にプログラムが作ったファイルが順次作成されていく様を見せたかっただけ)

ただし、一日 500 リクエストの上限 があるので、全銘柄一気に、というわけには残念ながらいきません。。
リクエスト上限にかかったら一日待つようになっています。
全銘柄取得したい場合はがんばりましょう(笑)。途中 Stop ボタンを押すとそれまでに取得したデータをまとめてプロットできます。
また取得を再開する際は、”Overwrite” のチェックを外しておくと、取得済みの各 CSV の分はスキップします。

散布図プロット

さあ、いよいよ取得したデータを使って、散布図プロットを行いましょう!

Root Directory を起動時に指定(または GUI 画面で選択)すると、その下にある取得済みデータがロードされます。
また、”Fetch” ボタンを押して Fetch 処理が終了するか、”Stop”ボタンを押した時点でも、ロードし直されます。
そのロードされたデータがプロットに使用されます。

“Scatter Plot”タブは、以下のような画面になっています。

各項目の意味は以下の通りです。

- X-axis(**value 指定必須**)
- Y-axis (**value 指定必須**)
- Size
  - x軸、y軸、プロットサイズに何を使うかを value に指定します。
  - 横の "+" ボタンをクリックすると、列名(と追加定義関数)のリストを参照できます。リストからダブルクリックでエントリに挿入します。
  - quarter データの項目を選んだ場合は、Q4 (年間)値の最新のデータが使用されます。
  - quarter データに対しては、年平均成長率 cagr(), 平均 mean() も使用可能です。その場合、各年の Q4 の値を使って算出されます。
  - データ同士の演算も可能 (例: ex_operating_income / operating_income) ですが、quarter データと indicator データにまたがった演算はできません。
- Filter: プロット銘柄をフィルタリングします
  - 例1) 予想配当利回り5%以上の銘柄のみプロットする: `dividend_yield_forecast > 5`
  - 例2) 配当性向50%以下、かつ予想配当利回り5%以上の銘柄のみプロットする: `(dividend_payout_ratio < 50) & (dividend_yield_forecast > 5)`
- Category: 東証33業種のうちプロットする業種を選択
- ClickAction: プロット点をクリックした際の挙動
  - Open URLs below: 設定した任意の URL (TICKER と書いた部分はクリックした銘柄の証券コードに置き換えます)をブラウザで開きます。複数のURLを指定する場合はセミコロン(;)で区切ります。
  - Open company URL: クリックした銘柄の会社のURLをブラウザで開きます
- Annnotation: 銘柄情報のアノテーションの出し方
  - mouseover: プロット点をマウスオーバーした場合に出します
  - all: すべてのプロット点に出します(プロット銘柄数が少ない場合に活用してください)
- Plot ボタン:上記設定に基づきプロットを実行します
- Log: プログラムの実行状況を出力します
デモ

各項目を指定して Plot ボタンを押すとプロットされます。

まとめ

今回は bc-analyzer という GUI ツールを作成した話を記事にしました。
一つのツールの形にするというのは結構大変でした・・・(T T)。ヨチヨチ歩き状態のツールですが、やっと形にして記事にすることができたなあ、と嬉しいです。

テストは正直あまりしていないので(だってテストしようにもリクエスト数制限があったりするんだもん・・というのは言い訳)、不具合もたぶん色々あると思いますが、何かあればコメント欄でも GitHub の方にでもぜひぜひお願いします。
元々私も銘柄探索に活用したいと思って開発しているツールですので、作って終わり、ではなく、実際の投資に活かしていく中でツールも改良を進めて行きたいと考えております。

それではまた〜。

< こちらの記事もどうぞ >

Windows で Python ツールを簡単に動かす方法
はじめに先日の記事でバフェット・コード API を活用する Python ツールを作った話を書きました。ただ、こんな声が聞こえてきそうです。でも Python なんでしょ?動かすまでが面倒くさそう。...

コメント

タイトルとURLをコピーしました