2017-06-02 4 views
0

ich folgendes bemerken, einige Skript ich für die Berechnung der Reihe von Summen pro Gruppen gebaut:np.corrcoef Verhalten mit Pandas Datenrahmen

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,) 

Wie Sie die Form sehen konnte rigoros genau zwischen irgendwelchen Eingaben np ist. corrcoef().

Kann mir bitte jemand helfen, das zu verstehen?

Antwort

1

Sie müssen sum_per_group2 Variable transponieren, wenn Sie es als 2D-Array übergeben möchten:

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

Hier ist die docs über x Parameter:

x: array_like A 1- D oder 2D-Array mit mehreren Variablen und Beobachtungen. Jede Zeile x repräsentiert eine Variable und jede Spalte eine einzige Beobachtung aller dieser Variablen. Siehe auch rowvar unten.

Wenn Sie das 2D-Array übergeben, stellen Sie sicher, dass die Spalte Beobachtung und Zeile Variable oder Funktionen ist; Die Korrelation wird zwischen den Zeilen berechnet. Oder setzen Sie rowvar=0:

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

Wenn Sie nicht das 2D-Array transponieren, wobei das Verfahren Reihe als Vektor interpretiert, so dass in den ersten wenigen Fällen es die Korrelationskoeffizienten aller Kombinationen der Zeilen berechnet Da jede Zeile ein Vektor der Länge 2 ist, erhalten Sie alle 1 als Koeffizienten, was passieren würde, wenn Sie versuchen, eine Linie mit zwei Punkten zu versehen (passt immer perfekt).

+0

Danke für die Klärung der Funktionsabläufe, ich habe die Zeile als Vektording verpasst. Das macht jetzt Sinn, ich habe mich gefragt, warum dies mit einem Fehler systematisch einen 1 Korrelationsfaktor ergeben könnte. Aber ich habe nicht an meine Form gedacht. Jetzt sollte ich jetzt versuchen, es zu ändern, um das Funktionsverhalten besser zu testen. –