데이터 전처리 & 시각화 세션 2-1회차 정리 (2) - 결측치 처리 마스터하기

SEHEE·2025년 6월 15일
0

💚 = 클래스지만 함수처럼 동작
💙 = 매서드(객체가 수행할 수 있는 동작이나 기능을 나타냄) => 객체 뒤에 붙으면 매서드 , 아님 함수!
🤎 = dataframe의 속성
💜 = 함수
💛 = 파라미터(매개변수)

⭐헷갈리는 개념

  • 💜len() → 총 몇 명(행)을 알고 싶을때 사용하는 함수
    => 개수를 말해주는거라 바로 계산 가능!
    ex)
    print(f"삭제된 행: {len(titanic) - len(titanic_dropped_all)}개")
    이렇게 쓰일 수 있다는거!
  • 괄호 사용 헷갈
괄호쓰는 이유실제 예시
{} 중괄호열이름과 값을 묶는 딕셔너리{ 'A': [1,2], 'B': [3,4] }
() 소괄호함수 실행 시 꼭 써야 함pd.DataFrame(딕셔너리)
[] 대괄호원하는 부분만 꺼내서 보고 싶을때 사용
  • axis=0 → 행(row) 방향
    axis=1 → 열(column) 방향
  • set() 연산이 가능한 이유는 문자열 간의 집합 연산이 가능하기 때문 > 안에 빠진 컬럼에 대해 쉽게 알기 가능
    • 원리 : set(['A', 'B', 'C']) - set(['A', 'C'])
      -> 결과: {'B'}
      => set()으로 바꾸면 그냥 문자열 집합이 되는 것이고, 그 위에서 집합 연산을 할 수 있는것
      ex)
      print(f"삭제된 컬럼: {set(titanic.columns) - set(titanic_dropped_cols.columns)}")
  • 💙.copy(): 원본 데이터를 보존하기 위해 복사본을 만들때 사용하는 매서드
  • age_status['50%']
    -> []안의 값은 key
    -> 50%는 값이 아니라 중위수를 갖고오는 key!
    => [] 대괄호 안에 들어가는 건:
    📌 딕셔너리에서는 → key
    📌 Pandas Series/DataFrame에서는 → 열 이름(column name)이나 index 이름
  • 💜dropna() : NaN (빈칸, 결측치)가 있는 행이나 열을 삭제하는 함수

결측치란?
= 데이터에서 값이 없거나 누락된 상태
=> 제대로 처리하지 않으면 결과 왜곡되거나 오류생김.
=> ⭐ 데이터 전처리 핵심 단계
결측치 원인:

  • 데이터 수집 과정의 문제: 설문 미응답, 센서 오류 등
  • 데이터 입력 실수: 수동 입력 시 누락
  • 시스템적 결측: 특정 조건에서 데이터가 수집되지 않음
  • 의도적 결측: 해당 없음(N/A) 등

결측치 탐색
1. 어디에, 얼마나 있는지 정확하게 파악
-💜.isnull()은 결측치인지 아닌지(True/False) 알려주는 함수
답: False는 값O , True는 값X(=결측치)
=> .isnull().sum() = 결측치를 구하고 개수를 셀 수 있음
2. 0이 아닌값들이 결측치가 있는 컬럼
3. 💙sort_values('열이름') = "이 열(column)을 기준으로 표(행들을) 정렬해줘

결측치 제거

  • 언제 어떻게 삭제할것인가 > 가장 간단하지만 신중해야하는 방법!
  1. 결측치가 있는 행 삭제하기
  • 💜dropna()는 결측치(NaN)가 들어 있는 행(row) 을 삭제하는 함수
    --사용--
  • 결측치 비율이 5% 미만일 때
  • 결측치 패턴이 완전 무작위일 때
  • 충분한 데이터가 남을 때
    -> ❗ 너무 많은 데이터가 손실될 수 있음!
  1. 결측치가 있는 칼럼 삭제
    --사용--
  • 결측치 비율이 50% 이상인 컬럼
  • 분석에 중요하지 않은 컬럼
  • 다른 변수로 대체 가능한 정보를 담은 컬럼

⭐⭐Ex)
글자 출력
print(f"\n=== 컬럼 삭제 방식 ===")

⭐원본(titanic)에서 열방향으로 결측치가 있는 컬럼을 “제거한 새로운 복사본”이 만들어진 거야.
'a='-> 원래 데이터는 두고, 삭제된 버전을 따로 저장해 만들어줘!
titanic_dropped_cols = titanic.dropna(axis=1)

삭제 후 남은거에 대한 크기를 프린트하는거
print(f"결측치 컬럼 삭제 후: {titanic_dropped_cols.shape}")

전체 컬럼명에서 삭제 후 남은 컬럼을 빼서 삭제된 컬럼을 알아내는거야.
print(f"삭제된 컬럼: {set(titanic.columns) - set(titanic_dropped_cols.columns)}")
=>>> 원래 컬럼 목록에서 삭제된 컬럼들을 알아내는 코드

결측치 대체

  • 결측치 대체 전략 선택 가이드
    • 평균값: 정규분포에 가까운 연속형 변수
    • 중위수: 이상치가 많거나 치우친 분포
    • 최빈값: 범주형 변수
    • 특정값: 비즈니스 로직상 의미가 있는 값
    • 예측값: 다른 변수들로 예측한 값
profile
안녕하세요! 마케터를 꿈꾸는 취준생입니다 :)

0개의 댓글