投資のためのデータサイエンス

個人の投資活動に役立つデータ分析にまつわる話題を綴ります。

米国の株価データ取得における注意点

これまで当ブログで紹介した手法をアレンジして米国の株価データに適用してみようとしたところ、Python実行に用いているJupyter Labのカーネルが落ちるというトラブルに見舞われました。

これはどうやらデータが利用できない銘柄についてデータを取りに行ったときに起こるものだということが推察されましたが、解決策がなかなか見つからず、いろいろ調べた結果、なんとか解決しました。以下ではその解決策について記述します。

まずいつものように必要なライブラリをインポートします。

import numpy as np
from datetime import datetime
import pandas as pd
import yfinance as yf
from datetime import datetime, timedelta
from pandas_datareader import data as pdr

次に、"S&P 500 Companies with Financial Information"というサイトからS&P500の銘柄リスト(CSV形式)をダウンロードして、それを読み込み、(一例として)ヘルスケア業界のみに絞り込みます。

df_tickers = pd.read_csv('constituents.csv')
df_healthcare = df_tickers[df_tickers['Sector'] == 'Health Care']
df_healthcare.head()

次に、上記で作成したデータフレームから銘柄コードのリストを作成し、そのリストの銘柄についてYahoo! Financeからデータを取得します。ここでは取得データフレームが空の場合の処理をしています。これにより、当該銘柄のデータが存在しない場合のトラブルは回避できるようです。

# 抽出する銘柄リストと抽出期間を指定
symbols = df_healthcare['Symbol'].tolist()
start = datetime(2023,10,1)
end = datetime(2023,10,31)
# Yahoo! Financeからデータを取得
df0 = pd.DataFrame()
for symbol in symbols:
    yf.pdr_override()
    df1 = pdr.get_data_yahoo(symbol, start, end)
    df1['ticker'] = symbol
    # 取得したデータフレームが空の場合の処理
    if df1.empty:
        print(symbol + " data is empty")
    else:
        df1['close'] = df1['Adj Close']
        df0 = pd.concat([df0, df1], axis=0)
df0.head()