为何无法使用Python的statistics.correlation?AttributeError报错如何解决?
报错原因及解决方法
报错原因
statistics.correlation 是Python 3.10版本才新增的函数,若你当前使用的Python版本低于3.10,就会触发AttributeError: module 'statistics' has no attribute 'correlation'错误。IDE的语法提示基于高版本Python特性,和你实际运行的Python版本不匹配,才会出现这种提示与实际运行结果矛盾的情况。
解决方法
方法1:升级Python版本
将Python版本升级到3.10或更高版本,原代码即可正常执行,输出结果为1.0(完全相同的序列皮尔逊相关系数为1)。
方法2:使用第三方库计算相关性
若不想升级Python版本,可借助numpy或scipy库实现皮尔逊相关系数计算:
基于numpy实现
import numpy as np x = [1, 2, 3, 4, 5, 6] corr_matrix = np.corrcoef(x, x) print(corr_matrix[0, 1]) # 输出1.0
基于scipy实现
from scipy.stats import pearsonr x = [1, 2, 3, 4, 5, 6] corr, p_value = pearsonr(x, x) print(corr) # 输出1.0
方法3:手动实现皮尔逊相关系数
若不想依赖第三方库,可手动编写计算逻辑:
def correlation(x, y): n = len(x) sum_x = sum(x) sum_y = sum(y) sum_xy = sum(a*b for a, b in zip(x, y)) sum_x2 = sum(a**2 for a in x) sum_y2 = sum(b**2 for b in y) numerator = n * sum_xy - sum_x * sum_y denominator = ((n * sum_x2 - sum_x**2) * (n * sum_y2 - sum_y**2)) ** 0.5 return numerator / denominator if denominator != 0 else 0.0 x = [1, 2, 3, 4, 5, 6] print(correlation(x, x)) # 输出1.0
内容的提问来源于stack exchange,提问作者Thomas Carlton
相关产品推荐
相关产品推荐

