Plotlyでローソク足チャートの作成

所要時間

60分

学ぶコト

・Plotlyを使って株データのローソク足チャートを作成
・Plotlyを使ってローソク足チャートと出来高を同時描画

このレッスンでは、株価分析において定番のローソク足チャートを作成していきます。

ここでは、「株データを取得してみよう!」のレッスンでもおこなったようにyFinanceというライブラリを使って株価を取得していきます。

株データを取得してみよう!」のレッスンでもローソク足チャートは作成しましたが、ここではPlotlyを使って描画してみましょう!

ライブラリのインストールとインポート

ここではPython実行環境としてGoogle Colabを使う前提で話を進めていきます。

まず、必要なライブラリをインストールしていきましょう!Google Colabではいくつかのライブラリが事前にインストールされていますが、以下のライブラリはインストールが必要になります。

# yfinanceのインストール
!pip install yfinance==0.2.36
# Plotlyのインストール
!pip install plotly==5.18.0

続いて必要なライブラリをインポートしていきます。

import numpy as np                             # 数値計算を効率的に行うためのライブラリ (Numpy) をインポートします。
import pandas as pd                            # データ操作と分析のためのライブラリ (Pandas) をインポートします。
import plotly.express as px                    # 高レベルなグラフ作成APIを提供するPlotly Expressをインポートします。
from plotly.subplots import make_subplots      # 複数のサブプロットを作成するための機能をインポートします。
import plotly.graph_objects as go              # 複雑なグラフやチャートを作成するためのライブラリをインポートします。
from plotly.io import write_image, write_html  # Plotlyの図を画像やHTMLファイルとして保存するための関数をインポートします。
import yfinance as yf                          # Yahoo Financeから金融データにアクセスするためのライブラリをインポートします。

株価の取得

今回は、Googleの株価を取得してみます。

以下のように記述することで株価を取得することができたのでした。

# 取得銘柄を指定
ticker = 'GOOG'

# 取得期間
period = '1y'

# 取得頻度
interval = '1d'

#データを収集
# yf.download(取得銘柄, 取得期間, 取得頻度)
data_df = yf.download(ticker, period=period, interval=interval)
data_df

こちらをベースに可視化をしていきましょう!

Plotlyでローソク足チャートの作成

それではPlotlyを使ってローソク足チャートを作っていきましょう!

Plotlyにはローソク足用のメソッドが用意されており、以下のように記述します。

go.Candlestick(x,open,high,low,close)
  • x: X軸に表示するデータ。日付や時刻など。
  • open: 各期間の始値を指定するデータ。
  • high: 各期間の最高値を指定するデータ。
  • low: 各期間の最低値を指定するデータ。
  • close: 各期間の終値を指定するデータ。

事前にplotlyのgraph_objectsをgoと定義していることに注意してください。

import plotly.graph_objects as go

今回のGoogleの株価データに関しては以下のように記述することでローソク足チャートを描画できます。

# ローソク足チャートの作成
fig = go.Figure(
    data=[
        go.Candlestick(
            x=data_df.index, # 日付データをX軸に設定
            open=data_df['Open'], # 株価の開始価格
            high=data_df['High'], # 株価の最高価格
            low=data_df['Low'], # 株価の最低価格
            close=data_df['Close'] # 株価の終了価格
            )
        ]
    )

# グラフのタイトルと軸ラベルの設定
fig.update_layout(
    title='Google 株価', # グラフのタイトル
    xaxis_title='日付', # X軸のタイトル
    yaxis_title='株価 (USD)', # Y軸のタイトル
    )

# 作成したローソク足チャートを表示
fig.show()

以下のようにキレイなローソク足チャートを描画することができました。

ちなみにこの際にローソク足チャート下のレンジスライダー(バー)を操作することで表示期間を自由に変えることが可能です。

またローソク足にカーソルをあわせることで詳細の情報を確認することができます。

サブプロットを利用することでローソク足チャートと出来高を同時描画

サブプロットは、複数のグラフやチャートを一つの図内に配置する機能です。これにより、異なるデータセットやデータの関係を比較しやすくなります。

Plotlyでは、様々なタイプのグラフ(例えば、散布図、線グラフ、棒グラフなど)をサブプロットとして組み合わせることができます。

サブプロットを使う際はmake_subplots、add_trace、update_layoutが重要になってきます。

それぞれの使い方を簡単に確認していきましょう!

make_subplots(rows, cols)

make_subplotsは、Plotlyの図に複数のサブプロットを配置するための関数です。

簡単にいえば複数のグラフを埋め込む枠を先に作っておくイメージです。

  • rows: サブプロットを配置する行の数
  • cols: サブプロットを配置する列の数
add_trace(trace, row, col)

add_traceは、Plotlyで図(Figureオブジェクト)に新しいデータトレース(グラフの一部分、例えば線グラフの一本の線や、バーチャートの一群のバーなど)を追加するためのメソッドです。

このメソッドを使用して、図に様々な種類のグラフィカルなデータ表現を追加することができます。

  • trace: 追加するトレースオブジェクト。go.Scatter(散布図や線グラフ)、go.Bar(バーチャート)、go.Pie(円グラフ)など、Plotlyのグラフオブジェクトのいずれか。
  • row: トレースを配置するサブプロットの行位置。make_subplotsで定義したサブプロットのグリッド内での行番号を整数で指定します。
  • col: トレースを配置するサブプロットの列位置。make_subplotsで定義したサブプロットのグリッド内での列番号を整数で指定します。
update_layout(height, width, title_text)

update_layoutは、PlotlyのFigureオブジェクトのレイアウトを更新またはカスタマイズするために使用されます。

このメソッドを使用して、図のタイトル、軸のラベル、レジェンドの位置、グラフのサイズ、マージン、背景色など、図の外観に関する多くの側面を調整することができます!

  • width/height: 図の幅と高さをピクセル単位で設定。
  • title_text: 図のタイトルを設定。

それでは実際にローソク足チャートと出来高のグラフを含むサブプロットを作成していきましょう!以下のように記述していきます。

# ローソク足チャートと出来高のグラフを含むサブプロットを作成
fig = make_subplots(rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.02, subplot_titles=('ローソク足チャート', '出来高'), row_width=[0.2, 0.7])

# ローソク足チャートを追加
fig.add_trace(go.Candlestick(
    x=data_df.index, # 日付データをX軸に設定
    open=data_df['Open'], # 株価の開始価格
    high=data_df['High'], # 株価の最高価格
    low=data_df['Low'], # 株価の最低価格
    close=data_df['Close'], # 株価の終了価格
    name='株価'
    ), row=1, col=1)

# 出来高のグラフを追加
fig.add_trace(go.Bar(
    x=data_df.index,
    y=data_df['Volume'],
    marker_color='blue',
    name='出来高'
    ), row=2, col=1)

# スライダーを設定
fig.update_layout(
    xaxis_rangeslider_visible=False,  # ローソク足チャートの下のデフォルトスライダーを非表示にします。
    xaxis2_rangeslider_visible=True,  # 出来高チャートの下にスライダーを表示します。
    xaxis2_title="日付",
    yaxis_title="株価",
    yaxis2_title="出来高",
)

# 作成したグラフを表示
fig.show()

以下のようにローソク足と出来高を同時に描画することができました!

課題

他の銘柄を使ってローソク足チャートと出来高を描画してみよう!