*** 当サイトはアフィリエイト広告を利用しています ***

【Python】株価データを自動で取得する方法

2023年8月15日

Pythonを使って株で儲ける勉強を始めました(笑)。
まずは株価を自動で取得する方法の備忘録です。

pandas_datareader と yfinance の2つライブラリを使って、米国Yahoo! Finance から株価の日足データを取得します。

【動作環境】
・Windows11 Home
・Anaconda 2.4.2 / Python 3.9.17
・pandas_datareader 0.10.0
・yfinance 0.2.27

Pandas_datareader のインストール

pandas_datareader はAnaconda用ライブラリがないので、pipでインストールします。

pip install pandas-datareader

pandas_datareader の公式ページに、Yahoo! Financeからデータを取得するサンプルコードが記載されていますが、試してみたところエラーで取得できません。

次に説明するyfinance と合わせて使うことで株価の取得ができる様になります。

yfinance のインストール

yfinance は pandas_datareader にオーバーライドして、Yahoo! Financeから株価を取得するためのライブラリです。
Anaconda用があるので私はこちらをインストールしますが、もちろん pip でもインストールできます。

conda install -c conda-forge yfinance

Github の yfinance 公式ページに、yfainance を pandas_datareader にオーバーライドさせて使うサンプルソースが公開されているので、これを使ってみます。

株価を自動取得するサンプルコード

下のサンプルプログラムは、2000年1月1日から今日までの東京証券取引所のソニーの株価を取得し、csvファイルに保存します。

from pandas_datareader import data as pdr
import yfinance as yf
import datetime


code = '6758.T'#ソニー
csv_name = code + '.csv'
start = datetime.datetime(2000, 1, 1)#開始日
end = datetime.date.today()#終了日を本日に設定

yf.pdr_override()#pandas_datareaderにyfinanceをオーバーライドする

data = pdr.get_data_yahoo(code, start, end)
data.to_csv(csv_name)
print(data.head())
print(data.tail())

確認のためにデータの最初と最後の5つも表示しており、Jupyter Notebookでは次の様に表示されました。

[*********************100%***********************]  1 of 1 completed
               Open     High      Low    Close     Adj Close   Volume
Date                                                                 
2000-01-04  15000.0  16125.0   4975.0  15350.0  12885.990234  8794200
2000-01-05  13850.0  13850.0  13850.0  13850.0  11626.772461  2073200
2000-01-06  13550.0  13625.0  12850.0  12850.0  10787.291016  9919800
2000-01-07  11850.0  12050.0  11850.0  11850.0   9947.810547  9360200
2000-01-11  12850.0  12850.0  12850.0  12850.0  10787.291016  2482600
               Open     High      Low    Close  Adj Close   Volume
Date                                                              
2023-08-04  12890.0  12990.0  12845.0  12925.0    12925.0  2027500
2023-08-07  12820.0  12975.0  12785.0  12915.0    12915.0  1724600
2023-08-08  12950.0  13015.0  12840.0  12975.0    12975.0  2060800
2023-08-09  12875.0  13045.0  12860.0  12985.0    12985.0  2253800
2023-08-10  12385.0  12635.0  12115.0  12565.0    12565.0  7794900

csvファイルを読み出すときの注意点

保存したcsvファイルを自動取得データと同じ形でDataframeに取り込むには、
・’Date’をインデックスにする(index_col=0)
・’Date’をdatetimeに変換(parse_dates=True)
という作業が必要になります。

import pandas as pd
import datetime


code = '6758.T'#ソニー
csv_name = code + '.csv'

#データをdfに取り込む
data = pd.read_csv(csv_name, index_col=0, parse_dates=True, infer_datetime_format=True)

#データの確認
print(data.head())
print(data.tail())

まとめ

pandas_datareader と yfinance の2つライブラリを使って、株価データを取得することができました。
これを使ってどうすれば儲けることができるのか!

次はバックテストのやり方を勉強します。

Python

Posted by Hiro