2017-09-06 10 views
1

私は新しいpythonとpandasユーザーです。私は、列のすべての要素をその平均から引いて、標準偏差で除算しようとしています。私は2つの異なる方法(numeric_data1とnumeric_data2)でそれをしました。パンダとnumpyでのこれら2つの結果の違い

import pandas as pd 
data = pd.read_csv("https://s3.amazonaws.com/demo-datasets/wine.csv") 
numeric_data = data.drop("color",1) 
numeric_data1 = (numeric_data - numeric_data.mean())/numeric_data.std() 
numeric_data2 = (numeric_data - np.mean(numeric_data, axis=0))/np.std(numeric_data, axis=0) 

type(numeric_data1) 
pandas.core.frame.DataFrame 


type(numeric_data2) 
pandas.core.frame.DataFrame 

彼らは両方ともpandasデータフレームであり、私は両方とも私に同じ結果を与えるべきだと思います。しかし、私は別の結果を得る。

numeric_data2 == numeric_data1 ---> False 

私はこの問題は、数値精度を処理する方法numpyのとパンダから茎と思います。

numeric_data.mean()== np.mean(numeric_data, axis=0) ---> True 
numeric_data.std(axis=0) ==np.std(numeric_data, axis=0) ---> False 

平均的なnumpyとpandasは私に同じことを与えましたが、標準偏差については少し異なる結果が得られました。

私の評価は正しいですか?または私はいくつかの失敗を作っていますか?

答えて

2

標準偏差を計算する場合は、母集団全体の標準偏差をその母集団のより小さいサンプルで推定するか、母集団全体の標準偏差を計算するかどうかが重要です。

人口が多い場合は、標本標準偏差というものが必要です。それが判明したように、二乗差の和を平均から観測数で除算すると、偏った推定量になります。観測数よりも1で割って補正します。サンプル標準偏差の場合はddof=1、母集団標準偏差の場合はddof=0という引数を使用して制御します。

真実です、あなたのサンプルサイズが大きければ大したことではありません。しかし、小さな違いが見えます。

あなたpandas.DataFrame.std呼び出しで自由引数の度合いを使用します。

import pandas as pd 
data = pd.read_csv("https://s3.amazonaws.com/demo-datasets/wine.csv") 
numeric_data = data.drop("color",1) 
#                  VVVVVV 
numeric_data1 = (numeric_data - numeric_data.mean())/numeric_data.std(ddof=0) 
numeric_data2 = (numeric_data - np.mean(numeric_data, axis=0))/np.std(numeric_data, axis=0) 

np.isclose(numeric_data1, numeric_data2).all() 

True 

それともnp.stdコール

import pandas as pd 
data = pd.read_csv("https://s3.amazonaws.com/demo-datasets/wine.csv") 
numeric_data = data.drop("color",1) 
numeric_data1 = (numeric_data - numeric_data.mean())/numeric_data.std() 
numeric_data2 = (numeric_data - np.mean(numeric_data, axis=0))/np.std(numeric_data, axis=0, ddof=1) 

np.isclose(numeric_data1, numeric_data2).all() 

True 
+0

あなたはより多くのそれを説明してもらえで? – psimeson

+0

[numpy.std](https://docs.scipy.org/doc/numpy/reference/generated/numpy.std.html)のドキュメントをご覧ください.ddofのデフォルト= 0と[pandas.DataFrame.std ](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.std.html)では、ddof default = oneを参照してください。 –

+0

@ScottBostonに感謝します。私はddofについては全く知らなかった – psimeson

関連する問題