趋近智
了解了描述性统计的整体目标后,我们从确定数据的“中心”开始。当有人询问数据集中典型值的情况时,他们通常是在问其集中趋势。我们有三种主要方式来衡量这一点:均值、中位数和众数。每种方式都对构成“中间”或“最常见”的值提供了不同看法,了解它们的区别对于准确数据解读很重要。
均值,具体来说是算术均值,是最常用的集中趋势度量。它通过将数据集中所有值求和,然后除以值的数量来计算。
如果我们有一个包含 个观测值(表示为 )的数据集,样本均值(通常用 (读作“x-bar”)表示)的计算方式如下:
例如,考虑数据集:{2, 3, 5, 6, 9}。
均值为 。
均值包含了数据集中的每个值,这是它的优点之一。然而,这使得它对异常值或极端值敏感。一个非常大或非常小的值可能会明显地将均值拉向其自身方向,从而可能会错误地代表大部分数据的中心。
使用 Pandas 在 Python 中计算均值:
假设您的数据存储在 Pandas Series 或 DataFrame 列中,使用 .mean() 方法计算均值非常简单。
import pandas as pd
data = pd.Series([2, 3, 5, 6, 9, 100]) # 添加了一个异常值:100
# 计算均值
mean_value = data.mean()
print(f"数据集: {data.tolist()}")
print(f"均值: {mean_value}")
# 输出:
# 数据集: [2, 3, 5, 6, 9, 100]
# 均值: 20.833333333333332
请注意,当数据集为 {2, 3, 5, 6, 9} 时,异常值 (100) 如何导致均值相较于初始值 5 明显增加。
中位数是将数据集的上半部分与下半部分分开的值。要找到它,您首先需要将数据按升序排列。
让我们回顾一下示例:
数据集:{2, 3, 5, 6, 9} (已排序)
数据集:{2, 3, 5, 6, 9, 100} (已排序)
中位数的主要优点是它对异常值的稳定性。极端值对其影响很小甚至没有影响,因为它只依赖于排序后的中间值(或中间两个值)。这使得它成为对于偏斜或包含明显异常值的数据集来说,更好的集中趋势度量。
使用 Pandas 在 Python 中计算中位数:
Pandas 提供了 .median() 方法。
import pandas as pd
data_odd = pd.Series([2, 3, 5, 6, 9])
data_even = pd.Series([2, 3, 5, 6, 9, 100]) # 带异常值
# 计算中位数
median_odd = data_odd.median()
median_even = data_even.median()
print(f"数据集 1: {data_odd.tolist()}")
print(f"中位数 1: {median_odd}")
print(f"\n数据集 2 (带异常值): {data_even.tolist()}")
print(f"中位数 2: {median_even}")
# 输出:
# 数据集 1: [2, 3, 5, 6, 9]
# 中位数 1: 5.0
#
# 数据集 2 (带异常值): [2, 3, 5, 6, 9, 100]
# 中位数 2: 5.5
比较带异常值的数据集的均值 (20.83) 和中位数 (5.5)。中位数更能体现非异常值数据中的“典型”值。
众数是数据集中出现最频繁的值。一个数据集可以有:
{1, 2, 3, 4, 5})。{1, 2, 2, 3, 4})。众数是 2。{1, 1, 2, 3, 3, 4})。众数是 1 和 3。众数对于分类数据特别有用(例如,查找最常见的颜色或类别),但也可以用于数值数据,特别是离散数据。它是唯一适用于名义分类数据的集中趋势度量。与均值和中位数不同,众数不一定是唯一的。
使用 Pandas 在 Python 中计算众数:
Pandas 中的 .mode() 方法返回一个包含所有众数(因为可能不止一个)的 Series。
import pandas as pd
data_unimodal = pd.Series([1, 2, 2, 3, 4, 4, 4, 5])
data_bimodal = pd.Series(['apple', 'banana', 'apple', 'orange', 'banana', 'banana'])
# 计算众数
mode_unimodal = data_unimodal.mode()
mode_bimodal = data_bimodal.mode()
print(f"数据集 1: {data_unimodal.tolist()}")
print(f"众数 1: {mode_unimodal.tolist()}")
print(f"\n数据集 2: {data_bimodal.tolist()}")
print(f"众数 2: {mode_bimodal.tolist()}")
# 输出:
# 数据集 1: [1, 2, 2, 3, 4, 4, 4, 5]
# 众数 1: [4]
#
# 数据集 2: ['apple', 'banana', 'apple', 'orange', 'banana', 'banana']
# 众数 2: ['banana']
选择在很大程度上取决于数据的性质以及您想要传达什么信息:
均值、中位数和众数之间的关系也能提供关于分布的偏度的信息:
请看此图,显示了不同分布形状上的大致位置:
均值(虚线)、中位数(点线)和众数(峰值频率)的大致位置,适用于对称、右偏和左偏分布。在偏斜分布中,中位数通常介于众数和均值之间。
理解均值、中位数和众数是数据概括的第一个重要步骤。它们表示数据倾向于聚集的位置,但它们并不能说明全部情况。接下来,我们将研究如何衡量数据围绕这个中心点的离散程度。
这部分内容有帮助吗?
mean()、median() 和 mode()。© 2026 ApX Machine LearningAI伦理与透明度•