您的位置:首页 > 其它

赤裸裸的统计学【1】-描述性数据

2021-01-02 16:52 113 查看

想要成为一名数据分析师,统计学相关知识是必备的,这里小编推荐2本书籍,分别是《深入浅出统计学》和《赤裸裸的统计学》,供大家学习参考。公众号后台回复“统计学”,即可领取书籍的资料。


本文主要介绍的内容是:

miao


shu


xing


shu


ju


首先,问大家一个问题,怎么去衡量一个大学生的学业表现呢?

想必,大家都会脱口而出,那就是GPA!

毕竟大家都曾生活在被GPA支配的恐惧中,通俗地说,GPA也就是学生在校的平均成绩,是评价学生学术潜力的一个重要指标。

这里的GPA就是本文涉及的内容——描述性数据。


本文会从两个部分展开:统计量的介绍和相关实例。


下面先简单介绍有关平均数的常用统计量(因为大家都学过........)

均值:一批数据的平均数

(容易受到远离中心区域的“异常值”的干扰而出现失真)

举例:有5个人的平均月薪为1W,来了一个月薪为30W的大佬,这时候6人的平均月薪为35/6W,显然这个数据不能正确反映大家的工资水平。其中30W这个数据即为异常值。


中位数:一组数据的中间值

如果一组数据分布中没有特别离谱的异常值,那么它们的中位数和平均数是差不多的。


众数:一组数据中出现次数最多的数值

如果一批数据有两个众数,则称这批数据为双峰数据。

众数是唯一能用于类别数据的平均数。

举例:以下数据不是数值型数据,而是类别数据

类别


绿

频数
4
5
8
1


这里的众数为“绿”,均数和平均数都不能用于类别数据


总结:

均值:在数据非常对称,且仅显示出一种趋势时使用

中位数:在数据由于异常值而发生偏斜时使用

众数:在遇到类别数据时使用,或当数据可以分为两个或更多组时使用


上述所讲的平均数,可以确定一批数据的中心,但是无法得知数据的波动情况。

下面简单介绍度量差异性的常用统计量:

极差(全距):一组数据的最大值与最小值的差值

极差是描述数据集分散程度的简便方法,但是容易受异常值的影响。


四分位距:不受异常值影响,一组数据的上四分位数与下四分位数的差值

四分位数的确定与中位数类似,将一组数据按照升序排列,分为四份,四分位数就是处于每个分隔位置的数值,最小值为四分位数,最大值为上四分位数。


百分位数:第k百分位数即位于数据范围k%处的数值


总结:

全距:数据集最大值与最小值之间的差值

四分位距:关注数据中间部位的50%的数值

百分位数:对于划分名次,排名很有用


下面简单介绍度量变异性的常用统计量:

方差:对一组数据的具体数值和均值之差进行平方,然后再用平方数之和除以数值的个数。


标准差:取方差的平方根

衡量数据相对于平均值的分散程度,标准差能用一个独立的数字来表示距离平均数的离散程度。


总结:

标准差是方差的平方根,粗略地体现了平均情况下的数值与均值的距离。


以上所讲的统计指标,可以将大量数据浓缩融合为一个数字,虽然可以提供简单明了的信息,但是描述性数据的背后往往存在着统计陷阱。比如有时候哪怕你准确无误地计算出了平均数,也无法改变中位数在对真相描述中更加准确这样一个事实。


下面以一个实例,用描述性数据挖掘一下药店销售数据中的信息。


首先,导入相应的python模块和数据。




import pandas as pdimport numpy as npimport matplotlib.pyplot as plt

导入医院2018年销售数据文件,并显示前5行数据,来观察一下数据的大致样子。





filename='./医院2018年销售数据.xlsx'#数据所在的文件路径,其中./表明在当前notebook所在的路径df=pd.read_excel(filename,sheet_name='Sheet1',dtype=str)df.head()#显示前五行数据

上面的5行可以让我们大致了解数据的信息,为了清楚一共有多少行,以及数据类型,有无缺失值,可以采用info( )方法。


df.info()


将字符串转换为数值(浮点型)






#转换字符串为数值df['销售数量']=df['销售数量'].astype(float)df['应收金额']=df['应收金额'].astype(float)df['实收金额']=df['实收金额'].astype(float)print('转换后的数据类型:\n',df.dtypes)


用describe( )方法查看销售数据的统计方面的信息。


df.describe()

其中,由运行结果得样本量count,均值mean,标准差std,最小值min,最大值max以及分位数。

观察到,销售数量有小于0的值,应剔除异常值。




df.loc[行标签,列标签]df.loc['a':'b']#选取ab两行数据df.loc[:,'one']#选取one列的数据

使用标签来选取数据,方法如上。






print('删除异常值前:',df.shape)#选取所有销售数量大于0的行df=df.loc[df['销售数量']>0,:]print('删除异常值后:',df.shape)


再次观察剔除异常值后的数据的统计信息:


也可以通过求众数的方法,得到哪种药品买的人数最多,这里不考虑药品的销售量。因为众数可以用于描述类别数据。


df['商品名称'].mode()




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: