테마
EDA 자동화
학습 목표
- EDA(Exploratory Data Analysis)의 의미와 중요성을 이해한다
- missingno로 결측치를 다양한 방식으로 시각화할 수 있다
- ydata-profiling(구 pandas-profiling)으로 자동화된 EDA 리포트를 생성할 수 있다
- 수동 EDA와 자동화 도구의 장단점을 비교할 수 있다
- 데이터 분석 프로젝트의 전체 워크플로우를 정리할 수 있다
전체 구조
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 msno2-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 → 70MB4. 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)로 결측 패턴의 연관성을 파악할 수 있다