天天看點

Apache Spark機器學習.2.2 資料清洗

<b>2.2 資料清洗</b>

<b></b>

在本節中,我們将回顧一些spark平台上的資料清洗方法,重點關注資料不完備性。然後,我們将讨論一些spark資料清洗方面的特殊特征,以及一些基于spark平台更加容易的資料清洗解決方案。

學習完本節,我們将能夠完成資料清洗,并為機器學習準備好資料集。

2.2.1 處理資料不完備性

對于機器學習,資料越多越好。然而,通常資料越多,“髒資料”也會越多——這意味着會有更多的資料清洗工作。

資料品質控制可能會有許多問題需要處理,有些問題可能很簡單,如資料輸入錯誤或者資料複制。原則上,解決他們的方法是類似的——例如,利用資料邏輯來實作探索和擷取項目的本質知識,利用分析邏輯來糾正他們。為此,在本節中,我們将重點關注缺失值處理,以便說明在這個主題上spark的使用方法。資料清洗涵蓋了資料的準确性、完整性、獨特性、時效性和一緻性。

雖然聽起來可能很簡單,但是處理缺失值和不完備性并不是一件容易的事情。它涉及許多問題,往往需要以下步驟:

1.計算資料缺失百分比。

這取決于研究項目,有些項目中的比例如果低于5%或10%,我們可能不需要在資料缺失問題上花費時間。

2.學習資料缺失的模式。

資料缺失有兩種模式:完全随機或不随機。如果資料缺失是完全随機的,我們可以忽略這個問題。

3.确定解決資料缺失模式的方法。

處理資料缺失有幾種常用的方法。均值填充,缺失資料删除,資料替換是最為主要的方法。

4.為資料缺失模式執行資料填補。

為了處理資料缺失和不完整性,資料科學家和機器學習從業者通常會利用他們熟悉的sql工具或r語言程式設計。幸運的是,在spark環境中,有spark sql和r notebook可以讓使用者繼續使用他們熟悉的方法,為此,我們将在下面兩節中進行詳細闡述。

資料清洗也包含其他的問題,諸如處理資料輸入錯誤和異常值。

2.2.2 在spark中進行資料清洗

在上一節中,我們讨論了處理資料不完備性。

安裝spark後,我們可以很容易地在databricks workspace中使用spark sql和r notebook處理上一節中所描述的資料清洗工作。

特别需要指出的是,sqlcontext中的sql函數使得應用程式能夠完成sql查詢程式設計,并傳回一個dataframe類型的結果。

例如,借助r notebook,我們可以用下面的語句來執行sql指令,并把結果放到一個data.frame:

資料清洗是一個非常繁瑣和耗時的工作,在本節,我們想請你關注sampleclean,對于機器學習從業者,它可以使資料清洗更為簡單,特别是分布式資料清洗。

sampleclean是建立在amplab伯克利資料分析棧(bdas)上的一個可擴充的資料清洗庫。該庫使用apache spark sql 1.2.0及以上版本和apache hive來支援分布式資料清洗操作和相關的髒資料查詢處理。 sampleclean可以執行一組可互換和可組合的、實體和邏輯的資料清洗操作,這使得我們可以快速地建構和調整資料清洗pipelines。

我們先在spark和sampleclean中輸入以下指令開啟工作:

使用sampleclean,我們需要建立一個名為samplecleancontext的對象,然後使用該上下文來管理工作會話中所有的資訊,并提供api基元與資料進行互動。 samplecleancontext由sparkcontext對象構造而成,具體如下:

2.2.3 更簡便的資料清洗

使用sampleclean和spark,我們可以把資料清洗工作變得容易,可以編寫更少的代碼,并利用更少的資料。

總體而言,sampleclean采用了一個很好的政策。它采用異步方式以規避延遲,并使用采樣來規避資料體量巨大的問題。此外,sampleclean在一個系統中結合了所有三個方面因素(算法、機器和人),是以變得更加高效。

更多使用sampleclean的資訊,請通路:http://sampleclean.org/guide/ 和http://sampleclean.org/release.html。

為了更好地說明,讓我們假設一個有四個資料表的機器學習項目:

要清洗這個資料集,我們需要:

無論是使用sql還是r語言指令,都要計算每個變量有多少個缺失值。

如果我們選擇的政策是均值填充,那麼用平均值填補缺失值。

盡管上述工作很容易實作,但是在資料體量巨大的情況下,這樣做有可能非常耗時。是以,為了提高效率,我們可能需要将資料分割成許多子集,同時并行完成前面的步驟,spark是完成此項工作的最佳計算平台。

在databricks r notebook環境中,我們可以先用r語言指令sum(is.na(x))建立notebook來計算資料缺失的情況。

為了用平均值替代缺失值,我們可以使用下面的代碼:

在spark中,我們可以輕松地對所有的資料叢集使用r notebook。

繼續閱讀