2017-06-02 86 views
0

我遵守以下,使用一些脚本我为计算每组系列款项:与大熊猫np.corrcoef行为dataframes

In [291]: sums_per_group2 
Out[291]: 
     test_group control_group 
one 4551.658544   4449.3 
three 3770.712771   3430.5 
two 9328.171538   8673.9 

In [292]: sums_per_group2.shape 
Out[292]: (3, 2) 

In [293]: np.corrcoef(sums_per_group2) 
Out[293]: 
array([[ 1., 1., 1.], 
     [ 1., 1., 1.], 
     [ 1., 1., 1.]]) 

In [294]: np.corrcoef(sums_per_group2.values) 
Out[294]: 
array([[ 1., 1., 1.], 
     [ 1., 1., 1.], 
     [ 1., 1., 1.]]) 

In [295]: sums_per_group2.values.shape 
Out[295]: (3, 2) 

In [296]: np.corrcoef(sums_per_group2.iloc[:,0],sums_per_group2.iloc[:,1]) 
Out[296]: 
array([[ 1.  , 0.99853641], 
     [ 0.99853641, 1.  ]]) 

In [296]: sums_per_group2.iloc[:,0].shape 
Out[296]: (3,) 

In [297]: sums_per_group2.iloc[:,1].shape 
Out[297]: (3,) 

正如你可以看到形状的任何输入到NP之间严格准确。 corrcoef()。

有人可以帮我理解这个吗?

回答

1

你需要转sum_per_group2变量,如果你想要把它当作二维数组:

np.corrcoef(sum_per_group2.T) 
# array([[ 1.  , 0.99853641], 
#  [ 0.99853641, 1.  ]]) 

这里是文档x参数:

X:array_like 1- D或二维数组包含多个变量和观察值。 x的每一行代表一个变量,并且每一列都有一个单独的 观察所有这些变量。下面请参阅rowvar

当您传入2d数组时,请确保该列是观察值且行是变量或特征;相关性是在行之间计算的。或者设置rowvar=0

np.corrcoef(sum_per_group2, rowvar=0) 
#array([[ 1.  , 0.99853641], 
#  [ 0.99853641, 1.  ]]) 

如果不转的二维数组,该方法解释行作为载体,所以在你的第一个少数情况下,它计算行的所有组合的相关系数,因为每一行都是长度为2的矢量,所以你得到全部为1的系数,当你尝试用两点拟合一条线时(总是完美适合),会发生这种情况。

+0

感谢您对函数工作的澄清,我错过了作为矢量事物的行。因此,现在有道理,我想知道为什么这个错误将能够系统地产生1个相关因子。但我没有想到我的形状。现在我应该尝试改变它来更好地测试函数行为。 –