見出し画像

【Python】Pythonデータ可視化ライブラリplotlyを使用して株価を描画

PlotlyはPlotly社が開発したインタラクティブな可視化を実現するPythonのデータ可視化ライブラリで、統計、財務、科学などの広範囲な用途のグラフをサポートしており、株式投資におけるデータを可視化して分析するのに有用と思われます。ここではplotlyを用いて、取得した株価データを描画していきplotlyの使い方を学んでいきます。

なお、最低限のポイントのみの説明にするため、Pythonライブラリ、モジュール等のインストール方法については割愛させて頂きます。お使いのPC環境等に合わせてインストールしてもらえればと思います。



1.plotlyとは

Plotlyを用いると折れ線グラフ、散布図、棒グラフ、ヒストグラム、箱ひげ図、3Dプロットなど、さまざまな種類のグラフやチャートを作成することができます。ローソク足チャートや地図、ネットワークグラフなど、特定のデータタイプに特化したグラフも提供されています。美しいデザインで見栄えよく可視化することができます。

また、タイトルや軸ラベル、グリッド、線のスタイルなど、さまざまな要素をカスタマイズすることも可能です。

更にインタラクティブなデータの探索や情報の共有に役立ちます。作成できるグラフは他にも多数ありますので、Plotlyのホームページを参照いただければと思います。


2.plotlyのインストール

plotlyを使用するには、まずインストールする必要があります。インストールはこちらの公式ホームページに従ってください。また他のサイト等を参考にインストールしてください。


3.plotlyの簡単な使い方の流れ

  1. plotly.graph_objectsをインポートします。

  2. 描画領域である fugure の作成

  3. グラフの実体である trace を figure に登録

  4. スタイルなどの情報をもった layout によるグラフの調整

  5. グラフの描画

特に、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.属性の設定方法

次のクラスを設定することで、グラフスタイルの変更や、複数のグラフの配置などができます。
・Figure クラス
・trace クラス(グラフ要素のスタイル設定など)
・Layout クラス(グラフサイズや軸の設定など)

属性を設定するには、次のような方法があります。
・コンストラクタの引数による指定
・update および update_ で始まるメソッドによる更新
・属性への代入
・add_ で始まるメソッドによる追加

Pythonインタラクティブ・データビジュアライゼーション入門


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.subplotsmake_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を用いてデータの可視化を行っていきたいと思います。

この記事が気に入ったらサポートをしてみませんか?