本書主要內容包括:數據清洗在數據科學領域中的重要作用,文件格式、數據類型、字符編碼的基本概念,組織和處理數據的電子表格與文本編輯器,各種格式數據的轉換方法,解析和清洗網頁上的HTML 文件的三種策略,提取和清洗PDF 文件中數據的方法,檢測和清除RDBMS 中的壞數據的解決方案,以及使用書中介紹的方法清洗來自Twitter 和Stack Overflow 的數據。
理解數據清洗在整個數據科學過程中的作用
掌握數據清洗的基礎知識,包括文件清洗、數據類型、字符編碼等
發掘電子表格和文本編輯器中與數據組織和操作相關的重要功能
學會常見數據格式的相互轉換,如JSON、CSV和一些特殊用途的格式
采用三種策略來解析和清洗HTML文件中的數據
揭開PDF文檔的秘密,提取需要的數據
借助一系列解決方案來清洗存放在關系型數據庫里的壞數據
創建自己的干凈數據集,為其打包、添加授權許可并與他人共享
使用書中的工具以及Twitter和Stack Overflow數據,完成兩個真實的項目
Megan Squire 依隆大學計算科學專業教授,主要教授數據庫系統、Web開發、數據挖掘和數據科學課程。有二十年的數據收集與清洗經驗。她還是FLOSSmole研究項目的領導者,致力于收集與分析數據,以便研究免費軟件、自由軟件和開源軟件的開發。
第1章 為什么需要清洗數據 1
1.1 新視角 1
1.2 數據科學過程 2
1.3 傳達數據清洗工作的內容 3
1.4 數據清洗環境 4
1.5 入門示例 5
1.6 小結 9
第2章 基礎知識——格式、 類型與編碼 11
2.1 文件格式 11
2.1.1 文本文件與二進制文件 11
2.1.2 常見的文本文件格式 14
2.1.3 分隔格式 14
2.2 歸檔與壓縮 20
2.2.1 歸檔文件 20
2.2.2 壓縮文件 21
2.3 數據類型、空值與編碼 24
2.3.1 數據類型 25
2.3.2 數據類型間的相互轉換 29
2.3.3 轉換策略 30
2.3.4 隱藏在數據森林中的空值 37
2.3.5 字符編碼 41
2.4 小結 46
第3章 數據清洗的老黃牛——電子表格和文本編輯器 47
3.1 電子表格中的數據清洗 47
3.1.1 Excel的文本分列功能 47
3.1.2 字符串拆分 51
3.1.3 字符串拼接 51
3.2 文本編輯器里的數據清洗 54
3.2.1 文本調整 55
3.2.2 列選模式 56
3.2.3 加強版的查找與替換功能 56
3.2.4 文本排序與去重處理 58
3.2.5 Process Lines Containing 60
3.3 示例項目 60
3.3.1 及時步:問題陳述 60
3.3.2 第二步:數據收集 60
3.3.3 第三步:數據清洗 61
3.3.4 第四步:數據分析 63
3.4 小結 63
第4章 講通用語言——數據轉換 64
4.1 基于工具的快速轉換 64
4.1.1 從電子表格到CSV 65
4.1.2 從電子表格到JSON 65
4.1.3 使用phpMyAdmin從SQL
語句中生成CSV或JSON 67
4.2 使用PHP實現數據轉換 69
4.2.1 使用PHP實現SQL到JSON的數據轉換 69
4.2.2 使用PHP實現SQL到CSV的數據轉換 70
4.2.3 使用PHP實現JSON到CSV的數據轉換 71
4.2.4 使用PHP實現CSV到JSON的數據轉換 71
4.3 使用Python實現數據轉換 72
4.3.1 使用Python實現CSV到JSON的數據轉換 72
4.3.2 使用csvkit實現CSV到JSON的數據轉換 73
4.3.3 使用Python實現JSON到CSV的數據轉換 74
4.4 示例項目 74
4.4.1 及時步:下載GDF格式的Facebook數據 75
4.4.2 第二步:在文本編輯器中查看GDF文件 75
4.4.3 第三步:從GDF格式到JSON格式的轉換 76
4.4.4 第四步:構建D3圖 79
4.4.5 第五步:把數據轉換成Pajek格式 81
4.4.6 第六步:簡單的社交網絡分析 83
4.5 小結 84
第5章 收集并清洗來自網絡的數據 85
5.1 理解HTML頁面結構 85
5.1.1 行分隔模型 86
5.1.2 樹形結構模型 86
5.2 方法一:Python和正則表達式 87
5.2.1 及時步:查找并保存實驗用的Web文件 88
5.2.2 第二步:觀察文件內容并判定有價值的數據 88
5.2.3 第三步:編寫Python程序把數據保存到CSV文件中 89
5.2.4 第四步:查看文件并確認清洗結果 89
5.2.5 使用正則表達式解析HTML的局限性 90
5.3 方法二:Python和BeautifulSoup 90
5.3.1 及時步:找到并保存實驗用的文件 90
5.3.2 第二步:安裝BeautifulSoup 91
5.3.3 第三步:編寫抽取數據用的Python程序 91
5.3.4 第四步:查看文件并確認清洗結果 92
5.4 方法三:Chrome Scraper 92
5.4.1 及時步:安裝Chrome擴展Scraper 92
5.4.2 第二步:從網站上收集數據 92
5.4.3 第三步:清洗數據 94
5.5 示例項目:從電子郵件和論壇中抽取數據 95
5.5.1 項目背景 95
5.5.2 及時部分:清洗來自Google Groups電子郵件的數據 96
5.5.3 第二部分:清洗來自網絡論壇的數據 99
5.6 小結 105
第6章 清洗PDF文件中的數據 106
6.1 為什么PDF文件很難清洗 106
6.2 簡單方案——復制 107
6.2.1 我們的實驗文件 107
6.2.2 及時步:把我們需要的數據復制出來 108
6.2.3 第二步:把復制出來的數據粘貼到文本編輯器中 109
6.2.4 第三步:輕量級文件 110
6.3 第二種技術——pdfMiner 111
6.3.1 及時步:安裝pdfMiner 111
6.3.2 第二步:從PDF文件中提取文本 111
6.4 第三種技術——Tabula 113
6.4.1 及時步:下載Tabula 113
6.4.2 第二步:運行Tabula 113
6.4.3 第三步:用Tabula提取數據 114
6.4.4 第四步:數據復制 114
6.4.5 第五步:進一步清洗 114
6.5 所有嘗試都失敗之后——第四種技術 115
6.6 小結 117
第7章 RDBMS清洗技術 118
7.1 準備 118
7.2 及時步:下載并檢查Sentiment140 119
7.3 第二步:清洗要導入的數據 119
7.4 第三步:把數據導入MySQL 120
7.4.1 發現并清洗異常數據 121
7.4.2 創建自己的數據表 122
7.5 第四步:清洗&字符 123
7.6 第五步:清洗其他未知字符 124
7.7 第六步:清洗日期 125
7.8 第七步:分離用戶提及、標簽和URL 127
7.8.1 創建一些新的數據表 128
7.8.2 提取用戶提及 128
7.8.3 提取標簽 130
7.8.4 提取URL 131
7.9 第八步:清洗查詢表 132
7.10 第九步:記錄操作步驟 134
7.11 小結 135
第8章 數據分享的實踐 136
8.1 準備干凈的數據包 136
8.2 為數據編寫文檔 139
8.2.1 README文件 139
8.2.2 文件頭 141
8.2.3 數據模型和圖表 142
8.2.4 維基或CMS 144
8.3 為數據設置使用條款與許可協議 144
8.4 數據 146
8.4.1 數據集清單列表 146
8.4.2 Stack Exchange上的Open Data 147
8.4.3 編程馬拉松 147
8.5 小結 148
第9章 Stack Overflow項目 149
9.1 及時步:關于Stack Overflow的問題 149
9.2 第二步:收集并存儲Stack Overflow數據 151
9.2.1 下載Stack Overflow數據 151
9.2.2 文件解壓 152
9.2.3 創建MySQL數據表并加載數據 152
9.2.4 構建測試表 154
9.3 第三步:數據清洗 156
9.3.1 創建新的數據表 157
9.3.2 提取URL并填寫新數據表 158
9.3.3 提取代碼并填寫新表 159
9.4 第四步:數據分析 161
9.4.1 哪些代碼分享網站最為流行 161
9.4.2 問題和答案中的代碼分享網站都有哪些 162
9.4.3 提交內容會同時包含代碼分享URL和程序源代碼嗎 165
9.5 第五步:數據可視化 166
9.6 第六步:問題解析 169
9.7 從測試表轉向完整數據表 169
9.8 小結 170
第10章 Twitter項目 171
10.1 及時步:關于推文歸檔數據的問題 171
10.2 第二步:收集數據 172
10.2.1 下載并提取弗格森事件的
數據文件 173
10.2.2 創建一個測試用的文件 174
10.2.3 處理推文ID 174
10.3 第三步:數據清洗 179
10.3.1 創建數據表 179
10.3.2 用Python為新表填充數據 180
10.4 第四步:簡單的數據分析 182
10.5 第五步:數據可視化 183
10.6 第六步:問題解析 186
10.7 把處理過程應用到全數據量(非測試用)數據表 186
10.8 小結 187