この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
株式投資では、業種や産業ごとに分類されたセクター(例:金融、IT、エネルギーなど)によって似通った値動きをしたり、逆に異なった値動きをすることがあります。
セクター間の相関関係を知り、相関関係の低いセクターの銘柄を選択することでリスクを分散させることができます。
この記事では、Pythonを使って株のセクター間の相関係数を可視化する方法を、初心者でもわかりやすく解説します。
セクターの相関係数とは

セクターの相関関係とは、異なる業種(セクター)同士の株価やリターンがどれくらい同じ方向に動くか(相関性)を示します。
相関係数は「-1」から「+1」までの値をとり、+1に近いほど値動きが似ており、0に近いほど独立、-1に近いほど逆の動きをします。
日本株のセクターは、「東証業種別株価指数」による33業種区分(水産・農林業、鉱業、建設業など)がありますが、本記事ではこれを集約したTOPIX-17(17業種)区分のETFで相関関係を可視化します。
相関係数を可視化する方法
今回は、以下のライブラリを使用します。pipでインストールしてください。
- yfinance: 価格データを取得するためのライブラリ。
- seaborn: データ可視化ライブラリ。
- matplotlib: 2Dや3Dのグラフを描画するためのライブラリ。
- pandas: 時系列データを処理するためのライブラリ。
pip install yfinance seaborn matplotlib pandas
相関係数の可視化のサンプルコード
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(医薬品セクター)が他の銘柄と比較して相関関係が低いことが視覚的にわかります。

ポイントの解説

取得する銘柄リスト
# 取得する銘柄リスト
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:不動産
株価データを取得
# 株価データを取得(過去1年分)
data = yf.download(tickers, interval="1d", period='1y')["Close"]
yfinance
で株価データを取得します。
yfinance
の使い方については過去の記事をご覧ください。
リターンを計算
# リターンを計算(対数リターン)
returns = np.log(data / data.shift(1))
data / data.shift(1)
で当日の株価を前日の株価で割って、リターンを計算します。
相関係数を計算
# 相関係数を計算
correlation_matrix = returns.corr()
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()
seaborn
のheatmap
メソッドでcorrelation_matrix
のヒートマップを出力することができます。
まとめ
今回は株のセクターの相関係数を可視化する方法について解説しました。
セクターの相関関係は、業種ごとの値動きの似通い方を示し、景気や市場環境、業種再編などで変化します。
相関係数はセクター以外でも応用できるので、商品CFDなどでも試してみてください。