본문 바로가기
쫌쫌따리 통계+데이터+AI

EDA(Exploratory Data Analysis) vs 전처리

by stherhj 2022. 6. 8.

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) : 행 이름 추출

https://zngsup.tistory.com/51

 

01_ 탐색적 데이터 분석 (EDA) - 데이터 시각화 (1)

탐색적 데이터 분석 (Exploratory Data Analysis) 이란 본격적인 모델링을 시작하기 전, 데이터에 대한 인사이트를 얻기 위해 데이터의 종류 및 분포 등을 확인하는 작업입니다. 이 과정을 거침으로서

zngsup.tistory.com

https://zngsup.tistory.com/52

 

02_ 탐색적 데이터 분석 (EDA) - 데이터 시각화 (2)

지난 글에서 분류형 데이터 (Categorical Data) 특성 별로 시각화하여 살펴보았습니다. 전반적으로 데이터 불균형이 확인되었으며, 희소한 데이터도 많아 모델 생성 및 학습 전 이를 해결해야할 것

zngsup.tistory.com

전처리 

 

0.(결측치는 이미 앞서 처리)

1. outlier 처리 

2. transformation/normalization

 

 

*전처리 과정이 데이터 분석에 미치는 영향

(outlier처리) 정상 범주에서 벗어나는 이상치가 모델 학습에 영향을 미쳐 일반적인 현상을 설명하는데 적합하지 않은 모델로 학습되는 것을 방지할 수 있다. (transformation/normalization) 또한, log transformation 혹은 min max normalization를 통해 여러 변수 중 값의 범주가 혼자 달라 특정 변수의 영향력을 평가할 때 과대/과소평가할 수 있는 가능성을 배제할 수 있다. 특히, log transformation은 특정 변수가 한쪽으로 왜곡되어있을 때 이를 정규분포에 가깝게 만들어 더 적합한 모델을 구성하는데 도움을 줄 수 있다. (

 

https://laoonlee.tistory.com/5

 

선형 회귀 모형 가정을 왜 하는가?

선형 회귀모형을 공부하다 보면 반드시 보게 되는 것이 회귀모형의 "가정"입니다. 물론 이 가정에 대해 아 그렇구나 하고 넘어가도 되지만, 왜 가정하는지 한 번 알아보는 것도 좋을 것 같습니다

laoonlee.tistory.com

https://kkokkilkon.tistory.com/175

 

선형 회귀분석의 4가지 기본가정

선형 회귀분석의 4가지 기본가정 How to make good linear regression model? 선형 회귀분석을 통해 좋은 모델을 만들기 위해서는 분석 데이터가 아래 4가지 기본가정을 만족해야 한다. 아래 4가지 기본가정

kkokkilkon.tistory.com

*추가적으로 가능한 전처리: x변수가 많은 경우 차원의 저주 overfitting 가능성 확대. 차원 축소를 위한 PCA, 다중공선성 이슈 해결을 위한 corr 혹은 vif 확인 및 변수 삭제, 변수들의 조합을 통한 새로운 유의미한 변수 추가

댓글