[Python] 相関係数を計算する方法

Pythonで相関係数を計算するには、主に以下の方法が使われます。

NumPyライブラリのnumpy.corrcoef()関数を使用するか、Pandasライブラリのpandas.DataFrame.corr()メソッドを使用します。

numpy.corrcoef()は2つの配列間の相関係数を計算し、pandas.DataFrame.corr()はデータフレーム内の各列間の相関係数を計算します。

どちらもピアソンの積率相関係数をデフォルトで計算します。

この記事でわかること
  • 相関係数の定義と計算方法
  • NumPy、Pandas、SciPyの活用法
  • 相関係数の応用例と実践
  • 特徴量選択や異常検知への利用
  • 相関係数の解釈と注意点

目次から探す

相関係数とは何か

相関係数は、2つの変数間の関係の強さと方向を示す統計的な指標です。

一般的に、相関係数は-1から1の範囲で値を取り、1は完全な正の相関、-1は完全な負の相関を示します。

0の場合は、2つの変数間に線形関係がないことを意味します。

相関係数は、データ分析や機械学習において、特徴量の選択やデータの理解に役立つ重要な指標です。

特に、ピアソン相関係数が広く使用されており、連続変数の関係を評価する際に有効です。

Pythonで相関係数を計算する方法

Pythonでは、相関係数を計算するために主にNumPy、Pandas、SciPyのライブラリが使用されます。

これらのライブラリを使うことで、簡単に相関係数を求めることができます。

また、手動で計算する方法も紹介します。

以下にそれぞれの方法を詳しく説明します。

NumPyを使った相関係数の計算

NumPyは数値計算に特化したライブラリで、相関係数を計算するための関数が用意されています。

numpy.corrcoef()を使用することで、簡単に相関係数を求めることができます。

import numpy as np
# サンプルデータ
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 5, 7, 11])
# 相関係数の計算
correlation_matrix = np.corrcoef(x, y)
correlation_coefficient = correlation_matrix[0, 1]
print("相関係数:", correlation_coefficient)
相関係数: 0.9722718241315028

Pandasを使った相関係数の計算

Pandasはデータ操作に特化したライブラリで、DataFrameを使って相関係数を計算することができます。

pandas.DataFrame.corr()メソッドを使用します。

import pandas as pd
# サンプルデータ
data = {
    'X': [1, 2, 3, 4, 5],
    'Y': [2, 3, 5, 7, 11]
}
df = pd.DataFrame(data)
# 相関係数の計算
correlation_coefficient = df.corr().iloc[0, 1]
print("相関係数:", correlation_coefficient)
相関係数: 0.9722718241315028

SciPyを使った相関係数の計算

SciPyは科学計算用のライブラリで、相関係数を計算するための関数が用意されています。

scipy.stats.pearsonr()を使用することで、ピアソン相関係数とp値を同時に取得できます。

from scipy import stats
# サンプルデータ
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# ピアソン相関係数の計算
correlation_coefficient, p_value = stats.pearsonr(x, y)
print("相関係数:", correlation_coefficient)
print("p値:", p_value)
相関係数: 0.9722718241315029
p値: 0.005519518537275773

手動で相関係数を計算する方法

相関係数は以下の数式を用いて手動で計算することもできます。

ピアソン相関係数は次のように定義されます。

\[\text{相関係数} = \frac{n(\sum xy) – (\sum x)(\sum y)}{\sqrt{[n\sum x^2 – (\sum x)^2][n\sum y^2 – (\sum y)^2]}}\]

ここで、\(n\)はデータの数、\(\sum xy\)は各データの積の合計、\(\sum x\)と\(\sum y\)はそれぞれの合計です。

手動で計算する場合は、これらの値を求めて代入する必要があります。

NumPyを使った相関係数の計算

NumPyは、数値計算を効率的に行うためのライブラリで、相関係数を計算するための便利な関数が用意されています。

ここでは、numpy.corrcoef()を使った相関係数の計算方法について詳しく説明します。

numpy.corrcoef()の使い方

numpy.corrcoef()は、与えられたデータの相関係数を計算する関数です。

この関数は、2つ以上の変数の相関係数を含む相関行列を返します。

基本的な使い方は以下の通りです。

import numpy as np
# サンプルデータ
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 5, 7, 11])
# 相関係数の計算
correlation_matrix = np.corrcoef(x, y)
print(correlation_matrix)

2次元配列での相関係数の計算

numpy.corrcoef()は、2次元配列を入力として受け取ることができます。

この場合、各行または各列が異なる変数を表し、相関行列が計算されます。

行が変数、列が観測値の場合、次のように計算します。

import numpy as np
# 2次元配列のサンプルデータ
data = np.array([[1, 2, 3, 4, 5],
                  [2, 3, 5, 7, 11],
                  [5, 6, 7, 8, 9]])
# 相関係数の計算
correlation_matrix = np.corrcoef(data)
print(correlation_matrix)

相関行列の解釈方法

相関行列は、各変数間の相関係数を示す行列です。

