대외활동/Brightics 서포터즈

[Brightics | Basic] 내 마음대로 데이터 정제(결합, 결측치, 이상치) :: 전처리 모음

케이와이엠 2021. 10. 18. 13:18

드디어 드디어 다시 돌아온 [Brightics | Basic] 기초 튼튼 편,

이번 시간에는 전처리 단계를 정리해보았어요!

제 포스팅 유입 현황을 쭈욱 살펴보니

많은 분들께서 단편적이고 한 번에 정보를 얻어갈 수 있는 글에

많이들 관심을 가져주고 계시더라구요 !

특히, 지난 포스팅 중

여러 사이트를 통한 데이터 수집 방법 (링크 클릭!)

결측치 처리 방법 (링크 클릭!)

을 검색해 들어오시는 분들이 정말 많았어요 +_+ (감사합니다♡)

 

그래서 Brighitcs로 하는 전처리 방법을 잠깐 알짜배기로 정리해봤습니다 !_!

저와 데이터를 수집해보았으니, 분석하기 쉽게 데이터를 나에게 맞게 고쳐주는 작업이 필요하겠죠?

이를 우리는 데이터 전처리(pre-processing)이라고 해요.

데이터 전처리가 왜 필요한지, 그리고 브라이틱스를 이용해 정말 간편하게 전처리 작업을 수행하는 과정을 같이 체험해보아요 !

 

데이터 전처리 방법

일단 데이터 전처리(pre-processing) 란, 데이터 분석을 하기 전 단계에 해주는 처리 작업이라는 뜻이에요.

전처리 작업이 필요한 이유는, 수집한 자료는 raw 그 자체이기 때문에 데이터 중간에 데이터가 빠졌거나 혹은 단위가 다르다던지 등 오류가 존재할 확률이 매우 높아요. (제 경험 상, 값들이 한 행씩 밀려 작성되어 있는 경우도 정말 많았어요 ㅠㅠ )

따라서 데이터의 상태와 가치를 파악해야한답니다.

흔히 전처리 작업 3단계로 나뉘는데요

데이터 정제 / 데이터 변환 / 데이터 축소 그리고 더 많은 전처리 작업이 가능해요.

오늘은 데이터 결합, 변수 생성 그리고 데이터 정제 부분을 Brightics 실습과 함께 보여드리겠습니다.

따로 명시되어 있지 않은 데이터는 브라이틱스 ai의 튜토리얼 데이터를 바탕으로 작성되었습니다.

아래 페이지에서 다운 받으실 수 있습니다.

https://www.brightics.ai/kr/docs/ai/v3.7/tutorials/06_preprocessing_join?type=insight 

 

Brightics Studio

 

www.brightics.ai

 

데이터 결합, 변수 생성

[JOIN 함수] - 데이터 결합

가장 먼저 아주 기본적인 ! 데이터를 결합하기 위해선 JOIN 함수를 이용합니다.

영어 점수에 해당하는 데이터를 로드 & 수학 점수에 해당하는 데이터를 로드

=> id를 key 삼아서 JOIN 하면 두 데이터를 하나의 파일로 합칠 수 있습니다.

이때 JOIN의 유형에는 <outer , left , right , inner , exclusive ..> 등이 있어요.

만약 동일한 KEY를 기준으로 묶고 싶다면 INNER JOIN 유형을 택하시면 됩니다.

[Add Function Column] - 변수 생성

만약 새로운 변수를 만들고 싶다면 add function column 혹은 add column 함수를 사용합니다.

<add function column>은 직접 sql / pyhton 형태의 계산식을 작성하여 변수를 생성하는 방법이에요.

total = math + english 를 해주었어요.

<add column>의 경우에는 조건문형식을 통해 하나의 변수를 생성할 수 있답니다.

 

그럼 새로운 데이터 셋을 완성시킬 수 있어요 ! ㅎㅎ

(불균형)데이터 샘플링

샘플링은 엄청난 양의 데이터 중 분석에 필요한 최소한의 샘플을 추출하여 사용하기 위함입니다.

이때 중요한 것은 샘플링 된 데이터가 전체 데이터의 특징을 계속 유지할 수 있도록 샘플링해야 한다는 것입니다.

아래는 insurance 데이터!

