[R-전처리] 데이터 프레임에서 ID에 기반한 샘플링(랜덤 추출)
< 실습 데이터 >
서울 6호선 2020.2 역별 승하차 데이터
# 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이다.