相关性分析脚本

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

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

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

×
  1. <b>有任何使用问题可以联系我!!!!</b>
复制代码
, p* W5 \) v; }1 W1 j$ J
correlation_analysis.py 使用说明
; h2 K  p1 Z; O+ G0 V9 g1 @! n9 \: [4 w7 O1 j3 t' k
功能简介- R; o# S, h  I+ Z# ?: N7 z

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


% W, e; F/ s4 j4 E) k环境依赖
4 ?, X' r' L7 ^9 e0 e* L, Q
) B) V! E: d* H3 K1 i& G1 lpandas >= 1.50 {$ J' l4 l( q3 F" I2 l
numpy >= 1.24
2 a9 L: ]1 _9 k: H3 D% [scipy >= 1.10
  u3 m' c0 L+ u$ L3 I) Bmatplotlib >= 3.7" K- C  J; |$ h. N2 F
seaborn >= 0.13
; L5 J8 v) a: @% Fopenpyxl >= 3.1
安装:
pip install pandas numpy scipy matplotlib seaborn openpyxl

2 Y! K9 @$ T" t4 a6 U使用方法
8 O1 d! @* g6 L0 B4 p+ K. ?, r
) Q; u0 Q1 o+ m  Q1 H; c# B8 l基本语法' |2 I) {  b; B8 W" i  U- q

: |7 ]- r, S$ ?& L* n' [python correlation_analysis.py <数据文件> [参数]示例, ]1 _3 D7 }6 x7 i3 d, Y# j, x6 c* ?

1 i8 c) L& m; W) J1 D8 \# 1. 基础相关性分析(自动选择所有数值列)3 m2 N& R4 s7 r8 Q& g
python correlation_analysis.py data.xlsx
. e, F9 K/ J" s' e1 p5 M! I. T+ z1 k
# 2. 指定列和方法
) [% M9 R4 n& o& R9 T9 gpython correlation_analysis.py data.xlsx --columns 温度 压力 产量 --method spearman* F6 ]4 \: {: a. {/ z6 p' R9 K

( l$ Y; {9 P" b, C: l! h# t# 3. 滞后相关性(目标列滞后3期)
  f7 L! @! u) S9 P/ C# ?0 b  Upython correlation_analysis.py data.xlsx --columns 温度 压力 产量 --target 产量 --lag 3! Z6 N" s% \9 z3 @' i- Z4 E6 `
7 H* K2 c5 l# q2 A8 {' t9 ^' }, ~
# 4. 最优滞后搜索(搜索范围 0~10 期)
7 e: X. n9 V' n$ kpython correlation_analysis.py data.xlsx --columns 温度 压力 --target 产量 --sweep 0 102 Q4 M5 j, [$ W) e2 d) K

0 t" I* U/ ?  _: [( L" V  L# 5. 同时使用固定滞后和搜索- h4 J9 }5 p6 Z6 ^0 q7 ]1 m: H4 k
python correlation_analysis.py data.xlsx --columns 温度 压力 --target 产量 --lag 3 --sweep 0 10
* L. @0 g& z3 X/ \4 m) t/ U2 |7 W7 q+ Z5 @3 i+ w
# 6. 指定输出文件名,不生成图片
# X$ k+ s- Z! z1 o% @+ Ypython correlation_analysis.py data.xlsx --target 产量 --lag 3 -o my_result.xlsx --no-plot

; I+ r; D1 K1 j: @+ n3 p# a5 x参数详解; {* b1 G- H: L5 F
' M" e1 [( F/ U5 H4 @
[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 可以同时使用
    & y& [" ]8 ?$ m- }! ]9 Z


4 G: s6 y$ c1 s5 p/ D' h输出说明
, W2 J3 u) V+ |: A! u, W; F
- r, ~' P% K" F2 L9 C# S4 n4 ]# sExcel 文件(多 sheet)6 ~6 n. y- d3 q" C0 v
- S$ W" G  g/ l: t- r
[td]
Sheet 名称
生成条件
内容
相关矩阵始终生成N×N 相关系数矩阵
P值矩阵始终生成N×N 显著性 P 值矩阵
滞后数据--target + --lag > 0滞后处理后的原始数据(已对齐、已去除 NaN 行)
最优滞后--target + --sweep每个因素的最优滞后期、最强相关系数、各期相关系数
图片文件
! Z0 b  w  T, K* l' q1 u) _' p
1 p0 J& m. K* @: }7 ?[td]
文件名
生成条件
内容
{output_stem}_heatmap.png默认生成相关性热力图(下三角,带显著性星号标注)
{output_stem}_lag_sweep.png--target + --sweep滞后搜索折线图(红圈标记最优点)
显著性标注规则:
  • *** : P < 0.001
  • ** : P < 0.01
  • * : P < 0.05

    ( Q( J+ l, v7 F/ h8 o5 O# x


; _& ?( J/ \3 L: O! }6 p滞后相关性原理5 I3 e. U2 Y9 b
! o+ V7 x+ W6 R, M: W
什么是滞后相关性
2 y! K# T2 [5 v# I
5 U8 T% o3 k* ?$ N. n; R
当因素 X 在时刻 t 发生变化,目标 Y 在时刻 t+k 才体现效果时,直接计算 X 和 Y 的相关性会低估真实关联。
滞后相关性通过将目标列 Y 向前平移 k 期(即计算 corr(X_t, Y_{t+k})),使因果对齐后再计算相关系数。
固定滞后模式
6 p6 P- |* E4 E+ N( e) J+ u+ q" c7 J# X  e: e4 p% O
指定一个滞后期数 k,将目标列平移后计算完整的相关矩阵。
原始:  X = [x1, x2, x3, x4, x5, x6]
: ^; U8 e+ N% p9 S       Y = [y1, y2, y3, y4, y5, y6]
$ A  q; n2 \# S, W9 O. c$ a- W2 l
9 q; u( j# K$ Alag=2: X = [x1, x2, x3, x4]4 R/ k$ z- l7 N5 H! J0 Y& B1 Q, _
       Y = [y3, y4, y5, y6]   (Y 向前平移2期,末尾截断)最优滞后搜索模式1 r- i% J+ B( U) W5 ~) L' K

* i5 n3 M0 l, {  d: e% o$ k' h9 s
对每个因素列,遍历指定范围内的所有滞后期数,找出使相关系数绝对值最大的滞后期。


% H% f/ `3 r/ x常见问题" q! h; y) h5 ?2 ?
4 O  {; t8 d- K
Q: 列名包含空格怎么办?2 c" b$ |% y( }/ I9 w4 \

2 ?- H: [; y1 }  s1 \( X" P
用引号包裹:
--columns "XXX XXX" "SSS SSS"Q: 提示 "目标列不存在"?' K2 {- e$ h9 f! ?' k( T8 a3 t
1 a3 T3 y' v. h! T  a0 a* W5 m
检查列名是否完全匹配(包括空格、加号等特殊字符)。可以先不指定 --columns 运行一次,脚本会打印所有可用列名。
Q: 滞后后数据不足?& {3 w3 S3 Z7 P* j* S" g! h8 i

+ _/ I1 V8 d" S) I; b$ k0 Z" P
数据行数必须大于滞后期数 + 3。例如 32 行数据最多支持 lag=29(但实际有意义的滞后期通常远小于数据长度的一半)。
Q: 图片中文显示为方块?
7 t5 Q  Y3 ]3 f; X1 F% T( B6 b" K
3 I0 Z) x# W, _/ C  v7 p) |9 T
确保系统安装了中文字体(Windows 默认有微软雅黑,Linux 需安装 fonts-wqy-zenhei)。
Q: 如何只看某几列与目标的关系?
5 M& X( z/ s; S  r) ^
1 C5 S1 W# t' e' {3 j0 d" Npython correlation_analysis.py data.xlsx --columns 因素A 因素B --target 目标Y --sweep 0 10
脚本会自动将目标列加入分析。
9 _; R$ p* G5 H4 \5 I2 @
  1. <font size="5"><b>sample_data运行示例</b></font>
    & v7 i8 U0 W' |& `; W  G) u. {# s

  2. 2 ^; U8 \1 |5 d6 z6 {# m
  3. python correlation_analysis.py "sample_data.xlsx"/ b3 I( f; r1 Q# s& A  }
  4. 读取文件: sample_data.xlsx​! s: G8 e" X- p% F' t# |9 |
  5. 数据维度: 50 行 x 6 列​: u/ U: a( v, R+ U4 }
  6. 自动选择数值列: ['Temperature', 'Pressure', 'Humidity', 'Yield', 'Raw_Material_Price']​3 C: i) U0 m: X+ u
  7. 计算相关矩阵: 方法=pearson​
    & v, C+ D- p. K; \% l% E
  8.   相关矩阵 (5x5) 已计算
    3 A* B; G" \1 D4 L+ Z0 K

  9. , W6 _+ W8 w$ Z
  10. 结果已导出到: correlation_result.xlsx
    " [; D! Y# H2 Y
  11. 热力图已保存: correlation_result_heatmap.png3 r$ A* m; ]3 k- B8 X1 i/ h
  12.   
    ' H2 ~! K* B2 a+ ^
  13. python correlation_analysis.py "sample_data.xlsx" --columns Temperature Pressure --target Yield --sweep 0 10! Y7 c9 F' ]# ]8 Q1 a
  14. 读取文件: sample_data.xlsx, I: ?' d! ~& R( \# X3 p
  15. 数据维度: 50 行 x 6 列
    / b+ W' T4 [: \% \2 o0 {
  16. 已自动将目标列 'Yield' 加入分析列6 ], G+ r" p5 D& r$ h$ G" v
  17. 计算相关矩阵: 方法=pearson  X$ u2 L, C! Z7 h1 A
  18.   相关矩阵 (3x3) 已计算
    2 s7 P6 Y1 @; X) D
  19. 最优滞后搜索: 目标列=Yield, 范围=[0, 10]8 M: p0 ~% e( h
  20.   最优滞后结果:# {% o8 @% Z( j5 K
  21.     Temperature: 最优滞后=9期, 相关系数=-0.8022
    $ C6 Y  K1 ^0 L  [6 l8 E* b
  22.     Pressure: 最优滞后=0期, 相关系数=0.7648
    / g# l5 ], w4 p. t' `8 U* J% S
  23. + K) v' U0 |4 S% k- ~  _
  24. 结果已导出到: correlation_result.xlsx
      c9 v( ]- E- j" |
  25.   热力图已保存: correlation_result_heatmap.png
    . D; B$ [+ W8 \1 G- L
  26.   滞后搜索图已保存: correlation_result_lag_sweep.png
复制代码
) d& y0 C' R# \9 i4 \1 ~

资源下载.zip

12.38 KB

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

回复 转播

使用道具 举报

回复|共 2 个

Boom Lv.3老师认证 发表于 2026-7-31 22:45:04 | 查看全部
已收藏,下周正好要做时序相关性分析,拿来直接用
回复 支持 反对

使用道具 举报

User_Lee 楼主Lv.3 发表于 2026-8-12 16:22:12 | 查看全部
Boom 发表于 2026-7-31 22:45% `# L* Q; U5 R
已收藏,下周正好要做时序相关性分析,拿来直接用
8 U/ e6 P  a5 G* {) d7 Z% X( w
OK 有什么问题 可以沟通 共同学习
回复 支持 反对

使用道具 举报

回复

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

本版积分规则

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

快捷导航

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