(튜토리얼 데이터 참조)

[split data] / [Random Sampling]

 

ㄴ (왼) Split Data 함수를 사용하여 데이터를 2개의 set 으로 분할해요

38,000개의 데이터 중 7:3 비율로 나누어 26,000개의 데이터가 추출된답니다.

※ 주의 . 이때 데이터가 균형이 잡혀있는지를 확인해야합니다 !!!!

보험 가입자와 미가입자의 수를 확인하여 데이터 상태가 불균형 데이터라면 다른 방법을 사용해야하니 말이죠.

ㄴ (오) no와 yes 각각에 대해 row수를 확인한 결과 33,987 대 4,258로 미가입자가 월등히 많은 불균형 데이터네요 ㅠㅠ

이 경우에는 [Random Sampling] 함수를 사용하여 특정한 fraction(비율)만큼의 데이터를 랜덤하게 추출하였습니다.

결측치 처리

데이터 속 결측치 값을 처리하는 방법에는 쉽게 2가지가 있는데요,

1. 결측치에 해당하는 값 제거

2. 결측치를 적절한 값으로 대체

1(제거) 방법이 가장 처리하기 쉬우나, missing value에 속하는 값이 많은 경우에는, 이를 제거할 때 부작용이 발생할 수 있겠죠 ㅠㅠ

2(대체) 방법은 어떤 값으로 대체해야할 지 결정해야해요 . 평균값, 중앙값, 추정치 등을 사용할 수 있는데 해당 데이터의 성격에 맞게 대체하는 법을 신중히 택해야한답니다.

<문자(STRING) 형>

먼저 string summary 함수를 통해 데이터 구조를 확인합니다.

먼저, 제거 방법은 [Delete Missing Data] -> Input Column : gender 선택

ㄴ 근데 무슨 이유에서인지 빈 칸이 missing data로 인식이 안되더라구요. 당황하지 말고 다음 방법을 적용해봅시다.

[Filter] : gender가 빈 칸이 아닌 것만 필터

ㄴ 그 결과 494개의 데이터가 481개로 줄어들었어요.

다음으로 대체 방법은 ① 소문자와 대문자 변경 [Capitalize Variable]

ㄴ m 혹은 f 로 표현되어 있는 gender 값을 대문자화해줄 수 있어요.

② 오타 수정 : [Add Column]

gender 에 'N' 은 'M'의 오타로 보았고,

'G' 는 GIRL의 약자로 여성임을 나타낸다고 유추해 'F'로 수정하였습니다.

③ null 데이터 해결 : [replace missing string]

null 값에 들어갈 문자열을 지정해주세요

<숫자(double) 형>

마찬가지로 statistic summary 함수를 통해 데이터 구조를 확인합니다.

먼저, 제거 방법은 위와 동일하게 [Delete Missing Data] -> Input Column : 변수 선택

다음으로 대체 방법은 [Replace missing number]

ㄴ 성공적으로 결측치들을 처리해주었습니다.

이상치 처리

다음으론 boxplot을 통해 이상치 존재 여부를 확인 -> 이상치 제거 (outlier detection함수) 작업을 실행합니다.

이상치를 찾는 방법에는 1) 통계적 접근 2) 머신러닝을 통한 기계적 접근이 있는데요

못하는게 없는 우리의 Brightics !! 두 가지 방법 모두 제공하고 있습니다 :)

바로 Outlier Detection(Tukey/Carling)와 Outlier Detection(Local Outlier Factor) 함수입니다.

 


오늘도 .. 분량 초과로 ... 여기까지 ... 하겠습니다 ..

원래 데이터 정규화, 표준화, 로그 변환 등 데이터 변환 과정까지 알려드리려고 했는데 아무래도 분량이 길어질 것 같네요 ㅎ ㅏ ㅎ ㅏ ㅎ ㅏ ㅎ ㅏ

시간 여유가 더 생길 때 .. 바로 !! 가져와보겠습니다 :)


 

*해당 게시글은 Brightics 서포터즈 활동의 일환으로 작성된 포스팅 입니다.

게시글 관련 문의 및 소통을 원하신다면 아래 댓글로 남겨주세요

브라이틱스 사용 중 문의사항은

brightics@samsung.com으로 연락주세요 :)