前面介绍了:方差、标准差、协方差以及相关系数,让我们来看看如何运用吧。 内容有一点多,大家慢慢看!
在数据分析和统计学中,协方差和相关系数是衡量变量之间关系的重要指标。本文将通过一个实际案例,展示如何使用Python计算这些统计量,并进行可视化分析。
项目背景
本项目分析某商场不同品类商品的销售数据,包括水果、化妆品、蔬菜和海鲜的销售额。通过计算这些商品销售额变化率之间的协方差和相关系数,来探索它们之间的关联关系。
完整代码实现
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 读取水果和化妆品、蔬菜、海鲜
(fruitSales, vegetableSales, seafoodSales, makeupSales) = np.loadtxt("mall_sales.csv",
delimiter=",",
skiprows=1,
usecols=(1,2,3,4),
encoding="gbk",
unpack=True)
# 计算协方差
# 归一化
fruit_sales_r = np.diff(fruitSales)/fruitSales[:-1]
makeup_sales_r = np.diff(makeupSales)/makeupSales[:-1]
vegetable_sales_r = np.diff(vegetableSales)/vegetableSales[:-1]
seafood_sales_r = np.diff(seafoodSales)/seafoodSales[:-1]
covm = np.cov(fruit_sales_r, makeup_sales_r)
print("协方差矩阵是:\n", covm)
covmDiag = covm.diagonal()
print("\n协方差矩阵的对角线元素是:\n", covmDiag)
convTrc = covm.trace()
print("\n协方差矩阵的迹是:\n", convTrc)
# r = covm / (fruit_sales_r.std() * makeup_sales_r.std()) # 第一种方式
r1 = np.corrcoef(fruit_sales_r, makeup_sales_r) # 第二种方式
print("\n相关系数矩阵是:\n", r1)
# 可视化
t = np.arange(len(fruit_sales_r))
plt.plot(t, fruit_sales_r, 'r-', label='fruit')
plt.plot(t, makeup_sales_r, 'g--', label='makeup')
plt.plot(t, vegetable_sales_r, 'b*', label='vegetable')
plt.plot(t, seafood_sales_r, 'r-*', label='seafood')
plt.legend()
plt.show()
# 相关系数矩阵
# 水果、蔬菜
r2 = np.corrcoef(fruit_sales_r, makeup_sales_r)
print("\n水果、蔬菜相关系数矩阵是:\n", r2)
# 水果、海鲜
r3 = np.corrcoef(fruit_sales_r, makeup_sales_r)
print("\n水果、海鲜相关系数矩阵是:\n", r3)
# 化妆品、蔬菜
r4 = np.corrcoef(fruit_sales_r, makeup_sales_r)
print("\n化妆品、蔬菜相关系数矩阵是:\n", r4)
# 化妆品、海鲜
r5 = np.corrcoef(fruit_sales_r, makeup_sales_r)
print("\n化妆品、海鲜相关系数矩阵是:\n", r5)
# 蔬菜、海鲜
r6 = np.corrcoef(fruit_sales_r, makeup_sales_r)
print("\n蔬菜、海鲜相关系数矩阵是:\n", r6)
代码解析与统计概念
1. 数据预处理:计算变化率
fruit_sales_r = np.diff(fruitSales)/fruitSales[:-1]
这里使用np.diff()计算相邻数据的差值,然后除以前一期数据,得到销售额的变化率。这种归一化处理消除了数据的量纲影响。
2. 协方差计算
covm = np.cov(fruit_sales_r, makeup_sales_r)
协方差衡量两个变量的总体误差,公式为:
cov(X,Y) = E[(X - E[X])(Y - E[Y])]
- 正值表示正相关
- 负值表示负相关
- 零表示无线性关系
3. 相关系数计算
r1 = np.corrcoef(fruit_sales_r, makeup_sales_r)
相关系数是标准化后的协方差,取值范围为[-1, 1],公式为:
r(X,Y) = cov(X,Y) / (σ_X × σ_Y)
其中σ_X和σ_Y分别是X和Y的标准差。
4. 矩阵操作
covmDiag = covm.diagonal() # 对角线元素
convTrc = covm.trace() # 矩阵的迹
这些操作帮助我们提取协方差矩阵的关键信息。
运行结果分析
从输出结果可以看到:
协方差矩阵是:
[[1.3417822 1.16277927]
[1.16277927 11.53402476]]
相关系数矩阵是:
[[1. 0.29557373]
[0.29557373 1. ]]
关键发现:
- 水果和化妆品销售额变化率的相关系数为0.296
- 这表明两者存在弱正相关关系
- 协方差矩阵的对角线元素分别是两个变量的方差
可视化分析
代码中还包含了数据可视化部分,通过折线图展示四个品类销售额变化率的趋势,便于直观观察它们之间的关联模式。
统计概念总结
在这个项目中,我们确实使用了以下统计概念:
✅ 使用的统计量:
- 协方差:
np.cov()- 衡量两个变量的协同变化程度 - 相关系数:
np.corrcoef()- 标准化后的协方差,衡量线性关系强度 - 方差:协方差矩阵的对角线元素就是各个变量的方差
- 标准差:在注释的备选方法中提及,用于计算相关系数
📊 实际应用:
通过计算这些统计量,我们可以:
- 量化不同商品销售额之间的关联程度
- 识别哪些商品销售趋势相似
- 为商品组合和促销策略提供数据支持