标准差与中位数

中位数是统计中的另一个综合度量。
它旨在表达平均数的概念。
但是,它与平均数不同。

假设我们有一个数据集,并且我们将这个数据集中的所有数字按非递减顺序排列。
例如 [1, 2, 4, 5, 6]。

我们可以看到四个正好位于此排序数据集的中间。
在我们将数据按非递减顺序排列后,该数字位于数据集的中间,称为该数据集的中值。

如果数据集的大小是偶数,如在 [1, 2, 4, 5, 6, 7] 中,你最终会在中间有两个数字,在这种情况下,4 和 5.
在这种情况下,我们将中值计算为这两个数字的平均值,即本例中的 4.5.

以下是计算数据集的中值的示例。
请注意,它再次与标准偏差完全不同。

import statistics
odd_dataset = [2, 4, 5, 1, 6]
odd_median = statistics.median(odd_dataset)
print(odd_median)

even_dataset = [2, 4, 5, 1, 6, 7]
even_median = statistics.median(even_dataset)
print(even_median)

odd_std_dev = statistics.stdev(odd_dataset)
print(odd_std_dev)
even_std_dev = statistics.stdev(even_dataset)
print(even_std_dev)

计算 Pandas 系列

pandas.Series 是一个带有轴标签的一维数组。
它建立在 numpy.ndarray 之上。

它的应用之一是处理时间序列数据。

从 pandas.Series 计算示例标准偏差很容易。

import pandas
s = pandas.Series([12, 43, 12, 53])
s.std()

如果我们需要计算总体标准差,只需传入一个另外的 ddof 参数,如下所示。

import pandas
s = pandas.Series([12, 43, 12, 53])
s.std(ddof=0)

绘制标准偏差和误差线

如果要在 Python 中绘制统计数据,可以使用 matplotlib 2D 绘图库。

我们可以在终端中使用 pip3 install matplotlib 命令安装 matplotlib。

pip3 install matplotlib

让我们创建一个按学科划分的学生分数平均值图,并使用标准差来显示我们的置信范围(也称为误差条)。

让我们按照下面的示例准备数据。
按科目计算分数的平均值和标准差。

import statistics
math_scores = [73, 56, 98, 23, 14]
history_scores = [84, 99, 95, 34, 10]
english_scores = [89, 98, 99, 67, 56]

math_mean = statistics.mean(math_scores)
history_mean = statistics.mean(history_scores)
english_mean = statistics.mean(english_scores)

math_stdev = statistics.stdev(math_scores)
history_stdev = statistics.stdev(history_scores)
english_stdev = statistics.stdev(english_scores)

x = [0, 1, 2]
y = [math_mean, history_mean, english_mean]
yerr = [math_stdev, history_stdev, english_stdev]

然后将 x、y 和 yerr 作为输入插入 matplotlib.pyplot.errorbar() 函数。
matplotlib.pyplot.show() 然后将显示一个很好的误差条形图。

import mathplotlib.pyplot as plot
plot.errorbar(x, means, std, linestyle='None', marker='^')
plot.show()

术语

统计学中有两个标准差概念。

一是总体标准差。
它直接从总体中的所有值计算传播。
当我们手头的值代表整个人口时,我们可以使用它。

另一个是示例标准差。
它尝试仅使用值的示例子集来估计人口分布。
当我们手头的值仅代表整个人口的一个子集时,我们可以使用它。

示例标准偏差是一种近似度量。
它很有用,因为数据总体太大,我们只能直接测量它的随机示例。

使用稍微不同的算法计算总体和示例标准偏差。
因此,在编程时,我们应该始终牢记要计算并调用适当的 API。

计算 Pandas DataFrame

pandas.DataFrame 是一种二维表格数据结构,它使我们可以轻松地对行和列进行算术运算。

它在纯 Python 中最接近的类比是 dict 数据类型。

让我们创建一个代表学生考试成绩的 DataFrame 对象,就像我们在上面的 dict 示例中所做的那样。

import pandas
scores = {
  'Name': ['Kate', 'Alex', 'Cindy'],
  'Math Score': [73, 56, 98],
  'History Score': [84, 99, 95]}
df = pandas.DataFrame(scores)

现在我们可以计算每个科目的示例标准差,即数学和历史。
请注意,这将是逐行计算。

import pandas
scores = {
  'Name': ['Kate', 'Alex', 'Cindy'],
  'Math Score': [73, 56, 98],
  'History Score': [84, 99, 95]}
df = pandas.DataFrame(scores)
df.std()

或者,我们可以按人计算示例标准差。
为此,我们将传递一个值等于 1 的添加轴参数。
请注意,在这种情况下,它将是按列计算。

import pandas
scores = {
  'Name': ['Kate', 'Alex', 'Cindy'],
  'Math Score': [73, 56, 98],
  'History Score': [84, 99, 95]}
df = pandas.DataFrame(scores)
df.std(axis=1)

从上图可以看出,Alex 的标准差最高,为 30.4.
这是有道理的,因为与凯特和辛迪相比,他的分数分布要大得多。

以上均为示例标准差。
要计算总体标准偏差,请像往常一样传递值等于 0 的添加 ddof 参数。

import pandas
scores = {
  'Name': ['Kate', 'Alex', 'Cindy'],
  'Math Score': [73, 56, 98],
  'History Score': [84, 99, 95]}
df = pandas.DataFrame(scores)
df.std(ddof=0)

在接下来的三个部分中,我们将重点讲述标准差与其他统计聚合度量(例如均值、平均值和中位数)之间的差异。

计算数组

