Seaborn 데이터 시각화/histplot

장재형·2023년 3월 20일
0
post-thumbnail

🔍 세팅


seaborn.histplot은 데이터의 분포를 시각화하는 데 사용되는 함수.
일반 막대그래프와는 달리 가로가 계급, 즉 값에 해당한다는 결정적인 차이점이 있음.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
penguins = sns.load_dataset('penguins')
penguins

본 문서에서는 데이터 샘플로 penguins를 사용하였음.
penguins의 데이터 info는 다음과 같음.

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 344 entries, 0 to 343
Data columns (total 7 columns):
 #   Column             Non-Null Count  Dtype  
---  ------             --------------  -----  
 0   species            344 non-null    object 
 1   island             344 non-null    object 
 2   bill_length_mm     342 non-null    float64
 3   bill_depth_mm      342 non-null    float64
 4   flipper_length_mm  342 non-null    float64
 5   body_mass_g        342 non-null    float64
 6   sex                333 non-null    object 
dtypes: float64(4), object(3)
memory usage: 18.9+ KB

species에는 펭귄의 종, island에는 발견 섬이 문자열로, 2 ~ 5열까지에는 실수로 펭귄의 수치가, 6열에는 펭귄의 성별이 기록되어 있음




📔 기본 형태


이에 x축을 body_mass_g"(체질량), y축을 개체 수로 한 기본 형태의 히스토그램은

sns.histplot(data=penguins, x='body_mass_g')
plt.show()

으로 출력할 수 있고,

의 형태로 나타난다.
만약 코드를

sns.histplot(data=penguins, y='body_mass_g')
plt.show()

와 같이 y축 표기로 변경한다면,

와 같이 축 반전 형태의 그래프가 출력된다.




📔 파라미터


이제 파라미터들을 변경해 보자. seaborn에 따르면, sns.histplot의 기본 형태는 다음과 같다.

seaborn.histplot(data=None, *, x=None, y=None, hue=None, weights=None, stat='count', bins='auto', binwidth=None, binrange=None, discrete=None, cumulative=False, common_bins=True, common_norm=True, multiple='layer', element='bars', fill=True, shrink=1, kde=False, kde_kws=None, line_kws=None, thresh=0, pthresh=None, pmax=None, cbar=False, cbar_ax=None, cbar_kws=None, palette=None, hue_order=None, hue_norm=None, color=None, log_scale=None, legend=True, ax=None, **kwargs)

data

입력 조건
pandas.DataFrame, numpy.ndarray, mapping, or sequence

시각화할 데이터

x, y

입력 조건
vectors or keys in data

데이터에서 x축, y축으로 사용될 열의 이름이나 값

hue

입력 조건
vector or key in data

색상을 지정할 열의 이름이나 값

weights

입력 조건
vector or key in data

각 구간의 카운트에 대하여 가중치 부여

stat

입력 조건
str

히스토그램 플롯에서 통계를 계산하는 방법을 지정함. 입력 없을 시 기본 형태는 count

  • count: 각 구간의 관측치 수 표시 (기본 형태)
  • frequency: 관측치 수를 구간 너비로 나눈 값 표시
  • probability or proportion: 막대 높이가 1이 되도록 정규화
  • percent: 막대 높이가 100이 되도록 정규화
  • density: 히스토그램의 총 면적이 1이 되도록 정규화

bins

입력 조건
str, number, vector, or a pair of such values

히스토그램 막대의 개수를 지정. 입력 없을 시 기본 형태는 auto.
numpy.histogram_bin_edges에 따라 자동 계산됨

sns.histplot(data=penguins, x='body_mass_g', bins=30)
plt.show()


bins=30으로 지정해 주면 구간의 수가 30개로 위와 같이 자동으로 분리됨

binwidth

입력 조건
number or pair of numbers

히스토그램 막대의 너비를 지정. 입력 없을 시 기본 형태는 None.

sns.histplot(data=penguins, x='body_mass_g', binwidth=500)
plt.show()

binwidth=500으로 지정해 주면 구간의 너비가 500으로 위와 같이 자동으로 분리됨

binrange

입력 조건
pair of numbers or a pair of pairs

히스토그램을 계산할 범위를 지정. 입력 없을 시 제공 데이터의 양 극단값으로 설정

sns.histplot(data=penguins, x='body_mass_g', binrange=(3000, 4500))
plt.show()

binrange=(3000, 4500)으로 지정해 주면 체질량 3000 ~ 4500 사이의 데이터만 분리함
binsbinwidth와 같이 사용하여 구간을 더 세부적으로 설정할 수 있음

discrete

입력 조건
bool

연속적인 데이터 분포를 막대그래프로 보여주고 있다면, 'discrete' 파라미터를 사용해서 이산분포를 그려줄 수 있음

cumulative

입력 조건
bool

값이 True이면 구간이 증가함에 따라 누적값을 출력. 입력 없을 시 기본 형태는 False

sns.histplot(data=penguins, x='body_mass_g', cumulative = True)
plt.show()

multiple

입력 조건
{“layer”, “dodge”, “stack”, “fill”}

각 열의 분포를 개별적으로 표시. 입력 없을 시 기본 형태는 layer

  • layer
sns.histplot(data=penguins, x='body_mass_g', hue="species", multiple="layer")
plt.show()

  • dodge
sns.histplot(data=penguins, x='body_mass_g', hue="species", multiple="dodge")
plt.show()

  • stack
sns.histplot(data=penguins, x='body_mass_g', hue="species", multiple="stack")
plt.show()

  • fill
sns.histplot(data=penguins, x='body_mass_g', hue="species", multiple="fill")
plt.show()

element

입력 조건
{“bars”, “step”, “poly”}

그림의 유형 지정. bars는 막대 그래프, step은 계단식 그래프, poly는 다각형 그래프를 의미
입력 없을 시 기본 형태는 bars

  • bars
sns.histplot(data=penguins, x='body_mass_g', element = 'bars')
plt.show()

  • step
sns.histplot(data=penguins, x='body_mass_g', element = 'step')
plt.show()

  • poly
sns.histplot(data=penguins, x='body_mass_g', element = 'poly')
plt.show()

fill

입력 조건
bool

밀도 그래프의 아래 영역을 채우기 위해 사용. 입력 없을 시 기본 형태는 True

sns.histplot(data=penguins, x='body_mass_g', fill = False)
plt.show()


만약 False로 지정해 주면 위와 같이 속이 빈 막대 형태로 출력됨

kde

입력 조건
bool

밀도 추정 그래프를 추가. 일변량 데이터와만 관련됨. 입력 없을 시 기본 형태는 False

sns.histplot(data=penguins, x='body_mass_g', kde = True)
plt.show()

kde_kws

입력 조건
dict

seaborn.kdeplot에 따라 kde 연산 제어.

line_kws

입력 조건
dict

matplotlib.axes.Axes.plot에 따라 kde 시각화 제어

color

입력 조건
matplotlib color

'matplotlib.colors'에 따라 플롯 색상을 지정.

sns.histplot(data=penguins, x='body_mass_g', color = 'red')
plt.show()

legend

입력 조건
bool

False인 경우 범례를 표시하지 않음. 입력 없을 시 기본 형태는 True

sns.histplot(data=penguins, x='body_mass_g', hue="species", multiple="fill", legend = False)
plt.show()


multiple 예시 그래프 중 범례가 표시되는 그래프에서 legend=False로 지정해 주면 범례가 표시되지 않는 모습을 확인할 수 있음


profile
HYU 17'

0개의 댓글