R語言中的可擴充套件資料處理
大多數情況下,R程式設計師會遇到大量資料,這會導致問題,因為預設情況下變數儲存在記憶體中。R語言在處理超過計算機RAM 10% 的大量資料時效果不佳。但是,如果我們想在資料科學領域取得優異成績,資料處理應該是可擴充套件的。因此,我們將討論如何在資料足夠大於計算機RAM時,輕鬆地應用某些操作並使用可擴充套件的資料處理。討論還將重點關注處理“記憶體外”物件。
什麼是可擴充套件資料處理?
可擴充套件性在處理大資料時是一個非常重要的方面。眾所周知,將資料讀寫到磁碟比讀寫到RAM需要更多時間。因此,與RAM相比,從硬碟檢索一些資料需要花費大量時間。計算機資源(如RAM、處理器和硬碟驅動器)在決定R程式碼執行速度方面起著重要作用。我們知道我們無法更改這些資源(除非用新硬體替換它們),但我們可以有效地利用這些資源。
例如,假設我們有一個與RAM大小相同的資料集。可以透過僅載入當前實際需要的資料集部分來降低成本。
處理時間與資料大小之間的關係
處理時間取決於資料集的大小。較大的資料集通常需要更長的時間來處理。但需要注意的是,處理時間與資料集的大小並不成正比。
讓我們透過一個例子用簡單的語言來理解。假設我們有兩個資料集,其中一個數據集是另一個數據集的兩倍。因此,處理較大資料集所需的時間不是處理另一個數據集所需時間的兩倍。
處理較大資料集所需的時間顯然會比較小的資料集多,但我們不能明確地說它會是較小資料集的兩倍或三倍等。它完全取決於對資料集元素執行的操作。
R為我們提供了microbenchmark包,可用於比較兩個或多個操作的時間。我們還可以使用R中的plot()函式繪製差異。
示例
例如,考慮以下對不同大小的隨機陣列進行排序的程式:
# Load the microbenchmark package library(microbenchmark) # Time comparison between sorting vectors of # different sizes microbenchmarkObject <- microbenchmark( # Sort a random normal vector length 5e5 "5e5" = sort(rnorm(5e5)), # Sort a random normal vector length 4e5 "4e5" = sort(rnorm(4e5)), # Sort a random normal vector length 3e5 "3e5" = sort(rnorm(3e5)), # Sort a random normal vector length 2e5 "2e5" = sort(rnorm(2e5)), # Sort a random normal vector length 1e6 "1e6" = sort(rnorm(1e6)), times = 15 ) # Plot the resulting benchmark object plot(microbenchmarkObject)
輸出

