数据导入与预处理技术复习

数据导入与预处理技术复习笔记

本文由本人学习过程中总结,难免有纰漏,欢迎交流学习

第1章 为什么需要数据处理

本章内容将涵盖以下几个方面:

为什么需要数据处理

关于数据科学的六个简单处理步骤,包括数据清洗;
与数据预处理相关的参考建议
对数据清洗有帮助的工具
一个关于如何将数据清洗融入整个数据科学过程的入门实例在数据分析、挖掘、机器学习或者是可视化之前,做好相关的数据预处理工作意义重大。这个数据预处理的过程不是一成不变的,是一个迭代的过程,在实际的工作中,需要不止一次的执行数据预处理。所采用的数据挖掘或分析方法会影响清洗方式的选取。数据预处理包含了分析所需要的各种处理数据的任务:如交换文件的格式、字符编码的修改、数据提取的细节等。数据导入、数据存储和数据清洗是数据预处理中密切相关的技术。搜集原始数据->存储->数据清洗->存储->增量搜集数据->合并存储数据->数据挖掘(大数据、人工智能)->数据可视化;

有三种处理方案可以选择:

什么都不处理:忽略这些错误数据,直接开始构建线形图。如果直接数据可视化,这样的结果是,有用的数据被掩盖了。
修正数据:算出错误消息的正确数据,采用修订后的数据集来可视化。
扔掉错误数据:放弃错误数据。

为了在选项二和三之间做个选择,计算错误数据实际上这些只占到了数据量的百分之一。因此,选择选项三,扔掉这些数据。

利用Google的Spreadsheets能在初始数据中缺少日期的情况下,在x轴自动进行零值数据补齐,创建线性图或者条状图。 在以上的数据集中,需要补齐的零值就是所缺失的数据。

1.6 小结

从以上的实例看出,数据预处理占了整个过程的80%的工作量;
数据预处理是数据科学过程的关键部分,不仅涉及对技术问题的理解,还需要做出相应的价值判断;

第二章 数据预处理

为什么对数据进行预处理
描述性数据汇总
数据清理
数据集成和变换
数据归约
离散化和概念分层生成

脏数据

不完整

缺少数据值;缺乏某些重要属性;仅包含汇总数据;
e.g., occupation=""

有噪声

包含错误或者孤立点
e.g. Salary = -10

扫描二维码关注公众号,回复: 8619346 查看本文章
数据不一致

e.g., 在编码或者命名上存在差异
e.g., 过去的等级: “1,2,3”, 现在的等级: “A, B, C”
e.g., 重复记录间的不一致性
e.g., Age=“42” Birthday=“03/07/1997”

不完整数据的成因

数据收集的时候就缺乏合适的值
数据收集时和数据分析时的不同考虑因素
人为/硬件/软件 问题

噪声数据(不正确的值)的成因

数据收集工具的问题
数据输入时的 人为/计算机 错误
数据传输中产生的错误

数据不一致性的成因

不同的数据源
违反了函数依赖性

数据预处理为什么是重要的?

没有高质量的数据,就没有高质量的挖掘结果

高质量的决策必须依赖高质量的数据
e.g. 重复值或者空缺值将会产生不正确的或者令人误导的统计
数据仓库需要对高质量的数据进行一致地集成

数据预处理将是构建数据仓库或者进行数据挖掘的工作中占工作量最大的一个步骤

数据质量的多维度量

一个广为认可的多维度量观点:

精确度
完整度
一致性
合乎时机
可信度
附加价值
可解释性

跟数据本身的含义相关的

内在的、上下文的、表象的以及可访问性

数据预处理的主要任务

数据清理

填写空缺的值,平滑噪声数据,识别、删除孤立点,解决不一致性

数据集成

集成多个数据库、数据立方体或文件

数据变换

规范化和聚集

数据归约

得到数据集的压缩表示,它小得多,但可以得到相同或相近的结果

数据离散化

数据归约的一部分,通过概念分层和数据的离散化来规约数据,对数字型数据特别重要

基本统计类描述的图形显示

常用的显示数据汇总和分布的方法:

直方图、分位数图、q-q图、散布图和局部回归曲线

直方图:一种单变量图形表示方法

将数据分布划分成不相交的子集或桶,通常每个桶宽度一致并用一个矩形表示,其高度表示桶中数据在给定数据中出现的计数或频率

数据清理任务

填写空缺的值
识别离群点和平滑噪声数据
纠正不一致的数据
解决数据集成造成的冗余

空缺值

数据并不总是完整的

例如:数据库表中,很多条记录的对应字段没有相应值,比如销售表中的顾客收入

引起空缺值的原因

设备异常
与其他已有数据不一致而被删除
因为误解而没有被输入的数据
在输入时,有些数据应为得不到重视而没有被输入
对数据的改变没有进行日志记载

空缺值要经过推断而补上

