Data Science/시각화

시각화 라이브러리(2) - Seaborn

Boxya 2025. 3. 31. 22:07

[KT] AIVLE SCHOOL 4일차

 

Seaborn

  • Matplotlib 기반으로 작성된 고수준 인터페이스를 제공하여 쉽게 시각화
  • Matplotlib보다 훨씬 간편하고 직관적인 API 제공
  • 이를 통해 통계 그래픽을 생성하는 데 필요한 많은 작업을 단순화할 수 있음
  • Matplotlib과 함께 사용되는 것이 일반적이
  • Matplotlib에서 지원하지 않는 색상 팔레트, 테마 등을 제공
import seaborn as sns

Histogram

  • hisplot() 함수는 단일 변수의 데이터 분포를 Histogram으로 표시
  • hue 매개변수를 사용하여 구분 기준이 되는 범주형 변수를 지정할 수도 있
# Age 열 데이터 분포를 Survived 열을 기준으로 구분
# bins로 표시할 막대 갯수 설정, edgecolor로 색상 설정
# data는 데이터프레임
sns.histplot(x='Age', hue='Survived', data=titanic, bins=16, edgecolor='k')
plt.show()

Desity Plot

  • kdeplot() 함수는 단일 변수 또는 두 변수의 데이터 분포를 Density Plot으로 시각화 함
  • 숫자형 변수의 값 분포를 확인할 수 있는 커널밀도추정(kde, Kernal Density Etimation)그래프를 표시
  • 그래프 아래의 면적은 1
  • x와 y 매개변수 중 하나를 사용하여 변수를 지정해 표시되는 방향을 조정
  • hue 매개변수를 사용하여 구분 기준이 되는 범주형 변수를 지정
    • common_norm 매개변수 값 설정에 따라 다른 결과를 보여줌
    • True : 두 그래프 면적의 합 1, False : 그래프 각각의 면적이 1
# Age 변수의 데이터 분포를 Survied 열을 기준으로 구분
# fill 매개변수는 색을 채울지 말지
sns.kdeplot(x='Age', hue='Survived', data=titanic, common_norm=False, fill=True)
plt.show()

 

Box Plot

  • boxplot() 함수는 단일 변수나 여러 변수의 분포를 Box Plot으로 시각화
  • 변수의 분포와 이상치(Outlier)를 시각적으로 탐색 가능
  • x와 y 매개변수 중 하나를 사용하여 변수를 지정, hue 매개변수를 사용하여 구분 기준이 되는 범주형 변수 지정 가능
# 가운데 선은 50%(중위값), 박스 윗변 75&(Q3, 3사분위수), 박스 밑변 25%(Q1, 1사분위수)
# 박스 윗변, 밑변 사이 : IQR = Q3 - Q1
# 상한 : Q3 + 1.5*IQR , 하한 : Q1 + 1.5*IQR
# o : 이상치
# boxplot는 평균 표시 X

# Age 변수의 데이터 분포를 Box Plot로 확인
# y 축에 대상 열을 지정하면 세로 형태로 표시
sns.boxplot(y='Age', data=titanic)
plt.show()

# Age 변수의 데이터 분포를 Survived 열을 기준으로 구분
# x 축에 구분 기준이 되는 열을 지정
sns.boxplot(y='Age', x='Survived', data=titanic)
plt.show()

# x 축에 대상 열을 지정하면 가로 형태로 표시
sns.boxplot(x='Age', data=titanic)
plt.show()

# 가로 형태로 표시할 시 y 축에 구분 기준이 되는 열을 지정하고
# orient='h'를 지정해야 정상 출력

 

Distribution Plot

  • displot() 함수는 단일 변수의 분포를 시각화하기 위한 함수
  • Histogram과 Density Plot을 같이 표시할 수 있음
  • kde 매개변수를 사용하여 커널밀도추정 그래프를 추가로 그릴지 여부를 지정
  • hist 매개변수를 사용하여 히스토그램을 표시할 지 여부를 지정
  • rug 매개변수를 사용하여 각 데이터 포인트의 위치를 보여주는 선을 그릴지 지정
  • hist_kws 매개변수에 histogram을 꾸미기 위한 다양한 설정 값을 딕셔너리 형태로 전달
  • kde_kws 매개변수에 Density Plot을 꾸미기 위한 다양한 설정 값을 딕셔너리 형태로 전달
