2017-03-01 10 views
2

いくつかのコードがありますが、なぜnp.stdを適用すると2つの異なる結果が得られるのか理解できません。異なる結果np.std()がpandasとstandaloneで使用されている場合

import numpy as np 
import pandas as pd 
a = np.array([ 1.5, 6. , 7. , 4.5]) 
print 'mean value is:', a.mean() 
print 'standard deviation is:', np.std(a) 

次の行は、基本的には私が読むことができるnp.stdのドキュメントからパンダのデータフレーム

base = datetime.datetime(2000, 1, 1) 
arr = np.array([base + datetime.timedelta(days=i) for i in xrange(4)]) 
index_date = pd.Index(arr, name = 'dates') 
data_gas = pd.DataFrame(a, index_date, columns=['value'], dtype=float) 
mean_pandas = data_gas.resample('M').mean() 
standard_deviation = data_gas.resample('M').apply(np.std) 
print mean_pandas 
print standard_deviation 

で同じことを行う必要があります:「...デフォルトでddofはゼロです。」 (ddof =デルタ自由度)。

np.std(a)は、除数がN(=値の数)である標準偏差を返します。...resample('M').apply(np.std)は、除数がN-1の標準偏差を返します。

+0

いずれの場合でも値を共有できますか? –

+0

np.std(a)の結果は2.0767で、standard_deviationは2.3979を返します – paulchen

+0

私が正しく理解していれば、あなたの質問は「なぜ、 '.apply(np.std)'が 'np.std'自体にもかかわらずddof = 1を使って計算するのですddof = 0?」となる。それは正しい解釈ですか? –

答えて

1

デフォルトでは、numpyは母集団標準偏差を使用します。これは、除算値がNであることに注意してください。ここで、Nは値の数です。これは、完全なデータセットを持っている場合に使用されます。

パンダ版では、標準偏差のサンプルが計算されています。これは、除数がN-1であり、大きなセットのデータのサブセットがある場合に使用されます。これはnumpyでnp.std(a, ddof=1)によって達成することができます。

例として、都市の靴サイズの標準偏差を測定する場合は、標本標準偏差を使用します。すべてのサイズを測定することは現実的ではないため、路上の人から100回の靴サイズ測定のサンプルを使用しています。このケースでは、あなたの(うまくいけばランダムな)データサンプルを使ってより大きなセットをモデル化しています。ほとんどの場合、標本標準偏差があなたの望むものであると言います。

都市全体に結果を一般化するのではなく、100サンプルのこのサンプルの標準偏差を求めたい場合は、母集団標準偏差を使用します。

+0

ありがとうございました。答えの2つの最も重要な文章は次のようなものだと思います:Divisor「N」は完全なデータセットとともに使用されます。大きなセットのデータのサブセットがあるときは 'N-1'が使用されます(これは私の場合は究極的に真実です;月々の月平均のサンプル標準偏差を計算したい...)もう一度ありがとう。 – paulchen

関連する問題