brunch

You can make anything
by writing

C.S.Lewis

by 유윤식 Aug 08. 2023

Polars #03

#with_columns #one-hot

개인적으로 데이터 전처리에서 종종 사용되는 기능이 있다면

카테고리컬 데이터를 기준에 따라 구간을 만들거나

각 구간별로 데이터를 하나의 컬럼으로 만드는 것이다.


예를 들어,

수학 점수를

0 - 10 >> 10 -20 >> 20 - 30 >> ... >> 90 - 100 으로 구간을 줄 수 있다.

그리고 해당 구간에 들어온 데이터에 1, 0 을 표시할 수 있다.


이걸 pola.rs 에서는 어떻게 만들 수 있을까?


여기 이전에 사용하던 taxi 데이터가 있는데,

trip_distance 라는 값에 구간을 주고 새로운 컬럼 하나를 생성해보자.

















간단하게 0 - 1 >> 1 - 2 >> 2 - 3 >> 기타 등등 과 같이 구간을 나눠보면

'new_trip_distance' 라는 컬럼 하나가 생성되고 해당 컬럼은 구간별 조건에 맞는 데이터에 대해서

1, 2, 3, 10 이라는 값을 가진다.


무엇보다도... 저 코드 구조는 조금 번거로운 느낌이 들었다.


이건 결국 하나의 컬럼에 구간의 값을 넣어준 상황이다.

만약 one-hot 형태의 데이터를 만들고자 한다면 구간에 맞는 컬럼이 각각 하나씩 생성되어야 한다.


예를 들어,

new_trip_distance_00, new_trip_distance_01, new_trip_distance_02, 등등


진행해볼 시나리오는

1. trip_distance 의 min, max 값을 통해서 나눠야 하는 구간의 수를 파악하고,

2. 각 구간의 범위를 1로 잘라낸 후에,

3. 0 과 1 로 각 컬럼의 값을 나타낸다.


위의 내용을 코드로 나타내면,

결과를 확인해보니,

trip_distance 는 0 - 50 구간의 값을 가지는 것으로 확인되었다.


이를 통해서,

trip_distance_level 을 50개의 구간으로 나누게 되었고 해당 구간을 모두 컬럼으로 생성함과 동시에 

0 과 1의 값을 넣어줄 수 있었다.


새로운 컬럼 50개가 추가로 생성되었음을 알 수 있다.


머신러닝 / 딥러닝 작업을 진행할 때 많이 사용하는 '피쳐 엔지니어링' 에서도 사용하는 방법으로 알고있다.


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari