본문 바로가기
Python/seaborn & matplotlib

Seaborn 활용 데이터 시각화

by Mr.DonyStark 2024. 2. 6.

□ Seaborn과 Matplotlib은 둘 다 데이터 시각화를 위한 파이썬 라이브러리임

Seaborn은 Matplotlib을 기반으로 한 고수준의 인터페이스이며, 통계 그래픽을 쉽게 그릴 수 있도록 도와줌
Seaborn은 Matplotlib을 기반으로하여 더 간편한 문법을 제공하고, 예쁜 테마와 색상 팔레트를 제공하여 그래프를 빠르게 스타일링할 수 있도록 도와줌

Seaborn은 통계적 그래픽스에 특화되어 있어 회귀선, 박스 플롯, 히스토그램 등을 간단한 명령어로 그릴 수 있음

□ 히스토그램 시각화

  ○ seaborn에서 sbplot 사용시 두가지 값을 반환함

    - 첫번째는 그림영역 즉, 틀을 생성

    - 두번쨰는 그래프의 모든 객체

#라이브러리 호출
import seaborn as sns
import matplotlib.pyplot as plt
#데이터 호출
tips = sns.load_dataset('tips')
#틀 지정
sns.set_context('paper')  # 인쇄에 적합한 paper로 설정
#plt.subplots()를 사용하여 figure와 axes를 동시에 생성
fig, ax = plt.subplots()
#sns.histplot()을 사용하여 히스토그램을 그림
sns.histplot(data=tips, x='total_bill', ax=ax)
#제목 지정
ax.set_title('Total Bill Histogram')
plt.show()

#틀 지정
fig, ax = plt.subplots()
#sns.kdeplot()을 사용하여 밀도 플롯을 그림
sns.kdeplot(data=tips, x='total_bill', ax=ax) #shift+tab을 누르면 무슨값이있는지 보임
#차트 제목 설정
ax.set_title('Total Bill Density')
#차트 x축 이름 지정
ax.set_xlabel('Total Bill')
#차트 y축 이름 지정
ax.set_ylabel('Unit Probability')
plt.show()

러그 그래프 : 변수분포를 1차원으로 나타냄

#틀 지정
fig, ax = plt.subplots()
#러그그래프 데이터 지정
sns.rugplot(data = tips, x='total_bill', ax=ax)
#히스토그램 데이터 지정
sns.histplot(data = tips, x='total_bill', ax=ax)
#차트 제목 지정
ax.set_title('Rug Plot and Histogram')
plt.show()

히스토그램+밀도분포그래프+러그그래프

#히스토그램, 밀도 분포 그래프, 러그 그래프를 한번에 그림
fig = sns.displot(data=tips, x='total_bill',
                 kde=True, rug=True)  #밀도그래프 kde = True, rug = True 지정
fig.set_axis_labels(x_var='Total Bill', y_var='Count')
#제목지정
fig.figure.suptitle('Distribution of Total Bill')
plt.show()

 

□ 막대그래프는 히스토그램과 비슷하지만 구간별로 나누어 분포를 표현하지 않고 막대로 이산변수의 개수를 표현한다는 데 차이가 있음

seaborn 에서는 막대그래프를 countplot이라고 함

막대그래프 / countplot

count, ax =plt.subplots()
#데이터 설정 
sns.countplot(data=tips, x='day', palette='viridis',ax=ax) #palette 막대그래프 색상
#제목 설정
ax.set_title('Count of days')
#x축 이름 지정
ax.set_xlabel('Day of the Week')
#y축 이름 지정
ax.set_ylabel('Frequency')

 

Seaborn 산점도 그래프

#데이터 호출
tips = sns.load_dataset('tips')
#이변량 그래프 그리기
scatter, ax = plt.subplots() #틀과 그래프 객체 지정
#데이터 및 필드 지정
sns.scatterplot(data=tips, x='total_bill', y='tip',ax=ax)
ax.set_title('Scatter Plot of Total Bill and Tip')
ax.set_xlabel('Total Bill')
ax.set_ylabel('Tip')
plt.show()

#라이브러리 호출
import seaborn as sns
import matplotlib.pyplot as plt
#데이터 호출
tips = sns.load_dataset('tips')
#육각그래프
hexbin = sns.jointplot(data=tips,x='total_bill',y='tip',kind='hex') #kin='hex'를 활용해 육각형표시
hexbin.set_axis_labels(xlabel='Total Bill',ylabel='Tip')
hexbin.figure.suptitle('Hexbin Joint PLlot of Total Bill', y=1.03)
plt.show()

 

□ 산술평균 막대그래프

  ○ 산술평균이란 데이터 집합의 모든 값의 합을 데이터의 개수로 나눈 값으로 주로 "평균"이라고 부름

#라이브러리 호출
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
#데이터 호출
tips = sns.load_dataset('tips')

fig, ax = plt.subplots()
sns.barplot(data=tips, x='time', y='total_bill', estimator=np.mean, ax=ax)
ax.set_title('Bar Plot of Average Total Bill for Time of Day')
ax.set_xlabel('Time of Day')
ax.set_ylabel('Average Total Bill')
plt.show()

 

□ 박스플롯 : 박스 그래프는 최소값, 1사분위수, 중앙값, 3가분위수, 최대값, 이상값 등 다양한 통계량을 한번에 표현

  ○ sns.boxplot()의 매개변수 y는 생략가능

  ○ 매개변수 x에는 반드시 지정 열과 같은 변수로 지정해야함