Programming/R

[ R ]EDA 코딩변경

yul_S2 2022. 11. 21. 08:43
반응형

코딩 변경

  • 코딩 변경: 최초 코딩 내용을 용도에 맞게 변경하는 작업
  • 코딩 변경 목적: 데이터의 가독성, 척도 변경, 역 코딩

(1) 가독성을 위한 코딩 변경

일반적으로 데이터는 디지털화하기 위해서 숫자로 코딩

 

 

ex ) 가독성을 위해 resident 컬럼을 대상으로 코딩 변경

dataset2$resident2[dataset2$resident == 1] <- '1.서울특별시'
dataset2$resident2[dataset2$resident == 2] <- '2.인천광역시'
dataset2$resident2[dataset2$resident == 3] <- '3.대전광역시'
dataset2$resident2[dataset2$resident == 4] <- '4.대구광역시'
dataset2$resident2[dataset2$resident == 5] <- '5.시구군'

 

 

#1 코딩 변경 전과 변경 후의 칼럼 보기

dataset2[c("resident","resident2")]
# resident    resident2
# 1          1 1.서울특별시
# 2          2 2.인천광역시
# 3         NA         <NA>
# 4          4 4.대구광역시
# 5          5     5.시구군
#           ....          ...

 

#2 가독성을 위해 job 칼럼을 대상으로 코딩 변경하기

dataset2$job2[dataset2$job == 1] <- '공무원'
dataset2$job2[dataset2$job == 2] <- '회사원'
dataset2$job2[dataset2$job == 3] <- '개인사업'

 

 

#3 코딩 변경 전과 변경 후의 칼럼 보기

dataset2[c("job", "job2")]
# job     job2
# 1     1   공무원
# 2     2   회사원
# 3     2   회사원
# 4    NA     <NA>
# 5     3 개인사업
# 6     2   회사원
#       ...          ...

 

 

 

(2) 척도 변경을 위한 코딩 변경

나이 같은 연속형 변수를 20대, 30대 같이 범주형 변수로 변경

 

ex ) 나이를 나타내는 age컬럼을 대상으로 코딩 변경하기

dataset2$age2[dataset2$age <= 30] <- "청년층"
dataset2$age2[dataset2$age > 30 & dataset2$age <= 55] <- "중년층"
dataset2$age2[dataset2$age > 55 ] <- "장년층"

head(dataset2)
# resident gender job age position price survey    resident2     job2   age2
# 1        1      1   1  26        2   5.1      1 1.서울특별시   공무원 청년층
# 2        2      1   2  54        5   4.2      2 2.인천광역시   회사원 중년층
# 3       NA      1   2  41        4   4.7      4         <NA>   회사원 중년층
# 4        4      2  NA  45        4   3.5      2 4.대구광역시     <NA> 중년층
# 5        5      1   3  62        5   5.0      1     5.시구군 개인사업 장년층
# 6        3      1   2  57       NA   5.4      2 3.대전광역시   회사원 장년층
  • 상관관계 분석이나 회귀분석: 연속형 변수가 적합
  • 빈도분석이나 교차분석: 범주형 변수가 적합

 

 

(3) 역 코딩을 위한 코딩 변경

  • 만족도 평가를 위해 설문지 문항을 5점 척도인 (1)매우만족, (2)만족, (3)보통, (4),불만족, (5) 매우 불만족 형태로 작성된 경우 이를 역순으로 변경해야 한다
  • 역코딩(inverse coding): 순서를 역순으로 변경

 

ex ) 만족도를 긍정순서로 역코딩

survey <- dataset2$survey
csurvey <- 6 - survey
csurvey
# [1] 5 4 2 4 5 4 2 3 3 1 3 4 4 4 5 4 4 4 4 4 5 4 3 3 3 3 3 4 4 5 4 3 3 1 4 4 4 2 4
# [40] 3 4 2 4 5 2 4 4 3 2 3 5 4 4 4 3 2 3 1 2 4 4 2 4 3 2 3 3 3 4 4 4 4 2 4 5 3 3 3
# [79] 3 4 4 4 3 3 3 1 3 4 4 4 5 4 4 4 3 3 3 3 3 3 3 3 3 3 5 2 4 4 3 3 2 3 3 2 3 3 2
# [118] 3 3 3 4 4 4 3 3 3 4 5 4 4 1 4 4 3 3 2 3 3 3 3 3 2 4 4 4 4 4 4 5 4 4 4 3 2 3 2
# [157] 3 3 3 3 3 3 3 4 4 4 4 4 5 4 4 4 3 3 3 3 3 3 3 3 2 3 3 4 2 4 4 4 4 4 5 4 4 4 4
# [196] 3 3 2 3 3 3 4 4 4 3 3 3 3 3 3 2 3 2 4 4 3 2 3 3 3 2 4 5 4 2 3 3 3 4 1 4 4 4 4
# [235] 4

dataset2$survey <- csurvey 
head(dataset2)
# resident gender job age position price survey    resident2     job2   age2
# 1        1      1   1  26        2   5.1      5 1.서울특별시   공무원 청년층
# 2        2      1   2  54        5   4.2      4 2.인천광역시   회사원 중년층
# 3       NA      1   2  41        4   4.7      2         <NA>   회사원 중년층
# 4        4      2  NA  45        4   3.5      4 4.대구광역시     <NA> 중년층
# 5        5      1   3  62        5   5.0      5     5.시구군 개인사업 장년층
# 6        3      1   2  57       NA   5.4      4 3.대전광역시   회사원 장년층

 

변수 간의 관계 분석

  • 척도별로 시각화하여 데이터의 분포형태를 분석
  • 명목척도와 서열척도의 범주형 변수와 비율척도의 연속형 변수간의 탐색적 분석 위주

 

(1) 범주형 vs. 범주형

  • 명목척도 또는 서열척도 같은 범주형 변수를 대상으로 시각화하여 컬럼 간의 데이터 분 포형태 파악

ex ) 범주형 vs 범주형 데이터 분포 시각화

 

new_data.csv
0.01MB

 

 

#1 데이터 가져오기

new_data <- read.csv("c:/new_data.csv", header = TRUE)
str(new_data)
# 'data.frame': 231 obs. of  15 variables:
#   $ resident : int  1 2 4 5 3 2 2 5 3 1 ...
# $ gender   : int  1 1 2 1 1 2 1 2 1 1 ...
# $ job      : int  1 2 NA 3 2 1 2 NA 3 1 ...
# $ age      : int  26 54 45 62 57 36 37 29 35 56 ...
# $ position : int  4 1 2 1 NA 3 3 4 4 1 ...
# $ price    : num  5.1 4.2 3.5 5 5.4 4.1 4.9 2.3 4.2 6.7 ...
# $ survey   : int  5 4 4 5 4 2 3 1 3 4 ...
# $ price2   : num  5.1 4.2 3.5 5 5.4 4.1 4.9 2.3 4.2 6.7 ...
# $ price3   : num  5.1 4.2 3.5 5 5.4 4.1 4.9 2.3 4.2 6.7 ...
# $ resident2: chr  "1.서울특별시" "2.인천광역시" "4.대구광역시" "5.시구군" ...
# $ job2     : chr  "공무원" "회사원" NA "개인사업" ...
# $ age2     : chr  "청년층" "중년층" "중년층" "장년층" ...
# $ position2: chr  "4급" "1급" "2급" "1급" ...
# $ gender2  : chr  "남자" "남자" "여자" "남자" ...
# $ age3     : int  1 2 2 3 3 2 2 1 2 3 ...

 

#2 코딩 변경된 거주지역(resident) 컬럼과 성별(gender) 컬럼을 대상으로 빈도수 구 하기

resident_gender <- table(new_data$resident2, new_data$gender2)
resident_gender
#                      남자 여자
# 1.서울특별시   67   43
# 2.인천광역시   26   20
# 3.대전광역시   16   10
# 4.대구광역시    6    9
# 5.시구군          19   15

gender_resident <- table(new_data$gender2, new_data$resident2)
gender_resident
# 1.서울특별시 2.인천광역시 3.대전광역시 4.대구광역시 5.시구군
# 남자           67               26                16                   6           19
# 여자           43              20                10                    9           15

 

 

#3 성별(gender)에 따른 거주지역(resident)의 분포 현황 시각화


barplot(resident_gender, beside = T, horiz = T,
        col = rainbow(5), 
        legend = row.names(resident_gender),
        main = '성별에 따른 거주지역 분포 현황')


 

 

#4 거주지역(resident)에 따른 성별(gender)의 분포 현황 시각화

barplot(gender_resident, beside = T,
        col = rep(c(2, 4), 5), horiz = T,
        legend = c("남자", "여자"),
        main = '거주지역별 성별 분포 현황')

 

 

 

(2) 연속형 vs. 범주형

  • 연속형 변수(나이)와 범주형 변수(직업 유형)를 대상으로 시각화하여 컬럼 간의 데이터 분포 형태 파악

ex ) 연속형 vs 범주형 데이터의 시각화

#1  lattice 패키지 설치와 메모리 로딩 및 데이터 준비

install.packages("lattice")
library(lattice)

lattice패키지: 고급 시각화 분석에서 사용되는 패키지. Ch8 고급 시각화 분석에서 해당 패키지의 특징과 관련 함수에 대해 설명

 

 

#2 직업 유형에 따른 나이 분포 현황

densityplot(~ age, data = new_data, 
            groups = job2, 
            # plot.points = T: 밀도, auto.key = T: 범례)
            plot.points = T, auto.key = T)

 

 

 

 

(3) 연속형 vs. 범주형 vs. 범주형

  • 연속형 변수(구매비용), 범주형 변수(성별), 범주형 변수(서열)을 대상으로 시각화하여 컬 럼 간의 데이터 분포 형태 파악

ex ) 연속형 vs 범주형 vs 범주형 데이터 분포 시각화

#1

densityplot(~ price | factor(gender), 
            data = new_data, 
            groups = position2, 
            plot.points = T, auto.key = T)



  • densityplot()함수 사용
  • Where 속성
  • factor(gender2): 격자를 만들어주는 컬럼을 지정하는 속성(성별로 격자 생성)
  • groups = position2: 하나의 격자에서 그룹을 지정하는 속성(직급으로 그룹 생성)

 

 

#2 직급에 따른 성별 구매비용 분석

densityplot(~ price | factor(position2), 
            data = new_data, 
            groups = gender2, 
            plot.points = T, auto.key = T)

 

 

 

 

(4) 연속형(2개) vs. 범주형(1개)

  • 연속형 변수 2개(구매비용, 나이)와 범주형 변수 1개(성별)을 대상으로 시각화하여 칼럼 간의 데이터분포형태 파악

ex ) 연속형(2개) vs 범주형(1개) 데이터 분포 시각화

xyplot(price ~ age | factor(gender2), 
       data = new_data)

  • xyplot()함수: 산점도 사용

 

 

반응형