本书包含16个有趣的编程项目,共分为12章。每章从一个明确的项目目标开始,引导读者像程序员一样思考解决问题的方法并完成任务。本书介绍用贝叶斯法则确定事件概率,用自然语言处理技术分析语料库,用collections和random等模块加密字符,用OpenCV和NumPy等库实现图像差异检测、图像属性测量、人脸检测、人脸识别等计算机视觉应用,用turtle模块模拟图像移动轨迹,用pandas库分析数据,用bokeh等库进行数据可视化。通过对本书的学习,读者将学会使用Python创建完整、实用的Python程序。
本书能帮助Python初学者理解编程思想并培养Python编程技能,也能帮助有一定编程基础的Python程序员从项目实战中获得解决实际问题的启发。
1.适用于Python 3.7及以上版本,提供配套源代码。
2.16个有趣的项目案例,实用性和趣味性兼备。
3.项目式的学习方法,提升分析和解决实际问题的能力。
本书每章先介绍一个明确的项目目标并讨论问题的解决方法,然后给出一个任务,例如指导海岸警卫队的搜救工作、策划并执行NASA的月球飞行、使用人脸识别保护进入安全实验室的通道等,让读者像程序员一样思考。在这个过程中,读者将学会如何:
·使用matplotlib、NumPy、bokeh、pandas、requests、Beautiful Soup和turtle等库;
·使用自然语言处理和计算机视觉模块,如NLTK和OpenCV;
·编写程序,探测和跟踪在星域中移动的物体;
·从网上抓取演讲稿,并自动进行总结;
·使用火星轨道器激光测高仪(MOLA)地图选择航天器的着陆点;
·使用数据绘图和可视化工具,绘制地图并实现人口密度可视化。
本书中的程序对初学者很友好,而且随着内容的不断深入,读者将学到更多复杂的技术,提升编程能力,最终达到用Python解决实际问题的目的。
李·沃恩(Lee Vaughan)是一位程序员、流行文化爱好者、教育工作者。作为埃克森美孚公司的前主管级科学家,他负责构建和审查计算机模型,开发和测试软件,并培训地质学家和工程师。除了本书,他还撰写了《Python编程实战——妙趣横生的项目之旅》,他通过这两本书帮助读者提升Python技能,并使读者在学习的过程中获得乐趣!
第 1章 用贝叶斯法则营救失事船只的船员 1
1.1 贝叶斯法则 1
1.2 项目1:搜索和救援 4
1.2.1 策略 4
1.2.2 安装Python库 5
1.2.3 贝叶斯代码 7
1.2.4 玩游戏 18
1.3 小结 19
1.4 延伸阅读 20
1.5 挑战项目:更聪明的搜索 20
1.6 挑战项目:用蒙特卡洛模拟寻找最佳策略 20
1.7 挑战项目:计算检测概率 20
第 2章 用计量文体学来确定作者的身份 22
2.1 项目2:《巴斯克维尔的猎犬》《世界大战》和《失落的世界》 22
2.1.1 策略 23
2.1.2 安装NLTK 23
2.1.3 语料库 26
2.1.4 计量文体学代码 26
2.2 小结 38
2.3 延伸阅读 39
2.4 实践项目:用分散图分析《巴斯克维尔的猎犬》 39
2.5 实践项目:标点符号热图 40
2.6 挑战项目:修正频率 41
第3章 用自然语言处理总结演讲 42
3.1 项目3:《我有一个梦想》总结演讲稿! 42
3.1.1 策略 43
3.1.2 网页抓取 43
3.1.3 《我有一个梦想》的代码 43
3.2 项目4:用gensim总结演讲内容 50
3.2.1 安装gensim 50
3.2.2 《整理你的床》的代码 51
3.3 项目5: 用词云总结文本 53
3.3.1 词云和PIL模块 53
3.3.2 词云的代码 54
3.3.3 微调词云 57
3.4 小结 59
3.5 延伸阅读 59
3.6 挑战项目:游戏之夜 59
3.7 挑战项目:对总结进行总结 60
3.8 挑战项目:小说总结 61
3.9 挑战项目:不只是你说什么,而是你怎么说! 62
第4章 使用书籍密码发送超级秘密消息 63
4.1 一次性密码本 63
4.2 瑞贝卡密码 65
4.3 项目6:Rebecca的数字密钥 65
4.3.1 策略 66
4.3.2 加密代码 67
4.3.3 发送消息 74
4.4 小结 74
4.5 延伸阅读 74
4.6 实践项目:对字符绘图 75
4.7 实践项目:发送秘密 76
第5章 发现冥王星 78
5.1 项目7:复制闪烁比较器 79
5.1.1 策略 80
5.1.2 数据 80
5.1.3 闪烁比较器代码 81
5.1.4 使用闪烁比较器 91
5.2 项目8:用图像差异探测瞬变天体 93
5.2.1 策略 93
5.2.2 瞬变探测器代码 93
5.2.3 使用瞬变探测器 98
5.3 小结 98
5.4 延伸阅读 99
5.5 实践项目:绘制轨道路径 99
5.6 实践项目:区别是什么 99
5.7 挑战项目:数星星 100
第6章 模拟阿波罗8号的自由返回轨迹 101
6.1 理解阿波罗8号任务 102
6.1.1 自由返回轨迹 102
6.1.2 三体问题 103
6.2 项目9:与阿波罗8号一起登月! 103
6.2.1 使用turtle模块 104
6.2.2 策略 107
6.2.3 阿波罗8号自由返回的代码 108
6.2.4 运行模拟 118
6.3 小结 120
6.4 延伸阅读 120
6.5 实践项目:模拟搜索模式 120
6.6 实践项目:让CSM启动 122
6.7 实践项目:让CSM停下来 122
6.8 挑战项目:真实比例模拟 123
6.9 挑战项目:真正的阿波罗8号 123
第7章 选择火星着陆点 124
7.1 如何登陆火星 124
7.2 MOLA地图 125
7.3 项目10:选择火星登陆点 126
7.3.1 策略 126
7.3.2 地点选择器代码 127
7.3.3 结果 140
7.4 小结 141
7.5 延伸阅读 141
7.6 实践项目:确认绘画成为图像的一部分 142
7.7 实践项目:提取高程剖面图 142
7.8 实践项目:3D绘图 143
7.9 实践项目:混合地图 143
7.10 挑战项目:三人成列 145
7.11 挑战项目:绕回矩形 145
第8章 探测遥远的系外行星 147
8.1 凌星测光法 147
8.2 项目11:模拟系外行星的凌星过程 149
8.2.1 策略 150
8.2.2 凌星代码 150
8.2.3 凌星测光实验 155
8.3 项目12:系外行星成像 157
8.3.1 策略 157
8.3.2 Pixelator代码 159
8.4 小结 163
8.5 延伸阅读 163
8.6 实践项目:探测外星巨型建筑 164
8.7 实践项目:探测小行星凌星 165
8.8 实践项目:考虑临边昏暗 166
8.9 实践项目:探测星斑 169
8.10 实践项目:探测外星舰队 169
8.11 实践项目:探测有月亮的行星 170
8.12 实践项目:测量系外行星的日长 170
8.13 挑战项目:生成动态光度曲线 171
第9章 识别朋友或敌人 172
9.1 检测照片中的人脸 172
9.2 项目13:编写机器人哨兵炮程序 173
9.2.1 策略 175
9.2.2 代码 175
9.2.3 结果 185
9.3 从视频流中检测人脸 186
9.4 小结 189
9.5 延伸阅读 189
9.6 实践项目:模糊人脸 189
9.7 挑战项目:检测猫脸 190
第 10章 用人脸识别限制访问 191
10.1 用局部二进制模式直方图识别人脸 191
10.1.1 人脸识别流程图 192
10.1.2 提取局部二进制模式直方图 193
10.2 项目14:限制接触外星制品 195
10.2.1 策略 195
10.2.2 支持模块和文件 196
10.2.3 视频采集代码 196
10.2.4 人脸训练器代码 200
10.2.5 人脸预测器代码 202
10.2.6 结果 204
10.3 小结 205
10.4 延伸阅读 205
10.5 挑战项目:添加密码和视频采集 205
10.6 挑战项目:长得像和双胞胎 206
10.7 挑战项目:时间机器 206
第 11章 创建交互式僵尸逃离地图 207
11.1 项目15:用地区分布图实现人口密度可视化 207
11.1.1 策略 208
11.1.2 Python数据分析库 208
11.1.3 bokeh和holoviews库 210
11.1.4 安装pandas、bokeh和holoviews 210
11.1.5 访问县、州、失业和人口数据 210
11.1.6 侵入holoviews 212
11.1.7 地区分布图代码 214
11.1.8 计划逃离 220
11.2 小结 223
11.3 延伸阅读 224
11.4 挑战项目:绘制美国人口变化图 224
第 12章 我们生活在计算机模拟中吗 225
12.1 项目16:生命、宇宙和耶尔特的池塘 225
12.1.1 池塘模拟代码 226
12.1.2 池塘模拟的影响 228
12.1.3 测量穿越格子的成本 230
12.1.4 结果 232
12.1.5 策略 232
12.2 小结 233
12.3 延伸阅读 233
12.4 继续前进 234
12.5 挑战项目:寻找安全空间 234
12.6 挑战项目:太阳来了 235
12.7 挑战项目:通过狗的眼睛看 235
12.8 挑战项目:自定义单词搜索 235
12.9 挑战项目:简化庆典幻灯片 235
12.10 挑战项目:编织一张纠结的网 235
12.11 挑战项目:走,去山上告诉它 236
附录 实践项目解决方案 237