極速Python:高性能編碼、計算與數據分析 Fast Python: High Performance Techniques for Large Datasets

[美] 蒂亞戈·羅德里格斯·安道(Tiago Rodrigues Antao)著 沈沖 譯

  • 極速Python:高性能編碼、計算與數據分析-preview-1
  • 極速Python:高性能編碼、計算與數據分析-preview-2
  • 極速Python:高性能編碼、計算與數據分析-preview-3
極速Python:高性能編碼、計算與數據分析-preview-1

買這商品的人也買了...

商品描述

《極速Python:高性能編碼、計算與數據分析》系統性地介紹了Python高性能編程的各種工具和方法,並重點講解了Python在大數據中的應用。書中配有清晰的示例和詳實的分析,可幫助讀者熟練掌握NumPy和Pandas,實現高性能的數據存儲和I/O。本書高屋建瓴、不留遺漏,讀者學習本書後,能從代碼到架構對系統進行整體優化。 主要內容 ● 使用Cython重構關鍵代碼。 ● 設計健壯的數據結構。 ● 精簡不同架構的代碼。 ● 實現Python GPU計算。

目錄大綱

目    錄

 

 

第Ⅰ部分  基礎知識

第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