面向数据科学家的软件工程
面向数据科学家的软件工程
Catherine Nelson
林晨 译
出版时间:2026年08月(预计)
页数:262(预计)
“Catherine的著作揭开了如何将个人工作扩展至生产规模的神秘面纱。无论你是数据科学家、开发人员还是高管,她都能让大规模数据服务变得触手可及。”
——Carol Willing
Python核心开发者,2017年ACM软件系统奖得主(因Jupyter的持久影响力)
“这本书……提供了一份清晰、可操作的指南,填补了许多数据科学家在软件工程方面面临的关键技能缺口,将他们的编码实践提升到新的高度。”
——Gabriela de Queiroz
微软人工智能总监;初创企业顾问和天使投资人

数据科学实践于代码之中。编写可复现、健壮且可扩展的代码是数据科学项目成功的关键,对于处理生产代码的人员而言,更是一项必备能力。这本实用书籍弥合了数据科学与软件工程之间的鸿沟,并清晰地阐述了如何将软件工程中的最佳实践应用于数据科学。
书中的示例均采用Python编写,使用了NumPy和pandas等流行库。如果你想编写更优质的数据科学代码,本书涵盖了入门级数据科学或编程课程中经常缺失的核心主题,包括以下内容:
● 理解数据结构与面向对象编程。
● 清晰且熟练地为代码编写文档。
● 打包并分享你的代码。
● 将数据科学代码与更大的代码库集成。
● 学习如何编写API。
● 创建安全的代码。
● 将最佳实践应用于测试、错误处理和日志记录等常见任务。
● 更有效地与软件工程师协作。
● 用Python编写更高效、可维护且健壮的代码。
● 将你的数据科学项目投入生产。
● 更多内容。
  1. 前言
  2. 第1章 什么是好代码
  3. 1.1 为什么好代码至关重要
  4. 1.2 适应变化的需求
  5. 1.3 简洁性
  6. 1.3.1 不要重复自己(DRY)
  7. 1.3.2 避免冗长的代码
  8. 1.4 模块化
  9. 1.5 可读性
  10. 1.5.1 标准和惯例
  11. 1.5.2 命名
  12. 1.5.3 清理
  13. 1.5.4 文档
  14. 1.6 性能
  15. 1.7 健壮性
  16. 1.7.1 错误与日志
  17. 1.7.2 测试
  18. 1.8 核心要点
  19. 第2章 分析代码性能
  20. 2.1 提高性能的方法
  21. 2.2 为你的代码计时
  22. 2.3 代码性能分析
  23. 2.3.1 cProfile
  24. 2.3.2 line_profiler
  25. 2.3.3 使用Memray进行内存性能分析
  26. 2.4 时间复杂度
  27. 2.4.1 如何估算时间复杂度
  28. 2.4.2 大O符号
  29. 2.5 核心要点
  30. 第3章 有效利用数据结构
  31. 3.1 Python数据结构
  32. 3.1.1 列表
  33. 3.1.2 元组
  34. 3.1.3 字典
  35. 3.1.4 集合
  36. 3.2 NumPy数组
  37. 3.2.1 NumPy数组功能
  38. 3.2.2 NumPy数组性能考量
  39. 3.2.3 使用Dask的数组操作
  40. 3.2.4 机器学习中的数组
  41. 3.3 pandas DataFrames
  42. 3.3.1 DataFrame功能
  43. 3.3.2 DataFrame性能考量
  44. 3.4 核心要点
  45. 第4章 面向对象编程和函数式编程
  46. 4.1 面向对象编程
  47. 4.1.1 类、方法和属性
  48. 4.1.2 定义自己的类
  49. 4.1.3 面向对象原则
  50. 4.2 函数式编程
  51. 4.2.1 匿名函数和map()
  52. 4.2.2 将函数应用于DataFrames
  53. 4.3 应该使用哪种范式
  54. 4.4 核心要点
  55. 第5章 错误、日志和调试
  56. 5.1 Python中的错误
  57. 5.1.1 解读Python错误信息
  58. 5.1.2 错误处理
  59. 5.1.3 触发错误
  60. 5.2 日志记录
  61. 5.2.1 记录什么
  62. 5.2.2 日志配置
  63. 5.2.3 如何记录日志
  64. 5.3 调试
  65. 5.3.1 调试策略
  66. 5.3.2 调试工具
  67. 5.4 核心要点
  68. 第6章 代码格式化、静态代码检查与类型检查
  69. 6.1 代码格式化与风格指南
  70. 6.1.1 PEP8
  71. 6.1.2 导入格式化
  72. 6.1.3 使用Black自动格式化代码
  73. 6.2 Linting
  74. 6.2.1 Linting工具
  75. 6.2.2 在你的IDE中进行代码检查
  76. 6.3 类型检查
  77. 6.3.1 类型注解
  78. 6.3.2 使用mypy进行类型检查
  79. 6.4 核心要点
  80. 第7章 测试你的代码
  81. 7.1 为何应该编写测试
  82. 7.2 何时进行测试
  83. 7.3 如何编写和运行测试
  84. 7.3.1 一个基本测试
  85. 7.3.2 测试意外输入
  86. 7.3.3 使用Pytest运行自动化测试
  87. 7.4 测试类型
  88. 7.4.1 单元测试
  89. 7.4.2 集成测试
  90. 7.5 数据验证
  91. 7.5.1 数据验证示例
  92. 7.5.2 使用Pandera进行数据验证
  93. 7.5.3 使用Pydantic进行数据验证
  94. 7.6 机器学习测试
  95. 7.6.1 测试模型训练
  96. 7.6.2 测试模型推理
  97. 7.7 核心要点
  98. 第8章 设计与重构
  99. 8.1 项目设计与结构
  100. 8.1.1 项目设计考虑事项
  101. 8.1.2 一个机器学习项目示例
  102. 8.2 代码设计
  103. 8.2.1 模块化代码
  104. 8.2.2 代码设计框架
  105. 8.2.3 接口与契约
  106. 8.2.4 耦合
  107. 8.3 从Notebook到可扩展脚本
  108. 8.3.1 为什么使用脚本而不是Notebook
  109. 8.3.2 从Notebook创建脚本
  110. 8.4 重构
  111. 8.4.1 重构策略
  112. 8.4.2 重构工作流程示例
  113. 8.5 核心要点
  114. 第9章 文档
  115. 9.1 代码库中的文档
  116. 9.1.1 名称
  117. 9.1.2 注释
  118. 9.1.3 docstring
  119. 9.1.4 Readme文件、教程及其他更长的文档
  120. 9.2 Jupyter Notebook中的文档
  121. 9.3 记录机器学习实验
  122. 9.4 核心要点
  123. 第10章 共享你的代码:版本控制、依赖和打包
  124. 10.1 使用Git进行版本控制
  125. 10.1.1 Git如何工作
  126. 10.1.2 跟踪变更与提交
  127. 10.1.3 远程和本地
  128. 10.1.4 分支与拉取请求
  129. 10.2 依赖和虚拟环境
  130. 10.2.1 虚拟环境
  131. 10.2.2 使用pip管理依赖
  132. 10.2.3 使用Poetry管理依赖
  133. 10.3 Python打包
  134. 10.3.1 包的基础
  135. 10.3.2 pyproject.toml
  136. 10.3.3 构建和上传包
  137. 10.4 核心要点
  138. 第11章 API接口
  139. 11.1 调用API
  140. 11.1.1 HTTP方法和状态码
  141. 11.1.2 从SDG API获取数据
  142. 11.2 使用FastAPI创建你自己的API
  143. 11.2.1 设置API
  144. 11.2.2 为你的API添加功能
  145. 11.2.3 向你的API发出请求
  146. 11.3 核心要点
  147. 第12章 自动化与部署
  148. 12.1 部署代码
  149. 12.2 自动化示例
  150. 12.2.1 预提交钩子
  151. 12.2.2 GitHub Actions
  152. 12.3 云部署
  153. 12.3.1 容器和Docker
  154. 12.3.2 构建Docker容器
  155. 12.3.3 在Google Cloud上部署API
  156. 12.3.4 在其他云提供商上部署API
  157. 12.4 核心要点
  158. 第13章 安全
  159. 13.1 什么是安全
  160. 13.2 安全风险
  161. 13.2.1 凭据、物理安全和社会工程
  162. 13.2.2 第三方包
  163. 13.2.3 Python Pickle模块
  164. 13.2.4 版本控制风险
  165. 13.2.5 API安全风险
  166. 13.3 安全实践
  167. 13.3.1 安全审查和政策
  168. 13.3.2 安全编码工具
  169. 13.3.3 简单代码扫描
  170. 13.4 机器学习安全
  171. 13.4.1 对机器学习系统的攻击
  172. 13.4.2 机器学习系统安全实践
  173. 13.5 核心要点
  174. 第14章 在软件行业工作
  175. 14.1 开发原则与实践
  176. 14.1.1 软件开发生命周期(SDLC)
  177. 14.1.2 瀑布模型
  178. 14.1.3 敏捷开发
  179. 14.1.4 敏捷数据科学
  180. 14.2 软件行业的角色
  181. 14.2.1 软件工程师
  182. 14.2.2 质量保证工程师或测试工程师
  183. 14.2.3 数据工程师
  184. 14.2.4 数据分析师
  185. 14.2.5 产品经理
  186. 14.2.6 用户体验研究员
  187. 14.2.7 设计师
  188. 14.3 社区
  189. 14.3.1 开源
  190. 14.3.2 在活动中演讲
  191. 14.3.3 Python社区
  192. 14.4 核心要点
  193. 第15章 下一步
  194. 15.1 代码的未来
  195. 15.2 你的代码生涯
  196. 15.3 鸣谢
  197. 作者介绍
  198. 封面介绍
