统计学习三:数据的描述性统计实践

上周学习了数据的描述性统计,总结如下:

在这里插入图片描述

下面以我画的两张表格来比较下各特征值的异同:

中位数 众数 算数平均数 几何平均数
英文名 Median Mode Arithmetic mean Geometric Mean
别称 中值 均值
定义 一组数据排序后处于中间位置上的变量值 一组数据中出现次数最多的变量值 n个变量的和除以n n个变量值连乘积的n次方根
优点 一组数据中间位置上的代表值,不受极端值的影响 一组数据分布的峰值,不受极端值的影响 利用了全部数据信息,实际应用最广泛 不受极端值的影响
缺点 需要先排序 不唯一,可能有零到多个众数 易受极端值的影响 变量值不能为0或负数,仅适用于计算平均比率
适用场景 顺序数据的集中趋势测度值 分类数据的集中趋势测度值 数值型数据的集中趋势测度值 计算现象的平均增长率

英文名 概念 公式
极差 range 一组数据的最大值与最小值之差 R = max ( x i ) min ( x i ) R=\max \left(x_{i}\right)-\min \left(x_{i}\right)
平均差 mean deviation 各变量值与其平均数离差绝对值的平均数 $M_{d}=\frac{\sum_{i=1}^{n}\left
方差 variance 各变量值与其平均数离差平方的平均数 s 2 = i = 1 n ( x i x ˉ ) 2 n 1 s^{2}=\frac{\sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)^{2}}{n-1}
标准差 standard deviation 方差的平方根 s = i = 1 n ( x i x ˉ ) 2 n 1 s=\sqrt{\frac{\sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)^{2}}{n-1}}
标准分数 standard score 各变量值与其平均数的离差除以标准差 z i = x i x ˉ s z_{i}=\frac{x_{i}-\bar{x}}{s}
离散系数 coefficient of variation 数据的标准差与平均数之比 v s = s x ˉ v_{s}=\frac{s}{\bar{x}}

这周就以 python 具体实现下描述性统计的内容。

完整代码见 github : StatisticLearning

一、集中趋势

还是以上周的 .xlsx 文件中的 9 个家庭的人均月收入数据(单位:元)为例:

1080 750 1080 1080 850 960 2000 1250 1630

首先读取文件中的数据:

import pandas as pd
df = pd.read_excel('data/2_table1.xlsx')
data = df['月收入']

1、众数

# 众数
# 法一
print('众数为:', data.mode().iloc[0])
# 法二
from collections import Counter
counts = Counter(data)
print('众数为:', counts.most_common(1)[0][0])
# 法三
from scipy.stats import mode
mode_num = mode(data)
print('众数为:', mode_num[0][0])

2、中位数

# 中位数
# 法一
print('中位数为:', data.median())
# 法二
import numpy as np
print('中位数为:', np.percentile(data, 50))
# 法三
print('中位数为:', data.quantile(.50))

3、分位数

类似中位数的计算,可以使用 numpy 库中的 percentile 方法。

也可以使用 pandas 库中的 quantile 方法。

注意:这两个函数确定四分位数位置的方法与上一周的方法略有不同,公式如下:

下四分位数: Q L = n + 3 4 Q_{L}=\frac{n+3}{4}

上四分位数: Q U = 3 n + 1 4 Q_{U}=\frac{3n+1}{4}

# 分位数
# 法一
print('下四分位数为:', np.percentile(data, 25))
print('上四分位数为:', np.percentile(data, 75))
# 法二
print('下四分位数为:', data.quantile(.25))
print('上四分位数为:', data.quantile(.75))

4、平均数

  • 算术平均数

    # 平均数
    # 算数平均数
    print('算数平均数为:', data.mean())
    
  • 几何平均数

    # 几何平均数
    import math
    s = 1
    for i in data:
        s *= i
    print('几何平均数为:', math.pow(s, 1/len(data)))
    

二、离散程度

1、异众比率

# 异众比率
# 众数
from collections import Counter
count = Counter(data)
modeCount = count.most_common(1)[0][1]
totalCount = len(data)
# 异众比率
ratio = (totalCount - modeCount) / totalCount
print(ratio)

2、四分位差

# 四分位差
# 法一
print('四分位差为:', np.percentile(data, 75) - np.percentile(data, 25))
# 法二
print('四分位差为:', data.quantile(.75) - data.quantile(.25))

3、极差

# 极差
print('极差为:', data.max() - data.min())

4、平均差

# 平均差
meanData = data.mean()
s = 0
for i in data:
    s += (abs(i - meanData))
print('平均差为:', s/len(data))

5、方差

# 方差
print('方差为:', np.var(data))

6、标准差

# 标准差
print('标准差为:', np.std(data))

三、分布的形状

1、偏度

# 偏度
from scipy import stats
print('偏度为:', stats.skew(data))

2、峰度

# 峰度
print('峰度为:', stats.kurtosis(data))

参考资料:

《统计学(第七版)》贾俊平,所有数据都来自该书

统计学学习小组参加自公众号「数据科学家联盟」

数据的概括性度量:https://blog.csdn.net/qq_43315928/article/details/102151709

本代码的完整 github 链接:https://github.com/shiinerise/StatisticLearning

发布了34 篇原创文章 · 获赞 9 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Shine_rise/article/details/103051922
今日推荐