59doit

[ R ] EDA - 파생변수 본문

Programming/R

[ R ] EDA - 파생변수

yul_S2 2022. 11. 21. 10:26
반응형

파생변수

코딩된 데이터를 대상으로 분석에 이용하기 위해 만들어진 새로운 변수

파생변수 생성 방법

1) 사칙연산을 이용: ex. 총점, 평균 컬럼 생성

2) 1:1관계로 나열하는 방법: 본 교재내 설명

 

(1) 파생변수 생성을 위한 테이블 구조

 

(2) 더미 형식으로 파생변수 생성

  • 더미(dummy) : 특정 컬럼을 명목상 두가지 상태(0과 1)로 범주화 하여 나타내는 형태

 

ex ) 파생변수 생성하기

 

user_data.csv
0.01MB

 

 

#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 관계로 파생변수 생성하기

 

 

pay_data.csv
0.01MB

 

 

#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
Comments