Python數據科學手冊(第2版) Python Data Science Handbook: Essential Tools for Working with Data, 2/e

[美]傑克·萬托布拉斯(Jake VanderPlas)

  • Python數據科學手冊(第2版)-preview-1
  • Python數據科學手冊(第2版)-preview-2
Python數據科學手冊(第2版)-preview-1

商品描述

本書為數據科學領域經典熱銷書升級版,基於GitHub熱門開源項目,全面涵蓋數據分析與數據科學領域的重要工具。全書共分為五部分,每部分介紹一兩個Python數據科學中的重點工具包。首先從IPython和Jupyter開始,它們提供了數據科學家需要的計算環境;第二部分講解NumPy如何高效地存儲和操作大型數組;第三部分講解pandas如何高效地存儲和操作帶標簽的列式數據;第四部分聚焦Matplotlib,展示其豐富的數據可視化功能;第五部分以scikit-learn為主,這個程序庫為最重要的機器學習算法提供了高效整潔的Python版實現。本書適合有一定Python使用經驗,並想進一步掌握Python數據分析能力的讀者。

作者簡介

Jake VanderPlas 谷歌公司軟件工程師,scikit-learn核心團隊成員,SciPy項目維護者,Matplotlib和Pandas等熱門項目的貢獻者,因其長期致力於創建、開發和維護開源Python工具而在數據科學社區享有盛譽,擁有美國華盛頓大學博士學位,曾任華盛頓大學eScience學院物理科學研究院院長。

目錄大綱

目錄

對本書的贊譽 xv

譯者序 xvii

前言 xix

第 一部分 Jupyter:超越Python

第 1章 IPython和Jupyter入門 3

1.1 啟動IPython shell 3

1.2 啟動Jupyter Notebook 3

1.3 IPython的幫助和文檔 4

1.3.1 用符號 獲取文檔 5

1.3.2 用符號 獲取源代碼 6

1.3.3 用Tab補全的方式探索模塊 6

1.4 IPython shell中的快捷鍵 8

1.4.1 導航快捷鍵 8

1.4.2 文本輸入快捷鍵 9

1.4.3 命令歷史快捷鍵 9

1.4.4 其他快捷鍵 10

第 2章 增強的交互功能 11

2.1 IPython魔法命令 11

2.1.1 執行外部代碼:%run 11

2.1.2 計算代碼運行時間:%timeit 12

2.1.3 魔法函數的幫助: 、%magic和%lsmagic 12

2.2 輸入和輸出歷史 13

2.2.1 IPython的輸入和輸出對象 13

2.2.2 下劃線快捷鍵和以前的輸出 14

2.2.3 禁止輸出 14

2.2.4 相關的魔法命令 15

2.3 IPython和shell命令 15

2.3.1 shell快速入門 15

2.3.2 IPython中的shell命令 16

2.3.3 在shell中傳入或傳出值 16

2.3.4 與shell相關的魔法命令 17

第3章 調試及性能分析 19

3.1 錯誤和調試 19

3.1.1 控制異常:%xmode 19

3.1.2 調試:當閱讀軌跡追溯不足以解決問題時 21

3.2 代碼性能與耗時分析 23

3.2.1 代碼段計時:%timeit和%time 23

3.2.2 對整個腳本進行性能分析:%prun 24

3.2.3 用%lprun進行逐行性能分析 25

3.2.4 用%memit和%mprun進行內存分析 26

3.3 IPython參考資料 27

3.3.1 網絡資源 27

3.3.2 相關圖書 28

第二部分  NumPy入門

第4章 理解Python中的數據類型 31

4.1 Python整型不僅僅是一個整型 32

4.2 Python列表不僅僅是一個列表 33

4.3 Python中的固定類型數組 35

4.4 從Python列表創建數組 35

4.5 從頭創建數組 36

4.6 NumPy標準數據類型 37

第5章 NumPy數組基礎 38

