趋近智
虽然散点图能让我们直观感受两个数值变量间的关系,但我们常需要一个定量指标来描述这种关联的强度和方向。相关性分析正是为此:它提供了一个统计量,总结了两个变量一同变化的紧密程度。
相关系数是一个介于 到 之间的数值。它告诉我们关于两个变量关系的两个方面:
最常用的相关系数是皮尔逊积矩相关系数,通常表示为 。它主要衡量两个连续变量之间线性关系的强度和方向。
皮尔逊 的值可按如下方式解读:
皮尔逊 假定变量近似服从正态分布,且它们之间的关系是线性的。它也可能对异常值敏感。
Pandas 使用 DataFrame 的 .corr() 方法,使计算皮尔逊相关性变得简单。默认情况下,它会计算列的成对相关性。
import pandas as pd
# 示例 DataFrame
data = {'Temperature': [20, 22, 25, 18, 23, 28],
'Ice_Cream_Sales': [150, 170, 200, 130, 180, 230],
'Umbrella_Sales': [50, 45, 30, 60, 40, 20]}
df = pd.DataFrame(data)
# 计算成对的皮尔逊相关矩阵
correlation_matrix = df.corr(method='pearson')
print(correlation_matrix)
这将产生一个矩阵,其中每个单元格 包含列 和列 之间的皮尔逊相关系数。对角线元素始终为 ,因为一个变量与其自身完全相关。
Temperature Ice_Cream_Sales Umbrella_Sales
Temperature 1.000000 0.993399 -0.976701
Ice_Cream_Sales 0.993399 1.000000 -0.954676
Umbrella_Sales -0.976701 -0.954676 1.000000
从该输出可以看出,Temperature 和 Ice_Cream_Sales 之间存在显著的正相关 (),而 Temperature 和 Umbrella_Sales 之间存在显著的负相关 ()。
要计算仅两个特定列(Series)之间的相关性,您可以使用一个 Series 的 .corr() 方法,并将另一个 Series 作为参数 (parameter)传入:
# 温度和冰淇淋销量之间的相关性
temp_sales_corr = df['Temperature'].corr(df['Ice_Cream_Sales'])
print(f"温度和冰淇淋销量之间的相关性: {temp_sales_corr:.4f}")
# 输出:温度和冰淇淋销量之间的相关性:0.9934
如果变量之间的关系不是线性的,但仍普遍呈增加或减少(单调)趋势呢?或者数据包含大幅异常值或不服从正态分布呢?在这种情况下,皮尔逊 可能不是最适合的衡量指标。
斯皮尔曼等级相关系数,表示为 (rho),是一种非参数 (parameter)替代方法。它评定两个变量之间的关系能用单调函数表述的程度。斯皮尔曼相关性不是使用实际值,而是对数据的等级计算皮尔逊相关性。
它比皮尔逊 对异常值不那么敏感,并且不假定线性或正态性。
您可以通过在 .corr() 方法中指定 method='spearman' 来计算斯皮尔曼相关性:
# 计算成对的斯皮尔曼相关矩阵
spearman_corr_matrix = df.corr(method='spearman')
print(spearman_corr_matrix)
Temperature Ice_Cream_Sales Umbrella_Sales
Temperature 1.000000 1.000000 -0.942857
Ice_Cream_Sales 1.000000 1.000000 -0.942857
Umbrella_Sales -0.942857 -0.942857 1.000000
请注意,这些值可能与皮尔逊相关性略有不同,尤其是当存在非线性单调关系或异常值时。在此特定示例中,关系非常接近线性,因此斯皮尔曼的结果与 Umbrella_Sales 相关性的皮尔逊结果相似但不完全相同。
相关性分析给出数值变量对之间关系的简洁数值汇总,作为散点图获得视觉观察的补充,并指导后续分析或特征选择。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•