数据清洗

个人已将图书和个人笔记上传至CSDN资源

地址:https://download.csdn.net/download/qq_37865996/10518179

 

 

干净的数据——数据清洗入门与实践

第一章 为什么要清洗数据

数据科学过程:识别问题->数据收集与存储->数据清洗->数据分析和机器学习->数据展现和可视化实现->问题决议。

 

第二章 基础知识——格式、类型与编码

1. 文件格式

(1)文本文件和二进制文件

① 文件的打开和读写

a) .xlsx为扩展名的Excel文件,以.docx为扩展名的Word文件、以.pptx为扩展名的Powerpoint文件;

b) .png.jpg.gif为扩展名的图形文件;

c) .mp3.ogg .wmv.mp4为扩展名的音乐和视频文件;

d) .txt为扩展名的文本文件。

②深入文件内部

(2)常见的文本文件格式

目前关注三种:分隔格式(结构化数据)JSON格式(半结构化数据)、HTML格式(非结构化数据)。

分隔格式:

JSON格式:

2. 归档与压缩

(1)归档

操作语句:tar cvf fileArchive.tar reallyBigFile.csv anotherBigFile.csb

逆操作:tar xvf fileArchive.tar

查阅.tar文件的基本信息:tar -tf fileArchive.tar

(2)压缩

普遍使用.zip格式文件

3. 数据类型、空值与编码

(1)数据类型

① 数字类型数据

a. 整数(正数、负数,整数范围?)

b. 小数(小数部分的长度、精度)

c. 数字/非数字(能否参与数学计算)

② 日期和时间

③ 字符串

④ 其他数据类型(如:集合/枚举、布尔、Blob

2)数据类型间的相互转换

数据损耗问题:同种类型间的不同范围转换;不同精度间的转换。

3)转换策略

① 基于SQL的操作

例一:调整时间格式 2000-01-21 045100451amFridayJanuary 212000

a. concat()和日期时间函数结合起来使用

 

b. 使用data_format()函数

 

例二:从字符串类型转换到MySQL的日期类型

使用内置函数str_to_date()

例三:字符串类型的数据转换为小数

使用convert()函数

② 文件级别的类型转换

(1)Excel

a. Excel中有格式化菜单来进行数据类型转换。选择想要修改的单元格,使用ribbon上的下拉菜单进行操作。

b. 使用Format Cells对话框,可通过格式化菜单打开。

c. Istext()函数可对单元格中数据是否为文本类型数据进行判断;isnumber()函数会对数据是否为数字给出类似的结果。

(2) JSON

使用PHP生成JSON文件,调用json_encode()可进行数据类型的调整;

也可以在使用D3时通过JS代码迫使目标数据进行数据类型转换。

4)隐藏在数据森林中的空值

 分清零、空、NULL的含义

①零是可测量、有意义的数字。

②空的含义较多:空白、空值、不可见字符

null:不等同于任何值

中间名的例子可以使用“空”而不能使用NULL

零取代空在使用虚拟日期或是日期片段时较有用。

(5)字符编码

① MySQL数据中找出多字节字符:通过比较字节长度(length()函数)和 字符长度(char_length()函数)将多字节格式编码的数据寻找出来。

语句:length(Name)!=char_length(Name);

② 找出MySQL中以Latin-1编码存储的Unicode字符以及其等价的UTF-8编码形式

③ 处理文件级别的UTF-8编码

问题引入:Python2.7中的open()函数不能处理UTF-8字符。

方法1:过滤UTF-8字符,会造成难以估量的数据损失。

方法2:以UTF-8字符写入文件,f=codeca.open(outfile.txt,a+,utf-8)

第三章 数据清洗的老黄牛——电子表格和文本编辑器

1. 电子表格中的数据清洗

电子表格中,如Excel,导入数据时,是通过寻找逗号或制表符把数据分为不同的列。但是,有些时候找不到制表符,这时候操作步骤为:

i 选中某列,在数据菜单中开启文本分列向导,第一个步骤中选择固定的宽度,第二个步骤中双击绘制在描述字段上的分割线。

ii 某些列因为长度较为差异大,所以要对这样的列在执行一次文本分列。使用分割字符功能,使用查找和替换将比如空格这样的分隔标志替换 。

iii如果格式出现了问题,就在单元格格式中调整格式。

iv如果某列开端有额外的空格字符,可以在旁边新插入一个列,使用trim()函数。

