My Log

[ADsP #8] 데이터 분석 1장 - R 기초와 데이터마트(2) 본문

자격증 기록/ADsP(데이터분석 준전문가)

[ADsP #8] 데이터 분석 1장 - R 기초와 데이터마트(2)

My Log 2019. 8. 12. 09:00

* 시작하기에 앞서 본 게시물에 포함된 내용은 한국데이터산업진흥원에서 발행한 [데이터 분석 전문가 가이드, 2019년 2월 8일 개정]

   에 근거한 것임을 밝힙니다.

 

 

1. 데이터 마트

 가. 데이터 마트란?

   - 데이터의 한 부분으로서 특정 사용자가 관심을 갖는 데이터들을 담은 비교적 작은 규모의 데이터 웨어하우스

   - 데이터 웨어하우스의 일부 데이터를 가지며 특정 사용자를 대상으로 한다. (사용자의 기능 및 제공 범위가 다름)

 

 

 나. reshape

   - 기존 데이터 구조를 column-wise하게 전환

   - 크게 melt와 cast단계로 구분

      1) melt : id 값을 기준으로 하여 나머지 변수에 대한 데이터를 생성

                       > aqm = melt ( airquality ,  id = c ( "month" , "day" ) , na.rm = TRUE)

                       > aqm

                                 month     day     variable     value

                       1                   5          1         ozone        41.0

                       2                   5          2         ozone        36.0

                       ...

                       117              5          1        solar.r       190.0

                       118              5          2        solar.r       118.0

                       ... ...

 

      2) cast : 엑셀에서 피벗팅을 하듯이 자료 변형

                       (margin 옵션 : 행과 열의 소계 산출 / subset 옵션 : 특정변수만 처리 / range 옵션 : min, max값 표시)

                       > a <- cast ( aqm , day ~ month ~ variable )

                       > a

                       ,  ,  variable = ozone

                                     month

                       day           5           6           7           8           9

                            1          41        NA        135      39         96

                            2          36        NA          49       9           78

                       ...

 

                       ,  ,  variable = solar.r

                                     month

                       day           5           6           7           8           9

                            1        190      286      269        83        167

                            2        118      287      248        24        197

                       ... ...

 

 

 다. sqldf

   - sqldf 패키지를 통해 표준 SQL에서 사용되는 문장이 모두 가능

   - 데이터 이름에 "."같은 특수문자가 들어간 경우 '' 로 묶어주면 테이블처럼 간단히 처리 가능

        # 패키지 설치

      > install.packages("sqldf")

      > library(sqldf)

      > data(iris)

 

      > sqldf ( "select * from iris" )

      > sqldf ( "select * from iris limit 10" )          # 첫 10개 행 조회

      > sqldf ( "select count(*) from iris where Species like 'se%'" )         # Species 속성값이 'se'로 시작하는 개수 출력

 

 

 라. plyr

   - 데이터를 분리하고 처리한 다음, 다시 결합하는 등 가장 필수적인 데이터 처리기능 제공

   - apply 함수에 기반해 데이터와 출력변수를 동시에 배열로 치환하여 처리하는 패키지

   - apply 함수와 multi-core 사용 함수를 이용하면 for를 사용하지 않고 간단하고 빠르게 처리가능

 

   - ply() 함수는 앞에 두 개의 문자를 접두사로 가지는데, 첫 번째 문자는 입력데이터, 두 번째 문자는 출력 데이터 형태이다.

     ˙d : 데이터 프레임

     ˙a : 배열

     ˙l : 리스트

     ˙ 예) ddply : 데이터 프레임을 입력받아 어떤 처리를 한 후 데이터 프레임으로 출력

 

   - summarise 옵션 : 평균이나 합 등을 계산해주고, 새로 생긴 변수만 보여줌

   - transform 옵션 : 평균이나 합 등을 계산해주고, 계산에 사용된 변수도 출력

 

 

 마. 데이터 테이블

   - 데이터 프레임과 유사하지만 보다 빠른 그룹화와 순서화, 짧은 문장 지원 측면에서 더 매력적

   - 무조건 빠른 것이 아니므로, 특성에 맞게 사용해야 함 (64비트 환경에서 RAM이 충분히 많을 때 효율적)

   - "data.table" 패키지 설치

      > DT = data.table ( x = c ( "b", "b", "b", "a", "a" ) , v = rnorm(5) )

      > DT

             x                 v

       1:  b   -0.12353

       2:  b     0.37592

       3:  b   -0.10953

       4:  a     0.08614

       5:  a     0.99806

 

      > tables()           # 크기, key 여부, 용량 파악

      > sapply(DT, class)     # x, v의 type 파악

      > setkey(DT, x)      # x를 key로 지정 (DT 출력시 x값에 따라 오름차순 정렬)

 

   - 데이터 프레임과의 차이

     ˙행 번호가 콜론(:)으로 프린트되어 첫 번째 열을 쉽게 구분

     ˙자료 검색시 index를 이용한 바이너리 검색 수행 (데이터 프레임은 모든 자료를 비교해 찾는 벡터 검색 방식)

 

 

 

 

