相关性分析脚本

20 0
User_Lee 发表于 2026-6-29 10:06:23 | 查看全部 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. <b>有任何使用问题可以联系我!!!!</b>
复制代码

correlation_analysis.py 使用说明

功能简介

本脚本用于对 Excel/CSV 数据进行相关性分析,支持:
  • 计算 Pearson / Spearman / Kendall 相关矩阵及 P 值
  • 滞后相关性分析(目标变量对影响因素存在时间滞后)
  • 最优滞后期自动搜索
  • 结果导出为 Excel(多 sheet)
  • 自动生成热力图和滞后搜索折线图



环境依赖

pandas >= 1.5
numpy >= 1.24
scipy >= 1.10
matplotlib >= 3.7
seaborn >= 0.13
openpyxl >= 3.1
安装:
pip install pandas numpy scipy matplotlib seaborn openpyxl

使用方法

基本语法

python correlation_analysis.py <数据文件> [参数]示例

# 1. 基础相关性分析(自动选择所有数值列)
python correlation_analysis.py data.xlsx

# 2. 指定列和方法
python correlation_analysis.py data.xlsx --columns 温度 压力 产量 --method spearman

# 3. 滞后相关性(目标列滞后3期)
python correlation_analysis.py data.xlsx --columns 温度 压力 产量 --target 产量 --lag 3

# 4. 最优滞后搜索(搜索范围 0~10 期)
python correlation_analysis.py data.xlsx --columns 温度 压力 --target 产量 --sweep 0 10

# 5. 同时使用固定滞后和搜索
python correlation_analysis.py data.xlsx --columns 温度 压力 --target 产量 --lag 3 --sweep 0 10

# 6. 指定输出文件名,不生成图片
python correlation_analysis.py data.xlsx --target 产量 --lag 3 -o my_result.xlsx --no-plot

参数详解

[td]
参数
必填
默认值
说明
file-输入数据文件路径(支持 .xlsx / .xls / .csv)
--columns所有数值列参与分析的列名,空格分隔
--methodpearson相关性方法:pearson / spearman / kendall
--target-目标列名(滞后变量),不指定则不做滞后分析
--lag0滞后期数,需配合 --target 使用
--sweep START END-最优滞后搜索范围,如 --sweep 0 10
--output / -ocorrelation_result.xlsx输出 Excel 文件路径
--no-plotFalse添加此参数则不生成图片
注意事项:
  • --target 指定的列如果不在 --columns 中,脚本会自动将其加入
  • 列名包含空格时需要用引号包裹,如 "相对价格 指数铜+mean"
  • --lag 和 --sweep 可以同时使用



输出说明

Excel 文件(多 sheet)

[td]
Sheet 名称
生成条件
内容
相关矩阵始终生成N×N 相关系数矩阵
P值矩阵始终生成N×N 显著性 P 值矩阵
滞后数据--target + --lag > 0滞后处理后的原始数据(已对齐、已去除 NaN 行)
最优滞后--target + --sweep每个因素的最优滞后期、最强相关系数、各期相关系数
图片文件

[td]
文件名
生成条件
内容
{output_stem}_heatmap.png默认生成相关性热力图(下三角,带显著性星号标注)
{output_stem}_lag_sweep.png--target + --sweep滞后搜索折线图(红圈标记最优点)
显著性标注规则:
  • *** : P < 0.001
  • ** : P < 0.01
  • * : P < 0.05



滞后相关性原理

什么是滞后相关性

当因素 X 在时刻 t 发生变化,目标 Y 在时刻 t+k 才体现效果时,直接计算 X 和 Y 的相关性会低估真实关联。
滞后相关性通过将目标列 Y 向前平移 k 期(即计算 corr(X_t, Y_{t+k})),使因果对齐后再计算相关系数。
固定滞后模式

指定一个滞后期数 k,将目标列平移后计算完整的相关矩阵。
原始:  X = [x1, x2, x3, x4, x5, x6]
       Y = [y1, y2, y3, y4, y5, y6]

lag=2: X = [x1, x2, x3, x4]
       Y = [y3, y4, y5, y6]   (Y 向前平移2期,末尾截断)最优滞后搜索模式

对每个因素列,遍历指定范围内的所有滞后期数,找出使相关系数绝对值最大的滞后期。


常见问题

Q: 列名包含空格怎么办?

用引号包裹:
--columns "XXX XXX" "SSS SSS"Q: 提示 "目标列不存在"?

检查列名是否完全匹配(包括空格、加号等特殊字符)。可以先不指定 --columns 运行一次,脚本会打印所有可用列名。
Q: 滞后后数据不足?

数据行数必须大于滞后期数 + 3。例如 32 行数据最多支持 lag=29(但实际有意义的滞后期通常远小于数据长度的一半)。
Q: 图片中文显示为方块?

确保系统安装了中文字体(Windows 默认有微软雅黑,Linux 需安装 fonts-wqy-zenhei)。
Q: 如何只看某几列与目标的关系?

python correlation_analysis.py data.xlsx --columns 因素A 因素B --target 目标Y --sweep 0 10
脚本会自动将目标列加入分析。

  1. <font size="5"><b>sample_data运行示例</b></font>

  2. python correlation_analysis.py "sample_data.xlsx"
  3. 读取文件: sample_data.xlsx​
  4. 数据维度: 50 行 x 6 列​
  5. 自动选择数值列: ['Temperature', 'Pressure', 'Humidity', 'Yield', 'Raw_Material_Price']​
  6. 计算相关矩阵: 方法=pearson​
  7.   相关矩阵 (5x5) 已计算

  8. 结果已导出到: correlation_result.xlsx
  9. 热力图已保存: correlation_result_heatmap.png
  10.   
  11. python correlation_analysis.py "sample_data.xlsx" --columns Temperature Pressure --target Yield --sweep 0 10
  12. 读取文件: sample_data.xlsx
  13. 数据维度: 50 行 x 6 列
  14. 已自动将目标列 'Yield' 加入分析列
  15. 计算相关矩阵: 方法=pearson
  16.   相关矩阵 (3x3) 已计算
  17. 最优滞后搜索: 目标列=Yield, 范围=[0, 10]
  18.   最优滞后结果:
  19.     Temperature: 最优滞后=9期, 相关系数=-0.8022
  20.     Pressure: 最优滞后=0期, 相关系数=0.7648

  21. 结果已导出到: correlation_result.xlsx
  22.   热力图已保存: correlation_result_heatmap.png
  23.   滞后搜索图已保存: correlation_result_lag_sweep.png
复制代码

资源下载.zip

12.38 KB, 下载次数: 0

售价: 2 金币  [记录]  [购买]

回复

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

学研领航向全体高校师生打造的一站式综合交流与资源服务平台,集知识学习、经验分享、资源下载、互动问答、职场成长、兼职实践于一体,覆盖校园生活、专业学习、求职就业、兴趣发展等全场景需求。

快捷导航

小黑屋
  • 添加微信客服
Copyright © 2026 学研领航 版权所有 陕ICP备2025077879号-1
关灯 在本版发帖
扫一扫添加微信客服
返回顶部
快速回复 返回顶部 返回列表