본문 바로가기

Python

[Python] 파이썬 Seaborn을 활용한 데이터 시각화

Seaborn이란?

  • 파이썬에서 데이터 시각화를 위한 라이브러리로, matplotlib을 기반으로 다양한 통계 그래프를 쉽게 그릴 수 있습니다.
  • 데이터 프레임과의 높은 호환성 덕분에 pandas와 함께 사용하기 좋습니다.

Seaborn의 장점

  • 데이터 프레임과 통합된 API
  • 다양한 통계 그래프 제공 (히스토그램, 카운트 플롯 등)
  • 간편한 스타일링과 테마 설정
  • 복잡한 데이터 관계를 쉽게 시각화

설치 방법

pip install seaborn

 

예제

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

#jupyter 사용 시 Warning 메세지 무시
warnings.filterwarnings('ignore')

#한글 및 마이너스 기호 깨짐 방지 및 style을 통해 plot 배경 흰색으로 설정
plt.rc("font", family = "Malgun Gothic")
sns.set(font="Malgun Gothic", rc={"axes.unicode_minus":False}, style='white')

# 예제 펭귄 데이터셋 호출
df = sns.load_dataset('penguins')
display(df)

 

 

Barplot

  • 범주형 데이터의 평균값을 막대로 나타내는 그래프입니다.
  • 범주형 변수와 수치형 변수의 관계를 보여줍니다
plt.figure(figsize=(10, 8))
# 펭귄의 species별 flipper_length_mm. palette를 설정해 막대 색상 조정 가능
sns.barplot(data=df, x='species', y='flipper_length_mm', hue='species', palette='coolwarm')
plt.xlabel('Species', fontsize=16)
plt.ylabel('flipper_length_mm', fontsize=16)
plt.title('Species별 Flipper Length (mm)', fontsize=18)
plt.show()
#savefig를 통해 저장, bbox_inches를 통해 여백 제거 가능
#plt.savefig('barplot.png', bbox_inches='tight')

 

Palette 목록: https://seaborn.pydata.org/tutorial/color_palettes.html

 

Countplot

  • 범주형 데이터의 빈도수를 막대로 나타내는 그래프입니다.
  • 각 범주의 개수를 보여줍니다.
plt.figure(figsize=(10, 8))
sns.countplot(data=df, x='species', palette='coolwarm')
plt.xlabel('Species', fontsize=16)
plt.ylabel('Count', fontsize=16)
plt.title('Species 개수', fontsize=18)
plt.savefig('countplot.png', bbox_inches='tight')

 

Histplot

  • 데이터의 분포를 히스토그램으로 나타내는 그래프입니다.
  • 데이터를 구간으로 나누어 각 구간의 빈도수를 막대로 표시합니다.
  • KDE: 커널 밀도 추정(Kernel Density Estimate, KDE)을 표시하는 옵션
    • 데이터의 분포를 추정하는 방법으로, 히스토그램과는 다르게 데이터를 부드럽게 연속적인 곡선으로 나타냅니다.
plt.figure(figsize=(10, 8))
sns.histplot(data=df, x='flipper_length_mm', kde=True)
plt.xlabel('Flipper Length', fontsize=16)
plt.ylabel('Count', fontsize=16)
plt.title('Histogram', fontsize=18)
plt.savefig('histplot.png', bbox_inches='tight')

 

 

Boxplot

  • 데이터의 분포와 중심, 범위, 이상치를 시각화하는 그래프입니다.
  • 중간값, 사분위수, 최소/최대값, 이상치 등을 한 눈에 파악할 수 있습니다.
plt.figure(figsize=(10, 8))
sns.boxplot(data=df, x='species', y='flipper_length_mm', palette='Spectral')
plt.xlabel('Species', fontsize=16)
plt.ylabel('Flipper Length (mm)', fontsize=16)
plt.title('Species별 Flipper Length', fontsize=18)
plt.savefig('boxplot.png', bbox_inches='tight')

 

Scatterplot

  • 두 변수 간의 관계를 산점도로 나타내는 그래프입니다.
  • 각 점은 데이터의 한 관측치를 나타내며, 두 변수의 값을 x, y 좌표로 표시합니다.
plt.figure(figsize=(10, 8))
sns.scatterplot(data=df, x='body_mass_g', y='flipper_length_mm', hue='species')
plt.xlabel('Body mass (g)', fontsize=16)
plt.ylabel('Flipper Length (mm)', fontsize=16)
plt.title('Body mass vs. Flipper Length', fontsize=18)
plt.savefig('scatterplot.png', bbox_inches='tight')

 

 

Pairplot

  • 여러 변수 간의 관계를 한 번에 시각화할 수 있는 그래프입니다.
  • 데이터의 모든 숫자형 변수 간의 쌍을 산점도로 나타내며, 대각선에는 히스토그램이나 커널 밀도 추정 그래프를 표시합니다.
sns.pairplot(df, hue='species')
plt.savefig('pairplot.png', bbox_inches='tight')

 

 

Heatmap

  • 행과 열로 이루어진 데이터의 값을 색상으로 나타내는 그래프입니다.
  • 주로 상관 행렬과 같은 행렬 데이터를 시각화하는 데 사용됩니다.
# 상관 행렬 계산
corr = df.corr()

# Heatmap
plt.figure(figsize=(10, 8))
sns.heatmap(corr, annot=True, cmap='coolwarm', fmt='.2f')
plt.title('상관 행렬 (Correlation Matrix)', fontsize=18)
plt.savefig('heatmap.png', bbox_inches='tight')