之前的文章和大家一起聊了聊统计学意义上的数据类型,以及每种数据类型适合的可视化图,对这部分感兴趣的同学可以去看看统计基础知识—数据类型(上),今天我们来聊聊不同数据类型适合的描述性统计量以及如何用Python去实现统计量的求解。
1 描述性统计
传统的统计量使用场景大致可以分为集中趋势和离散趋势两种,对于不同的数据来说,可使用的统计方法也是不同的,结合不同的数据类型和使用场景选择合适的统计量也是很重要的,具体情况如下:
1.1 分类数据
集中趋势:频数、众数
对于分类数据来说,例如性别,只有男女,所以是不能计算均值方差的,只能利用频数和众数来观察集中趋势。
频数:变量所包含的每一类出现了多少次,比如性别,有多少个男性,就叫做性别为男的频数
众数:变量所包含的类别中出现次数最多的类,比如职业,假设我们的样本包含的职业共有工人、白领、医生三种,其对应的频数分别为100/200/300,那么我们就可以说职业这个变量的众数是医生
离散趋势:异众比率
异众比率:指的是非众数组的频数占总的频数的比例,还是上面的例子,比如职业,假设我们的样本包含的职业共有工人、白领、医生三种,其对应的频数分别为100/200/300,众数为医生,那么职业的异众比率=(工人+白领)/(工人+白领+医生)=300/600=0.5
异众比率越大,说明分子越大,也就是众数的频数相对来说越小,众数的代表性越差,数据越分散
1.2 顺序数据
顺序数据可以看做可排序的分类数据,比如:一等奖、二等奖这种,所以顺序数据也是可以计算频数和众数的,计算方法与上文相同
集中趋势:频数、众数、中位数、四分位数
中位数:就是将数据按照从小到大排序后,处于中间位置的数据
四分位数:四分位数也称为四分位点,它是将全部数据分成相等的四部分,其中每部分包括25%的数据,它们分别处于数据25%、50%、75%的位置:
第一四分位数 (Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数据
第二四分位数 (Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数据
第三四分位数 (Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数据
离散趋势:四分位差
四分位差:第三四分位数与第一四分位数的差距(Q3-Q1),又称四分位距。四分位距其实就是箱线图中中间那块箱子的大小,四分位差越大,箱子越长,说明数据越分散
1.3 数值型数据
数值型数据是最为常见的数据类型,像是年龄、温度、收入都属于数值型数据
集中趋势:频数、众数、中位数、四分位数、均值
均值:就是我们平时说的平均数或者期望值
离散趋势:极差、方差、标准差
极差:最大值-最小值
2 Python实现统计量计算
2.1 导入各种包
import pandas as pd
import seaborn as sns
import numpy as np
2.2 使用泰坦尼克号数据
一共891个样本,特征有数值型数据、分类数据、顺序数据,用来演示操作真的太合适了O(∩_∩)O哈哈~
data = sns.load_dataset('titanic') # 导入泰坦尼克号生还数据
data
2.3 频数
性别列计算频数后,有male、female两种,对应的频数分别是577和314
pinshu = data['sex'].value_counts() # 频数
2.4 众数
male的频数大于female的频数,所以众数是male
zhongshu = data['sex'].mode()[0] # 众数
2.5 异众比率
分子为非众数组的频数,分母为总样本量
yizhong = (pinshu.sum() - (data['sex'] == zhongshu).sum()) / pinshu.sum() # 异众比率
2.6 中位数
特征pclass表示乘客票的等级数,类似一等座二等座的意思,1—一等座,2—二等座,3—三等座,是顺序变量,我们来用它求一个中位数是3,看来还是像我这种普通老百姓多啊,买不起一等座哈哈哈
np.median(data['pclass']) # 中位数
2.7 四分位数
中位数是把数据排序后处于50%位置对应的数,上文求的中位数为3,上四分位数和下四分位数分别对应25%和75%的数据,分别求出为2和3,也就是说泰坦尼克号上买得起2等座的乘客已经超越了大概75%的人了
# 上四分位数、中位数、下四分位数
perc = np.percentile(data['pclass'], (25, 50, 75), interpolation='midpoint')
2.8 四分位差
四分位差就是下四分位数-上四分位数,也就是3-2=1
perc[2] - perc[0] # 四分位差
2.9 常用统计量
np.average(data['fare']) # 均值
np.var(data['fare']) # 方差
np.std(data['fare']) # 标准差 方差开根号就是标准差
np.max(data['fare'])-np.min(data['fare']) # 极差 极差就是最大值-最小值
本人才疏学浅,若有理解有误的地方,还请各路大佬批评指正♡♡♡
ok!感恩的心~