pandas.DataFrame型で保持した株価データを取得する
「pandasで複数銘柄の株価データ(pandas.DataFrame型)をpandas.DataFrame型で保持する」からの続き。
まず、前回の復習。
前回は次のようにして、複数の株価データをpandas.DataFrame型として取得した。
#coding:utf-8 import pandas as pd import datetime as dt import pandas_datareader.data as pdd ######## Define Method ######## def getMultiStockData(tickerList, date_from, date_to): def getStockData(ticker): stockData = pdd.DataReader(ticker, 'yahoo', date_from, date_to) return stockData datas = map(getStockData, tickerList) return pd.concat(datas, keys=tickerList, names=['Ticker', 'Date']) ######### 処理######### # 期間設定 date_from = dt.date(2016, 9, 24) date_to = dt.date(2016, 10, 6) # 株価取得 tickerList = ['AAPL', 'MSFT', 'IBM'] multiStockData = getMultiStockData(tickerList, date_from, date_to)
今回は、このように取得した株価データから必要な株価だけを取り出す。
実施することは次の2つ。
1.tickerを指定して特定の株価をDataFrameとして取得する
2.pivotを利用して特定のデータ(例:終値データ)を各ticker毎に一覧表にする
1.tickerを指定して特定の株価をDataFrameとして取得する
行番号ではなく、行名を使用してデータを選択するためlocを使用する。
例えばAAPLの株価データを取得するには次のようにする。
# AAPLを取得 print multiStockData.loc['AAPL'] # AAPLの終値を取得 print multiStockData.loc['AAPL']['Adj Close']
このように取得した終値をplotとしてみる。
#coding:utf-8 import pandas as pd import datetime as dt import pandas_datareader.data as pdd import matplotlib.pyplot as plt ######## Define Method ######## def getMultiStockData(tickerList, date_from, date_to): def getStockData(ticker): stockData = pdd.DataReader(ticker, 'yahoo', date_from, date_to) return stockData datas = map(getStockData, tickerList) return pd.concat(datas, keys=tickerList, names=['Ticker', 'Date']) ######### 処理######### # 期間設定 date_from = dt.date(2016, 9, 24) date_to = dt.date(2016, 10, 6) # 株価取得 tickerList = ['AAPL', 'MSFT', 'IBM', '^GSPC'] multiStockData = getMultiStockData(tickerList, date_from, date_to) print multiStockData # AAPLの終値を取得してplotする multiStockData.loc['AAPL']['Adj Close'].plot()
2.pivotを利用して特定のデータ(例:終値データ)を各ticker毎に一覧表にする
まず、pivotについては「pandasによるpivot 〜 複数行に渡って重複しているデータを、重複しているデータ毎に集計する」で取り上げた。
「indexをresetしてキーをカラムデータと認識させる」ことがポイント。
これらを踏まえて調整終値をpivotする。
#coding:utf-8 import pandas as pd import datetime as dt import pandas_datareader.data as pdd import matplotlib.pyplot as plt ######## Define Method ######## def getMultiStockData(tickerList, date_from, date_to): def getStockData(ticker): stockData = pdd.DataReader(ticker, 'yahoo', date_from, date_to) return stockData datas = map(getStockData, tickerList) return pd.concat(datas, keys=tickerList, names=['Ticker', 'Date']) ######### 処理######### # 期間設定 date_from = dt.date(2016, 9, 24) date_to = dt.date(2016, 10, 6) # 株価取得 tickerList = ['AAPL', 'MSFT', 'IBM', '^GSPC'] multiStockData = getMultiStockData(tickerList, date_from, date_to) # 終値を取得 adjClosingPrice = multiStockData[['Adj Close']] adjClosingPrice = adjClosingPrice.reset_index() # pandas.DataFrameをpivotingする adjClosingPriceTable = adjClosingPrice.pivot( index='Date', columns='Ticker', values='Adj Close' ) print adjClosingPriceTable
実行すると次のようにpivotingされる。
Ticker AAPL IBM MSFT ^GSPC
Date
2016-09-26 112.303406 152.595644 56.518189 2146.100098
2016-09-27 112.512333 155.360569 57.561143 2159.929932
2016-09-28 113.367940 156.866892 57.640604 2171.370117
2016-09-29 111.606985 156.688518 57.014834 2151.129883
2016-09-30 112.472544 157.421870 57.213489 2168.270020
2016-10-03 111.945245 156.193013 57.034697 2161.199951
2016-10-04 112.422796 155.053358 56.855908 2150.489990
2016-10-05 112.472544 155.667779 57.253222 2159.729980
2016-10-06 113.308249 155.469580 57.352553 2160.770020