brunch

You can make anything
by writing

C.S.Lewis

by Raphael Lee Apr 21. 2016

데이터 전처리II (=Dog노가다)  

딸바보 잡부

분석이란 걸 위한 통계 완전 기초

Chapter 1. 통계 기본 함수

Chapter 2. 표준화/정규화

Chapter 3. 데이터 전처리 - Part II (part I 참조)

Chapter 4. 클러스터링, 장바구니

Chapter 5. 의사결정 나무 (Decision Tree), 회귀분석 (Regression), 신경망 분석 (Neural Network)

Chapter 6. 모형 평가, WoE

  * 데이터를 다룬다는 것은 사실 문자(string)와 숫자(number)를 다루는 것입니다. 그리고 분석을 위한 데이터를 만드는 것은 "문자를 숫자화"하는 과정이 대부분입니다. 이때 정규화, 표준화, 비율, 요약 등 다양한 방법이 적용되며 이 순간이 분석가의 역량이 가장 필요한 순간이기도 합니다.

  * 데이터를 변환하는 과정에서 가장 오류가 빈번하게 발생하기에 주의할 부분은 날짜/시간 부분 처리입니다. 따라서, 필자의 경우에는 접하지 않았던 생소한 프로그래밍 언어 또는 데이터베이스로 작업해야 하는 경우가 생기면 필수적으로 체크하는 것이 있습니다. 그것은 바로 다음과 같습니다.

  - 문자 -> 숫자, 숫자 -> 문자 변환

  - 문자열 자르기, 붙이기

  - 문자 -> 날짜, 날짜 -> 문자 변환

  - 날짜 계산 (개월 수, 날짜 차이 등)


4. 변환/치환 (Transposition)

  - 전처리의 대부분은 이 과정이라 해도 지나치지 않습니다. SQL과 프로그래밍이 뒤섞여 가장 복잡한 부분이기도 합니다.

  (1) 기존 값 대체

    기존 값을 그대로 사용하지 않고 대체하는 경우는 다음과 같습니다.

     - 오류 데이터 수정

        : 오류의 종류는 있어야 할 데이터가 없거나 잘못된 데이터가 있는 2가지 경우가 있습니다.

        이 2개의 경우는 각각의 값으로 반영하는 것을 권장합니다.

     - 데이터 경량화

        : 보안이 적용된 경우 등 값의 자릿수가 큰 경우에는 이를 대체할 일련번호를 부여하여 사용하는 것이 작업 속도를 줄이는데 도움이 됩니다.

     - 문자를 숫자로 변경

        : 통계 엔진이 도출하는 결과는 수식인 경우가 대부분이므로 엔진이 계산식을 도출하게 하기 위해서는 데이터를 가급적 숫자화 해야 합니다. 가장 쉬운 방법은 일련번호를 부여하는 것이지만, 모든 경우에 적용하는 방법은 아니고 (식상하지만) 상황에 맞게 숫자를 발생시켜야 합니다.

  (2) 그룹화 (Grouping)

     - 데이터가 지나치게 파편화 되어 있으면, 변환 기준에 의해 한쪽으로 데이터를 변경합니다.

      고객번호와 같이 파편화된 데이터 자체로 의미가 있는 경우도 있지만, 매출금액대 등 분류 조건을 설정하여 그룹화를 하면 데이터의 속성을 살펴보고 분석하는데 더 용이해집니다.

  (3) 그룹 함수 적용

      - Sum, count, rank 등 함수를 적용하여 변환합니다. 그룹화해서 데이터를 축소시켜 분석하는 경우도 있지만, 많은 경우 기존 데이터에 그룹 함수를 적용한 결과를 추가하여 분석합니다.

  (4) 결측 값 처리

      - 값이 없음을 의미하는 NULL은 자체로 의미를 가지는 경우도 있으므로 일괄적으로 0으로 처리하는 것이 아니라 의도에 맞춰 치환해야 합니다. 또한 NULL은 건수를 셀 때는(count) 포함되지 않고 건수를 구하지만, 합계(sum)를 구할 때는 데이터 중에 NULL이 섞여 있으면 결과를 NULL로 반환하게 되니 조심해야 합니다.


