相关性分析脚本

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

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

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

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

$ w1 e1 E: d3 fcorrelation_analysis.py 使用说明) d0 ^0 b7 d, h/ E& X( w; f! n: D4 N
8 X; z7 i$ N/ g' _7 x
功能简介
/ @% l- u+ j2 K% l$ S  y0 S: A: M/ }
本脚本用于对 Excel/CSV 数据进行相关性分析,支持:
  • 计算 Pearson / Spearman / Kendall 相关矩阵及 P 值
  • 滞后相关性分析(目标变量对影响因素存在时间滞后)
  • 最优滞后期自动搜索
  • 结果导出为 Excel(多 sheet)
  • 自动生成热力图和滞后搜索折线图
    * c' l7 f" H! M( P


( S" q) t' C( y5 ^环境依赖: Y# F; K9 q$ @& h1 j

. T: T: q: \7 c2 }, Apandas >= 1.53 w% F$ D# x+ h' J
numpy >= 1.24
1 h/ }' ]  R# G! ]/ J' ascipy >= 1.101 l( U+ B+ U) p: J+ K
matplotlib >= 3.7
+ d4 W6 ~7 E& a6 J: Fseaborn >= 0.13
  N' F* n7 A) R: v6 _* t3 A4 ?openpyxl >= 3.1
安装:
pip install pandas numpy scipy matplotlib seaborn openpyxl

/ U" y  U1 R8 @; o0 t使用方法$ c& g/ ^) t# I4 G8 v4 R

0 I  H+ i, y" E8 q6 d* n) @3 }$ r基本语法
2 v4 t" d2 P, u
; \& @  a, X# A) ?; Y$ z1 s5 jpython correlation_analysis.py <数据文件> [参数]示例
: |$ v- K( `6 b" o% |1 E  A
7 A! P" F/ Y: v( h. n! c3 i+ I# 1. 基础相关性分析(自动选择所有数值列)
6 N: r9 q4 F5 A- x# Npython correlation_analysis.py data.xlsx
9 G' M; n1 x# t5 x$ ^3 x
7 s# k4 v9 L. r4 Y" ?# 2. 指定列和方法
2 N% {6 U  B5 q! E& v+ Wpython correlation_analysis.py data.xlsx --columns 温度 压力 产量 --method spearman0 n0 u# @5 q5 J  G! _% k3 c

8 C  y0 y* d8 f: b$ Y# 3. 滞后相关性(目标列滞后3期)
9 O" Z# e( d* d% |+ m) ypython correlation_analysis.py data.xlsx --columns 温度 压力 产量 --target 产量 --lag 3/ s6 c9 ]# T7 w5 N

& C' D  i/ M2 U' @+ r0 X3 v8 Z5 r# 4. 最优滞后搜索(搜索范围 0~10 期)+ F) Y4 w6 t$ O
python correlation_analysis.py data.xlsx --columns 温度 压力 --target 产量 --sweep 0 10
* [( @6 T9 d9 {5 k2 y/ [& C
/ h  x8 g  b. j# 5. 同时使用固定滞后和搜索
0 z; o' a1 C- q  {8 W' Opython correlation_analysis.py data.xlsx --columns 温度 压力 --target 产量 --lag 3 --sweep 0 10, l" o* a+ k& v) Q, l

- f% R$ [: K/ C  M1 d- B; ?' e8 Y9 y# 6. 指定输出文件名,不生成图片: \& j) j/ f+ Z
python correlation_analysis.py data.xlsx --target 产量 --lag 3 -o my_result.xlsx --no-plot
* i6 Q1 Z* \" j4 m' z2 k0 c: \
参数详解9 c0 b6 n3 x5 b# q0 I9 [
% a- i8 [: N+ r3 P0 K# |
[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 可以同时使用
    * A; y! C$ [( h6 j5 J. `

1 G  a: K0 N! U8 y
输出说明! o  A/ i5 W# W
$ ^3 c, }" ^1 i& K/ f
Excel 文件(多 sheet)
, u" h% Z, @) B+ p" N" o# E8 x* P+ d$ \9 ]& B' Y, V
[td]
Sheet 名称
生成条件
内容
相关矩阵始终生成N×N 相关系数矩阵
P值矩阵始终生成N×N 显著性 P 值矩阵
滞后数据--target + --lag > 0滞后处理后的原始数据(已对齐、已去除 NaN 行)
最优滞后--target + --sweep每个因素的最优滞后期、最强相关系数、各期相关系数
图片文件8 }8 J2 q1 z8 T8 }" P. m. B+ _
0 {4 \# O$ \8 u9 [$ N% `. k8 b( i
[td]
文件名
生成条件
内容
{output_stem}_heatmap.png默认生成相关性热力图(下三角,带显著性星号标注)
{output_stem}_lag_sweep.png--target + --sweep滞后搜索折线图(红圈标记最优点)
显著性标注规则:
  • *** : P < 0.001
  • ** : P < 0.01
  • * : P < 0.05
    8 m/ i7 f9 P2 l


: C2 T) s2 x& {滞后相关性原理
# ~) ^; D# d& D% K( X- |& \. Z) ~9 [0 V* f( i( K. P& i8 G( l
什么是滞后相关性: d# V9 p7 I. J( }. t/ g: P/ P
5 ^7 v+ I% Q4 E" o, W6 ^
当因素 X 在时刻 t 发生变化,目标 Y 在时刻 t+k 才体现效果时,直接计算 X 和 Y 的相关性会低估真实关联。
滞后相关性通过将目标列 Y 向前平移 k 期(即计算 corr(X_t, Y_{t+k})),使因果对齐后再计算相关系数。
固定滞后模式
+ y: L- r  Z/ ^' g+ _9 w  w5 V
7 k0 y1 T* t" Q2 m  Q* V
指定一个滞后期数 k,将目标列平移后计算完整的相关矩阵。
原始:  X = [x1, x2, x3, x4, x5, x6]* e$ S2 R! z8 a5 e1 Q
       Y = [y1, y2, y3, y4, y5, y6]6 m8 O3 X* ?% w/ b* Q  K
5 H7 S# a/ \( O7 V
lag=2: X = [x1, x2, x3, x4]( \; y- `* P# u2 d( m( h3 P
       Y = [y3, y4, y5, y6]   (Y 向前平移2期,末尾截断)最优滞后搜索模式
' O- n0 q: e3 U9 t5 j0 {
8 ]0 A3 D: i" _
对每个因素列,遍历指定范围内的所有滞后期数,找出使相关系数绝对值最大的滞后期。

$ e3 L- ]1 \6 Q8 T! }. H
常见问题6 A4 j) q+ k% I' f( X& T$ o& G
2 z- [# `' y+ z; v2 R6 f* E/ i
Q: 列名包含空格怎么办?
3 b- _1 L1 Z- k9 U" V3 n
8 Y) I: T# b; E1 t0 S
用引号包裹:
--columns "XXX XXX" "SSS SSS"Q: 提示 "目标列不存在"?+ O  L- P) {/ H7 m

: c4 m  v3 Y! h$ d* D! [5 y( O" P
检查列名是否完全匹配(包括空格、加号等特殊字符)。可以先不指定 --columns 运行一次,脚本会打印所有可用列名。
Q: 滞后后数据不足?
: l- q% Q# ?+ [2 s9 u- p7 i( h: S1 j4 K1 V) c
数据行数必须大于滞后期数 + 3。例如 32 行数据最多支持 lag=29(但实际有意义的滞后期通常远小于数据长度的一半)。
Q: 图片中文显示为方块?
. U+ R1 d7 E) a3 `( o- K. }, o1 ~- a0 j+ o6 f
确保系统安装了中文字体(Windows 默认有微软雅黑,Linux 需安装 fonts-wqy-zenhei)。
Q: 如何只看某几列与目标的关系?
: s; j0 d' t% ]- _# |/ T' T. b
( B( P/ ~$ p: K" Q) f$ ^' ^& F1 jpython correlation_analysis.py data.xlsx --columns 因素A 因素B --target 目标Y --sweep 0 10
脚本会自动将目标列加入分析。

  X5 z& H" C5 n( B. t( X
  1. <font size="5"><b>sample_data运行示例</b></font>
    9 a$ `$ v3 ?0 O
  2. ; v9 `) y' @* B. B
  3. python correlation_analysis.py "sample_data.xlsx"5 m' M2 g0 P$ i
  4. 读取文件: sample_data.xlsx​: ]6 U. G3 r# _! o
  5. 数据维度: 50 行 x 6 列​! I( F  Z) P; Z+ h
  6. 自动选择数值列: ['Temperature', 'Pressure', 'Humidity', 'Yield', 'Raw_Material_Price']​2 N+ b9 R7 @# ?$ l; J
  7. 计算相关矩阵: 方法=pearson​2 z4 |9 G3 N& ?  J
  8.   相关矩阵 (5x5) 已计算
    ! f& D7 w) }5 Z0 _6 c% _: D

  9. / j1 ~: O; D7 b2 j
  10. 结果已导出到: correlation_result.xlsx: E7 J1 c# e8 U) t/ L
  11. 热力图已保存: correlation_result_heatmap.png
    - x" I9 w. s6 _5 O) i
  12.   ; K3 L& w* T9 L  J5 ]
  13. python correlation_analysis.py "sample_data.xlsx" --columns Temperature Pressure --target Yield --sweep 0 10$ c! ~, N3 `" m3 L7 X9 d; T
  14. 读取文件: sample_data.xlsx
    $ ~% K2 ~# R+ O) ]& f
  15. 数据维度: 50 行 x 6 列
    . h$ K" L; b2 q$ C7 Y) {2 {
  16. 已自动将目标列 'Yield' 加入分析列
    ! ]+ U) f8 u' D& F  n: o% w
  17. 计算相关矩阵: 方法=pearson
    0 u5 ?# k+ F2 r% l1 D, \6 y) u# E
  18.   相关矩阵 (3x3) 已计算8 v' T& C. b5 {9 E$ \6 s, z6 T
  19. 最优滞后搜索: 目标列=Yield, 范围=[0, 10]
    ) B% j, ^) r. r( E4 n, h* r
  20.   最优滞后结果:
    # h3 |; o" D) e6 k. {
  21.     Temperature: 最优滞后=9期, 相关系数=-0.80226 L8 Z# U# {: [( D0 J
  22.     Pressure: 最优滞后=0期, 相关系数=0.7648" r5 S/ b( b, b2 J) Y5 D- x
  23. ! r+ S1 f; A* P* b9 i% P) i* d
  24. 结果已导出到: correlation_result.xlsx
    ' E% t( z1 V4 q# \
  25.   热力图已保存: correlation_result_heatmap.png
    ' _7 t5 G/ |! w8 d
  26.   滞后搜索图已保存: correlation_result_lag_sweep.png
复制代码

4 B' t! U9 n& r" h7 b1 k7 i) A( K

资源下载.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- x# \; ^- S  c2 }
已收藏,下周正好要做时序相关性分析,拿来直接用

5 r( Z5 i5 S4 S! [8 m: [# y: aOK 有什么问题 可以沟通 共同学习
回复 支持 反对

使用道具 举报

回复

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

本版积分规则

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

快捷导航

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