본문 바로가기

Python/데이터 시각화

[Python] 바이올린 플롯(Violin Plot) - 기술통계와 분포를 동시에 보여주는 그래프(feat. Seaborn)

반응형

Seaborn에서는 바이올린 플롯(Violin Plot)이라는 시각화 방식을 제공하는데, 장점들이 매우 큰 시각화 방법이다. 크게 바이올린 플롯은 기술통계량과 데이터의 분포를 한 번에 보여줄 수 있다는 점과 여러 가지 변수를 한 번에 비교 분석하기 쉽게 보여줄 수 있다는 점이 있다. 이번 포스팅에서는 바이올린 플롯의 기본부터 시작해서, 구현 코드, 그리고 해석 하는 방법까지 아주 쉽게 소개하려고 한다. 

 

목차

1. 기초 데이터 소개 및 바이올린 플롯 기본 및 해석 가이드

2. 시각화 Tip1. X축과 Y축 회전하기

3. 시각화 Tip2. 여러 개 변수를 설정할 수 있는 Violin Plot

4. 시각화 Tip3. Split 기능을 통해 분포 비교하기

5. 시각화 Tip4. 다양하게 기술통계량 표현해보기

     

    1. 기초 데이터 소개 및 바이올린 플롯 기본 및 해석 가이드

     

    • 기초 데이터셋 - Tips 소개

    이번 포스팅에서 사용할 데이터 셋은 Seaborn에서 기본적으로 제공하는 Tip 데이터이다. 아주 쉽게 말해서 누가 언제 얼마나 팁을 줬는지 알려주는 데이터이기 때문에 이해하기 어렵지 않을 것이다. 데이터를 불러오는 방법은 아래의 코드를 그대로 가져다 쓰는 것을 권장한다. 

    데이터 기본 설명
    - total bill: 총 지불 비용
    - tip: 팁을 준 금액
    - gender: 예약자의 성별
    - smoker: 흡연자 포함 여부
    - day: 일주일 중 어떤 요일인지 알려주는 열이다
    - time: 식사의 시간대
    - size: 총 인원수

    포스팅에서 사용할 변수는 total bill, day, 그리고 smoker 변수이다. 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ## 기초 필요 패키지
    import pandas as pd
    import numpy as np
     
     
    ## 시각화 
    import seaborn as sns
    import matplotlib.pyplot as plt
    %matplotlib inline
     
    r1 = sns.load_dataset('tips')
    r1.head()
    cs

     

     

     

    • Seaborn의 Violin Plot 기초 소개 및 해석 가이드
    1. Box Plot 해석 가이드

    박스 플롯은 기본적으로 기술통계량을 나타내준다. 각 기술통계에 해당하는 것은 옆의 이미지에 아주 간단하게 서술했다. 

    이 중에서도 가장 중요하게 봐야할 것은 25 ~ 75% 사분위 기준이다. 왜냐하면 평균 대신에 이 사이 값들이 대표 통계량으로 사용될 수도 있기 때문이다.



    2. Distribution Plot 해석 가이드

    양 옆의 종 같은 것은 데이터의 분포를 나타낸다. 이 데이터가 정규 분포인지, 우측 왜도 혹은 좌측 왜도를 갖고 있지 않은지 아주 쉽게 알 수 있다. 

     

    1
    2
    3
    4
    5
    6
    7
    plt.rcParams['figure.figsize'=(128)
    sns.violinplot(data = "기초 데이터셋을 넣어주세요"
                 
                  ## 참고로 X축과 Y축은 둘 중 하나만 설정해도 괜찮습니다.
                  , x = "X축에 해당하는 Column을 넣어주세요"
                  , y= "Y축에 해당하는 column을 넣어주세요"
                  )
    cs

     

     

     

     

    2. 시각화 Tip1. X축과 Y축 회전하기

     

     

    바이올릿 플롯의 축을 회전하는 방법은 굉장히 쉽다. X축 또는 Y축에 원하는 순서를 지정해주면 바로 회전이 되기 때문이다. 아래의 코드를 보면 바로 이해할 수 있을 것이다. 

     

    x축에 데이터를 삽입한 경우
    Y축에 데이터를 삽입한 경우

     

    1
    2
    3
    4
    5
    6
    7
     
    ## 첫 번째 사진. X축에 데이터를 삽입
    sns.violinplot(data = r1, x = r1.total_bill)
     
    ## 두 번째 사진. Y축에 데이터를 삽입
    sns.violinplot(data = r1, y = r1.total_bill)
     
    cs

     

     

    3. 시각화 Tip2. 여러 개 변수를 설정할 수 있는 Violin Plot

     

    Violin Plot에서는 변수를 크게 3가지를 X축, Y축 그리고 색상(hue)으로 표현할 수 있다. 다른 패키지에서는 보기 힘든 아주 강력하고 좋은 시각화 Tool이니 잘 활용해보기를 바란다. 

    violin plot은 여러 가지 변수를 표현할 수 있다.
    3가지 변수를 표현한 Violin Plot

    1
    2
    3
    4
    5
    sns.violinplot(data = r1
                  , x = r1.day
                  , y= r1.total_bill
                  , hue = r1.smoker ##색상변수
                  )
    cs

     

     

     

     

    4. 시각화 Tip3. Split 기능을 통해 분포 비교하기

     

    특히 변수가 3개 일 때, 분포를 보다 용이하게 비교할 수 있는 기능이 바로 split 기능이다. 이는 동일한 기준에서 데이터 분포가 어떻게 다른지 직관적으로 비교해준다. 

    Violin Plot에서 Split 기능 사용하기
    Violin Plot에서 Split 기능 사용하기

     

    1
    2
    3
    4
    5
    6
    sns.violinplot(data = r1
                  , x = r1.day
                  , y= r1.total_bill
                  , hue = r1.smoker
                  , split = True
                  )
    cs

     

     

     

    5. 시각화 Tip4. 다양하게 기술통계량 표현해보기

     

    바이올린 플롯 내에서 기술 통계량 혹은 데이터 분포를 표현할 수 있는 4가지 방법이 있다. 그 기능들에 대해서 간단히 소개해보고자 한다.

     

    • 기술 통계량 혹은 데이터 Point 나타내기
      • 파라미터: inner
        • 값1. box: default 값이며, 분포 내에 Box Plot을 그려준다.
        • 값2. quartile: 4분위 값을 선으로 표현해주어 비교가 용이하다.
        • 값3. point: 데이터들이 존재하는 부분을 점(Point)로 나타낸다.
        • 값4. stick: 데이터들이 존재하는 핵심 부분을 선으로 표현한다.

     

    이번 데이터에서는 box와 quartile을 사용하여 시각화의 차이를 예시로 보여주려고 한다. 

    바이올린 플롯에서 박스 플롯 표현하기

     

    1
    2
    3
    4
    5
    sns.violinplot(data = r1
                  , x = r1.day
                  , y= r1.total_bill
                  , inner = 'quartile' ## box
                  )
    cs
    반응형