Data Transformation

Sample Code


사용할 데이터는 Revolution 폴더안의 Sample Data로, "mortDefaultSmall2009"와 "mortDefaultSmall2008"라는 이름의 csv파일이다.
데이터의 각 행 수는 10000개 이고, 'creditScore', 'houseAge', 'yearsEmploy', 'ccDebt', 'year', 'default' 로 총 6개의 변수(열)를 가지고 있다.


# (1-1)data의 위치지정 Revolution R을 다운할 시, 자동으로 생성되는 Sample
# data중 하나인 데이터로, sampleData폴더의 'mortDefaultSmall2009'과
# 'mortDefaultSmall2008' csv파일을 사용

mort2008 <- "C:/Revolution/R-Enterprise-6.1/R-2.14.2/library/RevoScaleR/SampleData/mortDefaultSmall2008.csv"
mort2009 <- "C:/Revolution/R-Enterprise-6.1/R-2.14.2/library/RevoScaleR/SampleData/mortDefaultSmall2009.csv"

# (1-2)rxImport를 사용한 data import 이 경우에 outFile을 Null로 하였으므로
# outFile은 xdf파일이 아닌 Data Frame형식의 파일로 생성됨

mort2008 <- rxImport(inData = mort2008, overwrite = TRUE)
mort2009 <- rxImport(inData = mort2009, overwrite = TRUE)

# (1-3)rxDataStep을 사용한 Data Transformation

sample1 <- rxDataStep(inData = mort2008, varsToKeep = c("ccDebt", "houseAge"), 
    rowSelection = default < 1)

# (1-4)rxGetInfo를 사용한 변수정보 보기

rxGetInfo(sample1, getVarInfo = TRUE)
## Data frame: sample1 
## Number of observations: 9852 
## Number of variables: 2 
## Variable information: 
## Var 1: ccDebt, Type: integer, Low/High: (0, 11564)
## Var 2: houseAge, Type: integer, Low/High: (0, 40)

# (1-5) 위 예제의 (1-1)에서 이미 2008년, 2009년의 두 개의 데이터를
# 불러왔으므로, 바로 데이터를 합치는 작업시행 (두 개의 Data Frame형식의
# 파일을 합치기)

mort_Merge <- rxMerge(inData1 = mort2008, inData2 = mort2009, matchVars = c("creditScore", 
    "yearsEmploy"), type = "union")

# (1-6) rxGetInfo를 사용하여 데이터가 잘 합쳐졌나 확인

rxGetInfo(mort_Merge, getVarInfo = TRUE)
## Data frame: mort_Merge 
## Number of observations: 20000 
## Number of variables: 6 
## Variable information: 
## Var 1: creditScore, Type: integer, Low/High: (499, 880)
## Var 2: houseAge, Type: integer, Low/High: (0, 40)
## Var 3: yearsEmploy, Type: integer, Low/High: (0, 14)
## Var 4: ccDebt, Type: integer, Low/High: (0, 12823)
## Var 5: year, Type: integer, Low/High: (2008, 2009)
## Var 6: default, Type: integer, Low/High: (0, 1)

rxGetInfo를 사용하여 보니, 데이터가 총 20,000 rows라고 나온다.
따라서, Merge가 잘 되었음을 확인할 수 있다.


# 위 예제의 (1-5)에서 생성한 'mort_Merge' 데이터를 사용.  (1-7) rxSort를
# 사용하여 데이터 정렬하기

mort_Sort <- rxSort(inData = mort_Merge, outFile = "Sortsample.xdf", sortByVars = "creditScore", 
    type = "varByVar", overwrite = TRUE)

# (1-8) rxReadXdf를 사용하여 Sort된 데이터 확인

rxReadXdf(mort_Sort, numRows = 10)
## 
Rows Processed: 10
## Time to read data file: less than .001 secs.
## Time to convert to data frame: less than .001 secs.
##    creditScore houseAge yearsEmploy ccDebt year default
## 1          499       15           4   4789 2009       0
## 2          515       13           5   3635 2008       0
## 3          519       30           4   3949 2008       0
## 4          520        8           2   6787 2008       0
## 5          520       15           4   7389 2009       0
## 6          526        8           4   6327 2008       0
## 7          529       15           4   6376 2008       0
## 8          530       23           6   5031 2008       0
## 9          531       26           8   3344 2008       0
## 10         533        9           8   7154 2008       0

