Python数据科学手册(第2版)
Python数据科学手册(第2版)
Jake VanderPlas
陶俊杰, 陈小莉 译
出版时间:2025年03月
页数:483
“第2版全新升级,书中提供了大量清晰且易于实践的示例,助你迅速掌握并高效应用核心的数据科学与机器学习工具。”
——Anne Bonner
Content Simplicity创始人兼首席执行官
因强大的数据存储、处理及数据分析与建模能力,Python已成为开发者与研究者的首选工具。这得益于其丰富的库生态,覆盖从数据存储、处理到分析与建模的全流程工具:IPython、NumPy、pandas、Matplotlib、scikit-learn等。市面上关于它们的资源多如牛毛,但本书独具特色,系统、全面地整合了这些强大的工具,真正为大家提供全方位的一站式解决方案。
本书被誉为Python数据分析与数据科学领域的“权威指南”,内容系统全面,讲解深入浅出。同时,本书的实用性极强,只需熟悉Python编程,你便可以通过学习本书轻松解决数据科学中的常见难题:数据的操作、转换与清洗,不同类型的数据的可视化,以及基于数据构建统计模型或机器学习模型。
通过本书,你将深入掌握以下内容。
● IPython与Jupyter:提供强大的交互式计算环境。
● NumPy:利用ndarray实现稠密数据数组的高效存储与运算。
● pandas:通过DataFrame高效存储和操作带标签的数据/列式数据。
● Matplotlib:支持多样化、灵活的数据可视化需求。
● scikit-learn:高效、简洁地实现核心机器学习算法。
  1. 对本书的赞誉
  2. 译者序
  3. 前言
  4. 第一部分 Jupyter:超越 Python
  5. 第1章 lPython和Jupyter入门
  6. 1.1 启动IPython shell.
  7. 1.2 启动Jupyter Notebook
  8. 1.3 IPython的帮助和文档
  9. 1.3.1 用符号?获取文档
  10. 1.3.2 用符号??获取源代码
  11. 1.3.3 用Tab补全的方式探索模块
  12. 1.4 IPython shell中的快捷键
  13. 1.4.1 导航快捷键
  14. 1.4.2 文本输入快捷键
  15. 1.4.3 命令历史快捷键
  16. 1.4.4 其他快捷键
  17. 第2章 增强的交互功能
  18. 2.1 IPython魔法命令
  19. 2.1.1 执行外部代码:%run
  20. 2.1.2 计算代码运行时间:%timeit
  21. 2.1.3 魔法函数的帮助:?、%magic和%lsmagic
  22. 2.2 输入和输出历史
  23. 2.2.1 IPvthon的输入和输出对象
  24. 2.2.2 下划线快捷键和以前的输出
  25. 2.2.3 禁止输出
  26. 2.2.4 相关的魔法命令
  27. 2.3 IPython和shell命令
  28. 2.3.1 shell快速入门
  29. 2.3.2 IPython中的shell命令
  30. 2.3.3 在shell中传入或传出值
  31. 2.3.4 与shell相关的魔法命令
  32. 第3章 调试及性能分析
  33. 3.1 错误和调试
  34. 3.1.1 控制异常:%xmode
  35. 3.1.2 调试:当阅读轨迹追溯不足以解决问题时
  36. 3.2 代码性能与耗时分析
  37. 3.2.1 代码段计时:%timeit和%time
  38. 3.2.2 对整个脚本进行性能分析:%prun
  39. 3.2.3 用%lprun进行逐行性能分析
  40. 3.2.4 用%emit和%prun进行内存分析
  41. 3.3 IPython参考资料
  42. 3.3.1 网络资源
  43. 3.3.2 相关图书
  44. 第二部分  NumPy入门
  45. 第4章 理解Python中的数据类型
  46. 4.1 Python整型不仅仅是一个整型
  47. 4.2 Python列表不仅仅是一个列表
  48. 4.3 Python中的固定类型数组
  49. 4.4 从Python列表创建数组
  50. 4.5 从头创建数组
  51. 4.6 NumPy标准数据类型
  52. 第5章 NumPy数组基础
  53. 5.1 NumPy数组的属性
  54. 5.2 数组索引:获取单个元素
  55. 5.3 数组切片:获取子数组
  56. 5.3.1 一维子数组
  57. 5.3.2 多维子数组
  58. 5.3.3 非副本视图的子数组
  59. 5.3.4 创建数组的副本
  60. 5.4 数组的变形
  61. 5.5 数组拼接和拆分
  62. 5.5.1 数组的拼接
  63. 5.5.2 数组的拆分
  64. 第6章 NumPy数组的计算:通用函数
  65. 6.1 缓慢的循环
  66. 6.2 通用函数介绍
  67. 6.3 探索NumPy的通用函数
  68. 6.3.1 数组的运算
  69. 6.3.2 绝对值
  70. 6.3.3 三角函数
  71. 6.3.4 指数和对数
  72. 6.3.5 专业的通用函数
  73. 6.4 高级的通用函数特性
  74. 6.4.1 指定输出
  75. 6.4.2 聚合
  76. 6.4.3 外积
  77. 6.5 通用函数:更多的信息
  78. 第7章 聚合:最小值、最大值和其他值
  79. 7.1 数组值求和
  80. 7.2 最小值和最大值
  81. 7.2.1 多维度聚合
  82. 7.2.2 其他聚合函数
  83. 7.3 示例:美国总统的平均身高是多少
  84. 第8章 数组的计算:广播
  85. 8.1 广播的介绍
  86. 8.2 广播的规则
  87. 8.2.1 广播示例1
  88. 8.2.2 广播示例2
  89. 8.2.3 广播示例3
  90. 8.3 广播的实际应用
  91. 8.3.1 数组的归一化
  92. 8.3.2 画一个二维函数
  93. 第9章 比较、掩码和布尔逻辑
  94. 9.1 示例:统计下雨天数
  95. 9.2 将比较运算符看作通用函数
  96. 9.3 操作布尔数组
  97. 9.3.1 统计记录的个数
  98. 9.3.2 布尔运算符
  99. 9.4 将布尔数组作为掩码
  100. 9.5 使用关键字and/or与逻辑操作运算符&/|
  101. 第10章 花式索引
  102. 10.1 探索花式索引
  103. 10.2 组合索引
  104. 10.3 示例:选择随机点
  105. 10.4 用花式索引修改值
  106. 10.5 示例:数据区间划分
  107. 第11章 数组排序
  108. 11.1 NumPy中的快速排序:np.sort和np.argsort
  109. 11.2 沿着行或列排序
  110. 11.3 部分排序:分区
  111. 11.4 示例:k个最近邻
  112. 第12章 结构化数据:NumPy的结构化数组
  113. 12.1 生成结构化数组
  114. 12.2 更高级的复合数据类型
  115. 12.3 记录数组:结构化数组的扭转
  116. 12.4 关于pandas
  117. 第三部分 pandas数据处理
  118. 第13章 pandas对象简介
  119. 13.1 pandas的Series对象
  120. 13.1.1 Serise是通用的NumPy数组
  121. 13.1.2 Series是特殊的字典
  122. 13.1.3 创建Series对象
  123. 13.2 pandas的DataFrame对象
  124. 13.2.1 DataFrame是通用的NumPy数组
  125. 13.2.2 DataFrame是特殊的字典
  126. 13.2.3 创建DataFrame对象
  127. 13.3 pandas的Index对象
  128. 13.3.1 将Index看作不可变数组
  129. 13.3.2 将Index看作有序集合
  130. 第14章 数据取值与选择
  131. 14.1 Series数据选择方法
  132. 14.1.1 将Series看作字典
  133. 14.1.2 将Series看作一维数组
  134. 14.1.3 索引器:loc和iloc
  135. 14.2 DataFrame数据选择方法
  136. 14.2.1 将DataFrame看作字典
  137. 14.2.2 将DataFrame看作二维数组
  138. 14.2.3 其他取值方法
  139. 第15章 pandas数值运算方法
  140. 15.1 通用函数:保留索引
  141. 15.2 通用函数:索引对齐
  142. 15.2.1 Series索引对齐
  143. 15.2.2 DataFrame索引对齐
  144. 15.3 通用函数:DataFrame与Series的运算
  145. 第16章 处理缺失值
  146. 16.1 处理缺失值的方法选择
  147. 16.2 pandas的缺失值
  148. 16.2.1 None作为哨兵值
  149. 16.2.2 NaN:数值类型的缺失值
  150. 16.2.3 pandas中NaN与None的差异
  151. 16.3 pandas可空类型
  152. 16.4 处理缺失值
  153. 16.4.1 发现缺失值
  154. 16.4.2 剔除缺失值
  155. 16.4.3 填充缺失值
  156. 第17章 分层索引
  157. 17.1 多级索引Series
  158. 17.1.1 笨办法
  159. 17.1.2 好办法:pandas多级索引
  160. 17.1.3 高维数据的多级索引
  161. 17.2 多级索引的创建方法
  162. 17.2.1 显式地创建多级索引
  163. 17.2.2 多级索引的级别名称
  164. 17.2.3 多级列索引
  165. 17.3 多级索引的取值与切片
  166. 17.3.1 Series多级索引
  167. 17.3.2 DataFrame多级索引
  168. 17.4 多级索引行列转换
  169. 17.4.1 有序的索引和无序的索引
  170. 17.4.2 索引stack与unstack
  171. 17.4.3 索引的设置与重置
  172. 第18章 合并数据集:concat与append操作
  173. 18.1 知识回顾:NumPy数组的合并
  174. 18.2 通过pd.concat实现简单合并
  175. 18.2.1 索引重复
  176. 18.2.2 类似join的合并
  177. 18.2.3 append方法
  178. 第19章 合并数据集:合并与连接
  179. 19.1 关系代数
  180. 19.2 数据连接的类型
  181. 19.2.1 一对一连接
  182. 19.2.2 多对一连接
  183. 19.2.3 多对多连接
  184. 19.3 设置数据合并的键
  185. 19.3.1 参数on的用法
  186. 19.3.2 left_on与right_on参数
  187. 19.3.3 left_index与right_index参数
  188. 19.4 设置数据连接的集合操作规则
  189. 19.5 重复列名:suffixes参数
  190. 19.6 案例:美国各州的统计数据
  191. 第20章 聚合与分组
  192. 20.1 行星数据
  193. 20.2 pandas的简单聚合功能
  194. 20.3 groupby:分割、应用和组合
  195. 20.3.1 分割、应用和组合
  196. 20.3.2 GroupBy对象
  197. 20.3.3 聚合、过滤、转换和应用
  198. 20.3.4 设置分割的键
  199. 第21章 数据透视表
  200. 21.1 演示数据透视表
  201. 21.2 手工制作数据透视表
  202. 21.3 数据透视表语法
  203. 21.3.1 多级数据透视表
  204. 21.3.2 其他数据透视表选项
  205. 21.4 案例:美国人的生日
  206. 第22章 向量化字符串操作
  207. 22.1 pandas字符串操作简介
  208. 22.2 pandas字符串方法列表
  209. 22.2.1 与Python字符串方法相似的方法
  210. 22.2.2 使用正则表达式的方法
  211. 22.2.3 其他字符串方法
  212. 22.3 案例:食谱数据库
  213. 22.3.1 制作简单的美食推荐系统
  214. 22.3.2 继续完善美食推荐系统
  215. 第23章 处理时间序列
  216. 23.1 Python的日期与时间工具
  217. 23.1.1 Python的原生日期与时间工具:datetime与dateutil
  218. 23.1.2 时间类型数组:NumPy的datetime64类型
  219. 23.1.3 pandas的日期与时间工具:理想与现实的最佳解决方案
  220. 23.2 pandas时间序列:用时间作索引
  221. 23.3 pandas时间序列数据结构
  222. 23.4 有规律的时间序列:pd.date_range
  223. 23.5 时间频率与偏移量
  224. 23.6 重采样、移位和窗口
  225. 23.6.1 重采样与频率转换
  226. 23.6.2 时间移位
  227. 23.6.3 滚动窗口
  228. 23.7 案例:美国西雅图自行车统计数据的可视化
  229. 23.7.1 数据可视化
  230. 23.7.2 深入挖掘数据
  231. 第24章 高性能pandas:eval与query
  232. 24.1 query与eval的设计动机:复合表达式
  233. 24.2 用pandas.eval实现高性能运算
  234. 24.3 用DataFrame.eval实现列间运算
  235. 24.3.1 用DataFrame.eval新增列
  236. 24.3.2 DataFrame.eval使用局部变量
  237. 24.4 DataFrame.query方法
  238. 24.5 性能决定使用时机
  239. 24.6 参考资料
  240. 第四部分 Matplotlib数据可视化
  241. 第25章 Matplotlib常用技巧
  242. 25.1 导入Matplotlib
  243. 25.2 设置绘图样式
  244. 25.3 用不用show?如何显示图形
  245. 25.3.1 在脚本中画图
  246. 25.3.2 在IPython shell中画图
  247. 25.3.3 在Jupyter Notebook中画图
  248. 25.3.4 将图形保存为文件
  249. 25.3.5 两种画图接口
  250. 第26章 简单线形图
  251. 26.1 调整图形:线条的颜色与风格
  252. 26.2 调整图形:坐标轴上下限
  253. 26.3 设置图形标签
  254. 26.4 Matplotlib陷阱
  255. 第27章 简单散点图
  256. 27.1 用plt.plot画散点图
  257. 27.2 用plt.scatter画散点图
  258. 27.3 plot与scatter:效率对比
  259. 27.4 可视化误差
  260. 27.4.1 基本误差线
  261. 27.4.2 连续误差
  262. 第28章 密度图与等高线图
  263. 28.1 三维函数的可视化
  264. 28.2 频次直方图、数据区间划分和分布密度
  265. 28.3 二维频次直方图与数据区间划分
  266. 28.3.1 plt.hist2d:二维频次直方图
  267. 28.3.2 plt.hexbin:六边形区间划分
  268. 28.3.3 核密度估计
  269. 第29章 配置图例
  270. 29.1 选择图例显示的元素
  271. 29.2 在图例中显示不同尺寸的点
  272. 29.3 同时显示多个图例
  273. 第30章 配置颜色条
  274. 30.1 配置颜色条
  275. 30.1.1 选择配色方案
  276. 30.1.2 颜色条刻度的限制与扩展功能的设置
  277. 30.1.3 离散型颜色条
  278. 30.2 案例:手写数字
  279. 第31章 多子图
  280. 31.1 plt.axes:手动创建子图
  281. 31.2 plt.subplot:简单网格子图
  282. 31.3 plt.subplots:用一行代码创建网格
  283. 31.4 plt.GridSpec:实现更复杂的排列方式
  284. 第32章 文字与注释
  285. 32.1 案例:节假日对美国出生率的影响
  286. 32.2 坐标变换与文字位置
  287. 32.3 箭头与注释
  288. 第33章 自定义坐标轴刻度
  289. 33.1 主要刻度与次要刻度
  290. 33.2 隐藏刻度与标签
  291. 33.3 增减刻度数量
  292. 33.4 花哨的刻度格式
  293. 33.5 格式生成器与定位器小结
  294. 第34章 Matplotlib自定义:配置文件与样式表
  295. 34.1 手动配置图形
  296. 34.2 修改默认配置:rcParams
  297. 34.3 样式表
  298. 34.3.1 默认风格
  299. 34.3.2 FiveThirtyEight风格
  300. 34.3.3 ggplot风格
  301. 34.3.4 bmh风格
  302. 34.3.5 黑色背景风格
  303. 34.3.6 灰度风格
  304. 34.3.7 Seaborn风格
  305. 第35章 用Matplotlib画三维图
  306. 35.1 三维数据点与线
  307. 35.2 三维等高线图
  308. 35.3 线框图和曲面图
  309. 35.4 曲面三角剖分
  310. 35.5 案例:默比乌斯带
  311. 第36章 用Seaborn做数据可视化
  312. 36.1 Seaborn图形介绍
  313. 36.1.1 频次直方图、KDE和密度图
  314. 36.1.2 成对图
  315. 36.1.3 分面频次直方图
  316. 36.2 分类图
  317. 36.2.1 联合分布
  318. 36.2.2 条形图
  319. 36.3 案例:探索马拉松比赛成绩数据
  320. 36.4 参考资料
  321. 36.5 其他Python画图程序库
  322. 第五部分 机器学习
  323. 第37章 什么是机器学习
  324. 37.1 机器学习的分类
  325. 37.2 机器学习应用的定性示例
  326. 37.2.1 分类:预测离散标签
  327. 37.2.2 回归:预测连续标签
  328. 37.2.3 聚类:为无标签数据添加标签
  329. 37.2.4 降维:推断无标签数据的结构
  330. 37.3 小结
  331. 第38章 scikit-learn简介
  332. 38.1 scikit-learn的数据表示
  333. 38.1.1 特征矩阵
  334. 38.1.2 目标数组
  335. 38.2 scikit-learn的估计器API
  336. 38.2.1 API基础知识
  337. 38.2.2 监督学习示例:简单线性回归
  338. 38.2.3 监督学习示例:鸢尾花数据分类
  339. 38.2.4 无监督学习示例:鸢尾花数据降维
  340. 38.2.5 无监督学习示例:鸢尾花数据聚类
  341. 38.3 应用:手写数字探索
  342. 38.3.1 加载并可视化手写数字
  343. 38.3.2 无监督学习:降维
  344. 38.3.3 数字分类
  345. 38.4 小结
  346. 第39章 超参数与模型验证
  347. 39.1 模型验证
  348. 39.1.1 错误的模型验证方法
  349. 39.1.2 正确的模型验证方法:留出集
  350. 39.1.3 交叉验证
  351. 39.2 选择最优模型
  352. 39.2.1 偏差与方差的均衡
  353. 39.2.2 scikit-learn验证曲线
  354. 39.3 学习曲线
  355. 39.4 验证实践:网格搜索
  356. 39.5 小结
  357. 第40章 特征工程
  358. 40.1 分类特征
  359. 40.2 文本特征
  360. 40.3 图像特征
  361. 40.4 衍生特征
  362. 40.5 缺失值插补
  363. 40.6 特征管道
  364. 第41章 专题:朴素贝叶斯分类
  365. 41.1 贝叶斯分类
  366. 41.2 高斯朴素贝叶斯
  367. 41.3 多项式朴素贝叶斯
  368. 41.4 朴素贝叶斯的应用场景
  369. 第42章 专题:线性回归
  370. 42.1 简单线性回归
  371. 42.2 基函数回归
  372. 42.2.1 多项式基函数
  373. 42.2.2 高斯基函数
  374. 42.3 正则化
  375. 42.3.1 岭回归(L2范数正则化)
  376. 42.3.2 Lasso回归(L1范数正则化)
  377. 42.4 案例:预测自行车流量
  378. 第43章 专题:支持向量机
  379. 43.1 支持向量机的由来
  380. 43.2 支持向量机:间隔最大化
  381. 43.2.1 拟合支持向量机
  382. 43.2.2 超越线性边界:核函数SVM模型
  383. 43.2.3 SVM优化:软化间隔
  384. 43.3 案例:人脸识别
  385. 43.4 小结
  386. 第44章 专题:决策树与随机森林
  387. 44.1 随机森林的基础:决策树
  388. 44.1.1 创建一棵决策树
  389. 44.1.2 决策树与过拟合
  390. 44.2 估计器集成算法:随机森林
  391. 44.3 随机森林回归
  392. 44.4 案例:用随机森林识别手写数字
  393. 44.5 小结
  394. 第45章 专题:主成分分析
  395. 45.1 PCA简介
  396. 45.1.1 用PCA降维
  397. 45.1.2 用PCA做数据可视化:手写数字
  398. 45.1.3 成分的含义
  399. 45.1.4 选择成分的数量
  400. 45.2 用PCA做噪声过滤
  401. 45.3 案例:特征脸
  402. 45.4 小结
  403. 第46章 专题:流形学习
  404. 46.1 流形学习:“HELLO”
  405. 46.1.1 多维标度法(MDS)
  406. 46.1.2 将MDS用于流形学习
  407. 46.2 非线性嵌入:当MDS失败时
  408. 46.3 非线性流形:局部线性嵌入
  409. 46.4 关于流形方法的一些思考
  410. 46.5 示例:用Isomap处理人脸数据
  411. 46.6 示例:手写数字的可视化结构
  412. 第47章 专题:k-means聚类
  413. 47.1 k-means简介
  414. 47.2 k-means算法:期望最大化
  415. 47.3 案例
  416. 47.3.1 案例1:用k-means算法处理手写数字
  417. 47.3.2 案例2:将k-means用于色彩压缩
  418. 第48章 专题:高斯混合模型
  419. 48.1 高斯混合模型诞生的原因:k-means算法的缺陷
  420. 48.2 广义E-M:高斯混合模型
  421. 48.3 选择协方差的类型
  422. 48.4 将GMM用作密度估计器
  423. 48.5 示例:用GMM生成新的数据
  424. 第49章 专题:核密度估计
  425. 49.1 KDE的由来:直方图
  426. 49.2 核密度估计的实际应用
  427. 49.3 通过交叉验证选择带宽
  428. 49.4 示例:不是很朴素的贝叶斯
  429. 49.4.1 解析自定义估计器
  430. 49.4.2 使用自定义估计器
  431. 第50章 应用:人脸识别管道
  432. 50.1 HOG特征
  433. 50.2 HOG实战:一个简单的人脸识别器
  434. 50.2.1 获取一组正训练样本
  435. 50.2.2 获取一组负训练样本
  436. 50.2.3 组合数据集并提取HOG特征
  437. 50.2.4 训练一个支持向量机
  438. 50.2.5 在新图像中寻找人脸
  439. 50.3 注意事项与改进方案
  440. 50.4 机器学习参考资料
