极速Python:高性能编码、计算与数据分析

CSDN 2024-06-14 15:05:04 阅读 50

文章目录

内容介绍作者介绍书籍目录

内容介绍

《极速Python:高性能编码、计算与数据分析》系统性地介绍了Python高性能编程的各种工具和方法,并重点讲解了Python在大数据中的应用。书中配有清晰的示例和详实的分析,可帮助读者熟练掌握NumPy和Pandas,实现高性能的数据存储和I/O。本书高屋建瓴、不留遗漏,读者学习本书后,能从代码到架构对系统进行整体优化。

主要内容

使用Cython重构关键代码。

● 设计健壮的数据结构。

● 精简不同架构的代码。

● 实现Python GPU计算。

京东:https://item.jd.com/14121183.html

在这里插入图片描述

作者介绍

Tiago Rodrigues Antão拥有信息学工程学士学位和生物信息学博士学位。他目前从事生物技术工作,使用Python生态来处理科学计算和数据工程任务。大多数时候,他也使用底层编程语言(如C和Rust)对算法的关键部分进行优化。目前,他在基于Amazon AWS的云计算设备上进行开发,但使用的基本是本地计算集群。

除了业内经历,他在科学计算方面有两段学术经历,包括在剑桥大学和牛津大学从事数据分析博士后研究工作。作为蒙大拿大学的研究员,他从零开始创建了用于分析生物数据的整套科学计算方法。

Tiago是重要生物信息软件包Biopython(用Python编写)的共同作者之一,也是Bioinformatics with Python Cookbook(Packt出版社,2022)一书的作者,该书已出版了第3版。他还在生物信息学领域发表了多篇重要的科研论文。

书籍目录

第Ⅰ部分 基础知识

第1章 对高效数据处理的迫切需求 3

1.1 数据泛滥的严重性 4

1.2 现代计算架构和高性能计算 6

1.2.1 计算机内部的变化 7

1.2.2 网络的变化 8

1.2.3 云计算 9

1.3 Python的局限性 10

1.4 解决方案小结 11

1.5 本章小结 13

第2章 发挥内置功能的最高性能 15

2.1 分析同时具有IO和计算

任务的应用程序 16

2.1.1 下载数据并计算最低温度 16

2.1.2 Python的内置分析模块 18

2.1.3 使用本地缓存 19

2.2 对代码进行分析以检测性能瓶颈 20

2.2.1 可视化分析信息 21

2.2.2 行分析 22

2.2.3 代码分析小结 23

2.3 优化基本数据结构:列表、集合、字典 24

2.3.1 列表搜索的性能 25

2.3.2 使用集合进行搜索 25

2.3.3 Python中的列表、集合和字典的复杂性 26

2.4 节约内存 27

2.4.1 Python内存估算 28

2.4.2 其他表示方法的内存占用 30

2.4.3 使用数组进行紧凑表示 32

2.4.4 串联知识点:估算Python对象的内存占用 33

2.4.5 Python对象内存占用小结 34

2.5 在大数据管道中使用惰性编程和生成器 34

2.6 本章小结 36

第3章 并发、并行和异步 37

3.1 编写异步服务器框架 39

3.1.1 实现与客户通信的框架 41

3.1.2 协程 42

3.1.3 使用简单的同步客户端发送复杂数据 43

3.1.4 实现进程间通信的其他方法 44

3.1.5 异步编程小结 45

3.2 实现基本的MapReduce引擎 45

3.2.1 理解MapReduce框架 45

3.2.2 开发简单的测试场景 46

3.2.3 第一次实现MapReduce框架 47

3.3 实现MapReduce并发引擎 47

3.3.1 使用concurrent.futures实现线程服务器 47

3.3.2 使用futures异步执行 49

3.3.3 GIL和多线程 51

3.4 使用多进程实现MapReduce 52

3.4.1 基于concurrent.futures的解决方案 52

3.4.2 基于多进程模块的解决方案 53

3.4.3 监控多进程方法的进度 54

3.4.4 分块传输数据 56

3.5 知识点串联:异步多线程和多进程MapReduce 服务器 59

3.5.1 创建完整的高性能解决方案 59

3.5.2 创建强大且稳定的服务器 62

3.6 本章小结 63

第4章 高性能NumPy 65

4.1 理解NumPy的性能 66

4.1.1 数组的副本与视图 66

4.1.2 NumPy的视图机制 71

4.1.3 利用视图提高效率 75

4.2 数组编程 77

4.2.1 小结 78

4.2.2 NumPy中的广播 78

4.2.3 应用数组编程 80

4.2.4 矢量化计算 82

4.3 改进NumPy内部架构 85

4.3.1 NumPy的依赖关系 85

4.3.2 在Python发行版中调整NumPy 87

4.3.3 NumPy中的线程 88

4.4 本章小结 89

第Ⅱ部分 硬件

第5章 使用Cython重构核心代码 93

5.1 重构高效代码的方法 93

5.2 Cython快速入门 95

5.2.1 Cython实现 95

5.2.2 使用Cython注释提高性能 97

5.2.3 为什么注释可以提升性能 98

5.2.4 为函数返回值添加类型 100

5.3 分析Cython代码 101

5.3.1 使用Python的内置分析方法 101

5.3.2 使用line_profiler 103

5.4 用Cython内存视图优化数组访问 105

5.4.1 小结 107

5.4.2 清理Python内部交互 107

5.5 在Cython中编写NumPy通用函数 108

5.6 Cython高级数组访问 110

5.6.1 绕过GIL并同时运行多个线程 112

5.6.2 基本性能分析 116

5.6.3 使用Quadlife的视频示例 116

5.7 Cython并行计算 117

5.8 本章小结 118

第6章 内存层级、存储和网络 121

6.1 现代硬件架构如何影响Python性能 122

6.1.1 现代架构对性能的反直觉影响 122

6.1.2 CPU缓存如何影响算法效率 123

6.1.3 现代持久化存储 124

6.1.4 小结 125

6.2 使用Blosc进行高效

数据存储 125

6.2.1 压缩数据以节省时间 125

6.2.2 读取速度(和内存缓冲区) 127

6.2.3 不同压缩算法对存储性能的影响 128

6.2.4 探究数据表示以提高压缩率 128

6.2.5 小结 129

6.3 使用NumExpr加速NumPy 129

6.3.1 快速表达式处理 129

6.3.2 硬件架构的影响 130

6.3.3 不适合NumExpr的场景 131

6.4 本地网络对性能的影响 131

6.4.1 REST低效的原因 132

6.4.2 基于UDP和msgpack的

客户端 132

6.4.3 基于UDP的服务器 134

6.4.4 为客户端添加超时机制 135

6.4.5 优化网络计算的其他建议 135

6.5 本章小结 136

第Ⅲ部分 和于现代数据处理的应用和库

第7章 高性能pandas和Apache Arrow 139

7.1 优化数据加载的内存和时间 140

7.1.1 压缩数据与未压缩数据 140

7.1.2 推断列的类型 141

7.1.3 数据类型精度的影响 143

7.1.4 重新编码和压缩数据 144

7.2 高效数据分析方法 147

7.2.1 使用索引加速访问 147

7.2.2 行的迭代方法 148

7.3 基于NumPy、Cython和NumExpr的pandas 150

7.3.1 显式使用NumPy 151

7.3.2 基于NumExpr的pandas 151

7.3.3 Cython和pandas 153

7.4 使用Arrow将数据读入pandas 154

7.4.1 pandas和Apache Arrow的关系 155

7.4.2 读取CSV文件 156

7.4.3 使用Arrow进行分析 158

7.5 使用Arrow互操作将任务委托给更高效的语言和系统 158

7.5.1 Arrow语言互操作架构的意义 159

7.5.2 使用Arrow的Plasma服务器对数据进行零拷贝操作 160

7.6 本章小结 163

第8章 大数据存储 165

8.1 访问文件的统一接口:fsspec 165

8.1.1 使用fsspec搜索GitHub仓库中的文件 166

8.1.2 使用fsspec检查zip文件 167

8.1.3 使用fsspec访问文件 168

8.1.4 使用URL链遍历不同的文件系统 168

8.1.5 替换文件系统后端 169

8.1.6 使用PyArrow接口 169

8.2 Parquet:高效的列型数据存储格式 170

8.2.1 检查Parquet元数据 170

8.2.2 使用Parquet进行列编码 171

8.2.3 对数据集进行分区 173

8.3 使用传统方法处理大于内存的数据集 175

8.3.1 使用NumPy对文件进行内存映射 175

8.3.2 数据帧的分块读取和写入 177

8.4 使用Zarr进行大型数组持久化 178

8.4.1 Zarr的内部架构 179

8.4.2 Zarr中数组的存储 181

8.4.3 创建新数组 183

8.4.4 Zarr数组的并行读写 184

8.5 本章小结 186

第Ⅳ部分 高级主题

第9章 使用GPU进行数据分析 189

9.1 理解GPU算力 190

9.1.1 GPU的优势 190

9.1.2 CPU和GPU的关系 192

9.1.3 GPU的内部架构 193

9.1.4 软件架构 194

9.2 使用Numba生成GPU代码 194

9.2.1 安装Python的GPU软件 194

9.2.2 使用Numba进行GPU编程的基础知识 195

9.2.3 使用GPU重构Mandelbrot示例 198

9.2.4 使用NumPy编写Mandelbrot代码 200

9.3 GPU代码性能分析:CuPy程序案例 201

9.3.1 基于GPU的数据分析库 202

9.3.2 使用CuPy:NumPy基于GPU 202

9.3.3 CuPy基本操作 202

9.3.4 使用Numba编写Mandelbrot生成器 203

9.3.5 使用CUDA C实现Mandelbrot生成器 205

9.3.6 GPU代码分析工具 206

9.4 本章小结 209

第10章 使用Dask分析大数据 211

10.1 Dask的执行模型 212

10.1.1 用于比较的pandas基线 212

10.1.2 实现基于Dask的数据帧解决方案 213

10.2 Dask操作的计算开销 215

10.2.1 处理数据分区 216

10.2.2 中间计算持久化 217

10.2.3 分布式数据帧上的算法实现 218

10.2.4 重新对数据进行分区 220

10.2.5 分布式数据帧持久化 223

10.3 使用Dask的分布式调度器 224

10.3.1 dask.distributed架构 225

10.3.2 使用dask.distributed运行代码 228

10.3.3 处理大于内存的数据集 232

10.4 本章小结 234

附录A 搭建环境 235

附录B 使用Numba生成高效的底层代码 239



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。