バージョンの確認
今回使ったpythonのバージョンは以下です.
python --version
Python 3.5.1 :: Anaconda 4.0.0 (x86_64)
今回使うものをインストールします.
pip install quandl
pip install pandas-datareader
pip install jsm
pip install stockstats
金融関係のデータの取得
まず結論としては,Quandl, pandas_datareader, jsmあたりが存在し,Quandl, pandas_datareaderを使うのがよさそうです.(他にもあれば教えてください.ありそう.)
Quandl
公式のドキュメントはここ.
とりあえずアップルの株価を取得してみます.
import quandl
d = quandl.get("WIKI/AAPL")
d.columns
# Index(['Open', 'High', 'Low', 'Close', 'Volume', 'Ex-Dividend', 'Split Ratio',
# 'Adj. Open', 'Adj. High', 'Adj. Low', 'Adj. Close', 'Adj. Volume'],
# dtype='object')
d.shape
# (9162, 12)
ここになぞのWIKIというワードが入っていますが,これはデータの公開元で,このへんに書いてあります.
データは日時のみっぽい.
また,過去の記事でimport Quandl
となっているものもありますが,途中から小文字になったようです.
pandas_datareader
公式のドキュメント.
import pandas_datareader as pdr
d = web.DataReader("AAPL", 'google')
# Parameters
# ----------
# name : str or list of strs
# the name of the dataset. Some data sources (yahoo, google, fred) will
# accept a list of names.
# data_source: {str, None}
# the data source ("yahoo", "yahoo-actions", "yahoo-dividends",
# "google", "fred", "ff", or "edgar-index")
#以下略
d.shape
(1831, 5)
d.columns
# Index(['Open', 'High', 'Low', 'Close', 'Volume'], dtype='object')
一つめの引数でアップルを指定し,データソースにgoogleを指定しています.
データは同様に日次のみな模様.
取得期間の指定は以下のようにできる.
import pandas_datareader as pdr
import datetime
start = datetime.datetime(2015, 1, 1)
end = datetime.datetime(2017, 4, 12)
d = pdr.DataReader("AAPL", 'google', start, end)
d.shape
# (574, 5)
jsm
jsmは2015年で開発が止まっている上に,yahooからデータをスクレイピングしていると書いてあります.
yahooはここでスクレイピングは禁止と言っており,使わない方がいいかなあ,という感じです.
金融データをいじる
stockstats
取得した金融データをいじるパッケージとして,stockstatsがあります.
import stockstats
import quandl
d = quandl.get("WIKI/AAPL")
d.shape
# (9162, 12)
type(d)
# pandas.core.frame.DataFrame
stock = stockstats.StockDataFrame.retype(d)
type(stock)
# stockstats.StockDataFrame
stockstatsは,retypeメソッドによってpandas dataframeを拡張した,stockstats.StockDataFrameという型にかえてくれます.これによって,たとえばMACDの計算などを,
stock['macd']
# Date
# 1980-12-12 0.000000
# 1980-12-15 -0.033654
# 1980-12-16 -0.104902
# 1980-12-17 -0.112351
このように簡単に行ってくれます.
retypeに渡すデータフレームのkeyは,中のコードをみるとlower関数で小文字にしているので,大文字小文字の違いは吸収してくれそうですが,計算したいもののデータがない場合はkey errorになります.なので普通使われない変数を使うとき,もしくは変数が少ないときは,pandasのままの書いた方がいいかもしれません.