오늘은 데이터 가공에 대해 알아보도록 하겠습니다.
데이터를 훑어보는 법, 결측값과 이상값 처리에 대해 알아볼게요.
-변수의 중요도
: 분석용 데이터 마트를 구축함에 있어서 가장 중요한 부분은 변수의 중요도를 체크하는 것입니다. 모든 변수를 사용하여 모델을 만들 수 없으므로,
최적의 변수셋을 모형개발에 활용하는 것이 좋습니다.
-연속형 변수의 구간화
: 연속형 변수를 구간화 하는 이유는, 결과를 잘 해석할 수 있도록 적용하는 것입니다.
-결측치와 이상치의 처리방안
: 데이터마트에 결측치와 이상치가 있는 경우, 반드시 데이터클린징을 해야 합니다. 클린징에는 결측치와 이상치를 삭제하는 방법도 있지만,
특정 값으로 대치하거나 그냥 쓸 수도 있습니다. 데이터가 적은 경우 가급적 대치하는 것이 좋습니다.
1. Data Exploration
데이터 분석을 위한 구성된 데이터의 변수들의 상태를 파악한다.
자주 사용하는 함수 : head(), summary()
summary() - 수치형 변수 : 최대값, 최소값, 평균, 1사분위수, 2사분위수(중앙값), 3사분위수
- 명목형 변수 : 명목 값, 데이터 개수
install.packages("ggplot2")
require(ggplot2)
data(diamonds)
dia.data<-diamonds
head(dia.data)
# A tibble: 6 x 10
carat cut color clarity depth table price x y z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
4 0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63
5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
summary(dia.data)
carat cut color clarity depth
Min. :0.2000 Fair : 1610 D: 6775 SI1 :13065 Min. :43.00
1st Qu.:0.4000 Good : 4906 E: 9797 VS2 :12258 1st Qu.:61.00
Median :0.7000 Very Good:12082 F: 9542 SI2 : 9194 Median :61.80
Mean :0.7979 Premium :13791 G:11292 VS1 : 8171 Mean :61.75
3rd Qu.:1.0400 Ideal :21551 H: 8304 VVS2 : 5066 3rd Qu.:62.50
Max. :5.0100 I: 5422 VVS1 : 3655 Max. :79.00
J: 2808 (Other): 2531
table price x y
Min. :43.00 Min. : 326 Min. : 0.000 Min. : 0.000
1st Qu.:56.00 1st Qu.: 950 1st Qu.: 4.710 1st Qu.: 4.720
Median :57.00 Median : 2401 Median : 5.700 Median : 5.710
Mean :57.46 Mean : 3933 Mean : 5.731 Mean : 5.735
3rd Qu.:59.00 3rd Qu.: 5324 3rd Qu.: 6.540 3rd Qu.: 6.540
Max. :95.00 Max. :18823 Max. :10.740 Max. :58.900
z
Min. : 0.000
1st Qu.: 2.910
Median : 3.530
Mean : 3.539
3rd Qu.: 4.040
Max. :31.800
#이런 식으로 탐색이 가능합니다.
2. 변수 중요도
-변수 선택법과 유사한 개념으로 모형을 생성하여, 사용된 변수의 중요도를 살피는 과정입니다.
-klaR패키지 : 특정 변수가 주어졌을 때 클래스가 어떻게 분류되는 지에 대한 에러율을 돌려주고, 그래픽으로 결과를 보여줌.
-greedy.wilks() : 세분화를 위한 stepwise forward 변수선택을 위한 패키지. 종속변수에 가장 영향력을 미치는 변수를 wilks lambda를 활용하여 중요도 정리
-Wilk's Lambda : 집단내분산 / 총분산
plineplot()을 이용한 iris 데이터 예제
install.packages("klaR")
library(klaR)
a<-iris
plineplot(Species ~., data=a, method="lda", x=iris[,4], xlab="Petal.Width")
즉, Petal.Width에 따라 Species 별로 분포가 다른 점을 파악할 수 있습니다. 이러한 경우,
Petal.Width를 그룹핑하여 categorical variable 즉, 범주형으로 만들어주면 해석이 용이해 질 수 있습니다.
mN<-NaiveBayes(Species~., data=iris)
par(mfrow=c(2,2))
plot(mN)
#위는 2X2의 그래프칸을 만들고 plot을 그리는 겁니다.
#한눈에 보기 정말 용이합니다..ㅎㅎ
3. 변수의 구간화
-신용평가모형, 고객 세분화 등 시스템으로 모형을 적용하기 위해서는 각 변수들을 구간화해서
구간별로 점수를 적용할 수 있어야 한다.
-binning : 연속형 변수를 범주형 변수로 변형하는 방식. 각각 동일한 개수의 레코드를 50개 이하의 구간에
데이터를 할당하여 구간들을 병합하면서 구간을 줄여나가는 방식의 구간화 방식
-의사결정나무 : 세분화 또는 예측에 활용되는 의사결정나무 모형을 활용하여 활용되는 입력변수를 구간화
4. 데이터 결측값 처리
-결측값의 표현 : NA, . , 99999999, ' ' , Unknown, Not Answer 등으로 표현
-결측값을 처리하기 위해 많은 시간을 소비하는 것은 비효율적
-결측값 자체가 의미가 있는 경우도 있다. (쇼핑몰 가입자 중 특정 거래 자체가 존재하지 않는 경우)
-결측값 처리가 전체 작업속도에 많은 영향을 준다.
-결측값이 있는 자료의 평균 구하기 ex ) mean(x, na.rm=T)
5. 결측값 처리 방법
단순 대치법 (Single Imputation)
1) completes analysis : 결측값이 존재하는 모든 레코드를 삭제
2) 평균대치법 ( Mean Imputation) : 얻어진 데이터의 평균으로 대치 , 조건부평균대치법 - 회귀분석을 활용한 대치법
3) 단순확률 대치법(Single Stochastic Imputation) : 평균대치법에서 추정량 표준 오차의 과소 추정문제를 보완하고자
고안된 방법으로 Hot-deck 방법, nearest-neighbour 방법 등이 있다.
4) 다중대치법 (Multiple Imputation)
-단순대치법을 한 번이 아닌 m번의 대치를 통해 m개의 가상적 완전 자료를 만드는 방법
- 1단계 : 대치, 2단계 : 분석, 3단계 : 결합
-Amelia-time series cross sectional data set에서 bootstrapping based algorithm을 활용한 다중 대치법
6. R에서 결측값 처리
-랜덤 포레스트 ( random forest)모델은 결측값이 존재할 경우, 바로 에러를 발생함.
-randomForest 패키지의 rfImpute()함수를 활용하여 NA결측값을 대치한 후 알고리즘에 적용
-결측값 관련한 함수
1) complet.cases() : 데이터내 레코드에 결측값이 있으면 FALSE, 없으면 TRUE 반환
2) is.na() : 결측값이 NA인지 반환
3) DMwR패키지의 centralImputation() : NA 값에 가운데 값(central value)으로 대치, 숫자-중위수, factor-최빈값
4) DMwR패키지의 knnImputation() : NA값을 k최근 이웃 분류 알고리즘을 사용하여 대치, k개 주변 이웃까지의 거리를 고려하여 가중 평균한 값을 사용.
5) Amelia 패키지의 amelia() : time-series-cross-sectional data set에서 활용
7. 이상값 (Outlier)찾기와 처리
-의도하지 않게 잘못 입력한 경우 (bad data)
-의도하지 않게 입력되었으나 분석 목적에 부합되지 않아 제거해야 하는 경우 (bad data)
-의도하지 않은 현상이지만 분석에 포함해야 하는 겨우
-의도된 이상값(fraud, 불량)인 경우
<이상값의 인식 방법>
1)ESD(Extreme Studentized Deviation) : 평균으로부터 3 표준편차 떨어진 값
2)기하평균-2.5 X 표준편차 < data < 기하평균 +2.5X표준편차
3)사분위수 이용하여 제거하기 (상자 그림의 outer fence 밖에 있는 값 제거)
이상값 정의 : Q1-2.5(Q3-Q1) <data< Q3+2.5(Q3-Q1)를 벗어나는 데이터
<극단값 절단(trimming)방법>
1) 기하평균을 이용한 제거 geo_mean
2) 하단, 상단% 이용한 제거
3) 10% 절단(상하위 5%에 해당되는 데이터 제거)
<극단값 조정(winsorizing) 방법>
-상한값과 하한값을 벗어나는 값들을 하한, 상한 값으로 바꾸어 활용하는 방법
- 극단값 조정방법이 절단법보다 데이터 손실율도 적고, 설명력도 높아진다.
하아 힘둘당 오늘은 여기까지 보도록 하겠습니다.
'## 오래된 게시글 (미관리) ## > R' 카테고리의 다른 글
37. 기초통계분석 (0) | 2018.11.22 |
---|---|
36. 데이터분석의 이해 (0) | 2018.11.22 |
34. 데이터 마트 II (0) | 2018.11.22 |
33. 데이터마트 (0) | 2018.11.22 |
32. 데이터 변형 (0) | 2018.11.22 |