5.1 NumPy數組的屬性 38

5.2 數組索引:獲取單個元素 39

5.3 數組切片:獲取子數組 40

5.3.1 一維子數組 40

5.3.2 多維子數組 41

5.3.3 非副本視圖的子數組 41

5.3.4 創建數組的副本 42

5.4 數組的變形 42

5.5 數組拼接和拆分 43

5.5.1 數組的拼接 43

5.5.2 數組的拆分 44

第6章 NumPy數組的計算:通用函數 46

6.1 緩慢的循環 46

6.2 通用函數介紹 47

6.3 探索NumPy的通用函數 48

6.3.1 數組的運算 48

6.3.2 絕對值 49

6.3.3 三角函數 49

6.3.4 指數和對數 50

6.3.5 專業的通用函數 51

6.4 高級的通用函數特性 51

6.4.1 指定輸出 51

6.4.2 聚合 52

6.4.3 外積 52

6.5 通用函數:更多的信息 53

第7章 聚合:最小值、最大值和其他值 54

7.1 數組值求和 54

7.2 最小值和最大值 55

7.2.1 多維度聚合 55

7.2.2 其他聚合函數 56

7.3 示例:美國總統的平均身高是多少 56

第8章 數組的計算:廣播 59

8.1 廣播的介紹 59

8.2 廣播的規則 61

8.2.1 廣播示例1 61

8.2.2 廣播示例2 62

8.2.3 廣播示例3 62

8.3 廣播的實際應用 63

8.3.1 數組的歸一化 63

8.3.2 畫一個二維函數 64

第9章 比較、掩碼和布爾邏輯 65

9.1 示例:統計下雨天數 65

9.2 將比較運算符看作通用函數 66

9.3 操作布爾數組 67

9.3.1 統計記錄的個數 68

9.3.2 布爾運算符 69

9.4 將布爾數組作為掩碼 70

9.5 使用關鍵字and/or與邏輯操作運算符&/| 70

第 10章 花式索引 73

10.1 探索花式索引 73

10.2 組合索引 74

10.3 示例:選擇隨機點 75

10.4 用花式索引修改值 76

10.5 示例:數據區間劃分 77

第 11章 數組排序 80

11.1 NumPy中的快速排序:np.sort和np.argsort 81

11.2 沿著行或列排序 81

11.3 部分排序:分區 82

11.4 示例:k個最近鄰 82

第 12章 結構化數據:NumPy的結構化數組 86

12.1 生成結構化數組 87

12.2 更高級的復合數據類型 88

12.3 記錄數組:結構化數組的扭轉 89

12.4 關於pandas 89

第三部分 pandas數據處理

第 13章 pandas對象簡介 93

13.1 pandas的Series對象 93

13.1.1 Serise是通用的NumPy數組 94

13.1.2 Series是特殊的字典 95

13.1.3 創建Series對象 95

13.2 pandas的DataFrame對象 96

13.2.1 DataFrame是通用的NumPy數組 96

13.2.2 DataFrame是特殊的字典 97

13.2.3 創建DataFrame對象 97

13.3 pandas的Index對象 99

13.3.1 將Index看作不可變量組 99

13.3.2 將Index看作有序集合 99

第 14章 數據取值與選擇 101

14.1 Series數據選擇方法 101

14.1.1 將Series看作字典 101

14.1.2 將Series看作一維數組 102

14.1.3 索引器:loc和iloc 103

14.2 DataFrame數據選擇方法 104

14.2.1 將DataFrame看作字典 104

14.2.2 將DataFrame看作二維數組 105

14.2.3 其他取值方法 107

第 15章 pandas數值運算方法 108

15.1 通用函數:保留索引 108

15.2 通用函數:索引對齊 109

15.2.1 Series索引對齊 109

15.2.2 DataFrame索引對齊 110

15.3 通用函數:DataFrame與Series的運算 111

