R데이터전처리

[R-전처리] 데이터 프레임에서 ID에 기반한 샘플링(랜덤 추출)

응호 2020. 3. 19. 14:20

< 실습 데이터 >

서울 6호선 2020.2 역별 승하차 데이터

 

line6_seoul.csv
0.04MB

 

# data load
setwd("C:\\Users\\user\\Desktop\\data")
line6 <- read.csv("line6_seoul.csv", header=T, stringsAsFactor=F)
line6$역ID <- as.factor(line6$역ID)

str(line6)
View(line6)

 

 

 

 

 

< 랜덤 샘플링 >

일반적인 랜덤샘플링으로 전체 테이블에서 20% 레코드를 추출하는 코드이다.

dplyr패키지의 sample_frac(데이터명, 추출할 비율), sample_n(데이터명, 추출할 개수) 형태로 사용한다.

 

library(dplyr)

# 전체 레코드의 20% 랜덤 샘플링
sample_frac(line6, 0.2) %>%
  View()

 

 

 

 

 

< ID에 기반한 샘플링 >

실습 데이터처럼 사용일자가 2/1~2/29까지 있고 역ID는 날짜별로 들어가 있으니 중복된 역ID가 29번 들어가 있는 샘이다.

 

이런 데이터는 온라인 쇼핑몰에서 고객 구매데이터에서도 마찬가지이다. 구매 한 건 한 건이 한개의 행을 차지 하기 때문에 고객 ID를 먼저 공정하게 샘플링 한 뒤에 값을 뽑아내야할 필요가 있을 때가 있다.

 

따라서 먼저 데이터에서 역ID의 중복값을 제거한 값만 얻은 후, 역ID를 샘플링 한 뒤에 데이터를 샘플링할 수 있다.

 

all_id <- unique(line6$역ID)
all_id

line6 %>%
  filter(역ID %in% sample(all_id, size=length(all_id)*0.1)) %>%
  View()

 

- unique는 중복값을 제거한 값만 반환한다.  예를들어 unique(c('a', 'a', 'b', ',b', 'c'))를 입력하면 c('a', 'b', 'c',)를 출력해준다.

- sample_frac 함수는 데이터 프레임에만 사용가능하기 때문에 R내장 함수인 sample(데이터명, 샘플사이즈)를 사용한다.

- %in%는 filter함수에서 %in% 뒤의 조건이 참인 데이터만 추출한다.

- length(벡터명) 는 데이터의 길이를 측정하는 것으로 위 코드에서는 all_id가 39개 이므로 length(all_id)에는 39가 들어간다. length(all_id)*0.1의 결과는 3이다.