如果我们使用大型数据集,Python 数组可能比其更流行的列表更方便。

我们还可以对数组变量执行算术运算,就像它们是奇异值一样。
在这种情况下,算术运算将独立应用于数组中的每个值。

在下面的示例中,我们还将 d 参数传递给数组构造函数以指示我们的值是 double 类型。

import statistics
from array import array
statistics.pstdev(array('d', [5.12, -34.11, 32.43, -1.3, 7.83, -0.32]))

numpy.std 也适用于数组值。

import numpy
from array import array
numpy.std(array('d', [5.12, -34.11, 32.43, -1.3, 7.83, -0.32]), ddof=1)

标准偏差与平均值(平均值)

如上所述,标准差是衡量数据集中数字分布情况的指标。
标准偏差的另一种解释是数据集中的每个元素与该数据集的平均值相差多远。

什么意思?
平均数只是一个抽象概念,它试图估计数据集中的平均值。
它是通过将数据集中的所有数字相加并将结果除以这些数字的数量(即数据集的大小)而获得的。

下面是一个示例,说明如何获得数据集的平均数。
我们还可以看到该数据集的标准偏差值与其平均值有很大不同。

dataset = [2, 4, 5, 1, 6]
mean = sum(dataset) / len(dataset)
print(mean)

import statistics
std_dev = statistics.stdev(dataset)
print(std_dev)

Python中的标准偏差

由于 Python 3.x 版本在默认发行版中包含一个轻量级的统计模块,该模块为统计计算提供了许多有用的函数。

还有一个功能齐全的统计包 NumPy,它在数据科学家中特别受欢迎。

后者具有更多功能,但也代表了代码中更大量的依赖项。

合并标准差

有时,当我们有多个数据示例时,我们会希望使用所有这些示例标准差来估计总体的标准差。
这是合并标准差派上用场的场景。

合并标准差只是所有示例标准差的加权平均值。
示例中的项目越多,我们在计算合并标准差时赋予该示例标准差的权重就越大。

下面是一个如何计算合并标准差的示例。

import math
import statistics
sample1 = [1, 2, 3]
sample2 = [1, 2, 3, 10, 20, 30]
s1 = statistics.stdev(sample1)
print(s1)
s2 = statistics.stdev(sample2)
print(s2)
pooled_std = math.sqrt(((len(sample1) - 1) * (s1 ** 2) + (len(sample2) - 1) * (s2 ** 2)) / (len(sample1) - 1 + len(sample2) - 1))
print(pooled_std)

计算字典值

有时,数据存储在像 Python dict 这样的键值数据结构中,而不是像列表这样的顺序数据结构中。

例如,我们可以有一个数据结构,将学生映射到他们的考试成绩,如下图所示。

如果你想计算所有学生的测试分数的标准偏差,你可以通过对字典值调用 statistics.pstdev 来完成,不需要键。
为此,请调用 Python 的内置 dict.values() 函数。

import statistics
scores = {'Kate': 73, 'Alex': 56, 'Cindy': 98}
statistics.pstdev(scores.values())

计算矩阵

对于处理矩阵,最好使用 NumPy 包。
NumPy 提供了一个专门为处理矩阵而设计的 numpy.matrix 数据类型。

让我们生成一个方形的 4×4 矩阵。

import numpy
m = numpy.matrix('4 7 2 6, 3 6 2 6, 0 0 1 3, 4 6 1 3')

对于矩阵,有三种计算标准差的方法。

我们可以按列 (numpy.matrix.std(0))、按行 (numpy.matrix.std(1)) 或者所有元素计算标准偏差,就好像矩阵是一个向量 (numpy.matrix.std() )。

import numpy
m = numpy.matrix('4 7 2 6; 3 6 2 6; 0 0 1 3; 4 6 1 3')
m.std(0) # by column
m.std(1) # by row
m.std()  # for all elements
Python标准偏差教程

标准偏差允许我们测量数据集中数字的分布情况。
标准差的大值表明数据集中的元素与它们的平均值分开得更远。
在本教程中,我们将使用 Python 计算标准偏差。

小的标准偏差表明项目与数据集的平均值没有显着偏差。

计算一个列表

可以使用 statistics.stdev() 函数在 Python 中计算值列表的示例标准偏差。

import statistics
statistics.stdev([5.12, -34.11, 32.43, -1.3, 7.83, -0.32])

使用稍微不同的函数 statistics.pstdev() 计算总体标准偏差。

import statistics
statistics.pstdev([5.12, -34.11, 32.43, -1.3, 7.83, -0.32])

在接下来的示例中,我们将介绍如何将 statistics.stdev() 函数应用于不同的 Python 数据类型。
如果我们需要计算总体标准差,请改用 statistics.pstdev() 函数。
其余代码必须相同。

在 Python 中计算值列表的标准偏差的另一种选择是使用 NumPy 科学包。

Python 默认没有自带,需要单独安装。
在 Python 中安装第三方包的常用方法是使用 Python 包安装程序 pip。

pip3 install numpy

安装 NumPy 后,计算标准偏差是微不足道的。
请注意, numpy.std 默认计算总体标准差。

import numpy
numpy.std([5.12, -34.11, 32.43, -1.3, 7.83, -0.32])

如果我们想使用 NumPy 包计算示例标准差,则必须传递一个值为 1 的添加参数 ddof。
ddof 代表自由度,这是用于估计示例总体统计数据的统计概念其中。

import numpy
numpy.std([5.12, -34.11, 32.43, -1.3, 7.83, -0.32], ddof=1)
日期:2020-07-15 11:16:26 来源:oir作者:oir