본문 바로가기

R

[R을 이용한 데이터 처리&분석 실무] 4장 내용 정리_Part 1

오늘은 교재 4장 "데이터 조작 I: 벡터 기반 처리와 외부 데이터 처리"에 대한 내용을 정리해보겠다.

 

4장의 양이 꽤나 많으므로, Part 1 과 Part 2로 나눠서 포스팅을 하겠다.

 

 

▶ CSV 파일 입출력

read.csv(file, header = FALSE)

  • 여기서 header 옵션은 파일의 첫 행을 헤더로 처리할 것인지 여부를 설정하는 것이다.
  • header = FALSEdefault 값이다.

 

▶ 데이터 프레임의 행과 컬럼 합치기

rbind( ) : 지정한 데이터들을 으로 취급해서 합친다.

cbind( ) : 지정한 데이터들을 컬럼으로 취급해서 합친다.

 

 

apply 계열 함수 --> 요긴하게 써먹을 듯 싶으니, 잘 기억해두자!! ^^

함수 설명 다른 함수와 비교했을 때의 특징
apply() 배열 또는 행렬에 주어진 함수를 적용한 뒤 그 결과를 벡터, 배열 또는 리스트반환 배열 또는 행렬에 적용
lapply() 벡터, 리스트 또는 표현식에 함수를 적용하여 그 결과를 리스트반환 결과가 리스트
sapply() lapply 와 유사하지만 결과를 벡터, 행렬 또는 배열반환 결과가 벡터, 행렬 또는 배열
tapply() 벡터에 있는 데이터를 특정 기준에 따라 그룹으로 묶은 뒤, 각 그룹마다 주어진 함수를 적용하고 그 결과를 반환 데이터를 그룹으로 묶은 뒤, 함수를 적용
mapply() sapply 의 확장된 버전으로, 여러 개의 벡터 또는 리스트를 인자로 받아 함수에 각 데이터의 첫째 요소들을 적용한 결과, 둘째 요소들을 적용한 결과, 셋째 요소들을 적용한 결과 등을 반환 여러 데이터를 함수의 인자로 적용

 

1. apply(X, MARGIN, FUN)

  • X : 배열 또는 행렬
  • MARGIN = 1 : 행 방향 / MARGIN = 2 : 열 방향
  • FUN : 적용할 함수
  • 행 또는 열의 합 또는 평균의 계산 → rowSums(), rowMeans(), colSums(), colMeans()

 

2. lapply(X, FUN)

  • X : 벡터, 리스트, 표현식 또는 데이터 프레임
  • FUN : 적용할 함수
  • lapply( )리스트를 반환한다.
  • unlist( ) : 리스트 구조를 벡터로 변환할 수 있다.

 

3. sapply(X, FUN)

  • X : 벡터, 리스트, 표현식 또는 데이터 프레임
  • FUN : 적용할 함수
  • sapply( )는 벡터를 반환한다.
  • sapply( )에 인자로 주어진 함수의 출력이 길이가 1보다 큰 벡터들이라면, sapply( )는 행렬을 반환한다.
  • sapply( )는 한 가지 타입만 저장 가능한 데이터 타입인 벡터 또는 행렬을 반환하므로, sapply( )에 인자로 준 함수 FUN의 반환 값에 여러 가지 데이터 타입이 섞여 있으면 안 된다.

 

4. tapply(X, INDEX, FUN)

  • X : 벡터
  • INDEX : 데이터를 그룹으로 묶을 색인(index). Factor를 지정해야 하며 factor가 아닌 타입이 지정되면 factor로 형 변환된다.
  • FUN : 각 그룹마다 적용할 함수
  • tapply( )는 배열을 반환한다.

