Seaborn
Seaborn은 matplotlib 기반의 파이썬 시각화 라이브러리이다. 여러 유용한 그래프를 그리기 위한 인터페이스를 제공한다.
import seaborn as sns
matplotlib 기반이기에 plt.figure(figsize=(x, y)) 와 같은 그래프 설정도 동일하게 적용 가능하다.
데이터
seaborn은 연습을 위한 다양한 데이터셋을 제공한다.
데이터 로딩은 sns.load_dataset(<data_name>)을 통해 불러올 수 있다.
실습에는 타이타닉 데이터를 활용한다.
tt = sns.load_dataset('titanic')
참고로 타이타닉 데이터는 다음과 같이 구성되어 있다.
막대 그래프
#막대 그래프 :범주형 변수의 빈도수를 시각화
#성별별 인원수 측정
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를 부여하면 히스토그램만 출력된다.
'실습 > 파이썬 데이터 분석 및 시각화' 카테고리의 다른 글
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 |