📖 知识点
1. 什么是相关分析?
相关:衡量两个数值变量之间变化趋势的关系。用相关系数(范围 -1 到 1)表示:
接近 1:正相关(一个涨,另一个也涨)
接近 -1:负相关(一个涨,另一个跌)
接近 0:无明显关系
💡 生活比喻菜价和销量:通常价格越低销量越高,就是负相关(系数接近 - 1);价格和成本,通常越高越好、同涨同跌,就是正相关。
2. corr () 计算相关系数
对数值列两两算相关系数,返回一个 "相关矩阵":
# 计算所有数值列之间的相关系数
df.corr()
运行输出:
价格 销量
价格 1.000000 -0.9xxxxx
销量 -0.9xxxxx 1.000000
对角线是 1(自己和自己完全正相关),对角外的数表示两列的相关程度。
3. 单看两列的相关系数
# 只看"价格"和"销量"的相关系数
df["价格"].corr(df["销量"])
返回一个数,如
-0.95,表示强负相关。
⚠️ 易错提醒
corr只能用于数值列,文本列不参与相关 ≠ 因果!相关只能说明 "一起变",不能证明 "谁导致谁"
相关系数越接近 ±1 关系越强,接近 0 表示关系弱
⚔️ Kata 实战任务
任务需求:
导入 pandas,创建一份数据(价格、销量两个数值列,呈负相关)
用
df.corr()计算相关系数矩阵用
df["价格"].corr(df["销量"])单看两列相关系数判断是正相关还是负相关
打印结果并解读
参考代码
import pandas as pd
# 价格越高、销量越低的示例数据(负相关)
data = {
"菜名": ["白菜", "番茄", "土豆", "黄瓜", "茄子", "冬瓜"],
"价格": [1, 2, 3, 4, 5, 6],
"销量": [95, 82, 70, 58, 45, 30],
}
df = pd.DataFrame(data)
# 关联探味:计算相关系数
print("===== 相关系数矩阵 =====")
print(df.corr())
print("\n===== 价格与销量的相关系数 =====")
corr_value = df["价格"].corr(df["销量"])
print("相关系数:", round(corr_value, 3))
if corr_value < 0:
print("📉 负相关:价格越高,销量越低")
elif corr_value > 0:
print("📈 正相关:价格越高,销量越高")
else:
print("🔗 无明显相关")
运行输出:
===== 相关系数矩阵 =====
价格 销量
价格 1.000000 -0.998191
销量 -0.998191 1.000000
===== 价格与销量的相关系数 =====
相关系数: -0.998
📉 负相关:价格越高,销量越低
💡 观察:价格和销量相关系数约 -0.998,非常接近 -1,是强负相关—— 价格越高销量越低,符合 "便宜好卖" 的直觉。corr 把这种关系量化成一个数字,一目了然。
🧠 思考题
相关系数接近 1、-1、0 分别代表什么?"价格和销量 -0.998" 说明了什么?
为什么说 "相关不等于因果"?举一个 "两变量一起变但不是谁导致谁" 的例子。