2. 결측값 처리 및 이상값 검색

 가. 데이터 탐색

   - 데이터를 분석하기 전에 대략적인 데이터의 특성 및 통찰을 얻기 위해 다각도로 탐색한다.

 

   1) head(data, n) : 데이터 일부 확인

   2) str(data) : 데이터의 구조 파악

   3) summary(data) : 데이터의 기초통계량 확인

   4) cov, cor : 공분산과 상관계수 확인

 

 

 나. 결측값(Missing Data) 처리

   - 결측값 처리에 많은 시간을 소모하는 것은 비효율적이다.

   - 결측값은 삭제, 대표값으로 대체, 변수간의 관계를 이용해 imputation 하는 방법이 존재한다.

 

   - R 에서는 Amelia II, Mice, mistools 등 여러 패키지를 활용하여, 결측값 처리를 자동화하고 효율성을 향상시킨다.

   - R 에서 결측값은 NA(Not Available)로 처리한다.

     cf) '0으로 나눈 값'처럼 불가능한 값은 NaN(Not a Number)으로 처리

 

   1) 결측값 확인하기

         > y <- c ( 1 , 2 , 3 , NA)

         > is.na(y)

          [1]   FALSE   FALSE   FALSE   TRUE

 

   2) 특정값을 결측값으로 변환

         > mydata [ mydata$v1==99, "v1" ]  <- NA         # mydata의 v1속성에서 '99'인 값을 결측값으로 변환

 

   3) 결측값 제외

         > x <- c ( 1 , 2 , NA , 3 )

         > mean(x)                 # 평균 산출 시 결측값으로 인해 데이터 처리 불가

          [1]   NA

         > mean(x, na.rm=T)        # 결측값 제거옵션을 True로 설정하여 결측값 제외 후 계산

          [1]   2

 

   4) 결측값이 포함된 관측치 삭제

         > mydata [ !complete.cases(mydata) , ]

 

 

 다. 이상값(Outlier) 검색

   - 분석에서 전처리를 어떻게 할지 결정할 때와 부정사용방지 시스템(FDS)에서 규칙을 발견하는데 사용

   - 일정 기간을 할애해 분석 기준을 수립하고, 기준에 따라 드러나지 않은 것은 무시하고 진행해야 함

   - 관련 알고리즘 : ESD, MADM 등

 

   - 분류

   1) bad data

         ˙의도하지 않게 잘못 입력한 경우

         ˙의도하지 않게 입력됐으나 분석 목적에 부합하지 않아 제거해야 하는 경우

   2) 이상값

         ˙의도되지 않은 현상이지만 분석에 포함해야 하는 경우

         ˙의도된 이상값(fraud)

 

   - 이상값을 찾기 위해 많은 시간을 쓰는 것은 비효율적 (단, 부정사용방지 프로젝트에서는 많은 시간을 할당)

   - summary로 평균, 중간값, Q1, Q3 값을 보면서 1차 판단 -> (시간 여유가 있다면) 주요 변수별로 plot하여 특성 파악

   - outliers 패키지를 사용해 평균과 가장 큰 차이가 있는 값을 알 수도 있다.

 

 

Comments