【Python】pandas-datareaderを使用した日本株の株価情報取得

みなさんこんにちは、ZeroTerasu(@ZeroTerasu)です。

今回は、株価をはじめとした様々な金融関連情報を取得できるPythonライブラリの「pandas-datareader」について解説致します。

以前は、”pandas.io”というpandasの一部だったのですが、現在は”pandas_datareader”という独立したライブラリになっています。

公式ライブラリのリンクは下記の通りです。

pandas-datareader — pandas-datareader 0.10.0 documentation

インストール方法

・anaconda環境(jupyterlab)の場合、セル上に下記コードを入力して「shift + Enter」でインストールされます。

・Windows, MACで且つanaconda環境をインストール済みの場合、ターミナルから下記コマンドを実行すると、anaconda環境ではなく、ローカルのpythonフォルダにパッケージがインストールされる場合があります。ローカル環境にインストールされた場合、jupyterlabでは使用出来ない場合があります。このケースの場合でjupyterlabでも対象のパッケージを使用したい場合は、jupyterlabのセルに下記コマンドを入力して操作を実行する必要がありますので、ご注意ください。

・下記コマンドでインストール出来ない場合、”pip”を”!pip”に変えてコードを実行してみて下さい。

pip install pandas-datareader
# 上記でうまくいかない場合
!pip install pandas-datareader

情報取得元

・公式ドキュメントによると、pandas-datareaderでは下記の17個のサイトの情報を取得することができる様子です。

Tiingo https://www.tiingo.com
IEX https://iexcloud.io
Alpha Vantage
Econdb
Enigma
Quandl
St.Louis FED (FRED)
Kenneth French’s data library
World Bank
OECD
Eurostat
Thrift Savings Plan
Nasdaq Trader symbol definitions
Stooq https://stooq.com/
MOEX
Naver Finance
Yahoo Finance

この中で、日本の株価を取得できるのは、「stooq」および「Yahoo Finance」です。

今回は、ポーランドの株価情報サイトである「stooq」を用いた株価情報取得について解説致します。

まずは、一般的な引数を下記に記述します。多くの引数を設定することが出来ますが、ここでは必要最小限の引数にだけ焦点を当てて解説致します。

pandas_datareader.data.DataReader(ticker-symbol, data_source, start, end, api_key)

・pandas-datareaderを使用して株価情報を取得するためには、上記のメソッドを使用します。

・’ticker-symbol’ と ‘data_source’ は必須項目です。

・’api_key’ は Alpha Vantage等APIキーの使用が必要な情報元のデータでは必須項目です。

・’start’ と ‘end’は任意項目です。

・そのほかの引数につきましては、公式ドキュメントに各メソッド毎に解説されていますので、併せてご参照下さい。https://pydata.github.io/pandas-datareader/py-modindex.html

stooqから株価情報を取得する方法

stooq使用時の数式:pandas_datareader.data.DataReader(‘ティッカー*’, data_source=’stooq’, start, end)

* ティッカー:stooqサイト上のティッカーシンボルを使用。主に下記のような表現が用いられている。

・日本指数:’^NKX'(日経225原物)

・日本株個別銘柄:’7203.JP’ (トヨタ自動車)

・米国指数:’^DJI'(DOW30), ‘^SPX'(S&P500), ‘^NDX'(NASDAQ100)

・米国個別銘柄:’AAPL.US'(APPLE)

data_source:情報取得元を記述します。今回は、’stooq’から取得します*。

* ‘yahoo’ = 米国yahooから取得する場合。’av-daily’ = Alpha Vantage の日足データを取得する場合

start:取得情報の開始日。(date型またはdatetime型で指定します。)
end:取得情報の開始日。(date型またはdatetime型で指定します。)

下記は、三菱UFJ銀行(8306)の2020年1月1日から本日までの株価を取得し、最新の5営業日分を表示させるコードです。

import os
import datetime as dt
import pandas_datareader.data as pdr