★ 위의 tapply(m, list(tapply(m, list(c(1, 1, 2, 2, 1, 1, 2, 2), c(1, 1, 1, 1, 2, 2, 2, 2)), sum) 코드에 대한 부연 설명

 

  male female
spring   (1, 1)                                  1   (1, 2)                                  5
summer   (1, 1)                                  2   (1, 2)                                  6
fall   (2, 1)                                  3   (2, 2)                                  7
winter   (2, 1)                                  4   (2, 2)                                  8
  • INDEX를 실제로 지정할 때는 (n, m)에서 n을 먼저 나열한 뒤에 m 값을 나열한다. 즉, 그룹(n1, m1), (n2, m2)는 list(c(n1, n2), c(m1, m2))로 표현한다. 위의 예시는 이러한 방식으로 tapply( )를 사용한 분기별, 성별 합을 구한 예다.

 

5. mapply(FUN)

  • FUN : 실행할 함수
  • 위의 R 코드는 다음 세 가지 조합에 대해 호출한 경우이다.
  • 아래의 세 가지 조합을 수행하기 위해 rnorm( )을 세 번 호출해도 되지만, mapply( )를 활용하면 훨씬 더 쉽게 호출할 수 있다.
n mean sd
1 0 1
2 10 1
3 100 1

 

▶ 데이터를 그룹으로 묶은 후, 함수 호출하기

  • 데이터 분석에서는 데이터 전체에 대해 함수를 호출하기보다는 데이터를 그룹별로 나눈 뒤, 각 그룹별로 함수를 호출하는 일이 흔하다.
  • 이러한 목적에 특화된 패키지가 바로 "doBY" 패키지이다.
  • "doBy" 패키지를 사용하려면, 우선 다음과 같이 패키지를 설치해야 한다.

함수 특징
summaryBy( ) 데이터 프레임을 컬럼 값에 따라 그룹으로 묶은 후, 요약 값 계산
orderBy( ) 지정된 컬럼 값에 따라 데이터 프레임을 정렬
sampleBy( ) 데이터 프레임을 특정 컬럼 값에 따라 그룹으로 묶은 후, 각 그룹에서 샘플 추출

 

1. summary(object # 요약할 객체) / summaryBy(formula, data)

  • 그룹별로 그룹을 특징짓는 통계적 요약 값을 계산하는 함수이다.
  • summary( )데이터에 대한 간략한 통계 요약을 보여주는 반면, summaryBy( )원하는 컬럼의 값을 특정 조건에 따라 요약하는 목적으로 사용한다.
  • 위의 예시로 작성한 R 코드는 Sepal.Length와 Sepal.Width를 Species에 따라 살펴보기 위한 코드이다.
    • 즉, Sepal.Length와 Sepal.Width를 Species별로 요약한 것이다.

 

2. order(data, na.last = TRUE, decreasing = FALSE) / orderBy(formula, data)

  • order( ) 함수는 주어진 값을 정렬하기 위한 색인(index)을 순서대로 반환한다.
    • na.last : NA 값을 정렬한 결과의 어디에 둘 것인지를 제어한다. (default 값은 na.last = TRUE)
    • decreasing : 내림차순 여부 (default 값은 FALSE)
  • 여러 컬럼을 기준으로 데이터를 정렬하고자 한다면, 해당 컬럼들을 order( )에 나열하면 된다.
  • orderBy( )는 order( )와 유사하지만, 정렬할 데이터를 formula로 지정할 수 있다는 점이 편리하다.
    • 그러나 실제 R을 사용할 때, orderBy( )보다는 order( )를 더 많이 사용한다.

 

3. sample(x, size, replace = FALSE) / sampleBy(formula, frac, replace = FALSE, data)

  • sample( ) : 주어진 데이터에서 임의로 샘플(표본)을 추출하는 목적으로 사용된다.
    • x : 샘플을 뽑을 데이터 벡터
    • size : 샘플의 크기
    • replace : 복원 추출 여부 (default 값은 FALSE)
    • 샘플링은 주어진 데이터를 훈련 데이터테스트 데이터분리하는 데 유용하게 사용할 수 있다.
  • sampleBy( ) : Formula에 따라 데이터를 그룹으로 묶은 후, 샘플을 추출한다.
    • frac : 추출할 샘플의 비율이며, 기본 값은 10%
    • replace : 복원 추출 여부 (default 값은 FALSE)
    • sampleBy( )데이터 프레임을 반환한다.
    • 모델 성능 평가를 올바르게 하려면 훈련 데이터와 테스트 데이터에 target 값별로 데이터의 수가 균일한 것이 좋은데, 이럴 때 사용하는 것이 바로 sampleBy( )이다.
    • 위의 R 코드를 보면, 각 Species별로 5개씩 데이터가 정확히 샘플로 추출된 것을 볼 수 있다.

 

데이터 분리 및 병합 --> 데이터 분석에 있어서 매우 중요한 파트!!

1. split(x, f)

  • x : 분리할 벡터 또는 데이터 프레임
  • f : 분리할 기준을 저장한 factor
  • split( )리스트를 반환한다.
    • 반환 값이 리스트이므로, 위의 R 코드와 같이 lapply( )를 사용하여 iris 종별 Sepal.Length의 평균을 구할 수도 있다.

 

2. subset(x, subset, select)

 

  • x : 일부를 취할 객체
  • subset : 데이터를 취할 것인지 여부
  • select : 데이터 프레임의 경우, 선택하고자 하는 컬럼
  • subet( )조건을 만족하는 데이터를 반환한다.
  • subset( )에 select 인자를 지정하면, 특정 컬럼을 선택하거나 제외할 수 있다.
    • 특정 컬럼을 제외하고자 한다면, - 를 컬럼 이름 앞에 붙인다.
    • select에서 컬럼을 제외하는 방법 외에, names( )와 %in%을 사용하여 제외하는 방법도 있다.

 

3. merge(x, y, by, all = FALSE)

  • x : 병합할 데이터 프레임
  • y : 병합할 데이터 프레임
  • by : 병합 기준으로 사용할 컬럼
  • all : 공통된 값이 x, y 중 한쪽에 없을 때의 처리를 뜻한다. (default 값은 FALSE)
    • all = FALSE : x, y 모두에 공통된 데이터가 있을 때만 해당 행이 병합 결과에 포함된다.
    • all = TRUE : x, y 중 어느 한쪽에 공통된 값을 가지는 행이 없을 때, 해당 쪽을 NA로 채워 병합하여 결과적으로 x, y의 전체 행이 결과에 포함된다.
    • 즉, 데이터가 비어 있는 쪽의 값을 NA로 채우면서 전체 데이터를 모두 병합하고 싶다면, all 인자에 TURE를 지정하면 된다.

 

▶ 데이터 정렬

→ sort(x, decreasing = FALSE, na.last = NA)

  • : 정렬할 벡터
  • decreasing : 내림차순 여부 (default 값은 FALSE)
  • na.last : NA 값을 정렬할 결과의 어디에 둘 것인지를 제어한다. (default 값은 na.last = NA)
    • na.last = TRUE : NA 값을 정렬한 결과의 마지막에 둔다.
    • na.last = FALSE : NA 값을 정렬한 값의 처음에 둔다.
    • na.last = NA : NA 값을 정렬 결과에서 제외한다.
  • sort( )는 값을 정렬한 결과를 반환할 뿐, 인자로 받은 벡터 자체를 변경하지 않는다. 
    • 즉, 원본 값은 변하지 않고 유지된다.

 

4장의 내용은 데이터 분석에 있어서 정말 중요한 부분이다. 중요한만큼 잘 숙지해서 추후에 유용하게 사용하도록 하자!! ^^

 

내일 하루도 힘차게 달려보자!!

 

 

★ 참고 자료

- R을 이용한 데이터 처리&분석 실무 교재