18. 코딩 변경
in Study on R Programming
Overview
R에서 코딩 변경이 무엇인지, 언제 하는지 알아보는 실습을 한다.
예제 파일1 : board2.csv
예제 파일2 : member2.csv
예제 파일3 : dataset.csv
코딩 변경
코딩 변경 실습 1
# 코딩 변경 : 가독성을 위한 코딩 변경
# 최초 코딩 내용을 용도에 맞게 변경하는 작업.
# 이러한 코딩 변경은 데이터의 가독성, 척도 변경, 인코딩 변경등이 있다.
# 1, 2의 숫자를 남성, 여성 등으로 변경하면 가독성이 좋아짐
# like enum : 척도
dataset <- read.csv('dataset.csv', header = T)
dataset <- subset(dataset, dataset$price >= 2 & dataset $ price <= 8)
nrow(dataset)
# dataset$새컬럼[조건식] <- '값'
unique(dataset$resident)
dataset$resident2[dataset$resident == 1] <- '서울시'
dataset$resident2[dataset$resident == 2] <- '인천시'
dataset$resident2[dataset$resident == 3] <- '대전시'
dataset$resident2[dataset$resident == 4] <- '대구시'
dataset$resident2[dataset$resident == 5] <- '부산시'
head(dataset[c('resident', 'resident2')])
# job : 공무원, 회사원, 개인사업
unique(dataset$job)
dataset$job2[dataset$job == 1] <- '공무원'
dataset$job2[dataset$job == 2] <- '회사원'
dataset$job2[dataset$job == 3] <- '개인사업'
head(dataset[c('job', 'job2')])
# 척도 변경
sort(unique(dataset$age))
dataset$age2[dataset$age <= 30] <- '청년층'
dataset$age2[dataset$age <= 60 & dataset$age > 30] <- '중년층'
dataset$age2[dataset$age > 60] <- '장년층'
head(dataset[c('age', 'age2')])
survey <- dataset$survey
maxval <- max(survey)
csurvey <- maxval + 1 - survey
dataset$survey2 <- csurvey
head(dataset[c('survey', 'survey2')])
코딩 변경 실습 2
abcCsv = read.csv("abc.csv", header=TRUE)
abcCsv
#
# # 나이가 30세 이하는 "청년층", 45세 이하는 "중년층", 이외는 "장년층"이라고 하자.
# # age2 컬럼을 코딩 변경(리코딩)하시오.
#
sort(unique(abcCsv$age))
abcCsv$age2[abcCsv$age <= 30] <- '청년층'
abcCsv$age2[abcCsv$age <= 45 & abcCsv$age > 30] <- '중년층'
abcCsv$age2[abcCsv$age > 45] <- '장년층'
head(abcCsv[c('age', 'age2')])
# # 청년층 = 1, 중년층 = 2, 장년층 = 3이라고 하자.
# # 숫자 1, 2, 3을 컬럼으로 가지는 age3 컬럼을 코딩 변경(리코딩)하시오.
#
sort(unique(abcCsv$age))
abcCsv$age3[abcCsv$age2 == '청년층'] <- 1
abcCsv$age3[abcCsv$age2 == '중년층'] <- 2
abcCsv$age3[abcCsv$age2 == '장년층'] <- 3
head(abcCsv[c('age', 'age2', 'age3')])
# head(abcCsv[c("age", "age2", "age3")])
# # age age2 age3
# # 1 10 청년층 1
# # 2 20 청년층 1
# # 3 30 청년층 1
# # 4 40 중년층 2
# # 5 50 장년층 3
# # 6 60 장년층 3
#
# # total 변수를 이용해 High 그룹과 Low 그룹으로 나누기
# # High 그룹은 60이상이라고 가정한다.
# # 이하는 'low'라고 가정한다.
# # 이것을 위한 abcCsvtotal 컬럼을 리코딩하시오.
#
sort(unique(abcCsv$total))
abcCsv$abcCsvtotal[abcCsv$total < 60] <- 'Low'
abcCsv$abcCsvtotal[abcCsv$total >= 60] <- 'High'
head(abcCsv[c('total', 'abcCsvtotal')])
# # survey 변수를 이용해 만족 그룹(Good)과 불만족 그룹(Bad)으로 나누기
# # 만족 그룹(Good)은 3이상이라고 가정한다.
#
sort(unique(abcCsv$survey))
abcCsv$survey2[abcCsv$survey < 3] <- 'Bad'
abcCsv$survey2[abcCsv$survey >= 3] <- 'Good'
head(abcCsv[c('survey', 'survey2')])
abcCsv
#
# 최종 결과는 다음과 같다.
# gender job age position address total check price survey age2 age3
# 1 1 1 10 2 seoul 50 5 1200 3 청년층 1
# 2 1 2 20 5 busan 80 NA NA NA 청년층 1
# 3 1 2 30 4 daegu 60 5 2500 2 청년층 1
# 4 1 3 40 4 busan 70 3 1200 5 중년층 2
# 5 2 3 50 5 seoul 50 3 1400 6 장년층 3
# 6 2 2 60 7 daegu 40 3 3000 1 장년층 3
#
# abcCsvtotal abcCsvsurvey
# 1 low Good
# 2 high <NA>
# 3 high Bad
# 4 high Good
# 5 low Good
# 6 low Bad
코딩 변경 실습 3
# 변수 member에 member2.csv 파일 내용을 저장하세요.
# 변수 board에 board2.csv 파일 내용을 저장하세요.
member <- read.csv('member2.csv')
board <- read.csv('board2.csv')
member
board
# ---------------------------------------------------------------------------------
# 변수 member
# 성별 컬럼을 이용하여 성별2 컬럼을 리코딩하시오.
# 1:남자, 2:여자
#
sort(member$성별)
member$gender2[member$성별 == 1] <- 'Male'
member$gender2[member$성별 == 2] <- 'Female'
member$gender2
# 적립포인트 컬럼을 이용하여 적립포인트2 컬럼을 리코딩하시오.
# 포인트가 200이상이면 우수고객, 이하이면 일반고객이다.
sort(member$적립포인트)
member$vip[member$적립포인트 < 200] <- '일반고객'
member$vip[member$적립포인트 >= 200] <- '우수고객'
member$vip
member
# ---------------------------------------------------------------------------------
# 변수 board
# 조회수 컬럼을 이용하여 조회수2 컬럼을 리코딩하시오.
# 조회수2 컬럼 : 조회수가 3이상이면 '좋음', 3미만이면 '나쁨'으로 표현하도록 한다.
#
sort(board$조회수)
board$good[board$조회수 >= 3] <- 'Good'
board$good[board$조회수 < 3] <- 'Bad'
board$good
# plyr 패키지의 join 함수를 이용하여 result 변수에 2개의 변수(member, board)를 병합하시오.
#
library(plyr)
res <- join(member, board, by='아이디')
res
# 앞서 구한 result 변수와 ddply 함수를 이용하여 newdata 변수를 만드세요.
# newdata 변수에는 회원 이름별로 조회수의 평균과 적립 포인트의 토탈 금액을 구하시오.
newdata <- ddply(res, .(이름), summarise, 조회수평균 = mean(조회수, na.rm = T), 적립포인트총합 = sum(적립포인트, na.rm = T))
newdata
# newdata 변수를 이용하여 가로 막대 그래프를 그리시오.
# 단, 조회수의 평균은 수치 100*을 곱하여 그리도록 한다.
#
library(ggplot2)
barplot(newdata$조회수평균 * 100, horiz = T)
# 일련 번호가 1이거나 3인 데이터만 조회하되, 이름 급여 작성 일자만 조회하시오.
# 단, 일련 번호의 역순으로 조회하시오.
res
filter(res, 일련번호 %in% c(1, 3)) %>% arrange(desc(일련번호)) %>% select(이름, 급여, 작성일자)