该模块提供用于计算数值(Real估值)数据的数学统计的函数。

注意

除非另有明确说明,这些功能的支持int, floatdecimal.Decimalfractions.Fraction。目前不支持其他类型的行为(无论是否在数字塔中)。混合类型也是未定义的和依赖于实现的。如果您的输入数据由混合类型组成,您可以使用它map()来确保结果一致,例如 。map(float, input_data)

中心位置的平均值和度量

这些函数计算人口或样本的平均值或典型值。

mean() 数据的算术平均值(“平均值”)。
harmonic_mean() 数据的谐波均值
median() 数据的中位数(中间值)。
median_low() 数据中位数低
median_high() 数据中位数高
median_grouped() 分组数据中位数或第50百分位数。
mode() 离散数据的模式(最常见的值)。

传播的措施

这些函数计算人口或样本倾向于偏离典型值或平均值的度量。

pstdev() 人口数据标准差
pvariance() 数据的人口差异
stdev() 样本的标准偏差
variance() 数据的样本差异

功能细节

注意:这些函数不需要对给定的数据进行排序。然而,为了方便阅读,大多数示例显示了排序序列。

statistics.mean(data)
返回可以是序列或迭代器的数据的算术算术平均值

算术平均值是数据之和除以数据点数。它通常被称为“平均值”,尽管它只是许多不同数学平均值中的一个。它衡量数据的中心位置。

如果数据为空,StatisticsError则会引发。

一些使用示例:

>>> mean([1, 2, 3, 4, 4])
2.8
>>> mean([-1.0, 2.5, 3.25, 5.75])
2.625

>>> from fractions import Fraction as F
>>> mean([F(3, 7), F(1, 21), F(5, 3), F(1, 3)])
Fraction(13, 21)

>>> from decimal import Decimal as D
>>> mean([D("0.5"), D("0.75"), D("0.625"), D("0.375")])
Decimal('0.5625')

注意

均值受到异常值的强烈影响,并且不是中心位置的稳健估计:均值不一定是数据点的典型示例。对于更加稳健,虽然效率较低的中心位置测量,请参阅median()mode()。(在这种情况下,“有效”是指统计效率而不是计算效率。)

样本均值给出了真实总体均值的无偏估计,这意味着,对所有可能的样本取平均值, mean(sample)收敛于整个总体的真实均值。如果 数据代表整个总体而不是样本,则 mean(data)相当于计算真实总体平均值μ。

statistics.harmonic_mean(data)
返回数据的调和平均值、实数值的序列或迭代器。

调和平均数,有时称为次对数平均数,是数据倒数的算术平均数 () 的倒数。 例如,三个值 a、b 和 c 的调和平均值将等于 3/(1/a + 1/b + 1/c)。

调和平均数是一种平均值,是对数据中心位置的度量。 当对比率或比率的数量进行平均时,例如速度,这通常是合适的。 例如:

假设投资者分别购买了 3 家公司的同等价值股票,市盈率(市盈率)分别为 2.5、3 和 10。投资者投资组合的平均市盈率是多少?

>>> harmonic_mean([2.5, 3, 10])  # For an equal investment portfolio.
3.6

使用算术平均值会得到大约5.167的平均值,这太高了。

StatisticsError如果数据为空,或者任何元素小于零,则引发此异常。

版本3.6中的新功能。

statistics.median(data)
使用常用的“中间两个均值”方法返回数值数据的中位数(中间值)。如果数据为空,StatisticsError则引发。数据可以是序列或迭代器。

中位数是对中心位置的有力度量,并且受数据中异常值的影响较小。当数据点数为奇数时,返回中间数据点:

>>> median([1, 3, 5])
3

当数据点的数量是偶数时,通过取两个中间值的平均值来插值中值:

>>> median([1, 3, 5, 7])
4.0

这适用于您的数据是离散的,并且您不介意中位数可能不是实际数据点。

如果您的数据是序数(支持订单操作)但不是数字(不支持添加),则应使用median_low()median_high()替代。

也可以看看

median_low()median_high()median_grouped()

statistics.median_low(data)
返回数字数据的低中位数。如果数据为空, StatisticsError则引发。 数据可以是序列或迭代器。

中位数始终是数据集的成员。当数据点的数量是奇数时,返回中间值。如果是偶数,则返回两个中间值中较小的一个。

>>> median_low([1, 3, 5])
3
>>> median_low([1, 3, 5, 7])
3

当您的数据是离散的时,请使用低中位数,并且您希望中位数是实际数据点而不是插值。

statistics.median_high(data)
返回高中位数据。如果数据为空,StatisticsError 则引发。 数据可以是序列或迭代器。

高中位数始终是数据集的成员。当数据点的数量是奇数时,返回中间值。如果是偶数,则返回两个中间值中较大的一个。

>>> median_high([1, 3, 5])
3
>>> median_high([1, 3, 5, 7])
5

当您的数据是离散的时,请使用高中位数,并且您希望中位数是实际数据点而不是插值。

statistics.median_grouped(datainterval=1)
使用插值返回分组连续数据的中位数,计算为第50个百分位数。如果数据为空,StatisticsError 则引发。 数据可以是序列或迭代器。

>>> median_grouped([52, 52, 53, 54])
52.5

