第1章 数据科学概述 1
1.1 什么是数据科学 1
1.1.1 数据科学的概念 1
1.1.2 数据科学的处理流程 2
1.2 数据分析师、数据工程师与数据科学家 3
1.2.1 数据分析师 4
1.2.2 数据工程师 4
1.2.3 数据科学家 5
第2章 Python语法基础 6
2.1 Python的程序结构 6
2.1.1 Python文件类型 6
2.1.2 包、模块、函数结构 7
2.2 Python编码规范 8
2.2.1 通过缩进规范编码的层次关系 8
2.2.2 代码注释 9
2.2.3 语句的分隔 10
2.2.4 变量赋值及作用范围 10
2.3 Python编程环境的搭建 12
2.3.1 Python的版本 12
2.3.2 Python集成开发工具 12
2.3.3 Jupyter Notebook的使用 13
2.4 Python的数据结构 15
2.4.1 列表(List) 15
2.4.2 字典(Dictionary) 19
2.4.3 元组(T uple) 21
2.5 Python控制语句 22
2.5.1 条件选择语句 22
2.5.2 循环语句 23
2.5.3 异常处理语句 26
习题 29
第3章 使用Urllib库编写爬虫 31
3.1 网络爬虫概述 31
3.1.1 什么是网络爬虫 32
3.1.2 为什么要学习网络爬虫技术 32
3.1.3 聚焦爬虫的基本原理 33
3.2 使用Urllib.request模块编写爬虫 37
3.2.1 Urllib库简介 37
3.2.2 编写第一个爬虫程序 37
3.2.3 urlopen()函数超时设置 38
3.3 修改User-Agent属性模拟浏览器访问 39
3.3.1 认识HTTP协议的User-Agent属性 39
3.3.2 修改User-Agent属性的方法 41
3.4 HTTP协议详解 42
3.4.1 HTTP请求与应答过程 42
3.4.2 HTTP请求格式 42
3.5 模拟HTTP-GET方法的爬虫 45
3.6 模拟HTTP-POST方法的爬虫 46
3.6.1 urllib.request.Request类 46
3.6.2 POST请求过程 47
3.6.3 爬虫模拟POST登录请求 49
习题 50
第4章 使用正则表达式提取数据 51
4.1 正则表达式原理 51
4.2 正则表达式语法 52
4.2.1 正则表达式的构成 52
4.2.2 贪婪与懒惰模式 55
4.3 re模块常用的函数 56
4.3.1 常用的匹配函数 56
4.3.2 编译函数compile() 58
4.4 正则表达式应用实例 58
4.4.1 re.findall()只提取“()”匹配的字符串 58
4.4.2 匹配国内手机号码 59
4.4.3 匹配电子邮件 59
习题 60
第5章 使用BeautifulSoup库提取数据 62
5.1 BeautifulSoup库简介 62
5.1.1 HTML和XML的DOM TREE结构 63
5.1.2 Tag对象 63
5.1.3 BeautifulSoup解析器 65
5.2 BeautifulSoup的信息提取 65
5.2.1 构造BeautifulSoup对象 65
5.2.2 信息提取的四种方法 66
5.3 BeautifulSoup的遍历 73
5.3.1 Tag对象向下遍历 73
5.3.2 Tag对象向上遍历 76
5.3.3 Tag对象平行遍历 77
习题 77
第6章 爬虫项目实战 79
6.1 网易新闻中心爬虫 79
6.1.1 网页结构分析 80
6.1.2 将bytes对象转换为字符串 82
6.1.3 提取URL与新闻标题 84
6.2 通过Session模拟登录豆瓣 85
6.2.1 爬虫模拟登录原理 85
6.2.2 网页结构分析 86
6.2.3 爬虫代码实现 89
6.3 链家二手房信息爬虫 93
6.3.1 网页结构分析 93
6.3.2 制定信息提取方案 95
6.3.3 代码实现 97
6.4 爬取拉勾网JSON格式数据 100
6.4.1 网页结构分析 101
6.4.2 代码实现 104
习题 107
第7章 Pandas数据处理基础 108
7.1 数据处理概述 108
7.1.1 数据的不一致 109
7.1.2 数据的重复与冗余 109
7.1.3 数据的不完整 109
7.1.4 数据存在噪声 109
7.2 Pandas数据结构 110
7.2.1 Series数据结构 110
7.2.2 DataFrame数据结构 113
7.3 DataFrame的基本操作 115
7.3.1 列的基本操作 115
7.3.2 行的基本操作 118
7.3.3 行列子集的引用 119
7.3.4 排序 119
7.4 DataFrame数据的连接 120
7.4.1 用于轴向连接的concat方法 120
7.4.2 用于关系型数据库的连接方法merge 125
7.4.3 行索引index上的连接方法join 129
7.5 Pandas数据输入和输出 131
7.5.1 读写CSV与Text数据 131
7.5.2 读写Excel数据 132
习题 133
第8章 Pandas数据处理常用方法 136
8.1 分组统计与转换 136
8.1.1 分组统计 136
8.1.2 分组对象的迭代与选取 139
8.1.3 分组级转换 141
8.1.4 数据透视表 144
8.2 缺失值处理 144
8.2.1 缺失值查询 146
8.2.2 缺失值删除 147
8.2.3 填充缺失值 148
8.3 时间序列数据处理 149
8.3.1 Python的日期时间类型 150
8.3.2 Pandas中的时间序列数据类型 151
8.3.3 时间序列的频率、切片、重采样 154
8.3.4 时间序列绘图 159
8.4 向量转换 160
习题 162
第9章 数据处理实战 163
9.1 二手房数据处理 163
9.1.1 数据导入与观测 163
9.1.2 缺失值处理 165
9.1.3 数据转换 166
9.1.4 数据重塑 168
9.2 职位数据处理 169
9.2.1 数据导入与观测 170
9.2.2 缺失值处理 171
9.2.3 数据转换 171
9.3 职位描述的文本信息处理 172
9.3.1 中文分词词库jieba简介 172
9.3.2 职位描述文本分词 174
习题 177
第10章 SQLite数据库操作 178
10.1 SQLite数据库简介 178
10.2 Python读写SQLite 179
10.3 Pandas读写SQLite 181
10.3.1 将DataFrame数据写入数据库 182
10.3.2 将数据库数据读出到DataFrame 182
10.3.3 数据库查询 183
习题 184
第11章 机器学习概述 185
11.1 认识机器学习 185
11.2 机器学习的应用范围 187
11.2.1 数据挖掘 188
11.2.2 人工智能 188
11.2.3 深度学习 188
11.2.4 统计学习 189
11.3 机器学习的算法 189
11.3.1 监督式学习 189
11.3.2 非监督式学习 190
11.4 Scikit-learn机器学习包 190
11.4.1 导入数据 191
11.4.2 训练模型 193
11.4.3 模型预测 194
11.4.4 模型评估与选择 194
习题 194
第12章 从线性回归到分类 196
12.1 线性回归算法 196
12.1.1 线性回归算法原理 196
12.1.2 线性回归实现 197
12.2 逻辑回归分类算法 200
12.2.1 从线性回归到线性分类 200
12.2.2 从线性分类到逻辑回归 201
12.2.3 逻辑回归实现 203
习题 204
第13章 分类模型及应用 206
13.1 K近邻分类算法 206
13.1.1 KNN算法原理 206
13.1.2 KNN算法实现 208
13.2 决策树分类算法 210
13.2.1 决策树算法原理 210
13.2.2 决策树算法实现 213
13.3 随机森林分类算法 216
13.3.1 集成学习 216
13.3.2 随机森林算法原理 218
13.3.3 随机森林算法实现 219
习题 221
第14章 分类模型的评估 223
14.1 训练与测试样本 223
14.1.1 留出法 224
14.1.2 K-fold交叉验证法 228
14.2 性能评价指标 231
14.2.1 混淆矩阵 232
14.2.2 查准率、查全率与F1指标 234
14.3 分类阈值的调整 236
14.3.1 ROC曲线 236
14.3.2 AUC指标 239
习题 241
参考文献 243