有电书房店铺主页二维码
有电书房
微信扫描二维码,访问我们的微信店铺

面向数据科学家的软件工程

74.45 限时折扣 原价:¥79.20
运费: ¥ 5.00-22.00
库存: 300 件
面向数据科学家的软件工程 商品图0
面向数据科学家的软件工程 商品图1
面向数据科学家的软件工程 商品图2
面向数据科学家的软件工程 商品缩略图0 面向数据科学家的软件工程 商品缩略图1 面向数据科学家的软件工程 商品缩略图2

商品详情

书名:面向数据科学家的软件工程
书号:978-7-5239-1152-5
定价:88元
作者:[美]凯瑟琳·尼尔森(Catherine Nelson) 著 林晨 译
出版时间:2026-08-12
出版社:中国电力出版社
页码: 280    字数(千字):272
开本:特16开    版次:B1    印次:Y1


品牌介绍

中国电力出版社成立于 1951 年,作为中国成立最早的中央科技出版社之一,曾隶属于水利电力部、能源部、电力工业部、国家电力公司,现为国家电网公司所属的科技出版社,在电气技术专业出版领域享有极高的声誉。该社作为以图书出版为主体,音像、电子出版物、期刊、网络出版共同发展的大型出版企业,以强大的出版资源和高素质的专业队伍,致力于向读者提供包括电力工程、电气工程、建筑工程、电子技术、信息技术、外语、大中专教材、家教等学科门类齐全的权威出版物,也竭力为广大师生提供精品教材,是教育部和北京市教委规划教材的出版基地之一。


编辑推荐

编辑推荐 数据科学实践于代码之中。编写可复现、健壮且可扩展的代码是数据科学项目成功的关键,对于处理生产代码的人员而言,更是一项必备能力。这本实用书籍弥合了数据科学与软件工程之间的鸿沟,并清晰地阐述了如何将软件工程中的最佳实践应用于数据科学。 专家推荐 “Catherine的著作揭开了如何将个人工作扩展至生产规模的神秘面纱。无论你是数据科学家、开发人员还是高管,她都能让大规模数据服务变得触手可及。” ——Carol Willing Python核心开发者, 2017年ACM软件系统奖得主 (因Jupyter的持久影响力) “这本书……提供了一份清晰、可操作的指南,填补了许多数据科学家在软件工程方面面临的关键技能缺口,将他们的编码实践提升到新的高度。” ——Gabriela de Queiroz 微软人工智能总监, 初创企业顾问和天使投资人


产品特色

从Notebook到可扩展系统。


作者介绍

Catherine Nelson是一名自由职业数据科学家和作家。此前,她曾在 SAP Concur 担任首席数据科学家,负责开发生产级机器学习应用并创建新的商务旅行功能。她还是O’Reilly出版的《Building Machine Learning Pipelines》一书的合著者。


内容介绍

本书包括以下内容:理解数据结构与面向对象编程。清晰且熟练地为代码编写文档。打包并分享你的代码。将数据科学代码与更大的代码库集成。学习如何编写API。创建安全的代码。将最佳实践应用于测试、错误处理和日志记录等常见任务。更有效地与软件工程师协作。用Python编写更高效、可维护且健壮的代码。将你的数据科学项目投入生产。
本书适用于数据科学家、数据分析师、机器学习工程师和数据工程师。


前言

