2017-06-02 137 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個相關因子。但我沒有想到我的形狀。現在我應該嘗試改變它來更好地測試函數行爲。 –