브리프유 브리프유 로그인
자청의 유튜브 추출기

유튜브 영상의 자막과 AI요약을 추출해보세요

AI 채팅

BETA

결측치 제거&대체, 수치형 데이터 정제 완벽 가이드! (평균, 중앙값, 최빈값 활용)

게시일: 작성자: 자청의 유튜브 추출기

데이터 정제: 결측치 다루기

이번 파트에서는 데이터를 깨끗하게 만들어서 컴퓨터가 잘 이해할 수 있도록 하는 방법을 배울 거야. 특히 숫자로 된 데이터에서 빠진 값, 즉 '결측치'를 어떻게 다룰지 알아볼 거야.

학습 목표

  • 결측치가 뭔지 이해하기
  • 결측치가 어디 있는지 찾고 눈으로 보기 쉽게 만들기
  • 결측치를 없애거나 다른 값으로 바꾸는 방법 배우기
  • dropna와 fillna라는 유용한 도구 사용법 익히기

준비물

먼저 필요한 도구들을 불러오고, 그래프에 한글이 잘 나오도록 설정해 줄 거야. 이 한글 설정은 시험이랑 상관없으니 그냥 지금만 해둔다고 생각하면 돼.

결측치란 무엇일까?

결측치는 말 그대로 데이터가 빠져서 비어있는 값이야. 파이썬에서는 보통 NaN이라고 표시돼. 결측치가 있으면 분석 결과가 이상해지거나 컴퓨터가 제대로 작동하지 않을 수 있어서 꼭 확인하고 처리해야 해.

예제 데이터 준비

일부러 결측치를 몇 개 넣어둔 샘플 데이터를 만들었어.

   A  B  C
0  1  2  3
1  4  NaN  6
2  7  8  NaN
3  NaN 11 12
4 13 14  NaN
5 16 17 18
6 19 NaN 21

여기 보면 B 컬럼에 두 군데, C 컬럼에 세 군데 결측치가 있네.

결측치 확인하기

결측치가 있는지 어떻게 알 수 있을까? 두 가지 방법이 있어.

  1. isnull() 사용하기:
    isnull()을 쓰면 결측치인지 아닌지 True 또는 False로 알려줘. 이걸 sum()으로 합치면 각 컬럼에 결측치가 몇 개인지 알 수 있어.

    ```python
    df.isnull().sum()

    결과 예시:

    A 0

    B 2

    C 3

    dtype: int64

    ```

    이렇게 하면 B 컬럼에 2개, C 컬럼에 3개의 결측치가 있다는 걸 알 수 있지.

  2. info() 사용하기:
    info() 메소드를 쓰면 데이터의 전체 개수와 결측치가 아닌 값의 개수를 보여줘. 이걸 보고 결측치 개수를 짐작할 수 있어.

    ```python
    df.info()

    결과 예시:

    RangeIndex: 7 entries, 0 to 6

    Data columns (total 3 columns):

    # Column Non-Null Count Dtype

    --- ------ -------------- -----

    0 A 7 non-null int64

    1 B 5 non-null float64

    2 C 4 non-null float64

    dtypes: float64(2), int64(1)

    memory usage: 296.0+ bytes

    ```

    B 컬럼은 총 7개의 데이터가 있는데, Non-Null Count가 5개라고 나왔지? 그럼 7 - 5 = 2개의 결측치가 있다는 뜻이야.

결측치 시각화하기

숫자로만 보면 좀 어렵잖아? 그래서 그래프로 보면 더 쉽게 알 수 있어. seaborn 라이브러리의 heatmap을 사용하면 돼.

isnull()로 나온 True/False 값을 heatmap으로 보여주면, 결측치가 있는 부분이 색깔로 표시돼. 아까 예시 데이터에서 B 컬럼에 두 군데, C 컬럼에 세 군데 결측치가 있었는데, 히트맵으로 보면 빨간색으로 표시되는 걸 확인할 수 있을 거야.

결측치 삭제하기

결측치를 없애는 방법 중 하나는 그냥 삭제해버리는 거야.

  • dropna() 사용하기:
    dropna()는 결측치가 있는 행이나 열을 삭제해줘.

    • 행 삭제: dropna()만 쓰면 결측치가 하나라도 있는 행 전체를 삭제해.
    • 열 삭제: dropna(axis=1)이라고 하면 결측치가 하나라도 있는 열 전체를 삭제해.

    주의할 점: 너무 많이 삭제하면 데이터가 너무 줄어들어서 분석하기 어려워질 수 있어. 그래서 결측치가 많을 때는 삭제보다는 다른 방법으로 처리하는 게 좋아.

결측치 대체하기

삭제하는 대신, 결측치를 다른 값으로 채워 넣을 수도 있어.

  • fillna() 사용하기:
    fillna()는 결측치를 원하는 값으로 채워주는 도구야.

    • 평균값으로 대체: df.fillna(df.mean()) 처럼 쓰면 각 컬럼의 평균값으로 결측치를 채워줘.
    • 중앙값으로 대체: df.fillna(df.median()) 처럼 쓰면 중앙값으로 채워줘.
    • 최빈값으로 대체: df.fillna(df.mode().iloc[0]) 처럼 쓰면 가장 많이 나온 값(최빈값)으로 채워줘.

    보간법 (Interpolation):
    시계열 데이터처럼 순서가 중요한 데이터에서는 근처에 있는 값으로 채워주는 '보간법'을 쓸 수 있어. interpolate() 메소드를 사용하면 돼. 예를 들어, 30과 35 사이에 결측치가 있다면, 이 두 값의 중간값인 32.5로 채워주는 식이지.

실제 예시: 타이타닉 데이터

이제 실제 데이터인 타이타닉 데이터를 가지고 결측치를 처리해 볼 거야.

  1. 결측치 비율 확인:
    타이타닉 데이터에서 Age, Embarked, Fare 컬럼의 결측치 비율을 확인해 볼 거야. isnull()과 mean()을 같이 쓰면 결측치 비율을 쉽게 알 수 있어. Age 컬럼에 결측치가 꽤 많다는 걸 확인할 수 있을 거야.

  2. 결측치 대체:

    • Age 컬럼의 결측치는 중앙값으로 채워줄 거야.
    • Embarked 컬럼의 결측치는 최빈값으로 채워줄 거야.
  3. 결과 확인:
    대체하고 나서 다시 결측치가 있는지 확인하면, 이제 결측치가 모두 사라진 것을 볼 수 있을 거야.

정리

  • 결측치 확인: isnull()과 info()로 결측치가 있는지, 얼마나 있는지 확인해. 그래프로 보고 싶으면 heatmap을 써봐.
  • 결측치 처리:
    • 결측치가 적으면 삭제(dropna())해도 괜찮아. 행이나 열 단위로 삭제할 수 있어.
    • 결측치가 많으면 대체(fillna())하는 게 좋아.
      • 숫자 데이터는 평균이나 중앙값으로 대체해.
      • 순서가 중요한 데이터는 보간법(interpolate())을 써서 근처 값으로 채워.
      • 범주형 데이터는 최빈값으로 대체해.
  • 마무리: 결측치를 처리한 후에는 데이터가 잘 바뀌었는지, 분포가 이상해지지는 않았는지 꼭 다시 확인해봐야 해.

최근 검색 기록