行列の対角成分は常に1であり、他の成分は-1から1の範囲の値を取ります。

値が1に近いほど強い正の相関、-1に近いほど強い負の相関を示します。

0に近い値は、相関がないことを示します。

NumPyでの相関係数の計算例

以下は、NumPyを使って相関係数を計算する具体的な例です。

import numpy as np
# サンプルデータ
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 5, 7, 11])
# 相関係数の計算
correlation_matrix = np.corrcoef(x, y)
correlation_coefficient = correlation_matrix[0, 1]
print("相関係数:", correlation_coefficient)
相関係数: 0.9722718241315028

完全なサンプルコード

以下は、NumPyを使って相関係数を計算する完全なサンプルコードです。

import numpy as np
# サンプルデータ
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 5, 7, 11])
# 相関係数の計算
correlation_matrix = np.corrcoef(x, y)
correlation_coefficient = correlation_matrix[0, 1]
# 結果の表示
print("相関行列:\n", correlation_matrix)
print("相関係数:", correlation_coefficient)
相関行列:
 [[1.         0.97227182]
 [0.97227182 1.        ]]
相関係数: 0.9722718241315028

このコードを実行することで、相関行列と相関係数を確認することができます。

NumPyを使うことで、簡単に相関係数を計算できることがわかります。

Pandasを使った相関係数の計算

Pandasはデータ操作に特化したライブラリで、データフレームを使って簡単に相関係数を計算することができます。

ここでは、pandas.DataFrame.corr()を使った相関係数の計算方法について詳しく説明します。

pandas.DataFrame.corr()の使い方

pandas.DataFrame.corr()メソッドを使用すると、データフレーム内の数値列間の相関係数を計算できます。

このメソッドは、デフォルトでピアソン相関係数を計算します。

基本的な使い方は以下の通りです。

