변수 간 상관관계 분석을 위한 데이터 시각화 기법과 파이썬 구현

변수 간 관계 탐색을 위한 데이터 시각화 기법

데이터 분석 과정에서 변수 간의 상관관계와 분포를 직관적으로 이해하는 것은 모델링 및 인사이트 도출의 핵심입니다. 본 글에서는 파이썬의 seabornmatplotlib 라이브러리를 활용하여 다변량 데이터의 관계를 효과적으로 시각화하는 여섯 가지 주요 기법과 그 구현 방법을 다룹니다.

1. 산점도 (Scatter Plot)

핵심 개념: 두 연속형 변수의 분포와 관계를 2차원 평면에 점으로 매핑합니다. 데이터의 선형성, 비선형성, 군집 형태 및 이상치를 직관적으로 파악하는 데 최적화되어 있습니다.

활용 사례: 펭귄의 부리 길이와 너비 관계 분석, 마케팅 비용 대비 매출 전환율 탐색 등 초기 데이터 탐색(EDA) 단계.

import seaborn as sns
import matplotlib.pyplot as plt

# 데이터셋 로드 및 산점도 작성
penguin_df = sns.load_dataset("penguins")
fig, ax = plt.subplots(figsize=(8, 6))

sns.scatterplot(
    data=penguin_df, 
    x="bill_length_mm", 
    y="bill_depth_mm", 
    hue="species", 
    style="species",
    s=80,
    ax=ax
)

ax.set_title("Penguin Bill Dimensions by Species")
ax.set_xlabel("Bill Length (mm)")
ax.set_ylabel("Bill Depth (mm)")
plt.legend(bbox_to_anchor=(1.02, 1), loc='upper left', borderaxespad=0)
plt.tight_layout()
plt.show()

2. 버블 차트 (Bubble Plot)

핵심 개념: 산점도를 확장하여 세 번째 연속형 변수를 점의 크기(Size)로 매핑함으로써 다차원 정보를 단일 평면에 표현합니다.

활용 사례: 국가별 GDP, 기대수명, 인구수 동시 분석, 부동산 가격과 면적 및 층수 간 복합 관계 시각화.

import seaborn as sns
import matplotlib.pyplot as plt

penguin_df = sns.load_dataset("penguins")
plt.figure(figsize=(9, 6))

sns.scatterplot(
    data=penguin_df,
    x="bill_length_mm",
    y="flipper_length_mm",
    size="body_mass_g",
    hue="body_mass_g",
    sizes=(40, 400),
    palette="viridis",
    alpha=0.7
)

plt.title("Flipper Length vs Bill Length with Body Mass")
plt.xlabel("Bill Length (mm)")
plt.ylabel("Flipper Length (mm)")
plt.colorbar(label='Body Mass (g)', shrink=0.8)
plt.show()

3. 상관관계 행렬도 (Correlogram)

핵심 개념: 다수 수치형 변수 간의 피어슨 상관계수를 행렬 형태로 시각화합니다. 주로 상삼각행렬을 마스킹하여 중복 정보를 제거하고 연관성을 명확히 합니다.

활용 사례: 금융 자산 간 상관계수 분석, 다중 공선성(Multicollinearity) 진단을 위한 특성 선택.

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

penguin_df = sns.load_dataset("penguins").select_dtypes(include=[np.number])
correlation_matrix = penguin_df.corr()

# 상삼각행렬 마스킹 처리
mask = np.triu(np.ones_like(correlation_matrix, dtype=bool))

plt.figure(figsize=(8, 6))
sns.heatmap(
    correlation_matrix, 
    mask=mask, 
    cmap="mako", 
    vmax=1.0, 
    vmin=-1.0, 
    center=0,
    annot=True, 
    fmt=".2f",
    square=True,
    linewidths=0.5
)
plt.title("Penguin Features Correlation Matrix")
plt.show()

4. 히트맵 (Heatmap)

핵심 개념: 2차원 매트릭스 데이터의 수치 크기를 색상 명암으로 인코딩합니다. 시계열 데이터의 주기적 패턴이나 고밀도 데이터의 분포를 파악하는 데 유용합니다.

활용 사례: 월별/연도별 항공기 탑승객 추이 분석, 요일 및 시간대별 웹사이트 트래픽 패턴 시각화.

