본문 바로가기
취미/자격증

[데이터분석 전문가/준전문가] 과목 4 - 1장 - R 기초와 데이터 마트 3

by UltraLowTemp-Physics 2020. 11. 20.

제 3절 결측값 처리와 이상값 검색 


1. 데이터 탐색

■ 데이터 기초 통계 

head(<data>) : <data>에서 앞 6줄만 보도록 한다. 
head(<data>, n) : <data>에서 앞에서 n번째 줄까지 보도록 한다.
str(<data>): <data>의 구조를 파악한다. 
summary(<data>): <data>의 기초 통계량들을 확인한다.
   - 평균값, 표준편차, 분산, 중앙값 등을 출력
   - 범주형 변수의 경우, 각 범주에 대한 빈도수를 출력하여 데이터의 분포를 파악 
   - 연속형 변수의 경우, cov와 cor 함수를 통해 공분산행렬과 상관계수행렬를 출력

1) head(iris)

python
접기
> data("iris")
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa

 

2) head(iris, 10)

python
접기
> head(iris, 10)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5.0 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa

 

3) str(iris)

python
접기
> str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

 

4) summary(iris)

python
접기
> summary(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50
Median :5.800 Median :3.000 Median :4.350 Median :1.300 virginica :50
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500

 

2. 결측값 (Missing Data) 처리 

• R에서 결측값 처리와 관련된 패키지: Amelia 2, Mice, mistools
 1) 결측값을 NA(not Available)로 처리함
 2) 불가능한 값은 NaN (Not a number)로 처리함 
    - is.na()를 이용하여 결측값인지 여부를 파악가능 
• 일반적인 결측값 처리 방식은 결측값이 포함된 해당 레코드를 모두 삭제하는 것이지만, 전체적으로 결측값이 많은 레코드에 분포할 경우에는 많은 자료가 삭제되므로 정보를 획득하기 어려워 질 수 있다.
• 변수들 간의 관계를 이용해, imputation을 하는 방법이 결측값을 처리하는데에 효율적이다.

3. 이상값 (Outlier) 검색

• 분석에서 전처리를 어떻게 할지를 결정할 때와 부정사용 방지 시스템에서 규칙을 발견하는데에 사용할 수 있음
• 이상값이란?
(a) a1: 의도하지 않게 잘못 입력한 경우 
(b) a2: 의도하지 않게 입력되었지만, 분석 목적에 부합되지 않아 제거해야하는 경우 
(c) a3: 의도되지 않은 현상이지만 분석에 포함해야하는 경우
(d) b1: 의도된 이상값 (대부분의 b1은 사기(fraud)) 
※ a1, a2: bad data
※ a3, b1: 이상값 

• 이상값과 관련된 알고리즘: ESD (extreme studentized deviation), MADM
※ 실전에서는 이상값을 찾기 위해 너무 많은 시간을 쓰지 않는 것을 추천하지만, 부정사용 프로젝트 같은 경우에는 시간을 많이 할당하여야 한다. 

• 이상값을 확인하는 방법 
1) boxplot을 이용 
2) "outliers" 패키지를 사용
  - 이상값일 가능성이 큰 값을 찾아내어 줌 
  - 평균과 가장 큰 차이가 있는 값을 알려줌 
  - opposite=TRUE라는 옵션을 사용하면 반대편으로 평균과 가장 큰 값을 알려줌 

python
접기
> library("outliers")
> set.seed(1234)
> y=rnorm(100)
> outlier(y) # 평균과 가장 차이가 많이 나는 값 출력
[1] 2.548991
> outlier(y, opposite=TRUE) # 반대 방향으로 가장 차이가 많이 나는 값 출력
[1] -2.345698
> dim(y) = c(20, 5) # 행 20 열 5의 행렬 생성
> outlier(y) # 각 열의 평균과 가장 차이가 많은 값을 열별로 출력
[1] 2.415835 1.102298 1.647817 2.548991 2.121117
> outlier(y, opposite = TRUE)
[1] -2.345698 -2.180040 -1.806031 -1.390701 -1.372302
> boxplot(y)