【Python】株のセクターの相関係数を可視化する方法を解説

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

株式投資では、業種や産業ごとに分類されたセクター(例:金融、IT、エネルギーなど)によって似通った値動きをしたり、逆に異なった値動きをすることがあります。
セクター間の相関関係を知り、相関関係の低いセクターの銘柄を選択することでリスクを分散させることができます。

この記事では、Pythonを使って株のセクター間の相関係数を可視化する方法を、初心者でもわかりやすく解説します。

セクターの相関係数とは

セクターの相関関係とは、異なる業種(セクター)同士の株価やリターンがどれくらい同じ方向に動くか(相関性)を示します。
相関係数は「-1」から「+1」までの値をとり、+1に近いほど値動きが似ており、0に近いほど独立、-1に近いほど逆の動きをします。

日本株のセクターは、「東証業種別株価指数」による33業種区分(水産・農林業、鉱業、建設業など)がありますが、本記事ではこれを集約したTOPIX-17(17業種)区分のETFで相関関係を可視化します。

相関係数を可視化する方法

今回は、以下のライブラリを使用します。pipでインストールしてください。

  • yfinance: 価格データを取得するためのライブラリ。
  • seaborn: データ可視化ライブラリ。
  • matplotlib: 2Dや3Dのグラフを描画するためのライブラリ。
  • pandas: 時系列データを処理するためのライブラリ。
Python
pip install yfinance seaborn matplotlib pandas

相関係数の可視化のサンプルコード

Python
import yfinance as yf
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import japanize_matplotlib

# 取得する銘柄リスト
tickers = ["1617.T", "1618.T", "1619.T", "1620.T", "1621.T", "1622.T", "1623.T", "1624.T", "1625.T", "1626.T", "1627.T", "1628.T", "1629.T", "1630.T", "1631.T", "1632.T", "1633.T"]

# 株価データを取得(過去1年分)
data = yf.download(tickers, interval="1d", period='1y')["Close"]

# リターンを計算(対数リターン)
returns = np.log(data / data.shift(1))

# 相関係数を計算
correlation_matrix = returns.corr()

# ヒートマップを描画
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap="coolwarm", linewidths=0.5, fmt=".2f", cbar_kws={'label': '相関係数'})
plt.title("株価リターンの相関関係ヒートマップ")
plt.show()

これを実行すると、以下のヒートマップが出力されます。
このヒートマップから1621(医薬品セクター)が他の銘柄と比較して相関関係が低いことが視覚的にわかります。

ポイントの解説

取得する銘柄リスト

Python
# 取得する銘柄リスト
tickers = ["1617.T", "1618.T", "1619.T", "1620.T", "1621.T", "1622.T", "1623.T", "1624.T", "1625.T", "1626.T", "1627.T", "1628.T", "1629.T", "1630.T", "1631.T", "1632.T", "1633.T"]

TOPIX-17(17業種)で取得するETFのコードとセクターは次の通りです。

  • 1617:食品
  • 1618:エネルギー資源
  • 1619:建設・資材
  • 1620:素材・化学
  • 1621:医薬品
  • 1622:自動車・輸送機
  • 1623:鉄鋼・非鉄
  • 1624:機械
  • 1625: 電機・精密
  • 1626:情報通信・サービスその他
  • 1627:電力・ガス
  • 1628:運輸・物流
  • 1629:商社・卸売
  • 1630:小売
  • 1631:銀行
  • 1632: 金融(除く銀行)
  • 1633:不動産

株価データを取得

Python
# 株価データを取得(過去1年分)
data = yf.download(tickers, interval="1d", period='1y')["Close"]

yfinanceで株価データを取得します。

yfinanceの使い方については過去の記事をご覧ください。

リターンを計算

Python
# リターンを計算(対数リターン)
returns = np.log(data / data.shift(1))

data / data.shift(1)で当日の株価を前日の株価で割って、リターンを計算します。

相関係数を計算

Python
# 相関係数を計算
correlation_matrix = returns.corr()

corr()メソッドで各列の間の相関係数が計算されます。

ヒートマップを描画

Python
# ヒートマップを描画
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap="coolwarm", linewidths=0.5, fmt=".2f", cbar_kws={'label': '相関係数'})
plt.title("株価リターンの相関関係ヒートマップ")
plt.show()

seabornheatmapメソッドでcorrelation_matrixのヒートマップを出力することができます。

まとめ

今回は株のセクターの相関係数を可視化する方法について解説しました。

セクターの相関関係は、業種ごとの値動きの似通い方を示し、景気や市場環境、業種再編などで変化します。

相関係数はセクター以外でも応用できるので、商品CFDなどでも試してみてください。