2017-03-01 2 views
2

Ich habe etwas Code und verstehe nicht, warum die Anwendung von np.std zwei verschiedene Ergebnisse liefert.Verschiedene Ergebnisse np.std() bei Verwendung in Pandas und 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) 

Next Zeilen sollten grundsätzlich das gleiche tun, nur in einem Pandas Datenrahmen

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 

Aus der Dokumentation von np.std wir lesen können: "... In der Standardeinstellung ddof ist gleich Null." (ddof = delta Freiheitsgrade).

np.std(a) liefert die Standardabweichung wo der Divisor N ist (= Anzahl der Werte), ...resample('M').apply(np.std) liefert die Standardabweichung wo der Divisor N minus 1 ist. Was verursacht diesen Unterschied?

+0

Können Sie die Werte teilen, die Sie in jedem Fall erhalten? –

+0

np.std (a) ergibt 2.0767 und standard_deviation liefert 2.3979 – paulchen

+0

Also, wenn ich richtig verstehe, ist Ihre Frage "warum' .apply (np.std) 'mit ddof = 1 berechnen, trotz' np.std' selbst verwenden ddof = 0? ". Ist das die richtige Interpretation? –

Antwort

1

Standardmäßig verwendet numpy die Standardabweichung der Grundgesamtheit, die, wie Sie bemerken, einen Teiler von N hat, wobei N die Anzahl der Werte ist. Dies wird verwendet, wenn Sie einen vollständigen Datensatz haben.

Die Pandas-Version berechnet die Standardabweichung der Stichprobe. Dies hat einen Teiler von N-1 und wird verwendet, wenn Sie eine Teilmenge von Daten aus einem größeren Satz haben. Dies kann in einer Anzahl von np.std(a, ddof=1) erreicht werden.

Als Beispiel würden Sie die Standardabweichung verwenden, wenn Sie die Standardabweichung der Schuhgrößen in Ihrer Stadt messen möchten. Es ist nicht möglich, alle Größen zu messen, also verwenden Sie eine Stichprobe von 100 Schuhgrößen, die Sie von Personen auf der Straße genommen haben. In diesem Fall verwenden Sie Ihre (hoffentlich zufällige) Stichprobe von Daten, um eine größere Menge zu modellieren. In den meisten Fällen würde ich sagen, dass Beispielstandardabweichung ist, was Sie wünschen.

Wenn Sie Ihre Ergebnisse nicht auf die gesamte Stadt verallgemeinern, sondern die Standardabweichung nur für diese Stichprobe von 100 Größen ermitteln möchten, verwenden Sie die Standardabweichung der Population.

+0

Vielen Dank. Ich denke, die zwei wichtigsten Sätze Ihrer Antwort sind: Divisor 'N' wird mit einem vollständigen Datensatz verwendet. "N-1" wird verwendet, wenn Sie eine Teilmenge von Daten aus einer größeren Menge haben (was in meinem Fall letztendlich zutrifft; ich möchte die Stichproben-Standardabweichung von Monatsmitteln für viele Monate berechnen ...) Nochmals vielen Dank . – paulchen

Verwandte Themen