data-science-summary/summary
상관분석 (Correlation) in python
고수트
2020. 9. 16. 23:01
반응형
<엔지니어는 구현을 못하면 모르는것이다>
상관분석 (Correlation)
두 변수간에 어떤 선형적 관계를 가지고 있는지 분석하는 방법
관계정도를 나타낸 것을 상관계수라고 함
공분산 역시 관계를 나타내지만 공분산에서 두 변수 각각의 표준편차로 나눠주어 단위에 따른 영향을 제거하고 값을 -1 ~ 1 사이로 정해줌
상관계수가 절대값 1에 가까울 수록 강한 선형 관계를 나타냄
pearson 상관계수를 제곱하면 분산에서 공유하는 비율
만약 X, Y의 상관계수가 0.4 이면 그 제곱은 0.16 으로 x의 분산중 16% 를 y와 공유 또는 y로 설명됨, 선형적관계만 설명가능
상관계수에는 일반적으로 사용하는 pearson과 서열척도에 사용하는 spearnman, kendal 방식이 있음
import numpy as np
from scipy import stats
x = [-2.1, -1, 4.3]
y = [3, 1.1, 0.12]
# 공분산
print(np.cov(x,y))
# 공분산에 표준편차 나눠줌
# ddof = 1 은 n-1로 나눈 경우 => 자유도
print(np.cov(x,y)[0,1]/ (np.std(x, ddof=1)* np.std(y, ddof=1)))
print(np.corrcoef(x,y)[0,1])
#pearson 상관계수
print(stats.pearsonr(x,y)) # 상관계수 & p_value
# spearman
# 서열 척도를 사용한 변수일떄 사용
x = [1,2,3,4,5]
y = [5,6,7,8,7]
print(stats.spearmanr(x,y)) # 상관계수 & p_value
print(stats.spearmanr(x,y).correlation)
# kendall
# 비선형적관계이거나 서열변수일때 사용
print(stats.kendalltau(x,y)) # 상관계수 & p_value
# pandas 로 위 3개 가능
import pandas as pd
df = pd.DataFrame([(.2, .3), (.0, .6), (.6, .0), (.2, .1)],
columns=['dogs', 'cats'])
print(df.corr(method='pearson'))
print(df.corr(method='spearman'))
print(df.corr(method='kendall'))
반응형