반응형
/*********************************************************************************************************
-- 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(2, 4),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 == 2, 1, 2) 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 > 0, 1, 0) user_pay_data$product_type2 = ifelse( user_pay_data$product_type2 > 0, 1, 0) user_pay_data$product_type3 = ifelse( user_pay_data$product_type3 > 0, 1, 0) user_pay_data$product_type4 = ifelse( user_pay_data$product_type4 > 0, 1, 0) user_pay_data$product_type5 = ifelse( user_pay_data$product_type5 > 0, 1, 0) 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 > 0, 1, 0) user_pay_data$pay_method2 = ifelse( user_pay_data$pay_method2 > 0, 1, 0) user_pay_data$pay_method3 = ifelse( user_pay_data$pay_method3 > 0, 1, 0) user_pay_data$pay_method4 = ifelse( user_pay_data$pay_method4 > 0, 1, 0) head(user_pay_data) # 더미변수화(1 or 0) 확인 | cs |
-- Files
반응형