在数据分析中,相关性分析 是一种基础且常用的统计工具,但也是最容易被误解和滥用的工具之一。许多分析者习惯直接计算两个变量之间的相关性,得到一个数字(比如0.8或-0.6),然后下结论:“它们有很强的关系!” 但实际上,相关性不代表因果关系,也不能脱离实际逻辑随意计算。
举个例子:
冰淇淋销量与泳衣销量
如果单纯看数据的话,冰淇淋销量与泳衣销量之间存在正相关。
但这并不意味着吃冰淇淋就会去买泳衣!真正的原因是“夏季高温”,它同时导致了冰淇淋销量增加和游泳次数增加。
电影票价与婚姻离婚率
数据可能显示,某些年份电影票价上涨时,离婚率也上升。
但这两者之间并没有直接关系,而是受到第三方因素(比如经济状况)的共同影响。
这些例子告诉我们:计算相关性之前,一定要结合业务逻辑和实际背景,判断变量间是否有合理的联系。否则,相关性就只是一个数字,没有任何意义!
今天我们的更新将侧重正确进行相关性分析,避免常见的误区。特别是如何使用Python代码计算相关性,并绘制高度美学优化的相关性热图。
详细的Python代码举例如下:
# 导入必要的库
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
from scipy.stats import pearsonr
# 创建一个示例数据框
np.random.seed(42)
data = np.random.rand(10, 10) # 10x10的随机数据
# 将数据转换为DataFrame并设置列名
df = pd.DataFrame(data, columns=[f'Var{i}' for i in range(1, 11)])
# 计算相关性矩阵
corr_matrix = df.corr()
# 计算显著性差异矩阵(例如,使用皮尔森相关系数的p值)
p_values = np.zeros_like(corr_matrix)
for i in range(len(df.columns)):
for j in range(len(df.columns)):
_, p_values[i, j] = pearsonr(df.iloc[:, i], df.iloc[:, j])
# 创建一个画布
plt.figure(figsize=(12, 8))
# 绘制热图
sns.heatmap(corr_matrix, annot=True, fmt=".2f", cmap='coolwarm', center=0,
cbar_kws={'shrink': 0.75}, xticklabels=df.columns, yticklabels=df.columns)
# 添加标题
plt.title('Correlation Heatmap with Clustering and Significance', fontsize=16)
# 显示显著性差异
for i in range(len(df.columns)):
for j in range(len(df.columns)):
if p_values[i, j] < 0.05:
plt.text(j + 0.5, i + 0.5, '*', color='red', ha='center', va='center', fontsize=18)
## Text(0.5, 0.5, '*')
# 显示图形
plt.show()
五、总结
今天的更新想要达到的效果是从计算代码到可视化,带你全面掌握了Python中的相关性分析,最主要的是明确一点:相关性不是因果性,计算前需要判断变量间的逻辑关系。最后强调:这些代码还比较简洁,一定要结合自己的数据以及绘图结果进行适当的调整,才能达到最佳的美学效果!
感谢关注,你的支持是我不懈的动力!