Pythonのpandas datareaderをインストールして株価データを取得する方法【日本株・米国株】

10月 3, 2021

株価分析をするには株価データの取得が必須なので,まずはデータを取得できるようにしなければなりません.

Pythonモジュール『pandas datareader』を用いることで,Yahoo!ファイナイスやその他APIから株価データを取得することができます.

本記事では,Pythonにpandas datareaderをインストールし,株価を取得する方法を解説します。

ただし,本記事ではPythonのインストールがされていることを前提に進めますので,Pythonのインストールがお済でない方は以下の記事を参考にPythonを使えるようにしておいてください.

pandas datareaderのインストール

pandas datareaderは,pipでインストールできます.

pip install pandas_datareader

それでは,pandas datareaderで株価を取得してチャートをプロットしてみましょう.

pandas datareaderによる株価データ取得

基本的には,pandas_datareaderによる株価データ取得は

import pandas_datareader.data as web
df = web.DataReader('銘柄','API', 開始日, 終了日)

で行います.以下で具体例を見ていきます.

日本株

まずは,日本株のデータを取得しましょう.

日経平均株価

日経平均株価を取得するには,以下のようにします.

import datetime
import pandas_datareader.data as web
import matplotlib.pyplot as plt

start = datetime.date(2008,1,1)
end = datetime.date.today()

df = web.DataReader('^N225', 'yahoo', start, end)

print(df)

株価の取得は

df = web.DataReader('^N225', 'yahoo', start, end)

の部分で行っています.引数は(’銘柄’,’API’,開始日,終了日)です.これによって,dfは以下のような値を持ちます.

                    High           Low          Open         Close       Volume     Adj Close
Date
2008-01-07  14667.849609  14438.610352  14549.379883  14500.549805  139800000.0  14500.549805
2008-01-08  14547.799805  14365.860352  14429.299805  14528.669922  146800000.0  14528.669922
2008-01-09  14602.650391  14271.570312  14364.709961  14599.160156  155500000.0  14599.160156
...                  ...           ...           ...           ...          ...           ...
2021-03-16  30026.400391  29755.470703  29770.390625  29921.089844   83800000.0  29921.089844
2021-03-17  29984.970703  29825.160156  29836.830078  29914.330078   74600000.0  29914.330078
2021-03-18  30485.000000  30041.500000  30148.480469  30216.750000          0.0  30216.750000

そして,以下が株価を取得してチャートをプロットするコードです.

上のコードとの違いは,プロットする部分と,(調整後)終値だけを取得するためにDataReaderの最後に[“Adj Close"]をつけている部分だけです.このコードを実行すると,右のグラフが得られます.

import datetime
import pandas_datareader.data as web
import matplotlib.pyplot as plt

start = datetime.date(2008,1,1)
end = datetime.date.today()

df = web.DataReader('^N225', 'yahoo', start, end)["Adj Close"]

df.plot(figsize=(8,6),fontsize=18)
plt.legend(bbox_to_anchor=(0, 1), loc='upper left', borderaxespad=1, fontsize=18)
plt.grid(True)
plt.show()

また,データ取得の部分は

df = web.DataReader("NIKKEI225", "fred", start, end)

でもOKです.ただし,APIが"fred"の場合は終値しか取得されませんから,[“Adj Close"]は不要です.また,日経平均株価に連動するETFでも良いならダイワ上場投信 – 日経225を指定する

df = web.DataReader('1320.T', 'yahoo', start, end)["Adj Close"]

でも可能です.

個別株(日本)

日本の個別株をプロットしてみます.銘柄の部分を証券コードにします.先ほどのデータ取得部分のコードを,

df = web.DataReader('6758.T', 'yahoo', start, end)["Adj Close"]

もしくは

df = web.DataReader('6758.JP', 'stooq', start, end)['Close']

に置き換えてください.これでソニー(6758)の株価を取得できます.

米国株

次に,米国株のデータを取得しましょう.

S&P500

df = web.DataReader('^GSPC', 'yahoo', start, end)['Adj Close']

または

df = web.DataReader('SP500', 'fred', start, end)

でS&P500のデータを取得できます.

ダウ平均株価

df = web.DataReader('^DJI', 'yahoo', start, end)['Adj Close']

もしくは

df = web.DataReader('DJIA', 'fred', start, end)

でダウ平均株価のデータを取得できます.

個別株(米国)

最後に,米国個別株を取得しましょう.銘柄の部分をチェッカーコードにするだけです.例えば,コカ・コーラ(KO)なら

df = web.DataReader('KO', 'yahoo', start, end)['Adj Close']

でOKです.

せっかくなので,複数の銘柄をいっぺんに取得・プロットしてみましょう.以下のコードでできます.

import datetime
import pandas_datareader.data as web
import matplotlib.pyplot as plt
 
start = datetime.date(2008,1,1)
end = datetime.date.today()
codelist = ["KO","PG","MSFT"]
 
df= web.DataReader(codelist, 'yahoo', start, end)["Adj Close"]
 
df.plot(figsize=(8,6),fontsize=18)
plt.legend(bbox_to_anchor=(0, 1), loc='upper left', borderaxespad=1, fontsize=18)
plt.grid(True)
plt.show()

まとめ

pandas_datareaderによる株価データ取得は,

import pandas_datareader.data as web
df = web.DataReader('銘柄','API', 開始日, 終了日)

でできます.以下はその例です.

日経平均株価

df = web.DataReader('^N225', 'yahoo', start, end)

日本個別株(例はソニー)

df = web.DataReader('6758.T', 'yahoo', start, end)

S&P500

df = web.DataReader('^GSPC', 'yahoo', start, end)

ダウ平均株価

df = web.DataReader('^DJI', 'yahoo', start, end)

米国個別株(例はコカ・コーラ)

df = web.DataReader('KO', 'yahoo', start, end)

※終値だけを取得するには,以下のように最後に['Adj Close’]を付けて下さい.

df = web.DataReader('^N225', 'yahoo', start, end)['Adj Close']

※一度株価を取得したらCSVファイルに保存し,初回以降はそれを読み込むことをおすすめします(方法はこちら).

他のデータ取得ライブラリ

株価データ取得をする他のライブラリとして,『fix_yahoo_finance』というものもあります.

使い方はpandas datareaderとかなり似ているので,本記事の内容も応用できると思います.

fix_yahoo_financeの使い方に関しては,以下の記事で解説しています.