본문 바로가기
Python Library/Matplotlib

[Matplotlib] Seaborn을 사용한 데이터 분포 시각화 (2)

by goatlab 2022. 2. 22.
728x90
반응형
SMALL

다차원 데이터

 

데이터 변수가 여러개인 다차원 데이터는 데이터의 종류에 따라 다음과 같은 경우가 있을 수 있다.

 

  • 분석하고자 하는 데이터가 모두 실수 값인 경우
  • 분석하고자 하는 데이터가 모두 카테고리 값인 경우
  • 분석하고자 하는 데이터가 모두 실수 값과 카테고리 값이 섞여 있는 경우

 

2차원 실수형 데이터

 

데이터가 2차원이고 모두 연속적인 실수값이라면 스캐터 플롯 (scatter plot)을 사용하면 된다. 스캐터 플롯을 그리기 위해서는 Seaborn 패키지의 jointplot 명령을 사용한다. jointplot 명령은 스캐터 플롯뿐 아니라 차트의 가장자리(margin)에 각 변수의 히스토그램도 그린다. (jointplot : http://seaborn.pydata.org/generated/seaborn.jointplot.html)

 

jointplot 명령도 데이터프레임에만 사용할 수 있다.

 

jointplot(x="x_name", y="y_name", data=dataframe, kind='scatter')

 

data 인수에는 대상이 되는 데이터프레임을, x 인수에는 x 변수가 될 데이터프레임의 열 이름 문자열을, y 인수에는 y 변수가 될 데이터프레임의 열 이름 문자열을 넣는다. kind는 차트의 종류를 지정한다. kind='scatter'이면 스캐터 플롯이다.

 

sns.jointplot(x="sepal_length", y="sepal_width", data=iris)
plt.suptitle("꽃받침의 길이와 넓이의 Joint Plot", y=1.02)
plt.show()

 

kind='kde'이면 커널 밀도 히스토그램을 그린다.

 

sns.jointplot(x="sepal_length", y="sepal_width", data=iris, kind="kde")
plt.suptitle("꽃받침의 길이와 넓이의 Joint Plot 과 Kernel Density Plot", y=1.02)
plt.show()

 

다차원 실수형 데이터

 

3차원 이상의 데이터라면 seaborn 패키지의 pairplot 명령을 사용한다. pairplot은 데이터프레임을 인수로 받아 그리드 (grid) 형태로 각 데이터 열의 조합에 대해 스캐터 플롯을 그린다. 같은 데이터가 만나는 대각선 영역에는 해당 데이터의 히스토그램을 그린다. (pairplot : http://seaborn.pydata.org/generated/seaborn.pairplot.html)

 

sns.pairplot(iris)
plt.title("Iris Data의 Pair Plot")
plt.show()

 

카테고리형 데이터가 섞여 있는 경우에는 hue 인수에 카테고리 변수 이름을 지정하여 카테고리 값에 따라 색상을 다르게 할 수 있다.

 

sns.pairplot(iris, hue="species", markers=["o", "s", "D"])
plt.title("Iris Pair Plot, Hue로 꽃의 종을 시각화")
plt.show()

 

2차원 카테고리 데이터

 

데이터가 2차원이고 모든 값이 카테고리 값이면 heatmap 명령을 사용한다. (heatmap : http://seaborn.pydata.org/generated/seaborn.heatmap.html)

 

titanic_size = titanic.pivot_table(
    index="class", columns="sex", aggfunc="size")
titanic_size

sns.heatmap(titanic_size, cmap=sns.light_palette(
    "gray", as_cmap=True), annot=True, fmt="d")
plt.title("Heatmap")
plt.show()

 

2차원 복합 데이터

 

데이터가 2차원이고 실수 값, 카테고리 값이 섞여 있다면 기존의 플롯 이외에도 다음과 같은 분포 플롯들을 이용할 수 있다.

 

  • barplot
  • boxplot
  • pointplot
  • violinplot
  • stripplot
  • swarmplot

 

barplot 은 카테고리 값에 따른 실수 값의 평균과 편차를 표시하는 기본적인 바 차트를 생성한다. 평균은 막대의 높이로, 편차는 에러바 (error bar)로 표시한다. (barplot : http://seaborn.pydata.org/generated/seaborn.barplot.html)

 

sns.barplot(x="day", y="total_bill", data=tips)
plt.title("요일 별, 전체 팁")
plt.show()

 

boxplot 명령은 박스-휘스커 플롯 (Box-Whisker Plot) 혹은 간단히 박스 플롯이라 부르는 차트를 그려준다. 박스 플롯은 박스와 박스 바깥의 선 (whisker)으로 이루어진다. (boxplot : http://seaborn.pydata.org/generated/seaborn.boxplot.html)

 

박스는 실수 값 분포에서 1사분위수 (Q1)와 3사분위수 (Q3)를 뜻하고 이 3사분위수와 1사분수의 차이 (Q3 - Q1)를 IQR (interquartile range)라고 한다. 박스 내부의 가로선은 중앙값을 나타낸다. 박스 외부의 세로선은 1사분위 수보다 1.5 x IQR 만큼 낮은 값과 3사분위 수보다 1.5 x IQR 만큼 높은 값의 구간을 기준으로 그 구간의 내부에 있는 가장 큰 데이터와 가장 작은 데이터를 잇는 선분이다. 그 바깥의 점은 아웃라이어 (outlier)라고 부르는데 일일히 점으로 표시한다.

 

sns.boxplot(x="day", y="total_bill", data=tips)
plt.title("요일 별 전체 팁의 Box Plot")
plt.show()

 

boxplot이 중앙값, 표준 편차 등, 분포의 간략한 특성만 보여주는데 반해 violinplot, stripplot. swarmplot 등은 카테고리값에 따른 각 분포의 실제 데이터나 전체 형상을 보여준다는 장점이 있다. 

 

violinplot은 세로 방향으로 커널 밀도 히스토그램을 그려주는데 왼쪽과 오른쪽이 대칭이 되도록 하여 바이올린처럼 보인다. (violinplot : http://seaborn.pydata.org/generated/seaborn.violinplot.html)

 

sns.violinplot(x="day", y="total_bill", data=tips)
plt.title("요일 별 전체 팁의 Violin Plot")
plt.show()

 

stripplot은 마치 스캐터 플롯처럼 모든 데이터를 점으로 그려준다. jitter=True를 설정하면 가로축상의 위치를 무작위로 바꾸어서 데이터의 수가 많을 경우에 겹치지 않도록 한다. (stripplot : http://seaborn.pydata.org/generated/seaborn.stripplot.html)

 

np.random.seed(0)
sns.stripplot(x="day", y="total_bill", data=tips, jitter=True)
plt.title("요일 별 전체 팁의 Strip Plot")
plt.show()

 

swarmplot stripplot 비슷하지만 데이터를 나타내는 점이 겹치지 않도록 옆으로 이동한다. (swarmplot : http://seaborn.pydata.org/generated/seaborn.swarmplot.html)

 

sns.swarmplot(x="day", y="total_bill", data=tips)
plt.title("요일 별 전체 팁의 Swarm Plot")
plt.show()

 

https://datascienceschool.net/01%20python/05.04%20%EC%8B%9C%EB%B3%B8%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%9C%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%ED%8F%AC%20%EC%8B%9C%EA%B0%81%ED%99%94.html

 

Seaborn을 사용한 데이터 분포 시각화 — 데이터 사이언스 스쿨

.ipynb .pdf to have style consistency -->

datascienceschool.net

 

728x90
반응형
LIST