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程序员可能很熟悉 meanaverage ,它给出了一个粗略的量化中间值,可以用来对样本进行泛化。然而,平均数只是四个中的第一个 moment -基于可以测量样本或分布的度量。

四个 Standardized moments 包括:

  1. Mean - mean() --理论中间值

  2. Variance - variance() -价值分散的宽度

  3. Skewness - skewness() -分布的对称性

  4. 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 类型用于表示一组无序统计数据点,用于计算平均值、中位数和方差。

参数:
  • data (list) -- 列表或其他包含数值的迭代。

  • default (float) -- 未定义给定统计度量值时要返回的值。默认情况下为0.0,但是 float('nan') 适用于更严格的应用程序。

  • use_copy (bool) -- 默认情况下,Stats对象会将初始数据复制到新列表中,以避免出现修改问题。经过 False 以禁用此行为。

  • is_sorted (bool) -- 预先排序的数据可以跳过额外的排序步骤,以获得一些速度提升。默认为False。

clear_cache()[源代码]

Stats 对象自动缓存可重复使用的中间计算。例如,访问 std_dev 属性之后的 variance 对于大中型数据集,属性的速度将显著提高。

如果通过添加其他数据点来修改对象,请调用此函数以重新计算缓存的统计信息。

count

此Stats对象中的项目数。返回的值与 len() 在Stats对象上,但为Pandas术语提供了并行性。

describe(quantiles=None, format=None)[源代码]

以几种方便的格式之一为Stats对象中的数据提供标准摘要统计信息。

参数:
  • quantiles (list) -- 在生成的摘要中用作分位数的数值列表。所有值都必须在0.0-1.0之间,其中0.5表示中间值。默认为 [0.25, 0.5, 0.75] ,代表标准四分位数。

  • format (str) -- 使用以下三个有效值之一控制函数的返回类型: "dict" 还给我一个 dict 具有适当的键和值。 "list" 是键-值对的列表,其顺序适合传递给OrderedDict或HTML表。 "text" 将值转换为适合打印的文本,如下所示。

以下是默认情况下返回的信息 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() 了解更多详细信息。

参数:
  • bins (int) -- 最大仓位数,或浮点仓位边界列表。默认为弗里德曼算法的输出。

  • bin_digits (int) -- 用于向下舍入箱体边界的位数。默认为1。

此方法的输出可以存储和/或修改,然后传递给 statsutils.format_histogram_counts() 若要实现与 format_histogram() 方法。这对于随着时间推移拍摄快照非常有用。

get_quantile(q)[源代码]

从数据集中获取分位数。分位数是介于 0.01.00.0 表示数据集中的最小值,并且 1.0 代表了最大值。 0.5 表示中位数:

>>> Stats(range(100)).get_quantile(0.5)
49.5
get_zscore(value)[源代码]

获取以下项目的z得分 value 在这群人中。如果标准差为0,则返回0inf或-inf,以指示该值是否等于、大于或低于组的平均值。

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

标准差除以平均值的绝对值。

http://en.wikipedia.org/wiki/Relative_standard_deviation

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() ,并将它们传递给此函数。

参数:
  • bin_counts (list) -- 要计数的仓值列表。

  • width (int) -- 文本输出中的字符列数,默认为80或在Python3.3+中的控制台宽度。

  • format_bin (callable) -- 用于将bin值转换为字符串标签。

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