马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
$ 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 数据进行相关性分析,支持:
( 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 | 否 | 所有数值列 | 参与分析的列名,空格分隔 | | --method | 否 | pearson | 相关性方法:pearson / spearman / kendall | | --target | 否 | - | 目标列名(滞后变量),不指定则不做滞后分析 | | --lag | 否 | 0 | 滞后期数,需配合 --target 使用 | | --sweep START END | 否 | - | 最优滞后搜索范围,如 --sweep 0 10 | | --output / -o | 否 | correlation_result.xlsx | 输出 Excel 文件路径 | | --no-plot | 否 | False | 添加此参数则不生成图片 |
注意事项: 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- <font size="5"><b>sample_data运行示例</b></font>
9 a$ `$ v3 ?0 O - ; v9 `) y' @* B. B
- python correlation_analysis.py "sample_data.xlsx"5 m' M2 g0 P$ i
- 读取文件: sample_data.xlsx: ]6 U. G3 r# _! o
- 数据维度: 50 行 x 6 列! I( F Z) P; Z+ h
- 自动选择数值列: ['Temperature', 'Pressure', 'Humidity', 'Yield', 'Raw_Material_Price']2 N+ b9 R7 @# ?$ l; J
- 计算相关矩阵: 方法=pearson2 z4 |9 G3 N& ? J
- 相关矩阵 (5x5) 已计算
! f& D7 w) }5 Z0 _6 c% _: D -
/ j1 ~: O; D7 b2 j - 结果已导出到: correlation_result.xlsx: E7 J1 c# e8 U) t/ L
- 热力图已保存: correlation_result_heatmap.png
- x" I9 w. s6 _5 O) i - ; K3 L& w* T9 L J5 ]
- python correlation_analysis.py "sample_data.xlsx" --columns Temperature Pressure --target Yield --sweep 0 10$ c! ~, N3 `" m3 L7 X9 d; T
- 读取文件: sample_data.xlsx
$ ~% K2 ~# R+ O) ]& f - 数据维度: 50 行 x 6 列
. h$ K" L; b2 q$ C7 Y) {2 { - 已自动将目标列 'Yield' 加入分析列
! ]+ U) f8 u' D& F n: o% w - 计算相关矩阵: 方法=pearson
0 u5 ?# k+ F2 r% l1 D, \6 y) u# E - 相关矩阵 (3x3) 已计算8 v' T& C. b5 {9 E$ \6 s, z6 T
- 最优滞后搜索: 目标列=Yield, 范围=[0, 10]
) B% j, ^) r. r( E4 n, h* r - 最优滞后结果:
# h3 |; o" D) e6 k. { - Temperature: 最优滞后=9期, 相关系数=-0.80226 L8 Z# U# {: [( D0 J
- Pressure: 最优滞后=0期, 相关系数=0.7648" r5 S/ b( b, b2 J) Y5 D- x
- ! r+ S1 f; A* P* b9 i% P) i* d
- 结果已导出到: correlation_result.xlsx
' E% t( z1 V4 q# \ - 热力图已保存: correlation_result_heatmap.png
' _7 t5 G/ |! w8 d - 滞后搜索图已保存: correlation_result_lag_sweep.png
复制代码
4 B' t! U9 n& r" h7 b1 k7 i) A( K |