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