본문 바로가기
실습/파이썬 데이터 분석 및 시각화

Seaborn 사용법

by 이민우 2021. 11. 17.
728x90
반응형

Seaborn

 

Seaborn은 matplotlib 기반의 파이썬 시각화 라이브러리이다. 여러 유용한 그래프를 그리기 위한 인터페이스를 제공한다.

 

import seaborn as sns

 

matplotlib 기반이기에 plt.figure(figsize=(x, y)) 와 같은 그래프 설정도 동일하게 적용 가능하다.

 

 

데이터

 

seaborn은 연습을 위한 다양한 데이터셋을 제공한다.

 

데이터 로딩은 sns.load_dataset(<data_name>)을 통해 불러올 수 있다.

실습에는 타이타닉 데이터를 활용한다.

tt = sns.load_dataset('titanic')

 

참고로 타이타닉 데이터는 다음과 같이 구성되어 있다.

https://www.kaggle.com/c/titanic/data

 

 

 

막대 그래프

#막대 그래프 :범주형 변수의 빈도수를 시각화
#성별별 인원수 측정
sns.countplot(data = tt, x='sex') #x = 으로 사용할 열 지정

 

 

 

산점도 그래프

#산점도 : x축과 y축 데이터 간 관계를 점으로 표시
#좌석 클래스에 따른 승선 항구 확인
sns.swarmplot(data = tt, x = 'pclass', y='embarked')

 

 

 

바이올린 그래프

#바이올린 그래프 : x축, y축 간 데이터의 관계를 면적으로 표시
#좌석 클래스에 따른 생존률 확인
sns.violinplot(data = tt, x='pclass', y='survived')

 

 

 

 

막대 그래프

#막대 그래프
sns.barplot(data = tt, x='pclass', y='survived')

 

만약 여기에 추가적인 칼럼을 함께 기준으로 삼고 싶다면 삼고 싶다면 hue 파라미터를 사용할 수 있다.

#막대 그래프
sns.barplot(data = tt, x='pclass', y='survived', hue='sex') #hue : 기준 설정

 

 

 

꺾은선 그래프

#선 그래프
sns.pointplot(data = tt, x = 'sibsp', y = 'survived')

 

Matplotlib의 꺾은선 그래프와 달리 분포가 함께 보여진다.

참고로 꺾은선 그래프도 hue를 사용하여 추가 기준 설정이 가능하다.

 

 

 

산점도 그래프

#산점도 그래프
sns.scatterplot(data = tt, x = 'age', y = 'fare') #hue 사용 가능

 

matplotlib과 달리 분포도 함께 보여줄 수 있는 방법도 있다.

#회귀선이 있는 산점도
sns.lmplot(data = tt, x = 'age', y = 'fare')

만약 파라미터로 fit_reg=False를 주면 회귀선이 사라진다.

마찬가지로 hue를 사용하여 추가 기준 설정이 가능하다.

 

 

 

박스 그래프

#박스 그래프
sns.boxplot(data = tt, x = 'sex', y='age')

박스 그래프에서 matplotlib과의 차이점은 바로 이상치를 포함한다는 것이다.

참고로 이상치는 (제1사분위수 - 1.5 사분위 범위) ~ (제3사분위수 + 1.5 사분위 범위) 에 해당되지 않는 값을 기준으로 한다.

 

마찬가지로 hue를 사용할 수 있다.

 

 

 

히트맵 그래프

#히트맵
sns.heatmap(tt.corr()) #corr 함수는 상관관계를 확인하는 pandas의 함수이다.

 

 

 

여러 그래프 그리기

 

기본적으로 seaborn은 matplotlib을 기반으로 한 라이브러리라, matplotlib과 같이 figure, plot을 사용하여 여러 그래프를 한 번에 그릴 수 있다.

 

import seaborn as sns
import matplotlib.pyplot as plt

figure, ((ax1, ax2), (ax3, ax4), (ax5, ax6)) = plt.subplots(nrows = 3, ncols = 2) #3*2의 그래프들 생성

sns.countplot(data = tt, x='sex', ax=ax1)
sns.swarmplot(data = tt, x = 'pclass', y='embarked', ax=ax2)
sns.violinplot(data = tt, x='pclass', y='survived', ax=ax3)
sns.barplot(data = tt, x='pclass', y='survived', hue='sex', ax=ax4)
sns.pointplot(data = tt, x = 'sibsp', y = 'survived', ax=ax5)
sns.scatterplot(data = tt, x = 'age', y = 'fare', ax=ax6)

plt.show()

 

만약 몇 개의 데이터를 기준으로 여러 그래프를 그려 비교하고 싶다면 FacetGrid를 사용할 수 있다.

아래는 성별, 생존률에 대하여 연령별 인원수를 나타낸 그래프이다.

g = sns.FacetGrid(data = tt, col = 'sex', row = 'survived')
g.map(plt.hist, 'age')

 

 

또한 히스토그램과 커널밀도 그래프를 한 번에 나타낼 수 있는 함수도 존재한다.

#히스토그램, 커널밀도 그래프
#히스토그램 : 데이터를 계급으로 나누어 해당되는 도수를 나타낸 표
#커널밀도 : 그래프와 x축 사이의 면적이 1이 되도록 그리는 밀도 분포
sns.distplot(tt['age'])

참고로 파라미터로 hist=False 를 부여하면 커널밀도만 출력되고, kde=False를 부여하면 히스토그램만 출력된다.

728x90
반응형

'실습 > 파이썬 데이터 분석 및 시각화' 카테고리의 다른 글

Nltk_영어 텍스트 분석  (0) 2021.11.18
Konlpy_한글 텍스트 분석  (0) 2021.11.18
Bokeh 패키지  (0) 2021.11.17
Matplotlib 사용법  (0) 2021.11.17
Pandas 사용법  (0) 2021.11.17