데이터 상관관계 한 눈에 파악하기 3 – Jointplot

Ryan·2025년 1월 14일

SQL/Python 분석

목록 보기
46/94

데이터 분석을 하다 보면 두 숫자형 변수가 서로 어떤 식으로 관계 맺고 있는지 궁금할 때가 많습니다. 이때 산점도(Scatter Plot)만 봐서는 한쪽 또는 양쪽 변수의 분포(Distribution)까지 확인하기가 까다로울 수 있는데요.

Seaborn의 jointplot()을 활용하면, 산점도와 함께 마진 히스토그램(또는 커널 밀도 곡선)을 결합해 두 변수 간 관계뿐 아니라 각 변수의 분포까지 한눈에 파악할 수 있습니다.


1. Jointplot이란?

  • Seaborn에서 제공하는 이중(2D) 시각화 도구
  • 중앙 영역: 두 변수 간 산점도(또는 다른 종류의 플롯)
  • 가장자리 영역(Marginal): 각 변수의 분포(히스토그램, KDE 등)를 표시
  • kind 파라미터에 따라 scatter, kde, hist, reg 등 다양한 방식으로 표현 가능

2. 코드 예시

아래 코드는 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()

코드 해설

  1. sns.jointplot(x=df['Age'], y=df['YearsAtCompany'], kind='scatter')
    • xy 파라미터로 각각 데이터를 지정
    • kind='scatter' → 중앙 영역에 산점도를, 주변부(마진)에 히스토그램을 표시
    • 다른 kindkde, hist, hex, reg 등을 지정할 수도 있음
  2. plt.suptitle()
    • Jointplot 자체가 Figure를 생성하므로, 메인 제목을 달 때는 plt.suptitle()을 사용하는 것이 편리
    • y=1.02로 약간 위로 띄워서 그래프와 겹치지 않도록 조정
  3. plt.show()
    • 최종 그래프 표시

3. 결과 해석

실행 결과, 중앙에는 Age-YearsAtCompany의 산점도가 나타나고, 왼쪽과 아래쪽에는 각각 Age, YearsAtCompany의 분포(히스토그램)가 붙어 있습니다.

이를 통해:

  1. 두 변수(나이, 근속 연수)의 관계: 산점도의 패턴이 우상향이라면, 대체로 나이가 많을수록 근속 연수가 길어지는 추세가 있음을 시사
  2. 각 변수의 단독 분포: 마진 히스토그램을 보면, 예를 들어 30대 초반이 가장 많은지, 근속 연수 3~5년에 해당하는 직원이 많은지 등을 한눈에 파악 가능

4. 추가 파라미터

  1. kind='hex'

    • 중앙 영역을 hexbin plot 형태로 나타냄 (데이터가 많을 때 유용)
    python
    코드 복사
    sns.jointplot(x='Age', y='YearsAtCompany', data=df, kind='hex')
    
  2. kind='reg'

    • 산점도회귀선, 그리고 주변부 분포 표시
    python
    코드 복사
    sns.jointplot(x='Age', y='YearsAtCompany', data=df, kind='reg')
    
  3. height, ratio

    • 그래프 전체 크기(height) 및 중앙과 마진 사이의 비율(ratio) 설정
    python
    코드 복사
    sns.jointplot(x='Age', y='YearsAtCompany', data=df, kind='scatter', height=8, ratio=3)
    
  4. 색상 테마

    • Seaborn의 테마(sns.set_style(), palette) 등을 세팅하면, 다양한 색상과 스타일로 시각화 가능

5. 활용 아이디어

  1. 급여 vs. 경력
    • 예: MonthlyIncome vs. TotalWorkingYears 조합에서, 경력 연수가 늘어날수록 급여가 어떻게 바뀌는지 한눈에 확인
  2. 만족도 vs. 근속 연수
    • 예: JobSatisfaction vs. YearsAtCompany (단, 만족도가 범주형이라면 다른 시각화 방법 고려)
  3. 둘 이상의 비교
    • Jointplot은 2차원만 표현 가능하므로, 세 번째 변수(예: 직급, 부서)는 색상(hue)로 처리하는 lmplot 등을 고려해볼 수도 있음
  4. 인사이트 도출
    • “나이가 많아도 근속 연수가 짧은 사례가 많은가?” 같은 특이점에 주목하면, 신규 입사자 중 중장년층 비율이 높은 지 등을 추론 가능

마무리

jointplot()두 변수 간의 관계와 분포를 동시에 시각화하여, 보다 풍부한 인사이트를 제공합니다. 나이와 근속 연수뿐만 아니라, 다른 숫자형 변수 쌍에도 적용해 보면 데이터에 대한 이해도가 크게 높아질 것입니다.

, 실제 업무 환경에서는 두 변수 간 상관관계만으로 인과관계를 단정 지을 수 없으니, 도메인 지식이나 추가 분석이 겸해져야 한다고 생각한다.

0개의 댓글