하파와 데이터

[빅분기] 실기 1유형- 인코딩(Encoding), Categorical().codes, get_dummies() 본문

자격증/DATA

[빅분기] 실기 1유형- 인코딩(Encoding), Categorical().codes, get_dummies()

hhpp 2024. 11. 29. 23:10

인코딩은 대체로 str로 되어있는 데이터를 유의미하게 사용하기 위해서 전처리하는 방법중 하나이다. 

예를들어, Setosa, Virginica 등이 문자로 있는 것은 의미가 없고, 

이걸 이해하는 것도 어렵기때문에, 0,1,2 등의 숫자로 그 단어를 대체하는 것이다. 

 

또는 10~19세를 0, 20~29를 1 등으로 변경하는 것도 동일한 방법이다. 

 

사실 간단한 값들만 존재한다면, replace, map을 이용해서 내가 직접 인코딩과 같은 절차를 거칠 수도 있다. 

하지만 그 값이 너무도 많다면?? 

그럴때 사용하는 것이 인코딩 기술이다. 

이러한 인코딩에 대해서 배워보자 

 

0. 전제

jupyter notebook 실행한 위치에 data라는 폴더가 있고, 그 안에 iris.csv가 존재한다.

 

1. Categorical().codes

여러가지의 데이터 값이 존재하고, 그것들을 일일이 내가 숫자를 구분하여 구분하기 어렵다. 

그럴때는 바로 Categorical().codes를 사용해보자. 알아서 나눠준다! 

 

import pandas as pd

df = pd.read_csv('data/iris.csv')

df['variety_label'] = pd.Categorical(df['variety']).codes

df

df['variety']의 값을 보고, pd.Categorical().codes가 친히 0,1,2 3가지로나눠서 label을 붙여주었다. 

단, 여기서 Categorical의 시작은 대문자로 시작할 것!! 

 

2. get_dummies()

원핫인코딩을 해주는 것이다. 

get_dummies를 시행하면, 새로운 컬럼이 자동으로 추가되는데, 

추가되는 컬럼은 내가 인코딩을 하고자하는 컬럼 내 데이터의 유일값들로 구성되고 

각 컬럼에는 해당 데이터만 1, 나머지 모든 데이터는 0으로 취급된다. 

 

즉, iris에서 variety는 Setosa, Versicolor, Virginica 3종류가 있다. 

이에, get_dummies를 실행하면, variety_Setosa, variety_Versicolor, variety_Virginica가 생겨나고

각각의 컬럼은 Setosa일때만 1 나머지는 0과같이 자신의 데이터에만 1을 부여하게 된다. 

 

import pandas as pd

df = pd.read_csv('data/iris.csv')
df = pd.get_dummies(df, columns = ['variety'])
# df = pd.get_dummies(df)

df

 

여기서 주의할 점은 pd.get_dummies(df)를 하면 데이터프레임에 있는 모든 범주형(object, category타입)에 대해서 인코딩을 수행한다. 그렇기 때문에 특정 컬럼을 기준으로 원핫인코딩을 수행하기 위해서는 columns = [컬럼명]을 지정해야한다! 

반응형