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

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


这周就以 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 方法。
注意:这两个函数确定四分位数位置的方法与上一周的方法略有不同,公式如下:
下四分位数:
上四分位数:
# 分位数
# 法一
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