Skip to content

EDA 자동화


학습 목표

  1. EDA(Exploratory Data Analysis)의 의미와 중요성을 이해한다
  2. missingno로 결측치를 다양한 방식으로 시각화할 수 있다
  3. ydata-profiling(구 pandas-profiling)으로 자동화된 EDA 리포트를 생성할 수 있다
  4. 수동 EDA와 자동화 도구의 장단점을 비교할 수 있다
  5. 데이터 분석 프로젝트의 전체 워크플로우를 정리할 수 있다

전체 구조


1. EDA(탐색적 데이터 분석)란?

EDA는 데이터의 특성과 패턴을 파악하기 위해 다양한 방법으로 탐색하는 과정이다. 본격적인 분석이나 모델링에 들어가기 전에 대개 가장 먼저 해 보는 작업이라고 생각하면 된다.

수동 EDA 코드 요약

python
import pandas as pd

df = pd.read_csv("data/상가업소정보.csv", sep="|")

# 1. 기본 정보
print(df.shape)           # (573680, 39)
df.info()                 # 컬럼, 타입, 결측치, 메모리
df.describe()             # 수치형 기술통계
df.describe(include="object")  # 문자형 기술통계

# 2. 결측치 확인
df.isnull().sum()

# 3. 고유값 확인
df["상권업종대분류명"].unique()
df["상권업종대분류명"].nunique()
df["상권업종대분류명"].value_counts()

2. missingno - 결측치 전문 시각화

missingno는 결측치를 전문적으로 시각화하는 라이브러리다. 별도 설치가 필요하다.

python
# 설치
# pip install missingno
# conda install -c conda-forge missingno

import missingno as msno

2-1. matrix - 결측치 행렬

전체 데이터에서 결측치의 위치와 패턴을 한눈에 파악한다.

python
# 결측치 행렬 시각화
msno.matrix(df)
  • 검정색 영역: 데이터가 존재하는 부분
  • 하얀색 영역: 결측치 (NaN)
  • 오른쪽 스파크라인: 행별 데이터 완전성

2-2. bar - 결측치 막대 그래프

python
# 컬럼별 결측치 수를 막대 그래프로
msno.bar(df)

2-3. heatmap - 결측치 상관관계

결측치 간의 상관관계를 확인한다. 두 컬럼의 결측치가 함께 발생하는지 파악할 수 있다.

python
# 결측치 상관관계 히트맵
msno.heatmap(df)

2-4. dendrogram - 결측치 군집화

결측치 패턴이 유사한 컬럼을 군집화하여 트리 형태로 보여준다.

python
# 결측치 덴드로그램
msno.dendrogram(df)

3. 결측치 처리 전략

missingno로 결측치 현황을 파악한 후 적절한 처리 전략을 선택한다.

python
# 결측치가 많은 컬럼 확인 (정렬)
null_counts = df.isnull().sum().sort_values(ascending=False)
top_null = null_counts.head(9)

# 결측치 많은 컬럼 제거
not_use_cols = top_null.index
df = df.drop(not_use_cols, axis=1)

# 코드/번호 컬럼도 제거
code_cols = df.columns[df.columns.str.contains("코드|번호")]
df = df.drop(code_cols, axis=1)

# 메모리 변화 확인
df.info()  # 170MB → 70MB

4. ydata-profiling - 전자동 EDA 리포트

ydata-profiling은 DataFrame을 넣으면 전체 EDA 리포트를 자동으로 생성한다. 예전 이름은 pandas-profiling이었고, 현재 설치 패키지명은 ydata-profiling, import 경로는 ydata_profiling이다.

python
# 설치
# pip install -U ydata-profiling
# 노트북 렌더링 지원까지 함께 설치하려면:
# pip install -U "ydata-profiling[notebook]"

from ydata_profiling import ProfileReport

# 리포트 생성 (데이터가 크면 시간이 오래 걸림)
profile = ProfileReport(df, title="상가 업소 EDA 리포트",
                        minimal=True)  # minimal 모드로 빠르게

# 주피터 노트북에서 바로 보기
profile

# 또는 iframe 형태로 표시
profile.to_notebook_iframe()

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

ydata-profiling 리포트 구성

리포트에 포함되는 정보

섹션내용
Overview변수 수, 행 수, 결측치, 중복, 메모리
Variables각 변수의 분포, 통계, 빈도수
Interactions변수 쌍의 산점도
Correlations피어슨/스피어만 상관계수 히트맵
Missing Values결측치 매트릭스, 개수, 비율
Sample처음/마지막 데이터 미리보기

minimal 옵션

데이터가 클 때는 minimal=True로 설정하면 일부 계산을 건너뛰어 빠르게 생성한다.

python
# 빠른 리포트 (대용량 데이터에 권장)
profile = ProfileReport(df, minimal=True)

# 상세 리포트 (소규모 데이터에 적합)
profile = ProfileReport(df, explorative=True)

5. 수동 EDA vs 자동화 EDA 비교

특성수동 EDA자동화 EDA
속도느림빠름
유연성높음제한적
학습 효과높음보통
재현성코드에 따라 다름높음
적합한 상황심층 분석초기 탐색

권장 워크플로우: 자동화 도구로 전체 그림을 빠르게 파악한 후, 관심 있는 부분을 수동 EDA로 심층 분석한다.


6. 전체 데이터 분석 워크플로우


핵심 정리

  • EDA는 본격적인 분석 전에 데이터의 특성과 패턴을 파악하는 필수 과정이다
  • missingno: 결측치 전문 시각화 (matrix, bar, heatmap, dendrogram)
  • ydata-profiling: DataFrame을 넣으면 전체 EDA 리포트를 자동 생성한다
  • minimal=True 옵션으로 대용량 데이터에서도 빠르게 리포트를 생성한다
  • 불필요한 컬럼 제거로 메모리를 절약한다 (170MB -> 70MB 사례)
  • 자동화 EDA로 전체 파악 후, 수동 EDA로 심층 분석하는 것이 효율적이다
  • 결측치 상관관계(heatmap)로 결측 패턴의 연관성을 파악할 수 있다