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
【10月更文挑战第10天】「Mac上学Python 19」小学奥数篇5 - 圆和矩形的面积计算
本篇将通过 Python 和 Cangjie 双语解决简单的几何问题:计算圆的面积和矩形的面积。通过这道题,学生将掌握如何使用公式解决几何问题,并学会用编程实现数学公式。
165 60
|
2月前
|
Python
Datetime模块应用:Python计算上周周几对应的日期
Datetime模块应用:Python计算上周周几对应的日期
|
4月前
|
Python
Python 游泳秒表记次,计算每次游泳时长
Python 游泳秒表记次,计算每次游泳时长
56 2
|
4月前
|
Python
Python计算误码率,输入是0-1比特流矩阵和小数矩阵
本文提供了一个Python函数calculate_ber,用于计算两个NumPy矩阵表示的二进制信号和接收信号之间的误码率(BER),其中包括信号与接收信号的比较、误差计数以及BER的计算过程,并给出了具体的使用示例。
72 2
|
27天前
|
机器学习/深度学习 算法 编译器
Python程序到计算图一键转化,详解清华开源深度学习编译器MagPy
【10月更文挑战第26天】MagPy是一款由清华大学研发的开源深度学习编译器,可将Python程序一键转化为计算图,简化模型构建和优化过程。它支持多种深度学习框架,具备自动化、灵活性、优化性能好和易于扩展等特点,适用于模型构建、迁移、部署及教学研究。尽管MagPy具有诸多优势,但在算子支持、优化策略等方面仍面临挑战。
62 3
|
2月前
|
Python
【10月更文挑战第15天】「Mac上学Python 26」小学奥数篇12 - 图形变换与坐标计算
本篇将通过 Python 和 Cangjie 双语实现图形变换与坐标计算。这个题目帮助学生理解平面几何中的旋转、平移和对称变换,并学会用编程实现坐标变化。
66 1
|
2月前
|
机器学习/深度学习 移动开发 Python
【10月更文挑战第11天】「Mac上学Python 22」小学奥数篇8 - 排列组合计算
本篇将通过 Python 和 Cangjie 双语讲解如何计算排列与组合。这道题目旨在让学生学会使用排列组合公式解决实际问题,并加深对数学知识和编程逻辑的理解。
65 4
|
2月前
|
数据可视化 Python
【10月更文挑战第12天】「Mac上学Python 23」小学奥数篇9 - 基础概率计算
本篇将通过 Python 和 Cangjie 双语实现基础概率的计算,帮助学生学习如何解决简单的概率问题,并培养逻辑推理和编程思维。
52 1
|
2月前
|
机器学习/深度学习 并行计算 大数据
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧2
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
79 10
|
2月前
|
数据挖掘 iOS开发 MacOS
利用Python计算农历日期
利用Python计算农历日期