如何从50列数据集中筛选相关性<0.7的低关联变量名称
解决低关联变量筛选问题
嘿,我来帮你把这个任务收尾!你已经完成了数据生成和相关性计算的核心步骤,接下来我们把剩下的逻辑补全,精准找出那些相关性低于0.7的变量对。
完整代码实现
import numpy as np import pandas as pd # 生成模拟数据(和你的代码一致) data = np.random.randint(1,99,size=(100, 50)) dataframe = pd.DataFrame(data) codes = np.arange(50).astype(str) dataframe.columns = codes # 计算变量间的相关矩阵 corr_matrix = dataframe.corr() # 将相关矩阵转换为长格式的Series,方便排序和筛选 corr_series = corr_matrix.unstack().sort_values() # 第一步:排除变量与自身的相关性(因为自己和自己的相关系数恒为1,肯定不符合要求) corr_series = corr_series[corr_series.index.get_level_values(0) != corr_series.index.get_level_values(1)] # 第二步:筛选出相关性小于0.7的条目 # 如果你想筛选的是**绝对值小于0.7**(即弱相关,不管正负),可以把下面的条件改成abs(value) < 0.7 low_corr_pairs = corr_series[corr_series < 0.7] # 可选:去除重复的配对(比如(0,1)和(1,0)是同一个相关性,只保留一次) low_corr_pairs = low_corr_pairs[low_corr_pairs.index.get_level_values(0) < low_corr_pairs.index.get_level_values(1)] # 查看结果 print("相关性小于0.7的变量对:") print(low_corr_pairs) # 如果需要提取所有低关联的变量名称(去重) low_corr_vars = list(set([var for pair in low_corr_pairs.index for var in pair])) print("\n所有参与低关联配对的变量名称:") print(low_corr_vars)
代码解释
- 我们先把相关矩阵
unstack()转换成了一个Series,这样每一行都是一个变量对的相关性值,索引是(变量A, 变量B)的元组,方便后续筛选。 - 首先过滤掉变量自身的配对(比如
(0,0)),因为这些的相关系数是1,完全不符合“小于0.7”的要求。 - 然后根据需求筛选出相关性小于0.7的条目,这里加了个备注:如果你的需求是弱相关(不管正负),可以用
abs(value) < 0.7来筛选,这样正负相关只要绝对值小都算。 - 最后可选的一步是去除重复配对,因为相关性矩阵是对称的,
(A,B)和(B,A)的相关性完全一样,去掉重复后结果更清爽。 - 如果你需要单独提取所有涉及低关联的变量名称,最后一行代码把所有配对里的变量去重后整理成了列表。
内容的提问来源于stack exchange,提问作者user9703439
相关产品推荐
相关产品推荐

