來自數(shù)據(jù)工匠 http:///article/detail/67.html 引言數(shù)據(jù)處理是建立預(yù)測模型時(shí)不可避免的一步。一個(gè)穩(wěn)健的預(yù)測模型不是僅僅依靠機(jī)器學(xué)習(xí)算法就可以建立的,相反,它還需要依靠一定的方法,這些方法幫助人們理解商業(yè)問題,了解潛在數(shù)據(jù)集,進(jìn)行必要的數(shù)據(jù)處理工作并提取出有用的商業(yè)信息。 在這些建模階段里,大多數(shù)時(shí)間通常都被花在了解潛在數(shù)據(jù)集和進(jìn)行必要數(shù)據(jù)處理上。這也是這篇文章的焦點(diǎn)——談一談R中可提高數(shù)據(jù)處理效率的包。
什么是數(shù)據(jù)處理?如果你不清楚這個(gè)術(shù)語的含義,讓我來給你解釋一下它。數(shù)據(jù)處理是和數(shù)據(jù)探索一起使用的一個(gè)沒有嚴(yán)格定義的術(shù)語。它包括用可獲得的變量集“操縱”數(shù)據(jù),以提高數(shù)據(jù)的準(zhǔn)確性和精度。 事實(shí)上,數(shù)據(jù)收集的過程會(huì)有很多的漏洞。有各種各樣不可控的因素會(huì)導(dǎo)致數(shù)據(jù)不精確,比如被調(diào)查者的精神狀況,個(gè)人偏見,數(shù)據(jù)的讀數(shù)差異或錯(cuò)誤等。為了降低不精確程度,我們運(yùn)用數(shù)據(jù)處理來(最大)可能性的增加數(shù)據(jù)精度。 這一階段有時(shí)也被稱為數(shù)據(jù)整理或數(shù)據(jù)清洗。
處理數(shù)據(jù)的不同方式數(shù)據(jù)處理方式?jīng)]有對(duì)錯(cuò)之分,只要你能理解數(shù)據(jù)并采取正確的方法處理數(shù)據(jù)。但通常人們在嘗試進(jìn)行數(shù)據(jù)處理時(shí)一般會(huì)用到以下幾個(gè)寬泛的方法:
因此,通常情況下,事實(shí)上都是使用包來進(jìn)行數(shù)據(jù)處理。在這篇文章中,我將介紹幾個(gè)使得R的數(shù)據(jù)處理更方便的包。 這篇文章最適宜于R語言的初學(xué)者。你可以這樣安裝一個(gè)包: 軟件包的清單為了理解更清楚,我會(huì)通過一些常見的指令來示范如何使用它們。下面是這篇文章要討論的幾個(gè)R包:
注:我知道ggplot2是一個(gè)用來畫圖的包,但是,它通常會(huì)幫助人們進(jìn)行數(shù)據(jù)可視化并相應(yīng)地進(jìn)行處理數(shù)據(jù)工作。因此我把它加進(jìn)了這個(gè)單子里。對(duì)所有包,我只寫了有關(guān)數(shù)據(jù)處理的常用命令。
dplyr包這個(gè)包是Hadley Wickham創(chuàng)建和維護(hù)的。它包括了(幾乎)全部可以用來加快數(shù)據(jù)處理進(jìn)程的內(nèi)容。它最有名的是數(shù)據(jù)探索和數(shù)據(jù)轉(zhuǎn)換功能。它的鏈?zhǔn)秸Z法讓它使用起來很方便。它包括5個(gè)主要的數(shù)據(jù)處理指令:
只需要關(guān)注這些指令便可以完成很好的數(shù)據(jù)探索工作。讓我們一起逐一了解一下這些指令。我用到了兩個(gè)R中內(nèi)置的數(shù)據(jù)集mtcars和iris.
data.table包這個(gè)包讓你可以更快地完成數(shù)據(jù)集的數(shù)據(jù)處理工作。放棄選取行或列子集的傳統(tǒng)方法,用這個(gè)包進(jìn)行數(shù)據(jù)處理。用最少的代碼,你可以做最多的事。相比使用data.frame,data.table可以幫助你減少運(yùn)算時(shí)間。你一定會(huì)對(duì)這個(gè)包的簡潔性感到震驚。 一個(gè)數(shù)據(jù)表格包含三部分,即DT[i, j, by]。你可以理解為我們告訴R用i來選出行的子集,并計(jì)算通過by來分組的j。大多數(shù)時(shí)候,by是用于類別變量的。在下面的代碼中,我用了兩個(gè)數(shù)據(jù)集(airquality和iris)。
ggplot2包ggplot包展示了一個(gè)全新的色彩與圖案世界。如果你是一個(gè)富有創(chuàng)意的人,你會(huì)非常喜歡這個(gè)包。但是如果你是想了解如何開始使用這個(gè)包,請依據(jù)下面的代碼。你至少需要學(xué)會(huì)畫這三個(gè)圖的方法:散點(diǎn)圖,條形圖和直方圖。 這三個(gè)圖表涵蓋了除了地圖外幾乎所有的數(shù)據(jù)展示類別。ggplot有豐富的自定義特征使你的數(shù)據(jù)可視化變得更好。當(dāng)和其他諸如cowplot,gridExtra包一起使用時(shí),它會(huì)變得更強(qiáng)大。事實(shí)上,它有很多特色指令。因此,你必須專注于幾個(gè)指令并且做到精通。在下面的代碼中我也展示了在同一個(gè)窗口中比較不同圖表的方法。它需要gridExtra包來配合,所以你要先安裝這個(gè)包。我用了R內(nèi)置的數(shù)據(jù)集。 reshape2包正如這個(gè)包的名字所表示的含義,這個(gè)包對(duì)于重塑數(shù)據(jù)格式很有用。我們都知道數(shù)據(jù)會(huì)有很多不同的表現(xiàn)格式。因此,我們需要根據(jù)需要“馴服”它們以為己用。通常,在R中重塑數(shù)據(jù)格式非常無聊和麻煩。R基礎(chǔ)函數(shù)中有一個(gè)Aggregation函數(shù),用來縮減并重新排列數(shù)據(jù)為更短小的格式,但是會(huì)大大減少數(shù)據(jù)包含的信息量。Aggregation包括tapply,by和aggregate基礎(chǔ)函數(shù)。reshape包會(huì)克服這些問題。在這里我們試著把有一樣值的特征合并在一起。它有兩個(gè)函數(shù),即melt和cast。 melt: 這個(gè)函數(shù)把數(shù)據(jù)從寬格式轉(zhuǎn)化為長格式。這是一種把多個(gè)類別列“融合”為一行的結(jié)構(gòu)重組。我們來通過代碼理解它是怎么運(yùn)行的。
Cast: 這個(gè)函數(shù)把數(shù)據(jù)從長格式轉(zhuǎn)換為寬格式。它始于融合后的數(shù)據(jù),然后把數(shù)據(jù)重新構(gòu)造為長格式。它就是melt函數(shù)的反向操作。它包括兩個(gè)函數(shù),即,dcast和acast。dcast返回?cái)?shù)據(jù)框作為輸出結(jié)果。acast返回向量/矩陣/數(shù)組作為輸出結(jié)果。讓我們通過下面的代碼來看看怎么用它們。 readr包正如這個(gè)包的名字所暗示的,readr用來把不同格式的數(shù)據(jù)讀入R中,通過比傳統(tǒng)方法快十倍的速度。在此,字符型變量不會(huì)被轉(zhuǎn)化為因子型變量(所以不再有stringAsFactors = FALSE命令)。這個(gè)包可以代替?zhèn)鹘y(tǒng)的R基礎(chǔ)函數(shù)read.csv()和read.table()。它可以用來讀入以下格式的數(shù)據(jù):
如果數(shù)據(jù)載入時(shí)間超過5秒,函數(shù)還會(huì)顯示進(jìn)度條。你可以通過命令它為FALSE來禁止進(jìn)度條出現(xiàn)。我們來一起看一下下面的代碼。 你也可以利用以下的代碼定義數(shù)據(jù)集中每列變量的格式: 然而,如果我們忽視不重要的變量,那么該函數(shù)會(huì)自動(dòng)定義這些變量的格式。所以上述代碼也可以寫成以下形式: 備注:readr包中含有很多有用的函數(shù)。所以你可以考慮利用write_csv函數(shù)來導(dǎo)出數(shù)據(jù),這個(gè)函數(shù)的運(yùn)算效率高于write.csv函數(shù)。
tidyr包這個(gè)包可以讓你的數(shù)據(jù)看上去“整潔”。它主要用四個(gè)函數(shù)來完成這個(gè)任務(wù)。毋庸贅言,當(dāng)你發(fā)現(xiàn)自己在數(shù)據(jù)探索階段卡殼的時(shí)候,你可以(和dplyr包一起)隨時(shí)使用這些函數(shù)。這兩個(gè)包形成了一個(gè)實(shí)力強(qiáng)大的組合。它們很好學(xué),代碼容易些,應(yīng)用便捷。這四個(gè)函數(shù)是:
我們一起來通過下面的代碼更仔細(xì)地了解如何使用他們: 函數(shù)separate最適用于有時(shí)間變量的數(shù)據(jù)集。由于列中包含了很多信息,因此把它們拆分開來并分別使用它們很有必要。使用以下的代碼,我把一個(gè)列拆分成了日期,月份和年。
lubridate包Lubridate包可以減少在R中操作時(shí)間變量的痛苦。此包的內(nèi)置函數(shù)提供了很好的解析日期與時(shí)間的便利方法。這個(gè)包常用于包含時(shí)間數(shù)據(jù)的數(shù)據(jù)集。在此我展示了Lubridate包中的三個(gè)函數(shù)。 這三個(gè)函數(shù)是update,duration和date extraction。作為一個(gè)初學(xué)者,了解這三個(gè)函數(shù)足以讓你成為處理時(shí)間變量的專家。盡管R有內(nèi)置函數(shù)來處理日期,這個(gè)包的處理方法會(huì)更快。讓我們一起來通過以下代碼了解這些函數(shù)是如何運(yùn)用的:
注:這些包最佳的使用方法不是分開單獨(dú)使用,而是把它們用在一起。你可以很容易地同dplyr一起使用這個(gè)包,在dplyr中你可以比較方便地選擇一個(gè)數(shù)據(jù)變量并通過鏈?zhǔn)矫钐崛〕鲇杏玫臄?shù)據(jù)。
結(jié)語:這些包不僅能幫助你提升數(shù)據(jù)處理水平,還能助你更深入地探索R?,F(xiàn)在我們已經(jīng)看到了,這些包讓在R中寫代碼變得更容易。你不再需要寫長串的代碼,相反,代碼變得更短,可以處理的任務(wù)變得更多。 每個(gè)包都有多線處理任務(wù)的功能。因此,我建議你們掌握那些常用的重要函數(shù)。同時(shí),當(dāng)你熟悉了如何使用它們時(shí),你就能進(jìn)行更深入地挖掘和探索。我開始也犯了這個(gè)錯(cuò)誤,我試著研究ggplot2中所有的特征函數(shù),結(jié)果最后一頭霧水。我建議你們在閱讀文章的同時(shí)能試著練習(xí)寫這些代碼。這會(huì)有助于你更自信地使用這些包。 在這篇文章中,我介紹了可以讓數(shù)據(jù)探索變得更方便快捷的7個(gè)包的使用方法。R因其令人贊嘆的統(tǒng)計(jì)功能而聞名于世,同時(shí),時(shí)時(shí)更新的包也讓它成為數(shù)據(jù)科學(xué)家最愛使用的工具。
原文鏈接:
原文作者:Manish Saraswat 翻譯:Fibears |
|