데이터 분석을 위한 데이터 전처리 방법 - Data Cleaning

  데이터 분석을 하기 위해서는 가장 기본적으로 데이터 전처리를 진행해야합니다.  해당 포스팅은 Hands-Hands-On Machine Learning 책과 코세라 강의 중 How to Win a Data Science Competition: Learn from Top Kagglers를 공부하며 정리하고 데이터 분석을 진행하는 과정을 포함하고 있습니다. 이 포스팅은 캐글 Titanic 생존 예측 분석 데이터를 예시로 진행해볼 예정입니다. 

 

  데이터 전처리 과정은 아래와 같이 간단하게 요약할 수 있습니다. 이번 글에서는 Data Clearning, 불필요한 데이터 제거 또는 누락된 데이터를처리하는 방법에 대해서 알아보겠습니다.

 


  • Data Cleaning : 불필요한 데이터 제거 및 누락된 데이터 처리

  • Data Handling : 머신러닝 알고리즘이 이해할 수 있는 데이터로 처리하기 (Numeric, Categorical and Ordinal, Date time and Coordinate)

  • Feature Generation : 기존의 데이터를 기반으로 새로운 데이터 생성하기

  • Feature Scaling : 숫자형 데이터의 범위를 줄여주는 방법


Data Cleaning

  머신러닝 알고리즘은 Missing feature, 즉 누락된 데이터가 있을때 제 기능을 하지 못합니다. 그래서 가장 먼저 누락된 데이터에 대한 처리 즉 Data Cleaning을 먼저 해줘야합니다. Data Cleaning 진행하는 방법에 대해서 알아보겠습니다.

 

  아래는 캐글 Titanic 생존 예측 분석 데이터에서 Null 값 즉 누락된 데이터를 찾아보았습니다. Age 177개, Cabin 687개, Embarked 2개 데이터가 누락되었네요.

 

 

1. 전체 속성 제거하기 : 연관성 없거나 너무 많은 Missing Feature를 제거합니다.

  너무 많은 데이터가 누락 되어 있는 경우에는 새로운 데이터를 넣어 주는 것보다 제거해 주는 것이 더 효율적입니다. 예를 들어 Cabin의 경우는 전체 889개 데이터 중 687개 데이터가 Null이기 때문에 해당 속성을 제거해 주겠습니다.

 

- drop() 함수 : pandas에서 제공하는 특정 데이터 열(또는 행)을 제거하는 함수

titanic_df = titanic_df.drop('Cabin', axis=1)
titanic_df.isnull().sum()

 

2. 불필요한 데이터 제거

  불필요한 데이터, 누락된 데이터를 한번에 제거하는 방법도 있습니다. 이 방법을 쓰면 현재 데이터에 있는 누락된 데이터가 모두 제거됩니다.

 

- dropna() 함수 : pandas에서 제공하는 누락된 데이터를 제거하는 함수

titanic_df = titanic_df.dropna()
titanic_df.isnull().sum()

 

3. 누락된 값에 특정 값을 지정 

  누락된 값을 0, 평균, 중간값 등으로 채우는 방법을 말합니다. 가장 많이 사용하는 방법으로 꼭 알아둬야하는 처리 방법입니다. 저는 두가지 방법으로 일괄적으로 데이터를 채우는 fillna() 함수와 누락된 값을 보간하는 방법으로 데이터를 채우는 interpolate() 함수에 대해서 알아보겠습니다

 

- fillna() 함수 : pandas에서 제공하는 누락된 데이터에 특정 값을 채우는 함수

titanic_df['Age'] = titanic_df['Age'].fillna(titanic_df['Age'].mean())
titanic_df.isnull().sum()

 

- interpolate() 함수 : pandas에서 제공하는 누락된 데이터에 보간하는 방법으로 값을 채우는 함수

 

  데이터를 보간하는 방법도 생각보다 다양하게 사용됩니다. 아래 예시는 데이콘에서 진행한 경진대회에서 사용한 방법으로 특정 주파수의 중간에 누락된 값을 보간하는 방법으로 채워서 정상적인 그래프로 만든 것입니다.

train_dst = train.filter(regex='_dst$', axis=1).head(10)
train_dst.head().T.plot()
train_dst = train_dst.interpolate() // 데이터 보간
train_dst.head().T.plot()

데이터 보간 전
데이터 보간 후

 

4. 누락된 값 재구성하기

  누락된 값 재구성은 다른 속성과의 연관관계를 바탕으로 유추하여 데이터를 채워 넣는 것이라고 보시면 됩니다. 누락된 값을 재구성하는 방법은 Data Cleaning 방법 중 가장 어려운 방법이라고 생각합니다. 우선 각 데이터 속성에 대한 이해도 충분히 해야하고 어느정도 관계가 확실해야 하기 때문입니다.

 

  어려운 대신 누락된 값을 확실하게 재구성하면 모델의 성능이 제대로 향상되는 것을 볼 수가 있습니다.

이 글을 공유하기

댓글(0)

Designed by JB FACTORY