內容簡介
主要內容
● 建立數據管道
● 採集、存儲和檢索
● 處理異常數據集
● 清洗和準備原始數據
● 使用D3實現互動式可視化
作者簡介
Ashley Davis既是一位軟體開發人員,也是一名企業家。此外,他還會編寫一些技術圖書。他擁有超過20年的軟體開發經驗,從編寫代碼到管理團隊無不涉獵,甚至還有自主創業的經歷。他曾任職於多家公司,行業和規模跨度都非常之大,從小型的初創公司到大型跨國公司,都曾留下他的足跡。與此同時,他還經常編寫和發布一些開原始碼,以此來回饋社區用戶。
圖書目錄
第1 章 快速入門:建立數據處理流程 1
1.1 為什麼要進行數據整理 1
1.2 數據整理指的是什麼 2
1.3 為什麼要寫一本關於JavaScript數據整理的書 3
1.4 可以通過本書獲取哪些知識 5
1.5 為什麼要使用JavaScript進行數據整理 5
1.6 JavaScript是否適用於數據分析 6
1.7 在JavaScript生態系統中暢遊 8
1.8 組裝你的工具包 8
1.9 建立數據處理流程 10
1.9.1 設定階段 10
1.9.2 數據整理過程 11
1.9.3 計畫 12
1.9.4 採集、存儲和檢索 15
1.9.5 探索性編碼 17
1.9.6 清洗和準備 21
1.9.7 分析 22
1.9.8 可視化 23
1.9.9 轉入生產環境 25
小結 27
第2 章 Node.js快速入門 29
2.1 開啟工具包 29
2.2 構建一個簡單的報告系統 30
2.3 獲取代碼和數據 31
2.3.1 查看代碼 32
2.3.2 下載代碼 32
2.3.3 安裝Node.js 33
2.3.4 安裝依存項 33
2.3.5 運行Node.js代碼 34
2.3.6 運行Web應用程式 34
2.3.7 獲取數據 35
2.3.8 獲取第2章對應的代碼 36
2.4 安裝Node.js 36
2.5 使用Node.js 38
2.5.1 創建一個Node.js項目 39
2.5.2 創建一個命令行應用程式 42
2.5.3 創建一個代碼庫 45
2.5.4 創建一個簡單的Web伺服器 47
2.6 異步編碼 53
2.6.1 載入單個檔案 54
2.6.2 載入多個檔案 57
2.6.3 錯誤處理 59
2.6.4 使用Promise進行異步編碼 60
2.6.5 在Promise中封裝異步操作 64
2.6.6 使用async和await進行異步編碼 65
小結 66
第3 章 採集、存儲和檢索 69
3.1 構建你的工具包 70
3.2 獲取代碼和數據 71
3.3 核心數據表示 71
3.3.1 地震網站 72
3.3.2 涉及的數據格式 74
3.3.3 強大功能和靈活性 75
3.4 導入數據 76
3.4.1 從文本檔案載入數據 76
3.4.2 從REST API載入數據 79
3.4.3 解析JSON文本數據 81
3.4.4 解析CSV文本數據 84
3.4.5 從資料庫導入數據 89
3.4.6 從MongoDB導入數據 90
3.4.7 從MySQL導入數據 93
3.5 導出數據 96
3.5.1 你需要有可供導出的數據 96
3.5.2 將數據導出到文本檔案 98
3.5.3 將數據導出到JSON文本檔案 99
3.5.4 將數據導出到CSV文本檔案 100
3.5.5 將數據導出到資料庫 102
3.5.6 將數據導出到MongoDB 102
3.5.7 將數據導出到MySQL 104
3.6 構建完整的數據轉換 107
3.7 擴展流程 108
小結 110
第4 章 處理不常見的數據 111
4.1 獲取代碼和數據 112
4.2 從文本檔案導入自定義數據 112
4.3 通過網頁爬取導入數據 116
4.3.1 識別要爬取的數據 117
4.3.2 使用cheerio進行網頁爬取 118
4.4 使用二進制數據 120
4.4.1 解包自定義二進制檔案 121
4.4.2 填充自定義二進制檔案 124
4.4.3 將JSON替換為BSON 127
4.4.4 將JSON轉換為BSON 127
4.4.5 反序列化BSON檔案 128
小結 129
第5 章 探索性編碼 131
5.1 擴展工具包 132
5.2 分析交通事故 132
5.3 獲取代碼和數據 133
5.4 疊代和反饋環 134
5.5 了解數據的第一個步驟 135
5.6 使用縮減後的數據樣本 136
5.7 使用Excel進行原型設計 137
5.8 使用Node.js進行探索性編碼 139
5.8.1 使用Nodemon 141
5.8.2 對你的數據進行探索 142
5.8.3 使用Data-Forge 145
5.8.4 計算趨勢列 149
5.8.5 輸出新的CSV檔案 153
5.9 在瀏覽器中進行探索性編碼 155
5.10 將所有內容整合到一起 163
小結 163
第6 章 清洗和準備 165
6.1 擴展我們的工具包 166
6.2 準備珊瑚礁數據 167
6.3 獲取代碼和數據 167
6.4 數據清洗和準備的需求 167
6.5 損壞的數據來自何處? 168
6.6 如何將數據清洗納入數據處理流程? 169
6.7 識別有問題的數據 170
6.8 問題的種類 171
6.9 如何處理有問題的數據 171
6.10 修復有問題的數據的技術 172
6.11 清洗數據集 172
6.11.1 重新寫入有問題的行 173
6.11.2 過濾數據行 179
6.11.3 過濾數據列 182
6.12 準備好數據以便有效使用 184
6.12.1 聚合數據行 184
6.12.2 使用globby組合來自不同檔案的數據 186
6.12.3 將數據拆分為單獨檔案 189
6.13 使用Data-Forge構建數據處理流程 191
小結 193
第7 章 處理大型數據檔案 195
7.1 擴展工具包 195
7.2 修復溫度數據 196
7.3 獲取代碼和數據 197
7.4 什麼情況下常規的數據處理方法會出現問題 197
7.5 Node.js的限制 199
7.5.1 增量數據處理 200
7.5.2 增量式核心數據表示 201
7.5.3 Node.js檔案流基本知識簡介 202
7.5.4 轉換大型CSV檔案 206
7.5.5 轉換大型JSON檔案 212
7.5.6 混合和匹配 218
小結 219
第8 章 處理大量數據 221
8.1 擴展工具包 222
8.2 處理大量數據 222
8.3 獲取代碼和數據 223
8.4 用於處理大數據的技術 223
8.4.1 從小數據集開始 223
8.4.2 返回到小數據集 223
8.4.3 使用更高效的表示形式 224
8.4.4 脫機準備數據 224
8.5 更多Node.js限制 226
8.6 分治算法 227
8.7 使用大型資料庫 227
8.7.1 資料庫設定 228
8.7.2 打開到資料庫的連線 229
8.7.3 將大型檔案移動到資料庫中 230
8.7.4 使用資料庫游標進行增量處理 232
8.7.5 使用數據視窗進行增量處理 234
8.7.6 創建索引 237
8.7.7 使用查詢過濾 237
8.7.8 使用投影丟棄數據 239
8.7.9 對大型數據集進行排序 240
8.8 提高數據吞吐量 242
8.8.1 最佳化代碼 242
8.8.2 最佳化算法 243
8.8.3 並行處理數據 243
小結 249
第9 章 實用數據分析 251
9.1 擴展工具包 252
9.2 分析天氣數據 253
9.3 獲取代碼和數據 253
9.4 基本數據匯總 254
9.4.1 求和 254
9.4.2 求平均值 255
9.4.3 標準差 256
9.5 分組和匯總 257
9.6 溫度的頻率分布 262
9.7 時間序列 266
9.7.1 年平均溫度 267
9.7.2 滾動平均值 268
9.7.3 滾動標準差 272
9.7.4 線性回歸 272
9.7.5 比較時間序列 275
9.7.6 堆疊時間序列運算 279
9.8 了解關係 280
9.8.1 使用散點圖檢測相關性 280
9.8.2 相關性的類型 280
9.8.3 確定相關性的強度 282
9.8.4 計算相關係數 282
小結 284
第10 章 基於瀏覽器的可視化 285
10.1 擴展工具包 286
10.2 獲取代碼和數據 286
10.3 選擇圖表類型 287
10.4 紐約地區溫度的折線圖 289
10.4.1 最基本的C3折線圖 289
10.4.2 添加實際數據 292
10.4.3 解析靜態CSV檔案 294
10.4.4 添加年份作為X軸 296
10.4.5 創建自定義Node.js Web伺服器 297
10.4.6 向圖表中添加另一個序列 302
10.4.7 向圖表中添加第二個Y軸 303
10.4.8 呈現時間序列圖表 305
10.5 使用C3創建的其他圖表類型 307
10.5.1 條形圖 307
10.5.2 水平條形圖 308
10.5.3 餅圖 309
10.5.4 堆疊條形圖 311
10.5.5 散點圖 312
10.6 改善圖表的外觀 313
10.7 處理自己的項目 315
小結 316
第11 章 伺服器端可視化 317
11.1 擴展工具包 318
11.2 獲取代碼和數據 319
11.3 無頭瀏覽器 319
11.4 使用Nightmare進行伺服器端可視化 321
11.4.1 為什麼使用Nightmare? 321
11.4.2 Nightmare和Electron 322
11.4.3 操作過程:使用Nightmare捕捉可視化結果 323
11.4.4 為呈現可視化結果做好準備 323
11.4.5 啟動Web伺服器 326
11.4.6 以程式方式啟動和停止Web伺服器 327
11.4.7 將網頁呈現為圖像 329
11.4.8 繼續完成後續步驟之前 330
11.4.9 捕捉完整的可視化結果 332
11.4.10 為圖表提供數據 334
11.4.11 多頁報告 338
11.4.12 在無頭瀏覽器中調試代碼 341
11.4.13 設定為可以在Linux伺服器上操作 342
11.5 使用無頭瀏覽器可執行更多操作 344
11.5.1 網頁爬取 344
11.5.2 其他用途 345
小結 345
第12 章 實時數據 347
12.1 我們需要預警系統 348
12.2 獲取代碼和數據 348
12.3 處理實時數據 349
12.4 構建用於監控空氣品質的系統 349
12.5 為開發而進行設定 352
12.6 實時流數據 353
12.6.1 使用HTTP POST處理不太頻繁的數據提交 354
12.6.2 使用套接字處理高頻率的數據提交 357
12.7 配置重構 360
12.8 數據捕捉 361
12.9 基於事件的體系結構 364
12.10 事件處理的代碼重構 366
12.10.1 觸發SMS簡訊警報 367
12.10.2 自動生成每日報告 368
12.11 實時數據處理 372
12.12 實時可視化 374
小結 380
第13 章 使用D3實現高級可視化 381
13.1 高級可視化 382
13.2 獲取代碼和數據 383
13.3 可視化太空垃圾 384
13.4 D3是什麼? 385
13.5 D3數據處理流程 386
13.6 基本設定 387
13.7 快速了解SVG 388
13.7.1 SVG圓形 388
13.7.2 樣式設定 390
13.7.3 SVG文本 391
13.7.4 SVG組 392
13.8 使用D3構建可視化結果 393
13.8.1 元素狀態 393
13.8.2 選擇元素 394
13.8.3 手動向可視化結果中添加元素 396
13.8.4 進行比例縮放以適合可用空間 398
13.8.5 以D3的方式程式化生成 400
13.8.6 載入數據檔案 403
13.8.7 使用不同的顏色標記太空垃圾 406
13.8.8 添加互動性 407
13.8.9 添加不同發射年份的動畫 409
小結 412
第14 章 轉入生產環境 413
14.1 生產注意事項 414
14.2 將預警系統轉入生產環境 415
14.3 部署 417
14.4 監控 419
14.5 可靠性 421
14.5.1 系統耐用性 421
14.5.2 進行防禦式編程 421
14.5.3 數據保護 422
14.5.4 測試和自動化 423
14.5.5 處理意外錯誤 428
14.5.6 設計處理流程重新啟動 430
14.5.7 處理不斷增大的資料庫 431
14.6 安全性 431
14.6.1 身份驗證和授權 431
14.6.2 隱私性和機密性 432
14.6.3 密鑰配置 434
14.7 擴展 434
14.7.1 在最佳化之前進行測量 434
14.7.2 縱向擴展 435
14.7.3 橫向擴展 435
小結 436
附錄A JavaScript備忘錄 439
附錄B Data-Forge備忘錄 445
附錄C Vagrant快速入門 447