第 16章 處理缺失值 113

16.1 處理缺失值的方法選擇 113

16.2 pandas的缺失值 114

16.2.1 None作為哨兵值 114

16.2.2 NaN:數值類型的缺失值 115

16.2.3 pandas中NaN與None的差異 115

16.3 pandas可空類型 116

16.4 處理缺失值 117

16.4.1 發現缺失值 117

16.4.2 剔除缺失值 117

16.4.3 填充缺失值 119

第 17章 分層索引 121

17.1 多級索引Series 121

17.1.1 笨辦法 121

17.1.2 好辦法:pandas多級索引 122

17.1.3 高維數據的多級索引 123

17.2 多級索引的創建方法 124

17.2.1 顯式地創建多級索引 125

17.2.2 多級索引的級別名稱 125

17.2.3 多級列索引 126

17.3 多級索引的取值與切片 127

17.3.1 Series多級索引 127

17.3.2 DataFrame多級索引 128

17.4 多級索引行列轉換 129

17.4.1 有序的索引和無序的索引 129

17.4.2 索引stack與unstack 130

17.4.3 索引的設置與重置 131

第 18章 合並數據集:concat與append操作 132

18.1 知識回顧:NumPy數組的合並 133

18.2 通過pd.concat實現簡單合並 133

18.2.1 索引重復 134

18.2.2 類似join的合並 135

18.2.3 append方法 136

第 19章 合並數據集:合並與連接 137

19.1 關系代數 137

19.2 數據連接的類型 138

19.2.1 一對一連接 138

19.2.2 多對一連接 139

19.2.3 多對多連接 139

19.3 設置數據合並的鍵 140

19.3.1 參數on的用法 140

19.3.2 left_on與right_on參數 140

19.3.3 left_index與right_index參數 141

19.4 設置數據連接的集合操作規則 142

19.5 重復列名:suffixes參數 143

19.6 案例:美國各州的統計數據 144

第 20章 聚合與分組 149

20.1 行星數據 149

20.2 pandas的簡單聚合功能 150

20.3 groupby:分割、應用和組合 152

20.3.1 分割、應用和組合 152

20.3.2 GroupBy對象 153

20.3.3 聚合、過濾、轉換和應用 155

20.3.4 設置分割的鍵 157

第 21章 數據透視表 160

21.1 演示數據透視表 160

21.2 手工製作數據透視表 161

21.3 數據透視表語法 161

21.3.1 多級數據透視表 162

21.3.2 其他數據透視表選項 162

21.4 案例:美國人的生日 163

第 22章 向量化字符串操作 168

22.1 pandas字符串操作簡介 168

22.2 pandas字符串方法列表 169

22.2.1 與Python字符串方法相似的方法 169

22.2.2 使用正則表達式的方法 170

22.2.3 其他字符串方法 171

22.3 案例:食譜數據庫 173

22.3.1 製作簡單的美食推薦系統 174

22.3.2 繼續完善美食推薦系統 175

第 23章 處理時間序列 176

23.1 Python的日期與時間工具 176

23.1.1 Python的原生日期與時間工具:datetime與dateutil 177

23.1.2 時間類型數組:NumPy的datetime64類型 177

23.1.3 pandas的日期與時間工具:理想與現實的最佳解決方案 179

23.2 pandas時間序列:用時間作索引 179

23.3 pandas時間序列數據結構 180

23.4 有規律的時間序列:pd.date_range 181

23.5 時間頻率與偏移量 182

23.6 重採樣、移位和窗口 183

23.6.1 重採樣與頻率轉換 184

23.6.2 時間移位 186

23.6.3 滾動窗口 186

23.7 案例:美國西雅圖自行車統計數據的可視化 188

23.7.1 數據可視化 189

23.7.2 深入挖掘數據 191

第 24章 高性能pandas:eval與query 194

24.1 query與eval的設計動機:復合表達式 194