书名:面向数据科学家的软件工程
作者:Catherine Nelson
译者:林晨 译
国内出版社:中国电力出版社
出版时间:2026年08月(预计)
页数:262(预计)
书号:978-7-5239-1152-5
原版书书名:Software Engineering for Data Scientists
原版书出版商:O'Reilly Media
Catherine Nelson
 
Catherine Nelson,数据科学家,牛津大学硕士,长期为企业提供机器学习解决方案。
Catherine Nelson是一名自由数据科学家和作家。此前,她曾担任SAP Concur的首席数据科学家,开发生产级机器学习应用,并创建了崭新的商务旅行功能。她还是O'Reilly出版的Building Machine Learning Pipelines一书的合著者。
 
 
本书封面上的动物是一只丝蝴蝶鱼(学名:Chaetodon auriga),这是一种栖息于印
度–太平洋珊瑚礁中、色彩鲜艳的鱼类。其体长可达九英寸,身体上装饰着醒目的白色与黑色V形条纹图案,背部呈鲜黄色。一条黑色条纹穿过它的眼睛,其背鳍上有一个显眼的黑斑,并延伸出一条丝状鳍条,这正是其名称的由来。这条丝状鳍条会随着鱼的年龄增长而发育,由背鳍的第五和第六根鳍条融合而成。
这些活跃的蝴蝶鱼最常见成对出现,在珊瑚礁、潟湖和外礁环境中穿梭。它们利用细长的吻部探入缝隙,寻找食物(食谱多样,包括蠕虫、软体动物、海绵、藻类,甚至软珊瑚)。
虽然通常对其他鱼类很温和,但丝蝴蝶鱼对自己的同类可能具有领地意识,尤其是在较小的水族箱中。它们是害羞的鱼类,喜欢在珊瑚礁中有大量藏身之处。
世界自然保护联盟(IUCN)将丝蝴蝶鱼列为无危物种。O’Reilly封面上的许多动物都濒临灭绝;它们对世界都很重要。
购买选项
定价:88.00元(预计)
书号:978-7-5239-1152-5
出版社:中国电力出版社