안녕하세요 '코딩 오페라'블로그를 운영하고 있는 저는 'Master.M'입니다.
현재 '초등학생도 이해하는 빅데이터분석기사 실기'라는 주제로 판다스(pandas)를 이용한 데이터 마이닝에 대해 포스팅을 진행하고 있습니다. 제목처럼 진짜 핵심 내용을 쉽게 설명하는 것을 목표로 하고 있으니 데이터 마이닝에 입문하고 싶은 분들은 많은 관심 부탁드립니다. 오늘 알아볼 내용은 '판다스 결측치 확인 및 채우기'입니다.
결측치
우선 '결측치'에 대해서 간단히 설명을 드리자면 다음과 같습니다.
- 결측치(missing value) : 데이터셋에서 값이 비어 있는 것을 말합니다. 이는 데이터 수집 과정에서 발생할 수 있는 실수나 오류, 또는 해당 값이 존재하지 않는 경우 등으로 인해 발생할 수 있습니다.
결측치는 데이터 분석 및 모델링 과정에서 문제를 일으킬 수 있으며, 이를 처리하는 여러 방법들이 존재합니다. 예를 들어, 결측치를 제거하거나 대체하는 등의 전처리 과정을 통해 데이터의 유효성을 유지할 수 있습니다. 결측치를 적절히 처리하지 않으면 분석 결과에 편향을 일으킬 수 있으므로, 데이터 분석 및 모델링 과정에서는 결측치 처리에 특별한 주의가 필요합니다.
판다스 결측치 확인 및 채우기
위에서 설명했듯, 결측치는 분석 및 모델 학습 결과에 편향을 일으켜 문제를 야기합니다. 때문에 필연적으로 데이터 전처리 과정에서 제거해줘야 하는데, 어떻게 제거할 수 있을까요?
판다스(pandas)에서 결측치는 'isnull()' 함수를 통해서 확인하고, 'fillna()' 함수를 통해서 채울 수 있습니다.
- 결측치 확인
import pandas as pd
df = pd.read_csv("basic1.csv")
print(df.head())
우선 결측치를 확인하기전, 위 예시 'basic1.csv' 파일을 다운로드하고,다음과 같이 pandas의 'read_csv'함수를 이용해 csv파일을 불러와줍니다. 참고로 이 부분에 대해 자세히 알고 싶으신 분들이 아래 포스트를 참고하시기 바랍니다.
https://codingopera.tistory.com/11
불러온 dataframe을 'isnull()' 함수를 이용해 결측치 여부를 알아보면 아래와 같게 됩니다. 결측치가 아니면 False, 맞으면 True 이렇게 결과가 나옵니다. 보다시피 f1열과 f3열에 결측치(True) 값들이 보입니다.
print(df.isnull())
그럼 이 결측치들이 몇 개가 존재하는지는 어떻게 알 수 있을까요? 바로 'isnull()' 함수를 통해 나온 값을 'sum()' 함수를 이용해 더해주기만 하면 됩니다. 그러면 다음과 같이 f1열에 31개, f3열에 95개의 결측치가 존재하는 것을 확인할 수 있습니다.
print(df.isnull().sum())
- 결측치 채우기
결측치들은 사람의 실수로 인한 데이터 누락값들입니다. 이러한 값들은 데이터 분석의 편향은 물론, 모델 학습성능을 저하시키는 주원인입니다. 때문에 이 값들을 채워 주워야 합니다.
값을 채워줄 때는 다양한 값들을 사용하지만, 오늘은 가장 안정적으로 많이 사용되는 '중앙값'을 이용할 것입니다. '중앙값'이란 주어진 데이터 집합에서 중간에 위치한 값으로, 이상치(outlier)의 영향을 받지 않기 때문에 데이터의 전반적인 중심 경향을 파악하는 데에 유용합니다.
중앙값은 아래와 같이 판다스의 'median()' 함수를 통해 구해줄 수 있습니다. 이 부분에 대해서는 추후 자세히 포스팅하도록 하겠습니다.
# 중앙값
med_f1 = df['f1'].median()
df['f1'] = df['f1'].fillna(med_f1)
print(df.isnull().sum())
이렇게 구해진 중앙값을 'fillna()' 함수를 통해 결측치 위치에 채워 넣어 줍니다. 'fillna()' 함수는 결측치를 채워 넣을 때 사용하는 함수로, 예를 들어 df.fillna(b)는 "dataframe df에 결측치를 값'b'로 채워 넣어라"라는 의미가 됩니다.
'fillna()' 함수를 이용해 결측치를 제거한 뒤 결측값을 확인해 주면, 위와 같이 f1열의 결측치수가 '0'이 되어 결측치가 제거된 것을 확인할 수 있습니다.
지금 까지 저희는 '판다스(pandas) 결측치 확인 및 채우기 '에 대해 알아보았습니다. 도움이 되셨나요? 만약 되셨다면 구독 및 좋아요로 표현해 주시면 정말 많은 힘이 됩니다. 궁금한 사항 혹은 앞으로 다루어 주었으면 좋을 주제가 있으시면 댓글 남겨주시면 감사하겠습니다. 저는 '코딩 오페라'의 'Master.M'이었습니다. 감사합니다.