Pythonを用いて株価を取得した後、同じデータを使って繰り返し分析するときに再度株価を取得するようにしてしまうと時間がかかってしまい、非効率です。
そこで、取得した株価データをデータベースにキャッシュ(cache)して、それを使いまわすことで作業を効率化してみます。
- 実行環境:
Windows10
※元記事はこちら
株価の取得
株価の取得にはpandas-datareaderを使います。
- pandas-datareaderのインストール
pip install pandas_datareader
※pandas-datareaderの使い方に関してはPythonのpandas datareaderをインストールして株価データを取得する方法【日本株・米国株】をご覧ください。
株価を取得してキャッシュする
株価をキャッシュするには、requests_cacheというモジュールを使います。
pip install requests_cache
キャッシュための下準備
以下は、キャッシュのための準備です。
from datetime import timedelta
from requests_cache import CachedSession
expire_after = timedelta(days=3) # 3日間キャッシュする
session = CachedSession(cache_name='cache', backend='sqlite',
expire_after=expire_after)
session.headers = {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:89.0) Gecko/20100101 Firefox/89.0',
'Accept': 'application/json;charset=utf-8'}
expire_afterは、キャッする期間です。
sessionのbackend=’sqlite’が、SQLite(データベース)にキャッシュすることを意味します。
株価の取得
import datetime
import pandas_datareader.data as web
start = datetime.date(2018,1,1)
end = datetime.date(2021,1,1)
# 株価チャートの取得
origin = web.DataReader('AAPL', 'yahoo', start, end, session=session)['Adj Close']
株価チャートの取得でのsession
オプションがポイントです(キャッシュしない場合は、これを削除すればよいです)。
これを実行すると、cache.sqliteというファイルが実行ディレクトリに作成され、AAPLの株価チャートのデータはキャッシュされます。
次の実行からは同じデータはキャッシュから呼び出されるので、APIから取得する時間はかかりません。
このような一つの銘柄だけではキャッシュしたありがたみが感じられませんが、たくさんのデータを取得したときにはキャッシュは作業効率化に有用です。
本記事のより詳しい説明および応用は以下の記事をご覧ください。