반응형

/*********************************************************************************************************
-- Title : [R3.3] Dataframe - 파생 컬럼 추가 및 조인, 탐색적 분석을 위한 시각화
-- Reference : hrd-net
-- Key word : R data frame dataframe 파생 컬럼 파생컬럼 join 조인 시각화 visualization table()
                  barplot densityplot xyplot reshape2 lattice plyr
*********************************************************************************************************/

-- Chart


-- R

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# ********************************************
# -- 탐색적 분석을 위한 시각화 
#    table() 함수를 통한 피벗(pivot)과 유사 
#    명목척도(범주/서열) vs 명목척도(범주/서열)
# ********************************************
 
# -- 소스 읽기 
new_data = read.csv("C:\\RProject\\Rwork\\Part-III\\cleanData.csv", header=TRUE)
head(new_data)
 
dim(new_data)                                                   # 248  13
 
# -- 명목척도(범주/서열) vs 명목척도(범주/서열) 
#    거주지역과 성별 칼럼 시각화 
resident_gender = table(new_data$resident2, new_data$gender2)
resident_gender
 
gender_resident = table(new_data$gender2, new_data$resident2)
gender_resident
 
# -- 성별에 따른 거주지역 분포 현황 
barplot(resident_gender, beside=T, horiz=T,  col = rainbow(5),
        legend = row.names(resident_gender),                    # row.names(resident_gender) # 행 이름
        main = '성별에 따른 거주지역 분포 현황'
 
# -- 거주지역에 따른 성별 분포 현황 
barplot(gender_resident, beside=T, col=rep(c(24),5), horiz=T,
        legend=c("남자","여자"),  main = '거주지역별 성별 분포 현황'
 
 
# ********************************************
# -- 탐색적 분석을 위한 시각화 
#    비율척도(연속) vs 명목척도(범주/서열) 
# ********************************************
 
# -- job2 생성
head(new_data)
 
new_data$job2[new_data$job == 1<- '공무원'
new_data$job2[new_data$job == 2<- '회사원'
new_data$job2[new_data$job == 3<- '개인사업'
 
head(new_data[c('job''job2')])
 
 
# -- 비율척도(연속) vs 명목척도(범주/서열)
#    나이와 직업유형에 따른 시각화 
install.packages("lattice"# 격자 그래프 
library(lattice)
 
# -- 나이와 직업유형 데이터 분포  
#    (y ~ x)
densityplot( ~ age, data=new_data, groups = job2,
             plot.points=T, auto.key = T)                       # plot.points=T : 밀도, auto.key = T : 범례 
 
 
# ********************************************
# -- 탐색적 분석을 위한 시각화 
#    비율척도(연속) vs 명목척도(범주/서열) 
# ********************************************
 
# -- 데이터 처리 
new_data$position2[new_data$position == 1<- '1급'
new_data$position2[new_data$position == 2<- '2급'
new_data$position2[new_data$position == 3<- '3급'
new_data$position2[new_data$position == 4<- '4급'
new_data$position2[new_data$position == 5<- '5급'
 
head(new_data)
 
# -- 비율(연속),명목(범주/서열) : 명목(범주/서열)
#    구매비용(연속) : x칼럼 , 직급(서열):조건, 성별(범주):그룹   
#    (y ~ x | 조건(명목) groups = (명목))
densityplot(~ price | factor(gender2), data=new_data, 
            groups = position2, plot.points=T, auto.key = T)    # groups = gender2 : 한 격자에 나타날 그룹 칼럼 지정 
 
densityplot(~ price | factor(position2), data=new_data, 
            groups = gender2, plot.points=T, auto.key = T) 
 
 
# ********************************************
# -- 탐색적 분석을 위한 시각화 
#    비율(연속)2개 : 명목
# ********************************************
 
# -- 비율(연속)2개 : 명목 
#   (y ~ x | 명목, data = data.frame)
xyplot(price ~ age | factor(gender2), data=new_data) 
 
 
# ********************************************
# -- 파생변수 생성
# ********************************************
# -- 기존 변수로 새로운 변수 생성
#    방법) 사칙연산 적용, 1:N 관계 -> 1:1 관계 변수 생성 
#    id : 주건환경(주택,빌라,아파트,오피스텔) -> 4개의 칼럼 추가 
 
user_data = read.csv('C:\\RProject\\Rwork\\Part-II\\user_data.csv', header = T)
head(user_data)                                                 # user_id age house_type resident job child
 
# -- 1:1 파생변수 생성 
#    주택 유형 :  1, 아파트 유형 : 0 
summary(user_data$house_type) # NA확인 - 없음 
 
# -- 파생변수 생성 
house_type2 = ifelse(user_data$house_type == 1 | user_data$house_type == 212)
 
user_data$house_type[1:10]
house_type2[1:10
 
# -- 파생변수 추가 
user_data$house_type2 = house_type2
head(user_data)
 
# -- 1:N 파생변수 생성 -> 1 : 1
pay_data = read.csv('C:\\RProject\\Rwork\\Part-II\\pay_data.csv', header = T)
head(pay_data)                                                  # user_id product_type pay_method  price
 
install.packages('reshape2')
library(reshape2)
 
# -- 고객별 상품 유형에 따른 구매금액 합계 파생변수 생성
#    dcast를 통한 피벗(pivot) 형태로 변경
product_price = dcast(pay_data, user_id ~ product_type , sum, na.rm=T) # 행 ~ 열 
head(product_price, 3)                                          # 행(고객 id) 열(상품 타입)
 
class(product_price)                                            # "data.frame"
 
# -- 칼럼명 수정 
names(product_price) = c('user_id','product_type1','product_type2','product_type3','product_type4','product_type5')
head(product_price, 3)                                          # 칼럼명 수정 확인 
 
# -- 고객별 지불유형에 따른 구매금액 합계 파생변수 생성 
pay_price = dcast(pay_data, user_id ~ pay_method, sum, na.rm=T) # 행 ~ 열 
head(pay_price, 3)                                              # 행(고객 id) 열(상품 타입)
 
names(pay_price) = c('user_id','pay_method1','pay_method2','pay_method3','pay_method4')
head(pay_price, 3)                                              # 칼럼명 수정 확인 
 
 
# ********************************************
# -- 파생변수 추가(data.frame 합치기) 
#    형식) join(df1, df2, by='column')
# ********************************************
# -- 파생변수 추가(data.frame 합치기) 
library(plyr) # 패키지 로딩
 
user_pay_data = join(user_data, product_price, by='user_id')
head(user_pay_data,10)                                          # product_typeNo 파생변수 추가(NA : 해당 상품 구매이력 없음) 
 
user_pay_data = join(user_pay_data, pay_price, by='user_id')
head(user_pay_data,10)                                          # pay_methodNo 파생변수 추가 
 
# -- 파생변수 대상 더미변수화(1 or 0) -> 특정 고객의 구매상품 내역을 파악할 수 있다. 
user_pay_data$product_type1 = ifelse( user_pay_data$product_type1 > 010)
user_pay_data$product_type2 = ifelse( user_pay_data$product_type2 > 010)
user_pay_data$product_type3 = ifelse( user_pay_data$product_type3 > 010)
user_pay_data$product_type4 = ifelse( user_pay_data$product_type4 > 010)
user_pay_data$product_type5 = ifelse( user_pay_data$product_type5 > 010)
head(user_pay_data,10)                                          # pay_methodNo 파생변수 추가 
                                                                # pay_methodNo 칼럼은 고객의 지불유형과 총구매액의 내역을 파악할 수 있다.
 
# -- 총 구매금액 파생변수 생성(사칙연산 : 지급방법 이용) -> 전체 고객을 대상으로 우수고객을 파악할 수 있다. 
user_pay_data$total_price = user_pay_data$pay_method1 + user_pay_data$pay_method2 + user_pay_data$pay_method3 + user_pay_data$pay_method4 
head(user_pay_data,10)                                          # total_price 칼럼 확인
 
# -- 파생변수 대상 더미변수화(1 or 0) -> 특정 고객의 지불방법 내역을 파악할 수 있다. 
user_pay_data$pay_method1 = ifelse( user_pay_data$pay_method1 > 010)
user_pay_data$pay_method2 = ifelse( user_pay_data$pay_method2 > 010)
user_pay_data$pay_method3 = ifelse( user_pay_data$pay_method3 > 010)
user_pay_data$pay_method4 = ifelse( user_pay_data$pay_method4 > 010)
head(user_pay_data)                                             # 더미변수화(1 or 0) 확인  
 
 

cs


-- Files

cleanData.csv

user_data.csv

pay_data.csv


반응형

+ Recent posts