跳到正文
效率工具实用笔记关于本站
表格与数据

平均数和中位数怎么选:用statistics比较一组含离群值的自建数据

约 6 分钟阅读AI 辅助整理

给一组含离群值的自建数据,用statistics.mean和statistics.median分别计算,观察离群值对两者的不同影响;说明空数据会触发StatisticsError,并给出选择顺序。所有数据为自建示例,结论只针对该组数据。

本文要点

  1. 要判断“该选哪个”,可以先做一次对照:把100去掉,重新算两个值

  2. 如果列表是空的,两个函数都不会返回数值

  3. 回到标题的问题:mean和median怎么选

平均数和中位数怎么选:用statistics比较一组含离群值的自建数据的知识要点示意图
依据已审核正文摘取要点制作的示意图,非实物照片;请结合正文中的条件与范围阅读。要点摘自已审核正文;完整条件与说明见正文。查看高清图解 ↗
本文目录

先看一组自建数据:一个离群值把mean拉走了多少

假设你在练习目录里新建一个脚本,写入下面这组自建数据(不是任何真实用户或调查数据):

from statistics import mean, median

data = [8, 9, 10, 11, 12, 13, 100]
print(mean(data))
print(median(data))

按Python官方statistics文档的说明,mean返回样本算术平均数,也就是数据之和除以数据点个数;median返回中位数,采用“中间两个值的平均”这一常见方法。

这组数据里,前六个值集中在8到13之间,最后一个是100。运行后你会看到:mean约为23.29,median为11。

差别来自哪里:mean把100完整地算进了总和,再除以7;median只关心排序后正中间那个值,100排在最后,不参与“中间位置”的确定。文档对mean的说明里专门写了一句:mean受离群值影响很大,不一定是数据点的典型代表;并指出median是更稳健的集中趋势度量。

本文只处理这一组自建数据,结论只描述这7个值,不能推广到别的数据集,也不能用来推断任何群体的实际情况。

把离群值拿掉再算一次:看两个数各自移动了多少

要判断“该选哪个”,可以先做一次对照:把100去掉,重新算两个值。

from statistics import mean, median

data = [8, 9, 10, 11, 12, 13, 100]
clean = [8, 9, 10, 11, 12, 13]
print(mean(data), median(data))
print(mean(clean), median(clean))

自建数据下的对照结果(示例,不是实测记录):

- 含100时:mean约23.29,median为11。

- 去掉100后:mean为10.5,median为10.5。

可以这样读这张对照:去掉一个离群值,mean从约23.29掉到10.5,移动了约12.79;median从11移到10.5,只移动了0.5。

这说明在这组数据里,mean对那一个100很敏感,median几乎不动。文档对median的描述是“稳健的集中趋势度量,受离群值影响较小”,这里的结果和这句话一致。

注意:这里只做了“去掉一个值再算”的对照,不是在做异常值判定,也不说明100这个值本身是错的。它只是这组自建数据里的一个偏大值。

空数据会怎样:mean和median都触发StatisticsError

上面两组数据都非空。如果列表是空的,两个函数都不会返回数值。

按文档说明,mean在data为空时抛出StatisticsError;median在data为空时同样抛出StatisticsError。StatisticsError是ValueError的子类,用于statistics相关的异常。

可以这样验证(自建示例):

from statistics import mean, median

empty = []
try:
    print(mean(empty))
except Exception as e:
    print(type(e).__name__, e)

try:
    print(median(empty))
except Exception as e:
    print(type(e).__name__, e)

预期输出里会出现StatisticsError。这里要分清两件事:一是空数据本身没有可算的集中位置;二是报错类型是StatisticsError,不是普通的TypeError或ZeroDivisionError。

本文只覆盖空列表这一种边界。文档还提到NaN值会影响median等函数,需要先剔除;这部分不在本文范围内,不展开。

选择顺序:先问数据里有没有明显偏大偏小的值

回到标题的问题:mean和median怎么选。可以按下面这个顺序判断(以下顺序是编辑整理的,不是文档给出的决策规则):

1. 先看数据里有没有明显偏离其余值的数。有,就先算median,同时把mean也算出来做对照。

2. 如果两个值差得远,说明这组数据里存在对mean影响大的值。这时用哪个,取决于你想描述什么:想描述“中间那个位置”,用median;想让每个值都参与平均,用mean,但要接受它被偏大或偏小值拉动。

3. 如果两个值很接近,说明这组数据里没有明显把mean拉走的离群值,两个都可以作为集中位置的参考。

用本文的自建数据套一遍:含100时mean约23.29、median为11,差得远,属于第2种情况;去掉100后两者都是10.5,属于第3种情况。

需要说明的限制:mean和median都只描述一组数的集中位置,不说明数据怎么分布、有没有第二个峰值、样本够不够。本文不涉及统计检验或推断,也不给任何“哪个更好”的绝对结论。

参考资料:Python官方statistics模块文档,地址见source字段。示例中的函数名、报错类型均以该文档为准。

观看知识要点视频 18 秒

18秒无旁白要点导览,文字来自已审核正文;完整步骤、条件及参考资料见下方。

参考资料

以下原始资料提供本文依据;请结合日期、适用条件和产品说明查阅。

请结合原始资料的适用条件阅读。

返回表格与数据 →