본문 바로가기
Machine learning/Machine learning 강의

머신 러닝 데이터 전처리 #2 - One-hot Encoding

by grey-hat hacker 2021. 2. 9.
728x90

머신 러닝에서 사용하는 데이터

> 수치형 데이터 : 나이, 몸무게, 키

> 범주형 데이터 : 혈액형, 성별   

  > 머신 러닝의 경우 입력 데이터가 수치형 데이터여야 한다. 

   > 범주형 데이터는 수치형 데이터로 변환해야 한다.

   > 1,2,3 숫자로 근데 이렇게 하면 혈액형에서의 크기가 생긴다.  

   > One-hot Encoding을 이용해서 하나의 새로운 열로 만들어준다! 

   > A형 B형 -> A형 열 B형 열

A형 AB형 B형 O형 나이
0 0 1 0 25
1 0 0 0 36

 > One-hot Encoding을 하면 엉뚱한 관계를 만들지 않으면서 수치형 데이터로 바꿀 수 있다. 

 


import pandas as pd 

TITANIC_FILE_PATH = 'C:/Users/user/Desktop/titanic.csv'

titanic_df = pd.read_csv(TITANIC_FILE_PATH)
titanic_df.head()
	Unnamed: 0	Survived	Pclass	Name	Sex	Age	SibSp	Parch	Ticket	Fare	Cabin	Embarked
0	0	0	3	Braund, Mr. Owen Harris	male	22.0	1	0	A/5 21171	7.2500	NaN	S
1	1	1	1	Cumings, Mrs. John Bradley (Florence Briggs Th...	female	38.0	1	0	PC 17599	71.2833	C85	C
2	2	1	3	Heikkinen, Miss. Laina	female	26.0	0	0	STON/O2. 3101282	7.9250	NaN	S
3	3	1	1	Futrelle, Mrs. Jacques Heath (Lily May Peel)	female	35.0	1	0	113803	53.1000	C123	S
4	4	0	3	Allen, Mr. William Henry	male	35.0	0	0	373450	8.0500	NaN	

Sex(성별), Embarked(배를 탄 장소) 해당 데이터는 범주형 데이터 -> One-hot Encoding -> 수치형 데이터로

titanic_sex_embarked = titanic_df[['Sex','Embarked']]
titanic_sex_embarked.head()
	Sex	Embarked
0	male	S
1	female	C
2	female	S
3	female	S
4	male	S

one_hot_encoded_df = pd.get_dummies(titanic_sex_embarked)
one_hot_encoded_df.head()
	Sex_female	Sex_male	Embarked_C	Embarked_Q	Embarked_S
0	0	1	0	0	1
1	1	0	1	0	0
2	1	0	0	0	1
3	1	0	0	0	1
4	0	1	0	0	1

 


 > 위의 경우는 원하는 데이터만 가져와 One-hot Encoding을 수행 

 > 이번에는 전체 데이터에서 원하는 데이터를 One-hot Encoding 수행 

 > 원하는 데이터만 One-hot Encoding 된 것을 확인할 수 있다. 

one_hot_encoded_df = pd.get_dummies(data=titanic_df, columns=['Sex','Embarked'])
one_hot_encoded_df.head()


Unnamed: 0	Survived	Pclass	Name	Age	SibSp	Parch	Ticket	Fare	Cabin	Sex_female	Sex_male	Embarked_C	Embarked_Q	Embarked_S
0	0	0	3	Braund, Mr. Owen Harris	22.0	1	0	A/5 21171	7.2500	NaN	0	1	0	0	1
1	1	1	1	Cumings, Mrs. John Bradley (Florence Briggs Th...	38.0	1	0	PC 17599	71.2833	C85	1	0	1	0	0
2	2	1	3	Heikkinen, Miss. Laina	26.0	0	0	STON/O2. 3101282	7.9250	NaN	1	0	0	0	1
3	3	1	1	Futrelle, Mrs. Jacques Heath (Lily May Peel)	35.0	1	0	113803	53.1000	C123	1	0	0	0	1
4	4	0	3	Allen, Mr. William Henry	35.0	0	0	373450	8.0500	NaN	0	1	0	0	1

 


 - 최종 코드 

import pandas as pd 

TITANIC_FILE_PATH = 'C:/Users/user/Desktop/titanic.csv'

titanic_df = pd.read_csv(TITANIC_FILE_PATH)

titanic_sex_embarked = titanic_df[['Sex','Embarked']]

one_hot_encoded_df = pd.get_dummies(titanic_sex_embarked)

- 실습 코드

import pandas as pd

GENDER_FILE_PATH = './datasets/gender.csv'

gender_df = pd.read_csv(GENDER_FILE_PATH)
input_data = gender_df.drop(['Gender'], axis=1)
# 일단 목표 변수로 사용할 성별 열을 제외한 새로운 dataframe을 만들어줄게요.
# 여기 코드를 쓰세요
X = pd.get_dummies(input_data)
# 체점용 코드
X.head()
728x90
반응형

댓글