书名:Python数据科学手册(第2版)
作者:Jake VanderPlas
译者:陶俊杰, 陈小莉 译
国内出版社:人民邮电出版社
出版时间:2025年03月
页数:483
书号:978-7-115-66266-8
原版书书名:Python Data Science Handbook,2e
原版书出版商:O'Reilly Media
Jake VanderPlas
 
Jake VanderPlas是Google研究院(Google Research)的一名软件工程师,从事支持数据密集型研究的相关工具开发。他创建并开发了各种用于数据密集型科学的Python工具, 包括Scikit-Learn、SciPy、Astropy、Altair、JAX等软件包。
 
 
本书封面上的动物是一种名为墨西哥毒蜥(珠毒蜥,Heloderahorridum)的爬行动物,主要栖息于墨西哥和危地马拉的部分地区。heloderma 在希腊语中意为“布满颗粒的皮肤”指的是这种蜥蜴特有的念珠纹理的皮肤。这些小凸起被称为骨鳞片(osteoderm),内嵌着骨片,为蜥蜴提供了像甲胄一样的保护。
墨西哥毒蜥的身体覆盖着醒目的黑黄相间的斑点和条纹。它头部宽大,尾部粗壮,尾内脂肪丰富,这种独特的生理结构使其在酷热的夏季休眠期间得以生存。这种蜥蜴的体长通常在 22至36 英寸(约55至91厘米)之间,体重约为1.8磅(约0.8千克)。与许多蛇和蜥蜴一样,墨西哥毒蜥灵敏的舌头是其探索世界的主要工具。它会不断地伸出舌头,以捕捉空气中的气味分子,从而侦测到猎物的存在,或在交配季节寻找潜在伴侣。
墨西哥毒蜥和它的近亲吉拉毒蜥(Gila monster)是世界上仅存的两种有毒蜥蜴。当受到敌人威胁时,墨西哥毒蜥会将其咬住并不断咀嚼,因为它无法一次性释放大量的毒素,只能通过咀嚼动作将毒素渗透到敌人的伤口中。虽然这种咬伤和毒液引起的后续反应非常痛苦,但是很少会对人类造成致命伤害。墨西哥毒蜥的毒液中含有某种化合物,已被合成用干治疗糖尿病,进一步的药理学研究还在进行中。由于栖息地的消失、作为宠物而被捕猎,以及当地人因为害怕而捕杀等原因,墨西哥毒蜥濒临灭绝。目前,它受到它的栖息地墨西哥和危地马拉两国法律的保护。
购买选项
定价:139.80元
书号:978-7-115-66266-8
出版社:人民邮电出版社