马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
, 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 数据进行相关性分析,支持:
% 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 | 否 | 所有数值列 | 参与分析的列名,空格分隔 | | --method | 否 | pearson | 相关性方法:pearson / spearman / kendall | | --target | 否 | - | 目标列名(滞后变量),不指定则不做滞后分析 | | --lag | 否 | 0 | 滞后期数,需配合 --target 使用 | | --sweep START END | 否 | - | 最优滞后搜索范围,如 --sweep 0 10 | | --output / -o | 否 | correlation_result.xlsx | 输出 Excel 文件路径 | | --no-plot | 否 | False | 添加此参数则不生成图片 |
注意事项:
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 @
- <font size="5"><b>sample_data运行示例</b></font>
& v7 i8 U0 W' |& `; W G) u. {# s
2 ^; U8 \1 |5 d6 z6 {# m- python correlation_analysis.py "sample_data.xlsx"/ b3 I( f; r1 Q# s& A }
- 读取文件: sample_data.xlsx! s: G8 e" X- p% F' t# |9 |
- 数据维度: 50 行 x 6 列: u/ U: a( v, R+ U4 }
- 自动选择数值列: ['Temperature', 'Pressure', 'Humidity', 'Yield', 'Raw_Material_Price']3 C: i) U0 m: X+ u
- 计算相关矩阵: 方法=pearson
& v, C+ D- p. K; \% l% E - 相关矩阵 (5x5) 已计算
3 A* B; G" \1 D4 L+ Z0 K -
, W6 _+ W8 w$ Z - 结果已导出到: correlation_result.xlsx
" [; D! Y# H2 Y - 热力图已保存: correlation_result_heatmap.png3 r$ A* m; ]3 k- B8 X1 i/ h
-
' H2 ~! K* B2 a+ ^ - python correlation_analysis.py "sample_data.xlsx" --columns Temperature Pressure --target Yield --sweep 0 10! Y7 c9 F' ]# ]8 Q1 a
- 读取文件: sample_data.xlsx, I: ?' d! ~& R( \# X3 p
- 数据维度: 50 行 x 6 列
/ b+ W' T4 [: \% \2 o0 { - 已自动将目标列 'Yield' 加入分析列6 ], G+ r" p5 D& r$ h$ G" v
- 计算相关矩阵: 方法=pearson X$ u2 L, C! Z7 h1 A
- 相关矩阵 (3x3) 已计算
2 s7 P6 Y1 @; X) D - 最优滞后搜索: 目标列=Yield, 范围=[0, 10]8 M: p0 ~% e( h
- 最优滞后结果:# {% o8 @% Z( j5 K
- Temperature: 最优滞后=9期, 相关系数=-0.8022
$ C6 Y K1 ^0 L [6 l8 E* b - Pressure: 最优滞后=0期, 相关系数=0.7648
/ g# l5 ], w4 p. t' `8 U* J% S - + K) v' U0 |4 S% k- ~ _
- 结果已导出到: correlation_result.xlsx
c9 v( ]- E- j" | - 热力图已保存: correlation_result_heatmap.png
. D; B$ [+ W8 \1 G- L - 滞后搜索图已保存: correlation_result_lag_sweep.png
复制代码 ) d& y0 C' R# \9 i4 \1 ~
|