R용 Netezza 라이브러리로 데이터 관리하기
이 섹션에서는 Netezza R 라이브러리 데이터 유형과 데이터 조작을 허용하는 몇 가지 기본 함수에 대해 설명합니다.
nz.data.frame
가장 중요하고 빈번하게 사용되는 구조체는 '
nz.data.frame' 클래스의 객체입니다. ' nz.data.frame() ' 함수는 Netezza 시스템에서 테이블에 대한 포인터를 생성합니다. 이 포인터는 나중에 ' nzApply 또는 ' nzRun' 또는 데이터 마이닝 알고리즘으로 데이터 변환을 실행하는 데 사용할 수 있습니다. 로컬 메모리에 데이터를 저장하지 않고 사용자 코드가 실행되어야 하는 올바른 테이블 하위 집합(열 또는 행, 또는 둘 다)을 결정하는 데 사용할 수 있는 메타데이터를 제공합니다. Netezza R 라이브러리에 있는 대부분의 데이터 조작 함수의 표준 출력입니다.nzConnect("user", "password", "TT4-R040", "mm")
# create a reference to the table
adult nzadult = nz.data.frame("adult")
#Show the reference
nzadult
#SELECT
#ID,AGE,WORKCLASS,FNLWGT,EDUCATION,EDUCATION_NUM,MARITAL_STATUS,OCCUPATION,RELA#T
IONSHIP,RACE,SEX,CAPITAL_GAIN,CAPITAL_LOSS,HOURS_PER_WEEK,INCOME FROM ADULT'
nz.data.frame ' 클래스는 데이터의 하위 집합을 추출하고 ' data.frame'와 유사한 메타 정보를 수집하며 병렬 데이터 처리 알고리즘으로 작업하기 위한 여러 가지 메서드를 구현합니다. Netezza 스키마와 함께 작동하도록 구성할 수 있습니다. 스키마가 있는 테이블은 테이블 이름 외에 스키마 이름을 사용하여 같은 방식으로 참조할 수 있습니다.# create a reference to the table adult
nzadult = nz.data.frame("a.adult")현재 교차 데이터베이스 액세스는 지원되지 않습니다.
스키마와 테이블 모두 대소문자를 구분할 수 있습니다. 이 경우 큰따옴표 안에 넣어야 합니다. 다음은 스키마 A(대소문자 구분 없음)에서 'Adult'(대소문자 구분) 테이블에 액세스하는 예제입니다.
# create a reference to the table Adult
nzadult = nz.data.frame('A."Adult"')데이터베이스 테이블의 열은 R에서 항상 대소문자를 구분하여 처리합니다. 대소문자를 구분하도록 정의되지 않은 열 이름은 기본 대/소문자로 변환됩니다.
[,], $ 및 dim
' [,] 연산자를 사용하여 열, 행 또는 둘 다의 하위 집합을 지정할 수 있습니다.
Netezza 시스템에는 연속적인 행 번호가 없기 때문에 행을 번호로 참조할 수 없다는 한계가 있습니다. 대신 다음과 같은 값 기반 조건을 지정해야 합니다
nzdf2 <- nzadult[nzadult$ID>20,]이 단계에서는 메타데이터만 R로 전송되었으므로 ' dim() ' 함수를 사용하여 각 선택의 결과를 부분적으로 확인할 수 있습니다. 이 함수는 행과 열의 수를 반환합니다.
# there are 15 columns and 32561 rows in the "adult"
table dim(nzadult)
#[1] 32561 15
# selecting columns 5,6 and
7 t1 <- nzadult[,5:7]
#SELECT EDUCATION,EDUCATION_NUM,MARITAL_STATUS FROM ADULT
# t1 has only 3 columns
dim(t1)
#[1] 32561 3
# selecting columns by their
names (t2 <- nzadult$AGE)
#SELECT AGE FROM ADULT
# t2 has only 1
column dim(t2)
#[1] 32561 1
# selecting rows satisfying condition AGE>30 and EDUCATIONNUM=10
# from the subset of columns number 1,2,5,7 and 16
t3 <- nzadult[nzadult[,2]>30 & nzadult[,6] == 10,c(1,2,6,7,15)]
t3
#SELECT ID,AGE,EDUCATION_NUM,MARITAL_STATUS,INCOME FROM ADULT WHERE ( AGE >
#'30' ) AND ( EDUCATION_NUM = '10' )
# there are fewer rows and fewer columns than in the initial
table dim(t3)
#[1] 4226 5머리, 꼬리
데이터 샘플을 얻으려면 ' head() ' 및 ' tail() ' 함수를 사용할 수 있습니다. 이 함수는 데이터 집합의 시작 또는 끝에서 지정된 데이터를 가져옵니다.
head(t3,4)
# ID AGE EDUCATION_NUM MARITAL_STATUS INCOME
#1 28 54 10 Married-civ-spouse large
#2 56 43 10 Married-civ-spouse large
#3 92 37 10 Divorced small
#4 140 49 10 Married-civ-spouse large
tail(nzadult[,1:4])
# ID AGE WORKCLASS FNLWGT
#32556 32538 30 Private 345898
#32557 32542 41 Private 202822
#32558 32546 39 Local-gov 111499
#32559 32550 43 State-gov 255835
#32560 32554 32 Private 116138
#32561 32558 40 Private 154374as.data.frame
전체 데이터 세트를 보려면 '
as.data.frame'을 사용하여 Netezza 시스템에서 다운로드해야 합니다. 성인 데이터는 대규모 데이터 세트이므로 다음 예제에서는 이전에 생성한 데이터 프레임 중 하나인t3)을 대신 사용합니다.reg_df <- as.data.frame(t3)
head(reg_df)
# ID AGE EDUCATION_NUM MARITAL_STATUS INCOME
#1 28 54 10 Married-civ-spouse large
#2 56 43 10 Married-civ-spouse large
#3 92 37 10 Divorced small
#4 140 49 10 Married-civ-spouse large
#5 204 42 10 Never-married small
#6 264 59 10 Married-civ-spouse small
class(reg_df)
#[1] "data.frame"as.nz.data.frame
또 다른 유용한 데이터 조작 함수는 ' as.nz.data.frame' 입니다. 다른 R 개체에서 ' nz.data.frame 개체를 만듭니다. 그런 다음 Netezza 시스템 테이블이 생성되고 전달된 데이터가 이 테이블에 삽입됩니다. 생성된 개체는 새로 생성된 시스템 테이블을 가리킵니다.
이 예는 다른 R 개체(이 경우 '
data.frame 홍채)로부터 ' nz.data.frame ' 개체를 만드는 방법을 보여줍니다.data(iris)
if (nzExistTable("nziris")) nzDeleteTable("nziris")
d = as.nz.data.frame(iris, "nziris")
d
#SELECT Sepal_Length,Sepal_Width,Petal_Length,Petal_Width,Species FROM nziris
class(d)
#[1] "nz.data.frame"
#attr(,"package")
#[1] "nzr"이제 홍채 데이터 세트가 Netezza 시스템 테이블 ' NZIRIS에 저장됩니다. 두 번째 인수를 지정하지 않으면 테이블 이름이 임의로 생성됩니다.세부사항
기본 인수가 있는 함수 서명은 다음과 같습니다:
nz.data.frame(table1, case.sensitive = NULL)
as.data.frame(x1, row.names=NULL, optional=FALSE,
max.rows=NULL, order.by=TRUE, ...)
as.nz.data.frame(x2, table2 = NULL, distributeon = NULL, fast=TRUE)여기서,- table1
- 현재 사용 중인 데이터베이스에서 Netezza 시스템에서 사용할 수 있는 테이블의 이름을 지정합니다.
- row.names
- 사용되지 않음, 호환성을 위해 포함됨.
- 선택사항
- 사용되지 않음, 호환성을 위해 포함됨.
- x1
- '
data.frame'로 강제로 지정할 오브젝트를 지정합니다. - max.rows
- 선택사항. 클라이언트로 전송할 최대 행 수를 지정합니다.
- order.by
- 선택사항. 주문 사용 여부를 나타냅니다.
- x2
- nz.data.frame 강제 전송할 객체를 지정합니다.
- table2
- 선택사항. 테이블 이름을 지정합니다. 지정하지 않으면 함수가 이름을 선택합니다.
- 배포
- 선택사항. 열 이름을 지정합니다. Netezza 시스템에서 데이터 배포는 이 열을 기준으로 이루어집니다.
- 빠른
- 선택사항. '
FALSE'로 설정하면 테이블을 만들 때 여러 개의 삽입이 수행됩니다. 이 옵션을 사용하려면 데이터를 임시 파일에 로컬로 저장해야 합니다.