個人已將圖書和個人筆記上傳至CSDN資源
地址:https://download.csdn.net/download/qq_37865996/10518179
《干凈的數據——數據清洗入門與實踐》
第一章 為什么要清洗數據
數據科學過程:識別問題->數據收集與存儲->數據清洗->數據分析和機器學習->數據展現和可視化實現->問題決議。
第二章 基礎知識——格式、類型與編碼
1. 文件格式
(1) 文本文件和二進制文件
① 文件的打開和讀寫
a) 以.xlsx為擴展名的Excel文件,以.docx為擴展名的Word文件、以.pptx為擴展名的Powerpoint文件;
b) 以.png、.jpg和.gif為擴展名的圖形文件;
c) 以.mp3、.ogg 、.wmv和.mp4為擴展名的音樂和視頻文件;
d) 以.txt為擴展名的文本文件。
②深入文件內部
(2) 常見的文本文件格式
目前關注三種:分隔格式(結構化數據)、JSON格式(半結構化數據)、HTML格式(非結構化數據)。
分隔格式:
JSON格式:
2. 歸檔與壓縮
(1) 歸檔
操作語句:tar cvf fileArchive.tar reallyBigFile.csv anotherBigFile.csb
逆操作:tar xvf fileArchive.tar
查閱.tar文件的基本信息:tar -tf fileArchive.tar
(2) 壓縮
普遍使用.zip格式文件
3. 數據類型、空值與編碼
(1) 數據類型
① 數字類型數據
a. 整數(正數、負數,整數范圍?)
b. 小數(小數部分的長度、精度)
c. 數字/非數字(能否參與數學計算)
② 日期和時間
③ 字符串
④ 其他數據類型(如:集合/枚舉、布爾、Blob)
(2)數據類型間的相互轉換
數據損耗問題:同種類型間的不同范圍轉換;不同精度間的轉換。
(3)轉換策略
① 基於SQL的操作
例一:調整時間格式 2000-01-21 04:51:00為4:51am,Friday,January 21,2000
a. 把concat()和日期時間函數結合起來使用
b. 使用data_format()函數
例二:從字符串類型轉換到MySQL的日期類型
使用內置函數str_to_date()
例三:字符串類型的數據轉換為小數
使用convert()函數
② 文件級別的類型轉換
(1)Excel
a. 在Excel中有格式化菜單來進行數據類型轉換。選擇想要修改的單元格,使用ribbon上的下拉菜單進行操作。
b. 使用Format Cells對話框,可通過格式化菜單打開。
c. Istext()函數可對單元格中數據是否為文本類型數據進行判斷;isnumber()函數會對數據是否為數字給出類似的結果。
(2) JSON
使用PHP生成JSON文件,調用json_encode()可進行數據類型的調整;
也可以在使用D3時通過JS代碼迫使目標數據進行數據類型轉換。
(4)隱藏在數據森林中的空值
分清零、空、NULL的含義
①零是可測量、有意義的數字。
②空的含義較多:空白、空值、不可見字符
③null:不等同於任何值
中間名的例子可以使用“空”而不能使用NULL
零取代空在使用虛擬日期或是日期片段時較有用。
(5) 字符編碼
① 從MySQL數據中找出多字節字符:通過比較字節長度(length()函數)和 字符長度(char_length()函數)將多字節格式編碼的數據尋找出來。
語句:length(Name)!=char_length(Name);
② 找出MySQL中以Latin-1編碼存儲的Unicode字符以及其等價的UTF-8編碼形式
③ 處理文件級別的UTF-8編碼
問題引入:Python2.7中的open()函數不能處理UTF-8字符。
方法1:過濾UTF-8字符,會造成難以估量的數據損失。
方法2:以UTF-8字符寫入文件,f=codeca.open(‘outfile.txt’,’a+’,’utf-8’)
第三章 數據清洗的老黃牛——電子表格和文本編輯器
1. 電子表格中的數據清洗
電子表格中,如Excel,導入數據時,是通過尋找逗號或制表符把數據分為不同的列。但是,有些時候找不到制表符,這時候操作步驟為:
i 選中某列,在數據菜單中開啟文本分列向導,第一個步驟中選擇固定的寬度,第二個步驟中雙擊繪制在描述字段上的分割線。
ii 某些列因為長度較為差異大,所以要對這樣的列在執行一次文本分列。使用分割字符功能,使用查找和替換將比如空格這樣的分隔標志替換 。
iii如果格式出現了問題,就在單元格格式中調整格式。
iv如果某列開端有額外的空格字符,可以在旁邊新插入一個列,使用trim()函數。
v使用clean()函數完成文本剪裁。
vi結束剩余操作。
字符串拼接
函數concatenate()可以接受多個字符串參數,連接在一起。
條件格式化查找異常數據;排序查找異常數據。
電子表格中的數據清洗完畢后,需要進行長期的存儲:
i可從電子表格中創建CSV數據,如Neo4j、MySQL使用LOAD DATA IN FILE的命令可把數據從分隔文件加載到數據庫中。
ii使用電子表格生成SQL:在電子表格用用內部構造INSERT語句,然后在數據庫中運行生成的命令。使用concatenate()函數將我們在電子表格每行多列共同構造的INSERT命令連接起來,就可實現在MySQL中的大量語句運行。
2. 文本編輯器里的數據清洗
改變大小寫是數據清洗工作中很常見的任務。諸如此類,我們需要使用相應的查找與替換功能進行處理。如替換為換行(回車)\r
正則表達式是一種以特殊語言編寫的匹配模式,但是用處不大。
文本排序和去重處理。
第四章 講通用語言——數據轉換
1. 基於工具的快速轉換
(1) 從電子表格到CSV(注:CSV文件只能描述Excel的一組數據)
(2) 從電子表格到JSON(使用一些在線工具)
(3) 使用phpMyAdmin從SQL語句中生成CSV或JSON
2. 使用PHP實現數據轉換
(1) 使用PHP實現SQL到JSON的數據轉換:使用PHP腳本連接enron數據庫,雲習性SQL查詢語句把查詢結果輸出為JSON格式文件。
(2) 使用PHP實現SQL到CSV的數據轉換
<?php
//連接數據庫,設置查詢語句並運行
$dbc=mysqli_connect(‘localhost’,’username’,’password’,’enron’)or die(‘Error connecting to database!’.mysqli_error());
$select_query=”SELECT concat(firstName,\”\”,lastName)as name,email_id FROM employeelist ORDER BY latName”;
$select_result =mysqli_query($dbc,$select_query);
If(!$select_result)
die(“SELECT failed![$select_query]”.mysqli_error());
//--CSV格式數據輸出--
//設置文件流
$file=fopen(‘php://output’,’w’);
If($file &&$select_result)
{
header(‘Content-Type:text/csv’);
header(‘Content-Disposition:attachment;
Filename=”enronEmail.csv”’);
//將每行結果數據都以CSV格式寫入文件中
while($row=mysql_fetch_assoc($select_result))
{
fputcsv($file.array_values($row));
}
}
?>
(3) 使用PHP實現從JSON到CSV的數據轉換,從CSV到JSON的數據轉換:讀取文件,指定輸出。
3. 使用Python實現數據轉換
(1) 使用Python實現CSV到JSON的數據轉換
(2) 使用csvkit實現CSV到JSON的數據轉換
csvjson enronEmail.csv > enronEmail.json
csvcut bigDile.csv -c 1,3 > firstThidCols.csv
(3) 使用Python實現JSON到CSV的數據轉換
第五章 收集並清洗來自網絡的數據
1.理解HTML頁面結構
(1) 行分隔模型:關注HTML標簽
(2) 樹形結構模型:定義父標簽和子標簽
2.爬蟲操作:Python和正則表達式、BeautifulSoup、基於Chrome瀏覽器的Scraper工具。
第六章 清洗PDF文件中的數據
1. PDF難以清洗:PDF是二進制格式文件
2. 簡單方案——復制
3. 第二種技術——pdfMiner
4. 第三種技術——Tabula
5. 第四種技術——Acrobat
第七章 RDBMS清洗技術
下載數據->清洗數據->數據導入MySQL(使用往MySQL中導入電子表格數據)
->發現並清洗異常數據(轉義字符、&等其他未知字符)->清洗日期
->分離用戶提及、標簽和URL->創建一些新的數據表->分別提取
第八章 數據分享的最佳實踐
1.准備干凈的數據包:
壓縮的純文本數據,如CSV、JSON等
壓縮的SQL文件(因版本、配置等不同需要說明)
在線數據庫訪問(需提供用戶名和密碼以追蹤用戶)
API
使用GitHub發布數據
GitHub是一個基於雲的文件倉庫,但在存儲非代碼類型數據時還是有一些局限性,對文件大小有着嚴格的限制
2.為數據編寫文檔
(1)README文檔
(2)文件頭
(3)數據模型和圖表
(4)維基或CMS
3.為數據設置使用條款與許可協議
4.數據發布
第九章第十章 兩個項目——
Stack Overflow項目、Twiter項目
《干凈的數據——數據清洗入門與實踐》
第一章 為什么要清洗數據
數據科學過程:識別問題->數據收集與存儲->數據清洗->數據分析和機器學習->數據展現和可視化實現->問題決議。
第二章 基礎知識——格式、類型與編碼
1. 文件格式
(1) 文本文件和二進制文件
① 文件的打開和讀寫
a) 以.xlsx為擴展名的Excel文件,以.docx為擴展名的Word文件、以.pptx為擴展名的Powerpoint文件;
b) 以.png、.jpg和.gif為擴展名的圖形文件;
c) 以.mp3、.ogg 、.wmv和.mp4為擴展名的音樂和視頻文件;
d) 以.txt為擴展名的文本文件。
②深入文件內部
(2) 常見的文本文件格式
目前關注三種:分隔格式(結構化數據)、JSON格式(半結構化數據)、HTML格式(非結構化數據)。
分隔格式:
JSON格式:
2. 歸檔與壓縮
(1) 歸檔
操作語句:tar cvf fileArchive.tar reallyBigFile.csv anotherBigFile.csb
逆操作:tar xvf fileArchive.tar
查閱.tar文件的基本信息:tar -tf fileArchive.tar
(2) 壓縮
普遍使用.zip格式文件
3. 數據類型、空值與編碼
(1) 數據類型
① 數字類型數據
a. 整數(正數、負數,整數范圍?)
b. 小數(小數部分的長度、精度)
c. 數字/非數字(能否參與數學計算)
② 日期和時間
③ 字符串
④ 其他數據類型(如:集合/枚舉、布爾、Blob)
(2)數據類型間的相互轉換
數據損耗問題:同種類型間的不同范圍轉換;不同精度間的轉換。
(3)轉換策略
① 基於SQL的操作
例一:調整時間格式 2000-01-21 04:51:00為4:51am,Friday,January 21,2000
a. 把concat()和日期時間函數結合起來使用
b. 使用data_format()函數
例二:從字符串類型轉換到MySQL的日期類型
使用內置函數str_to_date()
例三:字符串類型的數據轉換為小數
使用convert()函數
② 文件級別的類型轉換
(1)Excel
a. 在Excel中有格式化菜單來進行數據類型轉換。選擇想要修改的單元格,使用ribbon上的下拉菜單進行操作。
b. 使用Format Cells對話框,可通過格式化菜單打開。
c. Istext()函數可對單元格中數據是否為文本類型數據進行判斷;isnumber()函數會對數據是否為數字給出類似的結果。
(2) JSON
使用PHP生成JSON文件,調用json_encode()可進行數據類型的調整;
也可以在使用D3時通過JS代碼迫使目標數據進行數據類型轉換。
(4)隱藏在數據森林中的空值
分清零、空、NULL的含義
①零是可測量、有意義的數字。
②空的含義較多:空白、空值、不可見字符
③null:不等同於任何值
中間名的例子可以使用“空”而不能使用NULL
零取代空在使用虛擬日期或是日期片段時較有用。
(5) 字符編碼
① 從MySQL數據中找出多字節字符:通過比較字節長度(length()函數)和 字符長度(char_length()函數)將多字節格式編碼的數據尋找出來。
語句:length(Name)!=char_length(Name);
② 找出MySQL中以Latin-1編碼存儲的Unicode字符以及其等價的UTF-8編碼形式
③ 處理文件級別的UTF-8編碼
問題引入:Python2.7中的open()函數不能處理UTF-8字符。
方法1:過濾UTF-8字符,會造成難以估量的數據損失。
方法2:以UTF-8字符寫入文件,f=codeca.open(‘outfile.txt’,’a+’,’utf-8’)
第三章 數據清洗的老黃牛——電子表格和文本編輯器
1. 電子表格中的數據清洗
電子表格中,如Excel,導入數據時,是通過尋找逗號或制表符把數據分為不同的列。但是,有些時候找不到制表符,這時候操作步驟為:
i 選中某列,在數據菜單中開啟文本分列向導,第一個步驟中選擇固定的寬度,第二個步驟中雙擊繪制在描述字段上的分割線。
ii 某些列因為長度較為差異大,所以要對這樣的列在執行一次文本分列。使用分割字符功能,使用查找和替換將比如空格這樣的分隔標志替換 。
iii如果格式出現了問題,就在單元格格式中調整格式。
iv如果某列開端有額外的空格字符,可以在旁邊新插入一個列,使用trim()函數。
v使用clean()函數完成文本剪裁。
vi結束剩余操作。
字符串拼接
函數concatenate()可以接受多個字符串參數,連接在一起。
條件格式化查找異常數據;排序查找異常數據。
電子表格中的數據清洗完畢后,需要進行長期的存儲:
i可從電子表格中創建CSV數據,如Neo4j、MySQL使用LOAD DATA IN FILE的命令可把數據從分隔文件加載到數據庫中。
ii使用電子表格生成SQL:在電子表格用用內部構造INSERT語句,然后在數據庫中運行生成的命令。使用concatenate()函數將我們在電子表格每行多列共同構造的INSERT命令連接起來,就可實現在MySQL中的大量語句運行。
2. 文本編輯器里的數據清洗
改變大小寫是數據清洗工作中很常見的任務。諸如此類,我們需要使用相應的查找與替換功能進行處理。如替換為換行(回車)\r
正則表達式是一種以特殊語言編寫的匹配模式,但是用處不大。
文本排序和去重處理。
第四章 講通用語言——數據轉換
1. 基於工具的快速轉換
(1) 從電子表格到CSV(注:CSV文件只能描述Excel的一組數據)
(2) 從電子表格到JSON(使用一些在線工具)
(3) 使用phpMyAdmin從SQL語句中生成CSV或JSON
2. 使用PHP實現數據轉換
(1) 使用PHP實現SQL到JSON的數據轉換:使用PHP腳本連接enron數據庫,雲習性SQL查詢語句把查詢結果輸出為JSON格式文件。
(2) 使用PHP實現SQL到CSV的數據轉換
<?php
//連接數據庫,設置查詢語句並運行
$dbc=mysqli_connect(‘localhost’,’username’,’password’,’enron’)or die(‘Error connecting to database!’.mysqli_error());
$select_query=”SELECT concat(firstName,\”\”,lastName)as name,email_id FROM employeelist ORDER BY latName”;
$select_result =mysqli_query($dbc,$select_query);
If(!$select_result)
die(“SELECT failed![$select_query]”.mysqli_error());
//--CSV格式數據輸出--
//設置文件流
$file=fopen(‘php://output’,’w’);
If($file &&$select_result)
{
header(‘Content-Type:text/csv’);
header(‘Content-Disposition:attachment;
Filename=”enronEmail.csv”’);
//將每行結果數據都以CSV格式寫入文件中
while($row=mysql_fetch_assoc($select_result))
{
fputcsv($file.array_values($row));
}
}
?>
(3) 使用PHP實現從JSON到CSV的數據轉換,從CSV到JSON的數據轉換:讀取文件,指定輸出。
3. 使用Python實現數據轉換
(1) 使用Python實現CSV到JSON的數據轉換
(2) 使用csvkit實現CSV到JSON的數據轉換
csvjson enronEmail.csv > enronEmail.json
csvcut bigDile.csv -c 1,3 > firstThidCols.csv
(3) 使用Python實現JSON到CSV的數據轉換
第五章 收集並清洗來自網絡的數據
1.理解HTML頁面結構
(1) 行分隔模型:關注HTML標簽
(2) 樹形結構模型:定義父標簽和子標簽
2.爬蟲操作:Python和正則表達式、BeautifulSoup、基於Chrome瀏覽器的Scraper工具。
第六章 清洗PDF文件中的數據
1. PDF難以清洗:PDF是二進制格式文件
2. 簡單方案——復制
3. 第二種技術——pdfMiner
4. 第三種技術——Tabula
5. 第四種技術——Acrobat
第七章 RDBMS清洗技術
下載數據->清洗數據->數據導入MySQL(使用往MySQL中導入電子表格數據)
->發現並清洗異常數據(轉義字符、&等其他未知字符)->清洗日期
->分離用戶提及、標簽和URL->創建一些新的數據表->分別提取
第八章 數據分享的最佳實踐
1.准備干凈的數據包:
壓縮的純文本數據,如CSV、JSON等
壓縮的SQL文件(因版本、配置等不同需要說明)
在線數據庫訪問(需提供用戶名和密碼以追蹤用戶)
API
使用GitHub發布數據
GitHub是一個基於雲的文件倉庫,但在存儲非代碼類型數據時還是有一些局限性,對文件大小有着嚴格的限制
2.為數據編寫文檔
(1)README文檔
(2)文件頭
(3)數據模型和圖表
(4)維基或CMS
3.為數據設置使用條款與許可協議
4.數據發布
第九章第十章 兩個項目——
Stack Overflow項目、Twiter項目