如何循环遍历相关矩阵以仅提供高于特定阈值的相关对? And/or 提高效率

How do I loop across a correlation matrix to only give me pairs of correlations above a certain threshold? And/or make it more efficient

我有以下代码:

for i in list(corr.columns):
    for j in list(corr.columns):
        if corr.ix[i,j]>0.7 and corr.ix[i,j] != 1:
            print i, ' ',j ,' ', corr.ix[i,j] 

问题是,虽然这有效,但它 returns corr[i,j] 和 corr[j,i] 就好像它们是不同的相关性一样。 无论如何,我可以只循环遍历相关矩阵的 'bottom triangle' 吗?

下面是一种可能,仍然使用类似于你的循环结构。请注意,通过限制 j 的可能值范围,您可以从循环中消除大部分重复工作。此外,虽然像您一样使用字符串进行索引可能会使某些程序更多 readable/robust,但使用整数索引 numpy 二维数组可能会更快(并且更简洁,因为没有 .ix 组件)。以这种方式编制索引还可以让您跳过测试不需要的元素。

# Get some toy data and extract some information from it
import pandas.io.data as pd
X = pd.DataReader('aapl','yahoo')
rows, cols = X.shape
flds = list(X.columns)

# Indexing with numbers on a numpy matrix will probably be faster
corr = X.corr().values

for i in range(cols):
    for j in range(i+1, cols):
        if corr[i,j] > 0.7:
            print flds[i], ' ', flds[j], ' ', corr[i,j]

运行 上面的代码产生如下内容:

Open   High   0.99983447301
Open   Low   0.999763093885
Open   Close   0.999564997906
High   Low   0.999744241894
High   Close   0.999815965479
Low   Close   0.999794304851