pandas.DataFrame型で保持した株価データの可視化1
「pandas.DataFrame型で保持した株価データを取得する」で取得したデータを可視化する。
これまで可視化は下記のエントリーで触れた。そこと重なる内容も多々あるが、復習もかねる。
・Pythonでのプロットと可視化(matplotlib編) 〜 まとめ
・Pythonでのプロットと可視化(pandas編) 〜 pandas.Seriesのplot
・Pythonでのプロットと可視化(pandas編) 〜 pandas.DataFrameのplot
今回は下記3つを扱う
まず前回の株価取得のコードは次。
#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)