大数据应用人才培养系列教材Python语言刘鹏张燕总主编李肖俊主编刘河钟涛副主编第十三章项目实战:数据分析13.1数据清洗13.2数据存储13.3NumPy大数据应用人才培养系列教材13.4案例剖析13.1数据清洗第十三章项目实战:数据分析简介大数据时代,数据便是掘金的黄金地带。企业大量的历史数据能否发挥其应有的价值,取决于企业采用什么样的分析手段,去发掘数据本身所蕴含的规律。数据分析人次炙手可热,已成为大数据时代企业争抢的焦点。本章,将以Python技术为基础,通过实际案例的讲解来使大家对数据分析的流程达到定性的认识。同时,通过课程实验,提高大家的动手能力,为使大家成为数据分析人才做好启蒙教育。13.1数据清洗第十三章项目实战:数据分析编码问题通常,源数据分布在不同的业务流程之中。而不同的业务流程中对数据的要求、理解和规格各不相同。导致对同一数据对象的描述千差万别。因此,在清洗数据的过程中,首先要对数据的编码格式做统一要求。对于数据项的约定可从以下几个方面进行:◎命名规则:对于同一数据对象,其名称应当是唯一的。比如页面访问量这个字段,可能称作访问深度、分为PV数、页面浏览量等。◎数据类型:同一个数据对象的类型必须一致,而且表示方法唯一,如普通日期和时间戳的区分。◎计数方法:对于数值类型的数据,单位务必统一。如:重量单位,千克、公斤、克、斤等,在数据表中必须用唯一单位。◎约束条件:数据表之间的关系约定不能产生二义性。比如:表的主键、唯一性、外键约束等。13.1数据清洗第十三章项目实战:数据分析缺失值分析数据的缺失,主要包括记录的缺失和记录中某各字段信息的缺失。两者都会造成最终分析结果的不准确。下面,从缺失值产生的原因及处理方法进行介绍。1产生原因缺失值产生的原因主要包括三大类,具体如下:①出于信息安全的需求。由于某种原因无法获取,或者获取成本过高。②人为的信息遗漏。可能是由于个人主观认识不到位,导致的因人为因素产生的遗漏。也可能是由于数据获取设备的故障所引起的非人为原因产生的丢失。③字段值的缺失。某些情况下,缺失值不一定意味者着数据的错误。比如儿童的手机号码、个人收入等字段值。2数据值的缺失,通常会给数据分析带来如下影响:①数据挖掘建模将丢失大量的有用信息。13.1数据清洗第十三章项目实战:数据分析缺失值分析②数据挖掘模型表现出来的不确定性更加显著,数据背后蕴含的规律更难发掘。③字段的空值会导致数据分析过程陷入混乱,致使分析产生不可靠的结果。3应对策略生活中我们所采集到的数据常错综复杂,其值的缺失也是很常见。那么我们该如何处理这些缺失值呢?常用的有三大类方法,即删除法、填补法和插值法。◎删除法:当数据中的某个变量大部分值都是缺失值,可以考虑删除改变量;当缺失值是随机分布的,且缺失的数量并不是很多是,也可以删除这些缺失的观测。◎替补法:对于连续型变量,如果变量的分布近似或就是正态分布的话,可以用均值替代那些缺失值;如果变量是有偏的,可以使用中位数来代替那些缺失值;对于离散型变量,我们一般用众数去替换那些存在缺失的观测。◎插补法:插补法是基于蒙特卡洛模拟法,结合线性模型、广义线性模型、决策树等方法计算出来的预测值替换缺失值。13.1数据清洗第十三章项目实战:数据分析去除异常值异常值,是指数据样本中的个别值,其数值明显偏离对应字段的所有观察值。异常值又称离群点。异常值的分析是检验数据集中是否存在录入错误以及不合常理的数据。去除异常值的方法主要包括:◎统计分析法通常对变量的取值做一个简单的量化统计,尤其是数值型字段。进而查看那些取值超出合法取值范围。最常用的统计方法是求最大值、平均值、最小值。用最小值和最大值确定正常取值范围。用平均值替代空白字段值,将超出合理取值的记录剔除采样数据。比如:个人信息中的年龄字段取值超过150就属于异常取值,可考虑用平均取值替代。◎3δ分析法通常,如果数据服从正态分布,在3δ思想的指导下,异常值被认定为与平均值偏差超过3倍标准差的数值。因为,在正态分布下,距离大于3倍标准差的数值的概率小与等于0.003,属于小概率事件。相反,若数据字段值不服从正态分布,可用远离平均值多少倍标准差约定异常数值。13.1数据清洗第十三章项目实战:数据分析去除重复值与冗余信息由于各种各样的原因,在获取的数据源中,经常存在重复的字段、重复的记录以及获取了与分析主题无关的数据项。这时,为了提高数据的质量,我们需要对源数据做去重处理和冗余处理。对于重复数据的处理,我们通常采用的方法是“排序合并”。具体做法是:现将数据库表中的记录按照指定的规则排序,然后通过比较邻近记录是否相似来检测记录是否有重复。这项工作包括排序和相似度计算两个步骤。常用的排序方法有:插入排序、冒泡排序、快速排序、希尔排序等。常用的相似度计算方法有:基本的字段匹配算法、标准的欧氏距离法、相关系数、信息熵等。另外,需要注意的是,对重复的数据项,尽量通过具体分析主题确定相关提取规则。在数据清洗阶段,对重复的数据切勿轻易的进行删除。尤其是不能将与分析主题相关的重要业务数据过滤掉。对于与分析主题无关的数据项,也即我们通常说的冗余信息,同样,也不可直接剔除出数据源。而需要根据制定的提取规则通过子表的形式,生成新的和分析主题相关的数据表。第十一章项目实战:爬虫程序11.1数据清洗11.2数据存储11.3NumPy大数据应用人才培养系列教材11.4案例剖析13.2数据存储第十三章项目实战:数据分析CSV文件存取数据存取是数据分析的基础,尤其是面对海量数据,数据的存取方式显得尤为重要。本节,以Pandas库对象为基础重点介绍python数据分析中常见的几种数据存取方法。CSV(Comma-SeparatedValue,逗号分隔值)是一种常见的文件格式。通常,数据库的转存文件就是CSV格式的,文件中的各个字段对应于数据库表中的列。在Pandas中我们可以使用read_csv()函数将.csv数据读入程序。比如,读取学生成绩数据,首先创建一个stuscore.csv文件,然后使用pandas对象的read_csv()函数读取并显示数据。13.2数据存储第十三章项目实战:数据分析CSV文件存取13.2数据存储第十三章项目实战:数据分析CSV文件存取13.2数据存储第十三章项目实战:数据分析JSON文件的存取JavaScriptObjectNotation简称Json是一种与平台无关的数据格式,被广泛的用于应用或系统间的数据交换。Pandas提供的read_json()函数,可以用来创建pandasSeries或者pandasDataFrame数据结构。同时,pandas也提供了to_json()函数用以完成数据框或序列到json格式的转换。关于pandas对json数据的存取比较简单,这里通过一个简单的示例来说明两者之间的转换关系。13.2数据存储第十三章项目实战:数据分析JSON文件的存取13.2数据存储第十三章项目实战:数据分析XLSX文件的存取使用pandas读取Excel电子表格中的数据,需借助第三方库xlrd完成Excel表数据的读写操作。用read_excel()函数完成Excel电子表格中数据的读取,用to_excel()函数完成数据pandasDataFrame中的数据写入Excel。为了完成Excel电子表格中数据的存取,我们先来完成Python第三方库openpyxl、xlsxwriter、xlrd、的安装。这里,还是使用pipinstall命令完成。示例Excel数据图13.6:13.2数据存储第十三章项目实战:数据分析XLSX文件的存取首先,我们用pandas的数据框来创建如图13.6的Excel数据表,然后,将创建的Excel表的数据输出。13.2数据存储第十三章项目实战:数据分析XLSX文件的存取df_out写入的excel文件通常位于Python的安装目录下,如下图所示:13.2数据存储第十三章项目实战:数据分析MySQL数据库文件的存取大数据时代,海量的数据通常是保存在指定的数据库中,MySQL作为一种开源的关系型数据库,收到中小企业的青睐。本节,我们将以MySQL数据为对象,讲解Pandas对象是如何对其数据进行存取的。同样,我们以学生成绩单为例,MySQL数据源示例。13.2数据存储第十三章项目实战:数据分析MySQL数据库文件的存取尝试第三方库mysql.connector.python的安装。同样,我们采用pipinstall命令完成。在DOS下输入如下命令:pipinstallmysql.connector.python13.2数据存储第十三章项目实战:数据分析MySQL数据库文件的存取13.2数据存储第十三章项目实战:数据分析MySQL数据库文件的存取为了完成pandas数据框中的数据写入MySQL的任务,首先需要安装支撑这一任务的链接器第三方Python库sqlalchemy。依旧使用pipinstall命令完成安装。13.2数据存储第十三章项目实战:数据分析MySQL数据库文件的存取13.2数据存储第十三章项目实战:数据分析MySQL数据库文件的存取然后,通过win+R键打开运行对话框,输入CMD进入DOS,进入MySQL控制台,查看scores表中的内容。13.2数据存储第十三章项目实战:数据分析MySQL数据库文件的存取另外,我们也可以将pandas中的数据重新建一个表单独存放,很简单,只需将上面示例代码中的表名更改一下就OK。df.to_sql(name='newscore',con=conn,if_exists='append',index=False,index_label=False)第十一章项目实战:爬虫程序11.1数据清洗11.2数据存储11.3NumPy大数据应用人才培养系列教材11.4案例剖析13.3NumPy第十三章项目实战:数据分析简介NumPy(NumericalPython的缩写)是一个开源的Python科学计算库。使用NumPy,就可以很方便地使用数组和矩阵。NumPy包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和随机数生成等功能。NumPy已成为Python科学计算生态系统的重要组成部分,其在保留Python语言优势的同时大大增强了科学计算和数据处理的能力。更重要的是,NumPy与SciPy、Matplotlib等其它众多Python科学计算库很好地结合在一起,共同构建了一个完整的科学计算生态系统。一句话,NumPy是使用Python进行数据分析的一个必备工具。13.3NumPy第十三章项目实战:数据分析基本操作Numpy中的ndarray是一个多维数组对象,该对象由描述数据的元数据和数据本身两部分组成。通常,大部分的操作仅仅是针对修改描述数据的元数据部分,而不改变实际数据本身。Numpy中的数组一般是同质的,亦即数据的类型是一致的,这样的规定最大的好处在于方便估算数组所需的存储空间。与Python类似,Numpy数组的下标也是从零开始的。ndarray中的每个元素在内存中使用相同大小的块。ndarray中的每个元素是数据类型对象的对象(称为dtype)。从ndarray对象提取的任何元素(通过切片)由一个数组标量类型的Python对象表示。13.3NumPy第十三章项目实战:数据分析基本操作通常,ndarray对象是使用NumPy中的数组函数创建的,定义如下:numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndmin=0)其参数的含义如下表。13.3NumPy第十三章项目实战:数据分析基本操作创建数组最简单的办法就是使用array函数,我们可以通过array函数传递Python的序列对象创建数组。13.3NumPy第十三章项目实战:数据分析基本操作数组的元素类型可以通过dtype属性获得,我们可以通过dtype参数在创建时指定元素类型。13.3NumPy第十三章项目实战:数据分析基本操作然而,通过创建Py