こんにちは、たくろー(@takuro_data )です!
Pythonで金融データ分析やバックテストをするために、基本的なデータの取得・加工を学んでいきましょう。
今回は、pandas-datareaderモジュールを使って、ドル円データを取得してみます。
環境
- macOS High Sierra
- Python3.7.0
- pandas0.23.4
- pandas-datareader0.7.4
ドル円データの取得
FRED(Fedral Reserve Economic Data)から、1971年からのドル円の日次データを取得します。FREDは、セントルイス連邦準備銀行(米国に12ある連邦準備銀行のひとつ)が運営している経済統計データ集です。
import pandas_datareader.data as pdr
import datetime
start = datetime.datetime(1971,1,4)
end = datetime.datetime(2019,8,30)
JPY_USD = pdr.DataReader('DEXJPUS', 'fred', start, end)
DataReader(stock_code, source, start, end)の形式で、データを取得することができ、endを省略すると、直近までのデータがダウンロードされます。引数は以下の通り。
引数 | 説明 |
---|---|
stock_code | データセット名 |
source | データ取得先 |
start | 取得開始日付 |
end | 取得終了日付 |
データ取得先には以下があります。詳細はpandas-datareaderのドキュメントを参照ください。
- Google Finance
- Morningstar
- IEX
- Robinhood
- Enigma
- Quandl
- St.Louis FED (FRED)
- Kenneth French’s data library
- World Bank
- OECD
- Eurostat
- Thrift Savings Plan
- Nasdaq Trader symbol definitions
- Stooq
- MOEX
グラフの表示
取得したデータをmatplotlibモジュールを用いて表示します。
%matplotlib inline
import matplotlib.pyplot as plt
JPY_USD.plot(color='darkblue')
plt.ylabel('JPY/USD')

1971年以前の固定相場制の1ドル360円から、円高に進み2000年代以降は75円から135円の間で推移していることがわかります。
データの切り取り
2009年9月〜2019年8月のデータを抽出してグラフ表示します。loc[ ]とスライス機能(:)を用いて必要なデータを指定できます。
JPY_USD1 = JPY_USD.loc["2009/9/1":]
JPY_USD1.plot(color="darkblue")
plt.ylabel('JPY/USD')

2008年9月のリーマン・ブラザーズの破綻後も、ギリシャの財政破綻や2011年3月11日の東大日本大震災で円高が進み、2011年10月31日に1ドル75.32円をつけました。その後、2012年11月の政権交代から日銀金融緩和などアベノミクス相場で円安が進みました。
日次データを月次データに変換
2009年9月〜2019年8月のデータを、resamapleメソッドを用いて日次データから月次データに変換して、データ末尾5行を表示します。
JPY_USD2=JPY_USD1.resample('M').last()
JPY_USD2.tail()

.last()とすると月末の値、.first()とすると月の初め、指定しないとその期間の平均値となります。resampleの引数の日付関連の頻度コードは以下の通り。
- D:日次
- B:毎営業日(平日)
- W:週次(日曜始まり)
- M:月末ごと
- SM:15日と月末ごと
- Q:四半期末ごと
- AまたはY:年末ごと
参考 DataFrameの時系列データのリサンプリングPyQドキュメント
グラフを表示すると、日足のチャートと比べて月足のチャートは細かい変動がなくなっていることがわかります。
JPY_USD2.plot(color="darkblue")
plt.ylabel('JPY/USD')

さいごに
今回は、pandas-datareaderでドル円のデータを取得しました。データの抽出やサンプリング期間の変更が容易にできました。
次回は、取得したデータから収益率を算出する方法を学びます。