import seaborn as sns
import matplotlib.pyplot as plt

flight_records = sns.load_dataset("flights")
passenger_grid = flight_records.pivot_table(
    index="month", 
    columns="year", 
    values="passengers"
)

plt.figure(figsize=(12, 8))
sns.heatmap(
    passenger_grid, 
    cmap="YlGnBu", 
    linewidths=1.5, 
    linecolor='white',
    cbar_kws={"label": "Passenger Count", "shrink": 0.85}
)
plt.title("Monthly Flight Passenger Trends (1949-1960)")
plt.ylabel("Month")
plt.xlabel("Year")
plt.xticks(rotation=0)
plt.show()

5. 2차원 밀도 그래프 (2D Density Plot)

핵심 개념: 핵 밀도 추정(KDE)을 통해 두 변수의 결합 확률 분포를 등고선이나 색상 그라데이션으로 표현합니다. 데이터 포인트가 과도하게 겹치는 오버플로팅(Overplotting) 문제를 해결합니다.

활용 사례: 대規模 사용자 클릭 스트림 데이터의 핫스팟 식별, 지리적 좌표 데이터의 밀집 지역 분석.

import seaborn as sns
import matplotlib.pyplot as plt

mpg_data = sns.load_dataset("mpg")
plt.figure(figsize=(8, 6))

sns.kdeplot(
    data=mpg_data,
    x="horsepower",
    y="mpg",
    fill=True,
    thresh=0.05,
    levels=15,
    cmap="magma",
    common_norm=False
)
plt.title("Joint Density of Horsepower and Fuel Efficiency")
plt.xlabel("Horsepower")
plt.ylabel("Miles Per Gallon (MPG)")
plt.show()

6. 선형 회귀 그래프 (Regression Plot)

핵심 개념: 산점도 위에 최적의 선형 회귀선과 신뢰 구간(Confidence Interval)을 중첩하여 변수 간의 인과적 추세와 통계적 불확실성을 정량적으로 평가합니다.

활용 사례: 과학 실험 결과의 경향성 검증, 차량 무게와 연비 간의 음의 상관관계 통계적 확인.

import seaborn as sns
import matplotlib.pyplot as plt

mpg_data = sns.load_dataset("mpg")
plt.figure(figsize=(8, 6))

sns.regplot(
    data=mpg_data,
    x="weight",
    y="mpg",
    scatter_kws={"alpha": 0.5, "color": "teal", "edgecolor": "w"},
    line_kws={"color": "crimson", "linewidth": 2.5},
    ci=99
)
plt.title("Regression Analysis: Vehicle Weight vs Fuel Efficiency")
plt.xlabel("Vehicle Weight (lbs)")
plt.ylabel("Miles Per Gallon (MPG)")
plt.grid(True, linestyle='--', alpha=0.4)
plt.show()

7. 시각화 기법 비교 요약

차트 유형 주요 특징 주요 활용 분야 핵심 라이브러리
산점도 두 연속형 변수의 관계를 점으로 표현. 범주형 변수를 색상/모양으로 매핑 가능. 초기 데이터 탐색, 이상치 탐지, 비선형 관계 식별. matplotlib, seaborn
버블 차트 점의 크기를 활용해 세 번째 연속형 변수를 추가한 다차원 산점도. 3개 이상의 변수 간 복합적 상관관계 분석. seaborn, plotly
상관관계 행렬도 다변량 상관계수를 행렬과 색상으로 동시 표현. 마스킹 기법 활용. 특성 공학(Feature Engineering), 다중 공선성 검토. seaborn, pandas
히트맵 2차원 매트릭스 수치를 색상 명암으로 인코딩. 시계열 패턴 분석, 혼동 행렬(Confusion Matrix) 시각화. seaborn, matplotlib
2차원 밀도 그래프 결합 확률 밀도를 등고선/그라데이션으로 추정하여 오버플로팅 방지. 대규모 데이터셋의 분포 밀집 구역(핫스팟) 파악. seaborn (kdeplot)
선형 회귀 그래프 회귀 적합선과 신뢰 구간을 산점도에 중첩하여 추세선 제공. 변수 간 선형성 검증, 예측 모델의 시각적 평가. seaborn, statsmodels

태그: Seaborn matplotlib python data-visualization correlation-analysis

7월 28일 20:59에 게시됨