數據清洗


個人已將圖書和個人筆記上傳至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 045100451amFridayJanuary 212000

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數據,如Neo4jMySQL使用LOAD DATA IN FILE的命令可把數據從分隔文件加載到數據庫中。

ii使用電子表格生成SQL:在電子表格用用內部構造INSERT語句,然后在數據庫中運行生成的命令。使用concatenate()函數將我們在電子表格每行多列共同構造的INSERT命令連接起來,就可實現在MySQL中的大量語句運行。

2.  文本編輯器里的數據清洗

改變大小寫是數據清洗工作中很常見的任務。諸如此類,我們需要使用相應的查找與替換功能進行處理。如替換為換行(回車)\r

正則表達式是一種以特殊語言編寫的匹配模式,但是用處不大。

文本排序和去重處理。

第四章  講通用語言——數據轉換

1.  基於工具的快速轉換

(1)  從電子表格到CSV(注:CSV文件只能描述Excel的一組數據)

(2)  從電子表格到JSON(使用一些在線工具)

(3)  使用phpMyAdminSQL語句中生成CSVJSON

2.  使用PHP實現數據轉換

(1)  使用PHP實現SQLJSON的數據轉換:使用PHP腳本連接enron數據庫,雲習性SQL查詢語句把查詢結果輸出為JSON格式文件。

               

(2)  使用PHP實現SQLCSV的數據轉換

<?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實現從JSONCSV的數據轉換,從CSVJSON的數據轉換:讀取文件,指定輸出。

3.  使用Python實現數據轉換

(1)  使用Python實現CSVJSON的數據轉換

 

(2)  使用csvkit實現CSVJSON的數據轉換

csvjson enronEmail.csv > enronEmail.json

  csvcut bigDile.csv -c 1,3 > firstThidCols.csv

(3)  使用Python實現JSONCSV的數據轉換

 

 

第五章  收集並清洗來自網絡的數據

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.准備干凈的數據包:

壓縮的純文本數據,如CSVJSON

壓縮的SQL文件(因版本、配置等不同需要說明)

在線數據庫訪問(需提供用戶名和密碼以追蹤用戶)

API

使用GitHub發布數據

GitHub是一個基於雲的文件倉庫,但在存儲非代碼類型數據時還是有一些局限性,對文件大小有着嚴格的限制

2.為數據編寫文檔

1README文檔

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 045100451amFridayJanuary 212000

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數據,如Neo4jMySQL使用LOAD DATA IN FILE的命令可把數據從分隔文件加載到數據庫中。

ii使用電子表格生成SQL:在電子表格用用內部構造INSERT語句,然后在數據庫中運行生成的命令。使用concatenate()函數將我們在電子表格每行多列共同構造的INSERT命令連接起來,就可實現在MySQL中的大量語句運行。

2.  文本編輯器里的數據清洗

改變大小寫是數據清洗工作中很常見的任務。諸如此類,我們需要使用相應的查找與替換功能進行處理。如替換為換行(回車)\r

正則表達式是一種以特殊語言編寫的匹配模式,但是用處不大。

文本排序和去重處理。

第四章  講通用語言——數據轉換

1.  基於工具的快速轉換

(1)  從電子表格到CSV(注:CSV文件只能描述Excel的一組數據)

(2)  從電子表格到JSON(使用一些在線工具)

(3)  使用phpMyAdminSQL語句中生成CSVJSON

2.  使用PHP實現數據轉換

(1)  使用PHP實現SQLJSON的數據轉換:使用PHP腳本連接enron數據庫,雲習性SQL查詢語句把查詢結果輸出為JSON格式文件。

 

(2)  使用PHP實現SQLCSV的數據轉換

<?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實現從JSONCSV的數據轉換,從CSVJSON的數據轉換:讀取文件,指定輸出。

3.  使用Python實現數據轉換

(1)  使用Python實現CSVJSON的數據轉換

 

(2)  使用csvkit實現CSVJSON的數據轉換

csvjson enronEmail.csv > enronEmail.json

  csvcut bigDile.csv -c 1,3 > firstThidCols.csv

(3)  使用Python實現JSONCSV的數據轉換

 

 

第五章  收集並清洗來自網絡的數據

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.准備干凈的數據包:

壓縮的純文本數據,如CSVJSON

壓縮的SQL文件(因版本、配置等不同需要說明)

在線數據庫訪問(需提供用戶名和密碼以追蹤用戶)

API

使用GitHub發布數據

GitHub是一個基於雲的文件倉庫,但在存儲非代碼類型數據時還是有一些局限性,對文件大小有着嚴格的限制

2.為數據編寫文檔

1README文檔

2)文件頭

3)數據模型和圖表

4)維基或CMS

3.為數據設置使用條款與許可協議

4.數據發布

 

第九章第十章 兩個項目——

Stack Overflow項目、Twiter項目

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM