[Python.Seaborn] Predefined Plots 1 - Box Plot, Violin Plot, Swarm Plot
2021. 2. 6. 05:00ㆍPython과 머신러닝/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'])
- 우리가 여러 차례 정리한 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]:
- 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')
- 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'])
- 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)
- 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')
- 그렇다면 실제 분석은 어떻게 할까?
- 대부분 위의 코드를 예제처럼 자주 사용하게 된다.
- Box Plot을 통해 전체 분포도를 확인하고, SwarmPlot을 함께 찍어서 Outlier를 분석하고, 이상치가 있는 경우를 감안하여 전체 데이터를 이해한다.
- 이렇게 겹쳐서 찍으면 데이터를 전부 확인할 수 있다.
7. 관련 포스트
- 2021/02/10 - [Python과 머신러닝/MatPlotLib 데이터 시각화] - [Python.Seaborn] Predefined Plots 2 - PointPlot, RegPlot, subplots
- 2021/02/11 - [Python과 머신러닝/MatPlotLib 데이터 시각화] - [Python.Seaborn] Predefined Plots 3 - Predefined Multiple Plots - RelPlot, CatPlot
- 2021/02/15 - [Python과 머신러닝/MatPlotLib 데이터 시각화] - [Python.Seaborn] Predefined Plots 4 - FacetGrid, Map, PairPlot, LMPlot
- 2021/02/21 - [Python과 머신러닝/MatPlotLib 데이터 시각화] - [Python.Seaborn] Predefined Plots 5 - Pair Plot과 LM Plot