LoginSignup
4
3

More than 1 year has passed since last update.

【Python】pandas-datareaderで取得した株価データをデータベースにキャッシュして高速化

Last updated at Posted at 2021-10-10

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から取得する時間はかかりません。

このような一つの銘柄だけではキャッシュしたありがたみが感じられませんが、たくさんのデータを取得したときにはキャッシュは作業効率化に有用です。

本記事のより詳しい説明および応用は以下の記事をご覧ください。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3