【R】有助于提高數據處理效率的7個包

bwnx 8年前發布 | 55K 次閱讀 R語言
 

引言

數據處理是建立預測模型時不可避免的一步。一個穩健的預測模型不是僅僅依靠機器學習算法就可以建立的,相反,它還需要依靠一定的方法,這些方法幫助人們理解商業問題,了解潛在數據集,進行必要的數據處理工作并提取出有用的商業信息。

在這些建模階段里,大多數時間通常都被花在了解潛在數據集和進行必要數據處理上。這也是這篇文章的焦點——談一談R中可提高數據處理效率的包。

什么是數據處理?

如果你不清楚這個術語的含義,讓我來給你解釋一下它。數據處理是和數據探索一起使用的一個沒有嚴格定義的術語。它包括用可獲得的變量集“操縱”數據,以提高數據的準確性和精度。

事實上,數據收集的過程會有很多的漏洞。有各種各樣不可控的因素會導致數據不精確,比如被調查者的精神狀況,個人偏見,數據的讀數差異或錯誤等。為了降低不精確程度,我們運用數據處理來(最大)可能性的增加數據精度。

這一階段有時也被稱為數據整理或數據清洗。

處理數據的不同方式

數據處理方式沒有對錯之分,只要你能理解數據并采取正確的方法處理數據。但通常人們在嘗試進行數據處理時一般會用到以下幾個寬泛的方法:

  • 通常來說,R的初學者覺得用R內置的基礎函數處理數據就很舒服。這個作為第一步很好,但是通常重復度高且耗時,因此是一個相對低效的解決問題方法。
  • 使用專門的數據處理包。如今CRAN有超過7000個可供使用的包,這些包不過是一些事先寫好的常用代碼集合。他們可以幫你更快地完成重復性 工作,減少編程差錯并從專業人士寫的代碼中得到幫助(通過R的開源系統),使你的代碼運行起來更加高效。這通常是數據處理中最常用的方法。
  • 使用機器學習算法進行數據處理工作。你可以使用基于樹的改進算法來處理缺失值和異常值。盡管這個方法無疑更省時,但通常它們會讓你覺得對數據的理解不夠,并想要找到更好的方法來認識數據。

因此,通常情況下,事實上都是使用包來進行數據處理。在這篇文章中,我將介紹幾個使得R的數據處理更方便的包。

這篇文章最適宜于R語言的初學者。你可以這樣安裝一個包:

【R】有助于提高數據處理效率的7個包

軟件包的清單

為了理解更清楚,我會通過一些常見的指令來示范如何使用它們。下面是這篇文章要討論的幾個R包:

  1. dplyr
  2. data.table
  3. ggplot2
  4. reshape2
  5. readr
  6. tidyr
  7. lubridate

注:我知道ggplot2是一個用來畫圖的包,但是,它通常會幫助人們進行數據可視化并相應地進行處理數據工作。因此我把它加進了這個單子里。對所有包,我只寫了有關數據處理的常用命令。

dplyr包

這個包是Hadley Wickham創建和維護的。它包括了(幾乎)全部可以用來加快數據處理進程的內容。它最有名的是數據探索和數據轉換功能。它的鏈式語法讓它使用起來很方便。它包括5個主要的數據處理指令:

  1. 過濾——集于某一條件過濾數據
  2. 選擇——選出數據集中感興趣的列
  3. 排列——升序或降序排列數據集中的某一個值域
  4. 變換——從已有變量生成新的變量
  5. 概括(通過group_by)——提供常用的操作分析,如最小值、最大值、均值等

只需要關注這些指令便可以完成很好的數據探索工作。讓我們一起逐一了解一下這些指令。我用到了兩個R中內置的數據集mtcars和iris.

【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包

【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包

data.table包

這個包讓你可以更快地完成數據集的數據處理工作。放棄選取行或列子集的傳統方法,用這個包進行數據處理。用最少的代碼,你可以做最多的事。相比使用data.frame,data.table可以幫助你減少運算時間。你一定會對這個包的簡潔性感到震驚。

一個數據表格包含三部分,即DT[i, j, by]。你可以理解為我們告訴R用i來選出行的子集,并計算通過by來分組的j。大多數時候,by是用于類別變量的。在下面的代碼中,我用了兩個數據集(airquality和iris)。

【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包

ggplot2包

ggplot包展示了一個全新的色彩與圖案世界。如果你是一個富有創意的人,你會非常喜歡這個包。但是如果你是想了解如何開始使用這個包,請依據下面的代碼。你至少需要學會畫這三個圖的方法:散點圖,條形圖和直方圖。

這三個圖表涵蓋了除了地圖外幾乎所有的數據展示類別。ggplot有豐富的自定義特征使你的數據可視化變得更好。當和其他諸如 cowplot,gridExtra包一起使用時,它會變得更強大。事實上,它有很多特色指令。因此,你必須專注于幾個指令并且做到精通。在下面的代碼中 我也展示了在同一個窗口中比較不同圖表的方法。它需要gridExtra包來配合,所以你要先安裝這個包。我用了R內置的數據集。

【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包

【R】有助于提高數據處理效率的7個包

reshape2包

