Yahoo Financeからコンセンサス予想を自動取得する方法

f:id:IsThisAPen:20210827212304p:plain
米国株の分析をPythonで効率化しましょう!

「じっちゃま」こと広瀬隆雄さんは,決算発表の前に「EPS・売上高のコンセンサス予想を書き留める」ことを推奨しています.

【外国株式】決算発表シーズンに投資家がやるべきこと

でも,Yahoo Financeは重いし,ウォッチリストとにらめっこしながら複数銘柄を調べるのはちょっと大変ですね.また,慣れていないと,どの数値をメモすれば良いかも悩んでしまうでしょう.

そこで,この処理をPythonで自動化することを考えてみましょう.
Googleアカウントさえあれば,この記事のコードをコピペして実行できます.

また,ティッカーシンボルを書き換えれば,自分のウォッチリストも作れます.

Pythonに馴染みのない人は,すごく簡単にできることに驚くはずです.

Pythonの使い方

Googleアカウントさえあれば,この記事のコードをコピペして実行できます.詳しくは次の記事を参照してください.

コード

まず,yahoo_fin をインストールします.

pip install yahoo_fin

必要なライブラリを読み込みます.

import yahoo_fin.stock_info as si
import pandas as pd
from collections import defaultdict

ウォッチリストを作成します.

watchlist = defaultdict(list)
watchlist['GAFAM'] = ['GOOGL', 'AMZN', 'FB', 'AAPL', 'MSFT']
watchlist['IPO'] = ['U', 'AI', 'AFRM', 'RPRX']
watchlist['GROWTH'] = ['ZM', 'OKTA', 'CRWD', 'DOCU']

データを取得します.

data = defaultdict(lambda: defaultdict(dict))
for k, v in watchlist.items():
    for ticker in v:
        # print(ticker, end = ', ')
        analysis = si.get_analysts_info(ticker)
        data[k][ticker]['next earnings date'] = si.get_next_earnings_date(ticker)
        for name in ['Earnings Estimate', 'Revenue Estimate']:
            data[k][ticker][name + analysis[name].columns[1]] = analysis[name].at[1, analysis[name].columns[1]]
            data[k][ticker][name + analysis[name].columns[2]] = analysis[name].at[1, analysis[name].columns[2]]


結果を出力します.決算発表日でソートしています.

res = defaultdict(dict)
for key in watchlist.keys():
    res[key] = pd.DataFrame(data[key])
    res[key].sort_values(by = 'next earnings date', axis = 'columns', inplace=True)
    res[key] = res[key].T
    print(key)
    display(res[key])


実行結果

上のコードを順番に実行すると,次が出力されます.

コンセンサス予想
コンセンサス予想


Yahoo Financeの以下の部分が取得できていることがわかります.

MSFT
MSFT (Yahoo Finance)