본문 바로가기

코딩/머신러닝&데이터 분석 강의

[머신러닝 인강] 13-1주차: Pandas DataFrame 숫자 데이터, 범주형 데이터, 데이터의 전처리

<13-1주차 수강 클립>

04. 데이터 분석을 위한 Python (Pandas)

17. DataFrame 타입이해 - 11. 숫자 데이터와 범주형 데이터의 이해

18. DataFrame 타입이해 - 12. 숫자 데이터의 범주형 데이터화

19. DataFrame 타입이해 - 13. 범주형 데이터 전처리 하기(one-hot encoding)

 


 

이번 주차는 DataFrame 타입의 이해 그 마지막 시간이었습니다.

존재하는 데이터는 크게 숫자형 / 범주형(category) 두 가지로 나눌 수 있는데,

숫자형 데이터를 범주형 데이터화, 범주형 데이터를 숫자형으로 전처리하는 법을

배워봤답니다.

>>수강 인증샷<<

 

 


 

17. DataFrame 타입이해 - 11. 숫자 데이터와 범주형 데이터의 이해

 

- info 함수로 각 변수의 데이터 타입 확인

타입 변경: astype함수

train_data.info()

: float64 = 64비트 복소수형

: int64 = 64비트 실수형

: object = 객체 (string 문자열)

 

 

- 숫자형(Numerical Type) 데이터

연속성을 띄는 숫자로 이루어진 데이터 ex) Age, Fare etc...

 

 

- 범주형(Categorical Type) 데이터

연속적이지 않은 값(대부분의 경우 숫자를 제외한 나머지 값)을 갖는 데이터를 의미 ex) Name, Sex, Ticket, Cabin, Embarked etc;;

어떤 경우, 숫자형 타입이라 할지라도 개념적으로 범주형으로 처리해야 할 경우가 있음 (숫자가 의미하는게 어떠한 '카테고리'를 의미하는 경우!) ex) Pclass (1등석 2등석 3등석)

데이터 연산에 바로 적용할 수 없기 때문에 1. 버리거나 2. 숫자형 데이터로 변환을 시켜야 함

 

 


 

18. DataFrame 타입이해 - 12. 숫자 데이터의 범주형 데이터화

 

- Pclass 변수 변환하기 (범주형 → 숫자형)

astype 함수 사용하여 간단히 타입만 변환하기

train_data['Pclass'] = train_data['Pclass'].astype(str)

: Pclass의 int64를 string으로 변환 후 다시 'Pclass' column에 넣기

 

 

- Age 변수 변환하기 (숫자형 → 범주형)

변환 로직(숫자형을 범주형으로 변환할)을 함수로 만든 후, apply 함수로 적용하기

import math

# 변환 로직 만들기
def age_categorize(age):
    if math.isnan(age): #NaN값 처리
        return -1
    return math.floor(age / 10) * 10 #소수점 떼기

: 기존 나이(소수점 붙은 float형) → 소수점 제외, 10대/20대/30대...의 int형으로 구분

 

 

train_data['Age'].apply(age_categorize)

: 복사본의 Series를 반환 (원본 데이터는 변경 x)

 

 


 

19. DataFrame 타입이해 - 13. 범주형 데이터 전처리 하기(one-hot encoding)

 

- One-hot encoding

범주형 데이터는 분석단계에서 계산이 어렵기 때문에 숫자형으로의 변경이 필요함

범주형 데이터의 각 범주(category)를 column 레벨로 변경 (하나하나의 column으로 뜯음)

해당 범주에 해당하면 1, 아니면 0으로 채우는 인코딩 기법

*) pandas.get_dummies 함수 사용

*) drop_first: 첫 번째 카테고리 값은 사용하지 않음 (모든 범주 column의 값이 0일 경우 생략된 범주라는 의미!)

pd.get_dummies(train_data)

: 각각의 모든 범주형 데이터인 Name, Sex, Ticket, Fare, Cabin, Embarked를 column level로 올린 것 (object type이기 때문)

: 전체 범주가 모두 column으로 올라감

: 해당하면 1, 해당하지 않으면 0으로 값을 채움

 

 

pd.get_dummies(train_data, columns=['Pclass', 'Sex', 'Embarked'])

: columns 파라미터에 리스트로 전달

: 명시한 변수들만 전체 범주를 column level로 올림

 

 

pd.get_dummies(train_data, columns=['Pclass', 'Sex', 'Embarked'], drop_first=True)

: column 내의 모든 값을 새로운 column으로 옮겼을 때 첫 번째 한 범주는 버림 (=one-hot encoding의 의미)

: 해당하면 1, 아니면 0 구분을 바탕으로 나머지 범주의 값이 모두 0이면 dropped first 범주에 해당한다고 해석!

 


 

강의 링크: https://bit.ly/3cB3C8y

반응형