Data Science/Pandas & Numpy&Scikit-learn

[인코딩,sklearn] One-Hot Encoding

상어군 2021. 9. 14. 10:07
반응형

인코딩 방법에는 여러가지가 존재한다.

본 포스팅에서는 가장 널리 쓰이는 One-Hot 인코딩을 사용한다.

샘플 데이터 생성

import pandas as pd
df=pd.DataFrame({
    'ID':[1,2,3,4,5],
    'name':['아메리카노','바닐라라떼','아메리카노','민트초코','아메리카노'],
    'tumbler':['N','Y','Y','N','N']
})

print(df)

컬럼별 데이터 타입 살펴보기

print(df.dtypes)

범주형 데이터 타입만 살펴보기 (categorical, object)

categorical_list = df.dtypes[df.dtypes == "object"].index.tolist()
print("Categorical features: ", categorical_list)

범주형 데이터 One-Hot 인코딩

from sklearn.preprocessing import OneHotEncoder

enc = OneHotEncoder()
enc.fit(df[categorical_list])

encoded_df = pd.DataFrame(enc.transform(df[categorical_list]).toarray(),
                      columns=enc.get_feature_names(categorical_list))

print(encoded_df)

기존 데이터프레임에 합치기

encoded_df에는 범주형 컬럼에 대한 One-Hot 인코딩 결과가 들어있다.

기존 데이터프레임 df에서 범주형 컬럼을 삭제(drop)하고 수치형 컬럼만 남긴다.

그리고 두 데이터프레임을 합친다(concat).

df = df.drop(categorical_list, axis=1)
df = pd.concat([df,encoded_df],axis=1)

print(df)

인코더에 fit된 범주형 데이터 리스트 보기

print(enc.categories_)

 

반응형