2015-10-13 33 views
14

我決定比較pandas和scipy.stats中的skew和kurtosis函數,但不明白爲什麼我在庫之間得到不同的結果。pandas與scipy中skew和kurtosis函數有什麼區別?

據我可以從文檔中看出,兩個峯度函數都使用Fisher定義計算,而對於偏斜,似乎沒有足夠的描述來判斷它們是如何計算的。

import pandas as pd 
import scipy.stats.stats as st 

heights = np.array([1.46, 1.79, 2.01, 1.75, 1.56, 1.69, 1.88, 1.76, 1.88, 1.78]) 

print "skewness:", st.skew(heights) 
print "kurtosis:", st.kurtosis(heights) 

這將返回:

skewness: -0.393524456473 
kurtosis: -0.330672097724 

而如果我轉換成數據幀大熊貓:

heights_df = pd.DataFrame(heights) 
print "skewness:", heights_df.skew() 
print "kurtosis:", heights_df.kurtosis() 

這將返回:

skewness: 0 -0.466663 
kurtosis: 0 0.379705 

道歉,如果我已經張貼了這個在錯誤的地方;不知道這是一個統計或編程問題。

回答

18

區別歸因於不同的歸一化。默認情況下,Scipy不會糾正偏見,而熊貓則會。

你可以告訴SciPy的通過將bias=False參數來糾正偏差:

>>> x = pandas.Series(np.random.randn(10)) 
>>> stats.skew(x) 
-0.17644348972413657 
>>> x.skew() 
-0.20923623968879457 
>>> stats.skew(x, bias=False) 
-0.2092362396887948 
>>> stats.kurtosis(x) 
0.6362620964462327 
>>> x.kurtosis() 
2.0891062062174464 
>>> stats.kurtosis(x, bias=False) 
2.089106206217446 

似乎沒有成爲一個方式告訴大熊貓去除偏差校正。

相關問題