ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 상관분석 (Correlation) in python
    data-science-summary/summary 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'))
    반응형

    댓글

Designed by Tistory.