데이터 분석을 하다 보면 두 숫자형 변수가 서로 어떤 식으로 관계 맺고 있는지 궁금할 때가 많습니다. 이때 산점도(Scatter Plot)만 봐서는 한쪽 또는 양쪽 변수의 분포(Distribution)까지 확인하기가 까다로울 수 있는데요.
Seaborn의 jointplot()을 활용하면, 산점도와 함께 마진 히스토그램(또는 커널 밀도 곡선)을 결합해 두 변수 간 관계뿐 아니라 각 변수의 분포까지 한눈에 파악할 수 있습니다.
kind 파라미터에 따라 scatter, kde, hist, reg 등 다양한 방식으로 표현 가능아래 코드는 df라는 데이터프레임에서 Age(나이)와 YearsAtCompany(근속 연수) 간의 관계를 산점도로 그리면서, 동시에 각 변수의 분포(히스토그램)를 주변부에 표시합니다.
python
코드 복사
import seaborn as sns
import matplotlib.pyplot as plt
# Jointplot 실행
sns.jointplot(x=df['Age'], y=df['YearsAtCompany'], kind='scatter')
plt.suptitle("Age vs. YearsAtCompany (Jointplot)", y=1.02)
plt.show()
sns.jointplot(x=df['Age'], y=df['YearsAtCompany'], kind='scatter')x와 y 파라미터로 각각 데이터를 지정kind='scatter' → 중앙 영역에 산점도를, 주변부(마진)에 히스토그램을 표시kind로 kde, hist, hex, reg 등을 지정할 수도 있음plt.suptitle()plt.suptitle()을 사용하는 것이 편리y=1.02로 약간 위로 띄워서 그래프와 겹치지 않도록 조정plt.show()실행 결과, 중앙에는 Age-YearsAtCompany의 산점도가 나타나고, 왼쪽과 아래쪽에는 각각 Age, YearsAtCompany의 분포(히스토그램)가 붙어 있습니다.
이를 통해:
kind='hex'
python
코드 복사
sns.jointplot(x='Age', y='YearsAtCompany', data=df, kind='hex')
kind='reg'
python
코드 복사
sns.jointplot(x='Age', y='YearsAtCompany', data=df, kind='reg')
height, ratio
height) 및 중앙과 마진 사이의 비율(ratio) 설정python
코드 복사
sns.jointplot(x='Age', y='YearsAtCompany', data=df, kind='scatter', height=8, ratio=3)
색상 테마
sns.set_style(), palette) 등을 세팅하면, 다양한 색상과 스타일로 시각화 가능MonthlyIncome vs. TotalWorkingYears 조합에서, 경력 연수가 늘어날수록 급여가 어떻게 바뀌는지 한눈에 확인JobSatisfaction vs. YearsAtCompany (단, 만족도가 범주형이라면 다른 시각화 방법 고려)lmplot 등을 고려해볼 수도 있음jointplot()은 두 변수 간의 관계와 분포를 동시에 시각화하여, 보다 풍부한 인사이트를 제공합니다. 나이와 근속 연수뿐만 아니라, 다른 숫자형 변수 쌍에도 적용해 보면 데이터에 대한 이해도가 크게 높아질 것입니다.
단, 실제 업무 환경에서는 두 변수 간 상관관계만으로 인과관계를 단정 지을 수 없으니, 도메인 지식이나 추가 분석이 겸해져야 한다고 생각한다.