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中可擴充套件資料處理的知識,這對於資料科學而言非常重要。

更新於: 2023年1月17日

312 次檢視

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.