결과로 나온 10개의 데이터를 확인해 보면, 위에서 정렬 기준으로 정한 변수인 'creditScore'를 기준으로 오름차순으로 정렬되었음을 확인할 수 있다.

Appendix

ARGUMENTS


1. rxDatastep

Usage

rxDataStep(inData = NULL, outFile = NULL, varsToKeep = NULL, varsToDrop = NULL, rowSelection = NULL, transforms = NULL, transformObjects = NULL, transformFunc = NULL, transformVars = NULL, transformPackages = NULL, transformEnvir = NULL, append = “none”, overwrite = FALSE, removeMissings = FALSE, computeLowHigh = TRUE, maxRowsByCols = 3000000, rowsPerRead = -1, startRow = 1, numRows = -1, returnTransformObjects = FALSE, blocksPerRead = rxGetOption(“blocksPerRead”), reportProgress = rxGetOption(“reportProgress”), xdfCompressionLevel = rxGetOption(“xdfCompressionLevel”), …)

rxDataStepXdf(inFile, outFile, varsToKeep = NULL, varsToDrop = NULL, rowSelection = NULL, transforms = NULL, transformObjects = NULL, transformFunc = NULL, transformVars = NULL, transformPackages = NULL, transformEnvir = NULL, append = “none”, overwrite = FALSE, removeMissings = FALSE, computeLowHigh = TRUE, rowsPerRead = -1, startRow = 1, numRows = -1, startBlock = 1, numBlocks = -1, returnTransformObjects = FALSE, blocksPerRead = rxGetOption(“blocksPerRead”), reportProgress = rxGetOption(“reportProgress”), xdfCompressionLevel = rxGetOption(“xdfCompressionLevel”), checkVarsToKeep = TRUE, userObjects = NULL, cppInterp = NULL)

2. rxMerge

Usage

rxMerge( inData1, inData2, outFile = NULL, matchVars = NULL, type = “inner”, missingsLow = TRUE, autoSort = TRUE, duplicateVarExt = NULL, varsToKeep1 = NULL, varsToDrop1 = NULL, newVarNames1 = NULL, varsToKeep2 = NULL, varsToDrop2 = NULL, newVarNames2 = NULL, rowsPerOutputBlock = -1, decreasing = FALSE, overwrite = FALSE, maxRowsByCols = 3000000, bufferLimit = -1, reportProgress = rxGetOption(“reportProgress”), verbose = 0, xdfCompressionLevel = rxGetOption(“xdfCompressionLevel”), … )

rxMergeXdf( inFile1, inFile2, outFile, matchVars = NULL, type = “inner”, missingsLow = TRUE, duplicateVarExt = NULL, varsToKeep1 = NULL, varsToDrop1 = NULL, newVarNames1 = NULL, varsToKeep2 = NULL, varsToDrop2 = NULL, newVarNames2 = NULL, rowsPerOutputBlock = -1, decreasing = FALSE, overwrite = FALSE, bufferLimit = -1, reportProgress = rxGetOption(“reportProgress”), verbose = 0, xdfCompressionLevel = rxGetOption(“xdfCompressionLevel”), … )

3. rxSort

Usage

rxSort(inData, outFile = NULL, sortByVars, decreasing = FALSE, type = “auto”, missingsLow = TRUE, caseSensitive = FALSE, varsToKeep = NULL, varsToDrop = NULL, overwrite = FALSE, maxRowsByCols = 3000000, bufferLimit = -1, reportProgress = rxGetOption(“reportProgress”), verbose = 0, xdfCompressionLevel = rxGetOption(“xdfCompressionLevel”), …)

rxSortXdf(inFile, outFile, sortByVars, decreasing = FALSE, type = “auto”, missingsLow = TRUE, caseSensitive = FALSE, varsToKeep = NULL, varsToDrop = NULL, overwrite = FALSE, bufferLimit = -1, reportProgress = rxGetOption(“reportProgress”), verbose = 0, xdfCompressionLevel = rxGetOption(“xdfCompressionLevel”), blocksPerRead = -1, …)


Hankuk University of Foreign Studies. Dept of Statistics. Daewoo Choi Lab. Yeeseul Han.
한국외국어대학교 통계학과 최대우 연구실 한이슬
e-mail : han.lolove17@gmail.com