如何处理空缺值

忽略元组:当类标号缺少时通常这么做(假定挖掘任务设计分类或描述),当每个属性缺少值的百分比变化很大时,它的效果非常差。
人工填写空缺值:工作量大,可行性低
使用一个全局变量填充空缺值:比如使用unknown或-∞
使用属性的平均值填充空缺值
使用与给定元组属同一类的所有样本的平均值
使用最可能的值填充空缺值:使用像Bayesian公式或判定树这样的基于推断的方法

噪声数据

噪声:一个测量变量中的随机错误或偏差

引起不正确属性值的原因

数据收集工具的问题
数据输入错误
数据传输错误
技术限制
命名规则的不一致

其它需要数据清理的数据问题

重复记录
不完整的数据
不一致的数据

如何处理噪声数据

分箱(binning):

首先排序数据,并将他们分到等深的箱中
然后可以按箱的平均值平滑、按箱中值平滑、按箱的边界平滑等等

回归

通过让数据适应回归函数来平滑数据

聚类:

监测并且去除孤立点

计算机和人工检查结合

计算机检测可疑数据,然后对它们进行人工判断

数据清理作为一个过程

第一步:偏差检测

使用元数据(e.g. 每个属性的域、数值类型、依赖性、分布等)
检查字段过载
检查唯一性规则、连续性规则、空值规则
使用偏差检查工具
数据清理工具:使用简单的领域知识(e.g.邮编、拼写检查)检查并纠正数据中的错误
数据审计工具:通过分析数据发现规则和联系及检测违反这些条件的数据来发现偏差

第二步:数据变换(纠正偏差)

数据迁移工具:允许说明简单的变换
ETL(提取/变换/装入)工具:允许用户通过GUI说明变换

偏差检测和数据变换(纠偏)的迭代执行
强调交互性的清理方法

数据变换

数据变换将数据转换或统一成适合挖掘的形式

平滑:去除数据中的噪声
聚集:汇总,数据立方体的构建
数据泛化:沿概念分层向上汇总
规范化:将数据按比例缩放,使之落入一个小的特定区间
最小-最大规范化
z-score规范化
小数定标规范化
属性构造
通过现有属性构造新的属性,并添加到属性集中;以增加对高维数据的结构的理解和精确度

数据归约

为什么需要进行数据规约?

数据仓库中往往存有海量数据
在整个数据集上进行复杂的数据分析与挖掘需要很长的时间

数据归约

数据归约可以用来得到数据集的归约表示,它小得多,但可以产生相同的(或几乎相同的)分析结果

常用的数据归约策略

数据立方体聚集
维归约,e.g. 移除不重要的属性
数据压缩
数值归约,e.g. 使用模型来表示数据
离散化和概念分层产生

用于数据归约的时间不应当超过或“抵消”在归约后的数据上挖掘节省的时间

离散化

三种类型的属性值:

名称型:无序集合中的值;e.g. 颜色、职业
序数:有序集合中的值; e.g. 军衔、职称
连续值;e.g. 实数

离散化

将连续属性的范围划分为区间
有些分类算法只接受离散属性值
通过离散化有效的规约数据
离散化的数值用于进一步分析

典型方法(所有方法均可递归应用)

分箱(binning)
分箱技术递归的用于结果划分,可以产生概念分层
直方图分析(histogram)
直方图分析方法递归的应用于每一部分,可以自动产生多级概念分层
聚类分析
将数据划分成簇,每个簇形成同一个概念层上的一个节点,每个簇可再分成多个子簇,形成子节点
基于熵的离散化
通过自然划分分段

3 基础知识 --格式、类型与编码

文件格式

在实际问题中,处理的实际数据常常是五花八门的格式,因此,每一种文件格式的处理方法都是有局限性的;

文本文件类型

常见的文本文件格式

经常处理的数据文本文件主要有三种:
分隔格式(结构化数据);
JSON格式(半结构化数据);
HTML格式(非结构化数据);

(1)查看不可见的字符

(2)封闭错误数据

数据本身含有分隔符

方法一:在存成分隔文件之前,再进行预处理,去掉所有的数据分身含有分隔符的情况;

方法二:使用额外的符号来对数据进行封闭处理;
129,000 --> “129,000”

字符转义

数据本身含有引号,需要通过另外的一个特殊字符来对数据内部的引号进行转义,比如反斜线””。

JSON格式

半结构化数据集的特点是数据值都有其对应的属性标识,而且顺序无关紧要,有时甚至缺失某些属性。JSON是以属性-值为基础的数据集。

属性放在冒号左边,值放在冒号右边。每个属性之间采用逗号进行分割。整个实体采用花括号进行封闭处理。
JSON与分隔文件类似,不同的是:
1. JSON的字符串的值必须使用双引号进行封闭处理;
2. 字符串内部的双引号必须使用反斜线进行转义。
(转义字符是)
3. 逗号不能出现在数字类型的数据中,除非这个值被当做字符串使用并用引号封闭。