24.2 用pandas.eval實現高性能運算 195

24.3 用DataFrame.eval實現列間運算 196

24.3.1 用DataFrame.eval新增列 197

24.3.2 DataFrame.eval使用局部變量 198

24.4 DataFrame.query方法 198

24.5 性能決定使用時機 199

24.6 參考資料 199

第四部分 Matplotlib數據可視化

第 25章 Matplotlib常用技巧 203

25.1 導入Matplotlib 203

25.2 設置繪圖樣式 203

25.3 用不用show?如何顯示圖形 203

25.3.1 在腳本中畫圖 204

25.3.2 在IPython shell中畫圖 204

25.3.3 在Jupyter Notebook中畫圖 204

25.3.4 將圖形保存為文件 205

25.3.5 兩種畫圖接口 206

第 26章 簡單線形圖 209

26.1 調整圖形:線條的顏色與風格 212

26.2 調整圖形:坐標軸上下限 214

26.3 設置圖形標簽 216

26.4 Matplotlib陷阱 218

第 27章 簡單散點圖 219

27.1 用plt.plot畫散點圖 219

27.2 用plt.scatter畫散點圖 222

27.3 plot與scatter:效率對比 224

27.4 可視化誤差 224

27.4.1 基本誤差線 225

27.4.2 連續誤差 226

第 28章 密度圖與等高線圖 228

28.1 三維函數的可視化 228

28.2 頻次直方圖、數據區間劃分和分佈密度 232

28.3 二維頻次直方圖與數據區間劃分 234

28.3.1 plt.hist2d:二維頻次直方圖 235

28.3.2 plt.hexbin:六邊形區間劃分 235

28.3.3 核密度估計 236

第 29章 配置圖例 238

29.1 選擇圖例顯示的元素 241

29.2 在圖例中顯示不同尺寸的點 242

29.3 同時顯示多個圖例 243

第30章 配置顏色條 245

30.1 配置顏色條 246

30.1.1 選擇配色方案 247

30.1.2 顏色條刻度的限制與擴展功能的設置 249

30.1.3 離散型顏色條 250

30.2 案例:手寫數字 250

第31章 多子圖 253

31.1 plt.axes:手動創建子圖 253

31.2 plt.subplot:簡單網格子圖 255

31.3 plt.subplots:用一行代碼創建網格 256

31.4 plt.GridSpec:實現更復雜的排列方式 257

第32章 文字與註釋 260

32.1 案例:節假日對美國出生率的影響 260

32.2 坐標變換與文字位置 262

32.3 箭頭與註釋 264

第33章 自定義坐標軸刻度 267

33.1 主要刻度與次要刻度 267

33.2 隱藏刻度與標簽 268

33.3 增減刻度數量 270

33.4 花哨的刻度格式 272

33.5 格式生成器與定位器小結 274

第34章 Matplotlib自定義:配置文件與樣式表 276

34.1 手動配置圖形 276

34.2 修改默認配置:rcParams 278

34.3 樣式表 280

34.3.1 默認風格 280

34.3.2 FiveThirtyEight風格 281

34.3.3 ggplot風格 281

34.3.4 bmh風格 282

34.3.5 黑色背景風格 282

34.3.6 灰度風格 283

34.3.7 Seaborn風格 283

第35章 用Matplotlib畫三維圖 285

35.1 三維數據點與線 286

35.2 三維等高線圖 287

35.3 線框圖和曲面圖 289

35.4 曲面三角剖分 291

35.5 案例:默比烏斯帶 292

第36章 用Seaborn做數據可視化 294

36.1 Seaborn圖形介紹 295

36.1.1 頻次直方圖、KDE和密度圖 295

36.1.2 成對圖 297

36.1.3 分面頻次直方圖 298

36.2 分類圖 299

36.2.1 聯合分佈 300

36.2.2 條形圖 301

