2014-01-13 35 views
1

含義使用Python:求和方差/ np.cov使用Python/numpy的

所以我有一個數據幀稱爲文件,我想找到它的列「價格」的一個總體方差。

對於方差公式,我知道你必須包括協方差。

我讀過np.cov會產生一個協方差矩陣。然而,當我使用它,我沒有得到一個矩陣(或因此我認爲)

我的代碼

np.cov(File['Prices']) 

給我

array(2118322.0106797763) 

是否那麼這個答案計算如下功能: Var(所有價格)= Var(價格1)+ .....Val(價格N)+2 [Cov(X1,X2)+ ..... + Cov(N-1,N)]

那麼2118322實際上是差異的總和?我期待得到一個矩陣,而不是我實際得到的。

+0

您不應該調用變量'File',它是python中的保留關鍵字。如果必須的話,稱之爲「my_file」。你的數據框是一個「pandas」數據框嗎?傳遞給'np.cov'的數據的形狀是什麼? – jozzas

+0

我在實際的代碼中實際上將它稱爲Catalog。雖然好的電話! – Alexis

+0

這是一隻熊貓df。數據的形狀是一個大約有100,000個值的系列,因此Catalog ['Price']僅列出目錄中的所有價格 – Alexis

回答

3

你只是傳遞一個序列,所以你得到一個單一的方差。

基本上,你做這樣的事情:

np.cov([3.4, 5.6, ..., 9.8, 4.5]) 

...剛剛得到的序列變異。

如果你想要一個描述多個變量之間關係的協方差矩陣,你需要傳入一個二維數組。默認情況下,numpy.cov需要numdimensions x numsamples陣列。 (這可以通過使用rowvar=False或通過只是路過在數據的轉置而改變。)

基本上,這樣的事情:

import numpy as np 

# Generate two 100-sample sequences 
data = np.random.random((2, 100)) 

print np.cov(data) 

或者與pandas數據幀,只需調用cov方法:

import numpy as np 
import pandas as pd 

# Generate two 100-sample sequences 
x, y = np.random.random((2, 100)) 
data = pd.DataFrame(dict(x=x, y=y)) 

# Similarly, we could have done "np.cov(data.T)", though that would yield 
# an array instead of a dataframe 
print data.cov() 
+0

感謝您的幫助! – Alexis