对于定量数据,如果想知道分布是对称的还是不对称的,找一些可疑的值可以用来做一个频率分布表,绘制频率分布直方图,绘制茎叶图进行可视化分析;对于定性数据,饼图和条形图可以直观地显示其分布。01定量数据的分布分析对于定量变量,选择“组数”和“组宽”是做频数分布分析时最重要的问题。一般按照以下步骤进行:第一步:找到范围。第2步:确定组距离和组数。第三步:确定要点。第四步:列出频率分布表。第五步:绘制频数分布直方图。遵循的主要原则如下:组必须相互排斥。每个组必须包含所有数据。每组的组宽最好相等。下面结合具体实例使用分布分析来分析定量数据的特征。表3-2为2014年第二季度菜品“老七刺身”的销售数据,画出销售量的频数分布表和频数分布图,并对量化数据进行相应的分析。▲表3-2“老七刺身”销售情况1、求极差,极差=最大值-最小值=3960-45=39152。分组这里根据业务数据的意思,分组距离为500,则分组数如下。组数=射程/组距=3915/500=7.83≈83。决策点的分布区间如表3-3所示。▲表3-3分布区间4.绘制频数分布直方图。根据分组区间,得到如表3-4所示的频数分布表。其中,第一列将数据范围分为若干组,其中第一组应包含最小值,最后一组应包含最大值。习惯上将每一段设置为左闭右开的半开区间,例如第一段为[0,500)。第二列中的组中值是每个组段的代表值,由该组段的上限值和下限值相加除以2得到。第三列和第四列分别是频率和频率。第五列是累积频率,是否需要计算这一列的值要看情况。▲表3-4频数分布5.绘制频数分布直方图,以2014年第二季度菜品“老黑刺身”的日销售组段为横轴,以各组的频数密度segment(frequencyRatiotogroupdistance)为纵轴,将表3-4中的数据绘制成频率分布直方图,如代码清单3-3所示。代码清单3-3“老七刺身”季度销量importpandasapdimportnumpyasnpcatering_sale='../data/catering_fish_congee.xls'#餐饮数据data=pd.read_excel(catering_sale,names=['date','sale'])#读取数据,指定“日期”列为索引bins=[0,500,1000,1500,2000,2500,3000,3500,4000]labels=['[0,500)','[500,1000)','[1000,1500)','[1500,2000)','[2000,2500)','[2500,3000)','[3000,3500)','[3500,4000)']data['销售分层']=pd.cut(data.sale,bins,labelslabels=labels)aggResult=data.groupby(by=['salestratification'])['sale'].agg({'sale':np.size})pAggResult=round(aggResult/aggResult.sum(),2,)*100importmatplotlib.pyplotaspltplt.figure(figsize=(10,6))#设置帧大小pAggResult['sale'].plot(kind='bar',width=0.8,fontsize=10)#绘制频率直方图plt.rcParams['font.sans-serif']=['SimHei']#用于正常显示中文标签plt.title('季度销售频率分布直方图',fontsize=20)plt.show()运行代码清单3-3得到季度直方图销售频率分布,如图3-3所示。▲图3-3季度销售频数分布直方图02定性数据的分布分析对于定性变量,往往按照变量的分类类型进行分组。饼图和柱状图可以用来描述定性变量的分布情况,如代码清单3-4所示。代码清单3-4某段时间内不同菜品的销售额分布列为索引#绘制饼图x=data['利润']labels=data['菜名']plt.figure(figsize=(8,6))#设置画布大小plt.pie(x,labelslabels=labels)#画饼图plt.rcParams['font.sans-serif']='SimHei'plt.title('菜品销量分布(饼图)')#设置标题plt.axis('equal')plt.show()#画条形图x=data['菜名']y=data['利润']plt.figure(figsize=(8,4))#设置画布大小plt.bar(x,y)plt.rcParams['font.sans-serif']='SimHei'plt.xlabel('dishes')#设置x轴标题plt.ylabel('sales')#设置y轴标题plt.title('菜品销量分布(barGraph)')#设置标题plt.show()#显示图片。饼图的每个扇形部分代表每种类型的百分比或频率。饼图根据定性变量的类型数量分为几个部分。每个部分的大小与每种类型出现的频率成正比;条形的高度代表每种类型的百分比或频率,条形的宽度没有意义。运行代码清单3-4,得到一段时间内不同菜品的销量分布,如图3-4和图3-5所示。▲图3-4菜品销量分布(饼图)▲图3-5菜品销量分布(柱状图)作者简介:张良军,资深大数据挖掘与分析专家,模式识别专家,AI技术专家。他在大数据挖掘和分析方面拥有超过10年的经验。擅长通过Python、R、Hadoop、Matlab等技术实现的数据挖掘和分析。对机器学习等人工智能技术驱动的数据分析也有深入研究。本文节选自《Python数据分析与挖掘实战》(第2版),经出版社授权发布。
