[파이썬] 사분위수(Quantiles)란?

반응형
    반응형

    사분위수란 데이터를 가장 작은 값부터 큰 값으로 나열하고 4등분을 했을 때의 각 등분에 해당하는 값을 말합니다. 그래서 4등분했을 때의 값들을 등위라고 하는데 제p사분위수 라고 합니다.

     

    • 제1사분위수(Q1) : 전체 데이터를 사등분했을 시 1번째에 해당하는 값, 데이터를 작은수부터 나열했을때 25% 지점에 해당하는 수.
    • 제2사분위수(Q2) : 전체 데이터를 사등분했을 때 2번째에 해당하는 수, 50% 지점에 해당하는 수로 중간값(median)과 동일
    • 제3사분위수(Q3) : 전체 데이터를 사등분했을 때 3번째에 해당하는 수, 75% 지점에 해당하는 수
    • 사분위수 범위(Interquartile range,IQR) : Q3-Q1으로 자료 집합의 50%를 가지는 값의 범위.

     

    실생활에서 많이 쓰는 등분은 100,10,4인데 100등분을 하는 경우 백분위수(percentile)이라고 하고, 10등분을 하는 경우 십분위수(decille)이라고 합니다.

    이를 사분위수에 적용하면 제1사분위수(Q1) 은 25%에 해당하므로 제25백분위수(25th percentile) 라고 표현할 수 있습니다. 제2사분위수(Q1)제50백분위수(50th percentile) 또는 제5십분위수(5th decile) 라고 말할 수 있습니다.

     

    사분위수 표현하기

     

    그래프 그리기

    사분위수를 가장 잘 표현하는 그래프는 박스 플롯(box plot)입니다. 박스 플롯는 '상자 수염 그림'(Box-and-Whisker Plot) 이라고도 하는데 데이터분포나 이상치 확인을 하는데 유용합니다. 그래프가 사분위수를 염두해 만들어서 데이터의 사분위가 어디인지 한눈에 볼 수 있습니다.

    박스 플롯을 그리는 방법은 다음 포스팅에서 확인해보시기 바랍니다.
    [Python] boxplot 그리기(matplotlib,seaborn)

     

    [Python] boxplot 그리기(matplotlib,seaborn)

    matplotlib를 이용한 boxplot 그리는 방법입니다. boxplot에 나타내는 수치는 다섯가지로 다음 수치를 기반으로 그려집니다. 최소값 : 데이터의 0% 지점 제 1사분위 수(Q1) : 데이터의 25% 지점 제 2사분위

    seong6496.tistory.com

     

    수치로 구하기

    numpy를 이용하면 아주 쉽게 구할 수 있습니다. numpy의 메쏘드 중에 percentilequantile이 있습니다. 짐작하셨겠지만 percentile은 100분위수, quantile은 4분위수를 의미합니다.

    4분위수를 percentile과 quantile을 이용해 구해보겠습니다.

     

    percentile

    import numpy as np
    # np.percentile(데이터,백분위수)
    np.random.seed(1)
    x =np.random.randint(1,100,size=(20,))
    print ("Quantiles:")
    for val in [0,25,50,75,100]: 
      dt_qntls = np.percentile(x,val)  
      print (str(val)+"%" ,dt_qntls) 
      
    # IQR 구하기
    q75, q25 = np.percentile(x, [75 ,25]); print ("IQR:",q75-q25)

    quantile

    # np.quantile(데이터,4분위수) - 4분위수는 백분위를 0~1사이 숫자로 표현
    print ("Quantiles:")
    for val in [0,0.25,0.5,0.75,1]:
        dt_qntls = np.quantile(x,val)  
        print (str(val*100)+"%" ,dt_qntls)
    # IQR
    q75, q25 = np.quantile(x, [0.75 ,0.25]); print ("IQR:",q75-q25)

    percentile과 quantille이 같은 값으로 나옵니다. 더 선호하는 함수로 선택해서 쓰시면 됩니다.

     

    관련 포스팅

    파이썬으로 정규분포 그리기

    파이썬 matplotlib 그래프 축 없애기

    [Python] boxplot 그리기(matplotlib,seaborn)

     

    댓글

    Designed by JB FACTORY

    ....