在之前的案例使用网络爬虫自动抓取图书信息中,我们通过简单的爬虫抓取了当当网的机器学习相关的图书数据,并保存为 ./input/books_total.csv 文件。通过爬虫采集原始数据,但是由于各种原因,原始数据往往会存在许多问题,例如数据格式不正确,数据存在冗余等等。因此第一手获得的原始数据不能直接使用,需要进行数据清洗。本案例基于爬取的书籍数据进行数据清洗,使其称为符合我们要求的数据。
1.读取数据
首先,我们借助 Pandas 包提供的 read_csv
方法读取原始数据,将其转换成 Pandas 中的 DataFrame 格式。注意由于数据中包含中文,需要正确设置字符编码。
通过 shape
属性可以查看数据的行数和列数。
(600, 5)
查看数据的前5行。
书名 | 出版信息 | 当前价格 | 星级 | 评论数 | |
0 | 机器学习 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著... | 周志华 /2016-01-01 /清华大学出版社 | ¥66.00 | width: 90%; | 76149条评论 |
1 | 机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数... | [美]哈林顿 /2013-06-01 /人民邮电出版社 | ¥46.30 | width: 90%; | 25256条评论 |
2 | 机器学习实战:基于Scikit-Learn和TensorFlow 被称为机器学习图书*强的... | (法)奥雷利安・杰龙(Aurélien Géron) /2018-08-27 /机械工业出版社 | ¥83.30 | width: 90%; | 5759条评论 |
3 | 机器学习理论导引 | 周志华 王魏 高尉 张利军 /2020-05-30 /机械工业出版社 | ¥62.30 | width: 100%; | 783条评论 |
4 | 机器学习――原理、算法与应用 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度... | 雷明 /2019-09-01 /清华大学出版社 | ¥39.60 | width: 90%; | 1184条评论 |
可以看出原始数据中有许多问题,例如当前价格
带有人民币符号'¥',评论数
含有文本等等。在本案例中我们按照步骤完成数据清洗,主要任务为:
- 1)去掉当前价格这一列中的 '¥' 符号,转换成数值格式。
- 2) 星级列转换成数字格式,取值范围为{0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5}。例如
width:90%
先转换为0.9,然后以最高星分数5乘以0.9最终得到4.5。 - 3)对于评论数这一列直接提取数值。
- 4)出版信息分为三列分别是作者、出版日期、出版社。
- 5)将原始数据中的书名拆分为为书名和简介两列。
2.提取价格数值
首先我们处理价格、星级、评论数,这几个比较简单,对于价格最主要的目的是提取数据中的数值,但真实数据除了数值还包含其他的内容,我们可以使用正则匹配将数值提取出来。
正则表达式是一种按照特定规则搜索文本的方法。在正则表达式中\d
表示数字,+
表示匹配前一个字符1次或无限次,常见的正则表达式符号含义见下表所示。
在Python中,re
包实现了正则表达式的匹配,常用的 search
函数能够完成匹配。下面我们编写 get_numers
函数用来提取一个字符串中的数值。
66.0
使用DataFrame的map
方法对当前价格
这一列的每一个数据遍历执行,并取代原来的列。
书名 | 出版信息 | 当前价格 | 星级 | 评论数 | |
0 | 机器学习 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著... | 周志华 /2016-01-01 /清华大学出版社 | 66 | width: 90%; | 76149条评论 |
1 | 机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数... | [美]哈林顿 /2013-06-01 /人民邮电出版社 | 46.3 | width: 90%; | 25256条评论 |
2 | 机器学习实战:基于Scikit-Learn和TensorFlow 被称为机器学习图书*强的... | (法)奥雷利安・杰龙(Aurélien Géron) /2018-08-27 /机械工业出版社 | 83.3 | width: 90%; | 5759条评论 |
3 | 机器学习理论导引 | 周志华 王魏 高尉 张利军 /2020-05-30 /机械工业出版社 | 62.3 | width: 100%; | 783条评论 |
4 | 机器学习――原理、算法与应用 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度... | 雷明 /2019-09-01 /清华大学出版社 | 39.6 | width: 90%; | 1184条评论 |
495 53.40
92 54.50
535 49.16
581 81.20
325 69.10
473 69.00
547 55.31
587 44.60
225 46.60
211 68.80
Name: 当前价格, dtype: float64
可以看出价格这一列的数值全部提取出来了。
3.提取评论数
由于评论是也是提取数值,因此对于评论数使用同样的方法处理,具体如下。
书名 | 出版信息 | 当前价格 | 星级 | 评论数 | |
0 | 机器学习 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著... | 周志华 /2016-01-01 /清华大学出版社 | 66 | width: 90%; | 76149 |
1 | 机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数... | [美]哈林顿 /2013-06-01 /人民邮电出版社 | 46.3 | width: 90%; | 25256 |
2 | 机器学习实战:基于Scikit-Learn和TensorFlow 被称为机器学习图书*强的... | (法)奥雷利安・杰龙(Aurélien Géron) /2018-08-27 /机械工业出版社 | 83.3 | width: 90%; | 5759 |
3 | 机器学习理论导引 | 周志华 王魏 高尉 张利军 /2020-05-30 /机械工业出版社 | 62.3 | width: 100%; | 783 |
4 | 机器学习――原理、算法与应用 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度... | 雷明 /2019-09-01 /清华大学出版社 | 39.6 | width: 90%; | 1184 |
87 143.0
204 834.0
392 0.0
440 0.0
378 0.0
142 1677.0
246 1.0
102 323.0
186 740.0
347 0.0
Name: 评论数, dtype: float64
可以看到评论数这一列的数值也成功提取出来了,不过它是float类型,我们需要将其转换成int类型。
0 76149
1 25256
2 5759
3 783
4 1184
Name: 评论数, dtype: int64
4.转换星级
对于星级,首先要提取出数值,然后对数值进行计算,计算方法为用提取后的数值除以20,就得到最终的星级。对应关系如下表:
原始数据 | 数值 | 星级 |
width: 0%; | 0 | 0 |
width: 10%; | 10 | 0.5 |
width: 20%; | 20 | 1 |
width: 30%; | 30 | 1.5 |
width: 40%; | 40 | 2 |
width: 50%; | 50 | 2.5 |
width: 60%; | 60 | 3 |
width: 70%; | 70 | 3.5 |
width: 80%; | 80 | 4 |
width: 90%; | 90 | 4.5 |
width: 100%; | 100 | 5 |
书名 | 出版信息 | 当前价格 | 星级 | 评论数 | |
0 | 机器学习 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著... | 周志华 /2016-01-01 /清华大学出版社 | 66 | 4.5 | 76149 |
1 | 机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数... | [美]哈林顿 /2013-06-01 /人民邮电出版社 | 46.3 | 4.5 | 25256 |
2 | 机器学习实战:基于Scikit-Learn和TensorFlow 被称为机器学习图书*强的... | (法)奥雷利安・杰龙(Aurélien Géron) /2018-08-27 /机械工业出版社 | 83.3 | 4.5 | 5759 |
3 | 机器学习理论导引 | 周志华 王魏 高尉 张利军 /2020-05-30 /机械工业出版社 | 62.3 | 5.0 | 783 |
4 | 机器学习――原理、算法与应用 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度... | 雷明 /2019-09-01 /清华大学出版社 | 39.6 | 4.5 | 1184 |
书名 | 出版信息 | 当前价格 | 星级 | 评论数 | |
587 | Python+Spark 2.0+Hadoop机器学习与大数据实战 浅显易懂的原理介绍加上... | 林大贵 /2018-01-01 /清华大学出版社 | 44.6 | 4.0 | 1258 |
364 | 机器学习系统设计:Python语言实现 [美] 戴维・朱利安(David Julian)机... | [美] 戴维・朱利安(David Julian) /2017-06-01 /机械工业出版社 | 59.25 | 0 .0 | 0 |
430 | 【新华书店】机器学习实战 [美] Peter Harrington 著,李锐,*,曲亚东,... | [美] Peter Harrington 著,李锐,李鹏, /2013-06-01 /人民... | 63.37 | 0.0 | 0 |
370 | 机器学习与R语言(原书第2版),机械工业出版社【新华书店全新正品】 『新华书店闪电发货!限... | (美)布雷特・兰茨(Brett Lantz) /2017-03-01 /机械工业出版社 | 61.4 | 0 | 0 |
513 | 精通机器学习 基于R 第2版 考瑞・莱斯米斯特尔 人民邮电出版社 978711547778... | [美]考瑞・莱斯米斯特尔 /2018-03-01 /人民邮电出版社 | 49 | 0 .0 | 2 |
208 | Python大数据与机器学习实战 算法多、代码多、注释多、案例多,凝聚作者十余年开发和培训... | 谢彦 /2020-04-01 /电子工业出版社 | 59.5 | 5 .0 | 104 |
176 | Python机器学习 Python机器学习实战教程 人工智能图书 Python程序员进阶图... | [印]阿布舍克・维贾亚瓦吉亚(Abhishek Vijayvargia) /2019-02-... | 35.2 | 5.0 | 342 |
579 | 同济博士论丛――基于机器学习的蛋白质相互作用与功能预测 | 邓磊/关佶红 /2018-05-16 /同济大学出版社 | 58.4 | 0 | 15 |
101 | 机器学习算法框架实战:Java和Python实现 以一个自研机器学习算法框架的构建为主线,... | 麦嘉铭 /2020-07-16 /机械工业出版社 | 47.6 | 0.0 | 114 |
452 | 机器学习与R语言,机械工业出版社, Brett Lantz 著,李洪成,许金炜,李舰 译 ... | (美)兰兹 著,李洪成,许金炜,李舰 译 /2015-03-01 /机械工业出版社 | 52 | 0.0 | 0 |
5.获取出版信息
接下来我们处理出版信息
这一列,从原始数据中可以看到,这一列主要包含三个信息,分别是作者、出版日期、出版社。它们以/
分隔,并且存放在一个数据单元中,因此我们将它们分别取出,然后单独存为三列。
5.1 提取作者
从原始数据中可以看出以/
分隔的第一个数据是作者,因此我们可以直接提取。
使用字符串的split
方法可以对字符串按照特定字符分割,并且分割后是列表形式,例如:
['周志华', '2016-01-01', '清华大学出版社']
对出版信息
这一列的每一个数据按照/
分隔后取第一个数据就是作者,提取后我们将它保存在作者
这一列。
书名 | 出版信息 | 当前价格 | 星级 | 评论数 | |
0 | 机器学习 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著... | 周志华 /2016-01-01 /清华大学出版社 | 66 | 4.5 | 76149 |
1 | 机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数... | [美]哈林顿 /2013-06-01 /人民邮电出版社 | 46.3 | 4.5 | 25256 |
2 | 机器学习实战:基于Scikit-Learn和TensorFlow 被称为机器学习图书*强的... | (法)奥雷利安・杰龙(Aurélien Géron) /2018-08-27 /机械工业出版社 | 83.3 | 4.5 | 5759 |
3 | 机器学习理论导引 | 周志华 王魏 高尉 张利军 /2020-05-30 /机械工业出版社 | 62.3 | 5 | 783 |
4 | 机器学习――原理、算法与应用 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度... | 雷明 /2019-09-01 /清华大学出版社 | 39.6 | 4.5 | 1184 |
可以看到作者已经提取出来。
5.2提取出版社
采样正则表达式匹配出版社信息,正则表达式为 (\S{1,10}出版社)
。下面我们实现 get_publisher
函数,从出版信息列找那个提取出版社信息。
'机械工业出版社'
在数据中新增 出版社
一列。
188 机械工业出版社
83 清华大学出版社
534 人民邮电出版社
115 人民邮电出版社
108 电子工业出版社
308 电子工业出版社
436 电子工业出版社
229 清华大学出版社
233 清华大学出版社
197 人民邮电出版社
Name: 出版社, dtype: object
如上所示,我们成功地提取了每个数据的出版社。
5.3提取出版日期
出版日期的格式为 YYYY-MM-DD ,对应的正则表达式为 (\d{4}-\d{2}-\d{2})
。
'2020-05-30'
新增 出版日期
列,并借助 pd.to_datetime
方法将字符串格式的时间转换成时间格式。
13 2015-04-01
228 2020-06-01
230 2018-01-01
504 2017-07-01
8 2019-08-12
490 2020-06-25
148 2018-05-01
358 2018-01-01
370 2017-03-01
593 NaT
Name: 出版日期, dtype: datetime64[ns]
如上所示,我们已经成功提取作者、出版社、出版日期,因此原始的出版信息
这一列可以删除。
书名 | 当前价格 | 星级 | 评论数 | 作者 | 出版社 | 出版日期 | |
0 | 机器学习 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著... | 66 | 4.5 | 76149 | 周志华 | 清华大学出版社 | 2016/1/1 |
1 | 机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数... | 46.3 | 4.5 | 25256 | [美]哈林顿 | 人民邮电出版社 | 2013/6/1 |
2 | 机器学习实战:基于Scikit-Learn和TensorFlow 被称为机器学习图书*强的... | 83.3 | 4.5 | 5759 | (法)奥雷利安・杰龙(Aurélien Géron) | 机械工业出版社 | 2018/8/27 |
3 | 机器学习理论导引 | 62.3 | 5 | 783 | 周志华 王魏 高尉 张利军 | 机械工业出版社 | 2020/5/30 |
4 | 机器学习――原理、算法与应用 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度... | 39.6 | 4.5 | 1184 | 雷明 | 清华大学出版社 | 2019/9/1 |
观察数据后发现,此时已经没有出版信息
这一列,说明我们已经删除成功,现在只剩下书名
这一列需要处理。
6.提取书名和书简介
书名信息中混合这书的简介信息,观察原始数据中书名一列,能找到一些规律。除去最开始可能包含的一些包含在 【】
和 []
中间的标注信息,剩余的内容中书名和其他内容基本是由空格隔开的。所以我们首先将【】
和 []
去掉,然后按照空格分隔字符串,第一个内容便是书名。实现方法如下:
'机器学习'
书名 | 当前价格 | 星级 | 评论数 | 作者 | 出版社 | 出版日期 | 书名称 | |
33 | 白话机器学习算法 机器学习算法工程师入门教程 算法及数据科学入门图书 涵盖回归分析 神经网... | 34.5 | 4 | 402 | [新加坡] 黄莉婷 苏川集 | 人民邮电出版社 | 2019/2/1 | 白话机器学习算法 |
425 | 机器学习实战+美团机器学习实践 人工智能机器学习经典教程基于Python代码 | 149.85 | 0 | 0 | 绍 | 人民邮电出版社 | 2014/5/1 | 机器学习实战+美团机器学习实践 |
288 | 【全2册】图解深度学习+图解机器学习 | 81 | 0 | 12 | 暂无 | 人民邮电出版社 | 2018/5/1 | 图解深度学习+图解机器学习 |
545 | 实用机器学习 苏尼拉・格拉普蒂(SunilaGollapudi)著,张世武 机械工业出版社... | 73 | 0 | 0 | 苏尼拉・格拉普蒂(SunilaGollapudi)著,张世武 | 机械工业出版社 | 2018/6/1 | 实用机器学习 |
1 | 机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数... | 46.3 | 4.5 | 25256 | [美]哈林顿 | 人民邮电出版社 | 2013/6/1 | 机器学习实战人工智能开发图书 |
250 | 数据产品经理高效学习手册 产品设计、技术常识与机器学习 讲述产品经理的数据产品设计思维框架... | 29.5 | 5 | 144 | 张威 | 人民邮电出版社 | 2020/4/1 | 数据产品经理高效学习手册 |
426 | 【新华书店rt】机器学习算法,[意]朱塞佩・博纳科尔索(Giuseppe Bonaccor... | 63.42 | 0 | 0 | [意]朱塞佩・博纳科尔索(Giuseppe Bonaccor | 机械工业出版社 | 2018/5/1 | 机器学习算法,朱塞佩・博纳科尔索(Giuseppe |
249 | AI前沿深度强化学习与分布式机器学习 套装共2册 微软亚洲研究院机器学习研究团队所著,刘铁... | 129.7 | 0 | 0 | 刘驰,刘铁岩,等 | 机械工业出版社 | 2020/8/21 | AI前沿深度强化学习与分布式机器学习 |
401 | 机器学习与R语言 (美)布雷特・兰茨(Brett Lantz)机械工业出版社 因书籍批量采... | 69.3 | 0 | 0 | (美)布雷特・兰茨(Brett Lantz) | 机械工业出版社 | 2017/3/1 | 机器学习与R语言 |
176 | Python机器学习 Python机器学习实战教程 人工智能图书 Python程序员进阶图... | 35.2 | 5 | 342 | [印]阿布舍克・维贾亚瓦吉亚(Abhishek Vijayvargia) | 人民邮电出版社 | 2019/2/1 | Python机器学习 |
得到书名后,剩余的内容便是简介。
书名 | 当前价格 | 星级 | 评论数 | 作者 | 出版社 | 出版日期 | 书名称 | 简介 | |
0 | 机器学习 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著... | 66 | 4.5 | 76149 | 周志华 | 清华大学出版社 | 2016/1/1 | 机器学习 | 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著,全面揭... |
1 | 机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数... | 46.3 | 4.5 | 25256 | [美]哈林顿 | 人民邮电出版社 | 2013/6/1 | 机器学习实战人工智能开发图书 | 机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数... |
2 | 机器学习实战:基于Scikit-Learn和TensorFlow 被称为机器学习图书*强的... | 83.3 | 4.5 | 5759 | (法)奥雷利安・杰龙(Aurélien Géron) | 机械工业出版社 | 2018/8/27 | 机器学习实战:基于Scikit-Learn和TensorFlow | 被称为机器学习图书*强的存在!前谷歌工程师撰写,“美亚”人工智能图书畅销榜首图书!从实践... |
3 | 机器学习理论导引 | 62.3 | 5 | 783 | 周志华 王魏 高尉 张利军 | 机械工业出版社 | 2020/5/30 | 机器学习理论导引 | |
4 | 机器学习――原理、算法与应用 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度... | 39.6 | 4.5 | 1184 | 雷明 | 清华大学出版社 | 2019/9/1 | 机器学习――原理、算法与应用 | 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度学习的原理与应用 |
提取出书名称和简介信息后,我们可以将数据中的原始书名列删除。
当前价格 | 星级 | 评论数 | 作者 | 出版社 | 出版日期 | 书名称 | 简介 | |
0 | 66 | 4.5 | 76149 | 周志华 | 清华大学出版社 | 2016/1/1 | 机器学习 | 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著,全面揭... |
1 | 46.3 | 4.5 | 25256 | [美]哈林顿 | 人民邮电出版社 | 2013/6/1 | 机器学习实战人工智能开发图书 | 机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数... |
2 | 83.3 | 4.5 | 5759 | (法)奥雷利安・杰龙(Aurélien Géron) | 机械工业出版社 | 2018/8/27 | 机器学习实战:基于Scikit-Learn和TensorFlow | 被称为机器学习图书*强的存在!前谷歌工程师撰写,“美亚”人工智能图书畅销榜首图书!从实践... |
3 | 62.3 | 5 | 783 | 周志华 王魏 高尉 张利军 | 机械工业出版社 | 2020/5/30 | 机器学习理论导引 | |
4 | 39.6 | 4.5 | 1184 | 雷明 | 清华大学出版社 | 2019/9/1 | 机器学习――原理、算法与应用 | 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度学习的原理与应用 |
最后,将清洗完成的数据保存到 CSV 文件中。
7.总结
由于数据采集时获得的数据可能并不规范,不能直接用来分析,因此需要做数据清洗。本案例对爬虫抓取的书籍数据进行清洗,主要使用正则匹配和自定义的方法实现。首先提取了价格、评论以及星级的数值;然后对于出版信息中的数据分别获取书籍的作者、出版社和出版日期;最后基于原始数据的书名,进一步提取书的简介和名称,相较于前几步来说,提取书简介和书名可能相对复杂一些,当然在实际数据清洗时可能有多种方法,本案例仅提供其中一种方法供大家参考。