본문 바로가기

데이터 기본

데이터 정제: 중복 제거, 누락 값 처리, 이상 값 처리 기술

 
 
데이터 클리닝 또는 데이터 정제

 데이터 분석을 위해 데이터를 사용할 때 데이터의 품질은 매우 중요하다. 데이터에는 종종 중복된 값, 누락된 값 또는 이상 값이 포함되어 있을 수 있으며, 이러한 데이터 오류는 분석 결과를 왜곡시킬 수 있다. 따라서 데이터를 정제하여 데이터 품질을 향상하는 것은 데이터 분석 작업에서 매우 중요한 단계이다. 이번 글에서는 데이터 클리닝 또는 정제를 위한 주요 기술인 중복 제거, 누락 값 처리 및 이상 값 처리에 대해 개념 위주로 쉬운 예와 함께 다뤄보겠다.

중복 제거 (Duplicate Removal)


중복된 데이터는 분석 결과를 왜곡시킬 수 있으므로 중요한 요소이며, 매우 빈번하게 발생된다. 이러한 중복된 데이터를 제거하는 과정은 데이터 정제의 첫 번째 단계이다. 예를 들어, 고객 데이터베이스에서 중복된 고객 레코드를 제거하거나 판매 거래 데이터에서 중복된 거래 기록을 제거해야 할 때가 있다. 이렇게 중복이 제거되어야 데이터가 일관성을 유지하고 분석 결과의 신뢰성을 향상시킬 수 있다.

중복 제거를 하는 가장 간단한 R 코드의 예시는 다음과 같다. 즉, unique() 함수를 사용하는 것이다. 아래의 예는 데이터프레임이나 데이터 테이블이 아닌 하나의 항목에 대해서 수행해야 한다.

# 중복된 행 제거
my_data <- unique(my_data)


duplicated()함수 앞에 '!'를 써서 중복된 행을 삭제해 주는 방법도 있다.

# 중복된 행 제거
my_data <- my_data[!duplicated(my_data), ]


누락 값 처리 (Missing Value Handling)


 중복외에도 빈번하게 발생하는 문제는 데이터 누락 또는 결측이다. 누락된 데이터도 분석 결과를 왜곡시킬 수 있으므로 적절하게 처리해야 한다. 누락 값 처리는 데이터의 완전성을 유지하고 분석 결과를 신뢰할 수 있도록 해주기 때문에 반드시 해야 한다. 데이터 누락이 있을 경우, 보통 NA(Not Availalbe)이 표시된다. 이러한 누락된 부분을 처리하는 방법은 보통 누락된 값을 채우거나 해당 행 또는 열을 삭제해 버리는 방법이 있다. 삭제는 비교적 간단하나, 경우에 따라서 오히려 데이터 왜곡을 더 심하게 만들 수 있다. 따라서 전문가들이 어떤 값으로 대체해야 하는가를 놓고 많은 방법을 만들어 놓았으니, 나중에 기회가 되면 별도로 다시 한번 다루어 보겠다.

누락 값에 대체값을 입력하는 방법 중 가장 간단한 것이 동일 항목의 평균이나 중간값을 넣어 버리는 것이다. 마찬가지로 데이터에 따라 왜곡이 발생할 수도 있으므로 미리 세심한 검토가 필요하다. 

# 누락된 값 대체 (평균값)
my_data$age[is.na(my_data$age)] <- mean(my_data$age, na.rm = TRUE)

# 누락된 값 대체 (중윗값)
my_data$age <- ifelse(is.na(my_data$age), median(my_data$age, na.rm = TRUE), my_data$age)

 

이상 값 처리 (Outlier Handling)


아웃라이어, 이상 값, 특이 값 등으로 불리기도 한다. 위에서 언급한 중복과 누락과 마찬가지로, 이상 값은 분석 결과를 왜곡시킬 수 있는 위험한 요소이다. 이상 값 처리는 이상 값을 식별하고 적절하게 처리하는 프로세스를 의미한다. 예를 들어, 판매 데이터에서 이상한 가격을 가진 제품을 식별하고 제거하거나 의료 기록에서 이상한 생체 측정치를 식별하고 검토하는 등의 작업을 말한다.

이상 값 처리를 위한 간단한 예를 들어보자. 이미 도메인 지식이 있어서 특정값을 넘는 수치는 비합리적인게 분명하다고 판단될 경우, 해당 법위 외의 값들은 전부 제외할 수 있다.

# 이상 값 필터링
my_data <- my_data[!my_data$price > 1000, ]

 

만약 제외하는 것보다 다른 값으로 대체하는게 더 낫다고 판단되면 위의 누락값 처리처럼 평균 또는 중윗값을 입력해 줄 수도 있다.

# 이상 값 대체
my_data$price[my_data$price > 1000] <- median(my_data$price)

 

정리


생각보다 데이터베이스가 처음부터 잘 디자인되어, 양질의 데이터가 저장되는 경우는 드물다. 큰 회사의 데이터는 디자인은 잘 될 가능성은 크지만, 그만큼 여러 사람들이 다양한 상황에서 사용하기 때문에 다양한 변수가 반영된 변형 데이터가 많이 생기기 마련이다. 작은 회사의 경우는 웹을 통해서 외부 데이터를 긁어모아 사용해야 하는 일도 많은데, 당연히 데이터 자체가 통일도 안되어 있을 가능성이 크다.

개인적인 경험으로도 데이터 정제가 필요없는 데이터를 본 적이 거의 없다. 따라서, 데이터 분석 업무를 할 때, 가장 먼저 해야 할 일은 데이터 정제 작업이 필요한지 확인하는 일이다. 위에서 간단하게 알아본 중복된 데이터, 누락된 값 및 이상 값과 같은 데이터 오류는 실제는 훨씬 더 복잡하다. 하지만 복잡하다고 해서 피할 수 있는 것이 아니다. 그러므로 매번 이러한 사례가 발생할 때마다 차곡차곡 경험치를 쌓아 올려놓는 게 중요하다.