symbol = '8306.JP'
data_source = 'stooq'
start = dt.datetime(2020,1,1,1,1,10)
end = dt.date.today()

df = pdr.DataReader(symbol, data_source, start, end)
df[:5]

# 実行結果
	          Open	High	Low	  Close	Volume
Date					
2022-08-25	727.7	733.4	727.7	731.5	33973600
2022-08-24	725.0	730.9	724.3	728.1	39200900
2022-08-23	728.3	728.6	722.3	723.1	44046400
2022-08-22	728.3	732.4	727.6	732.4	34903600
2022-08-19	731.4	731.4	723.6	728.0	34318100

yahoo finance (米国)から株価情報を取得する方法

yahoo fianance使用時の数式:pandas_datareader.data.DataReader(‘ティッカー*’, data_source=’yahoo’, start, end)

・stooqと使い方は同じです。data_sourceの部分をyahooに変更します。また、ティッカーもyahoo fianceに掲載されている表記に合わせます。

* ティッカー:yahoo finance上のティッカーシンボルを使用。主に下記のような表現が用いられている。

・日本指数:’^N225′(日経225原物)

・日本株個別銘柄:’7203.T’ (トヨタ自動車)

・米国指数:’^DJI'(DOW30), ‘^GSPC'(S&P500), ‘^NDX'(NASDAQ100)

・米国個別銘柄:’AAPL'(APPLE)

エラー修正:2023-05-13

過去に掲載していた記事のコードではエラーが見られましたので、下記に修正コードを掲載します。

“yfinance”というモジュールのインストールが必要になっていますので、インストールされていない方は” pip install yfinance “でインストールからご対応お願い致します。

※履歴として過去に掲載していたコードも下に残しておきます。

修正後コード
import os
import datetime as dt
import pandas_datareader.data as pdr
import yfinance as yf
yf.pdr_override()

symbol = '8306.T'
# data_source = 'yahoo' <= yfinanceをオーバーライドして使用する場合、data_sourceの指定は不要です。
start = dt.date(2020,1,1)
end = dt.date.today()

df = pdr.DataReader(symbol, start, end)
df.sort_index(ascending=False)[:5] # Yahoo Fiananceのデータは、古いものから順に並んでいるため、最新データから並べる際は、降順にする必要があります。

# 実行結果
       High	      Low	        Open	     Close	      Volume	    Adj Close
Date						
2022-08-26	733.700012	729.599976	731.000000	732.000000	23703600.0	732.000000
2022-08-25	733.400024	727.700012	727.700012	731.500000	33973600.0	731.500000
2022-08-24	730.900024	724.299988	725.000000	728.099976	39200900.0	728.099976
2022-08-23	728.599976	722.299988	728.299988	723.099976	44046400.0	723.099976
2022-08-22	732.400024	727.599976	728.299988	732.400024	34903600.0	732.400024
過去掲載コード
import os
import datetime as dt
import pandas_datareader.data as pdr

symbol = '8306.T'
data_source = 'yahoo'
start = dt.date(2020,1,1)
end = dt.date.today()

df = pdr.DataReader(symbol, data_source, start, end)
df.sort_index(ascending=False)[:5] # Yahoo Fiananceのデータは、古いものから順に並んでいるため、最新データから並べる際は、降順にする必要があります。

# 実行結果
       High	      Low	        Open	     Close	      Volume	    Adj Close
Date						
2022-08-26	733.700012	729.599976	731.000000	732.000000	23703600.0	732.000000
2022-08-25	733.400024	727.700012	727.700012	731.500000	33973600.0	731.500000
2022-08-24	730.900024	724.299988	725.000000	728.099976	39200900.0	728.099976
2022-08-23	728.599976	722.299988	728.299988	723.099976	44046400.0	723.099976
2022-08-22	732.400024	727.599976	728.299988	732.400024	34903600.0	732.400024

コメント

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