statsutils
-统计基本面¶
statsutils
提供主要针对用于数据分析的描述性统计的工具,例如 mean()
(平均值)、 median()
, variance()
,和其他许多人,
这个 Stats
类型提供的所有主要功能。 statsutils
模块。一个 Stats
对象包装给定的数据集,将所有统计度量值作为属性属性提供。这些属性缓存其结果,这允许高效地计算多个度量,因为许多度量依赖于其他度量。例如,相对标准差 (Stats.rel_std_dev
)取决于平均值和标准差。Stats对象缓存这些结果,因此不会进行返工。
这个 Stats
为了在计算重用优势不适用时方便起见,类型的属性具有模块级别的对等物。
>>> stats = Stats(range(42))
>>> stats.mean
20.5
>>> mean(range(42))
20.5
统计是一个很大的领域,而且 statsutils
专注于一些在软件中有用的基本技术。以下是对这些技术的简要介绍。如需更深入的介绍, Statistics for Software ,我写的一篇关于这个主题的文章。它介绍了对有效使用统计至关重要的关键术语。
统计矩¶
Python程序员可能很熟悉 mean 或 average ,它给出了一个粗略的量化中间值,可以用来对样本进行泛化。然而,平均数只是四个中的第一个 moment -基于可以测量样本或分布的度量。
四个 Standardized moments 包括:
Variance -
variance()
-价值分散的宽度Skewness -
skewness()
-分布的对称性Kurtosis -
kurtosis()
-“长尾巴”还是“长尾巴”-
欲了解更多信息,请查看 the Moment article on Wikipedia 。
请记住,虽然这些时刻可以让您更深入地了解数据的形状和分布,但它们并不能保证数据的全貌。差异很大的数据集可能在所有四个时刻都有相同的值,因此要明智地进行概括。
稳健统计¶
基于时刻的统计数据以容易被异常值扭曲而臭名昭著。稳健统计的整个领域都旨在缓解这一困境。 statsutils
还包括几种可靠的统计方法:
Median -已排序数据集的中间值
Trimean -另一个衡量数据中心趋势的稳健指标
Median Absolute Deviation (MAD)-一种稳健的变异性衡量标准,是
variance()
。Trimming -将数据集减少到数据的中间多数是使其他估计器更稳健的一种简单方法。
在线和离线统计信息¶
与计算机联网无关, online 统计涉及到在 streaming 时尚,没有所有可用的数据。这个 Stats
TYPE用于在所有数据都可用时进行更传统的离线统计。对于纯Python在线统计累加器,请参阅 Lithoxyl 系统工具包。
- class boltons.statsutils.Stats(data, default=0.0, use_copy=True, is_sorted=False)[源代码]¶
这个
Stats
类型用于表示一组无序统计数据点,用于计算平均值、中位数和方差。- 参数:
- clear_cache()[源代码]¶
Stats
对象自动缓存可重复使用的中间计算。例如,访问std_dev
属性之后的variance
对于大中型数据集,属性的速度将显著提高。如果通过添加其他数据点来修改对象,请调用此函数以重新计算缓存的统计信息。
- describe(quantiles=None, format=None)[源代码]¶
以几种方便的格式之一为Stats对象中的数据提供标准摘要统计信息。
- 参数:
以下是默认情况下返回的信息
describe
,如"text"
格式:>>> stats = Stats(range(1, 8)) >>> print(stats.describe(format='text')) count: 7 mean: 4.0 std_dev: 2.0 mad: 2.0 min: 1 0.25: 2.5 0.5: 4 0.75: 5.5 max: 7
有关更高级的描述性统计数据,请查看我关于该主题的博客文章 Statistics for Software 。
- format_histogram(bins=None, **kw)[源代码]¶
使用固定宽度的存储箱生成数据的文本直方图,即使在控制台环境中也能实现简单的可视化。
>>> data = list(range(20)) + list(range(5, 15)) + [10] >>> print(Stats(data).format_histogram(width=30)) 0.0: 5 ######### 4.4: 8 ############### 8.9: 11 #################### 13.3: 5 ######### 17.8: 2 ####
在此直方图中,五个值介于0.0和4.4之间,八个值介于4.4和8.9之间,两个值介于17.8和最大值之间。
您可以指定垃圾箱的数量,也可以提供垃圾箱边界本身的列表。如果没有提供垃圾箱,如上例所示, Freedman's algorithm 使用FOR BIN选择。
- 参数:
bins (int) -- 直方图的最大柱状图数量。还接受浮点箱边界的列表。如果最小边界仍然大于数据中的最小值,则将隐式添加该边界。默认设置为由返回的存储箱边界 Freedman's algorithm 。
bin_digits (int) -- 要将每个箱舍入到的位数。请注意,箱体总是向下舍入,以避免裁剪任何数据。默认为1。
width (int) -- 直方图中最长线中的整数列。在Python3.3+上默认为控制台宽度,如果该宽度不可用,则默认为80。
format_bin (callable) -- 调用每个存储箱以创建最终输出的标签。使用此功能可以添加单位,例如表示毫秒的“ms”。
如果您想要更具编程可重用性的内容,请参阅
get_histogram_counts()
方法时,的输出由FORMAT_STUSTGRAM使用。这个describe()
方法是另一种有用的摘要方法,尽管可视化程度较低。
- get_histogram_counts(bins=None, **kw)[源代码]¶
生成一个列表,该列表
(bin, count)
使用固定宽度的存储箱组成Stats对象数据的直方图的对。看见Stats.format_histogram()
了解更多详细信息。此方法的输出可以存储和/或修改,然后传递给
statsutils.format_histogram_counts()
若要实现与format_histogram()
方法。这对于随着时间推移拍摄快照非常有用。
- get_quantile(q)[源代码]¶
从数据集中获取分位数。分位数是介于
0.0
和1.0
同0.0
表示数据集中的最小值,并且1.0
代表了最大值。0.5
表示中位数:>>> Stats(range(100)).get_quantile(0.5) 49.5
- iqr¶
四分位数范围(IQR)是第75个百分位数和第25个百分位数之间的差值。IQR是一种稳健的离散度度量,与标准差一样,但在数据集之间进行比较更安全,因为它受异常值的影响较小。
- kurtosis¶
指示分布的尾部中有多少数据。结果总是积极的,正态的“钟形曲线”分布的峰度为3。
http://en.wikipedia.org/wiki/Kurtosis
有关统计矩的更多信息,请参阅模块文档字符串。
- mad¶
中位数绝对偏差是统计分散度的稳健衡量标准:http://en.wikipedia.org/wiki/Median_absolute_deviation
- max¶
数据中存在的最大值。
- mean¶
算术平均值,或“平均值”。值除以值数的总和。
- median¶
中位数是样本的两个中间值的中间值或平均值。与平均值相比,它对样本中异常值的存在通常更具弹性。
- median_abs_dev¶
中位数绝对偏差是统计分散度的稳健衡量标准:http://en.wikipedia.org/wiki/Median_absolute_deviation
- min¶
数据中存在的最小值。
- pearson_type¶
- rel_std_dev¶
标准差除以平均值的绝对值。
- skewness¶
表示曲线的不对称性。正值表示大部分值位于平均值的左侧,反之亦然。
http://en.wikipedia.org/wiki/Skewness
有关统计矩的更多信息,请参阅模块文档字符串。
- std_dev¶
标准差。方差的平方根。
- trim_relative(amount=0.15)[源代码]¶
一种效用函数,用于从值表的两端截取一定比例的值。这具有限制异常值影响的效果。
- 参数:
amount (float) -- 一个介于0.0和0.5之间的值,用于修剪数据的每一侧。
- trimean¶
三分位数是对中心趋势的稳健衡量,就像中位数一样,取中位数以及上下四分位数的加权平均。
- variance¶
方差是每个值与平均值之间的差的平方的平均值。
- boltons.statsutils.describe(data, quantiles=None, format=None)[源代码]¶
一个方便的函数,用于获取对描述大多数数据有用的标准汇总统计数据。看见
Stats.describe()
了解更多详细信息。>>> print(describe(range(7), format='text')) count: 7 mean: 3.0 std_dev: 2.0 mad: 2.0 min: 0 0.25: 1.5 0.5: 3 0.75: 4.5 max: 6
看见
Stats.format_histogram()
另一个使用文本可视化的非常有用的摘要。
- boltons.statsutils.format_histogram_counts(bin_counts, width=None, format_bin=None)[源代码]¶
格式化背后的逻辑
Stats.format_histogram()
,它的输出为Stats.get_histogram_counts()
,并将它们传递给此函数。
- boltons.statsutils.iqr(data, default=0.0)¶
四分位数范围(IQR)是第75个百分位数和第25个百分位数之间的差值。IQR是一种稳健的离散度度量,与标准差一样,但在数据集之间进行比较更安全,因为它受异常值的影响较小。
>>> iqr([1, 2, 3, 4, 5]) 2 >>> iqr(range(1001)) 500
- boltons.statsutils.kurtosis(data, default=0.0)¶
指示分布的尾部中有多少数据。结果总是积极的,正态的“钟形曲线”分布的峰度为3。
http://en.wikipedia.org/wiki/Kurtosis
有关统计矩的更多信息,请参阅模块文档字符串。
>>> kurtosis(range(9)) 1.99125
峰度为1.99125, [0, 1, 2, 3, 4, 5, 6, 7, 8] 比正常曲线分布更集中。
- boltons.statsutils.mean(data, default=0.0)¶
算术平均值,或“平均值”。值除以值数的总和。
>>> mean(range(20)) 9.5 >>> mean(list(range(19)) + [949]) # 949 is an arbitrary outlier 56.0
- boltons.statsutils.median(data, default=0.0)¶
中位数是样本的两个中间值的中间值或平均值。与平均值相比,它对样本中异常值的存在通常更具弹性。
>>> median([2, 1, 3]) 2 >>> median(range(97)) 48 >>> median(list(range(96)) + [1066]) # 1066 is an arbitrary outlier 48
- boltons.statsutils.median_abs_dev(data, default=0.0)¶
中位数绝对偏差是统计分散度的稳健衡量标准:http://en.wikipedia.org/wiki/Median_absolute_deviation
>>> median_abs_dev(range(97)) 24.0
- boltons.statsutils.pearson_type(data, default=0.0)¶
- boltons.statsutils.rel_std_dev(data, default=0.0)¶
标准差除以平均值的绝对值。
http://en.wikipedia.org/wiki/Relative_standard_deviation
>>> print('%1.3f' % rel_std_dev(range(97))) 0.583
- boltons.statsutils.skewness(data, default=0.0)¶
表示曲线的不对称性。正值表示大部分值位于平均值的左侧,反之亦然。
http://en.wikipedia.org/wiki/Skewness
有关统计矩的更多信息,请参阅模块文档字符串。
>>> skewness(range(97)) # symmetrical around 48.0 0.0 >>> left_skewed = skewness(list(range(97)) + list(range(10))) >>> right_skewed = skewness(list(range(97)) + list(range(87, 97))) >>> round(left_skewed, 3), round(right_skewed, 3) (0.114, -0.114)
- boltons.statsutils.std_dev(data, default=0.0)¶
标准差。方差的平方根。
>>> std_dev(range(97)) 28.0
- boltons.statsutils.trimean(data, default=0.0)¶
三分位数是对中心趋势的稳健衡量,就像中位数一样,取中位数以及上下四分位数的加权平均。
>>> trimean([2, 1, 3]) 2.0 >>> trimean(range(97)) 48.0 >>> trimean(list(range(96)) + [1066]) # 1066 is an arbitrary outlier 48.0
- boltons.statsutils.variance(data, default=0.0)¶
方差是每个值与平均值之间的差的平方的平均值。
>>> variance(range(97)) 784.0