[seaborn] 커널밀도추정 KDE

  • 시각화

데이터로 차트를 그릴 때 막대 그래프만으로는 한계가 있다. 분포가 안 보이기 때문이다. 그래서 본 포스팅에서는 파이썬 라이브러리 seaborn으로 데이터의 분포를 확인하는 커널 밀도 추정(KDE: Kernel Density Estimator) 플롯을 그려본다.

막대 그래프의 문제점

일단 막대 그래프로 데이터를 시각화를 하면 보통 이렇게…

평균과 신뢰구간이 비슷한 경우, 어떤 데이터인지 구분이 안 된다. 최대값, 최소값은 어떤지, 어떤 모양으로 얼마나 퍼져 있는지 분포가 확인이 안 되는 거다.

그래서 보통 분포를 확인할 때 히스토그램(histogram)을 많이 활용하곤 한다. 구간을 나눠서 막대 그래프를 그리는 거다. 그런데 히스토그램은 구간을 어떻게 설정하냐에 따라 결과물이 매우 달라져서, 엉뚱한 결론과 해석을 내릴 수 있기 때문에 조심해야 한다.

그래서 그 대안으로 많이 쓰이는 게 커널 밀도 추정(KDE: Kernel Density Estimator)이다.

커널 밀도 추정(KDE: Kernel Density Estimator)이란

쉽게 얘기하면 히스토그램 같은 분포를 스무딩~ 부드럽게 곡선화(?) 시켜서 그려주는 거다. 이렇게.

만약 KDE에 대해 자세히 알고 싶다면 아래 글 참고.

Kernel Density Estimation(커널밀도추정)에 대한 이해 (출처: 다크 프로그래머)

아무튼 seaborn에서는 KDE 플롯을 정말 쉽게 그릴 수 있다. sns.kdeplot() 이걸 사용하면 끝이다.

seaborn으로 KDE plot 그리기

기본적으로 두 개 인자만 넣어주면 된다. datashade

  • data: pandas의 DataFrame, 파이썬의 list, numpy의 배열 등 시각화시키고 싶은 데이터 세트
  • shade: 곡선 아래의 공간을 음영 처리할지 결정 (True/False)

예를 들어 3개의 데이터 세트를 가지고 KDE 플롯을 그린다고 하면 이렇게!

sns.kdeplot(dataset1, shade=True)
sns.kdeplot(dataset2, shade=True)
sns.kdeplot(dataset3, shade=True)
plt.legend()
plt.show()

참 쉽다.

아, 여기서 plt.legend()는 범례 표시다. matplotlib에서 자세히 다뤘지만…

앞으로 데이터의 분포를 보고 싶다면

일단 seaborn으로 KDE plot을 그려보자.

추천 글

댓글 남기기