在下面的示例中,数据是四舍五入的,因此每个值代表数据类的中点,例如1是0.5-1.5类的中点,2是1.5-2.5的中点,3是2.5-3.5的中点在给出数据的情况下,中间值落在3.5-4.5类中的某处,并使用插值来估计它:

>>> median_grouped([1, 2, 2, 3, 4, 4, 4, 4, 4, 5])
3.7

可选参数interval表示类间隔,默认为1.更改类间隔自然会更改插值:

>>> median_grouped([1, 3, 3, 5, 7], interval=1)
3.25
>>> median_grouped([1, 3, 3, 5, 7], interval=2)
3.5

此功能不检查数据点是否至少 间隔开。

CPython实现细节:在某些情况下,median_grouped()可能会强制数据点浮动。这种行为将来可能会发生变化。

也可以看看

  • “行为科学统计”,Frederick J Gravetter和Larry B Wallnau(第8版)。
  • Gnome Gnumeric电子表格中的SSMEDIAN函数,包括此讨论。
statistics.mode(data)
从离散或标称数据返回最常见的数据点。模式(当它存在时)是最典型的值,并且是对中心位置的稳健测量。

如果数据为空,或者如果没有一个最常见的值, StatisticsError则引发。

mode假定离散数据,并返回单个值。这是学校通常教授的模式的标准处理:

>>> mode([1, 1, 2, 3, 3, 3, 3, 4])
3

该模式是唯一的,因为它是唯一也适用于名义(非数字)数据的统计数据:

>>> mode(["red", "blue", "blue", "red", "green", "red", "red"])
'red'
statistics.pstdev(datamu=None)
返回总体标准差(总体方差的平方根)。请参阅pvariance()参数和其他详细信息。

>>> pstdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
0.986893273527251
statistics.pvariance(datamu=None)
返回数据的总体方差,这是一个非空的可实现数值迭代。关于均值的方差或第二时刻是数据的可变性(扩散或分散)的度量。大的差异表明数据是分散的; 一个小的方差表明它紧密地聚集在均值周围。

如果给出了可选的第二个参数mu,则它应该是数据的平均值 。如果缺失或None(默认值),则自动计算平均值。

使用此函数计算整个总体的方差。为了估计样本的方差,variance()函数通常是更好的选择。

StatisticsError如果数据为空则引发。

例子:

>>> data = [0.0, 0.25, 0.25, 1.25, 1.5, 1.75, 2.75, 3.25]
>>> pvariance(data)
1.25

如果您已经计算了数据的平均值,则可以将其作为可选的第二个参数mu传递,以避免重新计算:

>>> mu = mean(data)
>>> pvariance(data, mu)
1.25

此函数不会尝试验证您已将实际均值作为mu传递。对mu使用任意值可能会导致无效或不可能的结果。

支持小数和分数:

>>> from decimal import Decimal as D
>>> pvariance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")])
Decimal('24.815')

>>> from fractions import Fraction as F
>>> pvariance([F(1, 4), F(5, 4), F(1, 2)])
Fraction(13, 72)

注意

当用整个群体调用时,这给出了总体方差σ²。当调用样本时,这是有偏差的样本方差s²,也称为具有N个自由度的方差。

如果您以某种方式知道真实总体平均值μ,您可以使用此函数计算样本的方差,将已知总体平均值作为第二个参数。如果数据点具有代表性(例如独立且相同分布),则结果将是对总体方差的无偏估计。

statistics.stdev(dataxbar=None)
返回样本标准差(样本方差的平方根)。请参阅variance()参数和其他详细信息。

>>> stdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
1.0810874155219827
statistics.variance(dataxbar=None)
返回数据的样本方差,这是一个至少两个实值数的可迭代。关于均值的方差或第二时刻是数据的可变性(扩散或分散)的度量。大的差异表明数据是分散的; 一个小的方差表明它紧密地聚集在均值周围。

如果给出了可选的第二个参数xbar,它应该是数据的平均值 。如果缺失或None(默认值),则自动计算平均值。

当您的数据是来自总体的样本时,请使用此功能。要计算整个人口的方差,请参阅pvariance()

StatisticsError如果数据少于两个值,则引发。

例子:

>>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]
>>> variance(data)
1.3720238095238095

如果您已经计算了数据的平均值,则可以将其作为可选的第二个参数xbar传递,以避免重新计算:

>>> m = mean(data)
>>> variance(data, m)
1.3720238095238095

此函数不会尝试验证您已将实际均值传递为xbar。对xbar使用任意值可能会导致无效或不可能的结果。

支持十进制和分数值:

>>> from decimal import Decimal as D
>>> variance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")])
Decimal('31.01875')

>>> from fractions import Fraction as F
>>> variance([F(1, 6), F(1, 2), F(5, 3)])
Fraction(67, 108)

注意

这是采用贝塞尔校正的样本方差s²,也称为N-1自由度的方差。如果数据点具有代表性(例如,独立且相同地分布),则结果应该是对真实总体方差的无偏估计。

如果您以某种方式知道实际总体平均值μ,则应将其pvariance()作为mu参数传递给 函数以获取样本的方差。

异常

定义了一个例外:

异常statistics.StatisticsError
ValueError统计相关的异常的子类。