Python数据分析入门与实战
上QQ阅读APP看书,第一时间看更新

1.3 数据处理

数据处理有两种不同的含义。广义的数据处理包括所有的数据采集、存储、加工、分析、挖掘和展示等工作;而狭义的数据处理仅仅包括从存储的数据中提取、筛选出有用的数据,对有用的数据进行加工的过程是为“数据分析”和“挖掘的模型”所做的准备工作。

1.3.1 数据处理的含义

在数据分析的过程中“数据处理”的定义是比较明确的,即对数据进行增加、删除、修改和查询等操作。在目前的大数据背景下,数据处理工作往往是通过技术手段来实现的,例如,利用数据库的处理能力对数据进行增加、删除、修改和查询等处理。在数据处理过程中最大的工作是对数据进行清洗,让数据更加规范,让数据的结构更加合理,让数据的含义更加明确,并且让数据处在数学模型的可用状态

1.3.2 脏数据

对脏数据的处理是一项非常重要的工作。若是没有处理好脏数据,就不能很好地进行数据分析。在实际的操作过程中,使用NumPy、Pandas这样的工具来进行脏数据的处理。那什么样的数据称为脏数据呢?一般而言,把记录不规范、格式错误、含义不明确的数据称为“脏数据”,主要包括以下几种。

1.不规范的数据

不规范的数据很常见。例如,同样是人名“李白”,用户A记录为“李白”,用户B可能记录为“李 白”。类似的情况同样会发生在地址字段中,例如,“北京”“北京市”“北 京”等词汇都是指“北京”,对读者而言极易分辨,但对计算机来说,这3种写法代表着3个不同的值,需要通过建立映射关系将数据记录格式统一。每个人都有不同的喜好和记录数据的方式,这给计算机识别造成了很大的困难,一个公司应该有一个明确的规定,要统一数据的录入格式。

2.数据不一致

数据不一致的情况往往是由于没有遵循“单维数据表”的原则导致的。例如,同一条信息在不同的数据表甚至数据库中都有记录,当对此条信息进行更改后,因为没有同时对所有的数据表都做相同的更改,从而会发生数据不一致的情况。为了避免这种情况,就引入了“单维数据表”的概念,强调公司内部的同一条信息只能记录在一个地方,当其他地方需要时,可以使用索引查询的方式,从而保证数据的一致性,在任何数据表中存在其他表中的数据时,都要在查询输出时进行“同步”更新。数据的一致性虽然在技术上比较容易实现,但是要在企业经营实践中实现却有着巨大的难度。因为不同的部门之间会采用不同的信息管理系统,很容易产生数据不一致的情况。上述的这种情况在大多数公司中都存在并且很严重。

3.标准不统一

需要对一些事物的描述方法建立统一的标准,从而让计算机可以有效地处理文本数据。例如,在描述导致产品出现质量问题的原因时,大多数情况下是手工输入的,同样的原因,输入的描述会有不同。同样是描述因为电压不稳导致的产品质量问题,有的人会输入为“电压不稳定”,有的人会输入为“供电问题”……如果没有统一的规范,在统计汇总数据时会产生上千个导致产品质量问题的原因,这给数据解读、分析及寻找改善措施带来了很大的麻烦。这就需要数据库管理员根据公司的实际情况,将该类原因进行归纳,然后设定几个类别,让员工在系统中进行选择,而不是手工输入。一般情况下,出现最多的前10个原因能够覆盖90%以上的情况,在输入时先让员工选择,然后留出一个“其他”选项,当员工选择“其他”选项后才能手工输入,这样就有效地解决了数据输入标准化问题。

4.格式不标准

所谓的格式不标准是指在输入数据时使用了错误的格式。例如,在输入日期时,因为格式不规范,计算机不能自动识别为日期格式。这种问题比较容易处理,可以在信息系统中设定相关的数据校验,如果输入的数据格式不正确,系统会弹出数据输入格式错误的警告。因此这种“脏数据”的出现是比较容易避免的,甚至完全可以人为避免。

5.附加字段

在清洗数据时,往往需要添加新的字段以便数学模型可以直接处理数据。例如,数据库中可能没有直接的字段来记录员工的工龄,这就需要在添加工龄字段后,通过入职日期来计算;而员工的年龄则通过出生日期来计算。

