import pandas as pd
import sys
from math import sqrt
import numpy
import pandas
def person(x,y):
data = pandas.DataFrame()
data['x'] = x
data['y'] = y
print('x与y相关系数为:',data.corr()['x']['y'])
def multiply(a,b):
#a,b两个列表的数据一一对应相乘之后求和
sum_ab=0.0
for i in range(len(a)):
temp=a[i]*b[i]
sum_ab+=temp
return sum_ab
# https://blog.csdn.net/xzfreewind/article/details/73550856 下面用的是最后一个公式来实现的
def cal_pearson(x,y):
n=len(x)
#求x_list、y_list元素之和
sum_x = sum(x)
sum_y = sum(y)
#求x_list、y_list元素乘积之和
sum_xy=multiply(x,y)
#求x_list、y_list的平方和
sum_x2 = sum([pow(i,2) for i in x])
sum_y2 = sum([pow(j,2) for j in y])
molecular=sum_xy-(float(sum_x)*float(sum_y)/n)
#计算Pearson相关系数,molecular为分子,denominator为分母
denominator=sqrt((sum_x2-float(sum_x**2)/n)*(sum_y2-float(sum_y**2)/n))
print('x与y相关系数为:',molecular/denominator)
if __name__=='__main__':
x = numpy.array([1,2,1])
y = numpy.array([4,2,13])
#自带函数
person(x,y)
#自己编写函数
cal_pearson(x,y)
# x与y相关系数为: -0.6404640308067907
# x与y相关系数为: -0.6404640308067903
#运行结果几乎一致的