728x90
반응형
원핫 인코딩은 n개의 범주형 데이터를 n개의 비트(0,1) 벡터로 표현합니다.예를 들어, 위에서 언급한 소형, 중형, 대형으로 이루어진 범주형 변수를 원핫 인코딩을 통해 변환하면 다음과 같이 표현할 수 있습니다.소형 : [1, 0, 0]중형 : [0, 1, 0]대형 : [0, 0, 1]원핫 인코딩으로 범주형 데이터를 나타내게되면, 서로 다른 범주에 대해서는 벡터 내적을 취했을 때 내적 값이 0이 나오게 됩니다.이는 서로 다른 범주 데이터는 독립적인 관계라는 것을 표현할 수 있게 됩니다.
One-hot Encoding은 Scikit-Learn의 preprocessing 패키지에 있습니다.
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(sparse=False)
방법1. pandas.get_dummies 사용
- 장점 : 간편하다
- 단점 : 인코딩의 기준을 저장한 객체가 남지 않는다. 새로운 데이터가 들어오면 기존의 데이터와 한꺼번에 실행해야한다. Encoder 객체를 저장할 경우 새로운 데이터만 돌려서 합치면 된다.
col = ["총세대수_lb"]
col_dummies = pd.get_dummies(train[col])
방법2. sklearn.preprocessing.OneHotEncoder 사용
- 주의할 점 : 원핫 인코더로 변환하기 전에 라벨인코더를 통해 모든 문자열이 숫자형 값으로 변환되어야 한다.
- 따라서, '총세대_lb' 컬럼이 object(문자형) 이므로, 사용 불가능
3. 문자열(object)을 정수형(int)으로 return
- 2020-04-09을 parsing!
- int()로 변환
def parse_year(s):
return int(s[:4]) # 2020
def parse_month(s):
return int(s[5:7]) # 04 # [5;7] 이면 실제적으로는 5-6
def parse_day(s):
return int(s[8:]) # 09
# 추가적으로 분석의 편리를 위해 열 이름을 영어로 바꿔줍니다.
# 9개의 컬럼을 새로 추가로 생성합니다.
# Pandas DataFrame에서는 row별로 loop를 도는 것이 굉장히 느리기 때문에, apply() 함수를 이용하여 벡터 연산을 진행합니다.
df['start_year'] = df['생산기간'].apply(parse_year)
df['start_month'] = df['생산기간'].apply(parse_month)
df['start_day'] = df['생산기간'].apply(parse_day)
df['end_year'] = df['생산기간.1'].apply(parse_year)
df['end_month'] = df['생산기간.1'].apply(parse_month)
df['end_day'] = df['생산기간.1'].apply(parse_day)
df['recall_year'] = df['리콜개시일'].apply(parse_year)
df['recall_month'] = df['리콜개시일'].apply(parse_month)
df['recall_day'] = df['리콜개시일'].apply(parse_day)
df.head(3)
728x90
반응형
'Machine Learning & Data Analytics' 카테고리의 다른 글
What is data mining(데이터 마이닝)? (0) | 2022.02.18 |
---|---|
[Jupiter Notebook] 기본적으로 자주 사용되는 마크다운 사용법 (0) | 2022.02.18 |
Data encoding (1. Label Encoding) (0) | 2022.02.17 |
데이터 전처리 Data Preprocessing (0) | 2022.02.17 |
Exploratory Data Analysis (EDA)_1. Feature Distribution Visualization (0) | 2022.02.13 |