데이터 분석/jupyternotebook

피어슨 상관계수

NIGHT_LOVE 2020. 6. 18. 16:34
critics = {
    'BTS': {'암수살인': 5, '바울':4, '할로윈':1.5},
    '손흥민': {'바울':5, '할로윈':2},
    '레드벨벳': {'암수살인':2.5, '바울':2, '할로윈':1},
    '트와이스': {'암수살인':3.5, '바울':4 , '할로윈': 5}
}

def simPearson(critics, name1 , name2):
    sumX= 0
    sumY= 0
    sumPowX= 0
    sumPowY= 0
    sumXY=0
    count =0

    for i in critics[name1]: 
        if i in critics[name2]:      #같은 영화를 봤다면
                sumX += critics[name1][i]        #상관계수 구하는 부분
                sumY += critics[name2][i]
                sumPowX += pow(critics[name1][i], 2)
                sumPowY += pow(critics[name2][i], 2)
                sumXY += critics[name1][i]*critics[name2][i]
                count += 1
              
    #name1과 2의 상관계수  #상관계수 리턴
    return(sumXY- ((sumX*sumY)/count))/sqrt((sumPowX-(pow(sumX,2)/count))* 
    (sumPowY -(pow(sumY,2)/count)))


simPearson(critics, 'BTS', '손흥민')
simPearson(critics, 'BTS', '레드벨벳')
simPearson(critics, '손흥민', '레드벨벳')
simPearson(critics, '손흥민', '트와이스')
simPearson(critics, '레드벨벳', '트와이스')