본문 바로가기
데이터 분석

박스플롯(Boxplox) 해석과 사용 방법

by 데이널 2024. 3. 13.

'데이널'의 컨텐츠에 포함된 정보는?

     

    박스플롯은 데이터 분석 과정에서 가장 많이 사용하는 시각화 방법입니다. 원래 이름은 상자수염 도표(Box-and-Whisker Plot)라고 불리는데요. 우리는 평균, 표준편차, 분산 등을 텍스트로 확인해 볼 수 있습니다. 하지만 시각적이지 않기 때문에 와닿지 않은 경우가 많습니다.
     

     
    박스플롯은 데이터세트의 분포와 변동성을 한눈에 시각화 해보기 좋습니다. 중앙값, 사분위수, 이상값과 같은 주요 통계 측정값에 대한 간결하게 볼 수가 있죠. 


    박스플롯 구성요소

    박스플롯은 아래와 같은 요소로 구성됩니다. 박스플롯은 주로 IQR을 기반으로 본다는 것을 알 수 있습니다. 통계적인 이야기를 할 때 IQR이라는 용어를 많이 사용하는데요. 예를 들어, 데이터를 제외할 때 "IQR의 몇으로 제외했어요?"로 묻는 식입이다.

    여기서 IQR(사분위수 범위)은 데이터를 사분위수로 나누어 표시하는 것입니다.

     

    사분위수는 순위가 매겨진 데이터를 4개의 동일한 부분으로 나눕니다. 중요한 것은 최소값 및 최댓값에 대해 어떻게 할 것인가입니다. 여기서 데이터 분포에 따라 다양한 측면을 IQR의 특정 배수로 확장될 수 있습니다.

     

    그렇다면 1.5배가 무조건 답이 아니라는 이야기 입니다. 배수를 조정해 가면 해당 데이터세트의 분포에 가장 적합한 배수를 정해야 한다는 이야기 입니다. 박스플롯 시각화 만으로도 데이터에 대한 많은 특성을 알 수 있습니다. 

    용어 설명
    최솟값(minmum)  제 1사분위에서 1.5 IQR을 뺀 위치
    제1사분위수(Q1)  상자의 아랫면으로 25% 위치를 의미
    제2사분위수(Q2)  상자의 내부 선으로 표현하는 중앙값(median)으로 50%의 위치를 의미
    제3사분위수(Q3) 상자의 윗면으로 75% 위치를 의미 
    최댓값(maximum) 제 3사분위에서 1.5 IQR을 더한 위치 
    사분 범위(IQR)  Q1 ~ Q3까지 범위를 의미
    수염(whisker)  데이터의 범위를 표시하기 위해 상자 가장자리에서 수염이 뻗어 있음
    이상점(outler) 최대값과 최솟값을 넘어가는 위치를 의미, 이상값(존재하는 경우)은 수염 너머에 있는 데이터 포인트

    박스플롯(Boxplot) 구성요소
    박스플롯(Boxplot) 구성요소

     

    박스플롯 활용

    1. 데이터 분포 확인

    데이터 세트가 구성되고 정리되어 이상값이나 누락된 값이 적절하게 처리되었는지 확인할 수 있습니다. 박스플롯은 연속형(continuous) 변수에 일반적으로 사용됩니다. 하지만 범주 간 분포를 비교할 때 범주형 데이터에도 사용할 수 있습니다.


    2. 올바른 변수 선택

    박스플롯의 그림을 해석하여 feature들을 비교하거나 시각화하려는 변수를 결정할 수 있습니다. 단일 변수의 값들 간의 분포를 비교해 볼 수도 있습니다. 예를 들어 결괏값의 참과 거짓에 분포도 확인해 볼 수 있죠. 여러 변수 또는 그룹의 분포를 비교할 수 있습니다. 이는 변수 간의 분포가 어떻게 되어있는지 한눈에 보는 목적이 있습니다. 


    박스플롯 사용 코드

     

    박스플롯 라이브러리 또는 소프트웨어 패키지(예: Matplotlib, Seaborn, ggplot2)를 사용하여 박스플롯을 생성합니다. 단일 변수의 경우 데이터 배열을 플로팅 함수에 전달하기만 하면 됩니다. 여러 변수 또는 그룹의 경우 그룹화 변수를 지정하거나 패싯을 사용하여 각 그룹에 대해 별도의 상자 그림을 만듭니다.
     

    1. 박스플롯 생성

    • 아직 Seaborn을 설치하지 않았다면 pip를 사용하여 설치할 수 있습니다. 명령어는 "pip install seaborn" 입니다. 
    • sns.boxplot() 함수를 사용하여 상자 그림을 만들고 데이터 프레임을 전달하고 x축과 y축에 대한 변수를 지정합니다.
    • sns.boxplot(x="your_x_variable", y="your_y_variable", data=your_data_frame)

    2. 플롯 사용자 정의

    • Seaborn은 색상 변경, 레이블 추가, 플롯 모양 조정 등 상자 그림에 대한 다양한 사용자 정의 옵션을 제공합니다.
    • 추가 Seaborn 함수 또는 Matplotlib 명령을 사용하여 플롯을 추가로 사용자 정의할 수 있습니다.

    3. 플롯 표시

    • 플롯을 표시하려면 plt.show()를 호출하면 됩니다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    import seaborn as sns
    import matplotlib.pyplot as plt
     
    # Create example DataFrame
    import pandas as pd
    data = pd.DataFrame({
        "Group": ["A"]*100 + ["B"]*100 + ["C"]*100,
        "Value": list(np.random.randn(100)) + list(np.random.randn(100+ 2+ list(np.random.randn(100+ 1.5)
    })
     
    # Draw boxplot
    sns.boxplot(x="Group", y="Value", data=data)
     
    # Add labels and title
    plt.xlabel("Group")
    plt.ylabel("Value")
    plt.title("Boxplot Example")
     
    # Display the plot
    plt.show()
    cs



    이 코드는 DataFrame의 각 그룹(A, B, C) 내 Value 변수의 분포를 보여주는 박스플롯 그래프를 생성합니다. 특정 데이터 세트 및 시각화 요구 사항에 따라 변수 이름과 레이블을 조정할 수 있습니다.
     

    박스플롯을 해석

     

    박스플롯은 데이터의 중심 경향과 확산을 분석할 수 있는데요. 중앙값(상자 안의 선)은 데이터세트의 중간값을 나타냅니다. 상자의 길이(IQR)는 중간 50% 이내의 데이터 변동성을 나타내죠. 수염은 사분위수를 넘어서는 데이터 범위에 대한 정보를 제공합니다.

    또 하나는 이상치를 찾아 볼 수 있습니다. 이상값은 상자 그림의 수염 외부에 있는 개별 데이터 포인트입니다. 이는 데이터 세트의 비정상적이거나 극단적인 값을 나타냅니다.

    박스 플롯에서 얻은 인사이트를 활용하여 데이터 분포에 대한 결론을 도출할 수 있습니다. 패턴이나 추세를 파악하고, 데이터 분석을 기반으로 의사결정을 내리게 됩니다. 분포가 대칭인지 치우친 건지, 해석에 영향을 미치는 이상값이 있는지, 여러 그룹이나 범주에서 데이터가 어떻게 비교되는지 따져 봐야 합니다. 

     

    마무리

    박스플롯도 한계는 있습니다. 예를 들어, 박스안에 얼마나 몰려 있는지 또 아웃라이어의 경우에도 포인트가 중복되어 표현되면 몇 개가 존재하는지 알아보기 어렸습니다. 이럴 경우는 오히려 히스토그램을 통해서 확인해 보는 방법과 같이 활용하는 것이 좋습니다.  

     

    피처 엔지니어링(Feature engineering) 방법, 단계별 종류 및 특징

     

    피처 엔지니어링(Feature engineering) 방법, 단계별 종류 및 특징

    위키독스에 따르면 피처 엔지니어링(Feature Engineering)이란 기존 데이터를 손보아 더 나은 변수를 만드는 기법으로 소개합니다. Feature engineering을 번역하면 특성 공학이라고도 하죠. 우리가 흔히

    bommbom.tistory.com