탐색적 데이터 분석 (EDA)
탐색적 데이터 분석(Exploratory Data Analysis)은 모델링에 앞서 데이터의 특성을 파악하고, 가설을 수립하며, 잠재적 문제를 발견하는 과정입니다.학습 목표
- pandas와 seaborn을 사용하여 체계적인 EDA를 수행할 수 있습니다.
- 수치형/범주형 변수의 분포를 시각화하고 해석할 수 있습니다.
- 변수 간 상관관계를 분석하고 다중공선성을 식별할 수 있습니다.
EDA 실습
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
# 데이터 로드
df = pd.read_csv("data/housing.csv")
# 기본 정보
print(f"데이터 크기: {df.shape}") # (행, 열)
print(f"\n데이터 타입:\n{df.dtypes}")
print(f"\n결측치:\n{df.isnull().sum()}")
print(f"\n기술통계:\n{df.describe()}")
# 처음 5행 확인
df.head()
# 회귀 문제: 타겟 변수의 분포
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
# 히스토그램
sns.histplot(df["price"], bins=50, kde=True, ax=axes[0])
axes[0].set_title("주택 가격 분포")
# 박스플롯 (이상치 확인)
sns.boxplot(y=df["price"], ax=axes[1])
axes[1].set_title("주택 가격 박스플롯")
plt.tight_layout()
plt.show()
# 왜도(Skewness)와 첨도(Kurtosis)
print(f"왜도: {df['price'].skew():.2f}") # 양수 = 오른쪽 꼬리
print(f"첨도: {df['price'].kurtosis():.2f}")
# 수치형 변수 분포 한번에 확인
numeric_cols = df.select_dtypes(include=[np.number]).columns
df[numeric_cols].hist(bins=30, figsize=(15, 10), layout=(3, 4))
plt.suptitle("수치형 변수 분포", y=1.02)
plt.tight_layout()
plt.show()
# 범주형 변수 빈도 확인
cat_cols = df.select_dtypes(include=["object", "category"]).columns
for col in cat_cols:
print(f"\n{col} 고유값 수: {df[col].nunique()}")
print(df[col].value_counts().head(10))
# 범주형 변수와 타겟의 관계
fig, axes = plt.subplots(1, len(cat_cols), figsize=(5*len(cat_cols), 4))
for i, col in enumerate(cat_cols):
ax = axes[i] if len(cat_cols) > 1 else axes
sns.boxplot(x=col, y="price", data=df, ax=ax)
ax.set_title(f"{col} vs 가격")
ax.tick_params(axis="x", rotation=45)
plt.tight_layout()
plt.show()
# 상관관계 히트맵
corr_matrix = df[numeric_cols].corr()
plt.figure(figsize=(10, 8))
sns.heatmap(
corr_matrix,
annot=True,
cmap="coolwarm",
center=0,
fmt=".2f",
square=True
)
plt.title("변수 간 상관관계")
plt.tight_layout()
plt.show()
# 타겟과의 상관관계 (절대값 기준 정렬)
target_corr = corr_matrix["price"].abs().sort_values(ascending=False)
print("타겟(price)과의 상관관계:")
print(target_corr)
EDA 체크리스트 템플릿
Q: EDA에 얼마나 시간을 투자해야 하나요?
Q: EDA에 얼마나 시간을 투자해야 하나요?
프로젝트 초기에 전체 시간의 10-20%를 EDA에 투자하는 것이 적절합니다. 너무 적으면 데이터 문제를 놓치고, 너무 많으면 모델링에 시간이 부족합니다. 핵심은 데이터의 구조와 문제점을 빠르게 파악하는 것입니다.
체크리스트
- pandas로 데이터 기본 정보를 확인할 수 있다
- seaborn으로 분포와 상관관계를 시각화할 수 있다
- 결측치와 이상치를 식별할 수 있다
- 타겟 변수와 특성 변수의 관계를 분석할 수 있다

