不少人说,数据准备工做真是个“体力活”,耗时耗力不说,还异常的枯燥无味。建模以前的数据处理确实是平淡的,它每每不须要多高的智商,多牛的编程技巧,多么高大上的统计模型。可是,它却能时时触发你的兴奋点,由于它须要足够的耐心和细心,稍不留神就前功尽弃。在此次的内容里,我首先会从“数据理解”、“变量类型”和“质量检查”三个方面进行阐述,而后会以一个本身作过的实际数据为例进行展现。ios
1、数据理解程序员
拿到数据后要作的第一步就是理解数据。什么是理解数据呢?不是简单看下有多少Excel表,有多少行,多少列,而是要结合本身的分析目标,带着具体的业务需求去看。面试
首先,咱们须要明确数据记录的详细程度,比方说某个网站的访问量数据是以每小时为单位仍是天天为单位;一份销售数据记录的是每家门店的销售额仍是每一个地区的总销售额。算法
其次,咱们须要肯定研究群体。研究群体的肯定必定和业务目标是密切相关的。比方说,若是咱们想研究用户对产品的满意度与哪些因素有关,就应该把购买该产品的全部客户做为研究群体;若是咱们想研究用户的购买行为受哪些因素影响,就应该同时考察购买人群和非购买人群,在两类人群的对比中寻找关键因素。数据库
研究群体的肯定有时也和数据的详细程度有关。好比咱们想研究“观众影评”对“电影票房”的影响,咱们既能够把“每部电影”当作一个个体,研究“影评总数”对“电影总票房”的影响,也能够把“每部电影天天的票房”当作一个个体,研究“天天的影评数”对“天天的电影票房”的影响。具体选择哪种取决于咱们手上有什么样的数据,若是只有总票房和总影评数的数据,那咱们只能选择第一种;若是有更详细的数据,那就能够考虑第二种方案。编程
须要注意的是,这两种方案还会影响咱们对于模型的选择。例如,若是研究“天天的影评数”对“天天电影票房”的影响,那每部电影又被细分为数日,同一部电影不一样时间的票房会有较高的类似性,这就造成了一种层次结构,能够考虑使用层次模型(hierarchical model)进行分析。网络
最后,当咱们肯定了研究目标和研究群体后,咱们须要逐一理解每一个变量的含义。有些变量和业务目标明显无关,能够直接从研究中剔除。有些变量虽然有意义,可是在所有样本上取值都同样,这样的变量就是冗余变量,也须要从研究中剔除。还有一些变量具备重复的含义,如“省份名称”和“省份简称”,这时只须要保留一个就能够了。分布式
2、变量类型学习
全部变量按其测量尺度能够分红两大类,一类是“分类变量”,一类是“数值变量”。不一样类型的变量在处理方法和后期的模型选择上会有显著差异。大数据
【分类变量】
分类变量又称属性变量或离散变量,它的取值每每用有限的几个类别名称就能够表示了,例如“性别”,“教育程度”,“收入水平”,“星期几”等。细分的话,分类变量又可分为两类,一类是“名义变量”,即各个类别间没有顺序和程度的差异,就像“手机系统”中ios和安卓并无明显的好坏差异,“电影类型”中“动做片”和“科幻片”也都是同样的,说不上哪一个更好或更差。另一类是定序变量,即不一样类别之间存在有意义的排序,如“空气污染程度”能够用“差、良、优”来表示、“教育程度”能够用“小学、初中、高中、大学”来表示。
当研究的因变量是分类变量时,每每对应特定的分析方法,咱们在后面的章节会陆续讲到,这里暂且不谈。当研究中的自变量是分类变量时,也会限制模型选择的范围。有些数据挖掘模型能够直接处理分类自变量,如决策树模型;但不少数据挖掘模型不能直接处理分类自变量,如线性回归、神经网络等,所以须要将分类变量转换成数值变量。
对于定序自变量,最经常使用的转换方法就是按照类别程度将其直接转换成数值自变量,例如将空气污染程度 “差、良、优”转换为“1,2,3”。
对于名义自变量,最经常使用的转换方法就是构造0-1型哑变量。例如,对于“性别”,能够定义“1=男,0=女”。当某个名义变量有K个类别取值时,则须要构造K-1个哑变量。例如教育程度“小学,初中,高中,大学及以上”,能够构造三个哑变量分别为:x1:1=小学,0=其它;x2:1=初中,0=其它;x3:1=高中,0=其它。当x1,x2,x3三个哑变量取值都为0时,则对应着“大学及以上”。
须要注意的是,有时候名义变量的取值太多,会生成太多的哑变量,这很容易形成模型的过分拟合。这时能够考虑只把观测比较多的几个类别单独拿出来,而把剩下全部的类别都归为“其它”。例如,中国一共包含56个民族,若是每一个民族都生成一个哑变量就会有55个,这时咱们能够只考虑设置“是否为汉族”这一个0-1哑变量。欢迎加入大数据学习交流分享群: 658558542 一块儿吹水交流学习(☛点击便可加入群聊)
【数值变量】
咱们再来看看数值变量。数值变量就是用数值描述,而且能够直接进行代数运算的变量,如“销售收入”、“固定资本”、“评论总数”、“访问量”、“学生成绩”等等都是数值变量。
须要注意的是,用数值表示的变量不必定就是数值型变量,只有在代数运算下有意义的变量才是数值型变量。例如财务报表的年份,上市时间等,虽然也是用数值表示的,但咱们一般不将它们按照数值型变量来处理。
上面咱们讲到,分类变量一般要转换成数值型变量,其实有些时候,数值型变量也须要转换成分类变量,这就用到了“数据分箱”的方法。为何要进行数据分箱呢?一般有如下几个缘由:
1. 数据的测量可能存在必定偏差,没有那么准确,所以按照取值范围转换成不一样类别是一个有效的平滑方法;
2.有些算法,如决策树模型,虽然能够处理数值型变量,可是当该变量有大量不重复的取值时,使用大于、小于、等于这些运算符时会考虑不少的状况,所以效率会很低,数据分箱的方法能很好的提升算法效率;
3.有些模型算法只能处理分类型自变量(如关联规则),所以也须要将数值变量进行分箱处理。
数据分箱后,可使用每一个分箱内的均值、中位数、临界值等做为这个类别的表明值,也能够直接将不一样取值范围定义成不一样的类别,如:将污染程度划分后定义为“低、中、高”等。
那如何进行数据分箱呢?经常使用的数据分箱的方法有:等宽分箱(将变量的取值范围划分红等宽的几个区间)、等频分箱(按照变量取值的分位数进行划分)、基于k均值聚类的分箱(将全部数据进行k均值聚类,所得的不一样类别即为不一样的分箱),还有一些有监督分箱方法,如:使分箱后的结果达到最小熵或最小描述长度等。这里不详细介绍了,有兴趣的童鞋能够自行百度。
3、质量检查
对数据中的各个变量有了初步了解后,咱们还须要对数据进行严格的质量检查,若是数据质量不过关,还须要进行数据的清洗或修补工做。通常来讲,质量检查包括检查每一个变量的缺失程度以及取值范围的合理性。
【缺失检查】
原始数据中常常会存在各类各样的缺失现象。有些指标的缺失是合理的,例如顾客只有使用过某个产品才能对这个产品的满意度进行评价,一笔贷款的抵押物中只有存在房地产,才会记录相应的房地产的价值状况等。像这种容许缺失的变量是最难搞的,由于咱们很难判断它的缺失是合理的,仍是因为漏报形成的。
但不管哪一种状况,若是变量的缺失率太高,都会影响数据的总体质量,由于数据所反映的信息实在太少,很难从中挖掘到有用的东西。
对于不容许缺失的变量来讲,若是存在缺失状况,就必须进行相应的处理。若是一个变量的缺失程度很是大,比方说达到了70%,那就考虑直接踢掉吧,估计没救了。若是缺失比例还能够接受的话,能够尝试用缺失值插补的方法进行补救。
插补的目的是使插补值能最大可能的接近其真实的取值,因此若是能够从其余途径获得变量的真实值,那必定优先选择这种方法。好比某个公司的财务信息中缺失了“最终控制人类型”和“是否国家控股”这两个取值,这些能够经过网上的公开信息获得真实值;再好比缺失了“净利润率”这个指标的取值,可是却有“净利润”和“总收入”的取值,那就能够经过变量间的关系获得相应的缺失值,即净利润率=净利润/总收入。
固然,更多的时候,咱们没法获得缺失值的真实信息,这时就只能借用已有的数据来进行插补了。对数值变量来讲,能够用已观测值的均值、中位数来插补缺失值;对分类型变量来讲,能够用已观测数据中出现比例最高的类别取值来进行插补。这些方法操做起来很是简单,但它们都是对全部缺失值赋予了相同的取值,因此当缺失比例较大时,可能会扭曲被插补变量与其他变量的关系。
更复杂一点的,咱们能够选择模型插补方法,即针对被插补变量和其它自变量之间的关系创建统计模型(如回归、决策树等),将模型预测值做为插补值。
如何处理缺失值是一个很大的研究课题,咱们这里只是介绍了最简单可行的方法,有兴趣的读者能够参阅Little和Rubin 2002年的专著“Statistical Analysis with Missing Data”。欢迎加入大数据学习交流分享群: 658558542 一块儿吹水交流学习(☛点击便可加入群聊)
【变量取值合理性检查】
除了缺失外,咱们还要考察每一个变量的取值合理性。每一个变量都会有本身的取值范围,好比“用户访问量”、“下载次数”必定是非负的,“投资收益率”必定在0~1之间。经过判断变量的取值是否超出它应有的取值范围,能够简单的对异常值进行甄别。
除了根据变量的取值范围来检查变量质量外,还能够根据变量之间的相互关系进行判断。例如一家公司的“净利润率”不该该大于“总利润率”等。只有经过了各个方面检测的数据才是一份高质量的数据,才有可能带来有价值的模型结果。
4、实例分析——电影票房分析
最后,咱们给出一个实例分析。在这个例子中,咱们的目标是研究电影哪些方面的特征对电影票房有影响。
咱们有两方面的数据,一是描述电影特征的数据,二是描述电影票房的数据。因为咱们关注的是北美的票房市场,因此描述电影特征的数据能够从IMDB网站获得,它是一个关于演员、电影、电视节目、电视明星和电影制做的在线数据库,里面能够找到每部上映电影的众多信息;电影天天的票房数据能够从美国权威的票房网站Box Office Mojo获得,上面记录了每部电影上映期间内天天的票房数据。
咱们将从IMDB获得的数据放到“movieinfor.csv”文件中,将从Box Office Mojo中获得的数据放到“boxoffice.csv”文件中。这里,咱们以2012年北美票房市场最高的前100部电影为例进行讲解。下表给出了这两个数据集中包含的全部变量以及相应的解释。
两个数据集中包含的全部变量以及相应的解释
在这两个数据中,movieinfor.csv数据的记录是精确到每部电影的,而boxoffice.csv数据精确到了每部电影中天天的票房数据,是精确到天的。上表中给出的变量中,除了电影名称和ID外,“电影类型”“MPAA评级”(美国电影协会对电影的评级)和“星期几”是分类型变量;“放映时长”、“制做预算”、“电影天天的票房”和“天天放映的影院数”是数值型变量。两份数据都不存在缺失值。
咱们首先对两个数据集分别进行变量预处理,而后再根据电影ID将两个数据整合到一块儿。下面给出了每一个变量的处理方法:
【电影类型】
电影类型是一个分类变量。在这个变量中咱们发现每部电影都不止一个类型,例如“The Dark Knight Rises”这部电影就有“Action”、“Crime”和“Thriller”三个类型,而且它们以“|”为分隔符写在了一块儿。同时,不一样电影之间可能有相同的类型,也可能有不一样的类型,例如票房排名第二的电影“Skyfall”,它的类型是“Action |Adventure |Thriller”。所以,咱们首先须要作的是把每部电影所属的类型逐一取出来,而后将全部出现过的类型分别造成一个0-1哑变量,若是这部电影在某个类型上出现了,则相应变量的取值就是1,不然是0.
经过上面一步,咱们知道这个数据集中出现过的全部电影类型一共有11个。那是否是按照以前所讲的,应该把它转换为10个哑变量呢?这里须要注意的是,全部的电影类型之间并非互斥的(即有了action,就不能有其余的类型),因此咱们无需由于共线性的缘由去掉其中一个。也就是说,若是把每个电影类型单独做为一个独立的变量,能够衍生出11个新的0-1变量,这彻底没有问题。但11个变量未免有点过多,因此咱们根据不一样电影类型的频数分布状况,只把出现次数明显较多的类型单独拿出来,最终生成了6个0-1型变量,分别为Adventure,Fantasy,Comedy,Action,Animation,Others。
【MPAA评级】
对于这个分类型变量,咱们首先能够看一下数据中它所包含的所有取值,发现一共有“PG”,“PG-13”和“R”三个。和上面的电影类型(Genre)不一样,对于一部电影而言,它只能有一个MPAA取值。所以,在MPAA变量中,咱们须要选择一个做为基准,将另外两个构形成哑变量。例如,咱们以“PG”为基准,构造的两个哑变量分别为PG13和R,若是这两个哑变量的取值同时为0,那就至关于电影的MPAA评级是PG。
【放映当天是星期几】
这个变量同MPAA评级同样,每部电影只能有一个取值。若是它在星期一到星期日上都有取值的话,咱们能够衍生出6个0-1型哑变量。由于这里咱们更关注周末和非周末对电影票房的影响,而并不关注具体是哪一天,因此咱们将其进一步归纳成一个变量,即“是不是周末”。
【放映时长和制做预算】
放映时长和制做预算这两个变量都是取值大于0的数值型变量,咱们能够分别检查它们的取值是否在合理的范围内,而后直接保留它们的数值信息。同时,对“制做预算”而言,假设咱们这里关心的不是制做预算的具体数值,而是“小成本电影”和“大成本电影”的票房差别,那咱们就能够将这个数值型变量进行分箱处理,转换为一个0-1型的分类变量,即 “是否为小成本电影”。在决定按照什么标准来划分是否为小成本电影时,咱们根据以前文献里的研究结果,将制做预算在100 million如下的电影当作是小成本电影。
上述全部变量的处理过程均可以使用R中最基本的语句(table,rep,which等)完成,因为篇幅限制,小编这里就不列出详细的code了,你们感兴趣的话,能够阅读狗熊会的“R语千寻”系列(戳这里),相信会在R语言的学习上受到更多启发。最后,咱们将全部新生成的变量按照电影ID整合到一块儿,就大功告成啦。
5、总结
最后总结一下,小编在此次内容中向你们介绍了拿到数据后的数据理解和预处理工做,内容虽然不难,但一样须要咱们认真对待。就好像生活同样,只有踏踏实实走好前面的路,才有可能迎接后面的高潮迭起!
结语
感谢您的观看,若有不足之处,欢迎批评指正。
若是有对大数据感兴趣的小伙伴或者是从事大数据的老司机能够加群:
658558542 (☛点击便可加入群聊)
里面整理了一大份学习资料,全都是些干货,包括大数据技术入门,海量数据高级分析语言,海量数据存储分布式存储,以及海量数据分析分布式计算等部分,送给每一位大数据小伙伴,这里不止是小白汇集地,还有大牛在线解答!欢迎初学和进阶中的小伙伴一块儿进群学习交流,共同进步!
最后祝福全部遇到瓶颈的大数据程序员们突破本身,祝福你们在日后的工做与面试中一切顺利。