新手村:统计量均值、中位数、标准差、四分位数
新手村:统计量均值、中位数、标准差、四分位数
统计量是描述数据集特征的重要工具,其中均值、中位数、标准差和四分位数是最基本的统计量。本文将详细介绍这些统计量的定义、计算方法和应用场景,并通过Python代码实现具体计算。
统计量定义与讲解
统计量 | 定义 | 计算公式 | 示例说明 |
---|---|---|---|
均值 | 数据集中的所有数值之和除以数值的个数。 | Mean = \frac{\sum_{i=1}^{n} x_i}{n} | 对于数据集 [1, 2, 3, 4, 5],均值为(1+2+3+4+5)/5 = 3 |
中位数 | 将数据集排序后位于中间位置的数值。如果数据集长度为偶数,则取中间两个数的平均值。 | 排序后取中间值(或中间两个数的平均值) | 对于数据集 [1, 2, 3, 4, 5],中位数为 3;对于 [1, 2, 3, 4],中位数为(2+3)/2 = 2.5 |
标准差 | 衡量数据集内数值分布的离散程度。 | Standard Deviation = \sqrt{\frac{\sum_{i=1}^{n}(x_i - \mu)^2}{n}} | 对于数据集 [1, 2, 3, 4, 5],标准差约为 1.414 |
四分位数 | 将数据集分为四个等份,分别对应第25%、第50%(即中位数)、第75%的位置上的值。 | Q1(第一四分位数):下四分位数;Q2(第二四分位数):中位数;Q3(第三四分位数):上四分位数 | 对于数据集 [1, 2, 3, 4, 5, 6, 7, 8],Q1 = 2.25, Q2 = 4.5, Q3 = 6.75 |
示例计算
假设我们有一个数据集:
[1, 2, 3, 4, 5, 6, 7, 8]
均值
Mean = \frac{1 + 2 + 3 + 4 + 5 + 6 + 7 + 8}{8} = \frac{36}{8} = 4.5
中位数
排序后的数据集为
[1, 2, 3, 4, 5, 6, 7, 8]
中位数是中间两个数的平均值:
Median = \frac{4 + 5}{2} = 4.5
标准差
首先计算每个数值与均值的差的平方:
(1-4.5)^2 = 12.25, (2-4.5)^2 = 6.25, (3-4.5)^2 = 2.25, (4-4.5)^2 = 0.25, \
(5-4.5)^2 = 0.25, (6-4.5)^2 = 2.25, (7-4.5)^2 = 6.25, (8-4.5)^2 = 12.25
然后计算这些平方差的平均值并开方:
Standard Deviation = \sqrt{\frac{12.25 + 6.25 + 2.25 + 0.25 + 0.25 + 2.25 + 6.25 + 12.25}{8}} = \sqrt{\frac{42}{8}} \approx 2.29
四分位数
四分位数是将数据集分为四个等份的三个分割点,分别称为第一四分位数(Q1)、第二四分位数(Q2,即中位数)和第三四分位数(Q3)。这些分割点可以帮助我们了解数据的分布情况。以下是详细的四分位数计算步骤和示例。
四分位数的定义
- Q1(第一四分位数):位于数据集第25%位置的值。
- Q2(第二四分位数):位于数据集第50%位置的值,即中位数。
- Q3(第三四分位数):位于数据集第75%位置的值。
计算步骤
- 排序数据集:首先将数据集按升序排列。
- 确定位置:
- Q1的位置:(n + 1) \times 0.25
- Q2的位置:(n + 1) \times 0.5
- Q3的位置:(n + 1) \times 0.75
其中n是数据集中的数值个数。
- 插值计算:如果位置不是整数,则使用线性插值法计算四分位数。
示例
假设我们有一个数据集:
[1, 2, 3, 4, 5, 6, 7, 8]
步骤1:排序数据集
数据集已经按升序排列:
[1, 2, 3, 4, 5, 6, 7, 8]
步骤2:确定位置
- 数据集大小n = 8
- Q1的位置:(8 + 1) \times 0.25 = 2.25
- Q2的位置:(8 + 1) \times 0.5 = 4.5
- Q3的位置:(8 + 1) \times 0.75 = 6.75
步骤3:插值计算
Q1(第一四分位数):
位置为2.25,表示在第2个和第3个数据之间。
使用线性插值:Q1 = 2 + 0.25 \times (3 - 2) = 2.25
Q2(第二四分位数):
位置为4.5,表示在第4个和第5个数据之间。
使用线性插值:Q2 = 4 + 0.5 \times (5 - 4) = 4.5
Q3(第三四分位数):
位置为6.75,表示在第6个和第7个数据之间。
使用线性插值:Q3 = 6 + 0.75 \times (7 - 6) = 6.75
总结表格
统计量 | 位置公式 | 插值计算公式 | 示例(数据集 [1, 2, 3, 4, 5, 6, 7, 8]) |
---|---|---|---|
Q1 | (n+1) \times 0.25 | L_{Q1} + F_{Q1} \times (U_{Q1} - L_{Q1}) | 2 + 0.25 \times (3 - 2) = 2.25 |
Q2 | (n+1) \times 0.5 | L_{Q2} + F_{Q2} \times (U_{Q2} - L_{Q2}) | 4 + 0.5 \times (5 - 4) = 4.5 |
Q3 | (n+1) \times 0.75 | L_{Q3} + F_{Q3} \times (U_{Q3} - L_{Q3}) | 6 + 0.75 \times (7 - 6) = 6.75 |
解释
- 位置公式:用于确定四分位数的大致位置。
- 插值计算公式:
- L_{Qi}:四分位数位置的下限值。
- F_{Qi}:四分位数位置的小数部分。
- U_{Qi}:四分位数位置的上限值。
通过上述步骤和公式,您可以准确地计算出任何数据集的四分位数。以下是一个Python代码示例,展示如何使用pandas库来计算四分位数:
然而,Pandas的quantile方法在处理偶数个元素时会略有不同:
- Q1: \frac{2 + 3}{2} + 0.25 * (3-2) = 2.75
- Q3: \frac{5 + 6}{2} + 0.75 * (6-5)= 6.25
- Q2: 4.5
import pandas as pd
import matplotlib.pyplot as plt
# 数据集
data = [1, 2, 3, 4, 5, 6, 7, 8]
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建DataFrame
df = pd.DataFrame(data, columns=['value'])
# 计算四分位数
Q1 = df['value'].quantile(0.25)
Q2 = df['value'].quantile(0.5)
Q3 = df['value'].quantile(0.75)
print(f"Q1: {Q1}, Q2: {Q2}, Q3: {Q3}")
# 绘制箱线图
plt.figure(figsize=(8, 2))
plt.boxplot(df['value'], vert=False)
plt.title('数据的箱线图')
plt.xlabel('值')
plt.yticks([1], ['数据'])
plt.grid(True)
plt.show()
输出结果应为:
Q1: 2.75, Q2: 4.5, Q3: 6.25
总结表格
统计量 | 公式 | 示例(数据集 [1, 2, 3, 4, 5, 6, 7, 8]) |
---|---|---|
均值 | \frac{\sum_{i=1}^{n} x_i}{n} | (1+2+3+4+5+6+7+8)/8 = 4.5 |
中位数 | 排序后取中间值(或中间两个数的平均值) | (4+5)/2 = 4.5 |
标准差 | \sqrt{\frac{\sum_{i=1}^{n}(x_i - \mu)^2}{n}} | \sqrt{\frac{42}{8}} \approx 2.29 |
四分位数 | Q1(下四分位数),Q2(中位数),Q3(上四分位数) | Q1 = 2.75, Q2 = 4.5, Q3 = 6.5 |
FAQ
为什么我计算的1~8的四分位和理论上的不一致 我的时 Q1 2.75 Q2 4.5 Q3 6.25,理论上是 Q1 2.25 Q2 4.5 Q3 6.75 ?
A: 然而,Pandas的quantile方法在处理偶数个元素时会略有不同:
- Q1: \frac{2 + 3}{2} = 2.75
- Q3: \frac{6 + 7}{2} = 6.25
- Q2: 4.5