1.3.3 数据清洗

既然采集的数据中可能有脏数据,那就非常有必要进行数据清洗。所谓的数据清洗,就是对原始数据进行规范化的处理,去除其中的垃圾数据,消除数据的不一致性,并对某些数据进行加工,以便数据处理软件和数据模型能够直接使用。数据清洗是用户进行数据分析的重要前提,目的是为了提高数据的质量,为数据分析准备有效的数据集。

在实际的企业生产过程中,一般使用特定的工具来进行数据清洗。例如,使用Excel可以对数据进行一系列的转换操作。如果数据的规律性很强,数据量很大,那么还可以采用Python编程的方式来实现。数据清洗是占用数据分析师时间最长的工作任务,虽然此项工作的价值产出很低,同时也耗费了大量的时间,但是这个工作是必不可少的。在数据采集、数据存储和数据传输的过程中,有效提高数据的质量,保证数据的准确性,数据清洗工作的任务可以大幅度减少。而在这个过程中, 数据采集的方式、方法以及自动化智能设备的使用是大幅度提高数据质量的关键手段。

要想在数据清洗环节节省人力资源,就需要在数据系统中加入数据的校验,并制定相关的数据规范,使数据在录入时就是规范的、高质量的。即使是一些用户端口的数据,在输入时也要加入校验工作,通过示例的方式提醒用户按照一定的规则来输入数据。数据清洗一般占数据分析师工作量的20%以上,而且数据质量越差,这个比例越高。其实提高数据清洗速度最有效的办法就是规范数据采集和数据记录,从源头把控数据质量。如果源头数据的质量不高,则数据清洗工作不仅会洗掉脏的数据,甚至有时还会洗掉某些有价值的数据,导致数据信息的丢失。

程序化方法是提高数据清洗工作效率的有效手段。面对的数据集比较大时,如果手工一个一个检查并清洗,则需要耗费大量的人工时间。可以对不规范、不完整或者不相关的数据进行分析,总结存在的规律性,然后用软件自动化完成数据的清洗。寻找数据的规律是用程序代替人工清洗的基础。即使是使用Excel进行数据清洗,使用透视表+映射表的方式会比使用手工查找+替换的方式快很多。

数据清洗工作另外一个非常重要的原则就是:给自己留下反悔的余地。清洗数据时尽量不要破坏原始数据。不能在原始数据集上直接修改,如果修改了某些有价值的数据,可能很难再找回来;如果发生了错误,结果是灾难性的。所以要先备份数据再清洗。例如,想要规范日期格式,可以在Excel中添加一列,保留之前的日期数据,为了美观,可以采取隐藏的方式,但是不能直接将其删除或者替换。这里特别要强调的是,在对数据进行清洗时,禁止使用查找+替换的方式,这种方式改变了原始数据,如果发生错误,而Excel的撤销功能又不能启用,即使保留了原始数据副本,可能之前的数据清洗工作也会白做。当数据量非常大时,在做任何有可能让数据集发生改变的操作之前都要做好数据备份工作

举一个典型的例子,在输入一些关键信息时(如城市),如果用户在输入数据时不是通过下拉列表选择的,那么填写的信息肯定五花八门,虽然人工能够识别,但计算机不能识别。所以可以通过透视表功能将所有的城市进行统计汇总,然后人工识别后建立映射表,再把原始的地址映射回去,从而将地址字段中的城市名称标准化为一个唯一值,之后对数据以城市为单位进行统计汇总时,数据才会准确。也可以利用第三方工具进行数据清洗。这类工具一般都比较昂贵,所以要慎重选择,并且最好购买对方的服务。当数据清洗效果不佳时,要让对方的技术人员参与,制定更加符合自己的数据集的“字典”。目前国际上比较先进的第三方数据清洗工具对国内的企业来说都不太好用,这主要是由中文的词语结构问题导致的,大多数的数据清洗工具都是针对文本类和数字类数据的,中文的词语结构与西方各种语言的词语结构有着较大的差别,所以在数据清洗上有一定的局限性。购买软件公司的服务可以优化数据清洗的质量,如果企业的数据量达不到TB级别,就没有必要购买这样的服务。