[ R ]EDA 코딩변경
코딩 변경
- 코딩 변경: 최초 코딩 내용을 용도에 맞게 변경하는 작업
- 코딩 변경 목적: 데이터의 가독성, 척도 변경, 역 코딩
(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 범주형 데이터 분포 시각화
#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()함수: 산점도 사용