[python] 범주형 데이터 처리 방법

데이터 과학 및 기계 학습에서는 대부분의 경우 데이터에 범주 형 변수가 포함되어 있습니다. 이러한 변수는 숫자가 아닌 값을 가지며, 예를 들어 성별, 국적, 학력 수준 등이 있을 수 있습니다. 이러한 범주형 데이터를 모델에 적용하기 위해서는 적절한 처리 방법이 필요합니다.

1. 더미 변수 인코딩 (One-Hot Encoding)

더미 변수 인코딩은 가장 일반적인 범주형 데이터 처리 방법 중 하나입니다. 이 방법은 각 범주 값을 새로운 열로 만들어, 해당 값이 존재하는 경우에는 1, 존재하지 않는 경우에는 0의 값을 할당합니다. 이를 통해 모델이 범주 정보를 이해할 수 있도록 도와줍니다.

import pandas as pd

# 범주형 데이터가 있는 데이터프레임 생성
data = pd.DataFrame({'color': ['red', 'blue', 'green', 'red', 'green']})

# 더미 변수 인코딩 적용
encoded_data = pd.get_dummies(data['color'])

print(encoded_data)

Output:

   blue  green  red
0     0      0    1
1     1      0    0
2     0      1    0
3     0      0    1
4     0      1    0

위의 예제에서 color 열의 범주형 데이터를 더미 변수 인코딩을 통해 변환한 결과를 확인할 수 있습니다. color 열의 범주인 ‘red’, ‘blue’, ‘green’은 각각 독립된 열로 생성되었으며, 해당 값이 있을 경우 1의 값을, 없을 경우 0의 값을 가지고 있음을 확인할 수 있습니다.

2. 순서형 인코딩 (Ordinal Encoding)

순서형 인코딩은 각 범주 값을 숫자로 변환하는 방법입니다. 이 방법은 범주 값들 사이의 상대적인 순서를 유지한 채로 변환합니다. 예를 들어, 옷의 사이즈인 ‘Small’, ‘Medium’, ‘Large’를 숫자로 변환한다고 가정해보겠습니다.

from sklearn.preprocessing import OrdinalEncoder

# 범주형 데이터가 있는 데이터프레임 생성
data = pd.DataFrame({'size': ['Small', 'Medium', 'Large', 'Medium']})

# 순서형 인코딩 적용
encoder = OrdinalEncoder()
encoded_data = encoder.fit_transform(data[['size']])

print(encoded_data)

Output:

[[2.]
 [1.]
 [0.]
 [1.]]

위의 예제에서 size 열의 범주형 데이터를 순서형 인코딩을 통해 변환한 결과를 확인할 수 있습니다. ‘Small’은 2로, ‘Medium’은 1로, ‘Large’는 0으로 변환되었음을 확인할 수 있습니다.

3. 라벨 인코딩 (Label Encoding)

라벨 인코딩은 각 범주 값을 고유한 정수로 변환하는 방법입니다. 순서가 없는 범주형 변수를 처리할 때 주로 사용됩니다.

from sklearn.preprocessing import LabelEncoder

# 범주형 데이터가 있는 데이터프레임 생성
data = pd.DataFrame({'gender': ['Male', 'Female', 'Male', 'Male', 'Female']})

# 라벨 인코딩 적용
encoder = LabelEncoder()
encoded_data = encoder.fit_transform(data['gender'])

print(encoded_data)

Output:

[1 0 1 1 0]

위의 예제에서 gender 열의 범주형 데이터를 라벨 인코딩을 통해 변환한 결과를 확인할 수 있습니다. ‘Male’은 1로, ‘Female’은 0으로 변환되었음을 확인할 수 있습니다.

결론

이상으로 범주형 데이터의 처리 방법에 대해 알아보았습니다. 각각의 방법은 데이터의 특성에 따라 적합한 방법을 선택하여 사용해야 합니다. 더미 변수 인코딩은 범주 수가 많을 때 유용하며, 순서형 인코딩은 범주 값들 간에 순서가 있는 경우에 사용됩니다. 라벨 인코딩은 순서가 없는 범주 값들을 처리할 때 유용한 방법입니다.

References