在pandas和独立

时间:2017-03-01 15:27:44

标签: python pandas numpy standard-deviation

我有一些代码并且不明白为什么应用np.std会产生两种不同的结果。

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)

下一行基本上应该只在pandas数据框中执行相同的操作

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

从np.std的文档中我可以读到:“...默认情况下ddof为零。” (ddof = delta自由度)。

np.std(a)提供标准差,其中除数为N(=值的数量),...resample('M').apply(np.std)提供除数为N减1的标准偏差。导致这种差异的原因是什么?

1 个答案:

答案 0 :(得分:2)

默认情况下,numpy使用总体标准偏差,正如您所记录的那样,其除数为N,其中N是值的数量。如果您有完整的数据集,则使用此选项。

pandas版本正在计算样本标准差。它有一个N-1的除数,当你有一个较大集合的数据子集时使用。这可以通过np.std(a, ddof=1) numpy实现。

例如,如果您想测量您所在城市的鞋码标准偏差,您可以使用样本标准偏差。测量每个人的大小是不可行的,因此您使用的是从街上的人那里获得的100个鞋码测量样本。在这种情况下,您使用(希望是随机的)数据样本来建模更大的集合。在大多数情况下,我会说样本标准差是你想要的。

如果您不希望将结果推广到整个城市,而是想要找到100个尺寸的样本的标准偏差,那么您将使用人口标准偏差。