如何在 Python 中计算变量之间的相关性?2025年2月3日 | 阅读 6 分钟 一个数据集的变量以多种方式相互连接。这些关系在数据分析和建模中可能非常重要。变量经常相互导致或直接相互依赖;其他时候,两个变量之间仅有松散的关联,且没有明显的因果关系。两个变量可能都依赖于另一个未知变量。所有这些关系都必须被理解才能使数据有意义;因此,就有了相关性的概念。相关性是处理两个变量之间的统计关系,并且可以采取不同的形式。如果存在正相关,则意味着两个变量朝着同一方向移动——因此,一个增加,另一个也会增加。负相关则表明,当一个变量的值上升时,另一个变量会下降。有时,它是中性或零相关,表示变量之间没有关系,因此相互没有影响。这些相关性——正相关、中性相关和负相关——有助于描述变量在数据集中如何交互,并指导基于它的洞察和决策。 现在我们将看到如何使用 Python 计算变量之间的相关性。 导入库输出 ![]() 它会构造两个变量的散点图,可视化它们的关系。我们自己构造了这个数据集,所以我们事先知道这些变量是相关的,并且我们可以在这个散点图中看到增长的趋势。然而,为了计算相关系数,我们必须提到一个非常基本的统计概念:协方差。它是理解相关性的基石。 协方差两个变量在线性关系中的一个重要方面是,一个变量的变化对应着另一个变量的一致的、成比例的变化。它可以直接或反向相关。协方差衡量两个变量之间存在的关系。这是通过取每个观测值与各自变量均值之差的乘积的平均值来实现的。更确切地说,协方差由以下基本公式/方程定义: cov(A, B) = (sum (a - mean(A)) (b - mean(B)) ) 1/(num-1)。 在此公式中,A 和 B 是两个变量,num 是数据点的数量。在这里,由于均值用于定义协方差,因此数据理想情况下应该是高斯分布或至少近似高斯分布,以便结果具有最大的意义。协方差符号可以确定变量之间联系的方向。当两个变量具有正协方差时,它们朝着同一方向移动——也就是说,当一个增加时,另一个也随之增加。当存在负协方差时,意味着变量朝着相反的方向移动——也就是说,当一个上升时,另一个下降。然而,协方差的幅度并不特别直观,因为它不提供关系的强度的标准化度量——只提供方向。如果协方差值为零,则变量是独立的,没有线性关系。 在实际应用中,NumPy 通过 `cov()` 函数提供了计算两个或多个变量之间协方差矩阵的功能。然后将其汇总到一个协方差矩阵中,该矩阵包含关于任何两个变量之间协方差的所有信息。因此,在探索性数据分析和进行统计建模时,它非常有用。例如,要找出两个数据集之间的协方差,只需要一个简单的函数调用,如 `covariance = np.cov(data_num1, data_num2)`,其中 `data_num1` 和 `data_num2` 是正在比较的两个数据集。同样,此输出将有助于进一步分析,例如,在查找相关性或对变量之间的关系进行建模时。 输出 ![]() 这两个变量的协方差为 389.75。由于它是正的,我们可以得出结论,变量的变化方式符合我们的预期。 协方差作为独立统计量的一个缺点是它很难解释。现在我们来看看皮尔逊相关系数。 皮尔逊相关系数皮尔逊相关系数以统计学家卡尔·皮尔逊的名字命名,它是一种度量,用于表示两个数据样本或任何数据集中的两个变量之间线性关系的幅度和方向。该系数对于统计和数据分析非常有用,因为它将两个变量线性相关的程度简化为一个数字。 可以通过将两个变量的标准差相乘,然后除以协方差来确定皮尔逊相关系数。数学上表示为: 皮尔逊相关系数 = covariance(A, B) / (stdv(A) stdv(B)) 这意味着它在计算中使用均值和标准差,表明两个数据样本应该是高斯分布或至少是高斯分布的。计算出的输出是一个相关系数,可以从中解释变量之间的关系。 相关系数的限制显示为介于负一和正一之间的值,其中零表示无相关性,而从完全负相关到完全正相关。当然,值需要解释,但通常低于 -0.5 或高于 0.5 的值表示显著的相关性,低于这些水平的值则不那么显著。 如果您想计算两个数据变量或来自同一数据集或任何其他数据集的两个相同长度数据样本之间的皮尔逊相关系数,您还可以使用 SciPy 的 `pearsonr()` 方法。 输出 ![]() 在这里,我们可以轻松地识别出这两个变量存在相关性,如果一个增加,另一个也随之增加,因此我们可以说它是正相关。它是 0.8,这表明在值大于 0.5 且接近 1.0 的情况下存在强关系。对于两个以上的变量,可以使用皮尔逊相关系数来建立它们之间的相互关系。一种方法是制作一个数据集中每对变量之间连接的矩阵。结果将是一个对称矩阵,称为相关矩阵,主对角线上的值为 1.0,因为每一列总是与自身完美相关。 斯皮尔曼等级相关正如我们在皮尔逊相关性中所见,一个变量与另一个变量的关系是基于线性的,而在这里我们可以解释一个变量可能与另一个变量基于非线性关系。这种变量可能具有的非线性关系,可能在整个分布上都相当强或弱。分布也可能是高斯分布或非高斯分布。在这种情况下,我们使用斯皮尔曼相关性,它以查尔斯·斯皮尔曼的名字命名。我们也可以在线性变量上使用此关系检验,尽管它会产生较低的功效,结果是我们得到较低的系数。与皮尔逊相关系数一样,斯皮尔曼系数的值也介于负一和正一之间。其中零代表变量之间没有关系。 在这里,在统计学中,我们使用每个样本上值的相对秩来确定系数,而我们对各种数据值或数据点使用其他统计方法,如协方差和标准差。这是非参数统计的典型特征,例如不假定高斯数据分布的统计技术。尽管假定了变量之间的单调关系,但没有假定线性关系。在数学中,两个变量之间的这种关系被称为递增或递减。 在不确定数据分布类型的情况下,它也很好用。它还能处理变量之间存在的任何可能的关系。如果您想计算相关性,可以使用 SciPy 的 `spearmanr()` 函数。 与皮尔逊相关系数一样,可以为数据集中每个变量配对计算系数,以使用基本公式创建一个可检查的相关矩阵。 斯皮尔曼相关系数 = covariance(rank(A), rank(B)) / (stdv(rank(A)) stdv(rank(B)))* 输出 ![]() 我们知道数据是高斯分布的,并且这些变量之间应该存在线性关系。尽管如此,基于秩的非参数方法在变量之间仍然得到了优秀的 0.8 相关性。 下一主题机器学习中的因果关系导论 |
我们请求您订阅我们的新闻通讯以获取最新更新。