HTML格式

HTML文件,也称为网页文件,是一种文本格式文件,经常夹杂着冗余的数据。

归档与压缩

在什么情况下,一个文件既是文本文件,同时也是二进制文件呢?

压缩和归档的时候。
现实中的许多数据(特别是分隔数据)都是以压缩后的方式存储和传输的。

数据类型、空值与编码

数据类型间的相互转换

数据损耗

从一种数据类型转换到另一种数据类型的过程中,有时会产生数据损耗。目标数据类型无法保存与原始数据类型同样多的信息时,损耗就会发生。
同种类型的不同范围的转换:假如你有个字符串类型的字段,其长度为200个字符,如果将其转换到只能容纳100个字符的字段上,超过100个字符的数据就会被丢弃或截取。这种情况也发生在不同范围的数字类型字段上,例如从长整数类型向一般长度的整数类型转换,或者是从整数类型向长度更小的整数类型转换。

第4章 数据清洗的常用工具 --电子表格和文本编辑器

电子表格中的数据清洗

电子表格在数据清洗方面的功能主要体现在两个方面:
(1).可以将数据组织成列或行;
(2).完成数据清洗;

文本编辑器里的数据清洗

文本调整

查找与替换

排序与去重

5 Python科学计算与数据处理

​ pandas含有使数据分析工作变得更快更简单的高级数据结构和操作工具。它是基于NumPy构建的,让以NumPy为中心的应用变得更加简单。

Series

​ Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组 与之相关的数据标签(即索引)组成。仅由一组数据即可产生最简单的Series:

Series的字符串表现形式为:索引在左边,值在右边。由于没有为数据指定索引, 于是会自动创建一个0到N-1 (N为数据的长度)的整数型索引。可以通过Series的 values和index属性获取其数组表示形式和索引对象:

与普通NumPy数组相比,可以通过索引的方式选取Series中的单个或一组值:

​ NumPy数组运算(如根据布尔型数组进行过滤、标量乘法、应用数学函数等)都会保留索引和值之间的链接:

还可以将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射。它 可以用在许多原本需要字典参数的函数中:

DataFrame

​ DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类 型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。跟其他类似的数据结构相比(如R的data. frame),DataFrame中面向行和面向列的操作基本上是平衡的。其实,DataFrame中的 数据是以一个或多个二维块存放的(而不是列表、字典或別的一维数据结构)。

处理缺失数据

缺失数据(missing data)在大部分数据分析应用中都很常见。pandas的设计目标之一就是让缺失数据的处理任务尽量轻松。例如,pandas对象上的所有描述统计都排除了缺失数据。
pandas使用浮点值NaN (Not a Number)表示浮点和非浮点数组中的缺失数据。它只是一 个便于被检测出来的标记而已:

NA处理方法

方法 说明
dropna 根据各标签的值中是否存在缺失数据对轴标
签进行过滤,可通过阈值调节对缺失值的容
忍度
fillna 用指定值或插值方法(如ffill或bfill)填充缺
失数据
isnull 返回一个含有布尔值的对象,这些布尔值表
示哪些值是缺失值/NA,该对象的类型与源
类型一样
notnull isnull 的否定式

层次化索引

层次化索引(hierarchical indexing)是pandas的一项重要功能,它能在一个轴上拥 有多个(两个以上)索引级别。抽象点说,它使能以低维度形式处理高维度数据。 先来看一个简单的例子:创建一个Series,并用一个由列表或数组组成的列表作为索引

层次化索引在数据重塑和基于分组的操作(如透视表生成)中扮演着重要的角色。可通过其unstack方法被重新安排到一个DataFrame中

6 Python透视表技术

Series

Series

DataFrame

DataFrame

透视表

透视表是一种可以对数据动态排布并且分类汇总的表格格式。或许大多数人都在 Excel 使用过数据透视表,也体会到它的强大功能,而在 pandas 中它被称作 pivot_table。

为什么要使用 pivot_table?

灵活性高,可以随意定制你的分析计算要求
脉络清晰易于理解数据
操作性强,报表神器

pivot table

7 聚类

K-means 算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。动图来源.
k 个初始类聚类中心点的选取对聚类结果具有较大的影响,因为在该算法第一步中是随机的选取任意 k 个对象作为初始聚类的中心,初始地代表一个簇。该算法在每次迭代中对数据集中剩余的每个对象,根据其与各个簇中心的距离将每个对象重新赋给最近的簇。当考察完所有数据对象后,一次迭代运算完成,新的聚类中心被计算出来。如果在一次迭代前后,J 的值没有发生变化,说明算法已经收敛。

聚类

猜你喜欢

转载自www.cnblogs.com/esllovesn/p/12196775.html