import pandas as pd
df = pd.DataFrame({
'A' : ['a', 'b', 'c', 'a', 'b'],
'B' : [1,2,3,1,0]
})
df
from sklearn.preprocessing import LabelEncoder
# 변수 설정
le = LabelEncoder()
# (1) 학습(df의 A컬럼을 기준으로)
le.fit(df['A'])
# (2) 잘 학습되었는지 확인
le.classes_
array(['a', 'b', 'c'], dtype=object)
# (3) transformation (fit 이후 해야 함)
le.transform(df['A'])
array([0, 1, 2, 0, 1])
# (4) transformation 값, 컬럼에 넣기
df['le_A'] = le.transform(df['A'])
le.fit_transform(df['A'])
array([0, 1, 2, 0, 1])
le.transform(['a'])
array([0])
le.inverse_transform(df['le_A'])
array(['a', 'b', 'c', 'a', 'b'], dtype=object)
(min)은 0으로, (max)는 1로 만들어 줌
df = pd.DataFrame({
'A' : [10,20,-10,0,25],
'B' : [1,2,3,1,0]
})
df
# MinMaxScaler 모듈
from sklearn.preprocessing import MinMaxScaler
mms = MinMaxScaler()
mms.fit(df)
# data_range_ : 분모 역할(전체 길이)
mms.data_max_, mms.data_min_, mms.data_range_
(array([25., 3.]), array([-10., 0.]), array([35., 3.]))
df_mms = mms.transform(df)
df_mms
mms.inverse_transform(df_mms)
mms.fit_transform(df)
표준정규분포 (표준을 빼고 편차로 나눠주는~)
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(df)
# 평균, 표준편차
ss.mean_, ss.scale_
(array([9. , 1.4]), array([12.80624847, 1.0198039 ]))
df_ss = ss.transform(df)
df_ss
ss.fit_transform(df)
df = pd.DataFrame({
'A' : [-0.1,0.,0.1,0.2,0.3,0.4,1.0,1.1,5]
})
df
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler
mm = MinMaxScaler()
ss = StandardScaler()
rs = RobustScaler()
df_scaler = df.copy()
df_scaler['MinMax'] = mm.fit_transform(df)
df_scaler['Standard'] = ss.fit_transform(df)
df_scaler['Robust'] = rs.fit_transform(df)
df_scaler
import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=(16,6))
sns.set_theme(style='whitegrid')
sns.boxplot(data=df_scaler, orient='h') #orient='h':수평bar
A 안에는 0.1 기준으로 증감하는 데이터들 사이에 5라는 아웃라이어가 있음
5라는 아웃라이어 때문에 MinMaxScaler 결과 한쪽으로 치우치게 됨
MinMaxScaler는 아웃라이어의 영향을 받으면 데이터가 이상해질 수 있음
평균과 중앙값을 쓸때, 평균 이상치를 반영하고, 중앙값은 이상치 영향을 덜 받게 됨
StandardSCaler를 확인했을 때, 평균이 반영되어 대다수의 데이터가 왼쪽으로 치우침
RobustSCaler는 median이 0이 되고, 아웃라이어는 그대로 유지되며 데이터에 영향을 크게 주지 않음