59doit
[ R ] EDA - 파생변수 본문
파생변수
코딩된 데이터를 대상으로 분석에 이용하기 위해 만들어진 새로운 변수
파생변수 생성 방법
1) 사칙연산을 이용: ex. 총점, 평균 컬럼 생성
2) 1:1관계로 나열하는 방법: 본 교재내 설명
(1) 파생변수 생성을 위한 테이블 구조
(2) 더미 형식으로 파생변수 생성
- 더미(dummy) : 특정 컬럼을 명목상 두가지 상태(0과 1)로 범주화 하여 나타내는 형태
ex ) 파생변수 생성하기
#1 데이터 파일 가져오기
user_data <- read.csv("C:/user_data.csv", header = T) head(user_data) # user_id age house_type resident job # 1 1001 35 4 전북 6 # 2 1002 45 4 경남 2 # 3 1003 55 4 경기 6 # 4 1004 43 3 대전 1 # 5 1005 55 4 경기 2 # 6 1006 45 1 대구 1 table(user_data$house_type) # 1 2 3 4 # 32 47 21 300 |
#2 더미변수 생성
;단독주택 or 다세대 주택이면 0, 아파트 or 오피스텔이면 1
house_type2 <- ifelse(user_data$house_type == 1 | user_data$house_type == 2, 0 , 1) house_type2[1:10] # [1] 1 1 1 1 1 0 1 0 1 1 |
#3 파생변수 추가
user_data$house_type2 <- house_type2 head(user_data) # user_id age house_type resident job house_type2 # 1 1001 35 4 전북 6 1 # 2 1002 45 4 경남 2 1 # 3 1003 55 4 경기 6 1 # 4 1004 43 3 대전 1 1 # 5 1005 55 4 경기 2 1 # 6 1006 45 1 대구 1 0 |
(3) 1:1관계로 파생변수 생성
- 1:N관계를 1:1관계로 변수를 나열 하여 파생변수를 생성
ex ) 1:N관계를 1:1 관계로 파생변수 생성하기
#1 데이터 파일 가져오기
pay_data <- read.csv("C:/pay_data.csv", header = T) head(pay_data, 10) # user_id product_type pay_method price # 1 1001 1 1.현금 153000 # 2 1002 2 2.직불카드 120000 # 3 1003 3 3.신용카드 780000 # 4 1003 4 3.신용카드 123000 # 5 1003 5 3.신용카드 79000 # 6 1003 1 3.신용카드 125000 # 7 1007 2 2.직불카드 150000 # 8 1007 3 2.직불카드 78879 # 9 1007 4 2.직불카드 81980 # 10 1007 5 2.직불카드 71773 table(pay_data$product_type) # 1 2 3 4 5 # 55 82 89 104 70 |
#2 고객별 상품 유형에 따른 구매금액과 합계를 나타내는 파생변수 생성
library(reshape2) product_price <- dcast(pay_data, user_id ~ product_type, sum, na.rm = T) head(product_price, 3) # user_id 1 2 3 4 5 # 1 1001 153000 0 0 0 0 # 2 1002 0 120000 0 0 0 # 3 1003 125000 0 780000 123000 79000 |
dcast()함수를 사용하여 user_id를 행으로 지정, product_type을 열로 지정하여 고객별로 구매한 상품 유형에 따라서 구매금액의 합계를 계산하여 파생변수 생성
#3 컬럼명 수정
names(product_price) <- c('user_id', '식표품(1)', '생필품(2)', '의류(3)', '잡화(4)', '기타(5)') head(product_price) # user_id 식표품(1) 생필품(2) 의류(3) 잡화(4) 기타(5) # 1 1001 153000 0 0 0 0 # 2 1002 0 120000 0 0 0 # 3 1003 125000 0 780000 123000 79000 # 4 1007 0 150000 78879 81980 71773 # 5 1011 0 71774 0 0 0 # 6 1012 0 0 74968 0 0 |
가독성 향상을 위해 컬럼명을 추가
ex ) 고객식별번호(user_id)에 대한 지불유형(pay_method)의 파생변수 생성
#1 고객별 지불유형에 따른 구매상품 개수를 나타내는 파생변수 생성
pay_price <- dcast(pay_data, user_id ~ pay_method, length) head(pay_price, 3) # user_id 1.현금 2.직불카드 3.신용카드 4.상품권 # 1 1001 1 0 0 0 # 2 1002 0 1 0 0 # 3 1003 0 0 4 0 |
dcast()함수 사용 user_id은 행에 pay_method는 컬럼에 지정하여 고객별로 지불유형에 따른 구매상품 개수를 파생변수로 생성
#2 컬럼명 변경
names(pay_price) <- c('user_id', '현금(1)', '직불카드(2)', '신용카드(3)', '상품권(4)') head(pay_price, 3) # user_id 현금(1) 직불카드(2) 신용카드(3) 상품권(4) # 1 1001 1 0 0 0 # 2 1002 0 1 0 0 # 3 1003 0 0 4 0 |
(4) 파생변수 합치기
고객정보 테이블에 파생변수를 추가하여 새로운 형태의 데이터프레임을 생성
ex ) 고객정보(user_data)테이블에 파생변수 추가
#1 고객정보 테이블과 고객별 상품 유형에 따른 구매금액 합계 병합하기
library(plyr) user_pay_data <- join(user_data, product_price, by = 'user_id') head(user_pay_data, 10) # user_id age house_type resident job house_type2 # 1 1001 35 4 전북 6 1 # 2 1002 45 4 경남 2 1 # 3 1003 55 4 경기 6 1 # 4 1004 43 3 대전 1 1 # 5 1005 55 4 경기 2 1 # 6 1006 45 1 대구 1 0 # 7 1007 39 4 경남 1 1 # 8 1008 55 2 경기 6 0 # 9 1009 33 4 인천 3 1 # 10 1010 55 3 서울 6 1 # 식표품(1) 생필품(2) 의류(3) 잡화(4) 기타(5) # 1 153000 0 0 0 0 # 2 0 120000 0 0 0 # 3 125000 0 780000 123000 79000 # 4 NA NA NA NA NA # 5 NA NA NA NA NA # 6 NA NA NA NA NA # 7 0 150000 78879 81980 71773 # 8 NA NA NA NA NA # 9 NA NA NA NA NA # 10 NA NA NA NA NA |
join()함수 사용하여 고객식별번호(user_id)를 기준으로 고객정보 테이블(user_data)과 고객 별 상품 유형에 따른 구매금액 합계(product_price)를 하나의 데이터프레임으로 병합
#2 고객별 지불유형에 따른 구매상품 개수 병합하기
user_pay_data <- join(user_pay_data, pay_price, by = 'user_id') user_pay_data[c(1:10), c(1, 7:15)] # user_id 식표품(1) 생필품(2) 의류(3) 잡화(4) 기타(5) # 1 1001 153000 0 0 0 0 # 2 1002 0 120000 0 0 0 # 3 1003 125000 0 780000 123000 79000 # 4 1004 NA NA NA NA NA # 5 1005 NA NA NA NA NA # 6 1006 NA NA NA NA NA # 7 1007 0 150000 78879 81980 71773 # 8 1008 NA NA NA NA NA # 9 1009 NA NA NA NA NA # 10 1010 NA NA NA NA NA # 현금(1) 직불카드(2) 신용카드(3) 상품권(4) # 1 1 0 0 0 # 2 0 1 0 0 # 3 0 0 4 0 # 4 NA NA NA NA # 5 NA NA NA NA # 6 NA NA NA NA # 7 0 4 0 0 # 8 NA NA NA NA # 9 NA NA NA NA # 10 NA NA NA NA |
join()함수 사용하여 고객식별번호(user_id)를 기준으로 1단계에서 병합된 데이터프레임에 고객별 지불유형에 따른 구매상품 개수를 추가하여 하나의 데이터프레임으로 병합
ex ) 사칙연산으로 총 구매금액 파생변수 생성
#1 고객별 구매금액의 합계(총 구매금액) 계산
user_pay_data$총구매금액 <- user_pay_data$`식표품(1)` + user_pay_data$`생필품(2)` + user_pay_data$`의류(3)` + user_pay_data$`잡화(4)` + user_pay_data$`기타(5)` |
#2 고객별 상품 구매 총금액 컬럼 확인
user_pay_data[c(1:10), c(1, 7:11, 16)] # user_id 식표품(1) 생필품(2) 의류(3) 잡화(4) 기타(5) 총구매금액 # 1 1001 153000 0 0 0 0 153000 # 2 1002 0 120000 0 0 0 120000 # 3 1003 125000 0 780000 123000 79000 1107000 # 4 1004 NA NA NA NA NA NA # 5 1005 NA NA NA NA NA NA # 6 1006 NA NA NA NA NA NA # 7 1007 0 150000 78879 81980 71773 382632 # 8 1008 NA NA NA NA NA NA # 9 1009 NA NA NA NA NA NA # 10 1010 NA NA NA NA NA NA |
'Programming > R' 카테고리의 다른 글
[ R ] 데이터시각화 #1 이산변수 시각화 (0) | 2022.12.22 |
---|---|
[ R ] EDA 표본추출 (0) | 2022.11.21 |
[ R ]EDA 코딩변경 (0) | 2022.11.21 |
[ R ]EDA 결측치 & 극단치 (0) | 2022.11.20 |
[ R ]reshape2 패키지 활용 (0) | 2022.11.20 |