sns.distplot(x=titanic['Age'], bins=16, hist_kws={'edgecolor': 'k'}, 
             kde_kws={'color':'tab:orange'},
             kde=True, 
             hist=True, 
             rug=True)
plt.show()

 

Joint Plot

  • jointplot() 함수는 두 변수 간 관계를 시각화하기 위해 산점도와 히스토그램을 함께 그려줌
  • kind 매개변수를 사용하여 그래프의 종류를 지정 가능
  • hue 매개변수를 사용하여 구분 기준이 되는 범주형 변수를 지정 가
# Species 열을 구분 기준 열로 지정
sns.jointplot(x='Petal.Length', y='Petal.Width', data=iris, hue='Species')
plt.show()

 

Pair Plot

  • pairplot() 함수는 변수 간의 산점도 및 변수 분포를 한 번에 시각화하는 기능 제공
  • hue 매개변수를 사용하여 추가적인 범주형 변수를 지정
  • But, 그려지는 데 시간이 많이 걸림
sns.pairplot(iris, hue='Species')
plt.show()

 

Count Plot

  • countplot() 함수는 범주형 변수의 빈도를 막대 그래프로 시각화
  • 주어진 데이터셋에서 각 범주의 개수를 계산하고 막대 그래프를 그려줌
  • hue 매개변수를 사용하여 특정 범주형 변수를 기준으로 구분해 표시
  • order, hue_order 매개변수를 사용하여 막대 그래프에 그려질 범주의 순서를 지정 가능
# 동일한 결과의 pandas 시각화
titanic['Survived'].value_counts().plot(kind='bar')

# Embarked 변수의 범줏값이 몇 개씩 포함되어 있는지
# hue 옵션에 Survied 변수를 지정해 생존 여부로 구분
sns.countplot(x='Embarked', hue='Survived', data=titanic)
plt.show()

 

Bar Plot

  • barplot() 함수는 범주형 변수에 대한 막대 그래프를 그리는 함수
  • 데이터를 추정하고 오차 막대를 표시할 수 있음
    • 오차 막대는 각 범주의 평균과 신뢰 구간을 시각화하는데 사용
  • x와 y 매개변수를 사용하여 막대 그래프의 x축과 y축을 지정
  • hue 매개변수를 사용하여 특정 범주형 변수를 기준으로 구분해 표시 가능
    • 예를 들어, 다른 집단에 대한 데이터를 시각적으로 구분 가능
  • 기본적으로 평균값을 계산하고 오차 막대를 그림
  • estimator 매개변수를 사용하여 다른 추정값을 지정할 수 있음
    • 예로 estimator = np.median을 사용하여 중앙값을 계산할 수 있음
sns.barplot(x='Embarked', y='Fare', data=titanic, errorbar=('ci', 95), n_boot=5000)
# errorbar 신뢰구간 설정 ('ci', False) 설정 시 안보이게
# n_boot 기본값 5000번, 신뢰구간 설정하는 표본추출 반복횟수
plt.show()

 

Heatmap

  • heatmap() 함수는 두 범주형 변수를 집계한 결과를 색의 농도 차이로 표시
  • 이를 위해서 집계(groupby)와 피벗(pivot)을 먼저 만들어 줘야 함
  • 여러 범줏값을 갖는 변수를 비교할 때 유용
# Embarked별 Pclass별 탑승자 수 표시
temp1 = titanic.groupby(['Embarked', 'Pclass'], as_index=False)['PassengerId'].count()

# pivot 생성
temp2 = temp1.pivot(index='Embarked', columns='Pclass', values='PassengerId')

# matrix 형태의 데이터를 heatmap으로 표현
#sns.heatmap(temp2, annot=True)

# 다양한 매개변수들
sns.heatmap(temp2, 
            annot=True, # 값을 표현 (어노테이션, 숫자 표시)
            fmt='d',  # 표시되는 값을 정수로 표현 (포맷, 표시 형식 지정)
            linewidth=2, # 구간 간격 벌리기 (간격 지정)
            cmap='Blues', # 색상 변경 (colormap) (색상 지정)
            cbar=False,   #  color bar 표시, 표시 X
            square=True)  # 정사각형으로 표현
plt.show()

'Data Science > 시각화' 카테고리의 다른 글

시각화 라이브러리 (1) - Matplotlib  (0) 2025.03.31