Pythonのデータ可視化ツールである「Dash」を活用して、株価を時系列に表示するWebアプリケーションを作成します。
ここでは、「pandas-datareader」を利用して株価を取得します。
以下の記事を前提として進めますので、まだの方はこちらからお願いします。
完成品(株価を時系列に表示するアプリ)
- 株価を時系列に表示するダッシュボードを作成します
- 株式シンボルと期間を選択するとグラフが表示されます
- 株式シンボルをクリックする事で非表示・表示を切り替えられます
pandas-datareaderとは?
pandas-datareaderを使うと、Web上の様々なデータソースにアクセスし、pandasのDataFrameの形でデータを取得できます。
データソース例として以下の様なものがありますが、頻繁に変わるので必ず公式ドキュメントを参照する様にして下さい。
- Morningstar
- IEX
- Robinhood
- Quandl
- World Bank
- OECD
- Eurostat
pandas-datareaderのインストール
「pandas-datareader」を使うために、pipでインストールします。
$ pip install pandas-datareader
pandas-datareaderでデータ取得し、Dashで表示
それでは、早速以下のコードをJupyter Notebookで実行してみましょう。
# 必要なモジュールのインポート import dash import dash_core_components as dcc import dash_html_components as html from dash.dependencies import Input, Output # Dashアプリケーションを作成 app = dash.Dash() # ヘッダー、ボックス、グラフを含むページを作成 app.layout = html.Div([ html.H1('Stock Ticker Dashboard'), html.H3('Enter a stock symbol:'), dcc.Input(id ='my_ticker_symbol' ,value='GAP' # 初期値を設定 ), dcc.Graph(id='my_graph', figure={ 'data': [ {'x': [1,2], 'y': [3,1]} ] } ) ]) # pandas_datareaderとdatetime関数の導入 import pandas_datareader.data as web from datetime import datetime # コールバック関数の追加 @app.callback( Output('my_graph', 'figure'), [Input('my_ticker_symbol', 'value')]) def update_graph(stock_ticker): # スタート日とエンド日の定義 start = datetime(2018, 1, 1) end = datetime(2018, 12, 31) # pandas_datareaderで接続し、Dataframeに格納(df) df = web.DataReader(stock_ticker,'iex',start,end) fig = { 'data': [ # dfをアウトプット {'x': df.index, 'y': df.close} ], 'layout': {'title':stock_ticker} } return fig # サーバーを起動 if __name__ == '__main__': app.run_server()
実行結果
テキストボックスに銘柄(ティッカー)を入力すると、株価(終値:close)が表示されます。
「Apple(AAPL)」、「Facebook(FB)」、「Amazon(AMZN)」とテキストボックスが変わる度に、それぞれの株価を取得して表示します
解説
必要なライブラリのインポート
# pandas_datareaderとdatetime関数の導入 import pandas_datareader.data as web from datetime import datetime
まずは、必要なライブラリをインポートします。
「datetime」は株価取得の期間を指定するために導入します。
株価を取得する期間を定義
def update_graph(stock_ticker): # スタート日とエンド日の定義 start = datetime(2018, 1, 1) end = datetime(2018, 12, 31) # DataReaderで接続し、Dataframeに格納(df) df = web.DataReader(stock_ticker,'iex',start,end) fig = { 'data': [ # dfをアウトプット {'x': df.index, 'y': df.close} ], 'layout': {'title':stock_ticker} } return fig
startとendで株価を取得する「スタート日」と「エンド日」を定義します。
上記例では、「2018年の1月1日」から「2018年12月31日」を対象とします。
pandas-datareaderで接続し、Dataframeに格納
# pandas-datareaderで接続し、Dataframeに格納(df) df = web.DataReader(stock_ticker,'iex',start,end)
The Investors Exchange (IEX) のデータに接続し、「stock_ticker(テキストボックスに入力された値)」について、startからend日の期間でDatafremeの形でデータを取得しています。
ここのデータソースをIEX以外とする事で、様々なデータを描画することが出来ます。
X軸を日付、Y軸を終値に設定
fig = { 'data': [ # dfをアウトプット {'x': df.index, 'y': df.close} ], 'layout': {'title':stock_ticker} } return fig
この箇所で、X軸を「df.index(日付)」、Y軸を「df.close(終値)」と定義しています。
公式サイトを見て貰えれば分かりますが、IEX(The Investors Exchange )は以下の5項目を取得できます。
- open : 始値
- high : 高値
- low : 安値
- close : 終値
- volume: 出来高
次は、「DataRangePicker」を使用して、カレンダーから日付を選択出来る様にしていきます。