前言 数据科学实践于代码之中。无论是构建机器学习系统、首次探索数据、可视化数据分布,还是进行统计分析,你的编码和计算能力都是这一切的基础。如果你正在开发生产代码,这些技能对于编写成功且可维护的代码至关重要。即使你不在一个生产软件团队中工作,编写更健壮、可复现且易于其他数据科学家使用的代码也会让你受益匪浅。如果你独自工作,良好的实践将加速你的编码,并帮助你在中断后重新拾起代码。 我并非一开始就认识到良好工程实践的价值。在我数据科学生涯的早期,我加入了一个团队,并且是其中唯一的数据科学家。我的同事是软件工程师和设计师,我曾担心在没有其他数据科学家可以学习的情况下,很难提升自己的技能。我向一位开发人员同事表达了我的担忧。他说:“学会编写更好的代码会让你能做更多的数据科学。”这句话让我印象深刻,自那以后我发现,提升软件工程技能对从事数据科学工作极其有益。它帮助我编写出更易于同事使用的代码,并且在数月后回头修改时,代码依然易于调整。 我写这本书的目的是,在你编写更好的数据科学代码的旅程中为你提供指导。我将描述常见任务的最佳实践,包括测试、错误处理和日志记录。我将解释如何编写更易于维护的代码,以及如何让你的项目在增长时依然保持健壮。我将向你展示如何让你的代码易于他人使用,读完本书后,你将能够将你的数据科学代码集成到更大的代码库中。 你可能会认为,在生成式人工智能时代,软件工程技能不那么有用了。难道不能让ChatGPT 直接为你写代码吗?我认为,即使你可以借助AI 助手加速编码,本书的内容依然同样有用。正如我将在全书中所展示的,你编写的每个函数都有许多选择,理解为何选择某行代码而非另一行的原则极其有帮助。你需要评估任何AI 助手的输出,并检查它是否为你正在处理的问题做出了恰当的选择。 本书将帮助你做到这一点。 本书适合哪些读者 本书主要面向数据科学家,但从事数据分析师、机器学习(ML)工程师和数据工程师等密切相关领域的人士也会觉得有所助益。我将解释一些成熟的软件工程原则,这些原则对任何编写代码的人都有用,但我用于说明这些原则的例子也是数据科学家最熟悉的。 我力求使本书对相对新手的数据科学家易于理解。或许你刚刚完成了数据科学学位,或者你正在开始你的第一份行业工作。本书将涵盖数据科学入门课程中不总是包含的软件工程实用技能。或许你可能没有上过正式的数据科学课程。或许你是自学的,又或者你正在从数学或其他科学领域转向数据科学。无论你通过哪种途径进入数据科学,本书都适合你。 经验更丰富的数据科学家也将学到很多东西,如果你在工作中经常与软件开发人员互动,你会发现本书特别有用。你将学习有助于你在更大的代码库中高效工作的技能,以及如何编写能在生产环境中高效运行的Python 代码。 我假设你已经掌握了数据科学的基础知识,包括数据探索、数据可视化、数据整理、基础机器学习,以及与之相关的数学技能。我还假设你已经了解了Python 编码的基础知识:如何编写函数和控制流语句,以及如何使用NumPy、Matplotlib、pandas 和scikit-learn 等模块的基础知识。如果这些对你来说是新知识,我推荐以下书籍: • 《Python Data Science Handbook》,作者Jake VanderPlas(O’Reilly,2023) • 《Data Science From Scratch》,作者Joel Grus(O’Reilly, 2019) • 《Learning Data Science》,作者Sam Lau,Joseph Gonzalez,Deborah Nolan(O’Reilly, 2023) 本书不适合寻求学习数据科学和机器学习技能的软件开发人员。如果这是你的情况,我推荐Laurence Moroney 撰写的《AI and Machine Learning for Coders》(O’Reilly, 2020)。 为什么选择Python 本书中的所有代码示例都用Python 编写,许多章节描述了Python 特有的工具。近年来,Python 已成为数据科学领域最受欢迎的编程语言。以下引用来自Anaconda 2021 年对3000 多名数据科学家进行的调查(): “63% 的受访者表示他们总是或经常使用Python,使其成为今年调查中最受欢迎的编程语言。此外,71% 的教育工作者正在教授Python,88% 的学生报告称他们被教授Python 以准备进入数据科学/机器学习领域。” Python 拥有一套极其坚实的数据科学开源库,拥有良好的支持和健康的维护者社区。大型引领潮流的公司已选择Python 作为其主要的机器学习框架,包括TensorFlow(Google)和PyTorch(Meta)。因此,Python 在从事生产级机器学习代码的数据科学家中显然特别受欢迎,在这些工作中,良好的编码技能尤为重要。 据我所知,Python 社区一直很友好和热情,有许多优秀的活动帮助我提高了技能。这是我首选的编程语言,因此它顺理成章被本书选用。 本书不包含什么 正如我在“这本书适合哪些读者”中提到的,本书不是数据科学入门,也不是编程入门。此外,本书也不包含以下任何主题: 安装Python:假设你已经安装了最新版本的Python(3.9 或更高版本),并且你拥有某种集成开发环境(IDE)来编写代码,例如VS Code 或PyCharm。我不会描述如何安装Python,但我会在第10 章中解释如何设置虚拟环境。 其他编程语言:本书仅涵盖Python,原因如“为什么选择Python”中所述。 我没有包含R、Julia、SQL、MATLAB 或任何其他语言的示例。 命令行脚本:命令行或shell 脚本是处理文件和文本的强大方式。我没有在这里包含它,因为其他资料已经详细介绍了,包括Jeroen Janssens 撰写的《Data Science at the Command Line》(O’Reilly, 2021)。 高级Python:本书中的示例包含相对简单的代码。要了解更高级的Python 编码,我推荐Patrick Viafore 撰写的《Robust Python》(O’Reilly, 2021)。 本书概览 在本书中,我首先会详细介绍编写单个函数层面的良好实践,并深入探讨如何改进你的编码。在后续章节中,我将描述如何使你的代码易于他人使用,并解释一些常见的部署技术和软件开发中的最佳实践。 本书分为14 章。以下是各章内容的概述: 第1 章,介绍了如何编写简单、模块化、可读、高效和健壮的代码的基础知识。 第2 章,描述了如何衡量代码性能,并讨论了一些使你的数据科学代码运行更高效的选项。 第3 章,讨论了选择你所使用的数据结构时涉及的权衡。你选择的数据结构可以极大地影响代码的效率。 第4 章,描述了这些编程风格的基础知识。正确使用它们可以帮助你编写结构良好且高效的代码。 第5 章,指导你了解代码崩溃时该怎么做,如何抛出有用的错误,以及识别错误来源的策略。 第6 章,描述了如何使用能够自动化此过程的工具来标准化你的代码。 第7 章,介绍了如何通过测试使你的代码对输入变化具有鲁棒性。这是编写易于维护的代码的关键一步。 第8 章, 讨论了如何以标准化、一致的方式构建你的项目, 以及如何从notebook 转换到脚本。 第9 章,向你展示如何使你的代码对其他人可读,包括命名和代码注释的最佳实践。 第10 章,涵盖了使用Git 进行版本控制的基础知识,以及如何在虚拟环境中管理你的项目依赖。它还展示了将脚本转换为Python 包的步骤。 第11 章, 介绍了API 的概念, 展示了如何使用它们, 并包含了一个使用FastAPI 的基本示例。 第12 章,描述了代码部署的基础知识,如何使用CI/CD(持续集成/ 持续部署或交付)和GitHub Actions 自动化你的代码部署,以及如何将你的代码部署到Docker 容器中的云环境。 第13 章,讨论了常见的安全风险,如何缓解这些风险,以及机器学习特有的一些安全威胁。 第14 章,向你介绍了软件开发团队中的常见实践,包括敏捷工作方式,描述了软件团队中的常见角色,并介绍了更广泛的社区。 最后总结了对未来编码可能如何变化的思考,以及接下来可以做的一些建议。 阅读顺序 你不必按顺序阅读本书的章节,但我建议你从阅读第1 章开始。在这一章中,我将解释如何编写优秀代码的基础知识,并介绍我将在本书其余部分更详细地讨论的主题。我还将介绍我在本书中使用的几个代码示例。 阅读完第1 章后,许多章节可以单独阅读,但有以下例外: • 你应该在阅读第3 章之前阅读第2 章。 • 你应该在阅读第12 章之前阅读第6 章、第7 章、第10 章和第11 章。 有些章节包含一个深入探讨机器学习主题的部分。这些部分的名称中总是包含“ML”,如果你的工作不涉及机器学习,你可以跳过这些部分,而不会错过理解该章节其余内容所需的任何信息。 排版约定 本书采用以下排版约定。 斜体(Italic) 表示新术语、URL、电子邮件地址、文件名和文件扩展名。 等宽字体(Constant width) 表示程序清单,在段落内表示程序元素,例如变量、函数名称、数据库、数据类型、环境变量、语句和关键字。 粗体等宽字体(Constant width bold) 表示应由用户原封不动输入的命令或其他文本。 斜体等宽字体(Constant width italic) 表示应该替换成用户提供值的文本,或者由上下文决定的值。 使用代码示例 本书补充材料(代码示例、练习等)可在https://github.com/catherinenelson1/SEforDS 下载。 本书旨在帮助你完成工作。通常,如果本书提供示例代码,你可以在程序和文档中使用它。除非你复制了代码的很大一部分,否则无需联系我们获得许可。例如,编写一个使用本书中几个代码片段的程序不需要许可。销售或分发O’Reilly 图书中的示例确实需要许可。引用本书并引用示例代码来回答问题不需要许可。将本书中大量示例代码整合到你的产品文档中确实需要许可。 我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和ISBN,例如:“Software Engineering for Data Scientists by Catherine Nelson (O’Reilly)。Copyright 2024 Catherine Nelson,978-1-098-13620-8。” 如果你觉得你对代码示例的使用超出了合理使用范围或上述许可,请随时通过permissions@oreilly.com 联系我们。 对本书中文版有任何建议可以发电子邮件到errata@oreilly.com.cn。 O’Reilly 在线学习平台(O’Reilly Online Learning) 近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。 公司独有的专家和改革创新者网络通过O’Reilly 书籍、文章以及在线学习平台,分享他们的专业知识和实践经验。O’Reilly 在线学习平台按照您的需要提供实时培训课程、深入学习渠道、交互式编程环境以及来自O’Reilly 和其他200 多家出版商的大量书籍与视频资料。更多信息,请访问网站:/。 联系我们 任何有关本书的意见或疑问,请按照以下地址联系出版社。 美国: O’Reilly Media, Inc. 141 Stony Circle, Suite 195 Santa Rosa, CA 95401 中国: 北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035) 奥莱利技术咨询(北京)有限公司 我们为这本书设有一个网页,列出勘误、示例和任何额外信息。你可以在这里访问此页面:。 获取我们图书和课程的新闻及信息,请访问https://oreilly.com。 我们的LinkedIn:。 我们的YouTube:。 致谢 向所有帮助我完成这本书的人致以衷心的感谢!你们的评论、反馈、讨论和支持都非常宝贵。 与O’Reilly 团队合作绝对是一种乐趣。感谢你Virginia Wilson,你是一位卓越、给予支持的编辑。我真的很喜欢和你共事。感谢Nicole Butterfield 提供的宝贵整体指导以及她在图书提案过程中的帮助。感谢Jeff Bleiel 对其中几章进行了细致的审阅,以及Chris Faucher 让制作过程顺利进行。 非常感谢我的技术审稿人William Jamir Silva、Ganesh Harke、Jo Stichbury、Antony Milne、Jess Males 和Swetha Kommuri。你们的反馈极具建设性,让最终的书籍变得更好。我非常感谢你们对细节的关注和有益的建议。感谢Rob Masson 对最终草稿提出的出色反馈以及在整个写作过程中的深思熟虑的讨论。 感谢Carol Willing、Ricardo Martín Brualla、Chris Trudeau、Michelle Liu、Maryam Ehsani、Shivani Patel、John Sweet、Andy Ross 和Abigail Mesrenyame Dogbe 提供了宝贵的技术讨论和富有洞察力的对话。我还从Python 和PyLadies社区中受益匪浅;感谢所有为此付出时间的志愿者。 最后,感谢我出色的朋友和家人给予的所有支持。Rob、妈妈、Richard、Lina、Salomé、Ricardo、Chris、Kiana 和Katie,我十分感谢你们所有人。


