计算一定数量列之间大数据帧的成对相关性
Calculating pairwise correlations of large dataframe among a certain number of columns
我意识到过去已经在 SO 上发布了一些与我在此处提出的问题类似的问题。然而,他们并没有给我我想要的。
我有一个大型数据框,data
,有 314 列。我想计算所有对之间的相关值 只有我的数据帧的前 30 列。 之后,我想报告前 5 个相关对,无论符号如何,所以在相关系数的大小方面。我意识到我应该使用 .corr()
因为一些数据框单元格是空的,我们不想包括它们。
这是我目前所拥有的。我还在努力。也不知道 cc
的类型,这就是为什么我没有报告前 5 个值的原因:
W = 30 # taking the first 30 columns
cc = np.zeros((1,W)) # pre-allocation for coefficients
for c in range(1:W) in data:
tmp = data.corr(data(:,c0),data(:,c));
cc(c) = tmp(1,2);
这是数据框的前 15 行和 5 列:
Group Age Gender Weight Height
0 1 50 1 224 73.533514
1 1 59 0 180 62.625479
2 1 22 0 167 62.253894
3 1 48 0 113 61.476092
4 1 53 1 166 70.076665
5 1 48 1 210 71.384046
6 1 29 0 140 61.438960
7 1 44 1 181 74.992675
8 1 28 0 98 60.145635
9 1 42 1 187 71.588029
10 1 35 0 199 66.773644
11 0 54 1 228 76.971180
12 0 43 0 145 67.586941
13 1 50 0 190 67.229118
14 1 62 0 281 63.645601
好的,这应该可以。第一部分为您提供前 30 列的绝对相关矩阵,并基本上删除了 auto-correlations。下一部分通过找到绝对最大值来寻找五个整体最大相关性,将其标记下来,将其从相关矩阵中删除,然后移动到下一个。 max_list
中的每个元素都像带有 abs 的 (0.8764779791676971, 'Gender', 'Height')
。相关性以及给出该相关性的两列。
import pandas as pd
import numpy as np
corr = data.iloc[:,0:30].corr().replace(1, np.NaN).abs()
max_list = []
for i in range(0,5):
max_val = max(corr.max())
max_list.append((max_val, corr.columns[np.where(corr == max_val)[0][:]][0],
corr.columns[np.where(corr == max_val)[0][:]][1]))
corr.replace(max_val, np.NaN, inplace=True)
我意识到过去已经在 SO 上发布了一些与我在此处提出的问题类似的问题。然而,他们并没有给我我想要的。
我有一个大型数据框,data
,有 314 列。我想计算所有对之间的相关值 只有我的数据帧的前 30 列。 之后,我想报告前 5 个相关对,无论符号如何,所以在相关系数的大小方面。我意识到我应该使用 .corr()
因为一些数据框单元格是空的,我们不想包括它们。
这是我目前所拥有的。我还在努力。也不知道 cc
的类型,这就是为什么我没有报告前 5 个值的原因:
W = 30 # taking the first 30 columns
cc = np.zeros((1,W)) # pre-allocation for coefficients
for c in range(1:W) in data:
tmp = data.corr(data(:,c0),data(:,c));
cc(c) = tmp(1,2);
这是数据框的前 15 行和 5 列:
Group Age Gender Weight Height
0 1 50 1 224 73.533514
1 1 59 0 180 62.625479
2 1 22 0 167 62.253894
3 1 48 0 113 61.476092
4 1 53 1 166 70.076665
5 1 48 1 210 71.384046
6 1 29 0 140 61.438960
7 1 44 1 181 74.992675
8 1 28 0 98 60.145635
9 1 42 1 187 71.588029
10 1 35 0 199 66.773644
11 0 54 1 228 76.971180
12 0 43 0 145 67.586941
13 1 50 0 190 67.229118
14 1 62 0 281 63.645601
好的,这应该可以。第一部分为您提供前 30 列的绝对相关矩阵,并基本上删除了 auto-correlations。下一部分通过找到绝对最大值来寻找五个整体最大相关性,将其标记下来,将其从相关矩阵中删除,然后移动到下一个。 max_list
中的每个元素都像带有 abs 的 (0.8764779791676971, 'Gender', 'Height')
。相关性以及给出该相关性的两列。
import pandas as pd
import numpy as np
corr = data.iloc[:,0:30].corr().replace(1, np.NaN).abs()
max_list = []
for i in range(0,5):
max_val = max(corr.max())
max_list.append((max_val, corr.columns[np.where(corr == max_val)[0][:]][0],
corr.columns[np.where(corr == max_val)[0][:]][1]))
corr.replace(max_val, np.NaN, inplace=True)