보고서에서 결과 요약하기
핵심 인사이트를 시각화 참조와 실행 가능한 다음 단계를 포함한 구조화된 마크다운 요약으로 정리합니다.
보고서에서 결과 요약하기은(는) CoddyKit의 무료 Pandas & NumPy Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Pandas & NumPy Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
구조화된 EDA 보고서가 중요한 이유
수백 개의 그림과 코드 셀이 포함된 가공되지 않은 Jupyter 노트북은 결과를 바탕으로 조치를 취해야 하는 이해관계자와 공유하기 어렵습니다. 구조화된 EDA 요약 보고서는 일변량 및 이변량 분석 전체에서 얻은 가장 중요한 인사이트를 명확한 서술로 정리합니다. 좋은 보고서는 발견 사항(데이터가 보여 주는 내용)과 시사점(그에 따라 해야 할 일)을 구분하고, 핵심 주장에 대해서만 이를 뒷받침하는 시각화를 포함합니다.
EDA 보고서의 여섯 가지 구성
전문적인 EDA 보고서는 일반적으로 다음 여섯 가지 섹션으로 구성됩니다. 1) 데이터셋 개요(형태, 출처, 기간), 2) 데이터 품질 문제(결측값, 이상치, 중복 데이터 및 처리 방법), 3) 주요 변수 분포(가장 중요한 수치형 및 범주형 열), 4) 상관관계와 연관성(발견된 관계 중 강도가 가장 큰 것), 5) 하위 그룹 인사이트(비즈니스 질문과 관련된 그룹 차이), 6) 권장 다음 단계(정제 작업, 모델링 제안)입니다.
데이터셋 개요 섹션 작성
개요 섹션은 항상 정확하도록 프로그래밍 방식으로 생성해야 합니다. 형태, 열 이름과 자료형, 날짜 범위(해당하는 경우), 데이터셋의 출처 또는 버전을 기록합니다. 이 섹션을 설명문이 아니라 코드로 작성하면, 실제로는 9,800행으로 정제된 버전에서 생성된 보고서에 10,000행 데이터셋이라고 설명하는 흔한 오류를 방지할 수 있습니다.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
print('=== DATASET OVERVIEW ===')
print(f'Shape: {df.shape[0]:,} rows x {df.shape[1]} columns')
print(f'Columns: {", ".join(df.columns)}')
print(f'Numeric: {df.select_dtypes("number").shape[1]} columns')
print(f'Categorical: {df.select_dtypes("object").shape[1]} columns')
print(f'Boolean: {df.select_dtypes("bool").shape[1]} columns')
print(f'Total missing cells: {df.isna().sum().sum():,}')
print(f'Duplicate rows: {df.duplicated().sum()}')데이터 품질 섹션 작성
데이터 품질 섹션에는 발견된 모든 문제와 각 문제에 대해 내린 결정을 기록합니다. 다음 열을 포함하는 표 형식을 사용하세요: 열, 문제, 심각도(높음/중간/낮음), 수행한 조치. 데이터가 변경될 때 자동으로 업데이트되도록 프로파일링 결과에서 이 표를 프로그래밍 방식으로 계산하세요. 심각도는 비즈니스 영향에 따라 정해야 합니다. 목표 변수가 누락된 경우는 높음이고, 예측에 사용되지 않는 열이 누락된 경우는 낮음일 수 있습니다.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
# Auto-generate data quality table
missing_pct = (df.isna().sum() / len(df) * 100).round(1)
quality = missing_pct[missing_pct > 0].to_frame(name='missing_pct')
quality['severity'] = quality['missing_pct'].apply(
lambda x: 'High' if x > 30 else ('Medium' if x > 10 else 'Low')
)
quality['action'] = quality['missing_pct'].apply(
lambda x: 'Drop column' if x > 50 else 'Impute or flag'
)
print(quality.to_string())다중 패널 요약 그림 생성
요약 그림은 여러 그림을 하나의 이미지로 결합하여 보고서에 삽입할 수 있도록 합니다. plt.subplots(rows, cols)를 사용해 격자를 만들고, 각 주요 발견 사항에 자체 패널을 할당하세요. 출력 형식에 적합한 DPI로 savefig()를 사용해 그림을 저장합니다(화면용 150, 인쇄용 300). 패널 제목은 단순히 열 이름을 쓰기보다 '운임은 오른쪽으로 치우친 분포를 보임(왜도=4.1)'처럼 명확한 발견 사항을 서술하는 문장으로 작성하세요.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('titanic')
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
# 1. Fare distribution
sns.histplot(df['fare'], kde=True, bins=30, ax=axes[0][0])
axes[0][0].set_title('Fare is right-skewed (skew=4.1)')
# 2. Survival by class
survival = df.groupby('class')['survived'].mean().reset_index()
sns.barplot(data=survival, x='class',
y='survived', order=['First', 'Second', 'Third'], ax=axes[0][1])
axes[0][1].set_title('Survival Rate Drops by Class')
# 3. Age distribution
sns.histplot(df['age'].dropna(), kde=True, bins=25, ax=axes[1][0], color='coral')
axes[1][0].set_title('Age: Near-Normal, Missing 20%')
# 4. Embarkation counts
sns.countplot(data=df, x='embarked', ax=axes[1][1], palette='Set2')
axes[1][1].set_title('Most Boarded at Southampton')
plt.tight_layout()
plt.savefig('/tmp/eda_summary.png', dpi=150, bbox_inches='tight')
plt.show()
print('Saved: /tmp/eda_summary.png')발견 사항을 서술형 텍스트로 작성
각 주요 발견 사항은 기술적인 설명이 아니라 비즈니스와 관련된 문장으로 작성해야 합니다. '운임 열의 왜도는 4.1이다'라고 쓰는 대신, '티켓 가격은 오른쪽으로 극단적으로 치우쳐 있습니다. 소수의 1등석 승객이 중간 운임의 10배가 넘는 금액을 지불했으며, 이는 평균 가격을 사용하는 수익 분석을 왜곡할 수 있습니다.'라고 작성하세요. 통계적 관찰을 비즈니스 시사점으로 바꾸는 이러한 과정이 EDA 보고서를 비기술 이해관계자에게 유용하게 만듭니다.
프로그래밍 방식으로 마크다운 보고서 생성
Python에서 직접 마크다운 파일로 EDA 보고서를 작성할 수 있습니다. 마크다운 제목, 글머리 기호, 삽입된 이미지 링크가 포함된 문자열을 만든 다음 .md 파일에 작성하세요. 이 방식은 기반 데이터가 변경될 때 자동으로 업데이트되는 재현 가능한 보고서를 생성하므로, 데이터 파이프라인 출력 산출물이나 Git 저장소에 통합하기에 적합합니다.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
# Build a simple markdown report
lines = [
'# EDA Summary Report: Titanic Dataset',
'',
'## Overview',
f'- **Rows:** {len(df):,}',
f'- **Columns:** {df.shape[1]}',
f'- **Total Missing Cells:** {df.isna().sum().sum():,}',
'',
'## Key Findings',
'- First-class passengers had a 63% survival rate vs 24% for third class.',
'- Fare is extremely right-skewed (skew=4.1); use log transform before modelling.',
'- Age is missing in 20% of rows — median imputation recommended.',
'',
'## Recommended Next Steps',
'1. Impute age with median grouped by class.',
'2. Drop the cabin column (77% missing).',
'3. Log-transform fare before any regression modelling.',
]
with open('/tmp/eda_report.md', 'w') as f:
f.write('\n'.join(lines))
print('Report written to /tmp/eda_report.md')
print('\n'.join(lines[:10]))Jupyter로 HTML로 내보내기
Jupyter 노트북은 jupyter nbconvert --to html notebook.ipynb를 사용해 HTML 또는 PDF로 내보낼 수 있습니다. 이렇게 하면 모든 그림, 코드, 마크다운 셀이 하나의 공유 가능한 파일에 보존되며, 파일을 보기 위해 Python을 설치할 필요가 없습니다. 완전히 자동화된 파이프라인에서는 papermill을 사용해 노트북을 프로그래밍 방식으로 실행할 수 있습니다: papermill input.ipynb output.ipynb -p date '2024-01-01'. 이 명령은 노트북에 매개변수를 적용하고 스크립트처럼 실행합니다.
# To export a Jupyter notebook to HTML:
# jupyter nbconvert --to html eda_notebook.ipynb
# To parameterise and run with papermill:
# pip install papermill
# papermill eda_template.ipynb eda_2024.ipynb -p date '2024-01-01' -p min_rows 1000
# The output notebook can then be exported:
# jupyter nbconvert --to html eda_2024.ipynb
print('Jupyter nbconvert and papermill automate report generation.')실행 가능한 다음 단계 구조화
권장 다음 단계 섹션은 EDA 보고서에서 가장 많이 읽히는 부분인 경우가 많습니다. 우선순위가 지정된 체크리스트로 구성하세요. P1(차단)은 분석이 유효하려면 반드시 먼저 수정해야 하는 문제입니다(예: 잘못 식별된 자료형). P2(중요)는 모델 성능에 큰 영향을 미치는 정제 작업입니다(예: 이상치 처리). P3(있으면 좋음)은 추가로 탐색할 데이터 보강 아이디어와 데이터 출처입니다. 이렇게 구분하면 팀에서 적절하게 작업을 배분하기 쉽습니다.
신속한 보고를 위한 pandas-profiling 사용
ydata-profiling(pip install ydata-profiling)은 한 번의 호출로 종합적인 HTML 보고서를 생성합니다. 이 보고서에는 개요 통계, 변수 분포, 상관관계, 결측값 패턴, 중복 데이터 탐지가 포함되어 있어 수동으로 작성하는 EDA 보고서의 모든 섹션을 제공합니다. 프로젝트 초기의 신속한 탐색에 사용한 다음, 특정 비즈니스 질문과 가장 관련성이 높은 발견 사항을 강조하는 맞춤형 요약 보고서를 작성하세요.
# pip install ydata-profiling
# from ydata_profiling import ProfileReport
# import seaborn as sns
# df = sns.load_dataset('titanic')
# profile = ProfileReport(df, title='Titanic EDA')
# profile.to_file('titanic_eda.html') # interactive HTML
# profile.to_notebook_iframe() # inline in Jupyter
# Key sections in the generated report:
# - Overview: shape, missing, duplicates
# - Variables: per-column statistics and plots
# - Correlations: Pearson, Spearman, Cramers V
# - Missing values: heatmap and dendrogram
# - Duplicates: full list of duplicate rows
print('ydata-profiling generates full EDA reports with one function call.')피해야 할 EDA 보고서 안티 패턴
일반적인 EDA 보고서 안티 패턴은 다음과 같습니다. 모든 열의 모든 그림을 보여 주기(아무도 읽지 않는 50페이지짜리 보고서를 만들게 되므로 가장 중요한 5~10개를 선택해야 함), 해석 없이 사실만 제시하기( 'age에 결측값이 177개 있다' — 그래서 무엇을 해야 하나요?), 정제 후 보고서를 갱신하지 않기(데이터를 정제한 다음 프로파일링을 다시 실행해 문제가 해결되었는지 확인해야 함), 분석 코드에 정제 코드를 섞기(데이터 정제를 EDA 서술과 분리해야 함)입니다.
간단한 확인
이 단원에서 배운 EDA 보고서 작성에 대한 이해도를 확인해 보세요.
단원 요약
이 단원에서는 EDA 보고서를 여섯 가지 섹션(개요, 품질, 분포, 상관관계, 하위 그룹 인사이트, 다음 단계)으로 구성하고, 다중 패널 요약 그림과 마크다운 보고서를 프로그래밍 방식으로 생성하며, 통계적 발견 사항을 비즈니스와 관련된 표현으로 바꾸는 방법을 배웠습니다. 다음 단원에서는 고급 인덱싱 기법인 MultiIndex 생성과 Pandas의 계층적 선택을 살펴봅니다.
자주 묻는 질문
“보고서에서 결과 요약하기” 강의는 무료인가요?
네 — “보고서에서 결과 요약하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Pandas & NumPy Academy 강의 전체를 잠금 해제할 수 있습니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“보고서에서 결과 요약하기”에서 뭘 배우나요?
핵심 인사이트를 시각화 참조와 실행 가능한 다음 단계를 포함한 구조화된 마크다운 요약으로 정리합니다. 브라우저에서 직접 실행하는 실습 코드로 Pandas & NumPy Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Pandas & NumPy Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Pandas & NumPy Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“보고서에서 결과 요약하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Pandas & NumPy Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Pandas & NumPy Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 데이터 세트 프로파일링 점검표
- 단변량 분석
- 이변량 및 상관 분석
- 보고서에서 결과 요약하기