数据清洗
个人已将图书和个人笔记上传至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 04:51:00为4:51am,Friday,January 21,2000
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数据,如Neo4j、MySQL使用LOAD DATA IN FILE的命令可把数据从分隔文件加载到数据库中。
ii使用电子表格生成SQL:在电子表格用用内部构造INSERT语句,然后在数据库中运行生成的命令。使用concatenate()函数将我们在电子表格每行多列共同构造的INSERT命令连接起来,就可实现在MySQL中的大量语句运行。
2. 文本编辑器里的数据清洗
改变大小写是数据清洗工作中很常见的任务。诸如此类,我们需要使用相应的查找与替换功能进行处理。如替换为换行(回车)\r
正则表达式是一种以特殊语言编写的匹配模式,但是用处不大。
文本排序和去重处理。
第四章 讲通用语言——数据转换
1. 基于工具的快速转换
(1) 从电子表格到CSV(注:CSV文件只能描述Excel的一组数据)
(2) 从电子表格到JSON(使用一些在线工具)
(3) 使用phpMyAdmin从SQL语句中生成CSV或JSON
2. 使用PHP实现数据转换
(1) 使用PHP实现SQL到JSON的数据转换:使用PHP脚本连接enron数据库,云习性SQL查询语句把查询结果输出为JSON格式文件。
(2) 使用PHP实现SQL到CSV的数据转换
<?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实现从JSON到CSV的数据转换,从CSV到JSON的数据转换:读取文件,指定输出。
3. 使用Python实现数据转换
(1) 使用Python实现CSV到JSON的数据转换
(2) 使用csvkit实现CSV到JSON的数据转换
csvjson enronEmail.csv > enronEmail.json
csvcut bigDile.csv -c 1,3 > firstThidCols.csv
(3) 使用Python实现JSON到CSV的数据转换
第五章 收集并清洗来自网络的数据
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.准备干净的数据包:
压缩的纯文本数据,如CSV、JSON等
压缩的SQL文件(因版本、配置等不同需要说明)
在线数据库访问(需提供用户名和密码以追踪用户)
API
使用GitHub发布数据
GitHub是一个基于云的文件仓库,但在存储非代码类型数据时还是有一些局限性,对文件大小有着严格的限制
2.为数据编写文档
(1)README文档
(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 04:51:00为4:51am,Friday,January 21,2000
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数据,如Neo4j、MySQL使用LOAD DATA IN FILE的命令可把数据从分隔文件加载到数据库中。
ii使用电子表格生成SQL:在电子表格用用内部构造INSERT语句,然后在数据库中运行生成的命令。使用concatenate()函数将我们在电子表格每行多列共同构造的INSERT命令连接起来,就可实现在MySQL中的大量语句运行。
2. 文本编辑器里的数据清洗
改变大小写是数据清洗工作中很常见的任务。诸如此类,我们需要使用相应的查找与替换功能进行处理。如替换为换行(回车)\r
正则表达式是一种以特殊语言编写的匹配模式,但是用处不大。
文本排序和去重处理。
第四章 讲通用语言——数据转换
1. 基于工具的快速转换
(1) 从电子表格到CSV(注:CSV文件只能描述Excel的一组数据)
(2) 从电子表格到JSON(使用一些在线工具)
(3) 使用phpMyAdmin从SQL语句中生成CSV或JSON
2. 使用PHP实现数据转换
(1) 使用PHP实现SQL到JSON的数据转换:使用PHP脚本连接enron数据库,云习性SQL查询语句把查询结果输出为JSON格式文件。
(2) 使用PHP实现SQL到CSV的数据转换
<?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实现从JSON到CSV的数据转换,从CSV到JSON的数据转换:读取文件,指定输出。
3. 使用Python实现数据转换
(1) 使用Python实现CSV到JSON的数据转换
(2) 使用csvkit实现CSV到JSON的数据转换
csvjson enronEmail.csv > enronEmail.json
csvcut bigDile.csv -c 1,3 > firstThidCols.csv
(3) 使用Python实现JSON到CSV的数据转换
第五章 收集并清洗来自网络的数据
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.准备干净的数据包:
压缩的纯文本数据,如CSV、JSON等
压缩的SQL文件(因版本、配置等不同需要说明)
在线数据库访问(需提供用户名和密码以追踪用户)
API
使用GitHub发布数据
GitHub是一个基于云的文件仓库,但在存储非代码类型数据时还是有一些局限性,对文件大小有着严格的限制
2.为数据编写文档
(1)README文档
(2)文件头
(3)数据模型和图表
(4)维基或CMS
3.为数据设置使用条款与许可协议
4.数据发布
第九章第十章 两个项目——
Stack Overflow项目、Twiter项目