用Python计算平均值,中位数和众数

您所在的位置:网站首页 中位数和众数的符号 用Python计算平均值,中位数和众数

用Python计算平均值,中位数和众数

2024-07-09 12:22| 来源: 网络整理| 查看: 265

在已排序样本的中间找到数字时,我们会遇到两种情况:

如果样本的观察值奇数,则排序样本中的中间值为中间值

如果样本的观察数为偶数,则需要计算排序样本中两个中间值的平均值

如果我们有样本[3, 5, 1, 4, 2],并且想要找到其中位数,那么我们首先将样本排序为[1, 2, 3, 4, 5]。 中位数为3,因为这是中间的值。

另一方面,如果我们有样本[1, 2, 3, 4, 5, 6],则其中位数将为(3 + 4) / 2 = 3.5。

让我们看一下如何使用Python计算中位数。

用Python寻找中位数

要找到中位数,我们首先需要对样本中的值进行排序。 我们可以使用内置的sorted()函数来实现。 sorted()接受一个Iterable,并返回一个排序后的list,其中包含与原始Iterable相同的值。

第二步是找到位于已排序样本中间的值。 要在观察值奇数的样本中定位该值,我们可以将观察数除以2。结果将是已排序样本中间值的索引。

由于除法运算符(/)返回浮点数,因此我们需要使用地板除法运算符(//)来获取整数。 因此,我们可以将其用作索引操作([])中的索引。

如果样本的观察数为偶数,则需要找到两个中间值。 假设我们有样本[1, 2, 3, 4, 5, 6]。 如果使用底数除法将其长度(6)除以2,则得到3。 那是我们上中间值(4)的索引。 要找到我们的下中间值(3)的索引,我们可以将上中间值的索引递减1。

让我们将所有这些放到计算样本中位数的函数中。 这是一个可能的实现:

123456789101112131415>>> def my_median(sample): ...     n = len(sample) ...     index = n // 2 ...     # Sample with an odd number of observations ...     if n % 2: ...         return sorted(sample)[index] ...     # Sample with an even number of observations ...     return sum(sorted(sample)[index - 1:index + 1]) / 2 ... >>> my_median([3, 5, 1, 4, 2]) 3 >>> my_median([3, 5, 1, 4, 2, 6]) 3.5

此函数获取数值样本并返回其中位数。 我们首先找到样本的长度n。 然后,我们用n除以2来计算中间值(或上中间值)的索引。

if语句检查当前样本是否具有奇数个观测值。 如果是这样,则中位数是index处的值。

如果样本的观察次数为偶数,则最后的return运行。 在这种情况下,我们通过计算两个中间值的平均值来找到中位数。

请注意,切片操作[index - 1:index + 1]获得两个值。 index - 1的值和index的值,因为切片操作排除了最终索引(index + 1)的值。

使用Python的中位数()

Python的statistics.median()提取数据样本并返回其中位数。 该方法的工作原理如下:

1234567>>> import statistics >>> statistics.median([3, 5, 1, 4, 2]) 3 >>> statistics.median([3, 5, 1, 4, 2, 6]) 3.5

请注意,median()自动处理具有奇数或偶数观察值的样本的中值计算。

查找样本模式

该模式是样本中最频繁的观察。 如果我们有样本[4, 1, 2, 2, 3, 5],则其模式为2,因为2在样本中出现两次,而其他元素仅出现一次。

模式不必是唯一的。 一些样本具有不止一种模式。 假设我们有样本[4, 1, 2, 2, 3, 5, 4]。 此示例具有两种模式-2和4,因为它们是出现频率更高的值,并且两者出现的次数相同。

该模式通常用于分类数据。 常见的分类数据类型为:

布尔值-只能接受两个值,例如true或false,male或female

标称-可以采用两个以上的值,例如American - European - Asian - African

序数-可以采用两个以上的值,但这些值的逻辑顺序类似于few - some - many

当我们分析分类数据的数据集时,我们可以使用该模式来知道哪个分类在我们的数据中最常见。

我们可以找到没有模式的样本。 如果所有观察值都是唯一的(没有重复的观察值),则您的样本将没有模式。

既然我们了解了有关模式的基础知识,那么让我们看一下如何使用Python找到它。

使用Python查找模式

要使用Python查找模式,我们将首先计算当前样本中每个值的出现次数。 然后,我们将获得出现次数更多的值。

由于计数对象是一种常见的操作,因此Python提供了collections.Counter类。 此类专门用于计数对象。

Counter类提供了定义为.most_common([n])的方法。 此方法返回两个元素元组的list,其中包含n个更常见的元素及其各自的计数。 如果省略n或None,则.most_common()返回所有元素。

让我们使用Counter和.most_common()编写一个函数,该函数获取数据样本并返回其模式。

这是一个可能的实现:

123456789101112131415161718>>> from collections import Counter >>> def my_mode(sample): ...     c = Counter(sample) ...     return [k for k, v in c.items() if v == c.most_common(1)[0][1]] ... >>> my_mode(["male","male","female","male"]) ['male'] >>> my_mode(["few","few","many","some","many"]) ['few', 'many'] >>> my_mode([4, 1, 2, 2, 3, 5]) [2] >>> my_mode([4, 1, 2, 2, 3, 5, 4]) [4, 2]

我们首先使用Counter对象(c)对sample中的观察值进行计数。 然后,我们使用列表推导创建一个list,其中包含在样本中出现相同次数的观察值。

由于.most_common(1)返回一个list,其中一个tuple的形式为(observation, count),因此我们需要在list的索引0处进行观察,然后在嵌套的。 这可以通过表达式c.most_common(1)[0][1]完成。 该值是我们样本的第一个模式。

请注意,理解条件会将每个观察值(v)的计数与最常见观察值(c.most_common(1)[0][1])的计数进行比较。 对于多模式样本,这将使我们能够获得具有相同计数的多个观测值(k)。

使用Python的mode()

Python的statistics.mode()接受一些data并返回其(第一个)模式。 让我们看看如何使用它:

12345678910>>> import statistics >>> statistics.mode([4, 1, 2, 2, 3, 5]) 2 >>> statistics.mode([4, 1, 2, 2, 3, 5, 4]) 4 >>> st.mode(["few","few","many","some","many"]) 'few'

对于单模式样本,Python的mode()返回最常见的值2。 但是,在前面的两个示例中,它返回了4和few。 这些样本中的其他元素发生的次数相同,但未包括在内。

从Python 3.8开始,我们还可以使用statistics.multimode(),它接受可迭代并返回模式的list。

这是有关如何使用multimode()的示例:

12345678910>>> import statistics >>> statistics.multimode([4, 1, 2, 2, 3, 5, 4]) [4, 2] >>> statistics.multimode(["few","few","many","some","many"]) ['few', 'many'] >>> st.multimode([4, 1, 2, 2, 3, 5]) [2]

注意:即使传递单模式样本,该函数也始终返回list。

结论

平均值(或平均值),中位数和众数通常是我们在尝试理解数据的集中趋势时首先查看的数据样本。

在本教程中,我们学习了如何使用Python查找或计算均值,中位数和众数。 我们首先逐步介绍如何创建自己的函数来计算它们,然后介绍如何使用Python的statistics模块作为查找这些度量的快速方法。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3