import pandas as pd
# サンプルデータ
data = {
    'X': [1, 2, 3, 4, 5],
    'Y': [2, 3, 5, 7, 11],
    'Z': [5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)
# 相関係数の計算
correlation_matrix = df.corr()
print(correlation_matrix)

複数列の相関係数を計算する方法

データフレーム内の複数の列の相関係数を計算する場合、corr()メソッドを使用することで、すべての数値列間の相関係数を一度に計算できます。

相関行列が返され、各列の相関係数が確認できます。

import pandas as pd
# サンプルデータ
data = {
    'A': [1, 2, 3, 4, 5],
    'B': [2, 3, 5, 7, 11],
    'C': [5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)
# 相関係数の計算
correlation_matrix = df.corr()
print(correlation_matrix)

相関行列の可視化方法(ヒートマップ)

相関行列を可視化するために、Seabornライブラリを使用してヒートマップを作成することができます。

これにより、相関係数の強さを視覚的に理解しやすくなります。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# サンプルデータ
data = {
    'X': [1, 2, 3, 4, 5],
    'Y': [2, 3, 5, 7, 11],
    'Z': [5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)
# 相関係数の計算
correlation_matrix = df.corr()
# ヒートマップの作成
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt='.2f')
plt.title('相関行列のヒートマップ')
plt.show()

Pandasでの相関係数の計算例

以下は、Pandasを使って相関係数を計算する具体的な例です。

import pandas as pd
# サンプルデータ
data = {
    'X': [1, 2, 3, 4, 5],
    'Y': [2, 3, 5, 7, 11]
}
df = pd.DataFrame(data)
# 相関係数の計算
correlation_coefficient = df.corr().iloc[0, 1]
print("相関係数:", correlation_coefficient)
相関係数: 0.9819805060619657

完全なサンプルコード

以下は、Pandasを使って相関係数を計算し、ヒートマップを表示する完全なサンプルコードです。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# サンプルデータ
data = {
    'X': [1, 2, 3, 4, 5],
    'Y': [2, 3, 5, 7, 11],
    'Z': [5, 6, 7, 8, 9]
}
df = pd.DataFrame(data)
# 相関係数の計算
correlation_matrix = df.corr()
# 結果の表示
print("相関行列:\n", correlation_matrix)
# ヒートマップの作成
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt='.2f')
plt.title('相関行列のヒートマップ')
plt.show()

このコードを実行することで、相関行列とそのヒートマップを確認することができます。

Pandasを使うことで、データの相関関係を簡単に分析できることがわかります。

SciPyを使った相関係数の計算

SciPyは科学計算用のライブラリで、統計的な計算を行うための多くの関数が提供されています。

相関係数を計算するためには、scipy.statsモジュールのpearsonr()関数を使用します。

ここでは、SciPyを使った相関係数の計算方法について詳しく説明します。

scipy.stats.pearsonr()の使い方

scipy.stats.pearsonr()関数は、2つの配列を引数として受け取り、ピアソン相関係数とそのp値を返します。

この関数を使用することで、相関の強さとその有意性を同時に評価できます。

基本的な使い方は以下の通りです。

from scipy import stats
# サンプルデータ
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# ピアソン相関係数の計算
correlation_coefficient, p_value = stats.pearsonr(x, y)
print("相関係数:", correlation_coefficient)
print("p値:", p_value)

ピアソン相関係数とp値の取得

pearsonr()関数は、相関係数とp値の2つの値を返します。

相関係数は-1から1の範囲で、値が1に近いほど強い正の相関、-1に近いほど強い負の相関を示します。

p値は、相関が偶然である可能性を示し、通常は0.05未満であれば有意とされます。

from scipy import stats
# サンプルデータ
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# ピアソン相関係数の計算
correlation_coefficient, p_value = stats.pearsonr(x, y)
print("相関係数:", correlation_coefficient)  # 相関係数の表示
print("p値:", p_value)                      # p値の表示

SciPyでの相関係数の計算例

以下は、SciPyを使って相関係数を計算する具体的な例です。

from scipy import stats
# サンプルデータ
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# ピアソン相関係数の計算
correlation_coefficient, p_value = stats.pearsonr(x, y)
print("相関係数:", correlation_coefficient)  # 相関係数の表示
print("p値:", p_value)                      # p値の表示
相関係数: 0.9722718241315029
p値: 0.005519518537275773

SciPyを使うことで、相関の強さと有意性を簡単に評価できることがわかります。

相関係数の応用例

相関係数は、データ分析や機械学習の分野で広く利用されており、さまざまな応用があります。

ここでは、相関係数を使った具体的な応用例について説明します。

相関係数を使ったデータ分析の実例

相関係数は、データセット内の変数間の関係を理解するために使用されます。

たとえば、マーケティングデータにおいて、広告費と売上の相関を調べることで、広告投資の効果を評価できます。

相関係数が高い場合、広告費を増やすことで売上が増加する可能性が高いと判断できます。

相関係数を使った特徴量選択

機械学習モデルを構築する際、相関係数を用いて特徴量選択を行うことができます。

相関係数が高い特徴量は、ターゲット変数との関係が強いことを示します。

これにより、モデルの精度を向上させるために、重要な特徴量を選択し、冗長な特徴量を除外することができます。

たとえば、相関係数が0.8以上の特徴量を選択し、0.2以下の特徴量は除外することが考えられます。

相関係数を使った異常検知

異常検知の分野でも相関係数は有用です。

通常のデータの相関関係を把握しておくことで、異常なデータポイントを特定できます。

たとえば、センサーデータにおいて、温度と湿度の相関が高い場合、温度が急激に変化した際に湿度も変化しない場合、そのデータポイントは異常と見なされる可能性があります。

相関係数を用いることで、異常を早期に検出し、対策を講じることができます。

相関係数と回帰分析の関係

相関係数は回帰分析と密接に関連しています。

回帰分析では、独立変数と従属変数の関係をモデル化しますが、相関係数はその関係の強さを示します。

相関係数が高い場合、回帰モデルのフィッティングが良好である可能性が高く、予測精度が向上します。

逆に、相関係数が低い場合、モデルの改善が必要であることを示唆します。

回帰分析を行う前に相関係数を確認することで、適切なモデル選択や変数の選定が可能になります。

よくある質問

相関係数が1や-1になることはあるのか?

はい、相関係数が1または-1になることはあります。

相関係数が1の場合、2つの変数は完全な正の相関を持ち、1つの変数が増加するともう1つの変数も同じ割合で増加します。

逆に、相関係数が-1の場合、完全な負の相関を示し、1つの変数が増加するともう1つの変数は同じ割合で減少します。

これらの状況は、理想的な線形関係が存在する場合に限られます。

実際のデータでは、相関係数が1または-1になることは稀です。

相関係数が0の場合、全く関係がないのか?

相関係数が0の場合、2つの変数間に線形関係がないことを示しますが、全く関係がないとは限りません。

非線形な関係や他の要因による影響が存在する場合、相関係数は0でも変数間に何らかの関係がある可能性があります。

したがって、相関係数が0であることは、必ずしも変数間に関係がないことを意味するわけではありません。

データの可視化や他の統計手法を用いて、より深く分析することが重要です。

ピアソン相関係数以外の相関係数はあるのか?

はい、ピアソン相関係数以外にもいくつかの相関係数があります。

主なものには以下のようなものがあります:

  • スピアマンの順位相関係数:データの順位に基づいて相関を評価します。

非線形な関係や外れ値に対して頑健です。

  • ケンドールの順位相関係数:データの順位に基づく相関を評価し、スピアマンよりも計算が簡単です。

特に小さなデータセットに適しています。

  • 点バイセクション相関係数:1つの変数がカテゴリカルで、もう1つが連続変数の場合に使用されます。

これらの相関係数は、データの特性や分析の目的に応じて使い分けることが重要です。

まとめ

この記事では、Pythonを用いて相関係数を計算する方法やその応用例について詳しく解説しました。

相関係数は、データ分析や機械学習において非常に重要な指標であり、変数間の関係を評価するために広く利用されています。

これを踏まえ、実際のデータ分析やモデル構築において相関係数を積極的に活用し、より効果的な意思決定を行うことをお勧めします。

  • URLをコピーしました!
目次から探す