Python【statistics】 — 统计学计算(总结一)

简介: Python【statistics】 — 统计学计算(总结一)

阅读本文需要3.9分钟


目的:常见的统计计算实现。

statistics 模块实现了许多常用的统计公式,以便使用 Python 的各种数值类型(intfloatDecimalFraction)进行高效的计算。

平均值

均值支持三种形式,平均值,中位数和众数。mean() 用来计算算术平均值。

statistics_mean.py

from statistics import *
data = [1, 2, 2, 5, 10, 12]
print('{:0.2f}'.format(mean(data)))

整数和浮点数的返回值始终为 浮点数。 对于 “Decimal” 和 “Fraction” 输入数据,结果与输入的类型相同。

$ python3 statistics_mean.py
5.33

使用 mode() 计算数据集中出现最多的数据点。

statistics_mode.py

from statistics import *
data = [1, 2, 2, 5, 10, 12]
print(mode(data))

返回值始终是输入数据集的成员。因为 mode() 将输入视为一组离散值,并计算重复次数,输入实际上不需要是数值。

$ python3 statistics_mode.py
2

计算中位数或中值有四种变化。前三个是常用算法的直接版本,使用不同的解决方案来处理具有偶数元素的数据集。

statistics_median.py

from statistics import *
data = [1, 2, 2, 5, 10, 12]
print('median     : {:0.2f}'.format(median(data)))
print('low        : {:0.2f}'.format(median_low(data)))
print('high       : {:0.2f}'.format(median_high(data)))

median() 找到中心值,如果数据集具有偶数个值,则平均两个中间项。median_low() 始终从输入数据集返回一个值,使用具有偶数项的数据集的两个中间项中的较低者。median_high() 同样地返回两个中间项中的较高者。

$ python3 statistics_median.py
median     : 3.50
low        : 2.00
high       : 5.00

中位数计算的第四个版本, median_grouped(),将输入视为连续数据,并通过优先使用提供的间隔宽度找到中值范围,然后使用落在该范围内的数据集中的实际值的位置在该范围内插值来计算 50% 百分位中值。

statistics_median_grouped.py

from statistics import *
data = [10, 20, 30, 40]
print('1: {:0.2f}'.format(median_grouped(data, interval=1)))
print('2: {:0.2f}'.format(median_grouped(data, interval=2)))
print('3: {:0.2f}'.format(median_grouped(data, interval=3)))

随着间隔宽度增加,针对相同数据集计算的中值改变了。

$ python3 statistics_median_grouped.py
1: 29.50
2: 29.00
3: 28.50

方差

统计使用两个值来表示一组值相对于均值的分散程度。方差是每个值与均值的差值的平方的平均值,标准差是方差的平方根(这是有用的,因为取平方根允许标准差表示在与输入数据相同的单位)。方差或标准差的较大值表示一组数据是分散的,而较小的值表示数据的分组更接近均值。

statistics_variance.py

from statistics import *
import subprocess
def get_line_lengths():
    cmd = 'wc -l ../[a-z]*/*.py'
    out = subprocess.check_output(
        cmd, shell=True).decode('utf-8')
    for line in out.splitlines():
        parts = line.split()
        if parts[1].strip().lower() == 'total':
            break
        nlines = int(parts[0].strip())
        if not nlines:
            continue  # skip empty files
        yield (nlines, parts[1].strip())
data = list(get_line_lengths())
lengths = [d[0] for d in data]
sample = lengths[::2]
print('Basic statistics:')
print('  count     : {:3d}'.format(len(lengths)))
print('  min       : {:6.2f}'.format(min(lengths)))
print('  max       : {:6.2f}'.format(max(lengths)))
print('  mean      : {:6.2f}'.format(mean(lengths)))
print('\nPopulation variance:')
print('  pstdev    : {:6.2f}'.format(pstdev(lengths)))
print('  pvariance : {:6.2f}'.format(pvariance(lengths)))
print('\nEstimated variance for sample:')
print('  count     : {:3d}'.format(len(sample)))
print('  stdev     : {:6.2f}'.format(stdev(sample)))
print('  variance  : {:6.2f}'.format(variance(sample)))

Python 包括两组用于计算方差和标准差的函数,具体取决于数据集是代表整个总体还是代表总体样本。这个例子使用 wc 来计算所有示例程序的输入文件中的行数,然后使用 pvariance()pstdev() 计算整个总体的方差和标准差,然后再使用 variance()stddev() 用于计算通过使用找到的每个第二个文件的长度创建的子集的样本方差和标准差。

$ python3 statistics_variance.py
Basic statistics:
  count     : 1282
  min       :   4.00
  max       : 228.00
  mean      :  27.78
Population variance:
  pstdev    :  17.86
  pvariance : 318.84
Estimated variance for sample:
  count     : 641
  stdev     :  16.94
  variance  : 286.90

推荐阅读

random — 伪随机数生成器(总结最全)

Python之从列表推导到zip()函数的五种技巧

Python怎么删除字符

岁月有你   惜惜相处

相关文章
|
2天前
|
Python
python幂运算——计算x的y次方
python幂运算——计算x的y次方
27 0
|
2天前
|
机器学习/深度学习 算法 数据挖掘
统计学与Python:实现描述性统计和推断性统计分析
【4月更文挑战第12天】本文介绍了Python在统计学中的应用,重点讲解了如何使用Python进行描述性与推断性统计分析。Pandas和NumPy库用于描述性统计,提供数据概括和总结功能;Scipy和Statsmodels库支持推断性统计,包括假设检验和模型建立。通过数据导入、描述性统计量计算、图表绘制以及假设检验和回归分析等步骤,展示了Python实现统计分析的基本流程。持续学习和实践将有助于提升Python统计分析能力。
|
2天前
|
算法 索引 Python
使用Python实现PageRank计算
使用Python实现PageRank计算
|
2天前
|
Python
python计算线段角度
python计算线段角度
4 0
|
2天前
|
安全 数据安全/隐私保护 Python
Python的整型在计算中具有以下优势
【5月更文挑战第6天】Python整型提供任意精度整数计算,无溢出风险;支持多种算术运算,操作简便;作为不可变类型保证数据安全;能进行高级数学运算,并有NumPy等库加持,适合数值分析和科学计算。
22 0
|
2天前
|
Python
Python的整型在计算中的精度可以通过使用二进制或十进制表示来体现
【5月更文挑战第6天】Python整型支持十、二、八、十六进制表示,其中十进制默认,二进制(0b前缀)、八进制(0o前缀)、十六进制(0x前缀)。计算时以二进制精度处理,确保结果准确。例如:123的二进制是0b1111011,八进制是0o173,十六进制是0x7b。
17 0
|
2天前
|
Python
Python计算股票投资组合的风险价值(VaR)
Python计算股票投资组合的风险价值(VaR)
|
2天前
|
数据可视化 Python
【视频】风险价值VaR原理与Python蒙特卡罗Monte Carlo模拟计算投资组合实例
【视频】风险价值VaR原理与Python蒙特卡罗Monte Carlo模拟计算投资组合实例
|
2天前
|
Python Serverless API
Python风险价值计算投资组合VaR、期望损失ES
Python风险价值计算投资组合VaR、期望损失ES
Python风险价值计算投资组合VaR、期望损失ES
|
2天前
|
数据可视化 Python
PYTHON贝叶斯推断计算:用BETA先验分布推断概率和可视化案例
PYTHON贝叶斯推断计算:用BETA先验分布推断概率和可视化案例