数据采集与预处理 课件 学习单元5-使用Python进行数据处理_第1页
数据采集与预处理 课件 学习单元5-使用Python进行数据处理_第2页
数据采集与预处理 课件 学习单元5-使用Python进行数据处理_第3页
数据采集与预处理 课件 学习单元5-使用Python进行数据处理_第4页
数据采集与预处理 课件 学习单元5-使用Python进行数据处理_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

使用Python进行数据处理学习单元5单元概述Python语言拥有大量可用于数据处理的程序库,其中的pandas、sklearn等程序库更是数据处理中的佼佼者。本单元围绕“鞋类产品的销售数据”的数据处理工作,介绍了数据清洗、数据标准化、数据的聚合与分组、透视表与交叉表的使用、哑变量等相关知识与操作技能,使学习者能够利用Pandas、sklearn等程序库对数据进行处理,最终把数据转换成便于观察分析、传送或进一步处理的形式。教学目标掌握数据处理中数据清洗的几种方式,掌握三种数据标准化方法,掌握数据分组与聚合、透视表、交叉表、哑变量的相关概念及基础应用的相关理论知识。掌握常用数据处理工具的使用,利用各种工具完成数据清洗、数据标准化等数据处理工作。提升自主学习能力,顺利完成数据的处理,能够将“脏数据”处理成需要的数据格式,为后续的数据挖掘、数据分析做好准备工作。任务1利用列表、元组、集合与字典进行数据存储某销售企业的“商品销售管理系统”需要将以往的客户信息及其鞋类销售数据纳入系统数据库,这些销售数据存储格式较为杂乱且有错误数据,在纳入系统前必须对这些数据进行清洗,将不完整数据、错误数据、重复数据进行处理,最终得到一份完整的、统一的数据。任务分析

数据清洗是数据预处理的第一步,也是保证后续结果正确的重要一环。在使用“鞋类产品的销售数据”数据时,可以使用pandas及sklearn库提供的相关方法,进行数据清洗工作。本任务实现的关键点是数据类型转换、重复数据删除、缺失值和异常值的处理。任务实施目前有销售企业的鞋类产品的用户基础数据与销售数据,其中包含订单ID、客户姓名、客户性别、客户身高、客户体重、手机品牌、客户所在省份、客户受教育程度、产品名称、产品单价、鞋码、单笔订单总额、订单内商品数量、订单生成日期、订单渠道以及用户对该商品的浏览次数。1.数据类型转换(1)首先读取数据并查看数据规模及数据类型。importpandasaspd#导入pandas包io=r'data.xlsx'#设置要读取的Exceldata=pd.read_excel(io)#读取Exceldata.shapedata.dtypes(2)进行数据类型转换#将price、total_price转为floatdata['price']=data['price'].str[1:].astype(float)data['total_price']=data['total_price'].str[1:].astype(float)#将order_date转为datetimedata['order_date']=pd.to_datetime(data['order_date'],format='%Y年%m月%d日')重复数据处理在查看数据集“鞋类产品的销售数据”时,可以发现,由于各种各样的疏忽,导致数据集中存在重复数据,此时可以使用duplicated方法来进行重复数据的识别。(1)识别重复数据data.duplicated().any()执行代码,返回True,说明当前数据集中包含重复数据。如果返回False,则说明当前数据集中不包含重复数据。(2)删除重复数据data.drop_duplicates()(3)使用subset参数删除重复数据在很多业务场景中,并不是需要对数据的所有列进行重复性的判断,而是只需要判断某几个列相同,即可以认定为重复数据。(4)彻底清除重数据我们虽然将重复数据删除了,但是并没有影响原始的数据data,即原始数据data中还是存在重复数据的,这并不利于接下来进行的数据分析,可以使用如下两种方式修改原始数据集。缺失值处理在数据获取或业务数据采集过程中,用于各种情况的限制,导致获取到数据并不完整,在数据集“鞋类产品的销售数据”中,我们得到的样本数据在age(年龄)、gender(性别)、phone_brand(手机品牌)上均有缺失值。(1)判断是否存在缺失值#判断是否存在缺失值data.isnull().any(axis=0)#缺失值的数量data.isnull().sum(axis=0)#缺失值的比例data.isnull().sum(axis=0)/data.shape[0](2)查看哪些行存在缺失数据#缺失数据的行数data.isnull().any(axis=1).sum()#缺失数据的行数的比例data.isnull().any(axis=1).sum()/data.shape[0](3)处理缺失值我们已经从两个角度对数据集缺失值进行了观测,那么在观测后,我们如何处理缺失数据呢?通常来说,对于缺失值的处理,最常用的方法有删除法、替换法、插补法等。异常值处理在“鞋类产品的销售数据”中,在对鞋码(size)列进行检查时,发现某些数据可能存在异常,所以在这里将对size列进行异常值的检测与处理。检测和过滤异常值常用的方法有基于统计与数据分布、箱型图分析,这里将使用基于统计与数据分布的方法。(1)基于统计与数据分布的异常值分析假设数据集满足正态分布(NormalDistribution),即:

