streamlitとplotlyで日経平均225のチャートをプロットです。
株式チャートのプロットについて、plotlyを使った、日本語の文書があまり見つからなかったので、投稿したいと思います。
plotlyは、jupyterで表示出来ますが、ここではstreamlitを使用する為、pycharm ceで書きました。
【環境】Linux Mint20
python3.8
plotly==5.3.1
streamlit==1.0.0
1.ライブラリのインポート
使ってないライブラリも読んでおりますが、悪しからず。
# Nikkei225のplot
# starandard libarary
import datetime as dt
import numpy as np
import os
import pandas as pd
import pandas_datareader as pdr
# for plot
import matplotlib.pyplot as plt
import plotly.express as px
import plotly.graph_objs as go
import plotly.figure_factory as ff
import seaborn as sns
import streamlit as st
# for ml, statistics
import statsmodels.api as sm
import statsmodels.formula.api as smf
import statsmodels.tsa
2.データセットの読み込み
ここでは、yahooからデータを取得しました。
OHLCと全てのデータが取得できます。
@st.cacheがポイント、streamlitでの以降のplotの処理速度が大幅に変わります。
データを取得がyahooからの場合: information_source='yahoo'
yahooからNikkei225を取得する場合: ticker_symbol='^N225'
取得する銘柄によって、また同じNikkei225でも他から取得する場合は、変更になる。
ここでは、関数にしてみました。
# dataset
@st.cache
def load_dataset():
start ='2019-01-01'
end = dt.date.today()
information_source='yahoo'
ticker_symbol='^N225'
df = pdr.DataReader(ticker_symbol, information_source, start, end)
return df
3.データフレーム表示
取得したデータをstreamlitで表示する関数を作成してみました。
def show_df():
data = load_dataset()
df = st.write(data)
df = st.write(df)
return df
4.streamlitでデータフレーム表示
先程、定義したデータフレーム表示の関数を実行。
show_df()
5.plot
5-1.plotly.expressで、時系列データを表示する関数を作成。
ここでは、closeだけを抽出。
def plot_ts():
df = load_dataset()
# df = df
plot_line = px.line(data_frame=df, x=df.index, y=df['Close'], title="Close")
return plot_line
5-2.変化率のplot
pct_change関数で、変化率をplot
デフォルトなので、前日のcloseから変化が大きければ、変化の大きい折れ線グラフがplotされる。
こちらも、関数にまとめました。
def plot_PctChange():
df = load_dataset()
plot_line = px.line(data_frame=df, x=df.index, y=df['Close'].pct_change(), title="Rate of Change")
return plot_line
6.streamlitによる、データフレームとグラフのplot
streamlitのwrite関数で、ブラウザに表示。
基本構文: st.write()
この書き方で、データフレームもグラフの描画等も可能。
6-1.closeのplot
plot_ts()として、st.write()の中に作成した関数を書いて、実行。
st.write('時系列データをline plot')
st.write(
plot_ts()
)
6-2.変化率のplot
plot_PctChange()として、st.write()の中に作成した関数を書いて、実行。
st.write(
plot_PctChange()
)
plotly.graph_objs等を使用して、candlestickや複数のグラフを重ねたり、その他の統計データを使用したり等、機会がありましたら、また時系列データとplotlyのについて、投稿したいと思います。
以上、streamlitとplotlyによるnikkei225のplotでした。