pandas.DataFrame型で保持した株価データの可視化1

pandas.DataFrame型で保持した株価データを取得する」で取得したデータを可視化する。

これまで可視化は下記のエントリーで触れた。そこと重なる内容も多々あるが、復習もかねる。

Pythonでのプロットと可視化(matplotlib編) 〜 まとめ
Pythonでのプロットと可視化(pandas編) 〜 pandas.Seriesのplot
Pythonでのプロットと可視化(pandas編) 〜 pandas.DataFrameのplot

今回は下記3つを扱う

1.調整終値のチャート作成
2.出来高のbarチャートの作成
3.株価と出来高を1つのグラフにする

まず前回の株価取得のコードは次。

#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(2006, 9, 24)
date_to = dt.date(2016, 10, 6)

# 株価取得
tickerList = ['AAPL', 'MSFT', 'IBM']
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'
)

1.調整終値のチャート作成
これは簡単。これまでにも何度も実施した。次のようにすると複数銘柄の折れ線が描かれる。

# 終値データの可視化
adjClosingPriceTable.plot()

2.出来高のbarチャートの作成
今回はAAPLの出来高のbarチャートを作成する。
複数銘柄の株価データからカラム名出来高データを取り出し、更にlocメソッドを使用してAAPLのデータに絞り込む。
そして、データのindexとデータをbar関数でbarチャートにする。
データ取得以降のプログラムに次のチャート作成部分を付け加える。

### AAPLの出来高のbarチャートを作成
vol_multiStock  = multiStockData.Volume         #出来高データをピックアップ
vol_AAPL        = vol_multiStock.loc['AAPL']   #出来高データのうち、AAPLのものをピックアップ
volIndex        = vol_AAPL.index                #インデックスを取得

plt.bar(volIndex, vol_AAPL)                     #barチャートの作成

3.株価と出来高を1つのグラフにする
これは新しいテーマ。
matplotlibのsubplot2gridを使用する。
まずは終値までを描く。

#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(2014, 9, 24)
date_to = dt.date(2016, 10, 6)

# 株価取得
tickerList = ['AAPL', 'MSFT', 'IBM']
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'
)

### グラフ作成
# subplot2gridを使用して描画領域を作成
top = plt.subplot2grid(
    shape=(4,4),
    loc=(0, 0),
    rowspan=3,
    colspan=4
)

# 描画領域topにプロット
top.plot(
    adjClosingPriceTable.index,
    adjClosingPriceTable['AAPL'],
    label='Adjusted Close')

# タイトルを付ける
plt.title('AAPL Adjusted Close Price')

# labelの位置を決めてlabelを貼り付ける
plt.legend(loc='best')

株価チャートが作成される。

次に、株価チャートの下に出来高グラフを描く。
株価チャートを描くコードの次に、次の出来高を描く部分を追加する。

## 2.出来高チャート部分を作成
# subplot2gridを使用して描画領域を作成
bottom = plt.subplot2grid(
    shape=(4,4),
    loc=(3,0), # 株価チャートのrowspanが3なので、barチャートを描くように縦方向の描画開始位置に3を指定する
    rowspan=1,
    colspan=4
)

# bar関数を使用してbarチャートを作成
bottom.bar(
    adjClosingPriceTable.index,
    multiStockData.loc['AAPL'].Volume
)

# タイトルを付ける
plt.title('AAPL Volume')

全部通したコードは次。

#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(2014, 9, 24)
date_to = dt.date(2016, 10, 6)

# 株価取得
tickerList = ['AAPL', 'MSFT', 'IBM']
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'
)

### グラフ作成
## 1.株価チャート部分を作成
# subplot2gridを使用して描画領域を作成
top = plt.subplot2grid(
    shape=(4,4),
    loc=(0, 0),
    rowspan=3,
    colspan=4
)

# 描画領域topにプロット
top.plot(
    adjClosingPriceTable.index,
    adjClosingPriceTable['AAPL'],
    label='Adjusted Close')

# タイトルを付ける
plt.title('AAPL Adjusted Close Price')

# labelの位置を決めてlabelを貼り付ける
plt.legend(loc='best')

## 2.出来高チャート部分を作成
# subplot2gridを使用して描画領域を作成
bottom = plt.subplot2grid(
    shape=(4,4),
    loc=(3,0), # 株価チャートのrowspanが3なので、barチャートを描くように縦方向の描画開始位置に3を指定する
    rowspan=1,
    colspan=4
)

# bar関数を使用してbarチャートを作成
bottom.bar(
    adjClosingPriceTable.index,
    multiStockData.loc['AAPL'].Volume
)

# タイトルを付ける
plt.title('AAPL Volume')

plt.gcf().set_size_inches(12,8)
plt.subplots_adjust(hspace=0.75)