本文共 2565 字,大约阅读时间需要 8 分钟。
在日常工作中,我们常常面临处理大量数据的问题,这些数据之间可能存在某种关联性。这些关联性可能是正相关、负相关,或者完全不相关。在需要做决策时,能够量化地分析数据间的关联性显然是非常有帮助的。本文将介绍如何使用 Python 进行数据相关性分析。
为了演示如何进行数据相关性分析,我们首先需要准备数据。在这里,我们将使用 Python 的随机数生成函数 random 生成两个包含 20 个数据的数组,这些数据都在 [0, 100] 区间内随机生成。
import randoma = [random.randint(0, 100) for _ in range(20)]b = [random.randint(0, 100) for _ in range(20)]print(a) # 输出结果类似:[35, 2, 75, 72, 55, 77, 69, 83, 3, 46, 31, 91, 72, 12, 15, 20, 39, 18, 57, 49]print(b) # 输出结果类似:[25, 24, 72, 91, 27, 44, 85, 21, 0, 64, 44, 31, 6, 91, 1, 61, 5, 39, 24, 43]
在进行相关性分析之前,我们需要了解数据的基本特性。对于离散变量,期望值(平均数)是最简单的度量指标。我们可以编写一个函数来计算离散变量的期望值。
def mean(x): return sum(x) / len(x)print(mean(a)) # 输出结果类似:46.05print(mean(b)) # 输出结果类似:39.9
接下来,我们需要了解数据的离散程度。方差和标准差是衡量数据离散程度的重要指标。对于离散变量,方差的计算公式如下:
def de_mean(x): x_bar = mean(x) return [x_i - x_bar for x_i in x]def dot(v, w): return sum(v_i * w_i for v_i, w_i in zip(v, w))def sum_of_squares(v): return dot(v, v)def variance(x): n = len(x) deviations = de_mean(x) return sum_of_squares(deviations) / (n - 1)def standard_deviation(x): return math.sqrt(variance(x))import mathprint(variance(a)) # 输出结果类似:791.8394736842105print(variance(b)) # 输出结果类似:850.5157894736841
接下来,我们需要计算两组数据的协方差和相关系数。协方差的计算公式如下:
def covariance(x, y): n = len(x) deviations_x = de_mean(x) deviations_y = de_mean(y) return dot(deviations_x, deviations_y) / (n - 1)def correlation(x, y): stdev_x = standard_deviation(x) stdev_y = standard_deviation(y) if stdev_x > 0 and stdev_y > 0: return covariance(x, y) / stdev_x / stdev_y else: return 0print(covariance(a, b)) # 输出结果类似:150.95263157894735print(correlation(a, b)) # 输出结果类似:0.18394200852440826
除了手动编写函数,我们可以使用 numpy 来简化计算。以下是使用 numpy 计算协方差矩阵和相关系数的示例:
import numpy as npab = np.array([a, b])cov_matrix = np.cov(ab)print(cov_matrix) # 输出结果类似:# array([[ 791.83947368, 150.95263158],# [150.95263158, 850.51578947]])corr_coeff = np.corrcoef(ab)print(corr_coeff) # 输出结果类似:# array([[ 1. , 0.18394201],# [ 0.18394201, 1. ]])
我们还可以使用 pandas 库来简化计算。以下是使用 pandas 计算协方差和相关系数的示例:
import pandas as pddf = pd.DataFrame({ 'A': a, 'B': b})print(df.cov()) # 输出结果类似:# A B# 791.83947368 150.95263158# B 150.95263158 850.51578947print(df.corr()) # 输出结果类似:# A B# 1.00000000 0.18394201# B 0.18394201 1.00000000 通过以上步骤,我们可以清晰地看到,两组数据之间存在一定的正相关性,相关系数约为 0.18。这意味着这两组数据之间存在弱正相关关系。虽然数据是随机生成的,但通过统计方法我们可以量化地描述数据间的关系。在实际工作中,了解数据的相关性有助于我们做出更科学的决策。
转载地址:http://qqafk.baihongyu.com/