이번 포스팅에서는 다변량 데이터를 시각적으로 표현하는 페어 플롯과 산점도 행렬을 같이 정리했다.
페어 플롯 & 산점도 행렬이란?
페어플롯(Pair Plot)과 산점도 행렬(Scatterplot Matrix)은 모두 다변량 데이터셋에서 각 변수 쌍 간의 관계를 시각적으로 표현하는 그래프다. 주로 변수 간의 분포와 상관관계를 파악하는 데 사용된다.
페어 플롯과 산점도 행렬의 차이점
페어플롯과 산점도 행렬은 매우 유사한 기법이지만, 몇 가지 차이점이 있다. 직관적인 비교를 위해 차이점을 간단하게 표로 정리하고 아이리스(Iris) 데이터셋을 사용해 직접 그려보았다.
구분 | 페어 플롯 | 산점도 행렬 |
대각선 요소 | 히스토그램 또는 커널 밀도 추정 그래프 |
히스토그램 |
변수 간 산점도 | 카테고리별 시각적 색상 구분 가능 | 추가적인 시각적 구분 없음 |
페어 플롯 & 산점도 행렬 그리기
페어 플롯 그리기
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
import pandas as pd
# 예제 데이터 로드
iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
df['species'] = iris.target
# 페어플롯 그리기
sns.pairplot(df, hue='species', palette='viridis', markers=['o', 's', 'D'])
plt.suptitle('Pair Plot of Iris Dataset', y=1.02)
plt.show()
산점도 행렬 그리기
import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import scatter_matrix
from sklearn.datasets import load_iris
# 예제 데이터 로드
iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
# 산점도 행렬 그리기
scatter_matrix(df, figsize=(10, 10), diagonal='hist', marker='o')
plt.suptitle('Scatterplot Matrix of Iris Dataset', y=1.02)
plt.show()
페어 플롯 코드로 산점도 행렬 그리기
대각선 요소에 커널 밀도 분석 그래프가 아닌 히스토그램을 넣고 카테고리별 색상 구분을 하지 않으면 산점도 행렬과 같은 그래프를 그릴 수 있다.
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
import pandas as pd
# 예제 데이터 로드
iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
# 페어플롯 그리기 (KDE와 색상 구분 없이)
sns.pairplot(df, diag_kind='hist', plot_kws={'s': 20})
plt.suptitle('Pair Plot of Iris Dataset (No KDE, No Hue)', y=1.02)
plt.show()
페어 플롯 & 산점도 행렬의 해석
공통 해석
각 변수 쌍의 산점도를 통해 변수 간의 관계를 확인할 수 있다. 산점도의 해석은 따로 정리했다.
2024.07.25 - [Statistics & Data Analytics] - [데이터 분석] EDA - 데이터 시각화 - 산점도 (Scatter Plot)
페어 플롯의 추가 해석
- 커널 밀도 추정(KDE): 각 변수의 분포를 카테고리별로 더 자세히 파악할 수 있음.
- 클러스터 및 패턴: 특정 변수 쌍에서 데이터가 군집을 이루거나 특정 패턴을 나타내는지 파악할 수 있음.
커널 밀도 추정(Kernel density estimation, KDE)
커널 밀도 추정(KDE)은 데이터의 분포를 부드럽게 추정하여, 데이터가 특정 값 주변에서 어떻게 분포하는지 시각적으로 보여준다. 관련하여 자세한 내용은 따로 정리할 예정이다.