🔥알림🔥
테디노트 유튜브 -
구경하러 가기!
Seaborn의 통계 차트 및 데이터 시각화 예제
seaborn
은 matplotlib
의 상위 호환 데이터 시각화를 위한 라이브러리입니다. seaborn
패키지는 데이터프레임으로 다양한 통계 지표를 낼 수 있는 시각화 차트를 제공하기 때문에 데이터 분석에 활발히 사용되고 있는 라이브러리입니다.
이번 seaborn
튜토리얼에서는 matplotlib
에는 없고 seaborn
에서만 제공되는 통계 차트 위주로 설명드리겠습니다.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 한글 폰트 적용
plt.rc('font', family='NanumBarunGothic')
# 캔버스 사이즈 적용
plt.rcParams["figure.figsize"] = (12, 9)
통계 기반의 시각화를 제공해주는 Seaborn
seaborn
라이브러리가 매력적인 이유는 바로 통계 차트 입니다.
이번 실습에서는 seaborn
의 다양한 통계 차트 중 대표적인 차트 몇 개를 뽑아서 다뤄볼 예정입니다.
더 많은 통계 차트를 경험해보고 싶으신 분은 공식 도큐먼트에서 확인하실 수 있습니다.
titanic = sns.load_dataset('titanic')
titanic
- survived: 생존여부
- pclass: 좌석등급
- sex: 성별
- age: 나이
- sibsp: 형제자매 숫자
- parch: 부모자식 숫자
- fare: 요금
- embarked: 탑승 항구
- class: 좌석등급 (영문)
- who: 사람 구분
- deck: 데크
- embark_town: 탑승 항구 (영문)
- alive: 생존여부 (영문)
- alone: 혼자인지 여부
tips = sns.load_dataset('tips')
tips
- total_bill: 총 합계 요금표
- tip: 팁
- sex: 성별
- smoker: 흡연자 여부
- day: 요일
- time: 식사 시간
- size: 식사 인원
1. Countplot
항목별 갯수를 세어주는 countplot
입니다.
알아서 해당 column을 구성하고 있는 value들을 구분하여 보여줍니다.
# 배경을 darkgrid 로 설정
sns.set(style='darkgrid')
1-1 세로로 그리기
sns.countplot(x="class", hue="who", data=titanic)
plt.show()
1-2. 가로로 그리기
sns.countplot(y="class", hue="who", data=titanic)
plt.show()
1-3. 색상 팔레트 설정
sns.countplot(x="class", hue="who", palette='Paired', data=titanic)
plt.show()
2. distplot
matplotlib의 hist
그래프와 kdeplot
을 통합한 그래프 입니다.
분포와 밀도를 확인할 수 있습니다.
# 샘플데이터 생성
x = np.random.randn(100)
2-1. 기본 distplot
sns.distplot(x)
plt.show()
2-2. 데이터가 Series 일 경우
x = pd.Series(x, name="x variable")
sns.distplot(x)
plt.show()
2-3. rugplot
rug
는 rugplot
이라고도 불리우며, 데이터 위치를 x축 위에 작은 선분(rug)으로 나타내어 데이터들의 위치 및 분포를 보여준다.
sns.distplot(x, rug=True, hist=False)
plt.show()
2-4. kde (kernel density)
kde
는 histogram보다 부드러운 형태의 분포 곡선을 보여주는 방법
sns.distplot(x, rug=False, hist=False, kde=True)
plt.show()
2-5. 가로로 표현하기
sns.distplot(x, vertical=True)
2-6. 컬러 바꾸기
sns.distplot(x, color="y")
plt.show()
heatmap
색상으로 표현할 수 있는 다양한 정보를 일정한 이미지위에 열분포 형태의 비쥬얼한 그래픽으로 출력하는 것이 특징이다
3-1. 기본 heatmap
uniform_data = np.random.rand(10, 12)
sns.heatmap(uniform_data, annot=True)
plt.show()
3-2. pivot table을 활용하여 그리기
tips.head()
pivot = tips.pivot_table(index='day', columns='size', values='tip')
pivot
sns.heatmap(pivot, annot=True)
plt.show()
3-3. correlation(상관관계)를 시각화
corr() 함수는 데이터의 상관관계를 보여줍니다.
titanic.corr()
sns.heatmap(titanic.corr(), annot=True, cmap="YlGnBu")
plt.show()
4. pairplot
pairplot은 그리도(grid) 형태로 각 집합의 조합에 대해 히스토그램과 분포도를 그립니다.
또한, 숫자형 column에 대해서만 그려줍니다.
tips.head()
4-1. 기본 pairplot 그리기
sns.pairplot(tips)
plt.show()
4-2. hue 옵션으로 특성 구분
sns.pairplot(tips, hue='size')
plt.show()
4-3. 컬러 팔레트 적용
sns.pairplot(tips, hue='size', palette="rainbow")
plt.show()
4-4. 사이즈 적용
sns.pairplot(tips, hue='size', palette="rainbow", height=5,)
plt.show()
5. violinplot
바이올린처럼 생긴 violinplot 입니다.
column에 대한 데이터의 비교 분포도를 확인할 수 있습니다.
- 곡선진 부분 (뚱뚱한 부분)은 데이터의 분포를 나타냅니다.
- 양쪽 끝 뾰족한 부분은 데이터의 최소값과 최대값을 나타냅니다.
5-1. 기본 violinplot 그리기
sns.violinplot(x=tips["total_bill"])
plt.show()
5-2. 비교 분포 확인
x, y축을 지정해줌으로썬 바이올린을 분할하여 비교 분포를 볼 수 있습니다.
sns.violinplot(x="day", y="total_bill", data=tips)
plt.show()
5-3. 가로로 뉘인 violinplot
sns.violinplot(y="day", x="total_bill", data=tips)
plt.show()
5-4. hue 옵션으로 분포 비교
사실 hue 옵션을 사용하지 않으면 바이올린이 대칭이기 때문에 비교 분포의 큰 의미는 없습니다.
하지만, hue 옵션을 주면, 단일 column에 대한 바이올린 모양의 비교를 할 수 있습니다.
sns.violinplot(x="day", y="total_bill", hue="smoker", data=tips, palette="muted")
plt.show()