본문 바로가기

Programming/Machine Learning

데이터 전처리

1. 결측치 처리 전략

  • NaN 데이터 모두 삭제 (complete drop)
  • 데이터가 없는 최소의 개수 등의 규칙을 정해 삭제
  • 데이터가 거의 없는 feature는 feature 자체를 삭제
  • 최빈값, 평균값으로 NaN을 보간
  • KNN 같은 방법을 사용하여 근사 instance의 값으로 보간
# 결측치 확인하기
# nan 값이 얼마나 있는지 column별로 확인
df.isnull().sum()

# 전체 data 개수 대비 NaN의 비율
df.isnull().sum() / len(df)


# 결측치가 있는 row 삭제
# 튜플에서 데이터가 하나라도 없으면 삭제
df = df.dropna()

# 모든 데이터가 NaN일 때만 삭제
df = df.dropna(how='all')

# column을 기준으로 nan 값이 4개 이상이면 해당 column 삭제
df = df.dropna(axis=1, thres=3)


# 결측치를 보간
# NaN을 0으로 채워버리기
df.fillna(0)

# 평균값으로 채워버리기
df['col1'].fillna(df['col1'].mean(), inplace=True)

# 그룹 범주로 나눠서 그룹별 평균값으로 채워버리기
df['col1'].fillna(df.groupby('sex')['col1'].transform('mean'), inplace=True)

# 컬럼 A와 B 모두 Null이 아닌 경우만 표시
df[df['A'].notnull() & df['B'].notnull()]

 

 

2. 범주형 변수 처리 전략

  • One Hot Encoding (일반적인 범주형 데이터 분석)
  • Data Binding

 

# One Hot Encoding
# 데이터프레임에서 object 타입으로 되어있는 변수는 dummy 변수화
pd.get_dummies(df)


# 특정 컬럼에 대해서만 dummy 변수화한 df 반환
pd.get_dummies(df['colA'])

#대괄호가 두번 들어가면 prefix로 변수명이 붙어서 반환
pd.get_dummies(df[['colA']])


# Data Binning
# 연속형 데이터를 구간으로 나누어 범주화하는 방법
# 구간을 설정한다. (0~25, ... , 75~100)
bins = [0, 25, 50, 75, 100]

# 구간별 이름
bins_names = ['A', 'B', 'C', 'D', 'E']
categories = pd.cut(df['score'], bins, labels=bins_names)
categories

 

 

3. Feature Scaling 전략

- 신경망 모델 뿐만 아니라 Ridge, Lasso 같은 선형회귀 모델에서도 데이터의 feature를 맞춰줘야 할 필요가 있음.

- 데이터의 값이 너무 크거나 작아 변수의 영향이 제대로 반영되지 않음.

- 알고리즘의 계산 과정에서 0으로 수렴하거나 값이 너무 커져버리거나 할 수 있음.

  • Min-Max Normalization
  • Standardization
# Min-Max Nomarlization
from sklearn.preprocessing import MinMaxScaler
minmax_scale = MinMaxScaler(feature_range=[0,1]).fit(df[['A', 'B']])
df_minmax = minmax_scale.transform(df[['A', 'B']])


# Standardization
from sklearn.preprocessing import StandardScaler
std_scale = StandardScaler().fit(df[['A', 'B']])
df_std = std_scale.transform(df[['A', 'B']])

'Programming > Machine Learning' 카테고리의 다른 글

Matplotlib 실습  (0) 2020.02.16
DataFrame 실습  (0) 2020.02.16
파이프라인  (0) 2020.02.16
이진 분류  (0) 2020.02.16
그리드 서치  (0) 2020.02.16