目录

目录
前言 1
第1 章 什么是好代码 11
11 为什么好代码至关重要 11
12 适应变化的需求 12
13 简洁性 13
131 不要重复自己(DRY) 14
132 避免冗长的代码 16
14 模块化 17
15 可读性 18
151 标准和惯例 19
152 命名 19
153 清理 20
154 文档 21
16 性能 21
17 健壮性 21
171 错误与日志 22
172 测试 22
18 核心要点23
第2 章 分析代码性能 25
21 提高性能的方法 26
22 为你的代码计时 28
23 代码性能分析 31
231 cProfile 31
232 line_profiler 34
233 使用Memray 进行内存性能分析 35
24 时间复杂度 37
241 如何估算时间复杂度37
242 大O 符号 39
25 核心要点41
第3 章 有效利用数据结构 43
31 Python 数据结构 44
311 列表 44
312 元组 46
313 字典 46
314 集合 48
32 NumPy 数组 50
321 NumPy 数组功能 50
322 NumPy 数组性能考量 51
323 使用Dask 的数组操作 55
324 机器学习中的数组 57
33 pandas DataFrames 58
331 DataFrame 功能 59
332 DataFrame 性能考量 60
34 核心要点61
第4 章 面向对象编程和函数式编程 63
41 面向对象编程 64
411 类、方法和属性 64
412 定义自己的类 67
413 面向对象原则 70
42 函数式编程 73
421 匿名函数和map() 74
422 将函数应用于DataFrames 75
43 应该使用哪种范式 76
44 核心要点77
第5 章 错误、日志和调试 79
51 Python 中的错误 79
511 解读Python 错误信息 79
512 错误处理 81
513 触发错误 84
52 日志记录86
521 记录什么 86
522 日志配置 87
523 如何记录日志 88
53 调试 90
531 调试策略 90
532 调试工具 91
54 核心要点97
第6 章 代码格式化、静态代码检查与类型检查 99
61 代码格式化与风格指南 100
611 PEP8 101
612 导入格式化 102
613 使用Black 自动格式化代码 103
62 Linting 106
621 Linting 工具 107
622 在你的IDE 中进行代码检查 109
63 类型检查 110
631 类型注解 111
632 使用mypy 进行类型检查 113
64 核心要点 114
第7 章 测试你的代码 115
71 为何应该编写测试 116
72 何时进行测试 117
73 如何编写和运行测试 118
731 一个基本测试 118
732 测试意外输入 120
733 使用Pytest 运行自动化测试 122
74 测试类型124
741 单元测试 125
742 集成测试 125
75 数据验证126
751 数据验证示例 127
752 使用Pandera 进行数据验证 127
753 使用Pydantic 进行数据验证 129
76 机器学习测试 131
761 测试模型训练 132
762 测试模型推理 132
77 核心要点133
第8 章 设计与重构 135
81 项目设计与结构 136
811 项目设计考虑事项 136
812 一个机器学习项目示例 138
82 代码设计140
821 模块化代码 141
822 代码设计框架 142
823 接口与契约 142
824 耦合 143
83 从Notebook 到可扩展脚本 145
831 为什么使用脚本而不是Notebook 146
832 从Notebook 创建脚本147
84 重构 150
841 重构策略 151
842 重构工作流程示例 152
85 核心要点154
第9 章 文档 155
91 代码库中的文档 156
911 名称 157
912 注释 159
913 docstring 161
914 Readme 文件、教程及其他更长的文档 163
92 Jupyter Notebook 中的文档 164
93 记录机器学习实验 166
94 核心要点167
第10 章 共享你的代码:版本控制、依赖和打包 169
101 使用Git 进行版本控制 169
1011 Git 如何工作 170
1012 跟踪变更与提交 172
1013 远程和本地173
1014 分支与拉取请求 175
102 依赖和虚拟环境 178
1021 虚拟环境 179
1022 使用pip 管理依赖 181
1023 使用Poetry 管理依赖 182
103 Python 打包 185
1031 包的基础 186
1032 pyprojecttoml 187
1033 构建和上传包 188
104 核心要点 190
第11 章 API 接口 193
111 调用API 194
1111 HTTP 方法和状态码 194
1112 从SDG API 获取数据 195
112 使用FastAPI 创建你自己的API 199
1121 设置API 199
1122 为你的API 添加功能 203
1123 向你的API 发出请求 206
113 核心要点 208
第12 章 自动化与部署 209
121 部署代码 210
122 自动化示例 211
1221 预提交钩子211
1222 GitHub Actions 215
123 云部署 220
1231 容器和Docker 220
1232 构建Docker 容器 221
1233 在Google Cloud 上部署API 223
1234 在其他云提供商上部署API 225
124 核心要点 225
第13 章 安全 227
131 什么是安全 227
132 安全风险 229
1321 凭据、物理安全和社会工程 229
1322 第三方包 230
1323 Python Pickle 模块 230
1324 版本控制风险 230
1325 API 安全风险 231
133 安全实践 231
1331 安全审查和政策 232
1332 安全编码工具 232
1333 简单代码扫描 233
134 机器学习安全 235
1341 对机器学习系统的攻击 235
1342 机器学习系统安全实践 237
135 核心要点 238
第14 章 在软件行业工作 241
141 开发原则与实践 241
1411 软件开发生命周期(SDLC) 241
1412 瀑布模型 242
1413 敏捷开发 243
1414 敏捷数据科学 244
142 软件行业的角色 245
1421 软件工程师245
1422 质量保证工程师或测试工程师 246
1423 数据工程师247
1424 数据分析师248
1425 产品经理 248
1426 用户体验研究员 249
1427 设计师 250
143 社区 251
1431 开源 251
1432 在活动中演讲 252
1433 Python 社区 253
144 核心要点 254
第15 章 下一步 257
151 代码的未来 259
152 你的代码生涯 262
153 鸣谢 262


有电书房店铺主页二维码
有电书房
扫描二维码,访问我们的微信店铺

面向数据科学家的软件工程

手机启动微信
扫一扫购买

收藏到微信 or 发给朋友

1. 打开微信,扫一扫左侧二维码

2. 点击右上角图标

点击右上角分享图标

3. 发送给朋友、分享到朋友圈、收藏

发送给朋友、分享到朋友圈、收藏

微信支付

支付宝

扫一扫购买

收藏到微信 or 发给朋友

1. 打开微信,扫一扫左侧二维码

2. 点击右上角图标

点击右上角分享图标

3. 发送给朋友、分享到朋友圈、收藏

发送给朋友、分享到朋友圈、收藏