从Python或R中获取大数据集的高度相关对的有效方法

时间:2012-06-29 20:55:35

标签: python algorithm r

我有一个大型数据集(假设有10,000个变量,每个变量大约有1000个元素),我们可以将其视为2D列表,例如:

[[variable_1],
 [variable_2],
 ............
 [variable_n]
]

我想从该数据中提取高度相关的变量对。我希望“高度相关”成为我可以选择的参数。

我不需要提取所有对,并且我不一定需要最相关的对。只要有一种有效的方法让我高度相关,我很高兴。

此外,如果变量不会出现在多个对中,那就太好了。虽然这可能不是至关重要的。

当然,有一种蛮力的方法可以找到这样的对,但对我来说太慢了。

我已经搜索了一下,发现了一些关于这个问题的理论工作,但我找不到能够做我想要的东西的包。我主要在python中工作,所以python中的一个包最有帮助,但是如果R中有一个包来做我正在寻找的东西就会很棒。

有没有人知道在Python或R中执行上述操作的程序包?还是其他任何想法?

提前感谢

3 个答案:

答案 0 :(得分:9)

你没有告诉我们你需要多快的速度,所以这是一个天真的解决方案。

只需计算相关矩阵,然后使用which获取您所追求的对的索引:

x <- matrix(rnorm(10000*1000), ncol = 10000)
corm <- cor(x)
out <- which(abs(corm) > 0.80, arr.ind=TRUE)

然后,您可以使用子集来摆脱对角线和冗余对:

out[out[,1] > out[,2]]

在我的机器上计算相关矩阵大约需要75秒,which()部分大约需要3秒......对冗余进行子集化大约需要1.2秒。这太慢了吗?

答案 1 :(得分:0)

10,000 x 1,000听起来不像是一个尺寸问题。查看pandas

答案 2 :(得分:0)

对于 R:

# load data
library(ISLR)

# Corrlation of numeric columns
corr = cor(College[sapply(College, is.numeric)])

# Display |correlations| > 0.55
as.data.frame(apply(corr, 2, function(x) ifelse (abs(x) >=0.55, round(x,3), "-")))

输出片段

#>              Apps Accept Enroll Top10perc Top25perc F.Undergrad P.Undergrad
#> Apps            1  0.943  0.847         -         -       0.814           -
#> Accept      0.943      1  0.912         -         -       0.874           -
#> Enroll      0.847  0.912      1         -         -       0.965           -
#> Top10perc       -      -      -         1     0.892           -           -
#> Top25perc       -      -      -     0.892         1           -           -
#> F.Undergrad 0.814  0.874  0.965         -         -           1       0.571
#> P.Undergrad     -      -      -         -         -       0.571           1