4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonで相関係数を計算する練習

Last updated at Posted at 2019-04-11

はじめに

相関係数とは

 2つの確率変数の間にある線形な関係の強弱を測る指標である。相関係数は無次元量で、−1以上1以下の実数に値をとる。相関係数が正のとき確率変数には正の相関が、負のとき確率変数には負の相関があるという。また相関係数が0のとき確率変数は無相関であるという。
(wikipediaより)

次の表のように項目1~4に対し、要素1~4のデータが得られたときの要素間の相関係数を求める。

   要素1 要素2 要素3 要素4
項目1 12 28 16 40
項目2 38 35 3 73
項目3 28 55 27 83
項目4 76 93 17 169

結果

   要素1 要素2 要素3 要素4
要素1 1.00
要素2 0.69 1.00
要素3 0.08 0.46 1.00
要素4 0.77 0.78 0.30 1.00

 例えば、要素1は要素2と要素4に対して正の相関があると言える。また、要素1と要素3は無相関といえる。

計算方法

 要素1と要素2の相関係数は次の計算式より得られる。これを上の表が埋まるように計算を繰り返す。

  相関係数 = 共分散 ÷ (要素1の標準偏差 × 要素2の標準偏差)

Pythonによる実装

1.まず、データをnumpy配列として登録する。
2.次に関数を設定する。3つの関数のうち1つ目は平均、中央値、分散、標準偏差を求めるもので、statisticsのライブラリを使用すると、平均、中央値、分散、標準偏差を簡単に算出することができる。※今回は蛇足。2つ目は共分散を求めるもの、3つ目は相関係数を求めるもの。
3.3つ目の関数に要素同士の組み合わせを代入して対応した相関係数を算出する。

from statistics import mean, median, variance, stdev
import numpy as np

a = np.array([12,38,28,50,76])
b = np.array([28,35,55,87,93])
c = np.array([16,3,27,37,17])
d = np.array([40,73,83,137,169])

def ans(n):
    global median,variance,stdev
    m = mean(n)
    median = median(n)
    variance = variance(n)
    stdev = stdev(n)
    print('平均:{0:.2f}'.format(m))
    print('中央値:{0:.2f}'.format(median))
    print('分散:{0:.2f}'.format(variance))
    print('標準偏差:{0:.2f}'.format(stdev))
    return

def covar(n,m):
    m1 = mean(n)
    m2 = mean(m)
    n1 = n - m1
    n2 = m - m2
    n3 = n1 * n2
    n4 = mean(n3)
    print('共分散:{0:.2f}'.format(n4))
    return n4
    
def cor(n,m):
    i = covar(n,m)
    j = stdev(n)
    k = stdev(m)
    cor = i / (j * k)
    print('相関係数:{0:.2f}'.format(cor))
    return

cor(a,b)
cor(a,c)
cor(a,d)

cor(b,c)
cor(b,d)

cor(c,d)

出力

共分散:493.00
相関係数:0.69
共分散:24.00
相関係数:0.08
共分散:958.00
相関係数:0.77
共分散:175.00
相関係数:0.46
共分散:1191.00
相関係数:0.78
共分散:200.00
相関係数:0.30

参考文献

  • Qiita:Pythonで平均、中央値、最頻値、分散、標準偏差を計算する
  • 柴田淳著『みんなのPython 第4版』(2016)
  • 松本 健太郎著『データサイエンス「超」入門』(2018)

訂正

 ans関数のglobal文とretun文を削除。
 print文にf-stringを適用。

from statistics import mean, median, variance, stdev
import numpy as np

a = np.array([12,38,28,50,76])
b = np.array([28,35,55,87,93])
c = np.array([16,3,27,37,17])
d = np.array([40,73,83,137,169])

def ans(n):                               <--
    m = mean(n)
    median = median(n)
    variance = variance(n)
    stdev = stdev(n)
    print(f'平均:{m:.2f}')                <--
    print(f'中央値:{median:.2f}')         <--
    print(f'分散:{variance:.2f}')         <--
                                         <--
def covar(n,m):
    m1 = mean(n)
    m2 = mean(m)
    n1 = n - m1
    n2 = m - m2
    n3 = n1 * n2
    n4 = mean(n3)
    print(f'共分散:{n4:.2f}')             <--
    return n4
    
def cor(n,m):
    i = covar(n,m)
    j = stdev(n)
    k = stdev(m)
    cor = i / (j * k)
    print(f'相関係数:{cor:.2f}')          <--
    return
4
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?