如您在輸出中看到的,每次執行時間並不總是相同的。出現這種情況的原因是,當系統正在執行R程式碼時,其他事情也在幕後進行。
注意,在評估R程式碼的執行時間時,使用microbenchmark庫跟蹤操作也是一個好的實踐。
使用“記憶體外”物件
在本節中,我們將討論big.matrix物件。big.matrix包含R中的一個物件,它或多或少與C++中的資料結構相同。此物件類似於通用R矩陣,但可以防止開發人員遇到通用R矩陣的記憶體消耗問題。
現在,我們將使用read.big.matrix()函式建立我們自己的big.matrix物件。
該函式也與read.table()非常相似,但它要求我們指定要讀取的值的型別,即“char”、“short”、“integer”、“double”。必須給出儲存矩陣資料的檔名(後備檔案),並且需要檔名來儲存有關矩陣的資訊(描述符檔案)。結果將儲存在磁碟上的檔案中,該檔案儲存讀取的值,以及一個描述符檔案,該檔案儲存有關生成的big.matrix物件的更多描述。
安裝bigmemory庫
在繼續之前,我們需要安裝“bigmemory”庫。您可以使用以下命令在CRAN中下載此庫:
install.packages("bigmemory")
匯入bigmemory
第一步是匯入bigmemory庫。使用以下命令匯入庫:
library(bigmemory)
下載檔案
現在下載一個示例csv檔案“mortgage-sample.csv”:
# Download file using URL
download.file("http://s3.amazonaws.com/assets.datacamp.com/production/course_2399/datasets/mortgage-sample.csv", destfile = "mortgage-sample.csv")
建立big.matrix物件
我們現在將建立一個big.matrix物件。為此,傳遞的引數將是“mortgage-sample.desc”。可以使用dim()函式提取物件的維度:
示例
# Create an object of object <- read.big.matrix("mortgage-sample.csv", header = TRUE, type = "integer", descriptorfile = "mortgage-sample.desc") # Display the dimensions dim(object)
輸出
[1] 70000 16
如您在輸出中看到的,big.matrix物件的尺寸已顯示。
顯示big.matrix物件
要顯示前6行,我們可以使用head()函式:
示例
head(object)
輸出
enterprise record_number msa perc_minority
[1,] 1 566 1 1
[2,] 1 116 1 3
[3,] 1 239 1 2
[4,] 1 62 1 2
[5,] 1 106 1 2
[6,] 1 759 1 3
tract_income_ratio borrower_income_ratio
[1,] 3 1
[2,] 2 1
[3,] 2 3
[4,] 3 3
[5,] 3 3
[6,] 3 2
loan_purpose federal_guarantee borrower_race
[1,] 2 4 3
[2,] 2 4 5
[3,] 8 4 5
[4,] 2 4 5
[5,] 2 4 9
[6,] 2 4 9
co_borrower_race borrower_gender
[1,] 9 2
[2,] 9 1
[3,] 5 1
[4,] 9 2
[5,] 9 3
[6,] 9 1
co_borrower_gender num_units affordability year
[1,] 4 1 3 2010
[2,] 4 1 3 2008
[3,] 2 1 4 2014
[4,] 4 1 4 2009
[5,] 4 1 4 2013
[6,] 2 2 4 2010
type
[1,] 1
[2,] 1
[3,] 0
[4,] 1
[5,] 1
[6,] 1
建立表格
我們還可以建立一個表格。示例csv檔案包含year作為列名,因此我們可以使用以下程式顯示抵押貸款數量:
示例
# Create a table for the number # of mortages for each specific year print(table(object[, "year"]))
輸出
2008 2009 2010 2011 2012 2013 2014 2015 6919 8996 7269 6561 8932 8316 4687 5493
如您在輸出中看到的,已顯示每年的抵押貸款數量。
資料摘要
現在我們已經瞭解瞭如何匯入big.matrix物件。我們現在將瞭解如何分析儲存在物件中的資料。R為我們提供了binanalytics包,我們可以使用它來建立摘要。您可以使用以下命令在CRAN中下載biganalytics庫:
install.packages("biganalytics")
示例
現在讓我們考慮以下顯示抵押貸款摘要的程式:
library(biganalytics) # Download file using URL download.file("http://s3.amazonaws.com/assets.datacamp.com/production/course_2399/datasets/mortgage-sample.csv", destfile = "mortgage-sample.csv") # Create an object of object <- read.big.matrix("mortgage-sample.csv", header = TRUE, type = "integer", descriptorfile = "mortgage-sample.desc") # Display the summary summary(object)
輸出
enterprise 1.0000000 2.0000000 1.3814571 0.0000000 record_number 0.0000000 999.0000000 499.9080571 0.0000000 msa 0.0000000 1.0000000 0.8943571 0.0000000 perc_minority 1.0000000 9.0000000 1.9701857 0.0000000 tract_income_ratio 1.0000000 9.0000000 2.3431571 0.0000000 borrower_income_ratio 1.0000000 9.0000000 2.6898857 0.0000000 loan_purpose 1.0000000 9.0000000 3.7670143 0.0000000 federal_guarantee 1.0000000 4.0000000 3.9840857 0.0000000 borrower_race 1.0000000 9.0000000 5.3572429 0.0000000 co_borrower_race 1.0000000 9.0000000 7.0002714 0.0000000 borrower_gender 1.0000000 9.0000000 1.4590714 0.0000000 co_borrower_gender 1.0000000 9.0000000 3.0494857 0.0000000 num_units 1.0000000 4.0000000 1.0398143 0.0000000 affordability 0.0000000 9.0000000 4.2863429 0.0000000 year 2008.0000000 2015.0000000 2011.2714714 0.0000000 type 0.0000000 1.0000000 0.5300429 0.0000000
輸出顯示了透過指定最小值、最大值、平均值和NA值的物件摘要。
結論
在本教程中,我們討論了R中的可擴充套件資料處理。我們從處理時間如何與資料大小相關開始。我們瞭解了“記憶體外”物件(如big.matrix)的工作原理。我希望透過本教程,您將獲得R中可擴充套件資料處理的知識,這對於資料科學而言非常重要。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP