상세 컨텐츠

본문 제목

데이터 시각화 - seaborn

AI

by 래모 2023. 10. 5. 14:34

본문

본 게시물은 아래의 글을 참조하여 작성하였습니다.

https://wikidocs.net/86290

https://data-gongbu.tistory.com/44

Seaborn

Seaborn이란 파이썬의 시각화 도구인 matplotilib를 더 편하게 사용할 수 있도록 만든 라이브러리이다.

seaborn은 matplotlib 대비 손쉽게 그래프를 그리고 그래프 스타일 설정을 할 수 있다는 장점이 있다.

 

seabron의 그래프 종류

 

라이브러리 임포트

#라이브러리 임포트
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 

#seaborn에서 제공하는 flights 데이터 셋을 사용
flights = sns.load_dataset('flights')

#그래프 사이즈 설정
plt.figure(figsize=(12, 3))

 

이 게시물에서는 seabron에 내장된 penguins dataset을 사용하여 실습을 진행해 볼 것이다.

panguins dataset의 변수들을 아래와 같다.

- species : 펭귄 종

- island : 서식지

- bill_length_mm : 부리 길이

- bill_depth_mm : 부리 위아래 두께

- flipper_length_mm : 팔 길이

- body_mass_g : 몸무게

- sex : 성별

 

 

데이터 불러오기

import seaborn as sns

data = sns.load_dataset('penguins') # (344 rows x 7 columns)

 

 

dropna()

: 결측값을 제거하는 메소드

데이터를 반환해줄 뿐 처음 형태를 바꾸진 않음

 

Barplot

  • 막대그래프!
  • 가로/세로 두 가지로 모두 출력 가능하며, x축에는 범주형 변수 y축에는 수치형 변수로 설정한다.

 

종에 따른 몸무게 분포는 다음과 같이 나타낸다.

sns.barplot(data = data, x = 'species', y = 'body_mass_g')

 

Boxplot

  • 데이터를 변수별로 사분위수를 표시하는 plot
  • 데이터의 전체적인 분포를 확인하기 좋은 방법이며 이상치 존재 유뮤를 파악하기 쉬움

 

종에 따른 부리 뚜께에 대한 박스 플랏은 다음과 같이 나타낸다.

sns.boxplot(data = data, x = 'species', y = 'bill_depth_mm' )

 

Violineplot

  • 변수에 대한 분포 자체를 보여주는 plot
  • 상자 그림과 비슷하지만, 전체 분포를 보여준다는 점에서 차이가 있음
  • 평균 근처에 데이터가 얼마나 있는지 전체적으로 어떻게 퍼져 있는지 확인 가능

 

종에 따른 부리크기 분포를 성별에 따라 보여주는 violineplot은 다음과 같다

sns.violinplot(data = data, x = 'species', y = 'bill_depth_mm', hue= 'sex')

 

Swarmplot

  • barplot과 유사하게 x축별 y축 값을 표시하지만 하나의 대표값으로 표시하는 것이 아니라 데이터의 분포를 확인할 수 있도록 표시

 

서식지에 따른 팔 길이를 표현하면 다음과 같다.( 이건 x축에 명시적인 숫자가 있으면 더 좋을거 같은데 펭귄데이터로는 좀 보여주기 무리)

sns.swarmplot(data=data, x="island", y="flipper_length_mm")

 

 

Lineplot

  • 선 그래프!
  • 두 변수 간의 관계 확인 가능
  • 수치평 지표들 간의 경향을 파악할 때 사용

 

lineplot 상에 옅게 칠해진 백그라운드는 해당 범위에 있는 수치값의 에러에 대한 허용 범위를 의미함

이 에러 범위 조정하고 싶으면 ci를 설정해주면 됨!

sns.lineplot(data = data, x = 'body_mass_g', y = 'flipper_length_mm',ci=None)

Scatter plot

  • line plot과 유사하게 x,y에 대한 전체적인 분포를 확인하는 plot
  • 선 그래프의 경우 경향성에 초점을 둔다며, 산점도의 경우 데이터 그 자체가 퍼져있는 모양에 중점을 두고 있음

 

성별에 따른 팔길이와 몸무게 산점도는 다음과 같음

sns.scatterplot(data = data, x ='flipper_length_mm', y = 'body_mass_g', hue = 'sex')

 

 

 

Heatmap

  • 정사각형 그림에 데이터에 대한 정도 차이를 보여주는 plot
  • 말 그대로 heatmap이기 때문에 열화상 카메라로 사물을 찍은 것처럼 정보의 차이를 보여줌
  • 변수들 간의 관계를 시각화할 때 많이 사용되며 특히 변수 간의 상관계수를 표현할 때 자주 사용됨 (상관계수 : 어떤 x값이 변화함에 따라 y값의 선형적으로 변화하는지를 측정한 지표)

우선 heatmap을 그리기 위해 상관 계수를 구해보자

corr = data.corr()

 

구해진 상관계수를 heapmap에 그려보면 다음과 같다.

annot옵션은 상관계수 값 표시

sns.heatmap(data = corr, square= True, cmap = 'Blues',annot=True)

 

관련글 더보기