强基初中数学&学Python——第220课 数字和数学模块之六:statistics——数学统计函数(2)

statistics.mode(data)  从离散或标称的 data 返回单个出现最多的数据点。此众数(如果存在)是最典型的值,并可用来度量数据的中心位置。  如果存在具有相同频率的多个众数,则返回在 data 中遇到的第一个。如果想要其中最小或最大的一个,请使用 min(multimode(data)) 或 max(multimode(data))。如果输入的 data 为空,则会引发 StatisticsError。  mode 将假定是离散数据并返回一个单一的值。这是通常的学校教学中标准的处理方式:

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

  此众数的独特之处在于它是这个包中唯一还可应用于标称(非数字)数据的统计信息:

>>> mode(["red", "blue", "blue", "red", "green", "red", "red"])
'red'

  验证:

 

statistics.multimode(data)  返回最频繁出现的值的列表,并按它们在 data 中首次出现的位置排序。如果存在多个众数则将返回一个以上的众数,或者如果 data 为空则将返回空列表:

>>> multimode('aabbbbccddddeeffffgg')
['b', 'd', 'f']
>>> multimode('')
[]

  验证:

 

statistics.pstdev(data, mu=None)  返回总体标准差(总体方差的平方根)。请参阅 pvariance() 了解参数和其他细节。

>>> pstdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
0.986893273527251

  验证:

statistics.pvariance(data, mu=None)  返回非空序列或包含实数值的可迭代对象 data 的总体方差。方差或称相对于均值的二阶距(每个数与平均数差的平方和),是对数据变化幅度(延展度或分散度)的度量。方差值较大表明数据的散布范围较大;方差值较小表明它紧密聚集于均值附近。  如果给出了可选的第二个参数 mu,它通常是 data 的均值。它也可以被用来计算相对于一个非均值点的二阶距。如果该参数省略或为 None (默认值),则会自动进行算术均值的计算并以它为mu的值。  使用此函数可根据所有数值来计算方差。要根据一个样本来估算方差,通常 variance() 函数是更好的选择。  如果 data 为空则会引发 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

  同样也支持使用 Decimal 和 Fraction 值:

>>> 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(data, xbar=None)  返回样本标准差(样本方差的平方根)。请参阅 variance() 了解参数和其他细节。

>>> stdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
1.0810874155219827

  验证:

 

statistics.variance(data, xbar=None)  返回包含至少两个实数值的可迭代对象 data 的样本方差。方差或称相对于均值的二阶矩,是对数据变化幅度(延展度或分散度)的度量。方差值较大表明数据的散布范围较大;方差值较小表明它紧密聚集于均值附近。  如果给出了可选的第二个参数 xbar,它应当是 data 的均值。如果该参数省略或为 None (默认值),则会自动进行均值的计算。  当你的数据是总体数据的样本时请使用此函数。要根据整个总体数据来计算方差,请参见 pvariance()。  如果 data 包含的值少于两个则会引发 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 可能导致无效或不可能的结果。  同样也支持使用 Decimal 和 Fraction 值:

>>> 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²使用贝塞尔(Bessel)校正法,也称为具有N-1个自由度的方差。假设数据采样点具有代表性(即为独立且均匀的分布),则结果应当是对总体方差的无偏估计。  如果你通过某种方式知道了真正的总体平均值μ,并作为mu形参传入,则应当调用pvariance()函数以得到一个样本的方差。  验证:

 

statistics.covariance(x, y, /)  返回两个输入 x 和 y 的样本协方差。样本协方差是对两个输入的同步变化性的度量。注:特殊参数“/”之前的参数只能按位传递。  两个输入必须具有相同的长度(不少于两个元素),否则会引发 StatisticsError。  示例:

>>> x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> y = [1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> covariance(x, y)
0.75
>>> z = [9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> covariance(x, z)
-7.5
>>> covariance(z, x)
-7.5

  样本协方差计算方法——两个样本的对应公差之积的累加和除以样本数减1的差:Sxy = sum{[x[i]-mean(x)] * [y[i]-mean(y)]}/[len(x)-1]。  验证: