《Python数据分析与挖掘实战》一3.2 数据特征分析

简介:

本节书摘来自华章出版社《Python数据分析与挖掘实战》一书中的第3章,第3.2节,作者 张良均 王路 谭立云 苏剑林,更多章节内容可以访问云栖社区“华章计算机”公众号查看

3.2 数据特征分析

对数据进行质量分析以后,接下来可通过绘制图表、计算某些特征量等手段进行数据的特征分析。

3.2.1 分布分析

分布分析能揭示数据的分布特征和分布类型。对于定量数据,欲了解其分布形式是对称的还是非对称的,发现某些特大或特小的可疑值,可通过绘制频率分布表、绘制频率分布直方图、绘制茎叶图进行直观地分析;对于定性分类数据,可用饼图和条形图直观地显示分布情况。
1.定量数据的分布分析
对于定量变量而言,选择“组数”和“组宽”是做频率分布分析时最主要的问题,一般按照以下步骤进行。
1)求极差。
2)决定组距与组数。
3)决定分点。
4)列出频率分布表。
5)绘制频率分布直方图。
遵循的主要原则如下。
1)各组之间必须是相互排斥的。
2)各组必须将所有的数据包含在内。
3)各组的组宽最好相等。
下面结合具体实例,运用分布分析对定量数据进行特征分析。
表3-2是描述菜品“捞起生鱼片”在2014年第二个季度的销售数据,通过表中数据绘制销售量的频率分布表、频率分布图,对该定量数据做出相应的分析。
image

(1)求极差
极差=最大值-最小值=3960-45=3915
(2)分组
这里根据业务数据的含义,可取组距为500。
组数=极差/组距=3915/500=7.838
(3)决定分点
分布区间如表3-3所示。
image

(4)绘制频率分布直方图[3]
根据分组区间得到如表3-4所示的频率分布表。其中,第1列将数据所在的范围分成若干组段,第1个组段要包括最小值,最后一个组段要包括最大值。习惯上将各组段设为左闭右开的半开区间,如第一个分组为[0,500)。第2列组中值是各组段的代表值,由本组段的上、下限相加除以2得到。第3列和第4列分别为频数和频率。第5列是累计频率,是否需要计算该列视情况而定。
image
image

(5)绘制频率分布直方图
若以2014年第二季度“捞起生鱼片”每天的销售额为横轴,以各组段的频率密度(频率与组距之比)为纵轴,表34的数据可绘制成频率分布直方图,如图

image

2.定性数据的分布分析
对于定性变量,常常根据变量的分类类型来分组,可以采用饼图和条形图来描述定性变量的分布。
饼图的每一个扇形部分代表每一类型的百分比或频数,根据定性变量的类型数目将饼图分成几个部分,每一部分的大小与每一类型的频数成正比;条形图的高度代表每一类型的百分比或频数,条形图的宽度没有意义。
image

3.2.2 对比分析

对比分析是指把两个相互联系的指标进行比较,从数量上展示和说明研究对象规模的大小,水平的高低,速度的快慢,以及各种关系是否协调。特别适用于指标间的横纵向比较、时间序列的比较分析。在对比分析中,选择合适的对比标准是十分关键的步骤,只有选择合适,才能做出客观的评价,选择不合适,评价可能得出错误的结论。
对比分析主要有以下两种形式。
(1)绝对数比较
绝对数比较是利用绝对数进行对比,从而寻找差异的一种方法。
(2)相对数比较
相对数比较是由两个有联系的指标对比计算的,用以反映客观现象之间数量联系程度的综合指标,其数值表现为相对数。由于研究目的和对比基础不同,相对数可以分为以下几种。
1)结构相对数:将同一总体内的部分数值与全部数值对比求得比重,用以说明事物的性质、结构或质量。如居民食品支出额占消费支出总额比重、产品合格率等。
2)比例相对数:将同一总体内不同部分的数值进行对比,表明总体内各部分的比例关系。如人口性别比例、投资与消费比例等。
3)比较相对数:将同一时期两个性质相同的指标数值进行对比,说明同类现象在不同空间条件下的数量对比关系。如不同地区商品价格对比,不同行业、不同企业间某项指标对比等。
4)强度相对数:将两个性质不同但有一定联系的总量指标进行对比,用以说明现象的强度、密度和普遍程度。如人均国内生产总值用“元/人”表示,人口密度用“人/平方公里”表示,也有用百分数或千分数表示的,如人口出生率用壉硎尽?
5)计划完成程度相对数:是某一时期实际完成数与计划数的对比,用以说明计划完成程度。
6)动态相对数:将同一现象在不同时期的指标数值进行对比,用以说明发展方向和变化的速度。如发展速度、增长速度等。
就各菜品的销售数据来看,从时间的维度上分析,可以看到甜品部A、海鲜部B、素菜部C三个部门之间的销售金额随时间的变化趋势,可以了解在此期间哪个部门的销售金额较高,趋势比较平稳,如图3-6所示。

image

从总体来看,三个部门的销售金额呈递减趋势;A部门和C部门的递减趋势比较平稳;B部门的销售金额下降的趋势比较明显,可以进一步分析造成这种现象的原因,可能是原材料不足造成的。
我们也可以对单一部门(如海鲜部)做分析,了解各月份的销售对比情况,如图3-7所示。

image

3.2.3 统计量分析

用统计指标对定量数据进行统计描述,常从集中趋势和离中趋势两个方面进行分析。
平均水平的指标是对个体集中趋势的度量,使用最广泛的是均值和中位数;反映变异程度的指标则是对个体离开平均水平的度量,使用较广泛的是标准差(方差)、四分位间距。
1.集中趋势度量
(1)均值
均值是所有数据的平均值。
如果求n个原始观察数据的平均数,计算公式为:
image

式中,x1, x2, …, xk分别为k个组段的组中值;f1, f2,…, fk分别为k个组段的频率。这里的fi起了权重的作用。
作为一个统计量,均值的主要问题是对极端值很敏感。如果数据中存在极端值或者数据是偏态分布的,那么均值就不能很好地度量数据的集中趋势。为了消除少数极端值的影响,可以使用截断均值或者中位数来度量数据的集中趋势。截断均值是去掉高、低极端值之后的平均数。
(2)中位数
中位数是将一组观察值按从小到大的顺序排列,位于中间的那个数。即在全部数据中,小于和大于中位数的数据个数相等。
将某一数据集x:{x1, x2,…, xn}按从小到大排序:{x(1), x(2), …, x(n)}。
image

(3)众数
众数是指数据集中出现最频繁的值。众数并不经常用来度量定性变量的中心位置,更适用于定性变量。众数不具有唯一性。当然,众数一般用于离散型变量而非连续型变量。
2.离中趋势度量
(1)极差
极差=最大值-最小值
极差对数据集的极端值非常敏感,并且忽略了位于最大值与最小值之间的数据的分布情况。
image

变异系数主要用来比较两个或多个具有不同单位或不同波动幅度的数据集的离中趋势。
(4)四分位数间距
四分位数包括上四分位数和下四分位数。将所有数值由小到大排列并分成四等份,处于第一个分割点位置的数值是下四分位数,处于第二个分割点位置(中间位置)的数值是中位数,处于第三个分割点位置的数值是上四分位数。
四分位数间距,是上四分位数QU与下四分位数QL之差,其间包含了全部观察值的一半。其值越大,说明数据的变异程度越大;反之,说明变异程度越小。
前面已经提过,DataFrame对象的describe()方法已经可以给出一些基本的统计量,根据给出的统计量,可以衍生出我们所需要的统计量。针对餐饮销量数据进行统计量分析,其Python代码如代码清单3-2所示。
image

运行上面的程序,可以得到下面的结果,此结果为餐饮销量数的统计量情况。

销量
count   195.000000
mean   2744.595385
std     424.739407
min     865.000000
25%    2460.600000
50%    2655.900000
75%    3023.200000
max    4065.200000
range  3200.200000
var       0.154755
dis     562.600000

3.2.4 周期性分析

周期性分析是探索某个变量是否随着时间变化而呈现出某种周期变化趋势。时间尺度相对较长的周期性趋势有年度周期性趋势、季节性周期趋势,相对较短的有月度周期性趋势、周度周期性趋势,甚至更短的天、小时周期性趋势。
例如,要对某单位用电量进行预测,可以先分析该用电单位日用电量的时序图来直观地估计其用电量变化趋势。
图3-8是某用电单位A在2014年9月日用电量的时序图,图3-9是用电单位A在2013年9月日用电量的时序图。

image

总体来看,用电单位A的2014年9月日用电量呈现出周期性,以周为周期,因为周六周日不上班,所以周末用电量较低。工作日和非工作日的用电量比较平稳,没有太大的波动。而2013年9月日用电量总体呈现出递减的趋势,同样周末的用电量是最低的。

image

3.2.5 贡献度分析

贡献度分析又称帕累托分析,它的原理是帕累托法则,又称20/80定律。同样的投入放在不同的地方会产生不同的效益。例如,对一个公司来讲,80%的利润常常来自于20%最畅销的产品,而其他80%的产品只产生了20%的利润。
对餐饮企业来讲,应用贡献度分析可以重点改善某菜系盈利最高的前80%的菜品,或者重点发展综合影响最高的80%的部门。这种结果可以通过帕累托图直观地呈现出来。图3-10是海鲜系列的10个菜品A1~A10某个月的盈利额(已按照从大到小排序)。

image

由上图可知,菜品A1~A7共7个菜品,占菜品种类数的70%,总盈利额占该月盈利额的85.0033%。根据帕累托法则,应该增加对菜品A1~A7的成本投入,减少对菜品A8~A10的投入以获得更高的盈利额。
表3-5是餐饮系统对应的菜品盈利数据。
image

其Python代码如代码清单3-3所示。
image

3.2.6 相关性分析

分析连续变量之间线性相关程度的强弱,并用适当的统计指标表示出来的过程称为相关分析。
1.直接绘制散点图
判断两个变量是否具有线性相关关系的最直观的方法是直接绘制散点图,如图3-11所示。

image

2.绘制散点图矩阵
需要同时考察多个变量间的相关关系时,一一绘制它们间的简单散点图是十分麻烦的。此时可利用散点图矩阵同时绘制各变量间的散点图,从而快速发现多个变量间的主要相关性,这在进行多元线性回归时显得尤为重要。
散点图矩阵如图3-12所示。

image

3.计算相关系数
为了更加准确地描述变量之间的线性相关程度,可以通过计算相关系数来进行相关分析。在二元变量的相关分析过程中比较常用的有Pearson相关系数、Spearman秩相关系数和判定系数。
image

(2)Spearman秩相关系数
Pearson线性相关系数要求连续变量的取值服从正态分布。不服从正态分布的变量、分类或等级变量之间的关联性可采用Spearman秩相关系数,也称等级相关系数来描述。
其计算公式如下。
image

对两个变量成对的取值分别按照从小到大(或者从大到大小)顺序编秩,Ri代表xi的秩次,Qi代表yi的秩次,Ri-Qi为xi、yi的秩次之差。
表3-6给出一个变量x(x1, x2,… xi,… xn)秩次的计算过程。
image
image

因为一个变量的相同的取值必须有相同的秩次,所以在计算中采用的秩次是排序后所在位置的平均值。
只要两个变量具有严格单调的函数关系,那么它们就是完全Spearman相关的,这与Pearson相关不同,Pearson相关只有在变量具有线性关系时才是完全相关的。
在实际应用计算中,上述两种相关系数都要对其进行假设检验,使用t检验方法检验其显著性水平以确定其相关程度。研究表明,在正态分布假定下,Spearman秩相关系数与Pearson相关系数在效率上是等价的,而对于连续测量数据,更适合用Pearson相关系数来进行分析。
(3)判定系数
判定系数是相关系数的平方,用r2表示;用来衡量回归方程对y的解释程度。判定系数取值范围:0≤r2≤1。r2越接近于1,表明x与y之间的相关性越强;r2越接近于0,表明两个变量之间几乎没有直线相关关系。
餐饮系统中可以统计得到不同菜品的日销量数据,数据示例如表3-7所示。
image

分析这些菜品销售量之间的相关性可以得到不同菜品之间的关系,比如是替补菜品、互补菜品或者没有关系,为原材料采购提供参考。其Python代码如代码清单3-4所示。
image

image

上面的代码给出了3种不同形式的求相关系数的运算。运行代码,可以得到任意两款菜式之间的相关系数,如运行“data.corr()[u'百合酱蒸凤爪']”可以得到下面的结果。

>>> data.corr()[u'百合酱蒸凤爪']
百合酱蒸凤爪     1.000000
翡翠蒸香茜饺     0.009206
金银蒜汁蒸排骨    0.016799
乐膳真味鸡      0.455638
蜜汁焗餐包      0.098085
生炒菜心       0.308496
铁板酸菜豆腐     0.204898
香煎韭菜饺      0.127448
香煎萝卜糕     -0.090276
原汁原味菜心     0.428316
Name: 百合酱蒸凤爪, dtype: float64

从上面的结果可以看到,如果顾客点了“百合酱蒸凤爪”,则和点“翡翠蒸香茜饺”“金银蒜汁蒸排骨”“香煎萝卜糕”“铁板酸菜豆腐”“香煎韭菜饺”等主食类的相关性比较低,反而点“乐膳真味鸡”“生炒菜心”“原汁原味菜心”的相关性比较高。

相关文章
|
3天前
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
19 5
|
9天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
1天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
13 7
|
1天前
|
数据采集 Web App开发 前端开发
Python爬虫进阶:Selenium在动态网页抓取中的实战
【10月更文挑战第26天】动态网页抓取是网络爬虫的难点,因为数据通常通过JavaScript异步加载。Selenium通过模拟浏览器行为,可以加载和执行JavaScript,从而获取动态网页的完整内容。本文通过实战案例,介绍如何使用Selenium在Python中抓取动态网页。首先安装Selenium库和浏览器驱动,然后通过示例代码展示如何抓取英国国家美术馆的图片信息。
13 6
|
1天前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
12 4
|
1天前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
14 2
|
1天前
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
10 2
|
3天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从基础到实战
【10月更文挑战第24天】本文将带你进入Python的世界,从最基础的语法开始,逐步深入到实际的项目应用。我们将一起探索Python的强大功能和灵活性,无论你是编程新手还是有经验的开发者,都能在这篇文章中找到有价值的内容。让我们一起开启Python的奇妙之旅吧!
|
1天前
|
网络协议 物联网 API
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第26天】Python 是一门功能强大且易于学习的编程语言,Twisted 框架以其事件驱动和异步IO处理能力,在网络编程领域独树一帜。本文深入探讨 Twisted 的异步IO机制,并通过实战示例展示其强大功能。示例包括创建简单HTTP服务器,展示如何高效处理大量并发连接。
8 1
|
4天前
|
JavaScript 数据安全/隐私保护 Python
python爬取m3u8实战!!
本文详细介绍了如何抓取和处理m3u8视频文件,包括从网页源代码中提取m3u8文件地址、下载m3u8文件及其对应的ts片段、处理加密的ts文件以及使用ffmpeg合并视频片段。通过多线程下载和文件路径处理,确保了高效和准确的视频抓取与合并。文中还提供了具体的Python代码示例,帮助读者理解和实现整个过程。
17 1