Seaborn

홍찬우·2023년 7월 23일
0

Seaborn

Matplotlib 기반 통계 시각화 라이브러리

쉬운 문법과 깔끔한 디자인

시각화 목적과 방법에 따라 API를 분류하여 제공

  • Categorical, Distribution, Relational, Regression, Matrix…




기초 실습

공통 parameter

countplot

Categorical API에서 범주를 이산적으로 세서 막대 그래프로 그려줌


x & y

sns.countplot(x='race/ethnicity', data=student)

  • x에 feature를 전달
  • 세로 막대 그래프

sns.countplot(y='race/ethnicity',data=student)

  • y에 feature 전달
  • 가로 막대 그래프

sns.countplot(x='race/ethnicity',data=student, order=sorted(student['race/ethnicity'].unique()))

  • order를 이용해 막대의 순서를 정렬할 수 있음

hue

색상을 의미

  • hue=’gender’을 추가해 그룹 내에서 성별로 나눠 색으로 구분
  • countplot에 pallete를 이용해 색상 변경 가능

color를 통해 단일 색상으로 표현 가능

  • 앞 예시와 다르게 x가 gender, hue가 race

이 때, hue_order을 통해 순서 지정 가능

  • matplotlib 처럼 ax를 지정해 그래프 show 가능
  • countplot에 ax를 지정




Categorical API

기본적인 데이터 통계량

pandas의 describe()

  • count, mean, std, min
  • 25% (lower quartile), 50% (median), 75% (upper qualtile)
    • 25% 위치 값, 중앙값, 75% 위치 값
  • max

Box Plot

  • sns.boxplot
  • box 내부의 선이 중앙값을 의미
    • box의 왼쪽 변이 25%, 오른쪽 변이 75%
    • IQR (interquartile range) : 파란 박스 전체 범위
  • whisker : 박스 외부의 범위를 나타내는 선, IQR 양 옆 1.5%
    • 왜 box 양 옆으로 길이가 다른가?
      • min : -IQR * 1.5 보다 크거나 같은 값들 중 최솟값
      • max : +IQR * 1.5 보다 작거나 같은 값들 중 최댓값
  • outlier : whisker에서 벗어난 값

  • hue를 이용해 비교 가능
  • width(box 너비), linewidth(선 두께), fliersize(outlier 크기)를 이용해 custom 가능


Violin Plot

box plot은 대표값은 잘 보여주지만 분포 확인은 어려움

  • sns.violinplot
  • 가운데 흰 점이 median, 굵은 선이 25% ~ 75%, 얇은 선이 whisker
  • histogram 형태
  • 연속적 표현에서 없는 데이터가 있는 것처럼 표현될 수 있음
    • bw(band width) : 분포 표현을 얼마나 자세히 할 것인가

         º 0.2가 default
         º 현재 그래프는 0.1

  • cut : 끝 부분을 얼마나 자를 것인가
    • default는 0
    • cut=10이면 -10부터 110까지 표현
  • inner : 내부를 어떻게 표현할 것인가
    • 위 그래프는 inner=’quartile’
    • “box”, “quartile”, “point”, “stick”, None 으로 표현 가능
  • scale
    • area, width, count로 plot 조정 가능

  • split=True
    • 동시 표현 가능

violinplot 외에도

  • sns.boxenplot : box 형태로 나타냄 (histogram 느낌)
  • swarmplot : scatter 형태로 나타냄
  • stripplot : 직선 막대에 scatter를 뿌려놓은 형태




Distributional API

1) Univariate Distribute

한 개의 feature에 대한 distribution (단일 확률 분포)


histplot

기본적인 막대 histogram
sns.histplot

  • bins는 막대 개수로 조정
  • binwidth는 막대 사이 간격으로 조정


  • element=’step’


  • element=’poly’

  • multiple을 이용해 여러 형태로 표현 가능

    • fill : percentage bar chart
    • dodge : grouped bar chart
    • stack : stacked bar chart
    • layer : 두 bar chart를 겹쳐 투명도로 조정


kdeplot (Kernel Density Estimate)

sns.kdeplot

  • violinplot의 절반과 같은 모양
  • fill=True 로 내부를 칠할 수 있음


  • by_method=0.05 로 분포를 더 자세히 표현 가능 , 내부 값은 유저가 조정
  • histplot과 동일하게 multiple을 조정해 여러 kdeplot을 비교 가능
    • 주로 layer 이용


  • cumulative=True 를 이용해 데이터를 쌓은 형태를 볼 수 있음
    • 초록색 그래프의 경우 수학점수 50에서 밀도가 급증하는 것을 확인


ecdfplot

누적되는 데이터의 양을 표현
바로 위 cumulative와 비슷한 형태



nugplot

조밀한 정도를 통해 밀도를 나타냄



2) Bivariate Distribution

다변수 분포

histplot

  • 구간을 나눠 확인 가능
  • bins=(10, 20) 으로 가로축, 세로축을 지정한 수로 분할할 수 있음


kdeplot

  • bw_method=0.1 로 분포 표현 정도 조정 가능




Relation & Regression API

Scatter Plot

style, hue, size로 조정 가능

  • hue=’race/ethnicity’


Line Plot

  • 12달에 대한 데이터를 한 번에 넣어주면 알아서 나눠서 보여줌
  • hue, style, makrer, dash 로 조정 가능


Regplot

회귀선을 추가한 scatter plot

  • sns.regplot
  • x_estimator=np.mean 으로 평균을 이용한 추세선을 그림
  • 보여지는 점들의 개수를 bins로 조정 가능
  • order=2 2차원 회귀선, logx=True 로그 회귀선


Matrix Plots

Heatmap

주로 상관관계 시각화에 많이 사용
sns.heatmap

  • correlation matrix를 data로 input
  • corr 값은 -1 ~ 1이므로 vmin=-1 , vmax=1
  • center=0 을 통해 중간 값을 지정 가능
  • 색의 명확한 차이를 보여주기 위해 cmap=’coolwarm’ 을 이용해 쿨웜 컬러맵 사용

annot=True, fmt=’ .2f’ 를 이용해 각 값을 annotation할 수 있으며, format도 지정
mask를 이용해 대칭행렬에서 하삼각행렬만 나타낼 수 있음







※ 모든 이미지 및 코드 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※

profile
AI-Kid

0개의 댓글