概述

数据挖掘的第一步工作是数据准备,而数据准备的第一步就是数据质量分析了。本篇文章着重介绍如何使用Python进行数据质量分析的初步工作,属于比较基础的入门教程。

为什么要进行数据质量分析

根据百度百科的定义,数据挖掘是指从大量的数据中通过算法搜索隐藏于其中信息的过程。

我们在生活、工作中无时无刻不在产生数据。整个自然界、人类社会更是每天都会产生大量的数据。数据是客观存在的,不会以某一个人的意志为转移。而相对于某一个人或某一个个体,他可能只关心数据中的某些有价值的信息,这就需要在浩瀚的数据海洋中捞取那几条他喜欢吃的鱼。

由于数据来源、数据传输环节、数据储存过程等都有可能使数据被污染,所以我们在使用数据之前非常有必要对数据的质量进行评估。质量评估的工作可能包括:将缺失的数据补齐、对一些异常值进行处理、使数据保持一致性等。

数据质量分析这个事,和我们把碗盘摆进洗碗机之前做的事比较像。

数据质量分析的一般流程

凡事皆有章法,数据质量分析也不例外。数据质量分析的一般流程如下:

  1. 首先,我们要先把数据导入我们数据质量分析的框框之内。也就是说,我们想要对之进行质量分析的数据,你首先要从别的地方给拿过来。这个工作可能是把数据从硬盘中读入内存中年,或者从其它业务系统把数据给提取出来等等。
  2. 其次,我们要先重点处理其中缺失的值。比如说我们要分析一个班的同学的成绩分布情况,首先当然是要先把没有成绩的同学找出来,看是忘记录入成绩了还是转专业走了。根据实际情况,我们可能需要对缺省的值进行补齐、或者直接删除那条缺少了数据的整条记录。
  3. 接下来,要对数据中的异常数据进行处理了。异常数据,往往是指的明显不合常理的数据。比如说:一个人的年龄260岁、一个学生的单科成绩是152分(满分150分)等等。当然,实际数据处理中异常值不会如此简单。实际中的不合常理的这个理,就是我们给这批数据制定一条规则,对不符合这条规则的数据我们都看成异常值。比如3σ原则,指的是服从正态分布的一组数据,如果方差为σ,那么一个数与平均值的差的绝对值大于3σ的概率非常小(小于等于0.003)。举个例子来讲就是,如果一个国家的平均身高是1.7米、方差是0.1米的话,你在大街上遇到一个2米身高的人的概率只有0.003,换句话说如果你采集到的身高的数据里出现了很多身高2米的人,你就有理由怀疑你的尺子出问题了。
  4. 异常数据分析还有一种常用的方法叫箱型图分析。就是,一组数我们按照一定方法规定一个上边界、一个下边界,超出上下边界的数就认为是异常值。而上边界,我们这样来定义,如果一个数值Qu,这组数中75%的数都小于它,我们把这个数定义为上四分位数。类似方法,我们定义一个下四分位数Ql。那在Qu的基础上再加上1.5倍的(Qu-Ql),定义为上边界;在Ql的基础上减去1.5(Qu-Ql),定义为下边界。
  5. 数据一致性分析,简单说就是同一条记录的同一个属性可能有两个不同的值,导致数据不一致。比如,学校的健康系统记录了一个孩子的身高、体重数据、社区医院的系统里面也记录了这个孩子的身高、体重数据,但是因为采集时间点不一样,这两个数据是不一样的,更高一级的数据挖掘系统把这两个业务系统关于这个孩子的身高、体重数据提取过来后,就出现了不一致这个问题。

下面我们通过要一个简单的例子来看看利用Python进行数据质量分析的一般流程。

凡事皆有章法

一个简单的例子

这个例子很简单。我们假设有一组数据,然后我们使用箱型图法把这组数据中的异常值给剔出来。

箱型图的概念很容易理解,如下图所示。只要把上四位数Qu、下四位数Ql找出来就可以了,在Python中要完成这个工作非常容易。

箱型图示例

我们需要用到pandas库,所以先把pandas库引入进来

import pandas as pd

接下来,我们把数据从硬盘读入内存,假设我们的数据名称是"atering_sale.xls"。数据源是后面标注的参考书中第一个案例数据。使用下面这两行命令来读取:

catering_sale = '../data/catering_sale.xls'
data = pd.read_excel(catering_sale, index_col=u'日期')

上面代码中,我是把实验室据放在data目录下、python文件放在code目录下,也就是说运行这个python文件的时候把运行环境的当前路径改在了code这个目录下。然后使用"../"找到code的上一级目录,然后再找上级目录的data子目录下的catering_sale.xls文件。

第二行,调用pandas的read_excel函数读取excel文件。其中的index_col参数是指将excel文件中的“日期”这一列指定为行的索引。

Python文件在code目录下

read_excel方法返回的是一个DataFrame,查看返回值data的前5行如下图所示:

data前5行

接下来,导入matplotlib,代码如下:

import matplotlib.pyplot as plt #导入图形库
plt.rcParams['font.sans-serif']=['Simhei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

然后,建立一个图例,使用DataFrame的boxplot方法画箱型图。

最关键的一行就是"p = data.boxplot(return_type='dict') #画箱线图",这一行返回的是一个字典项的量。它的fliers里面记录了异常值。

然后使用下面的命令,把异常值标记到plt的figure上。

for i in range(len(x)): if i>0:plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.05 -0.8/(y[i]-y[i-1]),y[i]))else:plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.08,y[i]))

