데이터 전처리
🔨 절차형
💡
학습 전략: 연습 (Practice)
즉시 실전에 적용해 보는 것이 핵심
개요
데이터 전처리는 데이터 분석의 첫 단계로, 원본 데이터를 분석 가능한 형태로 변환하는 과정입니다.
결측치 처리
결측치 확인 및 제거
1
2
3
4
5
6
7
8
9
10
# 결측치 관측 결과
coffee_drop = coffee_text_review.dropna()
print(coffee_drop.shape, '\n')
print(coffee_drop.isnull().sum())
# 결과 예시
# (2438, 3)
# origin 0
# desc_1 0
# desc_3 0
처리 방법 선택
원본 데이터셋에서 결측값이 존재했으며, dropna() 메서드를 사용하여 결측값이 있는 행을 제거했습니다.
처리 후 데이터셋의 크기는 (2438, 3)으로 변경되었으며, 결측값은 모두 제거되었습니다. 결측값이 적었기 때문에 행 삭제 방식을 선택했습니다.
결측치 처리 방법 비교
1. 행 삭제 (dropna)
1
2
3
4
5
# 결측값이 있는 행 제거
df_dropped = df.dropna()
# 특정 열의 결측값만 제거
df_dropped = df.dropna(subset=['column_name'])
장점:
- 간단하고 빠름
- 데이터 품질 유지
단점:
- 데이터 손실
- 샘플 수 감소
2. 결측값 채우기 (fillna)
평균값으로 채우기
1
2
# 숫자 열의 평균값으로 채우기
df['column_name'].fillna(df['column_name'].mean(), inplace=True)
중앙값으로 채우기
1
2
# 중앙값으로 채우기
df['column_name'].fillna(df['column_name'].median(), inplace=True)
최빈값으로 채우기
1
2
# 범주형 데이터의 최빈값으로 채우기
df['column_name'].fillna(df['column_name'].mode()[0], inplace=True)
앞/뒤 값으로 채우기
1
2
3
4
5
# 앞의 값으로 채우기 (forward fill)
df.fillna(method='ffill', inplace=True)
# 뒤의 값으로 채우기 (backward fill)
df.fillna(method='bfill', inplace=True)
3. 보간법 (Interpolation)
1
2
3
4
5
# 선형 보간
df['column_name'].interpolate(method='linear', inplace=True)
# 시계열 데이터 보간
df['column_name'].interpolate(method='time', inplace=True)
결측치 처리 전략
결측치 비율에 따른 전략
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import pandas as pd
# 결측치 비율 계산
missing_ratio = df.isnull().sum() / len(df) * 100
print(missing_ratio)
# 결측치 비율에 따른 처리
if missing_ratio < 5:
# 5% 미만: 행 삭제
df = df.dropna()
elif missing_ratio < 30:
# 5-30%: 평균/중앙값으로 채우기
df.fillna(df.mean(), inplace=True)
else:
# 30% 이상: 해당 열 삭제 고려
df = df.drop(columns=['column_name'])
실전 예제
커피 리뷰 데이터 전처리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import pandas as pd
# 데이터 로드
coffee_text_review = pd.read_csv('coffee_reviews.csv')
# 1. 결측치 확인
print("결측치 개수:")
print(coffee_text_review.isnull().sum())
print("\n데이터셋 크기:", coffee_text_review.shape)
# 2. 결측치 비율 계산
missing_ratio = coffee_text_review.isnull().sum() / len(coffee_text_review) * 100
print("\n결측치 비율(%):")
print(missing_ratio)
# 3. 결측치 제거
coffee_drop = coffee_text_review.dropna()
print("\n처리 후 데이터셋 크기:", coffee_drop.shape)
# 4. 결과 확인
print("\n처리 후 결측치:")
print(coffee_drop.isnull().sum())
데이터 전처리 체크리스트
- 결측치 확인 및 처리
- 중복 데이터 제거
- 이상치(Outlier) 탐지 및 처리
- 데이터 타입 변환
- 범주형 데이터 인코딩
- 데이터 정규화/표준화
- 피처 엔지니어링