36.3 案例:探索馬拉松比賽成績數據 302

36.4 參考資料 309

36.5 其他Python畫圖程序庫 310

第五部分 機器學習

第37章 什麽是機器學習 313

37.1 機器學習的分類 313

37.2 機器學習應用的定性示例 314

37.2.1 分類:預測離散標簽 314

37.2.2 回歸:預測連續標簽 316

37.2.3 聚類:為無標簽數據添加標簽 318

37.2.4 降維:推斷無標簽數據的結構 320

37.3 小結 321

第38章 scikit-learn簡介 322

38.1 scikit-learn的數據表示 322

38.1.1 特徵矩陣 323

38.1.2 目標數組 323

38.2 scikit-learn的估計器API 325

38.2.1 API基礎知識 326

38.2.2 監督學習示例:簡單線性回歸 326

38.2.3 監督學習示例:鳶尾花數據分類 329

38.2.4 無監督學習示例:鳶尾花數據降維 330

38.2.5 無監督學習示例:鳶尾花數據聚類 331

38.3 應用:手寫數字探索 332

38.3.1 加載並可視化手寫數字 332

38.3.2 無監督學習:降維 333

38.3.3 數字分類 334

38.4 小結 337

第39章 超參數與模型驗證 338

39.1 模型驗證 338

39.1.1 錯誤的模型驗證方法 338

39.1.2 正確的模型驗證方法:留出集 339

39.1.3 交叉驗證 339

39.2 選擇最優模型 341

39.2.1 偏差與方差的均衡 342

39.2.2 scikit-learn驗證曲線 343

39.3 學習曲線 347

39.4 驗證實踐:網格搜索 350

39.5 小結 351

第40章 特徵工程 352

40.1 分類特徵 352

40.2 文本特徵 353

40.3 圖像特徵 354

40.4 衍生特徵 355

40.5 缺失值插補 357

40.6 特徵管道 358

第41章 專題:樸素貝葉斯分類 359

41.1 貝葉斯分類 359

41.2 高斯樸素貝葉斯 360

41.3 多項式樸素貝葉斯 362

41.4 樸素貝葉斯的應用場景 365

第42章 專題:線性回歸 367

42.1 簡單線性回歸 367

42.2 基函數回歸 370

42.2.1 多項式基函數 370

42.2.2 高斯基函數 371

42.3 正則化 373

42.3.1 嶺回歸(L2範數正則化) 375

42.3.2 Lasso回歸(L1範數正則化) 376

42.4 案例:預測自行車流量 377

第43章 專題:支持向量機 382

43.1 支持向量機的由來 382

43.2 支持向量機:間隔最大化 384

43.2.1 擬合支持向量機 385

43.2.2 超越線性邊界:核函數SVM模型 387

43.2.3 SVM優化:軟化間隔 390

43.3 案例:人臉識別 391

43.4 小結 395

第44章 專題:決策樹與隨機森林 397

44.1 隨機森林的基礎:決策樹 397

44.1.1 創建一棵決策樹 398

44.1.2 決策樹與過擬合 400

44.2 估計器集成算法:隨機森林 401

44.3 隨機森林回歸 403

44.4 案例:用隨機森林識別手寫數字 404

44.5 小結 407

第45章 專題:主成分分析 408

45.1 PCA簡介 408

45.1.1 用PCA降維 411

45.1.2 用PCA做數據可視化:手寫數字 412

45.1.3 成分的含義 413

45.1.4 選擇成分的數量 414

45.2 用PCA做噪聲過濾 415

45.3 案例:特徵臉 417

45.4 小結 419

第46章 專題:流形學習 420

46.1 流形學習:“HELLO” 420

46.1.1 多維標度法(MDS) 422

46.1.2 將MDS用於流形學習 424

46.2 非線性嵌入:當MDS失敗時 426

46.3 非線性流形:局部線性嵌入 427

46.4 關於流形方法的一些思考 429

