-
[Python Pandas] 데이터 분할, 데이터 균등 분할 (cut, qcut)IT/Pandas 2022. 9. 27. 16:36
Python Pandas 라이브러리를 이용하여 데이터를 분할하는 함수
pandas.cut 과 pandas.qcut을 알아보겠습니다.
pandas.cut
: pandas.cut은 특정 배열에서 데이터 값을 구간으로 분할하고 정렬이 필요할 경우 사용합니다.
연속된 데이터 변수 값을 범주형(categorical) 데이터 변수 값으로 변경할 때 유용합니다.
Pandas.cut을 사용하여 배열을 분할하는 기본 방법을 살펴봅니다.
In [1] :
# 넘파이 라이브러리 임포트 import numpy as np # 판다스 라이브러리 임포트 import pandas as pd # 나이 배열 선언 age_array = np.array([5,15,25,35,45,55,65]) # pandas.cut 사용 , 6개의 구간으로 데이터를 분할 pd.cut(age_array, 6)
Out [1] :
위의 결과와 같이 age_array의 값을 6개의 동일한 길이의 구간으로 분할된 것을 확인할 수 있습니다.
pandas.cut parameters
pandas.cut function은 다양한 매개변수(parameters)가 있습니다.
주로 사용되는 매개변수의 역할을 간략하게 살펴봅니다.
- x : Array-like
- 구간을 나누고자 하는 연속된 데이터 배열. 즉 input 값입니다.
- 구간을 나누고자 하는 연속된 데이터 배열. 즉 input 값입니다.
- bins : Int, Sequence of scalars or IntervalIndex
- Int : 입력한 정수 값을 기준으로 동일한 길이의 int 수 만큼 구간이 분할 됩니다.
- Sequence of scalars : 분할되는 구간을 사용자가 지정하여, 동일하지 않은 길이의 구간으로 분할합니다.
- right : bool, default True
- 구간의 오른쪽을 포함할지 말지 (닫을지 열지)를 결정하는 매개변수입니다.
예를 들어 (0, 20] 이라는 범위는 0 < x <= 20을 뜻하며, 왼쪽은 열려있고 오른쪽은 닫혀있다라고 표현합니다.
- 구간의 오른쪽을 포함할지 말지 (닫을지 열지)를 결정하는 매개변수입니다.
- labels : array or False, default None
- pandas.cut을 사용해서 분할되는 구간에 label을 지정합니다.
- 반드시 분할되는 구간의 갯수와 동일한 갯수의 label 값을 입력으로 주어야 합니다.
- retbins : bool, default None
- 입력 데이터로부터 분할한 구간 정보 (bins)를 return 받을 지를 결정하는 매개변수입니다.
- 입력 데이터로부터 분할한 구간 정보 (bins)를 return 받을 지를 결정하는 매개변수입니다.
pandas.qcut
: pandas.qcut은 특정 배열에서 데이터 값을 구간으로 분할하지만, 구간에 속하는 데이터의 수가 동일하도록
구간을 나누기 위해 사용합니다.
pandas.cut : 분할 구간을 데이터의 값 범위 기준으로 분할
vs
pandas.qcut : 분할 구간을 구간에 속하는 데이터의 수 기준으로 분할
사용 방법은 pandas.cut과 유사합니다.
keras에서 제공하는 boston_housing dataset의 일부를 가져와 살펴봅니다.
In [2] :
# 텐서플로 라이브러리 임포트 import tensorflow as tf # Boston_housing 데이터셋 임포트 from tensorflow.keras.datasets import boston_housing # 판다스 라이브러리 임포트 import pandas as pd # 불러온 데이터 분할 (price만 살펴볼 예정) (train_X, price), (test_X, test_Y) = boston_housing.load_data() # Price array 값을 갖는 Dataframe 생성 original_df = pd.DataFrame(price , columns ={"price"}) original_df
Out [2] :
해당 데이터를 살펴보면 총 404개의 데이터루 구성되어 있으며 최소값 5, 최대값 50을 확인할 수 있습니다.
위에서 생성한 dataframe을 사용하여 price column의 데이터를 "cut"과 "qcut" 둘 다 5개의 구간으로 분할을 합니다.
# pandas.cut 사용 시 In [3] : original_df["price_cut_categories"] = pd.cut(original_df["price"], 5) original_df["price_cut_categories"].value_counts() Out [3] : (14.0, 23.0] 194 (23.0, 32.0] 94 (4.955, 14.0] 64 (32.0, 41.0] 27 (41.0, 50.0] 25 Name: price_cut_categories, dtype: int64 # pandas.qcut 사용 시 In [4] : original_df["price_qcut_categories"] = pd.qcut(original_df["price"], 5) original_df["price_qcut_categories"].value_counts() Out [4] : (4.999, 15.16] 81 (15.16, 19.42] 81 (22.58, 27.94] 81 (27.94, 50.0] 81 (19.42, 22.58] 80 Name: price_qcut_categories, dtype: int64
"cut" function의 경우 5개의 동일한 길이의 구간으로 분할된 것을 확인할 수 있고,
"qcut" function의 경우 각 구간마다 포함되는 데이터의 수가 동일하게 5개의 구간으로 분할된 것을 확인할 수 있습니다.
추가로 qcut을 어떻게 활용할 수 있는지에 살펴보면
"qcut"의 retbin 매개변수를 사용하여 구간 값을 별도로 변수에 저장하여 "cut" function의
"bins" 매개변수의 값으로 사용 가능합니다.
In [5] : # DataFrame 다시 생성 original_df = pd.DataFrame(price , columns ={"price"}) # cut function을 사용하여 "price_cut_category" 생성 original_df["price_cut_category"] = pd.cut(original_df["price"], 5) # qcut function을 사용하여 "price_qcut_category" 생성 및 범주형(categorical) 구간 변수를 return받아 retbins에 저장 original_df["price_qcut_category"], retbins = pd.qcut(original_df["price"], 5, retbins = True) # 위의 qcut function에서 return받은 retbins를 사용하여 "new_category" 생성 original_df["new_category"] = pd.cut(original_df["price"], bins = retbins) # 최종 비교 original_df
Out [5] :
위의 그림과 같이 qcut으로 데이터를 바로 분할한 "price_qcut_category" column의 데이터 값과 qcut에서 반환 받은 retbins 변수를 사용하여 cut으로 데이터를 분할한 "new_category" column의 데이터 값이 동일한 것을 확인할 수 있습니다.
pandas.qcut parameters
pandas.qcut function은 pandas.cut function에 비해 매개변수가 적습니다.
기본적으로 pandas.cut function과 사용 방법과 매개변수는 동일함으로, 차이점인 "q"에 대해 살펴봅니다.
- q : int or list-like of float
- 데이터 구간을 몇개로 나누고 싶은지에 대한 매개변수입니다.
- [0, .2, .5, .75, 1.]과 같은 float형 list로 매개변수 값을 주어서 구간 당 포함되는 데이터 수를 동일하지 않게 변경하는 것도 가능합니다.
pandas 라이브러리에서 제공하는 데이터 분할 함수인 .cut과 .qcut에 대해 알아봤습니다.
많은 도움이 되었기를 바랍니다.
공식 문서는 아래를 참고 바랍니다.
https://pandas.pydata.org/docs/reference/api/pandas.cut.html#pandas.cut
https://pandas.pydata.org/docs/reference/api/pandas.qcut.html#pandas.qcut
'IT > Pandas' 카테고리의 다른 글
[Python Pandas] Pandas Dataframe에서 조건으로 column(열) 값 바꾸는 다양한 방법 (0) 2022.10.19 - x : Array-like