Skip to main content

자동 EDA

자동 EDA 도구는 한 줄의 코드로 데이터의 분포, 상관관계, 결측치, 이상치를 종합적으로 분석하고 보고서를 생성합니다. 반복적인 EDA 작업을 효율화하고, 놓치기 쉬운 패턴을 자동으로 감지합니다.

학습 목표

  • ydata-profiling으로 종합 EDA 보고서를 생성할 수 있다
  • sweetviz로 데이터셋 비교 보고서를 만들 수 있다
  • dtale로 인터랙티브 데이터 탐색을 수행할 수 있다
  • 자동 EDA 도구의 한계를 이해하고 수동 분석과 적절히 조합할 수 있다

왜 중요한가

수십 개의 변수를 가진 데이터셋에서 모든 분포, 상관관계, 결측 패턴을 수동으로 분석하면 시간이 많이 걸립니다. 자동 EDA 도구로 빠르게 전체 그림을 파악한 뒤, 심층 분석이 필요한 부분에 집중할 수 있습니다.

ydata-profiling (구 pandas-profiling)

# 설치: pip install ydata-profiling
import pandas as pd
import numpy as np
from ydata_profiling import ProfileReport

np.random.seed(42)
df = pd.DataFrame({
    'salary': np.random.normal(4500, 800, 300),
    'experience': np.random.uniform(1, 20, 300),
    'performance': np.random.normal(75, 10, 300),
    'department': np.random.choice(['개발', '영업', '마케팅'], 300),
    'satisfaction': np.random.choice(['높음', '보통', '낮음'], 300)
})

# 일부 결측치 삽입
df.loc[np.random.choice(300, 15), 'salary'] = np.nan
df.loc[np.random.choice(300, 10), 'satisfaction'] = np.nan

# 보고서 생성
profile = ProfileReport(
    df,
    title="직원 데이터 EDA 보고서",
    explorative=True
)

# HTML 파일로 저장
profile.to_file("eda_report.html")

# Jupyter에서 인라인 표시
# profile.to_notebook_iframe()

ydata-profiling 보고서 구성

섹션포함 내용
Overview행/열 수, 결측치 비율, 중복 행, 메모리 사용량
Variables각 변수의 분포, 기술통계, 히스토그램
Interactions변수 쌍별 산점도
Correlations피어슨, 스피어만, 켄달, 파이 상관계수 행렬
Missing Values결측 패턴, 결측 매트릭스, 덴드로그램
Alerts높은 상관, 편향 분포, 높은 결측률 등 자동 감지

대용량 데이터 최적화

# 최소 모드: 대용량 데이터에서 빠르게 실행
profile_minimal = ProfileReport(
    df,
    title="빠른 EDA",
    minimal=True  # 상관분석, 상호작용 등 생략
)
profile_minimal.to_file("eda_minimal.html")

# 샘플링으로 속도 향상
profile_sample = ProfileReport(
    df.sample(n=1000, random_state=42),
    title="샘플 EDA"
)

sweetviz

sweetviz는 데이터셋 비교에 특화된 자동 EDA 도구입니다. 학습/테스트 데이터 분할이나 A/B 그룹 비교에 유용합니다.
# 설치: pip install sweetviz
import sweetviz as sv

# 단일 데이터셋 분석
report = sv.analyze(df, target_feat='salary')
report.show_html('sweetviz_report.html')

데이터셋 비교

# 학습/테스트 분할 비교
from sklearn.model_selection import train_test_split

train, test = train_test_split(df, test_size=0.2, random_state=42)

# 두 데이터셋 비교 보고서
compare_report = sv.compare(
    [train, "학습 데이터"],
    [test, "테스트 데이터"],
    target_feat='salary'
)
compare_report.show_html('sweetviz_compare.html')

그룹 내 비교

# 부서별 비교
compare_groups = sv.compare_intra(
    df,
    df['department'] == '개발',
    ['개발팀', '기타 부서'],
    target_feat='salary'
)
compare_groups.show_html('sweetviz_groups.html')

dtale

dtale은 인터랙티브 웹 UI로 데이터를 탐색할 수 있는 도구입니다.
# 설치: pip install dtale
import dtale

# 인터랙티브 UI 실행
d = dtale.show(df)

# 브라우저에서 자동 열림
# URL 직접 접근: d._url

# Jupyter 인라인 표시
# d.notebook()

dtale 주요 기능

기능설명
컬럼 필터링조건부 필터를 GUI로 적용
정렬컬럼 클릭으로 정렬
차트 빌더드래그 앤 드롭으로 차트 생성
상관 분석상관 매트릭스 인터랙티브 탐색
결측치 분석결측 패턴 시각화
코드 내보내기수행한 작업을 Python 코드로 내보내기

도구 비교

기능ydata-profilingsweetvizdtale
종합 보고서최고우수보통
데이터셋 비교제한적최고보통
인터랙티브 탐색제한적제한적최고
대용량 데이터느림보통빠름
결측 분석상세기본기본
코드 내보내기불가불가가능
학습 곡선낮음낮음중간
빠른 전체 파악에는 ydata-profiling, 데이터 분할 비교에는 sweetviz, 인터랙티브 탐색에는 dtale을 추천합니다. 세 도구를 상황에 맞게 조합하면 EDA 효율이 크게 향상됩니다.

자동 EDA의 한계

# 자동 EDA가 못하는 것들
limitations = {
    '도메인 해석': '숫자를 비즈니스 맥락에서 해석하는 것은 사람의 몫',
    '인과 추론': '상관관계를 인과관계로 해석하면 안 됨',
    '비정형 패턴': '복잡한 비선형 관계, 시간적 패턴 등은 수동 분석 필요',
    '데이터 수집 문제': '데이터가 왜 이렇게 생겼는지는 도구가 답할 수 없음',
    '피처 엔지니어링': '새로운 피처를 만드는 것은 창의적 과정'
}

for key, value in limitations.items():
    print(f"  {key}: {value}")

AI/ML에서의 활용

  • 빠른 데이터 탐색: 새 데이터셋을 받으면 ydata-profiling으로 첫 인상을 파악합니다
  • 학습/테스트 검증: sweetviz로 train/test 분포가 유사한지 확인합니다
  • 인터랙티브 분석: dtale로 비기술 팀원과 함께 데이터를 탐색합니다
  • 보고서 생성: 자동 생성된 HTML 보고서를 팀과 공유합니다
minimal=True 옵션으로 실행하거나, 데이터를 sample()로 줄여서 분석하세요. 10만 행 이상의 대용량 데이터에서는 전체 분석 대신 샘플링이 현실적입니다.
같은 도구입니다. pandas-profilingydata-profiling으로 이름이 변경되었습니다. pip install ydata-profiling으로 설치하고, from ydata_profiling import ProfileReport로 임포트합니다.

체크리스트

  • ydata-profiling으로 종합 EDA 보고서를 생성할 수 있다
  • sweetviz로 두 데이터셋을 비교할 수 있다
  • 자동 EDA 도구의 한계를 이해한다
  • 상황에 맞는 도구를 선택할 수 있다

다음 문서