このページではYahoo FinanceのデータをPythonで手軽に取得する方法を紹介します。取得のためにPythonライブラリのpandas-datareaderを使う方法を紹介します。
2023/6/6時点ではpandas-datareader単体では取得は出来なくなったようです。yfinanceモジュールでオーバライドをすることで問題が解決するとのこと。(情報元はこちら)
※ Yahoo Finance(国内)は自動取得(スクレイピング)は禁止しているようです。
※ Yahoo Finance(海外)取得したデータの再配布をしなければ問題なさそうです。
詳細はこちらをご確認ください。再配布をせず、個人利用であれば問題ないように読み取れますが、データ取得は自己責任でお願いします。
データソースの概要
Yahoo Financeについては皆さんご存じだと思いますので説明するまでもないと思いますが軽く紹介します。
Yahoo Finaceでは、株価、プレスリリース、財務データなどの金融データやニュース情報を提供している海外サイトです。2017年には、暗号通貨に関する情報も追加されました。
また、アカウントが作成することでポートフォリオ管理として利用することもできます。
pandas-datareaderによるデータ取得
pandas-datareaderの公式サイトには、Yahoo Financeからは2通りのデータ取得方法が紹介されております。
- Remote Data Accessによる取得
- Data Readersによる取得
2023年6月時点では上記の2つでは次に紹介するエラーにより取得できないようです。
その代わりに、公式ドキュメントは見つけることができませんでしたが、get_data_yahooモジュールを利用するとデータ取得ができるようです。ただし、yfinanceモジュールでオーバーライドが必要になります。
以下、pandas-datareaderにより日経平均株価を取得するサンプルになります。
import yfinance as yf
yf.pdr_override()
import pandas_datareader.data as pdr
df = pdr.get_data_yahoo('^N225', start='2019-09-10', end='2019-10-09')
df.head()
pandas-datareaderでエラーが発生する
サンプルコードに従ってデータを取得しようとすると以下のエラーが発生しました。
TypeError: string indices must be integers
上記のエラーの原因は、Yfinanceモジュールがアップデートされたのが原因のようです。
yfinanceをインストールしてpandas-datareaderをオーバライドすることで解決しました。
以下のように紹介されています。
yfinanceによるデータ取得
上で紹介した通り、Yfinanceモジュールのアップデートによりpandas-datareaderが不便になりました。そうなれば、pandas-datareaderは使わず、yfinanceを利用した方が自由度が高いように思えます。ここからは、yfinanceを利用したデータ取得方法についてご紹介します。
上記の通り、yfinanceにより取得したデータは、個人利用に限られますのでご注意ください。
yfinanceの利用方法についての詳細はこちらのドキュメントをご確認ください。
マイクロソフトのデータを取得
ここでは例としてマイクロソフトの株式情報を取得してみる。
データ取得にはTickerコードが必要なため、事前にYahoo! financeのマイクロソフトのページから、マイクロソフトのTickerコード(MSFT)を取得しておく。
import yfinance as yf
# マイクロソフトのデータを取得してみる。
msft = yf.Ticker("MSFT")
# マイクロソフトの株式に関する基本情報を取得する
info = msft.info
# ヒストリカル情報を取得する
hist = msft.history(period="1mo")
##### 以下はおまけ ####
# 時系列に関するメタデータ
# history_meta = msft.history_metadata
# 企業活動を確認する(配当, 株式分割, キャピタルゲイン)
# msft.actions
# msft.dividends
# msft.splits
# msft.capital_gains # only for mutual funds & etfs
# 株式数
# msft.get_shares_full(start="2022-01-01", end=None)
# 保有者にに関する情報
# msft.major_holders
# msft.institutional_holders
# msft.mutualfund_holders
# 決算に関する情報
# msft.earnings_dates.dropna(axis=0, thresh=1)
# ISINに関する情報
# msft.isin
# オプションの満期
# msft.options
# ニュース情報
# msft.news
# オプション情報
# opt = msft.option_chain('2023-06-30')
# opt.calls #opt.puts
infoは辞書型であり、あらゆる情報が含れております。例えば、会社情報として、住所、電話番号、webサイトのURL、業種、会社概要(テキスト)、従業員数等があります。他にも、株式情報(OHLCV)、配当情報、ファンダメンタル情報(ROE, ROA等)などここでは挙げれないほどあります。
histはpandas.DataFrame型でであり、Open、High、Low、Close、Volume、Dividends、Stock Splitsを取得できます。
earnings_datesを利用すると決算発表に関する情報も取得することができる。
他にもニュース情報やオプション情報を取得することもできる。
コメント