from math import sqrt
def multipl(a,b):
sumofab = 0.0
for i in range ( len (a)):
temp = a[i] * b[i]
sumofab += temp
return sumofab
def corrcoef(x,y):
n = len (x)
#求和
sum1 = sum (x)
sum2 = sum (y)
#求乘积之和
sumofxy = multipl(x,y)
#求平方和
sumofx2 = sum ([ pow (i, 2 ) for i in x])
sumofy2 = sum ([ pow (j, 2 ) for j in y])
num = sumofxy - ( float (sum1) * float (sum2) / n)
#计算皮尔逊相关系数
den = sqrt((sumofx2 - float (sum1 ** 2 ) / n) * (sumofy2 - float (sum2 ** 2 ) / n))
return num / den
a = [3.3, 6.5, 2.8, 3.4, 5.5]
b = [3.5, 5.8, 3.1, 3.6, 5.1]
c = [5.6, 3.3, 4.5, 5.2, 3.2]
d = [5.4, 2.8, 4.1, 4.9, 2.8]
e = [5.2, 3.1, 4.7, 5.3, 3.1]
print(corrcoef(a,b))
print(corrcoef(a,c))
print(corrcoef(a,d))
print(corrcoef(a,e))
print(corrcoef(b,c))
print(corrcoef(b,d))
print(corrcoef(b,e))
print(corrcoef(c,d))
print(corrcoef(c,e))
print(corrcoef(d,e))
结果为:
相关系数 用户A&B 0.9997735176536731 用户A&C -0.8477583108627492 用户A&D -0.8418164002035229 用户A&E -0.9152367092225393 用户B&C -0.8417411591004959 用户B&D -0.835319954072308 用户B&E -0.9099753379926111 用户C&D 0.9989872824995625 用户C&E 0.9762719892992101 用户D&E 0.9697821610909036