[Python.Seaborn] Predefined Plots 1 - Box Plot, Violin Plot, Swarm Plot

2021. 2. 6. 05:00Python과 머신러닝/MatPlotLib 데이터 시각화

1. BoxPlot

In [1]:%matplotlib notebook 
       import numpy as np
       import pandas as pd
       import matplotlib.pyplot as plt
       import seaborn as sns

In [2]:tips=sns.load_dataset('tips')

In [3]:fig = plt.figure() sns.boxplot(x=tips['total_bill'])

Out[3]

  • 우리가 여러 차례 정리한 BoxPlot인데, Seaborn은 BoxPlot을 더 쉽게 그릴 수 있도록, 일종의 interface를 제공하고 있다.
  • 이를 Predefined plot이라고 하고, 사람들이 자주 쓰는 Plot들을 조금 더 간단하게 사용할 수 있도록 한다.
  • 이는 Tip을 주는 데이터에서 Total Bill, 즉 총비용의 분포도를 BoxPlot 형태로 표현한 것이다.

 

2. Violin Plot - X값만 있을 경우

In [4]:fig = plt.figure() 
       ax1 = sns.violinplot(x=tips['total_bill']) 
       ax1
Out[4]:

Out4]

  • Violin Plot은 BoxPlot과 유사한데, 분포도를 조금 더 자세하게 보여준다.
  • 결국 표현되는 형태가 바이올린과 같이 굴곡이 생겨서 바이올린 플랏이라고 한다.

 

3. Violin Plot - X/Y값과 Hue 적용

In [5]:fig = plt.figure() 
       ax = sns.violinplot(x='day', 
                           y='total_bill',
                           hue='smoker', 
                           data=tips,
                           palette='muted')

Out[5]

  • 2단계에서는 X값만 있어서, 한 변수의 분포도만을 봤다면, 이번에는 X, Y의 상대적 분포도를 함께 볼 수 있다.
  • 여기도 동일하게 Hue라는 것을 지정해 분류별로 분포도를 구분하여 볼수도 있다.
  • 위 그래프는 요일별 총 식사 비용의 분포도를 그린 것이고, 이를 흡연 여부를 기준으로 구분하여 대조하였다.
  • 다른 parameter는 잘 알텐데, palette를 궁금해하는 분들이 많아 쉽게 설명하자면 '색깔 테마'정도로 이해하면 될 것 같다.
  • 전부 색깔을 지정해줄 순 없지만(그러면 너무 복잡해지니깐), palette를 지정해주면 적당한 색깔 테마를 지정해서 Seaborn이 알아서 데이터를 표현해준다. (어렸을 적 빠레트에서 색깔을 조합할 수 있었듯, 알아서 색을 조합한다는 의미로 이해했다).
  • 다양한 종류들이 있으니 공식 사이트에서 확인하여 필요한 테마를 선택하는 것이 좋다.
    seaborn.pydata.org/tutorial/color_palettes.html  

 

 

4. Swarm Plot - 기본

In [7]:fig = plt.figure() 
       ax = sns.swarmplot(x=tips['total_bill'])

Out[7]

  • Box Plot과 Violin Plot은 개별 데이터의 위치를 파악하기는 어렵고, 데이터 전체에 대한 큰 그림을 잡기에 좋다.
  • Swarm Plot은 개별 데이터의 위치를 직접 확인해서 Outlier들을 한번에 확인하기 쉽다.

 

5. Swarm Plot - 심화

In [8]:fig = plt.figure()
       ax = sns.swarmplot(x='day', y='total_bill', data=tips)

In [9]:fig = plt.figure() 
       ax = sns.swarmplot(x='day', y='total_bill', hue='sex', data=tips)

Out[8]
Out[9]

  • Swarm Plot도 기타 Plot들과 동일하게 X/Y 값을 따로 지정하여 비교가 가능하고,
    Hue를 지정하여 분류별 데이터 구분도 가능하다.

 

6. 실제 예제 : BoxPlot과 SwarmPlot을 같이 사용

In [10]:fig = plt.figure() 
        ax = sns.boxplot(x='tip', y='day', data=tips, whis=np.inf) 
        ax = sns.swarmplot(x='tip', y='day', data=tips, color='.3')

Out[10]

  • 그렇다면 실제 분석은 어떻게 할까?
  • 대부분 위의 코드를 예제처럼 자주 사용하게 된다.
  • Box Plot을 통해 전체 분포도를 확인하고, SwarmPlot을 함께 찍어서 Outlier를 분석하고, 이상치가 있는 경우를 감안하여 전체 데이터를 이해한다.
  • 이렇게 겹쳐서 찍으면 데이터를 전부 확인할 수 있다.

 

7. 관련 포스트

반응형