第1篇 Python程序设计 3
第1章 Python入门 3
1.1 Python概述 4
1.1.1 Python的发展历程 4
1.1.2 Python生态的应用 4
1.1.3 Python的前景 5
1.2 搭建Python开发环境 6
1.2.1 独立安装 6
1.2.2 安装Anaconda 9
1.3 Python开发工具介绍 11
1.4 Python软件包的管理 13
1.4.1 搜索软件 13
1.4.2 安装软件 13
1.4.3 卸载软件 14
1.4.4 更新软件 14
1.4.5 显示已安装软件包 14
1.5 实训:编写“Hello World” 15
本章小结 16
第2章 Python基础 17
2.1 变量 18
2.1.1 什么是变量 18
2.1.2 变量与类型 18
2.1.3 变量赋值 19
2.1.4 动态类型 20
2.1.5 内存管理 20
2.1.6 垃圾回收 22
2.1.7 Python代码执行过程 23
2.2 标识符 24
2.2.1 有效的标识符 24
2.2.2 特殊标识符 24
2.2.3 关键字 25
2.2.4 内建模块 26
2.3 代码组织 26
2.3.1 缩进 26
2.3.2 代码注释 27
2.3.3 多行语句 27
2.4 输入与输出 28
2.4.1 输入 28
2.4.2 输出 28
2.4.3 一个完整的示例程序 29
2.5 运算符与优先级 30
2.6 新手问答 30
2.7 实训:设计一个简易计算器 31
本章小结 31
第3章 数据类型与流程控制 32
3.1 数字类型 33
3.1.1 数字对象的创建、修改与删除 33
3.1.2 整型 34
3.1.3 浮点型 35
3.1.4 复数型 35
3.1.5 运算符 36
3.2 字符串类型 37
3.2.1 字符串对象的创建、修改和删除 37
3.2.2 格式化 38
3.2.3 字符串模板 39
3.2.4 转义字符 39
3.3 集合类型 40
3.3.1 列表 40
3.3.2 元组 42
3.3.3 字典 43
3.4 流程控制语句 45
3.4.1 循环 45
3.4.2 条件 46
3.5 新手问答 47
3.6 实训:设计算法,输出乘法表 49
本章小结 50
第4章 函数、模块、包 51
4.1 自定义函数 52
4.1.1 创建函数 52
4.1.2 调用函数 52
4.1.3 函数解包 53
4.1.4 递归函数 54
4.2 函数参数 55
4.2.1 位置参数 55
4.2.2 可选参数 56
4.2.3 可变参数与关键字参数 57
4.3 函数式编程 58
4.3.1 高阶函数 58
4.3.2 装饰器 61
4.3.3 偏函数 62
4.3.4 变量作用域 62
4.3.5 闭包 63
4.4 模块与包 63
4.4.1 导入模块 63
4.4.2 包 65
4.5 新手问答 65
4.6 实训:设计算法,对列表进行排序 67
本章小结 68
第5章 面向对象的程序设计 69
5.1 面向对象 70
5.1.1 面向对象思想 70
5.1.2 类和对象 70
5.2 自定义类 71
5.2.1 创建类语法 72
5.2.2 创建可实例化类 72
5.2.3 创建抽象类 72
5.3 属性 73
5.3.1 类属性 73
5.3.2 实例属性 74
5.3.3 动态属性 76
5.3.4 特性 76
5.4 方法 79
5.4.1 实例方法 79
5.4.2 静态方法 80
5.4.3 类方法 81
5.4.4 抽象方法 81
5.4.5 动态方法 82
5.4.6 适用场景 83
5.5 类的继承 83
5.5.1 继承 83
5.5.2 多态 85
5.6 可调用对象 86
5.6.1 创建可调用对象 86
5.6.2 有状态的函数 86
5.7 不可变对象 87
5.7.1 可变对象 87
5.7.2 不可变对象 88
5.8 新手问答 88
5.9 实训:设计算法,构造一棵二叉树 90
本章小结 92
第6章 高级主题 93
6.1 生成器 94
6.1.1 创建生成器 94
6.1.2 yield关键字 95
6.1.3 将值传到生成器 95
6.2 迭代器 96
6.3 异步处理 97
6.3.1 多线程 97
6.3.2 多进程 99
6.3.3 协程 101
6.4 错误、调试 103
6.4.1 异常处理 103
6.4.2 调试源码 107
6.5 新手问答 108
6.6 实训:使用多进程技术统计数据并汇总 109
本章小结 110
第2篇 数据采集与数据清洗 113
第7章 网络数据采集 113
7.1 HTTP请求概述 114
7.1.1 HTTP请求过程 114
7.1.2 HTTP请求语义 114
7.2 XPath网页解析 114
7.2.1 网页解析工具 115
7.2.2 HTML页面概述 115
7.2.3 XPath语法 116
7.3 Scrapy数据采集入门 119
7.3.1 框架简介 119
7.3.2 框架安装 120
7.3.3 创建项目 121
7.3.4 创建爬虫 122
7.3.5 爬取网页 122
7.3.6 提取数据 122
7.3.7 数据存储 124
7.3.8 常用命令 125
7.4 Scrapy应对反爬虫程序 126
7.4.1 反爬虫简介 127
7.4.2 Scrapy应对反爬虫 127
7.5 CrawlSpider类 131
7.5.1 核心概念 131
7.5.2 爬取网络数据 132
7.6 分布式爬虫 132
7.6.1 分布式爬虫架构 132
7.6.2 使用scrapy_redis构建分布式爬虫 133
7.7 新手问答 136
7.8 实训:构建百度云音乐爬虫 136
本章小结 139
第8章 数据清洗 140
8.1 数据清洗的意义 141
8.2 数据清洗的内容 141
8.3 数据格式与存储类型 142
8.3.1 Excel数据 142
8.3.2 XML数据 143
8.3.3 JSON数据 144
8.3.4 CSV数据 144
8.4 数据清洗的步骤 145
8.4.1 找出噪声数据 145
8.4.2 清洗数据 145
8.4.3 保存数据 146
8.5 数据清洗的工具 147
8.5.1 使用Excel清洗数据 147
8.5.2 使用文本编辑器清洗数据 149
8.5.3 使用Tabula清洗数据 149
8.6 新手问答 151
8.7 实训:清洗百度云音乐数据并储存到CSV 151
本章小结 152
第3篇 数据分析与可视化 155
第9章 NumPy数值计算 155
9.1 NumPy基础 156
9.1.1 数组属性 156
9.1.2 数据类型 157
9.1.3 创建数组 158
9.1.4 基本操作 161
9.1.5 索引、切片和迭代 162
9.2 形状操作 164
9.2.1 更改形状 164
9.2.2 数组堆叠 165
9.2.3 矩阵拆分 166
9.3 副本、浅拷贝和深拷贝 166
9.3.1 副本 166
9.3.2 浅拷贝 167
9.3.3 深拷贝 167
9.4 高级索引 168
9.4.1 通过数组索引 168
9.4.2 通过布尔索引 170
9.4.3 通过ix( )函数索引 170
9.5 排序统计 171
9.5.1 排序 171
9.5.2 统计 173
9.6 新手问答 173
9.7 实训:销售额统计 174
本章小结 175
第10章 Matplotlib可视化 176
10.1 图形的基本要素 177
10.2 绘图基础 177
10.2.1 入门示例 178
10.2.2 图形样式 179
10.2.3 使用NumPy数组 180
10.2.4 使用关键字参数绘图 180
10.2.5 分组绘图 181
10.2.6 线条属性 182
10.2.7 画布与子图 183
10.2.8 添加文本 185
10.3 设置样式 186
10.3.1 样式表 186
10.3.2 临时引入样式 187
10.3.3 rc参数 188
10.4 图形样例 189
10.4.1 线图 189
10.4.2 直方图 192
10.4.3 条形图 193
10.4.4 饼状图 195
10.4.5 散点图 196
10.4.6 箱线图 197
10.4.7 极坐标图 197
10.4.8 折线图 198
10.5 新手问答 198
10.6 实训:营业数据可视化 199
本章小结 201
第11章 Pandas统计分析 202
11.1 Pandas数据结构 203
11.1.1 数据结构 203
11.1.2 序列 203
11.1.3 数据帧 206
11.1.4 访问数据 208
11.2 基础功能 210
11.2.1 描述性统计 210
11.2.2 索引重置 212
11.2.3 数据排序 213
11.2.4 数据遍历 214
11.2.5 自定义函数 216
11.3 统计分析 217
11.3.1 统计基础 217
11.3.2 聚合统计 220
11.3.3 分组统计 222
11.3.4 连接合并 225
11.4 时间数据 229
11.4.1 创建与转换 229
11.4.2 时间运算 230
11.5 数据整理 231
11.5.1 数据清洗 231
11.5.2 稀疏数据 233
11.6 高级功能 234
11.6.1 多维度分析 234
11.6.2 选取数据 235
11.7 读写MySQL数据库 236
11.8 新手问答 237
11.9 实训:成绩分析 237
本章小结 239
第12章 Seaborn可视化 240
12.1 Seaborn概述 241
12.2 可视化数据关系 242
12.2.1 使用散点图观察数据分布 242
12.2.2 使用线图观察数据趋势 245
12.2.3 在同一个画布上显示更多关系 246
12.3 根据数据分类绘图 246
12.3.1 分类散点图 247
12.3.2 在类别内部观察整体分布 248
12.3.3 在类别内部观察集中趋势 249
12.4 单变量与双变量 251
12.4.1 绘制单变量分布 251
12.4.2 绘制双变量分布 252
12.4.3 数据集中的成对关系 255
12.5 线性关系 256
12.5.1 线性回归函数 256
12.5.2 绘制多项式回归 257
12.6 新手问答 258
12.7 实训:成绩分析可视化 258
本章小结 260
第4篇 大数据存储与快速分析篇 263
第13章 Hadoop数据存储与基本操作 263
13.1 Hadoop概述 264
13.1.1 什么是大数据 264
13.1.2 大数据的特征 264
13.1.3 处理大数据遇到的困难 264
13.1.4 Hadoop入门 265
13.1.5 Hadoop简介 265
13.1.6 Hadoop的生态 267
13.2 Hadoop数据存储与任务调度原理 268
13.2.1 HDFS的体系架构与文件读写流程 268
13.2.2 YARN的结构与资源调度过程 271
13.2.3 MapReduce执行过程 271
13.3 Hadoop基础环境搭建 273
13.3.1 安装虚拟机 273
13.3.2 安装Linux系统和客户端工具 276
13.3.3 安装Hadoop 289
13.3.4 安装SSH 291
13.3.5 安装JAVA 292
13.4 Hadoop部署模式 294
13.4.1 Hadoop单机部署 294
13.4.2 Hadoop伪分布式部署 295
13.5 Hadoop常用操作命令 298
13.5.1 系统管理 298
13.5.2 文件管理 299
13.6 新手问答 300
13.7 实训:动手搭建Hadoop集群环境 301
本章小结 309
第14章 Spark入门 310
14.1 Spark概述 311
14.1.1 Spark简介 311
14.1.2 Spark特点 311
14.1.3 Spark生态 312
14.2 Spark核心原理 312
14.2.1 重要概念 313
14.2.2 架构设计 313
14.2.3 运行流程 314
14.3 Spark基础环境搭建 315
14.3.1 安装Python 3 315
14.3.2 安装Spark 316
14.4 Spark运行模式 317
14.4.1 Local模式 317
14.4.2 Standalone模式 318
14.4.3 Mesos模式 320
14.4.4 YARN模式 320
14.5 新手问答 321
14.6 实训:动手搭建Spark集群 322
本章小结 323
第15章 Spark RDD编程 324
15.1 RDD设计原理 325
15.1.1 RDD常用操作 325
15.1.2 RDD依赖关系 326
15.1.3 Stage概述 327
15.2 RDD编程 328
15.2.1 准备工作 328
15.2.2 读取外部数据源创建RDD 329
15.2.3 使用数组创建RDD 330
15.2.4 转换操作 330
15.2.5 行动操作 333
15.3 键值对RDD 335
15.3.1 读取外部文件创建PairRDD 336
15.3.2 使用数组创建Pair RDD 336
15.3.3 常用的键值对转换操作 337
15.4 文件读写 340
15.4.1 读取HDFS并保存到本地 340
15.4.2 读取HDFS并保存到HDFS 341
15.4.3 读取本地文件并保存到HDFS 341
15.5 编程进阶 342
15.5.1 分区 342
15.5.2 持久化 343
15.5.3 共享变量 345
15.6 新手问答 347
15.7 实训:统计海鲜销售情况 348
本章小结 350
第16章 Spark SQL编程 351
16.1 Spark SQL概述 352
16.1.1 Spark SQL简介 352
16.1.2 Spark SQL特点 353
16.1.3 Spark SQL CLI工具 353
16.2 创建DataFrame对象 360
16.2.1 读取文本文件 360
16.2.2 读取MySQL 361
16.2.3 读取Hive 362
16.2.4 将RDD转换为DataFrame 362
16.3 DataFrame常用API 364
16.3.1 显示数据 364
16.3.2 查询数据 365
16.3.3 统计数据 368
16.3.4 执行SQL语句 369
16.4 保存DataFrame 370
16.4.1 保存到json文件 370
16.4.2 保存到MySQL 371
16.4.3 保存到Hive 371
16.5 新手问答 372
16.6 实训:统计手机销售情况 373
本章小结 375
第17章 Spark流式计算编程 376
17.1 流计算简介 377
17.1.1 流式处理背景 377
17.1.2 常用流计算框架 378
17.2 Discretized Stream 379
17.2.1 快速入门 379
17.2.2 数据源 382
17.3 Structured Streaming 385
17.3.1 快速入门 385
17.3.2 编程模型 386
17.3.3 流式DataFrame源 389
17.3.4 集成Kafka和窗口聚合 390
17.3.5 查询输出 395
17.4 新手问答 397
17.5 实训:实时统计贷款金额 397
本章小结 398
第5篇 项目实战篇 401
第18章 分析电商网站销售数据 401
18.1 目标分析 402
18.1.1 分析主页面 402
18.1.2 分析商家商品列表 403
18.1.3 分析商品详情页面 405
18.2 数据采集 405
18.2.1 模型设计 406
18.2.2 架构设计 406
18.2.3 采集数据 407
18.3 数据分析 411
18.3.1 将数据上传到HDFS 411
18.3.2 筛选口碑最好的十户商家 412
18.3.3 筛选人均消费最高的十户商家 412
18.3.4 筛选卖得最好的十个商品 413
18.3.5 筛选卖得最贵的十户商家 414
18.3.6 分析口碑和销量的关系 415
本章小结 416
第19章 分析旅游网站数据 417
19.1 目标分析 418
19.1.1 分析主页面 418
19.1.2 分析游记详情页面 420
19.2 数据采集 420
19.2.1 模型设计 421
19.2.2 架构设计 421
19.2.3 采集数据 421
19.3 数据分析 425
19.3.1 分析“驴友”普遍去了哪些地方 425
19.3.2 分析“驴友”出行特点 426
19.3.3 推测“驴友”都喜欢在哪个季节出行 427
19.3.4 推测未来的热门景点 428
本章小结 429
第20章 分析在售二手房数据 430
20.1 目标分析 431
20.1.1 分析主页面 431
20.1.2 分析房源详情页面 432
20.2 数据采集 434
20.2.1 模型设计 434
20.2.2 架构设计 435
20.2.3 安装MongoDB 435
20.2.4 采集数据 437
20.3 数据分析 440
20.3.1 给Spark配置MongoDB驱动 440
20.3.2 筛选靠近地铁的房源 440
20.3.3 分析各区域在售房源占比 441
20.3.4 分析在售房源的户型 442
20.3.5 分析房龄和平米单价的关系 443
20.3.6 分析在售房源小区的热度 445
本章小结 446
附录:Python常见面试题精选 447
主要参考文献 450