다차원 데이터
데이터 변수가 여러개인 다차원 데이터는 데이터의 종류에 따라 다음과 같은 경우가 있을 수 있다.
|
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 은 카테고리 값에 따른 실수 값의 평균과 편차를 표시하는 기본적인 바 차트를 생성한다. 평균은 막대의 높이로, 편차는 에러바 (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()
'Python Library > Matplotlib' 카테고리의 다른 글
[Matplotlib] Pandas의 시각화 기능 (0) | 2022.02.22 |
---|---|
[Matplotlib] Seaborn을 사용한 데이터 분포 시각화 (3) (0) | 2022.02.22 |
[Matplotlib] Seaborn을 사용한 데이터 분포 시각화 (1) (0) | 2022.02.22 |
[Matplotlib] triangular grid (0) | 2022.02.22 |
[Matplotlib] 여러가지 플롯 (2) (0) | 2022.02.22 |