首页 > 图书中心 >图书详情
极速Python:高性能编码、计算与数据分析
作者:[美] 蒂亚戈·罗德里格斯·安道(Tiago Rodrigues Antao)著 沈冲 译
丛书名:数据科学与大数据技术
定价:79.80元
印次:1-2
ISBN:9787302656296
出版日期:2024.03.01
印刷日期:2024.12.23
《极速Python:高性能编码、计算与数据分析》系统性地介绍了Python高性能编程的各种工具和方法,并重点讲解了Python在大数据中的应用。书中配有清晰的示例和详实的分析,可帮助读者熟练掌握NumPy和Pandas,实现高性能的数据存储和I/O。本书高屋建瓴、不留遗漏,读者学习本书后,能从代码到架构对系统进行整体优化。 主要内容 ● 使用Cython重构关键代码。 ● 设计健壮的数据结构。 ● 精简不同架构的代码。 ● 实现Python GPU计算。
more >前 言 若干年前,我们团队正在使用的基于Python的数据管道突然崩溃,导致某个进程持续占用CPU。该组件对公司业务至关重要,因此必须尽快解决该问题。我们核查了算法,始终没有发现问题。算法的实现步骤其实非常简单,但经过多名工程师的数小时排查,才发现问题在于程序在一个非常大的列表上进行搜索。在将列表转换为集合后,问题就迎刃而解了。最终,数据结构不仅变得更小,搜索时间也从数小时降低到毫秒级别。 这次故障对我触动很大: ● 虽然问题并不严重,但暴露出团队在开发过程中并不关注性能问题。如果经常使用代码分析器,我们就能在几分钟内发现问题,而不是耗费了好几个小时。 ● 我们最终解决了问题,并且取得了双赢的结果,不仅程序查询时间更短,占用内存也更少。虽然在许多情况下,面对性能和成本需要做出取舍,但在某些情况下,兼顾两者不仅能获得满意的结果,还没有任何负面影响。 ● 从更高的角度审视,结果也是双赢的。首先,查询速度更快非常有利于公司业务。其次,算法经过优化后,使用CPU的时间更短、耗能更低,也更加环保。 ● 虽然单个案例意义有限,但我意识到许多程序员或许都在寻找类似的优化解决方案。 因此,我决定编写本书,以便其他程序员可以从中受益。我的目标是帮助经验丰富的Python程序员设计和实现更高效的解决方案,同时能够了解底层的权衡机制。我将采用全面且透彻的方式,通过探讨Python代码和重要的Python库,从算法角度来探究现代硬件架构及其影响,并分析CPU和存储性能。希望本书能够帮助读者在使用Python生态进行开发时,游刃有余地处理性能问题。 关 于 本 书 本书旨在帮助读者在Python生态系统中编写更高效的应用程序。更高效是指让代码使用的CPU周期更少、占用的存储空间更少、消耗的网络通信更少。 本书采用全面且透彻的方式来分析性能问题。书中不仅涉及纯Python代码的优化技术,还介绍了如何高效使用数据科学库,如NumPy和pandas。由于Python在某些场景下性能不足,为了使代码运行速度更快,本书还讲解了Cython。为了使内容尽量全面,本书还讨论了硬件对代码设计的影响,即分析现代计算机架构对算法性能的影响。另外,还探究了网络架构对效率的影响,以及GPU计算在快速数据分析领域中的运用。 目标读者 本书面向中高级读者。希望读者接触过目录中的大部分技术,并且最好亲手使用过其中一些。除了IO库和GPU计算章节,本书只提供了很少的介绍性内容,所以要求读者了解基础知识。如果你正在编写高性能代码,并面临高效处理海量数据的切实挑战,这本书可提供很多建议。 为了从本书吸收更多的知识,你应该具备多年的Python编程经验,熟悉Python控制流、列表、集合和字典,并具备一定Python标准库的使用经验,如os、sys、pickle和multiprocessing。为了充分运用书中介绍的技术,你或多或少应操作过标准的数据分析库,即NumPy和pandas,例如使用过NumPy中的数组和pandas中的数据帧。 如果你清楚如何通过C或Rust等语言接口来加速Python代码,或者了解Cython或Numba等优化工具,即使没有实际操作过,本书对你也会很有帮助。在Python中处理IO的经验对你也会有所帮助。鉴于IO库方面的学习资料较少,我们将从Apache Parque和Zarr库开始介绍。 读者应该熟练使用Linux终端(或MacOS终端)的基本命令。如果使用Windows,请安装基于UNIX的终端,并熟悉命令行或PowerShell。此外,你还需要在计算机上安装Python。 在某些示例中,我会讲解云计算技巧,但访问云或了解云计算方面的知识不是阅读本书的必要条件。如果你对云计算方法感兴趣,建议学习执行云计算的基本操作,例如,创建实例和访问云服务存储。 虽然本书不要求读者接受过学术培训,但了解复杂度的基本概念是有益的。例如,理解与数据量呈线性关系的算法优于与数据量呈指数关系的算法。如果你想使用GPU进行优化,阅读本书前无需了解相关内容。 本书内容:学习路线图 本书各章基本是独立的,读者可以翻阅任何感兴趣的章节。全书内容分为四部分。 第Ⅰ部分“基础知识”(第1~4章),涵盖了入门知识。 ● 第1章介绍了海量数据带来的问题,并解释了为什么必须关注计算和存储的效率。本章还介绍了全书的学习方法,并提供了如何根据需求学习本书的建议。 ● 第2章讲解了对原生Python代码进行优化的方法。本章还讨论了Python数据结构的优化、代码分析、内存分配和惰性编程技术。 ● 第3章讨论了Python中的并发和并行,以及如何最佳利用多进程和多线程(包括使用线程进行并行处理的限制)。本章还介绍了异步处理,它通常用于Web服务中的低负载、多并发请求场景。 ● 第4章介绍了NumPy,NumPy是用于高效处理多维数组的库。NumPy是当前所有数据处理技术的核心,是众多方法的基本库。本章分享了NumPy中的关键功能,如视图、广播和数组编程,以开发更高效的代码。 第Ⅱ部分“硬件”(第5章和第6章),主要涉及如何发挥硬件和网络的最大效率。 ● 第5章介绍了Cython。Cython基于Python,可以生成非常高效的代码。Python属于高级解释性语言,因此不适合用于优化硬件。其他几种语言,如C或Rust,从设计之初就能在硬件层高效运行。Cython属于底层语言,虽然它与Python很相似,但可以将Cython编译成C代码。要想写出高效的Cython代码,关键在于掌握代码基础和实现方法。在本章中,我们就将学习如何编写高效的Cython代码。 ● 第6章讨论了硬件架构对高效Python代码设计的影响。鉴于计算机的设计模式,反直觉的编程方法可能比预期的更有效率。例如,在某些情况下,即使需要承担解压缩算法的计算开销,处理压缩数据也可能比处理未压缩数据的速度更快。本章还介绍了CPU、内存、存储和网络对Python算法设计的影响。另外,本章讨论了NumExpr库,它能利用最新的硬件架构特性使NumPy代码更高效。 第Ⅲ部分“用于现代数据处理的应用和库”(第7章和第8章),探讨了最新的用于数据处理的应用和库。 ● 第7章讨论了如何高效使用pandas,pandas是Python中的数据帧库。我们将研究pandas相关的技术,以优化代码。和本书大多数章节不同,这一章的内容基于前面的章节。pandas是在NumPy的基础上工作的,所以会借鉴第4章的内容,探索与NumPy相关的技术进而优化pandas。我们还将探究如何用NumExpr和Cython优化pandas。最后,介绍了Arrow库,除了可以提高处理pandas数据帧的性能,它还具有其他强大的功能。 ● 第8章探讨了数据持久化的优化问题。我们讨论了能高效处理列型数据的库Parquet,以及能处理大型磁盘数组的库Zarr。本章还讨论了如何处理超过内存容量的数据集。 第Ⅳ部分“高级主题”(第9章和第10章),涉及最后两个与众不同的方法,即GPU和Dask库。 ● 第9章探讨了图形处理单元(Graphical Processing Unit,GPU)在处理大型数据集方面的使用方法。我们将看到,GPU计算模型使用大量简单的处理单元,完全可以处理最新的数据科学问题。我们使用了两种不同的方法以利用GPU的优势。首先,将讨论现有GPU方面的库,这些库提供了与其他库类似的接口,例如CuPy是NumPy的GPU版本。另外,本章还介绍如何编写在GPU上运行的Python代码。 ● 第10章讨论了Dask。使用Dask库能编写出轻松扩展到计算集群上的并行代码,它提供了类似于NumPy和pandas的接口。计算集群既可以位于本地,又可以位于云端。 该书最后还包括两个附录。 ● 附录A介绍如何安装所必需的软件,以使用书中的示例。 ● 附录B介绍Numba。Numba是Cython的替代品,可以生成高效的底层代码。Cython和Numba是生成底层代码的主要途径。为了解决真实场景中的问题,我推荐使用Numba。但是,为什么正文中用了一整章来介绍Cython,却将Numba放在附录中呢?这是因为本书的主要目标是为你打下坚实的基础,确保能在Python生态系统中编写出高效的代码,而Cython更适合深入了解内部的计算机制。 获取代码 本书包含许多源代码示例,既有行间代码,又有行内代码。为了区别于普通文本,这两种样式的源代码都采用等宽字体。有时,也会加粗代码,以强调代码发生的变动,例如,为已有代码添加新功能。 在许多示例中,不得不对初始源代码的样式进行调整。为了使页面版式更加美观,添加了换行符,并重新进行排版缩进。但在极少数情况下,如此调整后还要使用连行符(➥)。此外,如果文本中对代码进行了解释,通常会删除源代码中的注释。许多代码附带有注释,以突出重要概念。 本书示例的完整代码可从GitHub仓库(https://github.com/tiagoantao/python-performance) 下载,或扫描本书封底的二维码进行下载。当发现错误或需要更新Python和库时,我会更新代码仓库。因此,请读者留意代码仓库的变动。代码仓库为每个章节列出了详细目录。 人们对代码风格各有偏好,我尽量调整了书中的代码,以使代码在纸质版的书中看起来更加美观。例如,我本来喜欢使用较长且具有描述性的变量名,但这种名称的印刷效果一般。因此,书中使用表达性的变量名,并遵循标准的Python惯例,如PEP8,同时确保印刷效果的美观。本书对类型注释也采取了同样的做法,我原本想使用类型注释,但类型注释妨碍了代码的可读性。在极少数情况下,我使用算法来增强可读性,但算法并不能应对所有极端情况,或使代码逻辑更加清晰。 在大多数情况下,本书中的代码适用于标准的Python解释器。在少数情况下,需要使用IPython,特别是进行性能分析时。你也可以使用Jupyter Notebook。 关于安装的细节可以参考附录A。如果任何章节需要使用特殊的软件,将在适当的地方注明。 硬件和软件 读者可以使用任何操作系统运行本书中的代码。不过,大部分生产代码都部署在Linux上,因此Linux是首选系统。或者,也可以直接使用MacOS X。如果使用的是Windows,建议安装Windows Subsystem for Linux(WSL) 。 除了操作系统,还可以选择Docker。读者可以使用代码仓库中提供的Docker镜像,Docker提供了容器化的Linux环境来运行代码。 建议你使用的计算机至少拥有16 GB的内存和150 GB的可用磁盘空间。第9章涉及与GPU相关的内容,需要使用NVIDIA GPU,最低基于Pascal架构。过去五年中发布的大多数GPU都符合此要求。为了充分学习本书内容,有关环境准备的详细信息,请参见附录A。
more >