今回は2変数間の関係性を表す共分散と相関係数をPythonで計算する方法を紹介します。
共分散(Covariance)とは
2変数の関係性を表す指標です。
共分散が大きいと、2変数間に関係性があることを示し、
共分散が0に近いと、2変数間に関係性がないことを示します。
共分散が正の場合、一方の変数が増加するとき、もう一方の変数も増加する傾向にあります。
共分散が負の場合、一方の変数が増加するとき、もう一方の変数が減少する傾向にあります。
これらを正の相関、負の相関といいます。
共分散の値は変数の値に依存するので、共分散の値が大きいからといって相関が強いと言い切れないのが、共分散の特徴です。
共分散の計算式は以下です。
\[s_{xy} = \frac{1}{n} \sum_{i=1}^{n} (x_i – \bar{x})(y_i – \bar{y})\]
共分散の相関関係を図で表すと以下の通りです。

共分散行列
共分散行列とは、分散と共分散を行列式で表したものです。
変数間の相関をまとめて表示することができます。
変数$x$, $y$共分散行列を式で表すと以下の通りです。
\[S_{xy} = \begin{bmatrix} \text{s}_{x}^{2} & \text{s}_{xy}\\ \text{s}_{xy} & \text{s}_{y}^{2} \end{bmatrix}\]
対角には\(x\), \(y\)それぞれの分散が入ります。
Pythonで共分散を計算
それではPythonで共分散を計算してみましょう!
NumPyのcov関数
を使用すると、簡単に共分散を計算できます。
サンプルコードは以下の通りです。
import numpy as np
import seaborn as sns
# データの準備
df = sns.load_dataset('tips')
# tipとtotal_billの共分散を求める
np.cov(df['tip'], df['total_bill'])
実行結果
array([[ 1.91445464, 8.32350163],
[ 8.32350163, 79.25293861]])
tip
とtotal_bill
の共分散は、8.32350163
だとわかります。
ただ、この結果だけでは、tip
とtotal_bill
の相関がどれくらいあるのかはわかりません。
使用したデータ
今回は、tips
のデータセットを使用しました。
tips
は、機械学習や統計学の分野でサンプルデータとして使用されるレストランのお会計に関するデータセットです

相関係数(Correlation coefficient)とは
相関係数とは、共分散を標準化したものです。
共分散の値は変数の値に依存するので、どれくらい相関が強いか数値だけでは判断できませんでした。
その共分散を標準化し、相関の強さが数値でわかるようにしたのが相関係数です。
相関係数は -1 から1までで表現され、-1または1に近づくほど、変数間の相関は強くなります。
相関行列
相関行列は変数間の相関係数を行列式で表現したものです。
対角線は同じ変数間の相関係数なので、1になります。
相関行列は以下の式で表すことができます。
\[R = \begin{bmatrix} \text{1} & \text{r}_{12} & \cdots & \text{r}_{1n} \\ \text{r}_{21} & \text{1} & \cdots & \text{r}_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ \text{r}_{n1} & \text{r}_{n2} & \cdots & \text{1} \end{bmatrix}\]
Pythonで相関係数を計算
相関係数をPythonを計算していきます。
NumPyのcorrcoef関数
を使用すると、簡単に相関係数を計算できます。
サンプルコードは以下の通りです。
import numpy as np
import seaborn as sns
# データの準備
df = sns.load_dataset('tips')
# tipとtotal_billの相関係数を求める
np.corrcoef(df['tip'], df['total_bill'])
実行結果
array([[1. , 0.67573411],
[0.67573411, 1. ]])
tip
とtotal_bill
の相関係数は0.67573411
であることがわかります。
まとめ
今回は2変数間の関係性を表す共分散と相関係数をPythonで計算する方法を紹介しました。
それぞれで使用するNumPyの関数は以下です。
- 共分散: np.cov()
- 相関係数: np.corrcoef()
相関係数は2変数間の関係性を簡単に知ることができるので、便利です。
ぜひ覚えていきましょう!
ここまで読んでくださりありがとうございます。
参考
おすすめ教材
米国データサイエンティストが教える統計学超入門講座【Pythonで実践】他のUdemyの講座が気になる方はこちら