学习在Python中使用统计学

305 阅读7分钟

Python有一个统计模块,可以简单地计算常见的统计数据,如平均值、模式、标准差等。像这样的统计数据可以给你提供关于你可能正在处理的数据的有趣信息。这可能是各种等级的集合,一个物品在许多零售商那里的价格抽样,各种上市公司的股票价格,以及更多。统计学允许个人和组织根据数据所提供的内容做出决定。在本教程中,我们将看一看我们可以在Python中使用的一些基本的统计功能。

要开始在Python中使用统计学,你要做的第一件事就是像这样导入统计学模块。

import statistics

现在我们需要一些数据来工作。一个熟悉且容易理解的数据集是学校的成绩。我们将建立一个成绩列表,这样我们就可以在数据上测试所有这些统计方法了。所有的成绩现在都存储在一个 **grades**变量中。

grades = [80, 85, 77, 97, 100, 75, 88, 90, 93]

统计学的定义

在我们走得太远之前,让我们来研究一下我们要处理的这些统计数据的定义。

  • 平均值:一组数字的平均值。将集合中的所有数字相加,然后用这个总数除以集合中的数字数,就可以得到平均数。
  • 中位数:当数字按升序排列时,数据的中间数字,或中点。为了找到中位数,将这些数字按数值顺序排列,然后找到中间的数字。
  • 模式:模式是指最经常出现的数值。如果列表中没有数字重复出现,那么这个列表就没有模式。

在 Python 中,我们不需要手动计算这些东西!我们只需要使用 Python 提供的函数。我们只需使用统计模块提供的函数,就可以了。

平均值

下面是我们如何计算列表中所有成绩的平均值(average)。

import statistics
import math

grades = [80, 85, 77, 97, 100, 75, 88, 90, 93]

meangrades = statistics.mean(grades)
print(f'The mean of all the grades is {meangrades}')
The mean of all the grades is 87.22222222222223

中位数

要计算中位数,或成绩的中点,我们将使用这里的代码。

import statistics
import math

grades = [80, 85, 77, 97, 100, 75, 88, 90, 93]

mediangrades = statistics.median(grades)
print(f'The median of all the grades is {mediangrades}')
The median of all the grades is 88

我们看到,我们成绩的中位数是88。通过查看原始列表,我们不容易决定这个结果是如何产生的。请记住,中位数在列表排序时看的是数据的中间位置。让我们对我们的成绩进行排序,看看输出结果。

print(sorted(grades))
[75, 77, 80, 85, 88, 90, 93, 97, 100]

上面的输出确实显示,当 **grades**被排序时,88分实际上正处于数据的中间位置。所以,中位数函数工作得非常好

模式

为了演示模式函数,首先,我们要更新成绩列表。回顾一下,模式是通过寻找一组数据中出现频率最高的值来找到的。我们原来的成绩列表中都是唯一的值。我们将在这里改变这一点,这样我们就可以测试出模式。

grades = [75, 80, 85, 77, 97, 100, 75, 88, 75, 90, 93, 77]

现在我们可以像这样计算模式了。

import statistics
import math

grades = [75, 80, 85, 77, 97, 100, 75, 88, 75, 90, 93, 77]

modegrades = statistics.mode(grades)
print(f'The mode of all the grades is {modegrades}')
The mode of all the grades is 75

我们看到,所有成绩的模式是75。如果你看一下最新的成绩列表,你可以很容易地看到75出现了三次,而其他所有的成绩只出现了一次或两次。所以这很准确,75是我们成绩的模式。

方差

数据的方差是我们可以看一下的另一种统计方法。统计学中的方差指的是与平均值的平方差的平均值。换句话说,数据的变化程度如何?它是否变化很大,比如说我们有一个年级是20分,另一个是99分,还有一个是50分?这些等级是非常不同的,还是都相当接近?在运行这个代码之前,我们可以得出结论,我们的成绩是相当接近的。因此,让我们在我们当前的成绩列表上尝试一下方差函数,然后我们将改变成绩以获得不同的结果。另外,为了更好地理解我们计算的值是什么,方差值为零意味着所有的数据值都是相同的。所有非零的方差都是正的。

import statistics
import math

grades = [75, 80, 85, 77, 97, 100, 75, 88, 75, 90, 93, 77]
variancegrades = statistics.variance(grades)

print(f'The grades have a variance of {variancegrades}')
The grades have a variance of 83.15151515151516

好吧,这是一个有趣的结果。让我们把成绩改成所有相同的值,看看那时会发生什么。

import statistics
import math

grades = [90, 90, 90, 90, 90, 90]
variancegrades = statistics.variance(grades)

print(f'The grades have a variance of {variancegrades}')
The grades have a variance of 0

当然,这给我们的方差是零,因为所有的成绩都是一样的。它们根本就没有什么变化。现在我们再增加一个不同值的等级。让我们看看会发生什么。

import statistics
import math

grades = [90, 90, 90, 90, 90, 90, 100]
variancegrades = statistics.variance(grades)
The grades have a variance of 14.285714285714285

仅仅是数据的这一个变化,我们就可以看到方差跳得相当快。我们再做一个关于方差的例子。

import statistics
import math

grades = [80, 82, 100, 77, 89, 94, 98, 50]
variancegrades = statistics.variance(grades)
The grades have a variance of 257.35714285714283

这样我们就对Python中的方差是如何工作的有了一个很好的概念。

标准偏差

标准差是用来显示与平均值的差异有多大。你可以把它看作是与平均值的典型偏差。一个低的标准差意味着数值倾向于接近平均值。高标准差意味着数值分布在更大的范围内。

标准差低的年级

import statistics
import math

grades = [89, 91, 95, 92, 93, 94, 98, 90]
stdevgrades = statistics.stdev(grades)

print(f'The grades have a standard deviation of {stdevgrades}')
The grades have a standard deviation of 2.9154759474226504

标准差高的成绩

import statistics
import math

grades = [30, 80, 100, 45, 15, 94, 64, 90]
stdevgrades = statistics.stdev(grades)

print(f'The grades have a standard deviation of {stdevgrades}')
The grades have a standard deviation of 31.716377022424414

对于数学怪人来说,这是一个有趣的事实。标准差实际上是方差的平方根。我们不需要手动操作,因为stdev()函数已经帮我们解决了这个问题。不过我们可以用下面的代码来证明这一点。我们将使用与上面相同的成绩,但改变函数以获得标准差。

import statistics
import math

grades = [30, 80, 100, 45, 15, 94, 64, 90]
stdevgrades = math.sqrt(statistics.variance(grades))

print(f'The grades have a standard deviation of {stdevgrades}') 
The grades have a standard deviation of 31.716377022424414

啊哈!结果是完全一样的。我们可以通过查看方差的平方根来计算标准差,或者我们可以采取更简单的方法,利用Python中的stdev()函数。

Python统计学教程总结

这就是Python中统计学的一个很好的初级概述。Python有许多模块、库和包,可以做一些非常密集的科学和统计计算。这里涵盖的概念将是进一步学习Python中的统计学的一个很好的垫脚石。