5. 조합/결합 (Combination)

  이 부분은 예전에 작성해 놓은 SQL 설명으로 대체합니다. SQL을 이용하여 데이터를 조합/결합하는 경우는 다음을 주의합니다.

  (1) 중심축으로 삼을 테이블을 선정합니다.
  (2) 건수를 기록합니다.
  (3) 가로로 정보를 추가하는 경우 JOIN을 세로로 정보를 추가하는 경우는 UNION을 사용합니다.
  (4) 건수를 조회하여 확인합니다.


  - 아래의 테이블 데이터를 예시로 각 경우에 대해 살펴보겠습니다.

예제용 테이블 및 데이터

  (1) 공통 항목 구하기: INNER JOIN (건수의 손실을 주의할 것)
    SQL>>
SELECT T1.C11, T1.C12, T2.C22
  FROM T1
 INNER JOIN T2
         ON T1.C11 = T2.C21
    RESULT>>

INNER JOIN 결과

  (2) 기준 항목에 추가 결합하기: LEFT OUTER JOIN (의도치 않은 Null의 발생, 건수의 증가를 주의할 것)

     RIGHT OUTER JOIN의 경우는 기술 위치를 바꿔서 LEFT OUTER JOIN으로 일관되게 사용할 것을 권장합니다.
    SQL>>
SELECT T1.C11, T1.C12, T2.C22
  FROM T1
  LEFT OUTER JOIN T2
         ON T1.C11 = T2.C21
    RESULT>>

LEFT OUTER JOIN 결과

  (3) 모든 항목 결합하기: FULL OUTER JOIN (건수의 폭발적인 증가를 조심할 것)

    SQL>>
SELECT T1.C11, T1.C12, T2.C21, T2.C22
  FROM T1
  FULL OUTER JOIN T2
         ON T1.C11 = T2.C21
    RESULT>>

FULL OUTER JOIN 결과

  (4) 건수 추가하기: UNION (중복이 제거된다. 정렬이 일어나므로 속도의 저하가 있을 수 있다.)
    SQL>>
SELECT C11, C12
  FROM T1
UNION
SELECT C21, C22
  FROM T2
    RESULT>>

UNION 결과

  (5) 건수 추가하기: UNION ALL (중복이 제거되지 않으므로, 데이터의 중복을 주의한다.)
    SQL>>
SELECT C11, C12
  FROM T1
UNION ALL
SELECT C21, C22
  FROM T2
    RESULT>>

UNION ALL 결과


6. 자동화 (Automation)

  (1) 부분 자동화

    - 자동화는 만능이 아니며, 때때로 자동화를 하는데 드는 시간 및 비용이 더 비싼 경우가 발생하기도 합니다. 그래서, 필자의 경우 좋아하는 단어는 '반자동'이며, 자동화를 하는 기준을 3일 이상 소요되거나 혹은 1000회 이상 반복되는 작업의 경우 그 부분만 자동화를 합니다.

    - 자동화를 하는 도구로는 EXCEL MACRO가 가장 손쉽게 작성하고, 아까움 없이 임시로 작성하기에 좋으며 근래에는 이 부분을 Python으로 해결하고 있습니다.


  (2) 전체 자동화

    - 전체 자동화라 하는 것은 평소에 약간씩 준비하다가 전처리 작업 종료 즈음에 스케줄링을 이용하여 전체 자동화를 수행합니다. 가급적 이 단계에서는 비즈니스 처리 조건이 변경되지 않는 것이 좋으므로, 일정 시간 동안 요청을 받지 않는 상태(Freezing)를 만드는 것이 좋습니다.

매거진의 이전글 데이터 전처리I (=Dog노가다)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari