如何创建相关矩阵展示各产品类别门店平均销售额的相关性
解决方案
直接按以下步骤生成对应产品类别的门店平均销售额相关矩阵即可:
- 先确认数据粒度:从你给出的
head(df2)输出看,当前df2每行对应一个唯一门店,各数值列已经是门店维度的统计值,如果已经是平均销售额口径可直接计算;如果是交易、日度等细粒度数据,先按门店维度聚合求均值再计算即可。
基础R实现(无需安装额外包)
- 提取目标列
你指定的第10-18列刚好对应从promo_units到kingBars_units的9个产品类别字段,直接按列索引提取即可,避免手动输入列名出错:
# 提取10-18列的产品类别数据 product_data <- df2[, 10:18]
- 计算相关矩阵
# 默认计算皮尔逊相关系数,complete.obs参数自动剔除含缺失值的行,避免结果出现NA cor_matrix <- cor(product_data, use = "complete.obs") # 结果保留3位小数,方便查看 cor_matrix <- round(cor_matrix, 3)
- 结果使用
直接运行print(cor_matrix)就能输出两两品类的相关系数:数值越接近1代表两个品类的门店销售额正相关性越强,越接近-1代表负相关性越强,接近0则说明没有明显线性相关关系。
如果需要快速可视化,可以直接调用基础热图函数:
heatmap(cor_matrix)
可选:细粒度数据前置聚合代码
如果你的df2还没聚合到门店维度,先跑以下代码按门店计算各品类平均销售额,再生成相关矩阵:
# 没装dplyr的话先跑install.packages("dplyr") library(dplyr) store_avg <- df2 %>% group_by(store) %>% summarise(across(10:18, ~mean(.x, na.rm = TRUE))) # 去掉第一列的store门店ID列,再计算相关矩阵 cor_matrix <- cor(store_avg[, -1], use = "complete.obs")
注意事项
- 如果数据存在明显异常值、不满足正态分布,可以把相关系数计算方法改为斯皮尔曼等级相关,更稳健:
cor(product_data, use = "complete.obs", method = "spearman") - 从你给出的dput结果看,第10-18列均为数值类型,不会出现类型报错,如果计算结果出现NA,优先检查对应列是否存在全量缺失的情况。
内容的提问来源于stack exchange,提问作者lhc0003
相关产品推荐
相关产品推荐

