数据预处理 🧹
실제 데이터는 깨끗하지 않습니다. 데이터 전처리는 분석 가능한 형태로 데이터를 정제하는 필수 과정입니다.
什么是数据预处理?
데이터 전처리는 원시 데이터를 분석이나 머신러닝에 적합한 형태로 변환하는 과정입니다.
主要任务
- 결측치 처리: 누락된 데이터 다루기
- 중복 제거: 중복된 레코드 제거
- 데이터 타입 변환: 적절한 타입으로 변경
- 이상치 처리: 비정상적인 값 처리
- 데이터 통합: 여러 데이터 소스 결합
信息
데이터 과학자들은 업무 시간의 80%를 데이터 전처리에 사용한다고 합니다!
处理缺失值
检查缺失值
import pandas as pd
import numpy as np
# 샘플 데이터 (결측치 포함)
data = {
'name': ['Alice', 'Bob', 'Charlie', None, 'Eve'],
'age': [25, None, 35, 28, 32],
'salary': [50000, 60000, None, 55000, None],
'department': ['IT', 'HR', 'IT', None, 'HR']
}
df = pd.DataFrame(data)
print("=== 원본 데이터 ===")
print(df)
# 检查缺失值
print("\n=== 결측치 개수 ===")
print(df.isnull().sum())
# 결측치 비율
print("\n=== 결측치 비율 ===")
print((df.isnull().sum() / len(df) * 100).round(2))
# 결측치가 있는 행
print("\n=== 결측치 포함 행 ===")
print(df[df.isnull().any(axis=1)])
删除缺失值
# 결측치가 있는 행 전체 제거
df_dropped_rows = df.dropna()
print("행 제거 후:", df_dropped_rows.shape)
# 결측치가 있는 열 제거
df_dropped_cols = df.dropna(axis=1)
print("열 제거 후:", df_dropped_cols.shape)
# 특정 열의 결측치만 제거
df_dropped_subset = df.dropna(subset=['name', 'age'])
print("name, age 결측치 제거:", df_dropped_subset.shape)
# 모 든 값이 결측치인 행만 제거
df_dropped_all = df.dropna(how='all')
# 최소 N개 이상의 값이 있는 행만 유지
df_dropped_thresh = df.dropna(thresh=3) # 최소 3개 값
填充缺失值
# 특정 값으로 채우기
df_filled = df.fillna(0)
df_filled = df.fillna('Unknown')
# 열별로 다른 값 채우기
df_filled = df.fillna({
'age': df['age'].mean(), # 평균
'salary': df['salary'].median(), # 중앙값
'department': 'Unknown'
})
# 앞/뒤 값으로 채우기 (시계열 데이터)
df_ffill = df.fillna(method='ffill') # 앞 값으로
df_bfill = df.fillna(method='bfill') # 뒤 값으로
# 보간법
df['age'] = df['age'].interpolate() # 선형 보간