AICE - 데이터 전처리 2

이강민·2023년 8월 9일
0

AICE

목록 보기
10/18
post-thumbnail

범주형 데이터 정제하기

데이터를 분석하여 통계를 만들 때 번주형 데이터를 전처리하는 것은 중요하다.
남자, 여자의 구분은 보통 M, W로 표기하지만 컴퓨터는 남자와 여자를 구분하지 못하기 때문에 남자는 0, 여자는 1과 같이 변경하여주는 것이 좋다.
이와 같이 컴퓨터가 데이터를 이해할 수 있도록 범주형데이터를 수치형 데이터로 변경하는 과정을 범주형 인코딩이라고 한다.

레이블 인코딩하기

판다스에서 레이블 인코딩 하기

# -1은 갯수를 자동으로 구하라는 것이다. reshape(행,열) 행의 갯수는 자동으로 설정하고 1열로 만든다.
df["label_encoding"] = pd.factorize(df['airline'])[0].reshape(-1,1)
df.head()

사이킷런으로 레이블 인코딩하기

사이킷런을 활용하여 간단하게 레이블 인코딩을 할 수 있다.
또한 인코딩 시 알파벳 순으로 인코딩된다.

import pandas as pd
df = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/Clean_Dataset.csv', encoding='cp949')

from sklearn.preprocessing import LabelEncoder

#LabelEncoder를 이용하여 칼럼 레이블 인코딩하기
le = LabelEncoder()
df['airline_Label_Encoder'] = le.fit_transform(df['airline'])

#airline의 데이터와 비교하여 인콛딩 확인하기
print(df[['airline']].value_counts())
print(df[['airline_Label_Encoder']].value_counts())

알파벳 순으로 인코딩된 데이터는 다시 디코딩하여 역변환 시킬 수 있다.

le.inverse_transform(df['airline_Label_Encoder']).reshape(-1,1)

원핫 인코딩하기

순서나 랭크가 없는 카테고리형 데이터를 수치형 데이터로 바꾸는 과정에서 의도하지 않았는데로 알파벳순으로 순번이 생성되고 그로 인해 생성된 숫자 정보가 모델에 잘못 반영될 수 있는 위험이 있다.
이를 해결할 수 있는 방법이 원핫 인코딩이다. 원핫 인코딩은 1개의 요소는 True 나머지 요소는 False로 만들어주는 기법이다.

판다스에서 원핫 인코딩하기

# 1. class 속성만 보기 
pd.get_dummies(df['class'])

# 2. 전체 속성에 바로 적용시키기 
pd.get_dummies(df, columns = ['class'])


맨 우측 두개의 데이터가 추가된 것을 알 수 있다.

사이킷런으로 원핫 인코딩하기

import pandas as pd
df = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/Clean_Dataset.csv', encoding='cp949')

from sklearn.preprocessing import OneHotEncoder

oh =OneHotEncoder()
encoder = oh.fit_transform(df['class'].values.reshape(-1,1)).toarray()

# 원핫 인코딩 결과를 데이터 프레임으로 만들기
df_onehot = pd.DataFrame(encoder, columns = ['class' + str(oh.categories_[0][i]) for i in range (len(oh.categories_[0]))])

# 만들어지 데이터프레임을 원본과 합치기
df1 = pd.concat([df, df_onehot], axis = 1)
df1

profile
NullpointException

0개의 댓글