どこにでもいる30代SEの学習ブログ

主にプログラミング関連の学習内容。読んだ本の感想や株式投資についても書いてます。

pandas-datareaderのインストール手順と米国株の株価取得方法

f:id:predora005:20210201003956j:plain
<pandas-datareaderで米国株の株価取得>*1

「pandas-datareader」で株価を取得します。以前、日本株の株価をスクレイピングで取得しましたが、「pandas-datareader」の方がより簡単に取得できました。

バンガード S&P500 ETF (VOO)の株価を取得し、グラフ表示するまでの手順を紹介します。

f:id:predora005:20210201003119p:plain

[1] インストール

[1-1] pipでインストール

公式の手順に従ってインストールします。pipコマンドでインストールが可能です。

pip3 install pandas-datareader

最新版をインストールする場合は、GitHubからダウンロードしインストールします。

pip3 install git+https://github.com/pydata/pandas-datareader.git

[1-2] 動作確認

正常に動作するか確認します。

import pandas_datareader as pdr

# 米国国債10年を5年分取得
gs10 = pdr.get_data_fred('GS10')
print(gs10)
#             GS10
# DATE            
# 2016-03-01  1.89
# 2016-04-01  1.81
#   ...(途中省略)...
# 2020-11-01  0.87
# 2020-12-01  0.93

ダウ平均株価が正常に取得できました。

[2] データソースを決める

[2-1] 使用可能なデータソースを確認する

pandas-datareaderでは複数のデータソースから、株価や為替の情報が取得できます。取得できる情報は下記リンクに掲載されています。

Remote Data Access — pandas-datareader 0.9.0rc1+2.g427f658 documentation

ユーザ登録しAPIキーの取得が必要なデータソースもあります。今回はAPIキー無しで株価が取得可能な「Stooq」を選択しました。

[2-2] Stooqでデータを取得してみる

公式に載っている、Stooqでダウ平均を取得するソースコードを実行してみます。

import pandas_datareader.data as web

# ダウ平均をSqooqで取得
f = web.DataReader('^DJI', 'stooq')
print(f.head())
#                 Open      High       Low     Close     Volume
# Date                                                         
# 2021-01-29  30553.91  30553.91  29856.30  29982.62  638488708
# 2021-01-28  30377.19  30951.41  30377.19  30603.36  528513252
# 2021-01-27  30893.78  30893.78  30206.91  30303.17  655432794
# 2021-01-26  30968.55  31121.42  30921.71  30937.04  441398941
# 2021-01-25  30989.85  30989.85  30564.06  30960.00  532855231

ダウ平均株価が正常に取得できました。

[3] 株価を取得する

[3-1] VOOの株価取得

バンガード S&P500 ETF (VOO)の株価を取得してみます。

import datetime

# バンガード S&P500 ETF (VOO)の2020年以降の株価を取得
voo = web.DataReader(
    'VOO', 'stooq', 
    start=datetime.datetime(2020, 1, 1)
)
print(voo)
#               Open      High     Low   Close   Volume
# Date                                                 
# 2021-01-29  345.31  346.2200  338.57  340.18  5803647
# 2021-01-28  345.97  351.0707  345.58  347.13  3432188
#   ...(途中省略)...
# 2020-01-03  291.08  293.1900  290.90  292.08  3294270
# 2020-01-02  293.12  294.2600  292.18  294.23  3194572
# 
# [272 rows x 5 columns]

DataReaderのAPI仕様は下記URLで参照できます。pandas_datareader.data.DataReaderはラッパーになっています。stooqを指定するとStooqDailyReaderが実際には使われます。

Stooq.com — pandas-datareader 0.9.0rc1+2.g427f658 documentation

[3-2] 株価をグラフ表示

取得したVOOの株価をmatplotlibでグラフ表示します。

import matplotlib.pyplot as plt

# 図と座標軸を取得
fig = plt.figure()
ax = fig.add_subplot(1,1,1)

# 折れ線グラフをセット
ax.plot(voo.index, voo['Close'], label='VOO')
ax.grid(axis='y', color='gray', ls=':')
ax.legend()

# 折れ線グラフを表示
fig.show()

f:id:predora005:20210201003119p:plain

終わりに

驚くべきほど簡単に株価が取得できました。取得した時点でDataFrameになっているのが最大のメリットですね。

しかも、株価だけでなく国債利回りやダウ平均、為替まで取得できるので、本当に無料で良いのかなと思ってしまうほどです。

*1:StockSnapによるPixabayからの画像