팬더 cut() 대 qcut() 함수
추가 분석을 위해 연속 숫자 데이터를 다양한 버킷에 바인딩하는 것은 이러한 데이터를 처리할 때 자주 유용합니다. 비닝은 버킷팅, 이산 비닝, 이산화 또는 양자화라고도 합니다.
판다 컷()
기능
배열 요소는 Pandas cut()
기능을 사용하여 다양한 빈으로 나뉩니다. 잘라내기
기능은 주로 스칼라 데이터 통계 분석에 사용됩니다.
통사론:
cut(
x,
bins,
right=True,
labels=None,
retbins=False,
precision=3,
include_lowest=False,
duplicates="raise",
)
판다 qcut()
함수
Pandas의 설명에 따르면 qcut()
은 분위수 기반 이산화 함수입니다. qcut
이 기본 데이터에서 동일한 크기의 빈을 생성하기 위해 노력한다는 의미입니다. 빈의 실제 수치 에지를 사용하는 대신 함수는 데이터 분포 방식에 따라 백분위수를 사용하여 에지를 결정합니다.
통사론:
pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates="raise")
cut()
과 qcut()
함수의 차이점
즉, cut()
과 qcut()
의 주요 차이점입니다. qcut()
을 사용하여 빈의 항목이 균등하게 분배되도록 하고 cut()
을 사용하여 사용자 지정 숫자 빈 범위를 만듭니다.
아래 주어진 예에서 이 차이점을 배울 것입니다.
코드 예:
# import libraries
import numpy as np
import pandas as pd
# create a data frame
df = pd.DataFrame(
{
"column_x": np.random.randint(1, 50, size=50),
"column_y": np.random.randint(20, 100, size=50),
"column_z": np.random.random(size=50).round(2),
}
)
df.head()
출력:
column_x column_y column_z
0 6 68 0.70
1 30 83 0.50
2 35 64 0.41
3 28 98 0.73
4 5 24 0.79
첫 번째 2
열에는 각각 1
에서 50
및 20
에서 100
범위의 숫자가 있습니다. 0
에서 1
까지의 세 번째 열 범위에 부동하며 numpy
루틴을 사용하여 이러한 값을 무작위로 생성했습니다.
이제 cut()
함수가 전체 값 범위를 작은 빈으로 분배하고 각 빈이 다루는 범위는 동일하다는 것을 알고 있습니다. 결과적으로 1
과 50
사이의 다른 정수를 첫 번째 열 (column x)
에 할당합니다. 먼저 이 열의 최저값과 최고값을 확인해 봅시다.
코드 예:
df.column_x.max(), df.column_x.min()
출력:
(49, 3)
예를 들어 이 열을 5개의 동일한 부분으로 나누면 다음과 같이 각 빈의 크기를 9.2
로 얻게 됩니다.
$$
(49 - 3) / 5 = 9.2
$$
이 비닝 프로세스는 각 값을 적절한 빈에 배치하는 cut()
함수에 의해 수행됩니다.
코드 예:
df["column_x_binned"] = pd.cut(df.column_x, bins=5)
df.column_x_binned.value_counts()
출력:
(21.4, 30.6] 16
(39.8, 49.0] 14
(12.2, 21.4] 8
(30.6, 39.8] 6
(2.954, 12.2] 6
보시다시피 가장 작은 것을 제외하고 모든 쓰레기통의 크기는 정확히 9.2
인치입니다. 하한선에는 아무것도 포함되지 않습니다.
이를 포함하려면 가장 작은 빈의 하한이 가장 낮은 값 3
보다 약간 작아야 합니다.
빈 경계를 수동으로 지정하여 빈의 모양을 변경할 수 있습니다. bins 인수는 가장자리 값을 목록으로 받습니다.
코드 예:
pd.cut(df.column_x, bins=[0, 10, 40, 50]).value_counts()
출력:
(10, 40] 33
(40, 50] 13
(0, 10] 4
기본적으로 오른쪽 가장자리가 포함됩니다. 그러나 이것은 수정할 수 있습니다.
코드 예:
pd.cut(df.column_x, bins=[0, 10, 40, 50], right=False).value_counts()
출력:
[10, 40) 33
[40, 50) 13
[0, 10) 4
cut()
함수를 사용하는 동안 각 빈에 속하는 값은 완전히 제어할 수 없습니다. Bin 가장자리를 정의하는 것으로 제한됩니다.
이 시점에서 qcut()
함수에 익숙해져야 합니다. 각 버킷에 거의 동일한 값이 있도록 값을 버킷으로 나눌 수 있습니다.
코드 예:
pd.qcut(df.column_x, q=4).value_counts()
출력:
(40.75, 49.0] 13
(19.5, 25.0] 13
(2.999, 19.5] 13
(25.0, 40.75] 11
각 4
버킷은 거의 동일한 값을 보유합니다. 버킷이 4개인 경우 버킷을 사분위수라고도 합니다.
첫 번째 사분위수에는 전체 값 수의 1/4이 포함되고 처음 두 버킷에는 50%가 포함되는 식입니다.
qcut()
함수로 빈 가장자리를 제어하지 않습니다. 자동으로 계산됩니다.
40
값(40행)을 포함하는 열을 고려하고 4
버킷을 원합니다. 첫 번째 버킷의 상위 범위는 가장 작은 값부터 시작하여 10
값을 포함하도록 선택됩니다.
결론
cut()
또는 qcut()
기능을 사용하여 일련의 연속 값을 불연속형 또는 범주형 변수로 변환할 수 있습니다.
cut()
함수는 빈의 값 범위와 관련이 있습니다. 가장 작은 숫자와 가장 큰 숫자의 차이는 전체 범위를 설정하는 데 사용됩니다.
그런 다음 전체 범위를 원하는 빈 수로 나눕니다. 기본적으로 각 그룹의 크기는 거의 동일하며 유일한 변수는 하위 그룹과 상위 그룹의 가장자리 사이의 거리입니다.
각 빈에 있는 값의 양은 qcut()
함수의 주요 초점입니다. 값은 내림차순으로 정렬됩니다.
Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn