pandas-datareader で株価情報を取得
はじめに
以下の記事で、JupyterLab App のインストール方法を記載しました。
今回は、Web上の様々なデータソースに簡単にアクセスできるパッケージ (pandas-datareader
) を使って、株価情報の取得を試してみます。
前提
JupyterLab App 及び、そのPython環境にpandas-datareader
がインストールされていることを説明の前提とします。詳細は上記記事を参照してください。
取得可能なデータ
バージョン0.10.0 (2021/7/13)時点では、公式ドキュメントの Contents/Remote Data Access
にサポートしているデータソースが記載されています。データソースによって取得できる情報は異なりますが、例えば、株価、為替、人口統計などがあります。
今回は、Yahoo Finance[1] を利用してみます。
株価情報の取得と可視化
サマリ
上場しているJR各社の株価を取得し、コーポレートカラー[2]を用いてグラフにします。
銘柄 | 証券コード | コーポレートカラー |
---|---|---|
JR東日本 | 9020.T | green |
JR西日本 | 9021.T | blue |
JR東海 | 9022.T | orange |
JR九州 | 9142.T | red |
1銘柄の情報取得
まずは、1銘柄 (JR東日本) の情報を取得してみます。
# パッケージ
import pandas_datareader.data as web
# 株価情報の取得
df = web.DataReader("9020.T", data_source='yahoo', start='2010-01-01')
JupyterLab で上記コードを実行して、df
を表示させてみると次のことが分かります。
- 2010年の大発会以降のデータが取得[3]されている。
- 高値(High)、安値(Low)、始値(Open)、終値(Close)、出来高(Volume)、調整後終値(Adj Close)のデータが存在する。
複数銘柄の情報取得とグラフ化
次に、全4銘柄の情報を取得し、終値(Close)をグラフ化してみます。
# パッケージ
import pandas_datareader.data as web
# 会社情報の定義 (JR東日本, JR西日本, JR東海, JR九州)
SYMBOLS = ["9020.T", "9021.T", "9022.T", "9142.T"]
COLORS = ["green", "blue", "orange", "red"]
# 株価情報の取得
df = web.DataReader(SYMBOLS, data_source='yahoo', start='2010-01-01')
# 終値のグラフ化
df["Close"].plot(figsize=(20,10), color=COLORS)
JupyterLab で上記コードを実行すると、次のようなグラフが表示されます。JR九州は2016年10月25日に上場したため、それ以降のデータのみ表示されています。
ポイント
- データの取得には、
pandas-datareader.data
モジュールのDataReader()
メソッド[4]を用います。様々なオプションがありますが、本記事では下記を指定しています。-
name
: データ名(1銘柄) or データ名のリスト(複数銘柄) -
data_source
: データソース(Yahoo Finance) -
start
: 取得開始日時
-
- データの可視化には、
pandas.DataFrame
モジュールのplot()
メソッドを使います。グラフ色の指定はSYMBOLS
とCOLORS
の順番を対応させる必要があります。
まとめ
以上、pandas-datareader
を使って、株価情報の取得を試してみました。
また、簡単な表とグラフでの可視化を行い、データ内容の確認も行いました。
-
リンクにある通り、米国版の Yahoo Finance のデータにアクセスしているようです。なお、日本語版の Yahoo Finance では、こちらにあるようにスクレイピングを禁止していますが、米国版と直接関係があるかは分かりません。いずれにしよ、APIキー不要で利用できるデータソースは、過度な負荷をかけないように留意が必要です。 ↩︎
-
Yahoo Financeのサイトからも同じデータがダウンロードできますので、気になる方は同じ値であることを確認してみてください。 ↩︎
-
GitHubリポジトリによると、様々なデータソースにアクセスするための入り口となるメソッドのようです。 ↩︎
Discussion