데이터의 시각화 관점에서 보았을 때, 데이터는 크게 수치형 데이터와 범주형 데이터로 구분할 수 있다.
범주형 변수란?
어떤 범주에 속하는 순위가 없는 데이터들을 의미한다. '성별'의 경우 '남', '여'로 구분된 범주형 변수이고, '직업'의 경우 '회사원', '자영업자', '프리랜서', '학생' 등으로 구분되는 범주형 변수이다.
인간이 이해하기에 보다 직관적이고 인간을 대상으로 한 자료 수집의 큰 부분을 담당하고 있다.
하지만 컴퓨터가 이해하기에는 어려우며, 연속형 변수와 함께 사용하거나 실수화 하지않으면 시각화 하기 어렵다는 단점이 존재한다.
범주형 데이터의 실수화
위와 같은 이유로 범주형 데이터를 실수화하는 경우가 종종 있다.
이번 실습에서는 Labeling과 One-Hot Encoding, 이 두 가지 방법으로 진행해볼 것이다.
#Labeling
라벨링은 리커트(Likert)척도처럼 항목별로 정수를 부여하는 것이다.
['거주지'] 항목이 있을 때 value로 ['서울', '부산', '대구', '대전', '울산']이 있다면 이것을 [0, 1, 2, 3, 4]로 바꿔 label을 부여해주는 것을 Labeling이라고 한다.
아주 감사하게도 싸이킷런에서는 labeling 모듈을 제공해준다. 이를 이용해서 타이타닉 데이터의 범주형 데이터를 변환해보는 실습을 진행해볼 것이다.
우선 데이터를 불러와서 확인해보면..
![]() |
![]() |
class, deck 등이 category변수이고 sex, embarked, who, embark_town, alive 등이 object변수로 범주형 변수의 후보가 된다.
그중에 embark_town 컬럼을 가지고 Labeling을 진행해볼 것이다.
from sklearn.preprocessing import LabelEncoder
- 우선 Labeling에 필요한 모듈을 import해주고, embark_town이 어떻게 생겼는지 확인해보면
값으로 [Southampton, Cherbourg, Queenstown]을 가지고 있다는 것을 알 수 있다.
encoding = LabelEncoder()
encoding.fit(df['embark_town'])
- 그 다음 LabelEncoder 객체를 생성해주고, embark_town을 fit하게되면, 값에 따라 label이 부여된다.
![]() |
![]() |
확인해보니 {'Southampton' : 2, 'Cherbourg' : 0, 'Queenstown' : 1}로 labeling이 진행된 것을 확인할 수 있다.
#One-Hot Encoding
One-Hot Encoding(원핫 인코딩)은 범주형 데이터에 대해 이진분류하는 방법이다. 해당 값에 해당하는지에 대한 정보를 0, 1로 나타낸다.
이번에는 타이타닉 데이터의 class 컬럼을 가지고 실습을 진행해볼 것이다.
one_encoding = OneHotEncoder(sparse=False)
one_encoding.fit(df[['class']])
위와 마찬가지로 OneHotEncoder 객체를 생성해준 후 class 컬럼을 fit시킨다.
sparse 옵션은 True(default)로 할 경우 결과를 2차원 좌표값으로 반환해주고, False로 하게되면 2차원 numpy array로 반환한다. 우리는 DataFrame으로 처리할 것이기 때문에 numpy array형식으로 반환해주기로 했다.
결과를 확인해보면..
array 형식으로 잘 반환된 것을 볼 수 있다.
One-Hot encoding의 결과값은 2차원 형식이므로 labeling과 달리 array를 dataframe으로 변환해준 다음 concat하는 과정을 거쳐 원본데이터와 결합시킬 수 있다.
df_class = pd.DataFrame(one_encoding.transform(df[['class']]), columns = one_encoding.get_feature_names())
df_class.head()
위와 같이 dataframe을 생성한 후 원본 데이터와 concat메소드를 이용해 합병해주면 분석에 이용할 수 있는 결과 데이터가 나오게 된다.
df_con = pd.concat([df,df_class], axis=1)
df_con
해당 코드의 일부는 행정안전부, NIA, CSLEE, kpc에서 주관하는 공공 데이터 분석 청년 인재 양성 사업의 교재를 참고하였음을 밝힙니다.
'데이터 분석 > 파이썬' 카테고리의 다른 글
[파이썬] 이상값 처리 (0) | 2022.07.06 |
---|---|
[파이썬] 워드 클라우드 (0) | 2022.06.29 |
파이썬 클래스 (0) | 2021.11.14 |
데이터 시각화 그래프 (0) | 2021.06.29 |
numpy 라이브러리 (0) | 2021.03.23 |