,如果x的值大于μ+3δ或者小于μ-3δ,那么都可以认定为是异常值。importnumpyasnpimportpandasaspdimportmatplotlibasmplimportmatplotlib.pyplotasplt%matplotlibinline#读取数据文件fig,ax=plt.subplots(1,1,figsize=(8,5))#直方图ax.hist(data['size'],bins=20)d=data['size']#使用z-score标准化数据zscore=(d-d.mean())/d.std()print(zscore)data['isOutlier']=zscore.abs()>3data['isOutlier'].value_counts()必备知识1.数据清洗数据清洗(Datacleaning)是对数据进行重新审查和校验的过程,目的在于删除重复信息、纠正存在的错误,并提供数据一致性。2.数据整理重复的数据很有可能会对最终结果产生不良影响,在数据清洗中,就需要将重复数据删除。缺失值是在数据分析中比较让人头疼的问题,缺失值的产生是由于认为或者机器等原因导致数据记录的丢失或隐瞒,缺失值的存在一定程度上影响了后续的数据分析和挖掘的结果。3.异常值处理异常值,即在数据集中存在不合理的值,又称离群点。异常数据的类型可以按照其造成原因分为两种:真异常与假异常。关于异常值的处理,可以删除、可以不处理,也可以将其当作缺失值,采用缺失值的处理办法。任务2数据标准化任务描述将“鞋类产品的销售数据”进行数据清洗后,可以针对数据的某些列进行标准化处理,以便在后续的数据分析中,利用标准化后的数据进行数据分析。任务分析在本次任务中,我们将针“鞋类产品的销售数据”中的“用户对该商品的浏览次数”列进行数据标准化处理。本任务实现的重点是了解Min-max标准化与Z-Score标准化。任务实施1.使用sklearn库中的min-max标准化我们使用sklearn.preprocessing中的MinMaxScaler中的fit_transform函数进行min-max标准化。fromsklearnimportpreprocessingmin_max=preprocessing.MinMaxScaler()n=min_max.fit_transform(data[['pv']])n2.使用sklearn库中的z-score标准化我们在这里直接调用preprocessing中的scale方法即可。代码如下:n=preprocessing.scale(data[['pv']])n数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。同趋化处理主要解决不同性质数据问题,对不同性质指标直接加总不能正确反映不同作用力的综合结果,须先考虑改变逆指标数据性质,使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果。无量纲化处理主要为了消除不同指标量纲的影响,解决数据的可比性,防止原始特征中量纲差异影响距离运算(比如欧氏距离的运算)。必备知识必备知识1.Min-max标准化Min-max标准化是将原始数据进行线性变换,设minA和maxA分别为属性A的最小值和最大值,将A的一个原始值x通过min-max标准化映射成在区间[0,1]中的值x',这种处理方法的缺点是若数值集中且某个数值很大,则规范化后各值接近于0,并且将会相差不大。即:新数据=(原数据-最小值)/(最大值-最小值)2.z-score标准化这种方法基于原始数据的均值(mean)和标准差(standarddeviation)进行数据的标准化。将A的原始值x使用z-score标准化到x'。必备知识即:新数据=(原数据-均值)/标准差小数定标标准化这种方法通过移动数据的小数点位置来进行标准化。小数点移动多少位取决于属性A的取值中的最大绝对值。将属性A的原始值x使用小数定标标准化到x‘的计算方法参考如下:必备知识其中,j是满足条件的最小整数。任务3聚合与分组任务描述数据的分组与聚合是数据处理的一种方式,在对数据集“鞋类产品的销售数据”进行加载、清洗、标准化之后,可以通过对数据的分组与聚合,查看数据的分组情况,并针对分组数据进行统计。任务分析在Pandas中,数据分组我们主要依靠groupby函数,分组键可以有多种形式,可以使用Series、列表、字典、函数及多种混合分组,并结合Pandas中常用的聚合函数常见的如sum、count、min、max、mean等数据进行分组与聚合。本任务实现的关键点是采用不同方法对数据进行分组和聚合处理。任务实施1.数据分组(1)使用Series分组:在数据集“鞋类产品的销售数据”中,根据province进行数据分组,查看各省份的销售情况。grouped=data.groupby(data['province'])grouped在分组后获得到GroupBy对象grouped,打印grouped我们可以看到类似如下的输出。<pandas.core.groupby.generic.DataFrameGroupByobjectat0x000001D9F30BB070>此时grouped实际上还没有进行任何计算,只是含有一些有关分组键data['province']的中间数据而已。也就是说,该对象已经有了接下来对各分组执行运算所需的信息。GroupBy对象支持迭代,可以产生一组二元元组(由分组名和数据块组成)。继续进行迭代分组对象forname,groupingrouped:print(name)print(group)任务实施(2)使用数组分组:在上例中,分组键为Series。实际上,分组键可以是任何长度适当的数组。grouped=data.groupby(data['product_name'].values)groupedforname,groupingrouped:print(name)print(group)(3)使用字典分组df=data[['age','height','size']]mapping={'age':'基础信息','height':'基础信息','size':'商品信息'}mapping_grouped=df.groupby(mapping,axis=1)forname,groupinmapping_grouped:print(name)print(group)任务实施(4)使用函数分组相比于使用字典、Series、列表等,使用函数是一种更原生的方法定义分组映射。任何被当做分组键的函数都会在各个索引值上被调用一次,其返回值就会被用作分组名称。我们以product_name作为索引数据,以size作为列数据,可以计算索引值(product_name)的长度,按照product_name的长度进行分组#构建新的DataFrame作为样本数据df=pd.DataFrame({'size':data['size'].values},index=data['product_name'].values)#使用len函数by_func=df.groupby(len)forname,groupinby_func:print(name)print(group)任务实施(5)使用混合分组:在某一些特定情况下,可能需要将函数、数组、列表、字典、Series混合使用,在这里完全不用担心,因为在内部都会被转换为数组。#构建新的DataFrame作为样本数据df=pd.DataFrame({'size':data['size'].values},index=data['product_name'].values)channels=data['channel'].valuesforname,groupinfixed_grouped:print(name)print(group)任务实施2.数据聚合(1)sum函数:sum为求和函数。使用sum函数获取渠道销售的订单总金额。df=data[['channel','total_price']]df.groupby(data['channel']).sum()(2)count函数:count函数是统计数每一列或行的非空单元格。使用count函数统计渠道销售次数。df.groupby(data['channel']).count()(3)min函数:min函数可以获取分组里中的最小值。使用min函数获取渠道销售的单笔订单总额最小值。df.groupby(data['channel']).min()(4)max函数:max函数与min函数作用相反,可以获取分组里中的最大值。使用max函数获取渠道销售的单笔订单总额最大值。df.groupby(df['channel']).max()任务实施(5)mean函数:mean函数可以获取分组数据的平均值,使用mean统计渠道销售的单笔订单总额的平均值。df.groupby(df['channel']).mean()(6)agg函数:在Pandas中,我们也可以使用agg函数进行同时计算各组数据的平均数、标准差、总数等,并且可使用自定义函数进行数据的聚合。例如我们可以定义d_value函数来获取最大值与最小值的差值。在使用多个函数时使用列表填充,如需给函数取别名,则需要一个元组,如('最大差值',d_value)。#定义获取最大最小值间差值函数defd_value(value):returnvalue.max()-value.min()df.groupby(df['channel']).agg([('最大差值',d_value),('均值','mean')])在Oracle、MySQL等关系型数据库以及Hive等数据仓库中,都能够方便、快捷的进行数据的分组及聚合。在Python中,可以使用如Pandas库提供的分组与聚合,执行数据的分组及聚合操作。热门R语言包的作者HadleyWickham提出了表示分组运算的术语"split-apply-combine"(拆分-应用-合并)。split-apply-combine模式如下:split:把要处理的数据分割成小片断;apply:对每个小片断独立进行操作;combine:把片断重新组合。通俗的讲,split阶段数据会根据我们所提供的一个或多个键拆分为多个组;apply阶段会将一个函数应用各个分组并产生一个新的值;combine阶段会将所有这些函数的执行结果合并到最终的结果对象中。必备知识必备知识数据分组数据分组是根据统计研究的需要,将原始数据按照某种标准划分成不同的组别,分组后的的数据称为分组数据。在Pandas中,数据分组我们主要依靠groupby函数,分组键可以有多种形式,可以使用Series、列表、字典、函数及多种混合分组。groupby函数语法如下:DataFrame.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=<objectobject>,observed=False,dropna=True)2.数据聚合聚合指的是任何能够从数组产生标量值的数据转换过程。在Pandas中内置了很多聚合函数,使用这些聚合函数就处理分组之后的数据,常用的聚合函数有sum、count、min、max、mean等。任务4透视表与交叉表任务描述对数据集“鞋类产品的销售数据”进行加载、清洗、标准化之后,使用数据透视表与交叉表对数据进行各个维度数据的汇总。任务分析数据透视表与交叉表是数据处理中常用的两种方式,通过透视表与交叉表的使用,可以用灵活、快速的定制分析计算要求,并且操作简单,易于理解。本任务实现的关键点是通过透视表与交叉表得到数据汇总的过程。任务实施1.透视表在数据集“鞋类产品的销售数据”中,使用数据透视表获取各省份销售额的平均值与该商品浏览次数的平均值。(1)使用index参数设置province列为数据透视表索引df=data[['province','total_price','channel','pv']]table=pd.pivot_table(df,index=['province’])table(2)使用index参数设置province、channel两列同时为数据透视表索引table=pd.pivot_table(df,index=['province','channel'])table(3)使用values参数指定筛选列values参数是待聚合列的名称,也就是需要对哪些数据进行筛选与计算。如果在筛选中没有设置values,默认聚合所有数值列,非数值列不参与计算。我们使用total_price列作为筛选值。table=pd.pivot_table(df,index=['province','channel'],values=['total_price'])table任务实施2.交叉表在数据集“鞋类产品的销售数据”中,使用交叉表统计各省份在不同销售渠道的销售次数。(1)使用crosstab进行统计pd.crosstab(df['province'],df['channel’])(2)使用crosstab进行统计并汇总crosstab可以增加margins参数来实现汇总,使用margins_name参数来指定汇总列名称。pd.crosstab(df['province'],df['channel'],margins=True,margins_name='总计')必备知识1.透视表透视表(pivottable)是各种电子表格程序和其他数据分析软件中一种常见的数据汇总工具。它根据一个或多个键对数据进行某些计算,如求和与计数等,并根据行和列上的分组键将数据分配到各个矩形区域中。在Python中,可以使用Pandas库的pandas.pivot_tables生成透视表。pandas.pivot_tables函数语法如下:pandas.pivot_table(data,values=None,index=None,columns=None,aggfunc='mean',fill_value=None,margins=False,dropna=True,margins_name='All',observed=False)在pivot_table方法中,有四个重要的参数:index、values、columns、aggfunc,下面我们一起来了解一下这几个参数的含义。(1)index参数:是设置数据透视表的层次,它是用于分组的列名或其他分组键。通过数据表要获取何种信息就按照相应的顺序设置字段,它出现在结果透视表的行。(2)values参数:在values参数中,我们也可以使用多列进行数据筛选,使用方式与index参数的使用方式相同。(3)columns参数:是用于分组的列名或其他分组键,与index参数不同,它出现在结果透视表的列,它虽然不是一个必要的参数,但是可以作为分割数据的可选方式。

(4)aggfunc参数:可以设置对数据聚合时进行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论