팬더 cut() 대 qcut() 함수

Zeeshan Afridi 2023년6월21일
  1. 판다 컷() 기능
  2. 판다 qcut() 함수
  3. cut()qcut() 함수의 차이점
  4. 결론
팬더 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에서 5020에서 100 범위의 숫자가 있습니다. 0에서 1까지의 세 번째 열 범위에 부동하며 numpy 루틴을 사용하여 이러한 값을 무작위로 생성했습니다.

이제 cut() 함수가 전체 값 범위를 작은 빈으로 분배하고 각 빈이 다루는 범위는 동일하다는 것을 알고 있습니다. 결과적으로 150 사이의 다른 정수를 첫 번째 열 (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 Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

관련 문장 - Pandas Function