18. 코딩 변경


r

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(이름, 급여, 작성일자)







© 2019. by RaP0d

Powered by aiden