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