然后调用show命令把画好的图显示出来就行了。

plt.show() #展示箱线图

结果如下:

箱型图

参考:

《Python数据分析与挖掘实战》,张良均 著,机械工业出版社。

python如何读dat数据_如何用Python进行数据质量分析相关推荐

  1. python向数据库写入数据_如何用Python向Mysql中插入数据

    我们使用Python经常会和Postgresql进行搭配,很少将python和mysql进行搭配.下面小编给大家分享如何用Python向Mysql中插入数据. 工具/原料 Pycharm 方法/步骤 ...

  2. python删除excel第一行_如何用 Python 清洗数据?

    林骥的第 38 篇文章 0. 序言在做数据分析之前,我们首先要明确数据分析的目标,然后应用数据分析的思维,对目标进行细分,再采取相应的行动.我们可以把数据分析细分为以下 8 个步骤:(1)读取(2)清 ...

  3. 怎么用python分析数据_如何用python进行数据分析?

    .Python数据分析流程及学习路径 数据分析的流程概括起来主要是:读写.处理计算.分析建模和可视化四个部分.在不同的步骤中会用到不同的Python工具.每一步的主题也包含众多内容. 根据每个部分需要 ...

  4. python 处理大量数据_如何用python处理大量数据

    一般来说,用pandas处理小于100兆的数据,性能不是问题.当用pandas来处理100兆至几个G的数据时,将会比较耗时,同时会导致程序因内存不足而运行失败. 当然,像Spark这类的工具能够胜任处 ...

  5. python爬实时数据_如何用python爬取实时更新的动态数据?

    爬虫实时更新 互联网是绝对豪爽的数据源.不幸的是,倘若没有轻易构制的CSV文献可供下载和说明,则绝大部门.倘若要从很众网站拘捕数据,则必要测验举办收集抓取. 倘若您照样一个初学者,请不要忧愁-正在数据 ...

  6. python中文模糊关键词提取_如何用Python提取中文关键词?

    本文一步步为你演示,如何用Python从中文文本中提取关键词.如果你需要对长文"观其大略",不妨尝试一下. 需求 好友最近对自然语言处理感兴趣,因为他打算利用自动化方法从长文本里提 ...

  7. 怎样用python搭建简单的系统_如何用Python搭建一个简单的推荐系统?

    推荐系统的相关知识我们已在前文中提到,在这篇文章中,我们会介绍如何用Python来搭建一个简单的推荐系统. 本文使用的数据集是MovieLens数据集,该数据集由明尼苏达大学的Grouplens研究小 ...

  8. python简单可视化聊天界面_如何用Python制作可视化输入界面

    继续研究Python的应用,我们在有些程序中需要输入一些参数,可由几种方式实现 1.直接写在程序里,适合编程使用 2.使用input()函数,运行程序时输入 3.做成可视化界面,然后让程序获得 今天主 ...

  9. 用python做预测模型的好处_如何用Python在10分钟内建立一个预测模型

    匿名用户 1级 2017-01-01 回答 预测模型的分解过程 我总是集中于投入有质量的时间在建模的初始阶段,比如,假设生成.头脑风暴.讨论或理解可能的结果范围.所有这些活动都有助于我解决问题,并最终 ...

最新文章

  1. finecms设置伪静态后分享到微信不能访问怎么处理
  2. 学习Redis持久化
  3. 【转】TcpListener和tcpclient使用
  4. python编程胡牌将是什么意思_python麻将和牌算法
  5. SQL允许你用EXECUTE执行一个变量中定义的SQL语句,并且允许你在被执行的SQL语句中,再次嵌套入一个变量定义的语句,并且再次在其中用EXECUTE执行它...
  6. HTML基本标签和一些注释的问题
  7. 工行基于MySQL构建分布式架构的转型之路
  8. SPSS检验是否为正态分布
  9. mysql cpu 100%_mysql占用资源CPU超过100%解决方法
  10. 7月1日天刀服务器维护,天涯明月刀7月1日满级新服_天刀满级新服天命风流入君怀_3DM网游...
  11. origin柱状图坐标标签_使用Origin绘制双Y轴柱状图的方法
  12. 七牛云存对象存储及域名设置
  13. java使用ffmpeg将视频转码
  14. 怎么把桌面添加到计算机的收藏夹,电脑浏览器怎么把书签添加到桌面
  15. 传奇开服怎么开服?不会技术自己能开服吗?传奇开服需要准备什么?前期需要投入多少?
  16. web页面:浏览器操作
  17. JVM系列(十三)——垃圾回收器
  18. 贝叶斯公式理解(先验概率/后验概率)
  19. Android user版通过adb_enable开启adb 调试 不提示对话框
  20. linux pyinstaller打包python文件

热门文章

  1. 控制台程序如何加图标
  2. MapInfo数据到ARCGIS数据Shapefile的转换
  3. 在Silverlight中绘制贝塞尔曲线
  4. 程序员四大忌 你该如何避免呢?
  5. VLC播放器web插件接口(Part2)
  6. oracle查看被锁的表和解锁
  7. SDWC2017游记
  8. [路由] -- Yii2 url地址美化与重写
  9. DbExpressionBinding requires an input expression with a collection ResultType. 参数名: input
  10. WinPhone 开发(1)-----在 XAML 页面之间浏览和数据的传递、保留以及恢复