결손 데이터란?
칼럼에 값이 없는 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()
결손 데이터가 모두 처리된 것을 확인할 수 있습니다.
이것은 나중에 우리가 사이킷런을 활용해서 데이터를 분석할 때 '전처리 작업' 에 해당하는 과정이며,
이 과정을 반드시 처리해야만 정확도가 높은 결과치를 얻을 수 있으니
해당 작업은 꼭 잊지 않도록 합니다.
'AI 머신러닝 딥러닝 > 파이썬 머신러닝 입문 공부일지' 카테고리의 다른 글
파이썬 머신러닝 입문 공부일지 9. 사이킷런 기초 시작하기 (사이킷런 설치하기, 첫 번째 머신러닝 만들기 - 붓꽃 품종 예측하기) (1) (0) | 2023.01.04 |
---|---|
파이썬 머신러닝 입문 공부일지 8. apply lambda 데이터 가공 (0) | 2023.01.03 |
파이썬 머신러닝 입문 공부일지 6. 판다스 DataFrame 정렬, Aggregation, GroupBy (0) | 2023.01.03 |
파이썬 머신러닝 입문 공부일지 5. Pandas 판다스 Index 객체 (1) | 2023.01.03 |
파이썬 머신러닝 입문 공부일지. 회귀 분석의 회귀란 무슨 뜻일까? (0) | 2023.01.02 |