pandas-datareaderを使ってみよう
pandas_datareader
CSVファイルやエクセルファイルなどをインターネットからダウンロードすることは、pandas だけでも行うことができますが、pandas_datareader を使うと、データソースへのアクセスをより簡単に行うことができるようになります。
インストール
pandas_datareader は拡張モジュールなので次のようにインストールします。
code: bash condaの場合
$ conda install pandas-datareader
code: bash pipの場合
$ pip install pandas-datareader
利用準備
pandas-datareader のバージョンが 0.8.0 までには、
pandas_datareaderをインポートするとエラーになる場合があります。
code:Ipython
In 1: import pandas_datareader as pdr /Users/goichiiisaka/anaconda3/envs/py36/lib/python3.6/site-packages/pandas_datareader/compat/__init__.py:7: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.
from pandas.util.testing import assert_frame_equal
これは、pandas_datareader で pandas が非推奨にしたpandas.util.testing を利用しているためです。
メッセージにあるようにpandas_datareader/compat/__init__.py の7行目にある、
pandas.util.testing をpandas.testingに修正するとこのメッセージが表示されなくなります。
code: Python 修正前
from distutils.version import LooseVersion
import sys
import pandas as pd
from pandas.api.types import is_list_like, is_number
import pandas.io.common as com
from pandas.util.testing import assert_frame_equal
code: Python 修正後
from distutils.version import LooseVersion
import sys
import pandas as pd
from pandas.api.types import is_list_like, is_number
import pandas.io.common as com
from pandas.testing import assert_frame_equal
pandas-datareader のバージョン 0.9.0 ではこの問題は修正済みです。
データソース
panda_datareader は次のデータソースからダウンロードをサポートしています。
データサイトによっては、APIキーが必要になるものがあります。
株式、投資信託、ETFの過去の1日の終値をデータAPIに提供しています
APIキーを取得するには登録が必要です(無料)
無料のアカウントはアクセスできるシンボル数に制限があります
Investors EXchange(IEX)は幅広いデータを提供しています
過去の株価は最長15年間利用できます。
IEX Cloud Consoleからの公開可能なAPIキーが必要です。
Aリアルタイムの株式と外国為替データを提供しています。
APIキーを取得するには登録が必要です(無料)
90以上の公式統計機関からの経済データを提供しています。
APIキーを取得するには登録が必要です(無料)
構造化された公開データの世界最大のリポジトリ
株式、投資信託、ETFの過去のデータを提供しています。
データの品質は必ずしも良いとは言えません。
セントルイス連邦準備銀行の研究部門が管理するデータベース
87のソースから500,000を超える経済時系列データを提供しています。
Kenneth French教授が自身のホームページで無料公開しているデータ
市場ポートフォリオ、時価総額ファクター、簿価時価比率ファクター、無リスク金利のデータからなる
世界銀行が公開している世界開発指標(WDI:World Development Indicators)
経済協力開発機構が公開している統計情報
欧州委員会で統計を担当する部局が公開する、欧州連合に関連する統計情報
TSPは運用する投資ファンドのパフォーマンスの履歴とリスク特性を公開しています。
NASDAQは株式の過去のデータを公開しています。
Stooqは、一般的なインデックスデータを公開しています。
日本株のデータも取得することができます。例:トヨタ 7203.JP
モスクワ証券取引所は過去の株式のデータを公開しています。
Yahoo Finance が公開している株式、為替の過去のデータ
日本株のデータも取得することができます。例:トヨタ 7203.T
利用方法
Yahoo Finance からアップル社の株価データをダウンロードするときは、
次のように行います。
code: pandas_datareader1.py
from datetime import datetime
import pandas as pd
import pandas_datareader as pdr
start=datetime(2010, 1, 1)
end=datetime(2020, 1, 1)
df = pdr.DataReader("AAPL", 'yahoo', start, end)
print(df.head())
code: Python
In 2: # %load pandas_datareader1.py ...: from datetime import datetime
...: import pandas as pd
...: import pandas_datareader as pdr
...:
...: start=datetime(2010, 1, 1)
...: end=datetime(2020, 1, 1)
...: df = pdr.DataReader("AAPL", 'yahoo', start, end)
...:
...: print(df.head())
...:
High Low Open Close Volume Adj Close
Date
2009-12-31 30.478571 30.080000 30.447144 30.104286 88102700.0 26.131752
2010-01-04 30.642857 30.340000 30.490000 30.572857 123432400.0 26.538483
2010-01-05 30.798571 30.464285 30.657143 30.625713 150476200.0 26.584366
2010-01-06 30.747143 30.107143 30.625713 30.138571 138040000.0 26.161509
2010-01-07 30.285715 29.864286 30.250000 30.082857 119282800.0 26.113146
データをキャッシュする
拡張モジュール requests_cache をインストールすると、ダウンロードしたデータをキャッシュすることができます。
requests_cache は拡張モジュールなので次のようにインストールします。
code: bash
$ pip install requests_cache
code: IPython
In 2: # %load pandas_datareader2.py ...: from datetime import datetime, timedelta
...: import pandas as pd
...: import pandas_datareader as pdr
...: from requests_cache import CachedSession
...:
...: expire_after = timedelta(days=3)
...: session = CachedSession(cache_name='cache', backend='sqlite',
...: expire_after=expire_after)
...:
...: start=datetime(2010, 1, 1)
...: end=datetime(2020, 1, 1)
...: df = pdr.DataReader("AAPL", 'yahoo', start, end, session=session)
...:
...: print(df.head())
...:
High Low Open Close Volume Adj Close
Date
2009-12-31 30.478571 30.080000 30.447144 30.104286 88102700.0 26.131752
2010-01-04 30.642857 30.340000 30.490000 30.572857 123432400.0 26.538483
2010-01-05 30.798571 30.464285 30.657143 30.625713 150476200.0 26.584366
2010-01-06 30.747143 30.107143 30.625713 30.138571 138040000.0 26.161509
2010-01-07 30.285715 29.864286 30.250000 30.082857 119282800.0 26.113146
CachedSession() に与えている backend='sqlite' で、SQLiteデータベースに格納します。
DataReader()を呼び出すときに、session= でキャッシュ・セッションを与えておくと、
キャッシュにデータがあるときは、そこから読み込むようになります。
この例では、キャッシュは3日間保存されます。
参考: