马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
9 k9 M/ m$ W$ k2 A, y' F
correlation_analysis.py 使用说明2 a# S7 }4 J9 }7 z4 g! L+ j
! Z' k: N. _5 j4 K# N* o9 K2 c& w6 U
功能简介
# B- `+ U: K1 _0 P7 h) _+ v- |6 q H# @# d7 ]. l+ d3 [: Z* v
本脚本用于对 Excel/CSV 数据进行相关性分析,支持:
" q0 a! L0 t& k环境依赖" x+ A/ O* a. ~1 d- r7 K
6 }# e( V# X" _. h& Apandas >= 1.54 x3 D/ e; K3 n
numpy >= 1.24
" G; H3 z- Q, u" w) Rscipy >= 1.10
6 f& Q+ n( Q/ k/ h# ] \matplotlib >= 3.7
/ S' Y) o) O* g0 P1 Hseaborn >= 0.131 g4 @& @ y# r# m4 s9 v
openpyxl >= 3.1安装: pip install pandas numpy scipy matplotlib seaborn openpyxl
1 i' S+ T9 t) u0 P' G. c% {使用方法
3 X p: y- c5 }3 ~* m9 K, v! M F. O K# Z' }9 E
基本语法/ q" t& r0 n* S5 w' }7 y
; i' ?) o4 {/ I5 ]1 z0 j# ]python correlation_analysis.py <数据文件> [参数]示例4 n% x3 R% K7 P$ i) R
8 d+ L: J9 |0 g5 _! C3 C1 u
# 1. 基础相关性分析(自动选择所有数值列)
% m# x2 y! s$ J; Dpython correlation_analysis.py data.xlsx9 y/ {; N5 r% ~
. {, W6 ?: q2 |$ {' ?
# 2. 指定列和方法
; k2 r# m% t+ q2 b M# xpython correlation_analysis.py data.xlsx --columns 温度 压力 产量 --method spearman
9 s! p7 @0 |+ T3 c# {; ^$ _& s7 `, b
{- c8 E: `; |1 T; d% b# 3. 滞后相关性(目标列滞后3期)
, V3 T" F; K% y% ~ Xpython correlation_analysis.py data.xlsx --columns 温度 压力 产量 --target 产量 --lag 3
9 ^8 ]) Q# {% b7 v2 b y3 i4 s, A7 T/ P. s) P3 n
# 4. 最优滞后搜索(搜索范围 0~10 期)5 K" m2 b/ {6 c% |( t5 G7 F
python correlation_analysis.py data.xlsx --columns 温度 压力 --target 产量 --sweep 0 106 f: Q3 g1 S4 v$ w$ ^+ n. j
% `, B0 O$ ~# l, H/ W3 s3 V# 5. 同时使用固定滞后和搜索- {/ x) j) B/ z: E
python correlation_analysis.py data.xlsx --columns 温度 压力 --target 产量 --lag 3 --sweep 0 10
3 V% T. g& L0 H2 I) X: o
6 k+ c# K) I- w3 ]4 {2 t5 x# 6. 指定输出文件名,不生成图片2 h! i$ b& J- {4 H
python correlation_analysis.py data.xlsx --target 产量 --lag 3 -o my_result.xlsx --no-plot 6 W5 h. G' b1 r: @
参数详解# |, r4 I7 R4 G3 [
$ c3 q; n R( Q' G, c; R$ M
[td]参数 | 必填 | 默认值 | 说明 | | file | 是 | - | 输入数据文件路径(支持 .xlsx / .xls / .csv) | | --columns | 否 | 所有数值列 | 参与分析的列名,空格分隔 | | --method | 否 | pearson | 相关性方法:pearson / spearman / kendall | | --target | 否 | - | 目标列名(滞后变量),不指定则不做滞后分析 | | --lag | 否 | 0 | 滞后期数,需配合 --target 使用 | | --sweep START END | 否 | - | 最优滞后搜索范围,如 --sweep 0 10 | | --output / -o | 否 | correlation_result.xlsx | 输出 Excel 文件路径 | | --no-plot | 否 | False | 添加此参数则不生成图片 |
注意事项:
: s( t) T5 k! d输出说明
5 A1 A1 E/ U6 b" I6 `& v: x( @8 N* W" {+ L. S$ w
Excel 文件(多 sheet)2 \& |' O; {1 l+ x* `" d& K
4 }1 A* q7 |; t1 _! R/ s( D- N$ Z. P[td]Sheet 名称 | 生成条件 | 内容 | | 相关矩阵 | 始终生成 | N×N 相关系数矩阵 | | P值矩阵 | 始终生成 | N×N 显著性 P 值矩阵 | | 滞后数据 | --target + --lag > 0 | 滞后处理后的原始数据(已对齐、已去除 NaN 行) | | 最优滞后 | --target + --sweep | 每个因素的最优滞后期、最强相关系数、各期相关系数 | 图片文件 H0 L& w- @1 N9 j3 r; a' A' [
( ~5 j8 P1 k# _# f. \+ Q' L# s
[td]文件名 | 生成条件 | 内容 | | {output_stem}_heatmap.png | 默认生成 | 相关性热力图(下三角,带显著性星号标注) | | {output_stem}_lag_sweep.png | --target + --sweep | 滞后搜索折线图(红圈标记最优点) |
显著性标注规则: *** : P < 0.001 ** : P < 0.01 * : P < 0.05 ; h9 w) y) g- y2 X& w, a
3 u6 a% Z! h9 Q* a1 T; M
滞后相关性原理
1 ?5 u) V, D) m$ ]. C. ?0 j" \; {7 O2 j
什么是滞后相关性$ H' ^- Y. b& x0 P5 A9 `' b
& J- n; j7 W* i) E! l& ~当因素 X 在时刻 t 发生变化,目标 Y 在时刻 t+k 才体现效果时,直接计算 X 和 Y 的相关性会低估真实关联。 滞后相关性通过将目标列 Y 向前平移 k 期(即计算 corr(X_t, Y_{t+k})),使因果对齐后再计算相关系数。 固定滞后模式
s( w- O5 L$ H' N
* F5 s% M- ~0 S$ L; W; T5 `指定一个滞后期数 k,将目标列平移后计算完整的相关矩阵。 原始: X = [x1, x2, x3, x4, x5, x6], K8 r. `2 H: b0 k+ \3 }
Y = [y1, y2, y3, y4, y5, y6]
5 K; I- A, v$ |# ~! j' H5 X3 `7 ]2 n7 f+ v: _9 o: \8 H
lag=2: X = [x1, x2, x3, x4]+ ~; ^, z! Q; {; H3 X
Y = [y3, y4, y5, y6] (Y 向前平移2期,末尾截断)最优滞后搜索模式
; m t* R7 K! ]
; R. l. { }, B" w3 ?6 V: q对每个因素列,遍历指定范围内的所有滞后期数,找出使相关系数绝对值最大的滞后期。
, J* E% E& u1 _8 l常见问题
3 E8 J, N2 z: n# Q0 u% R$ W' H: l0 n8 B5 G$ m) S
Q: 列名包含空格怎么办?( O: ?, z3 a0 i" p4 n0 U
8 R8 v% q& R0 J7 |- ^用引号包裹: --columns "XXX XXX" "SSS SSS"Q: 提示 "目标列不存在"?- ?0 ]' T8 e+ b# N! x' z
$ q' \7 I8 c- }5 m; v3 H- ^检查列名是否完全匹配(包括空格、加号等特殊字符)。可以先不指定 --columns 运行一次,脚本会打印所有可用列名。 Q: 滞后后数据不足?
+ ]% f% A5 n0 A$ w9 H' n7 A8 ]+ T$ O8 i6 w. N
数据行数必须大于滞后期数 + 3。例如 32 行数据最多支持 lag=29(但实际有意义的滞后期通常远小于数据长度的一半)。 Q: 图片中文显示为方块?- ^4 C* a2 p2 _- T$ ]
; t. b& L2 \3 p0 S. f, j+ E
确保系统安装了中文字体(Windows 默认有微软雅黑,Linux 需安装 fonts-wqy-zenhei)。 Q: 如何只看某几列与目标的关系?$ S" ~* ?- ^6 H# \% }
* Y- I0 Z0 S8 M6 Q
python correlation_analysis.py data.xlsx --columns 因素A 因素B --target 目标Y --sweep 0 10脚本会自动将目标列加入分析。
# T8 n' m* x3 [- e( R3 X- p$ L6 L- <font size="5"><b>sample_data运行示例</b></font>
# Y9 T3 z+ G: \ k4 e) Q
1 A" j0 N! |4 x! J0 N- python correlation_analysis.py "sample_data.xlsx"
. ~0 V6 s6 f! U$ o4 Y0 R - 读取文件: sample_data.xlsx4 `; e4 X- x, c9 m% ~" ], Y
- 数据维度: 50 行 x 6 列 I4 g% Z8 g" B' u
- 自动选择数值列: ['Temperature', 'Pressure', 'Humidity', 'Yield', 'Raw_Material_Price']' Z: a' ^; K3 k# B) Y( h( X" U
- 计算相关矩阵: 方法=pearson' \' j$ L( b; ]( a2 W
- 相关矩阵 (5x5) 已计算$ S& v% I% L6 d! A
-
7 c& B3 h# j8 f - 结果已导出到: correlation_result.xlsx
0 H* O7 ^8 P' V6 e - 热力图已保存: correlation_result_heatmap.png- Q9 a7 N! M% ?) e% ?4 f
- . M4 z+ W" e& P1 v* v
- python correlation_analysis.py "sample_data.xlsx" --columns Temperature Pressure --target Yield --sweep 0 10
! E- b7 t- F; X4 S - 读取文件: sample_data.xlsx" H; X* S. j; P; W. k7 Q
- 数据维度: 50 行 x 6 列( c2 \% W/ S: y8 G3 B5 [% z+ m
- 已自动将目标列 'Yield' 加入分析列
( q, }, W! q* E6 r - 计算相关矩阵: 方法=pearson7 a: h. ^! c: d' M6 b
- 相关矩阵 (3x3) 已计算
. I! I% Z0 Z5 H; g9 Z - 最优滞后搜索: 目标列=Yield, 范围=[0, 10]
! z+ U; U5 G9 D6 N3 p ~ - 最优滞后结果:; A% m" _+ r$ `& c' Y
- Temperature: 最优滞后=9期, 相关系数=-0.8022( u5 m% [0 D4 _" [# J
- Pressure: 最优滞后=0期, 相关系数=0.7648) g5 _; v/ j2 D% i1 ^: ?
-
, q, p5 d/ k# z' w - 结果已导出到: correlation_result.xlsx0 a/ K" b. S5 l2 O1 b' X. M
- 热力图已保存: correlation_result_heatmap.png
; {: j% a8 Z1 |3 _ - 滞后搜索图已保存: correlation_result_lag_sweep.png
复制代码 1 z+ F' C& @( P: V. E
|