[Python.Seaborn] Predefined Plots 3 - Predefined Multiple Plots - RelPlot, CatPlot

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

0. 이전 포스트

 

1. RelPlot - col='time' parameter 이해하기

In [25]:%matplotlib notebook
        import numpy as np
        import pandas as pd
        import matplotlib.pyplot as plt
        import seaborn as sns
        tips=sns.load_dataset('tips')
        g = sns.relplot(x='total_bill',
                        y='tip',
                        hue='day', 
                        col='time',
                        data=tips, 
                        height=3)

Out[25]

  • RelPlot은 관계/분포를 볼 수 있는 그래프라서 이전 포스트에서 정리한 내용들과 크게 다르지 않다.
  • x, y, hue는 각각 x축의 데이터, y축의 데이터, 그리고 각 데이터를 구분하기 위한 category 변수 hue이다.
  • 여기서의 가장 큰 차이는 col='time' parameter 일 것이다.
    • Column별로 다른 time의 데이터를 보여달라는 의미가 된다.
    • 그래서 위 데이터에서 보다시피 Lunch의 TotalBill vs Tip의 데이터와 Dinner의 데이터를 따로 구분해서 볼 수 있게 된다.

 

2. RelPlot - Row/Col 둘 다 사용하기

In [26]:g = sns.relplot(x='total_bill', 
                        y='tip', 
                        hue='day',
                        col='time',
                        row='sex',
                        data=tips,
                        height=3)

  • 두 가지의 category 변수로 구분해서 보고 싶으면 row/col을 둘 다 지정해서 비교할 수 있다.
    • 이 경우 row별로 성별을 구분했고, col별로 time을 구분했다.
    • 이 데이터를 통해서 알 수 있는 건, 일반적인 분포는 남녀 간의 차이가 많지 않았지만,
      남자가 대체로 더 비싼 식사를 지불했던 outlier가 많았던 것처럼 보인다.
    • 이와 같이 category 별로 데이터를 따로 분류해서 볼 수 있는 것이 RelPlot의 가장 큰 장점이다.

 

3. RelPlot - Size

In [27]:g = sns.relplot(x='total_bill',
                        y='tip',
                        hue='time',
                        size='size',
                        palette=['b', 'r'],
                        sizes=(5,100), 
                        col='time', 
                        data=tips)

Out[27]

  • size='size'
    • tips 데이터를 자세히 보면 'size'라는 column은 횟수를 의미한다.
    • 즉, 해당 Tip과 TotalBill을 지불한 count를 세어 놓은 값이다.
    • 이를 size parameter로 전달하여 더 빈번한 경우를 큰 원으로 표현할 수 있다.
    • size를 사용하지 않는다면 아무리 많아다 한 점이 겹쳐 보여서 빈도를 파악하기 어렵기 때문에,
      size를 사용해서 case별 분포를 표현할 뿐만 아니라 count도 한 번에 비교할 수 있다.

 

 

4. RelPlot - 선형 그래프

In [28]:fmri=sns.load_dataset('fmri') 
        g = sns.relplot(x='timepoint', 
                        y='signal',
                        hue='event',
                        style='event',
                        col='region', 
                        kind='line',
                        data=fmri)

Out[28]

  • kind='line'을 추가하면 기존의 분포도 그래프가 아닌 선형 그래프로 표현할 수 있다.
  • 선형 그래프를 표현하면, 각 지점에서의 range와 평균값이 저절로 표현되어 실선/점선과 shade영역으로 구분해서 볼 수 있다.
  • col과 hue parameter를 통해서 구분할 수 있는 것은 위와 동일하다.

 

5. CatPlot - 기본 분포 그래프

In [29]:exercise = sns.load_dataset('exercise')
In [30]:g = sns.catplot(x='time', y='pulse', hue='kind', data=exercise)

Out[30]

  • CatPlot은 Category Plot의 약자로, X축에 Category Data를 입력하여 분포도를 비교할 때 사용된다.
  • 그래서 x='time'으로 구분하였고, 위 그래프는 1분/15분/30분 운동을 했을 때의 심박수를 그래프로 그렸고,
  • hue를 운동 종류로 지정하여 휴식/걷기/달리기 운동을 할 때의 심박수를 색깔별로 구분했다.

 

6. CatPlot - Violin plot

In [31]:g = sns.catplot(x='time', y='pulse', hue='kind', data=exercise, kind='violin')

Out[31]

  • kind='violin' 을 지정하면 동일한 데이터를 바이올린 형태로 그릴 수 있다.
  • 이렇게 했을 때의 장점은, hue별 구분이 조금 더 명확해진다는 점이다.
  • 그래서 운동 시간이 늘어날수록 running의 분포는 넓게 퍼진다는 것을 볼 수 있고,
  • 각 운동 종류별 분포도도 한 번에 확인할 수 있다.

 

7. Cat Plot - Count Plot 등으로 보기

In [32]:titanic = sns.load_dataset('titanic') 
        g=sns.catplot('alive', 
                      col='deck', 
                      col_wrap=4, 
                      data=titanic[titanic.deck.notnull()], 
                      kind='count', 
                      height=2.5, 
                      aspect=.8)

Out[32]

  • 이전에는 Cat Plot을 가장 기본적인 분포도를 봤다면, kind='count'로 수정하여 histogram처럼 비교할 수 있다.
  • alive에 대한 count plot을 각 deck별로 그리고, 한 row에 4개씩만 표현되도록 catplot을 그리라는 명령어이다.

 

8. 관련 포스트

반응형