Pythonで株価チャートを作ろう

こんにちは、デジタルボーイです。普段はクライアントのデータ分析を仕事としています。株分析は専門ではありませんが、趣味で株などの投資分析を行っています。今回はpythonで株分析を実施するために、株価チャートなどの可視化方法について解説したいと思います。

記事を書いた人

デジタルボーイです。
データサイエンス歴20年以上のおっさんです。中小企業診断士として、データサイエンス、WEBマーケティング、SEOに関するデータ分析、コンサルティングの仕事をしています。自己紹介の詳細はコチラ

目次

はじめに

僕は趣味で株価のデータ分析を行っています。分析を行う上でデータの可視化(グラフ化)はとても重要です。とはいうものの、ローソク足などのトレーダー用のチャートについてはpythonでプログラムするよりも、絶対に証券会社のチャートを見た方が良いです。証券会社のチャートの方が、<見やすく、高機能で、リアルタイムで更新される>など、いいことずくめだからです。

じゃあ、なんで、Pythonでわざわざ、自分でグラフを可視化するのかというと、証券会社の一般的なチャートではできないことがあるからです。僕自身はこんな理由で可視化をします。

Pythonで株価のグラフ化をするメリット

  • 株価の予測モデルを作った後の確認
  • 複数銘柄などの銘柄グループの可視化
  • 自分の作った独自のテクニカル指標の可視化

なので、僕自身はPythonによる株価のグラフ化は、トレードのためのグラフ化ではなく分析結果を可視化するため、と考えています。なので、今日はこの観点で可視化について解説したいと思います。

可視化ツール:Plotlyとは?

Plotlyは、Pythonでインタラクティブなグラフを作成できる強力なライブラリです。高性能な割に簡単にプログラムでき、かつ、見栄えもよいので僕はよく使っています。ローソクチャートも簡単に作れることからおすすめです。マウスオーバーで詳細データの表示や、ズーム、スクロールが可能で、Webブラウザ上でそのまま操作できます。

公式サイトは英語ですが、コード例も豊富で、見やすいので気になる方はご覧ください。(公式サイト

インストール方法

まずはPython環境にPlotlyをインストールしましょう。以下のコマンドをターミナルまたはコマンドプロンプトで実行します

pip install plotly

yfinanceを使ったローソク足チャートの作成

株価チャートを描くには、まず株価データを取得する必要があります。Pythonでは、yfinanceライブラリを使うことでYahoo!ファイナンスから簡単に株価を取得できます。yfinanceのインストールがまだの方はこちらを参考に、pip installしてください。

まずは、トヨタ自動車(7203.T)の過去1年分の株価データをyfinanceで取得してみましょう。

import yfinance as yf  

# データ取得  
symbol = "7203.T"  
df = yf.download(symbol, start="2024-06-01", end="2025-06-01")  
df

次のように、カラム名が複数あるデータ取得できたと思います。これをpandasでは、MultiIndexと言います。

このままでは使いにくいので、次のようにTickerに関するカラムを削除し、かつ、Priceカラム名も削除し、カラムを1行にまとめましょう。

上の処理をするには次のコードで可能です。

# Tickerカラムを削除
df.columns = df.columns.droplevel('Ticker')

# Priceという名称を削除
df.columns.name = None

# マルチカラムをリセット
df = df.reset_index()

これで、こんな感じで、すっきりしたデータになったと思います。

では、Plotlyでローソク足チャートを作成ってみましょう。

import plotly.graph_objects as go  

# チャート描画  
fig = go.Figure(data=[  
    go.Candlestick(  
        x=df['Date'],  
        open=df['Open'],  
        high=df['High'],  
        low=df['Low'],  
        close=df['Close'],  
        name=symbol  
    )  
])  
  
fig.update_layout(  
    title=f"{symbol} のローソク足チャート",  
    xaxis_title="日付",  
    yaxis_title="株価(円)",  
    xaxis_rangeslider_visible=False  
)  
  
fig.show()

コードは以下の通りです。

コード解説

  • go.Figurego.Candlestick を使って、株価のローソク足チャートを作成している。ローソク足には、横軸xにdf[“Date”]を指定し、さらに始値・高値・安値・終値をそれぞれOpen,High,Low,Closeのカラムを指定する。
  • update_layout により、チャートのタイトルや軸ラベルを設定し、ローソク足の下に表示される範囲スライダー(xaxis_rangeslider_visible)を非表示にしている。
  • fig.show() で、インタラクティブな Plotly チャートとして画面に描画している。ブラウザ上でズームやパンも可能。

結果は次の通りです。

こんな簡単に、ローソク足チャートができました!

また、Plotlyのいいところは、対話的にグラフのデータを絞り込めるところです。下の例は期間を絞り込んだ例です。

横方向にドラッグすることで、横軸を選択可能、縦方向にドラッグすることで縦軸を選択可能です。また、グラフをリセットしたい場合は右上のホームボタンをクリックしてください。

複数銘柄の終値を同時に比較表示する

次に、複数の銘柄をスケール調整して比較する方法を紹介します。特に、価格帯が異なる銘柄同士をそのまま比較しても意味が薄いため、基準時点で正規化して相対的な推移を可視化します。

ここでは、以下のような処理を行います

  • トヨタ(7203.T)、ホンダ(7267.T)、日産(7201.T)の終値を取得
  • 初日の終値を1として正規化(相対的変化の可視化)
  • 折れ線グラフで3銘柄を同時に表示

この方法により、値動きの傾向を平等な視点で比較できます。まずは、データを取得するコードです。

import yfinance as yf
import plotly.graph_objects as go

# 銘柄コードと企業名の対応表
dict_symbol = {
    "7203.T": "トヨタ自動車",
    "7267.T": "ホンダ",
    "7201.T": "日産自動車"
}
start_date = "2024-06-01"
end_date = "2025-06-01"

# 各銘柄の終値を取得して正規化
data = {}
for symbol in dict_symbol:
    df = yf.download(symbol, start=start_date, end=end_date)
    df.columns = df.columns.droplevel('Ticker')
    df.columns.name = None
    df.reset_index(inplace=True)
    df["Normalized_Close"] = df["Close"] / df["Close"].iloc[0]
    data[symbol] = df

コード解説

  • yfinance を使って、トヨタ・ホンダ・日産の株価データを取得するため、銘柄コードと企業名の対応表(dict_symbol)を作成
  • データ取得期間として、2024年6月1日から2025年6月1日までを指定
  • 各銘柄について yf.download() で株価データを取得し、複雑なカラム構造(マルチインデックス)を解除
  • カラム名の階層を取り除き、インデックスをリセットして Date 列を使える状態に整形
  • 終値(Close)を初日の終値で割り、「初日を1とした正規化株価」を Normalized_Close 列として追加
  • 以上の処理を銘柄ごとに繰り返し、整形済みデータを data 辞書に格納

dataの中身はこんな感じです。

3銘柄がdict型で格納されています。

これでチャートによる分析ができるので、グラフ化してみましょう。以下がコード例です。


# プロット作成
fig = go.Figure()
for symbol in symbols:
    fig.add_trace(go.Scatter(
        x=data[symbol]["Date"],
        y=data[symbol]["Normalized_Close"],
        mode='lines',
        name=dict_symbol[symbol]
    ))

fig.update_layout(
    title="複数銘柄の終値(初日を1として正規化)",
    xaxis_title="日付",
    yaxis_title="株価(正規化)",
    legend_title="銘柄",
    hovermode="x unified"
)

fig.show()

コード解説

  • go.Figure() で空のグラフオブジェクトを作成し、これから銘柄ごとの線グラフ(トレース)を追加していく準備をする
  • for symbol in symbols: のループで、各銘柄のデータを1本ずつ線グラフとして追加
  • x に日付、y に正規化済み終値(Normalized_Close)を指定
  • mode='lines' により折れ線グラフとして描画
  • name で凡例に企業名が表示されるように設定(dict_symbolを参照)
  • update_layout() でグラフの見た目を整える
  • title:グラフ全体のタイトル
  • xaxis_title / yaxis_title:軸のラベルを日本語で設定
  • legend_title:凡例の見出しに「銘柄」と表示
  • hovermode="x unified":マウスを合わせたとき、すべての銘柄の値が同時に表示されるように
  • fig.show() でインタラクティブなグラフを表示(ズームやホバー表示が可能)

アウトプットはこんな感じです。

ホンダと日産の統合のドタバタが株価にかなり影響していますね!統合の話が持ち上がった2024年の年末あたりに、それまで加工の一途だった日産株価は急上昇しています。同じくホンダも上がっています。そこから経営統合の白紙の報道により、日産の株価は急降下していますね。またデータの左と右端ではトヨタとホンダは同じような株価の推移をしています。これにより、本来はトヨタとホンダの株価は似たような値動きをしており、経営統合というイレギュラーな状況で、グラフの中程でホンダの株価が変動したと見ることもできそうです!

まとめ

以上、Plotlyによるローソク足と複数銘柄のグラフ化を見てきました!ローソク足チャートはヒゲや箱の部分を自分でプログラムせずとも値を設定するだけで簡単に描画できましたね!またたの証券会社ツールでは難しい複数銘柄の同時プロットもPlotlyを使えば簡単にできました。

今後、Pythonで株価分析をする上で、Plotlyはとても便利なツールになるので、ぜひ、マスターしてみてください!

目次