v使用clean()函数完成文本剪裁。

vi结束剩余操作。

 

字符串拼接

函数concatenate()可以接受多个字符串参数,连接在一起。

条件格式化查找异常数据;排序查找异常数据。

电子表格中的数据清洗完毕后,需要进行长期的存储:

i可从电子表格中创建CSV数据,如Neo4jMySQL使用LOAD DATA IN FILE的命令可把数据从分隔文件加载到数据库中。

ii使用电子表格生成SQL:在电子表格用用内部构造INSERT语句,然后在数据库中运行生成的命令。使用concatenate()函数将我们在电子表格每行多列共同构造的INSERT命令连接起来,就可实现在MySQL中的大量语句运行。

2. 文本编辑器里的数据清洗

改变大小写是数据清洗工作中很常见的任务。诸如此类,我们需要使用相应的查找与替换功能进行处理。如替换为换行(回车)\r

正则表达式是一种以特殊语言编写的匹配模式,但是用处不大。

文本排序和去重处理。

第四章 讲通用语言——数据转换

1. 基于工具的快速转换

(1) 从电子表格到CSV(注:CSV文件只能描述Excel的一组数据)

(2) 从电子表格到JSON(使用一些在线工具)

(3) 使用phpMyAdminSQL语句中生成CSVJSON

2. 使用PHP实现数据转换

(1) 使用PHP实现SQLJSON的数据转换:使用PHP脚本连接enron数据库,云习性SQL查询语句把查询结果输出为JSON格式文件。

               

(2) 使用PHP实现SQLCSV的数据转换

<?php

//连接数据库,设置查询语句并运行

$dbc=mysqli_connect(localhost,username,password,enron)or die(Error connecting to database!.mysqli_error());

$select_query=SELECT concat(firstName,\\,lastName)as name,email_id FROM employeelist ORDER BY latName;

$select_result =mysqli_query($dbc,$select_query);

If(!$select_result)

 die(SELECT failed![$select_query].mysqli_error());

//--CSV格式数据输出--

//设置文件流

$file=fopen(php://output,w);

If($file &&$select_result)

{

header(Content-Type:text/csv);

header(Content-Disposition:attachment;

Filename=enronEmail.csv”’);

//将每行结果数据都以CSV格式写入文件中

while($row=mysql_fetch_assoc($select_result))

{

fputcsv($file.array_values($row));

}

}

?>

(3) 使用PHP实现从JSONCSV的数据转换,从CSVJSON的数据转换:读取文件,指定输出。

3. 使用Python实现数据转换

(1) 使用Python实现CSVJSON的数据转换

 

(2) 使用csvkit实现CSVJSON的数据转换

csvjson enronEmail.csv > enronEmail.json

  csvcut bigDile.csv -c 1,3 > firstThidCols.csv

(3) 使用Python实现JSONCSV的数据转换

 

 

第五章 收集并清洗来自网络的数据

1.理解HTML页面结构

(1) 行分隔模型:关注HTML标签

(2) 树形结构模型:定义父标签和子标签

2.爬虫操作:Python和正则表达式、BeautifulSoup、基于Chrome浏览器的Scraper工具。

 

第六章 清洗PDF文件中的数据

1. PDF难以清洗:PDF是二进制格式文件

2. 简单方案——复制

3. 第二种技术——pdfMiner

4. 第三种技术——Tabula

5. 第四种技术——Acrobat

 

第七章 RDBMS清洗技术

下载数据->清洗数据->数据导入MySQL(使用往MySQL中导入电子表格数据)

->发现并清洗异常数据(转义字符、&等其他未知字符)->清洗日期

->分离用户提及、标签和URL->创建一些新的数据表->分别提取

 

第八章 数据分享的最佳实践

1.准备干净的数据包:

压缩的纯文本数据,如CSVJSON

压缩的SQL文件(因版本、配置等不同需要说明)

在线数据库访问(需提供用户名和密码以追踪用户)

API

使用GitHub发布数据

GitHub是一个基于云的文件仓库,但在存储非代码类型数据时还是有一些局限性,对文件大小有着严格的限制

2.为数据编写文档

1README文档

2)文件头

3)数据模型和图表

4)维基或CMS

3.为数据设置使用条款与许可协议

4.数据发布

 

第九章第十章 两个项目——

Stack Overflow项目、Twiter项目

 

 

 

 

干净的数据——数据清洗入门与实践

第一章 为什么要清洗数据

数据科学过程:识别问题->数据收集与存储->数据清洗->数据分析和机器学习->数据展现和可视化实现->问题决议。

 

第二章 基础知识——格式、类型与编码

1. 文件格式

(1)文本文件和二进制文件

① 文件的打开和读写

a) .xlsx为扩展名的Excel文件,以.docx为扩展名的Word文件、以.pptx为扩展名的Powerpoint文件;

b) .png.jpg.gif为扩展名的图形文件;

c) .mp3.ogg .wmv.mp4为扩展名的音乐和视频文件;

d) .txt为扩展名的文本文件。

②深入文件内部

(2)常见的文本文件格式

目前关注三种:分隔格式(结构化数据)JSON格式(半结构化数据)、HTML格式(非结构化数据)。

分隔格式:

JSON格式:

2. 归档与压缩

(1)归档

操作语句:tar cvf fileArchive.tar reallyBigFile.csv anotherBigFile.csb

逆操作:tar xvf fileArchive.tar

查阅.tar文件的基本信息:tar -tf fileArchive.tar

(2)压缩

普遍使用.zip格式文件

3. 数据类型、空值与编码

(1)数据类型

① 数字类型数据

a. 整数(正数、负数,整数范围?)

b. 小数(小数部分的长度、精度)

c. 数字/非数字(能否参与数学计算)

② 日期和时间

③ 字符串

④ 其他数据类型(如:集合/枚举、布尔、Blob

2)数据类型间的相互转换

数据损耗问题:同种类型间的不同范围转换;不同精度间的转换。

3)转换策略

① 基于SQL的操作

例一:调整时间格式 2000-01-21 045100451amFridayJanuary 212000

a. concat()和日期时间函数结合起来使用

 

b. 使用data_format()函数

 

例二:从字符串类型转换到MySQL的日期类型

使用内置函数str_to_date()

例三:字符串类型的数据转换为小数

使用convert()函数

② 文件级别的类型转换

(1)Excel

a. Excel中有格式化菜单来进行数据类型转换。选择想要修改的单元格,使用ribbon上的下拉菜单进行操作。

b. 使用Format Cells对话框,可通过格式化菜单打开。

c. Istext()函数可对单元格中数据是否为文本类型数据进行判断;isnumber()函数会对数据是否为数字给出类似的结果。

(2) JSON

使用PHP生成JSON文件,调用json_encode()可进行数据类型的调整;

也可以在使用D3时通过JS代码迫使目标数据进行数据类型转换。

4)隐藏在数据森林中的空值

 分清零、空、NULL的含义

①零是可测量、有意义的数字。

②空的含义较多:空白、空值、不可见字符

null:不等同于任何值

中间名的例子可以使用“空”而不能使用NULL

零取代空在使用虚拟日期或是日期片段时较有用。

(5)字符编码

① MySQL数据中找出多字节字符:通过比较字节长度(length()函数)和 字符长度(char_length()函数)将多字节格式编码的数据寻找出来。

语句:length(Name)!=char_length(Name);

② 找出MySQL中以Latin-1编码存储的Unicode字符以及其等价的UTF-8编码形式

③ 处理文件级别的UTF-8编码

问题引入:Python2.7中的open()函数不能处理UTF-8字符。

方法1:过滤UTF-8字符,会造成难以估量的数据损失。

方法2:以UTF-8字符写入文件,f=codeca.open(outfile.txt,a+,utf-8)

第三章 数据清洗的老黄牛——电子表格和文本编辑器

1. 电子表格中的数据清洗

电子表格中,如Excel,导入数据时,是通过寻找逗号或制表符把数据分为不同的列。但是,有些时候找不到制表符,这时候操作步骤为:

i 选中某列,在数据菜单中开启文本分列向导,第一个步骤中选择固定的宽度,第二个步骤中双击绘制在描述字段上的分割线。

ii 某些列因为长度较为差异大,所以要对这样的列在执行一次文本分列。使用分割字符功能,使用查找和替换将比如空格这样的分隔标志替换 。

iii如果格式出现了问题,就在单元格格式中调整格式。

iv如果某列开端有额外的空格字符,可以在旁边新插入一个列,使用trim()函数。

v使用clean()函数完成文本剪裁。

vi结束剩余操作。

 

