EDA
데이터 분석을 통한 결과값을 출력하기 전에 어떤 결과값을 낼 지 가설을 갖고 사전검증 하는 과정(시각화 수반)
1. 데이터의 column 의미를 훑으며 파악
getwd()
src_dir<-c("C:/Users/ESTHER/Desktop/ADP 실기/실습/Part-II")
setwd(src_dir)
dataset<-read.csv("dataset.csv", header = T)
# 1) 데이터 조회
names(dataset) # 변수 확인
attributes(dataset)
# $names $class $row.names
str(dataset)
# 'data.frame': 300 obs. of 7 variables:
# $variables type
nrow(dataset) # 행 수 반환
ncol(dataset) # 열 수 반환
length(dataset) # 열 수 반환
dim(dataset) # 300 7
# 2) 데이터셋 내용 보기
dataset
View(dataset)
head(dataset, 10)
tail(dataset)
2. 결측치 처리, 수치형/범주형 등 올바른 타입 정렬 (시각화를 위한 준비과정)
# 2. 결측치(NA) 처리
# 1) 결측치 확인
summary(dataset) # NA's
table(is.na(dataset))
# 2) 결측치 처리
# - 제거, 0, 평균, 통계적 방법
# (1) 결측치 제거
dataset2 <- na.omit(dataset) # 전체 변수 대상
dim(dataset) # 300 7
dim(dataset2) # 209 7 (91rows contain NA)
table(is.na(dataset2))
library(dplyr)
# 형식) df %>% filter(필터조건) -> 행선택
dataset20 <- dataset %>% filter(!is.na(price)) # 특정 변수 대상
summary(dataset20) # 5028 69
# (2) 0, 평균 대체
x <- dataset$price
# 0 대체
dataset$price2 <- ifelse(is.na(x), 0, x)
# 평균 대체
dataset$price3 <- ifelse(is.na(x),
mean(x, na.rm = T), x)
dataset[c("price", "price2", "price3")]
# (3) 통계적 방법 : 고객 유형별 NA 처리
# type : 1.우수, 2.보통, 3.저조
# 1. 우수 : mean(8.75)*1.5
# 2. 보통 : mean(8.75)
# 3. 저조 : mean(8.75)*0.5
dim(dataset) # 300 9
type <- rep(1:3, 100)
dataset$type <- type
head(dataset,30)
price4 <- numeric() # 통계적 방법
# 구매금액 평균
avg <- mean(dataset$price, na.rm = T)
for(i in 1:nrow(dataset)){ # 300회 반복
if(is.na(dataset$price[i])){ # NA
if(dataset$type[i] == 1){ # 1. 우수
price4[i] = avg * 1.5
}else if(dataset$type[i] == 2){ # 2. 보통
price4[i] = avg
}else{ # 3. 저조
price4[i] = avg * 0.5
}
}else{ # NOT NA
price4[i] <- dataset$price[i]
}
}
length(price4) # 300
# 칼럼 추가
dataset$price4 <- price4
dataset[c("price", "price2", "price3", "price4", "type")]
3. 적절한 시각화
# 1) 범주형(명목/서열) vs 범주형(명목/서열)
# - 방법 : table(), barplot, mosaicplot
# 거주지역, 성별 변수
resident_gender <- table(new_data$resident2,
new_data$gender2)
resident_gender # 행,열 -> 교차분할표
barplot(resident_gender, col=rainbow(5),
beside = T, horiz = T,
legend = row.names(resident_gender))
# beside = F : 누적형 막대차트
# legend : 범례
# row.names(resident_gender) : 행 이름 추출
전처리
0.(결측치는 이미 앞서 처리)
1. outlier 처리
2. transformation/normalization
*전처리 과정이 데이터 분석에 미치는 영향
(outlier처리) 정상 범주에서 벗어나는 이상치가 모델 학습에 영향을 미쳐 일반적인 현상을 설명하는데 적합하지 않은 모델로 학습되는 것을 방지할 수 있다. (transformation/normalization) 또한, log transformation 혹은 min max normalization를 통해 여러 변수 중 값의 범주가 혼자 달라 특정 변수의 영향력을 평가할 때 과대/과소평가할 수 있는 가능성을 배제할 수 있다. 특히, log transformation은 특정 변수가 한쪽으로 왜곡되어있을 때 이를 정규분포에 가깝게 만들어 더 적합한 모델을 구성하는데 도움을 줄 수 있다. (
https://laoonlee.tistory.com/5
https://kkokkilkon.tistory.com/175
*추가적으로 가능한 전처리: x변수가 많은 경우 차원의 저주 overfitting 가능성 확대. 차원 축소를 위한 PCA, 다중공선성 이슈 해결을 위한 corr 혹은 vif 확인 및 변수 삭제, 변수들의 조합을 통한 새로운 유의미한 변수 추가
'쫌쫌따리 통계+데이터+AI' 카테고리의 다른 글
알고리즘 성능 평가와 시각화(작성중) (0) | 2022.06.08 |
---|---|
Regression Algorithms (1) | 2022.06.08 |
AWS Machine Learning Specialty 10시간 호다닥 합격 (1) | 2022.04.17 |
24회 ADP 데이터 분석 전문가 실기 (22/03/26) (0) | 2022.03.26 |
텍스트 마이닝(Term Document Matrix) (0) | 2022.03.24 |
댓글