데이터 핸들링
데이터 핸들링
수집한 원형 데이터를 데이터 분석의 목적에 맞게 가공,처리하는 과정
관련함수 : plyr, dplyr, reshape, reshape2
1. plyr 패키지 활용
- 데이터 병합 : join()
# 병합할 데이터프레임 셋 만들기 x = data.frame(ID = c(1,2,3,4,5), height = c(160,171,173,162,165)) y = data.frame(ID = c(5,4,1,3,2), weight = c(55,73,60,57,80)) # join() : plyr패키지 제공 함수 z <- join(x,y,by='ID') # ID컬럼으로 조인 z
- 출력 결과
ID height weight 1 1 160 60 2 2 171 80 3 3 173 57 4 4 162 73 5 5 165 55
- 출력 결과
- Left 조인
x = data.frame(ID = c(1,2,3,4,6), height = c(160,171,173,162,180)) y = data.frame(ID = c(5,4,1,3,2), weight = c(55,73,60,57,80)) # left 조인 z <- join(x,y,by='ID') # ID컬럼으로 left 조인 z
- 출력 결과
ID height weight 1 1 160 60 2 2 171 80 3 3 173 57 4 4 162 73 5 6 180 NA <- 결측치이면 NA 처리됨
- 출력 결과
- Inner 조인
z <- join(x,y,by='ID', type='inner') # type='inner' : 값이 있는 것만 조인 z
- 출력 결과
ID height weight 1 1 160 60 2 2 171 80 3 3 173 57 4 4 162 73
- 출력 결과
- Full 조인
z <- join(x,y,by='ID', type='full') # type='full' : 모든 항목 조인 z
- 출력 결과
ID height weight 1 1 160 60 2 2 171 80 3 3 173 57 4 4 162 73 5 6 180 NA 6 5 NA 55
- 출력 결과
- key값으로 조인
x = data.frame(key1 = c(1,1,2,2,3), key2 = c('a','b','c','d','e'), val1 = c(10,20,30,40,50)) y = data.frame(key1 = c(3,2,2,1,1), key2 = c('e','d','c','b','a'), val2 = c(500,400,300,200,100)) join(x,y,by=c('key1', 'key2'))
- 출력 결과
key1 key2 val1 val2 1 1 a 10 100 2 1 b 20 200 3 2 c 30 300 4 2 d 40 400 5 3 e 50 500
- 출력 결과
- tapply() 이용한 집단별(그룹별) 통계치 구하기
r 예) tapply(iris$Sepal.Length, iris$Species, mean) # 종별 평균치
2. dplyr 패키지 활용
- 데이터를 분석에 필요한 형태로 만드는 데이터 전처리 관련 함수 제공 패키지
- 주요 함수
- tbl_df() : 데이터셋 화면창 크기 만큼만 데이터 제공
- filter() : 지정한 조건식에 맞는 데이터 추출 - subset()
- select() : 열 추출 - data[, c(‘ddd’, mmm’)]
- mutate() : 열 추가 - transform()
- arrange() : 정렬 - order(), sort()
- summarise() : 집계 - aggregate()
- filter(dataframe, 조건1, 조건2) 함수 이용 데이터 추출
# 1월 1일 데이터 추출 filter(hflights_df, Month == 1, DayofMonth == 1) # and(, or &) # 1월 혹은 2월 데이터 추출 filter(hflights_df, Month == 1 | Month == 2) # or(|)
- arrange()함수를 이용한 오름차순/내림차순 정렬
# 년도,월,도착시간 오름차순 arrange(hflights_df, Year, Month, ArrTime) # 내림차순 - desc(변수) 사용
- select()함수를 이용한 열 조작
# Year, Month, DayOfWeek 열을 추출 select(hflights_df, Year, Month, DayOfWeek) # Month기준 내림차순 정렬 -> Year, Month, AirTime, ArrDelay 컬럼 추출 select(arrange(hflights_df, desc(Month)),Year, Month, AirTime, ArrDelay) # Year~DayOfWeek 추출(Year, Month, DayofMonth, DayofWeek) select(hflights_df, Year:DayOfWeek) # Year부터 DayOfWeek를 제외한 나머지 열 추출 select(hflights_df, -(Year:DayOfWeek))
- mutate()함수를 이용한 열 추가(변형)
# gain 변수 추가 -> gain_per_hour 변수 계산에 사용할 수 있음 mutate(hflights_df, gain = ArrDelay - DepDelay, gain_per_hour = gain/(AirTime/60)) # 새로 만든 열을 같은 함수 안에서 바로 사용 가능
- summarise()함수를 이용한 집계
# n(), sum(), mean(), sd(), var(), median() 등의 함수 사용 - 기초 통계량 summarise(hflights_df, n()) # n() : dataframe의 row값 리턴 함수 # 평균 출발지연시간 계산 summarise(hflights_df, cnt = n(), delay=mean(DepDelay, na.rm = TRUE)) # Source: local data frame [1 x 1] -> 결과는 data frame # cnt delay # 1 227496 9.444951
- group_by(dataframe, 기준변수)함수를 이용한 그룹화
planes <- group_by(hflights_df, TailNum)
3. reshape2 패키지 활용
- 긴 형식 <-> 넓은 형식
- 주요 함수
- dcast() : 긴 형식을 넓은 형식으로 모양 변경
예) 아래와 같은 형태를 ~ Date Customer_ID Buy 1 20140101 1 3 2 20140101 2 4 3 20140102 1 2 4 20140102 4 6 아래와 같은 형태로 변경 Customer_ID 20140101 20140102 1 1 3 2 2 2 4 0 3 4 0 6
- melt() : 넓은 형식을 긴 형식으로 모양 변경, 위의 예제를 반대로 보면 됨
- dcast() : 긴 형식을 넓은 형식으로 모양 변경
January 17, 2020 에 작성
Tags:
R