데이터 전처리 : 범주형 데이터
이번 시간에는 데이터 전처리를 시작해 보도록 하겠습니다.
머신러닝은 한글 또는 영어로 된 데이터를 인식할 수 없으므로 범주형 데이터는 숫자로 변환(인코딩)시켜줘야 합니다.
이번 시간 정리
1. type확인
- df.info()
[리마인드] 판다스의 자료형
- object(문자열) : 예) '호수'
- int64(정수) : 예) 10
- float64(실수) : 예) 12.12
2. 레이블 인코딩
- le.fit_transform(df['컬럼명']) *한번에 fit과 transform 변환
실행 완료
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9 entries, 0 to 8
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 가격 9 non-null int64
1 호수 9 non-null int64
2 칼로리 9 non-null float64
3 원산지 9 non-null int64
4 살찔까요 9 non-null int64
dtypes: float64(1), int64(4)
memory usage: 488.0 bytes
실행 완료
[26]:
array([0, 1, 0, 0, 1, 0, 0, 0, 0])
실행 완료
[25]:
array([0, 1, 0, 0, 1, 0, 0, 0, 0])
실행 완료
[24]:
가격호수칼로리원산지살찔까요012345678
16000 | 11 | 1200.0 | 0 | 0 |
15000 | 12 | 1500.0 | 1 | 1 |
14000 | 9 | 1600.0 | 0 | 1 |
14000 | 9 | 1800.0 | 0 | 1 |
14000 | 11 | 1300.0 | 1 | 1 |
13000 | 10 | 1400.0 | 0 | 1 |
13000 | 10 | 1300.0 | 0 | 1 |
12000 | 10 | 1000.0 | 0 | 0 |
9900 | 10 | 1000.0 | 0 | 0 |
영상을 잠시 멈추고 실습을 진행해 주세요.
실행 완료
[23]:
가격호수칼로리원산지살찔까요012345678
16000 | 11 | 1200.0 | 국내산 | 0 |
15000 | 12 | 1500.0 | 브라질 | 1 |
14000 | 9 | 1600.0 | 국내산 | 1 |
14000 | 9 | 1800.0 | 국내산 | 1 |
14000 | 11 | 1300.0 | 브라질 | 1 |
13000 | 10 | 1400.0 | 국내산 | 1 |
13000 | 10 | 1300.0 | 국내산 | 1 |
12000 | 10 | 1000.0 | 국내산 | 0 |
9900 | 10 | 1000.0 | 국내산 | 0 |
3. 여러 개의 column을 인코딩하는 경우
실행 완료
[22]:
가격호수칼로리원산지살찔까요012345678
16000 | 11 | 1200.0 | 국내산 | no |
15000 | 12 | 1500.0 | 브라질 | yes |
14000 | 9 | 1600.0 | 국내산 | yes |
14000 | 9 | 1800.0 | 국내산 | yes |
14000 | 11 | 1300.0 | 브라질 | yes |
13000 | 10 | 1400.0 | 국내산 | yes |
13000 | 10 | 1300.0 | 국내산 | yes |
12000 | 10 | 1000.0 | 국내산 | no |
9900 | 10 | 1000.0 | 국내산 | no |
실행 완료
for in 반복문
- 자료형에 담긴 자료들을 하나씩 꺼내고 싶을때 사용한다.
- 이렇게 반복문을 활용해서 실행을 하게 되면 컬럼이 아무리 많아도 반복문을 통해서 한번에 인코딩 할 수 있다.
실행 완료
실행 완료
[19]:
가격호수칼로리원산지살찔까요012345678
16000 | 11 | 1200.0 | 국내산 | no |
15000 | 12 | 1500.0 | 브라질 | yes |
14000 | 9 | 1600.0 | 국내산 | yes |
14000 | 9 | 1800.0 | 국내산 | yes |
14000 | 11 | 1300.0 | 브라질 | yes |
13000 | 10 | 1400.0 | 국내산 | yes |
13000 | 10 | 1300.0 | 국내산 | yes |
12000 | 10 | 1000.0 | 국내산 | no |
9900 | 10 | 1000.0 | 국내산 | no |
4. 원핫(one-hot) 인코딩
- 각 카테고리별로 컬럼을 만들어서 해당되는 카테고리의 컬럼은 1, 나머지 컬럼은 0으로 인코딩
실행 완료
[16]:
가격호수칼로리원산지살찔까요012345678
16000 | 11 | 1200.0 | 국내산 | no |
15000 | 12 | 1500.0 | 브라질 | yes |
14000 | 9 | 1600.0 | 국내산 | yes |
14000 | 9 | 1800.0 | 국내산 | yes |
14000 | 11 | 1300.0 | 브라질 | yes |
13000 | 10 | 1400.0 | 국내산 | yes |
13000 | 10 | 1300.0 | 국내산 | yes |
12000 | 10 | 1000.0 | 국내산 | no |
9900 | 10 | 1000.0 | 국내산 | no |
실행 완료
[17]:
array([[1., 0.],
[0., 1.],
[1., 0.],
[1., 0.],
[0., 1.],
[1., 0.],
[1., 0.],
[1., 0.],
[1., 0.]])
실행 완료
[18]:
[array(['국내산', '브라질'], dtype=object)]
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/1618568311.py in <module>
1 # 피처(컬럼)이름과 카테고리
----> 2 ohe.get_feature_names_out()
NameError: name 'ohe' is not defined
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/559772865.py in <module>
1 # 데이터프레임으로 변환
----> 2 df_cat = pd.DataFrame(cat, columns=ohe.get_feature_names_out())
3 df_cat
NameError: name 'cat' is not defined
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/2345693229.py in <module>
1 # 데이터 프레임 합치기
----> 2 df = pd.concat([df,df_cat],axis=1)
3 df
NameError: name 'df_cat' is not defined
실행 완료
[12]:
가격호수칼로리살찔까요012345678
16000 | 11 | 1200.0 | no |
15000 | 12 | 1500.0 | yes |
14000 | 9 | 1600.0 | yes |
14000 | 9 | 1800.0 | yes |
14000 | 11 | 1300.0 | yes |
13000 | 10 | 1400.0 | yes |
13000 | 10 | 1300.0 | yes |
12000 | 10 | 1000.0 | no |
9900 | 10 | 1000.0 | no |
5. 원핫(one-hot) 인코딩(심화)
- 여러 개 컬럼 한 번에 인코딩
실행 완료
[11]:
가격호수칼로리원산지살찔까요012345678
16000 | 11 | 1200.0 | 국내산 | no |
15000 | 12 | 1500.0 | 브라질 | yes |
14000 | 9 | 1600.0 | 국내산 | yes |
14000 | 9 | 1800.0 | 국내산 | yes |
14000 | 11 | 1300.0 | 브라질 | yes |
13000 | 10 | 1400.0 | 국내산 | yes |
13000 | 10 | 1300.0 | 국내산 | yes |
12000 | 10 | 1000.0 | 국내산 | no |
9900 | 10 | 1000.0 | 국내산 | no |
영상을 잠시 멈추고 실습을 진행해 주세요.
※TIP
Jupyter Notebook으로 학습을 진행하실 경우
코드 에러시 Jupyter Notebook내 하단에서 에러 위치를 확인 할수 있습니다.
또한 코드에 ctrl + / 로 주석처리를 하며 데이터 값, 옵션 값 등을 출력 통해서 확인하면 빠르게 에러를 찾을 수 있습니다.
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/3361793199.py in <module>
1 # 원핫인코딩
2 cols = df.select_dtypes(include='object').columns
----> 3 ohe = OneHotEncoder(sparse=False)
4 cat = ohe.fit_transform(df[cols])
5 df_cat = pd.DataFrame(cat, columns=ohe.get_feature_names_out())
NameError: name 'OneHotEncoder' is not defined
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/2525919477.py in <module>
1 # 데이터프레임 합치기
----> 2 df = pd.concat([df, df_cat], axis=1)
3 df.head()
NameError: name 'df_cat' is not defined
코드 실행
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/3152749986.py in <module>
1 # 컬럼 삭제
----> 2 df = df.drop(cols, axis=1)
3 df
NameError: name 'cols' is not defined
[TIP] 원핫인코딩: 판다스 활용
실행 완료
[5]:
가격호수칼로리원산지살찔까요01234
16000 | 11 | 1200.0 | 국내산 | no |
15000 | 12 | 1500.0 | 브라질 | yes |
14000 | 9 | 1600.0 | 국내산 | yes |
14000 | 9 | 1800.0 | 국내산 | yes |
14000 | 11 | 1300.0 | 브라질 | yes |
'언어 > 파이썬' 카테고리의 다른 글
머신러닝with파이썬5강(1)_의사결정나무, 랜덤포레스트 (0) | 2024.03.10 |
---|---|
머신러닝with파이썬4강(3)_사이킷런으로 머신러닝 진행하기, 사이킷런 공식문서 사이트 (0) | 2024.03.09 |
머신러닝with파이썬4강(1)_사이킷런 활용하기, 사이킷런에서 제공하는 데이터셋 (0) | 2024.03.07 |
머신러닝with파이썬3강(5)_그룹핑, apply함수 (0) | 2024.03.06 |
머신러닝with파이썬3강(4)_내장함수 (0) | 2024.03.05 |