字符串拼接

函数concatenate()可以接受多个字符串参数,连接在一起。

条件格式化查找异常数据;排序查找异常数据。

电子表格中的数据清洗完毕后,需要进行长期的存储:

i可从电子表格中创建CSV数据,如Neo4jMySQL使用LOAD DATA IN FILE的命令可把数据从分隔文件加载到数据库中。

ii使用电子表格生成SQL:在电子表格用用内部构造INSERT语句,然后在数据库中运行生成的命令。使用concatenate()函数将我们在电子表格每行多列共同构造的INSERT命令连接起来,就可实现在MySQL中的大量语句运行。

2. 文本编辑器里的数据清洗

改变大小写是数据清洗工作中很常见的任务。诸如此类,我们需要使用相应的查找与替换功能进行处理。如替换为换行(回车)\r

正则表达式是一种以特殊语言编写的匹配模式,但是用处不大。

文本排序和去重处理。

第四章 讲通用语言——数据转换

1. 基于工具的快速转换

(1) 从电子表格到CSV(注:CSV文件只能描述Excel的一组数据)

(2) 从电子表格到JSON(使用一些在线工具)

(3) 使用phpMyAdminSQL语句中生成CSVJSON

2. 使用PHP实现数据转换

(1) 使用PHP实现SQLJSON的数据转换:使用PHP脚本连接enron数据库,云习性SQL查询语句把查询结果输出为JSON格式文件。

 

(2) 使用PHP实现SQLCSV的数据转换

<?php

//连接数据库,设置查询语句并运行

$dbc=mysqli_connect(localhost,username,password,enron)or die(Error connecting to database!.mysqli_error());

$select_query=SELECT concat(firstName,\\,lastName)as name,email_id FROM employeelist ORDER BY latName;

$select_result =mysqli_query($dbc,$select_query);

If(!$select_result)

 die(SELECT failed![$select_query].mysqli_error());

//--CSV格式数据输出--

//设置文件流

$file=fopen(php://output,w);

If($file &&$select_result)

{

header(Content-Type:text/csv);

header(Content-Disposition:attachment;

Filename=enronEmail.csv”’);

//将每行结果数据都以CSV格式写入文件中

while($row=mysql_fetch_assoc($select_result))

{

fputcsv($file.array_values($row));

}

}

?>

(3) 使用PHP实现从JSONCSV的数据转换,从CSVJSON的数据转换:读取文件,指定输出。

3. 使用Python实现数据转换

(1) 使用Python实现CSVJSON的数据转换

 

(2) 使用csvkit实现CSVJSON的数据转换

csvjson enronEmail.csv > enronEmail.json

  csvcut bigDile.csv -c 1,3 > firstThidCols.csv

(3) 使用Python实现JSONCSV的数据转换

 

 

第五章 收集并清洗来自网络的数据

1.理解HTML页面结构

(1) 行分隔模型:关注HTML标签

(2) 树形结构模型:定义父标签和子标签

2.爬虫操作:Python和正则表达式、BeautifulSoup、基于Chrome浏览器的Scraper工具。

 

第六章 清洗PDF文件中的数据

1. PDF难以清洗:PDF是二进制格式文件

2. 简单方案——复制

3. 第二种技术——pdfMiner

4. 第三种技术——Tabula

5. 第四种技术——Acrobat

 

第七章 RDBMS清洗技术

下载数据->清洗数据->数据导入MySQL(使用往MySQL中导入电子表格数据)

->发现并清洗异常数据(转义字符、&等其他未知字符)->清洗日期

->分离用户提及、标签和URL->创建一些新的数据表->分别提取

 

第八章 数据分享的最佳实践

1.准备干净的数据包:

压缩的纯文本数据,如CSVJSON

压缩的SQL文件(因版本、配置等不同需要说明)

在线数据库访问(需提供用户名和密码以追踪用户)

API

使用GitHub发布数据

GitHub是一个基于云的文件仓库,但在存储非代码类型数据时还是有一些局限性,对文件大小有着严格的限制

2.为数据编写文档

1README文档

2)文件头

3)数据模型和图表

4)维基或CMS

3.为数据设置使用条款与许可协议

4.数据发布

 

第九章第十章 两个项目——

Stack Overflow项目、Twiter项目

 

 

posted @ 2018-07-04 09:39  WittPeng  阅读(2387)  评论(0编辑  收藏  举报