AI 머신러닝 딥러닝/파이썬 머신러닝 입문 공부일지

파이썬 머신러닝 입문 공부일지 7. 결손 데이터 Null Data 처리하기

Tomitom 2023. 1. 3. 16:59
반응형

 

 

결손 데이터란? 

칼럼에 값이 없는 Null 값을 의미합니다. 이는 넘파이의 NaN으로 표시합니다. 

NaN 값은 칼럼에 값이 아예 없기 때문에 평균, 총합 등 함수 연산 시에 제외가 되는 것은 당연하겠죠. 

100개의 데이터가 있는 칼럼에서 10개가 NaN 값일 경우 이 칼럼의 평균 값은 나머지 90 개의 평균 값이 됩니다. 

즉, 머신러닝 알고리즘은 이 NaN 값을 처리하지 않기 때문에 이 값을 다른 값으로 대체해야 합니다. 

 

NaN 여부를 확인하는 API 는 isna() 이며 NaN 값을 다른 값으로 대체하는 API는 fillna() 입니다. 

 

isna()

isna()는 데이터가 NaN 인지 아닌지를 True 와 False 로 알려줍니다. 

 

그럼 총 몇 개의 결손 데이터가 있는지 확인해볼게요. 

isna() 결과로 NaN일 경우 True, NaN이 아닐 경우 False 가 반환되기 때문에 sum() 함수로 구할 수 있습니다. 

sum() 함수는 True 를 1, False 를 0 으로 변환하므로 Null 결손 데이터의 갯수를 구할 수 있어요. 

 

 

fillna()

현재 위에서 발생한 결손 데이터들을 처리해주기 위해 fillna()를 사용할 수 있습니다. 

fillna()는 결손 데이터를 다른 값으로 일괄 대체할 수 있습니다. 

 

Cabin (객실의 번호) 칼럼의 NaN 값을 C000 으로 대체해보겠습니다.

우선 데이터 프레임의 Cabin 칼럼을 선택해서 fillna로 대체합니다. 

단, inplace=True  파라미터를 fillna() 를 추가해야 실제 데이터 세트 값이 변경됩니다. 

 

실제 데이터 세트 값을 변경하려면 다음과 같습니다. 

 

(1) titanic_df['Cabin'] = titanic_df['Cabin'].fillna('C000')   

 상기 코드와 같이 fillna() 의 반환값을 다시 해당 컬럼 값으로 정해주거나 

 

(2) titanic_df['Cabin'].fillna('C000', inplace=True)  

 상기 코드와 같이 inplace 를 True 값으로 설정하여 줍니다. 

 

titanic_df['Cabin'] = titanic_df['Cabin'].fillna('C000')
titanic_df.head(10)

 

 

상기에 보였던 타이타닉 결손 데이터 집계에서 결손 데이터가 발생한 것은 Age, Embarked, Cabin 입니다. 

Cabin 은 fillna('C000') 으로, Age는 평균 나이로, Embarked 는 'S'로 대체하여 결손 데이터를 처리해봅니다. 

 

titanic_df['Cabin'] = titanic_df['Cabin'].fillna('C000')
titanic_df['Age'].fillna(titanic_df['Age'].mean(), inplace=True)
titanic_df['Embarked'].fillna('S', inplace=True)

titanic_df.isna().sum()

 

 

결손 데이터가 모두 처리된 것을 확인할 수 있습니다. 

이것은 나중에 우리가 사이킷런을 활용해서 데이터를 분석할 때 '전처리 작업' 에 해당하는 과정이며, 

이 과정을 반드시 처리해야만 정확도가 높은 결과치를 얻을 수 있으니 

해당 작업은 꼭 잊지 않도록 합니다. 

 

 

 

반응형