46.5 示例:用Isomap處理人臉數據 430

46.6 示例:手寫數字的可視化結構 433

第47章 專題:k-means聚類 437

47.1 k-means簡介 437

47.2 k-means算法:期望最大化 439

47.3 案例 444

47.3.1 案例1:用k-means算法處理手寫數字 444

47.3.2 案例2:將k-means用於色彩壓縮 447

第48章 專題:高斯混合模型 451

48.1 高斯混合模型誕生的原因:k-means算法的缺陷 451

48.2 廣義E-M:高斯混合模型 454

48.3 選擇協方差的類型 458

48.4 將GMM用作密度估計器 458

48.5 示例:用GMM生成新的數據 462

第49章 專題:核密度估計 465

49.1 KDE的由來:直方圖 465

49.2 核密度估計的實際應用 469

49.3 通過交叉驗證選擇帶寬 470

49.4 示例:不是很樸素的貝葉斯 471

49.4.1 解析自定義估計器 472

49.4.2 使用自定義估計器 474

第50章 應用:人臉識別管道 476

50.1 HOG特徵 476

50.2 HOG實戰:一個簡單的人臉識別器 477

50.2.1 獲取一組正訓練樣本 478

50.2.2 獲取一組負訓練樣本 478

50.2.3 組合數據集並提取HOG特徵 479

50.2.4 訓練一個支持向量機 479

50.2.5 在新圖像中尋找人臉 480

50.3 註意事項與改進方案 482

50.4 機器學習參考資料 483

 

 

 

 

 

目錄

 

對本書的贊譽 xv

譯者序 xvii

前言 xix

第 一部分 Jupyter:超越Python

第 1章 IPython和Jupyter入門 3

第 2章 增強的交互功能 11

第3章 調試及性能分析 19

第二部分  NumPy入門

第4章 理解Python中的數據類型 31

第5章 NumPy數組基礎 38

第6章 NumPy數組的計算:通用函數 46

第7章 聚合:最小值、最大值和其他值 54

第8章 數組的計算:廣播 59

第9章 比較、掩碼和布爾邏輯 65

第 10章 花式索引 73

第 11章 數組排序 80

第 12章 結構化數據:NumPy的結構化數組 86

第三部分 pandas數據處理

第 13章 pandas對象簡介 93

第 14章 數據取值與選擇 101

第 15章 pandas數值運算方法 108

第 16章 處理缺失值 113

第 17章 分層索引 121

第 18章 合並數據集:concat與append操作 132

第 19章 合並數據集:合並與連接 137

第 20章 聚合與分組 149

第 21章 數據透視表 160

第 22章 向量化字符串操作 168

第 23章 處理時間序列 176

第 24章 高性能pandas:eval與query 194

第四部分 Matplotlib數據可視化

第 25章 Matplotlib常用技巧 203

第 26章 簡單線形圖 209

第 27章 簡單散點圖 219

第 28章 密度圖與等高線圖 228

第 29章 配置圖例 238

第30章 配置顏色條 245

第31章 多子圖 253

第32章 文字與註釋 260

第33章 自定義坐標軸刻度 267

第34章 Matplotlib自定義:配置文件與樣式表 276

第35章 用Matplotlib畫三維圖 285

第36章 用Seaborn做數據可視化 294

第五部分 機器學習

第37章 什麽是機器學習 313

第38章 scikit-learn簡介 322

第39章 超參數與模型驗證 338

第40章 特徵工程 352

第41章 專題:樸素貝葉斯分類 359

第42章 專題:線性回歸 367

第43章 專題:支持向量機 382

第44章 專題:決策樹與隨機森林 397

第45章 專題:主成分分析 408

第46章 專題:流形學習 420

第47章 專題:k-means聚類 437

第48章 專題:高斯混合模型 451

第49章 專題:核密度估計 465

第50章 應用:人臉識別管道 476