【Python】Pythonデータ可視化ライブラリplotlyを使用して株価を描画
PlotlyはPlotly社が開発したインタラクティブな可視化を実現するPythonのデータ可視化ライブラリで、統計、財務、科学などの広範囲な用途のグラフをサポートしており、株式投資におけるデータを可視化して分析するのに有用と思われます。ここではplotlyを用いて、取得した株価データを描画していきplotlyの使い方を学んでいきます。
なお、最低限のポイントのみの説明にするため、Pythonライブラリ、モジュール等のインストール方法については割愛させて頂きます。お使いのPC環境等に合わせてインストールしてもらえればと思います。
1.plotlyとは
Plotlyを用いると折れ線グラフ、散布図、棒グラフ、ヒストグラム、箱ひげ図、3Dプロットなど、さまざまな種類のグラフやチャートを作成することができます。ローソク足チャートや地図、ネットワークグラフなど、特定のデータタイプに特化したグラフも提供されています。美しいデザインで見栄えよく可視化することができます。
また、タイトルや軸ラベル、グリッド、線のスタイルなど、さまざまな要素をカスタマイズすることも可能です。
更にインタラクティブなデータの探索や情報の共有に役立ちます。作成できるグラフは他にも多数ありますので、Plotlyのホームページを参照いただければと思います。
2.plotlyのインストール
plotlyを使用するには、まずインストールする必要があります。インストールはこちらの公式ホームページに従ってください。また他のサイト等を参考にインストールしてください。
3.plotlyの簡単な使い方の流れ
plotly.graph_objectsをインポートします。
描画領域である fugure の作成
グラフの実体である trace を figure に登録
スタイルなどの情報をもった layout によるグラフの調整
グラフの描画
特に、figure, trace, layout は重要なオブジェクトです。
まずは、グラフの実体をもたない空の図を描画してみます。上記の1、2,5に相当します。3,4の fugure にグラフの実体を与えるのは次で具体的に試していきます。
# ライブラリのインポート
import plotly.graph_objects as go
# 描画領域である figure オブジェクトの作成
fig = go.Figure()
# show()メソッドでグラフを描画
fig.show()
4.figure にグラフの実体を登録
まずは、下記を参考にOHLCV(始値 / 高値 / 安値 / 終値 / 出来高)形式の日経平均株価(^NKX)データと東証株価指数TOPIX(^TPX)データを取得します。データの取得期間は、2022年10月1日から現在の日付までです。
import pandas_datareader.data as web
import datetime
start = '2022-10-01'
end = datetime.date.today()
df_nkx = web.DataReader('^NKX', 'stooq', start, end)
df_tpx = web.DataReader('^TPX', 'stooq', start, end)
# 日付を昇順に並び替える
df_nkx.sort_index(inplace=True)
df_tpx.sort_index(inplace=True)
traceとはグラフの本体となるオブジェクトです。Scatterクラス(散布図)などのクラスから生成されたオブジェクトを scatter_trace としています。traceは figure の data 属性として設定され、traceが存在する figure はグラフの実体をもちます。次のコードでは Figure クラスの引数 data に scatter_tarace を渡し、グラフを描画しています。
# グラフの実体となる trace オブジェクトを生成
scatter_trace = go.Scatter(
x=df_nkx.index,
y=df_nkx['Close'],
mode='lines',
line={'color':'red'}
)
# 描画領域である figure オブジェクトの作成
fig = go.Figure(data=scatter_trace)
# show()メソッドでグラフを描画
fig.show()
figure の add_trace()メソッドに trace を渡して、グラフの実体を追加することもできます。複数のグラフの実体の追加も可能です。
# グラフの実体trace オブジェクトを生成
scatter_trace_1 = go.Scatter(
x=df_nkx.index,
y=df_nkx['Close'],
mode='lines',
line={'color':'red'},
name='日経平均',
)
# グラフの実体trace オブジェクトを生成
scatter_trace_2 = go.Scatter(
x=df_tpx.index,
y=df_tpx['Close'],
mode='lines',
line={'color':'blue'},
name='TOPIX',
)
# 描画領域である figure オブジェクトの作成
fig = go.Figure()
# add_trace()メソッドでグラフの実体を追加
fig.add_trace(scatter_trace_1)
fig.add_trace(scatter_trace_2)
# show()メソッドでグラフを描画
fig.show()
5.属性の設定方法
layout オブジェクトを生成し、Figureインスタンスに渡すことで、グラフサイズ、タイトル、軸、凡例の設定できます。
# グラフの実体trace オブジェクトを生成
scatter_trace_1 = go.Scatter(
x=df_nkx.index,
y=df_nkx['Close'],
mode='lines',
line={'color':'red'},
name='日経平均',
)
# グラフの実体trace オブジェクトを生成
scatter_trace_2 = go.Scatter(
x=df_tpx.index,
y=df_tpx['Close'],
mode='lines',
line={'color':'blue'},
name='TOPIX',
)
# レイアウトの追加
graph_layout = go.Layout(
# 幅と高さの設定
width=1000, height=500,
# タイトルの設定
title=dict(
text='日経平均/TOPIXの終値', # タイトル
font=dict(family='times', size=20, color='black'), # フォントの指定
xref='paper', # container or paper
x=0.5,
y=0.87,
xanchor='center',
),
# x軸の設定
xaxis=dict(
# x軸のタイトルの設定
title=dict(text='Date', font=dict(family='times', size=15, color='black'))
),
# y軸の設定
yaxis=dict(
# y軸のタイトルの設定
title=dict(text='Stock price (円)', font=dict(family='times', size=15, color='black')),
range=[0,32000] # 軸の範囲の設定
),
# 凡例の設定
legend=dict(
xanchor='left',
yanchor='bottom',
x=0.02,
y=0.6,
orientation='v',
bgcolor='white',
bordercolor='grey',
borderwidth=1,
),
)
# 描画領域である figure オブジェクトの作成
fig = go.Figure(layout=graph_layout)
# add_trace()メソッドでグラフの実体を追加
fig.add_trace(scatter_trace_1)
fig.add_trace(scatter_trace_2)
# show()メソッドでグラフを描画
fig.show()
update_layout()メソッドで後からレイアウトを更新することもできます。
# update_layout()メソッドでレイアウトの更新
fig.update_layout(
# タイトルの更新
title=dict(
text='<b>Time Series of Stock Prices',
font=dict(size=26, color='grey'), y=0.88
),
# 凡例の更新
legend=dict(
xanchor='right',
yanchor='bottom',
x=0.98,
y=0.7,
),
# ホバーモードの更新
hovermode='closest',
)
# show()メソッドでグラフを描画
fig.show()
複数のグラフを描画するにはplotly.subplotsのmake_subplotsを使います。
# 複数のグラフを描画するmake_subplotsのインポート
from plotly.subplots import make_subplots
# 複数の描画領域を作成
fig = make_subplots(rows=2, cols=1,
start_cell='bottom-left',
subplot_titles=[
'<b>Time Series of Stock Prices(NIKKEI225)',
'<b>Time Series of Stock Prices(TOPIX)',
]
)
# グラフの実体trace オブジェクトを生成
scatter_trace_1 = go.Scatter(
x=df_nkx.index,
y=df_nkx['Close'],
mode='lines',
line={'color':'red'},
name='日経平均',
)
# グラフの実体trace オブジェクトを生成
scatter_trace_2 = go.Scatter(
x=df_tpx.index,
y=df_tpx['Close'],
mode='lines',
line={'color':'blue'},
name='TOPIX',
)
# add_trace()メソッドでグラフの実体を追加
# rowとcolで個別のサブプロットを設定
fig.add_trace(scatter_trace_1, row=1, col=1)
fig.add_trace(scatter_trace_2, row=2, col=1)
# show()メソッドでグラフを描画
fig.show()
今回は、plotlyを用いて取得した株価データを描画し、plotlyの使い方を学びました。細かい設定をすることでインタラクティブで、美しいグラフを描くことができると思います。今後、必要に応じてplotlyを用いてデータの可視化を行っていきたいと思います。
この記事が気に入ったらサポートをしてみませんか?