正如這個包的名字所表示的含義,這個包對于重塑數據格式很有用。我們都知道數據會有很多不同的表現格式。因此,我們需要根據需要“馴服”它們以為 己用。通常,在R中重塑數據格式非常無聊和麻煩。R基礎函數中有一個Aggregation函數,用來縮減并重新排列數據為更短小的格式,但是會大大減少 數據包含的信息量。Aggregation包括tapply,by和aggregate基礎函數。reshape包會克服這些問題。在這里我們試著把有一 樣值的特征合并在一起。它有兩個函數,即melt和cast。

melt: 這個函數把數據從寬格式轉化為長格式。這是一種把多個類別列“融合”為一行的結構重組。我們來通過代碼理解它是怎么運行的。

【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包

Cast: 這個函數把數據從長格式轉換為寬格式。它始于融合后的數據,然后把數據重新構造為長格式。它就是melt函數的反向操作。它包括兩個函數,即,dcast 和acast。dcast返回數據框作為輸出結果。acast返回向量/矩陣/數組作為輸出結果。讓我們通過下面的代碼來看看怎么用它們。

【R】有助于提高數據處理效率的7個包

readr包

正如這個包的名字所暗示的,readr用來把不同格式的數據讀入R中,通過比傳統方法快十倍的速度。在此,字符型變量不會被轉化為因子型變量(所 以不再有stringAsFactors = FALSE命令)。這個包可以代替傳統的R基礎函數read.csv()和read.table()。它可以用來讀入以下格式的數據:

  • 分隔符文件:read_delim(),read_csv(),read_tsv()和read_csv2()
  • 固定寬度文件:read_fwf()和read_table()
  • 網絡日志文件:read_log()

如果數據載入時間超過5秒,函數還會顯示進度條。你可以通過命令它為FALSE來禁止進度條出現。我們來一起看一下下面的代碼。

【R】有助于提高數據處理效率的7個包

你也可以利用以下的代碼定義數據集中每列變量的格式:

【R】有助于提高數據處理效率的7個包

然而,如果我們忽視不重要的變量,那么該函數會自動定義這些變量的格式。所以上述代碼也可以寫成以下形式:

【R】有助于提高數據處理效率的7個包

備注:readr包中含有很多有用的函數。所以你可以考慮利用write_csv函數來導出數據,這個函數的運算效率高于write.csv函數。

tidyr包

這個包可以讓你的數據看上去“整潔”。它主要用四個函數來完成這個任務。毋庸贅言,當你發現自己在數據探索階段卡殼的時候,你可以(和dplyr包一起)隨時使用這些函數。這兩個包形成了一個實力強大的組合。它們很好學,代碼容易些,應用便捷。這四個函數是:

  • gather()——它把多列放在一起,然后轉化為key:value對。這個函數會把寬格式的數據轉化為長格式。它是reshape包中melt函數的一個替代。
  • spread()——它的功能和gather相反,把key:value對轉化成不同的列。
  • separate()——它會把一列拆分為多列
  • unite()——它的功能和separate相反,把多列合并為一列

我們一起來通過下面的代碼更仔細地了解如何使用他們:

【R】有助于提高數據處理效率的7個包

【R】有助于提高數據處理效率的7個包

函數separate最適用于有時間變量的數據集。由于列中包含了很多信息,因此把它們拆分開來并分別使用它們很有必要。使用以下的代碼,我把一個列拆分成了日期,月份和年。

【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包

lubridate包

Lubridate包可以減少在R中操作時間變量的痛苦。此包的內置函數提供了很好的解析日期與時間的便利方法。這個包常用于包含時間數據的數據集。在此我展示了Lubridate包中的三個函數。

這三個函數是update,duration和date extraction。作為一個初學者,了解這三個函數足以讓你成為處理時間變量的專家。盡管R有內置函數來處理日期,這個包的處理方法會更快。讓我們一起來通過以下代碼了解這些函數是如何運用的:

【R】有助于提高數據處理效率的7個包 【R】有助于提高數據處理效率的7個包

注:這些包最佳的使用方法不是分開單獨使用,而是把它們用在一起。你可以很容易地同dplyr一起使用這個包,在dplyr中你可以比較方便地選擇一個數據變量并通過鏈式命令提取出有用的數據。

結語:

這些包不僅能幫助你提升數據處理水平,還能助你更深入地探索R。現在我們已經看到了,這些包讓在R中寫代碼變得更容易。你不再需要寫長串的代碼,相反,代碼變得更短,可以處理的任務變得更多。

每個包都有多線處理任務的功能。因此,我建議你們掌握那些常用的重要函數。同時,當你熟悉了如何使用它們時,你就能進行更深入地挖掘和探索。我開 始也犯了這個錯誤,我試著研究ggplot2中所有的特征函數,結果最后一頭霧水。我建議你們在閱讀文章的同時能試著練習寫這些代碼。這會有助于你更自信 地使用這些包。

在這篇文章中,我介紹了可以讓數據探索變得更方便快捷的7個包的使用方法。R因其令人贊嘆的統計功能而聞名于世,同時,時時更新的包也讓它成為數據科學家最愛使用的工具。

原文鏈接:

http://www.analyticsvidhya.com/blog/2015/12/faster-data-manipulation-7-packages/

原文作者:Manish Saraswat

翻譯:Fibears

 本文由用戶 bwnx 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!