
2026.04.23 / 동준상.넥스트플랫폼
(AWS SAA, AWS AIF, GCP GenAI Leader)
Practical Data Visualization and Analytics Automation Using AI, Colab, and Sheets
이번 과정은 GPT·Gemini·Claude·Perplexity 등 최신 LLM의 기능을 데이터 분석과 리서치 자동화 관점에서 실무적으로 다룹니다.
- 반도체/전자/전기 산업 데이터세트, KOTRA 등 공공데이터를 활용하여 AI 기반 탐색적 분석(EDA)과 시각화, 인사이트 리포트 작성 자동화 방법을 실무적으로 이해합니다.
- 망분리 환경에서도 재현 가능한 로컬 중심 실습으로, 공공기관 실무자들이 AI 리서치 역량을 체계적으로 확장할 수 있도록 설계됐습니다.
과정 정보
- 총 시간: 7시간 (420분)
- 대상: AI 데이터 분석 입문자 ~ 중급자
- 사용 도구: ChatGPT / Claude / Gemini (프리 티어), Microsoft Excel, Google Colab
- 실습 데이터: 반도체/전자/전기 산업 데이터세트, KOTRA 무역 데이터, 공공데이터포털 공개 데이터셋
최신 AI 도구와 파이썬, 그리고 엑셀(구글 시트) 기반의 데이터 분석 핸즈온 워크북
| 구분 | 내용 | 시간 |
|---|---|---|
| 오리엔테이션 | 도구 세팅 & 과정 소개 | 30분 |
| 프로젝트 1 | AI 프롬프트로 데이터 탐색하기 | 60분 |
| 프로젝트 2 | Google Colab EDA 자동화 | 75분 |
| 프로젝트 3 | AI 기반 데이터 정제 & 전처리 | 60분 |
| 프로젝트 4 | 데이터 시각화 자동화 | 75분 |
| 프로젝트 5 | 비교 분석 인사이트 리포트 생성 | 60분 |
| 프로젝트 6 | 전체 분석 파이프라인 구성 | 45분 |
| 마무리 | Q&A 및 응용 전략 공유 | 15분 |
교재 다운로드 | AI, Colab, Sheets를 활용한 데이터 시각화, 분석 자동화 실무 핸즈온 워크북 (24p)
https://docs.google.com/document/d/1Egl1T5c-VamC_9lhjsJ7qU8UNgSKFAXq/edit?usp=sharing&ouid=110463242023753115548&rtpof=true&sd=true
반도체/전자/전기 산업별 추천 데이터셋
| 데이터셋 | 산업 | 난이도 | 행 수 | 추천 프로젝트 |
|---|---|---|---|---|
| ETD 식각 공정 | 반도체 | ★★ | ~수천 | P-1, P-4 |
| KEPCO 전력 | 전기 | ★★ | 수만 | P-1, P-5 |
| AI4I 예측 정비 | 전자 | ★★ | 10,000 | P-2~P-6 전체 |
| SECOM | 반도체 | ★★★ | 1,567 | P-2, P-3 |
| PCB 결함 | 전자 | ★★★ | 이미지 | P-4 확장 |
Awesome Public Industrial Datasets
https://github.com/makinarocks/awesome-industrial-machine-datasets

반도체 제조
1. SECOM 반도체 공정 불량 예측 데이터셋 UCI Machine Learning Repository에서 제공하는 클래식 데이터셋입니다. 실제 반도체 제조 공정에서 수집된 590개 센서 피처와 1,567개 샘플로 구성되어 있으며, 불량(Fail) 판별이 목표입니다. 결측값이 매우 많고 극심한 클래스 불균형(불량률 약 6%)이 있어 데이터 정제·전처리 실습에 최적입니다.
- 출처: https://archive.ics.uci.edu/dataset/179/secom
- 파일 형식: CSV
- 실습 포인트: 결측값 처리, 이상값 탐지, 불균형 데이터 처리, 피처 선택
2. APC/FDC 공정 제어 시뮬레이션 데이터 (ETD — Etching Tool Dataset) Kaggle에서 공개된 반도체 식각(Etching) 공정 Tool별 파라미터 데이터입니다. 가스 유량, 압력, 온도, RF 파워 등 실제 장비 센서값이 포함되어 있어 공정 엔지니어들이 즉각 공감합니다.
- 출처: https://kaggle.com/datasets (검색어: semiconductor etching process)
- 대안: https://www.kaggle.com/code/manavpatel571/wafer-fault-prediction (Wafer fault Prediction)
- 실습 포인트: 시계열 분석, 공정 파라미터 상관관계, Plotly 멀티라인 차트
3. SEMI 표준 장비 가동률 공개 통계 (OECD + SEMI) SEMI(국제반도체장비재료협회)와 OECD가 공개하는 국가별·품목별 반도체 장비 출하 통계입니다. 교재의 KOTRA 무역 데이터 분석 흐름을 그대로 반도체 장비 시장 분석으로 전환할 수 있어 연속성이 좋습니다.
- 출처: https://semi.org/en/products-services/market-data (일부 무료), https://kosis.kr (한국 통계청)
- 실습 포인트: 시장 트렌드 분석, DeepResearch 프롬프트 실습
전기·전력
4. UCI 전기 부하 예측 데이터셋 (Individual Household Electric Power Consumption) 프랑스 가정에서 4년간(2006~2010) 수집한 분 단위 전력 소비 데이터입니다. 200만 행 이상의 대용량 시계열 데이터라 pandas 성능 최적화까지 함께 실습할 수 있습니다.
- 출처: https://archive.ics.uci.edu/dataset/235/individual+household+electric+power+consumption
- 파일 형식: CSV (약 127MB)
- 실습 포인트: 시계열 리샘플링, 피크 부하 탐지, 계절성 분해, 대용량 데이터 처리
5. 한국전력 KEPCO 전력 거래량 공개 데이터 전력거래소(KPX)와 한국전력이 공개하는 시간대별 전력 수요·공급·SMP 데이터입니다. 국내 연구원들에게 가장 친숙한 맥락이며, API로도 실시간 수집이 가능합니다.
- 출처: https://epsis.kpx.or.kr, https://data.go.kr (공공데이터포털 → “전력거래소” 검색)
- 실습 포인트: 공공데이터 API 연동, 피크 타임 분석, 비용 최적화 시뮬레이션
6. 모터/베어링 고장 예측 데이터셋 (CWRU Bearing Dataset) 케이스웨스턴리저브 대학교에서 공개한 전동기 베어링 진동 신호 데이터입니다. 전기 모터를 다루는 제조 현장 연구원들에게 매우 실용적이며, 주파수 도메인 분석까지 확장 가능합니다.
- 출처: https://engineering.case.edu/bearingdatacenter
- 파일 형식: MATLAB .mat → Python으로 변환 가능
- 실습 포인트: 신호 처리, FFT 스펙트럼 시각화, 이상 탐지
전자·품질관리
7. PCB 결함 탐지 데이터셋 (Open PCB Defect Dataset) 인쇄회로기판(PCB) 표면 결함 이미지 및 결함 유형 레이블 데이터입니다. 텍스트 데이터 분석을 넘어 이미지 기반 품질 검사 AI로 확장하는 데모로 활용할 수 있습니다.
- 출처: https://github.com/Charmve/Surface-Defect-Detection (HRIPCB 데이터셋 포함)
- 실습 포인트: 결함 유형별 빈도 분석, 인포그래픽 생성, AI 이미지 분석 데모
8. AI4I 2020 예측 정비 데이터셋 (Predictive Maintenance) UCI에서 제공하는 산업용 장비 예측 정비 합성 데이터셋입니다. 온도, 회전속도, 토크, 공구 마모도 등 5개 피처와 5가지 고장 유형이 레이블되어 있어 데이터 분석 과정의 End-to-End 실습에 딱 맞습니다.
- 출처: https://archive.ics.uci.edu/dataset/601/ai4i+2020+predictive+maintenance+dataset
- 파일 형식: CSV (10,000행, 14개 컬럼)
- 실습 포인트: EDA → 정제 → 시각화 → 분류 분석 전 과정 실습
오리엔테이션 (30분)
학습 목표
이 과정에서는 AI 서비스와 Excel, Python(Google Colab)을 결합해 데이터 분석 업무를 실질적으로 자동화하는 방법을 익힌다. 코딩 경험이 없어도 AI 프롬프트를 통해 탐색적 데이터 분석(EDA), 시각화, 인사이트 도출까지 완성할 수 있다.
핵심 개념 요약
LLM 3대 기능 (교재 5페이지 참고)
- Agent: 목표를 인식하고 작업 순서를 자동으로 계획·실행
- MCP: 외부 데이터(파일, DB, API)와 LLM을 안전하게 연결
- GPTs/Claude Projects: 특정 분석 목적에 맞춰 사전 구성된 맞춤형 모델
AI 데이터 분석의 기본 흐름
데이터 수집 → 탐색(EDA) → 정제 → 시각화 → 인사이트 도출 → 리포트
환경 세팅 체크리스트
□ AI 서비스 계정 준비
- ChatGPT (chat.openai.com) 또는
- Claude (claude.ai) 또는
- Gemini (gemini.google.com)
※ 프리 티어 계정으로 모든 실습 가능
□ Google 계정 (Google Colab 접속용)
- colab.research.google.com 접속 확인
□ Microsoft Excel 또는 Google Sheets
□ 실습 데이터 다운로드
- 강사 제공 USB 또는 구글 드라이브 링크
- 파일명: kotra_trade_sample.csv
- 파일명: public_data_sample.csv
프리 티어 AI 활용 팁
ChatGPT, Claude, Gemini 모두 프리 티어에서 파일 업로드, 코드 실행, 데이터 분석 기능을 제공한다. 단, 하루 사용 한도가 있으므로 다음 전략을 권장한다.
- 중요한 프롬프트는 미리 텍스트 파일에 작성해 두었다가 붙여넣기
- 대화가 길어지면 새 대화창에서 시작 (컨텍스트 한도 초과 방지)
- 세 가지 AI를 번갈아 사용하면 한도 걱정 없이 실습 가능
- 코드 생성은 Google Colab에서 직접 실행하므로 AI 한도와 무관
프로젝트 1: AI 프롬프트로 데이터 탐색하기 (60분)
학습 목표
- AI에게 CSV 파일을 업로드해 자동 요약을 받는다
- 프롬프트 구조를 이해하고 데이터 질문을 설계한다
- LLM별 응답 차이(ChatGPT vs Claude vs Gemini)를 체험한다
사용 데이터
kotra_trade_sample.csv — 국가별 수출입 통계 (연도, 국가명, 수출금액, 수입금액, 품목, 증감률)
STEP 1-1: AI에 파일 업로드하고 첫 탐색 요청 (10분)
실습 방법
- ChatGPT (또는 Claude / Gemini) 접속
- 파일 첨부 버튼 클릭 →
kotra_trade_sample.csv업로드 - 아래 프롬프트 입력
기본 탐색 프롬프트
이 CSV 파일을 업로드했습니다. 다음 순서로 분석해 주세요.
1. 데이터 기본 정보: 행 수, 열 수, 각 열의 데이터 타입
2. 주요 수치형 컬럼의 기초 통계 (평균, 최솟값, 최댓값, 중앙값)
3. 결측값(빈 값)이 있는 컬럼과 그 비율
4. 데이터에서 즉시 눈에 띄는 특이사항 2~3가지
결과는 표 형태로 정리해 주세요.
실습 결과 기록란
AI 서비스: _____________
행 수: _______ 열 수: _______
결측값 있는 컬럼: _______________________
특이사항:
1. ________________________________
2. ________________________________
3. ________________________________
STEP 1-2: 목적 중심 질문으로 심화 탐색 (15분)
단순 요약을 넘어 “비즈니스 질문”으로 프롬프트를 설계하는 것이 핵심이다.
심화 탐색 프롬프트 3종
[프롬프트 A - 순위 분석]
최근 3년간 수출금액 기준 상위 10개 국가를 표로 보여주세요.
각 국가의 연도별 성장률도 함께 계산해 주세요.
[프롬프트 B - 이상값 탐지]
수출 증감률이 비정상적으로 높거나 낮은 국가(상위 5%, 하위 5%)를
찾아서 나열하고, 가능한 원인을 추론해 주세요.
[프롬프트C - 패턴 분석]
품목별로 그룹화해서 각 품목의 총 수출금액과
연평균 성장률(CAGR)을 계산해 표로 보여주세요.
패턴–이유–영향 3단 인사이트 구조 (교재 25페이지 참고)
[프롬프트 D - 구조화 인사이트]
위 분석 결과를 바탕으로 다음 3단 구조로 요약해 주세요.
1. 패턴: 데이터에서 발견된 주요 경향
2. 이유: 그 경향이 나타난 가능한 원인
3. 영향: 비즈니스/정책적 시사점
STEP 1-3: LLM별 응답 비교 (10분)
동일한 프롬프트를 두 가지 AI에 입력하고 응답을 비교한다.
비교 프롬프트
이 데이터에서 가장 주목해야 할 무역 트렌드 3가지를
각각 2~3문장으로 설명해 주세요.
수치 근거를 반드시 포함해 주세요.
LLM별 응답 특성 비교표 (교재 12페이지, 30페이지 참고)
| 특성 | ChatGPT | Claude | Gemini |
|---|---|---|---|
| 강점 | 수치·통계 중심 분석 | 인과관계·서술형 해석 | 실시간 검색 결합 |
| 응답 스타일 | 분석형, 표 중심 | 서술형, 원인 설명 | 최신 정보 보완 |
| 파일 분석 | ✅ Advanced Data Analysis | ✅ 파일 업로드 | ✅ 파일 업로드 |
| 코드 생성 | ✅ 우수 | ✅ 우수 | ✅ 우수 |
실습 결과 기록
ChatGPT 주요 발견:
________________________________
Claude 주요 발견:
________________________________
두 응답의 가장 큰 차이점:
________________________________
STEP 1-4: Excel에서 AI 생성 공식 활용 (15분)
AI에게 Excel 수식을 생성하도록 요청한 후, 실제 Excel에 적용한다.
Excel 수식 생성 프롬프트
Excel에서 다음 계산을 수행하는 수식을 작성해 주세요.
데이터 구조:
- A열: 연도 (2021, 2022, 2023, 2024)
- B열: 국가명
- C열: 수출금액 (억 달러)
- D열: 수입금액 (억 달러)
필요한 수식:
1. 무역수지(수출-수입)를 E열에 계산
2. 전년 대비 수출 증감률을 F열에 계산 (첫 연도는 제외)
3. 국가별 4년 평균 수출금액 — AVERAGEIF 사용
4. 수출금액 상위 5개 국가만 필터링하는 조건 — LARGE 함수 활용
각 수식에 한국어로 설명을 달아 주세요.
적용 실습
- Excel에서
kotra_trade_sample.csv열기 - AI가 생성한 수식을 해당 셀에 입력
- 결과가 맞는지 확인
💡 프리 티어 활용 팁: Excel 내 Copilot이 없어도 ChatGPT/Claude에서 수식을 받아 복사·붙여넣기 하면 동일한 효과를 낼 수 있다.
STEP 1-5: 미니 회고 (5분)
Q1. AI 프롬프트로 가장 유용하게 얻은 정보는?
→
Q2. AI 응답에서 검증이 필요해 보인 부분은?
→
Q3. 내 업무에 바로 적용할 수 있는 것은?
→
프로젝트 2: Google Colab EDA 자동화 (75분)
학습 목표
- Google Colab 환경을 처음 설정한다
- AI가 생성한 Python 코드로 EDA를 완전 자동화한다
- pandas, matplotlib, seaborn을 코드 없이 활용하는 방법을 익힌다
사용 데이터
kotra_trade_sample.csv (프로젝트 1과 동일)
STEP 2-1: Google Colab 환경 세팅 (10분)
접속 및 노트북 생성
- colab.research.google.com 접속
새 노트북클릭- 제목 변경:
AI_EDA_실습_[이름]
파일 업로드
# 셀에 아래 코드 입력 후 실행 (Shift + Enter)
from google.colab import files
uploaded = files.upload()
# 파일 선택 창에서 kotra_trade_sample.csv 업로드
기본 라이브러리 설치 확인
# Colab에는 기본 설치되어 있지만 버전 확인
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
print("pandas:", pd.__version__)
print("matplotlib:", plt.matplotlib.__version__)
print("seaborn:", sns.__version__)
# 한글 폰트 설정
!apt-get install -y fonts-nanum > /dev/null 2>&1
import matplotlib.font_manager as fm
font_path = '/usr/share/fonts/truetype/nanum/NanumGothic.ttf'
fm.fontManager.addfont(font_path)
plt.rcParams['font.family'] = 'NanumGothic'
plt.rcParams['axes.unicode_minus'] = False
print("✅ 한글 폰트 설정 완료")
STEP 2-2: AI가 생성한 EDA 코드 실행 (25분)
아래 프롬프트를 AI에 입력하면 Google Colab에서 바로 실행 가능한 코드를 받을 수 있다.
EDA 자동화 코드 생성 프롬프트
Google Colab에서 실행할 Python EDA 코드를 작성해 주세요.
데이터 파일명: kotra_trade_sample.csv
컬럼: 연도, 국가명, 수출금액, 수입금액, 품목, 증감률
다음 순서로 완전한 EDA 코드를 작성해 주세요:
1. 데이터 로드 및 기본 정보 출력
- shape, dtypes, head(), info(), describe()
2. 결측값 분석
- 컬럼별 결측값 수와 비율을 표로 출력
- 히트맵으로 시각화
3. 수치형 변수 분포 분석
- 수출금액, 수입금액 히스토그램
- 박스플롯으로 이상값 시각화
4. 카테고리형 변수 분석
- 국가별 수출금액 상위 10개 막대그래프
- 품목별 수출금액 파이 차트
5. 시계열 분석
- 연도별 총 수출금액 추세선 그래프
6. 상관관계 분석
- 수출금액과 수입금액 상관계수 계산
- 산점도 + 회귀선 시각화
각 섹션마다 한국어 주석을 달아 주세요.
한글이 깨지지 않도록 NanumGothic 폰트를 적용해 주세요.
AI 생성 코드 템플릿 (직접 활용 가능)
# ============================================
# 섹션 1: 데이터 로드 및 기본 정보
# ============================================
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 한글 폰트 설정
plt.rcParams['font.family'] = 'NanumGothic'
plt.rcParams['axes.unicode_minus'] = False
# 데이터 로드
df = pd.read_csv('kotra_trade_sample.csv', encoding='utf-8-sig')
print("=" * 50)
print("📊 데이터 기본 정보")
print("=" * 50)
print(f"행 수: {df.shape[0]:,} | 열 수: {df.shape[1]}")
print("\n[컬럼 목록 및 데이터 타입]")
print(df.dtypes)
print("\n[처음 5행 미리보기]")
display(df.head())
print("\n[기초 통계량]")
display(df.describe())
# ============================================
# 섹션 2: 결측값 분석
# ============================================
print("\n[결측값 분석]")
missing = pd.DataFrame({
'결측값 수': df.isnull().sum(),
'결측 비율(%)': (df.isnull().sum() / len(df) * 100).round(2)
})
display(missing[missing['결측값 수'] > 0])
# 결측값 히트맵
fig, ax = plt.subplots(figsize=(10, 4))
sns.heatmap(df.isnull(), cbar=True, yticklabels=False,
cmap='viridis', ax=ax)
ax.set_title('결측값 분포 히트맵', fontsize=14, pad=12)
plt.tight_layout()
plt.show()
# ============================================
# 섹션 3: 수치형 변수 분포 분석
# ============================================
numeric_cols = df.select_dtypes(include=[np.number]).columns.tolist()
fig, axes = plt.subplots(2, len(numeric_cols),
figsize=(6 * len(numeric_cols), 8))
if len(numeric_cols) == 1:
axes = axes.reshape(2, 1)
for i, col in enumerate(numeric_cols):
# 히스토그램
axes[0, i].hist(df[col].dropna(), bins=30,
color='steelblue', edgecolor='white', alpha=0.8)
axes[0, i].set_title(f'{col} 분포', fontsize=12)
axes[0, i].set_xlabel(col)
axes[0, i].set_ylabel('빈도')
# 박스플롯
axes[1, i].boxplot(df[col].dropna(), patch_artist=True,
boxprops=dict(facecolor='lightblue'))
axes[1, i].set_title(f'{col} 박스플롯', fontsize=12)
axes[1, i].set_xlabel(col)
plt.suptitle('수치형 변수 분포 분석', fontsize=15, y=1.02)
plt.tight_layout()
plt.show()
# ============================================
# 섹션 4: 국가별·품목별 분석
# ============================================
# 국가별 총 수출금액 TOP 10
top10_countries = (df.groupby('국가명')['수출금액']
.sum()
.nlargest(10)
.reset_index())
fig, axes = plt.subplots(1, 2, figsize=(16, 6))
# 막대그래프 - TOP 10 국가
bars = axes[0].barh(top10_countries['국가명'],
top10_countries['수출금액'],
color=sns.color_palette('Blues_r', 10))
axes[0].set_title('수출금액 상위 10개국', fontsize=13)
axes[0].set_xlabel('수출금액 (억 달러)')
axes[0].invert_yaxis() # 1위가 위에 오도록
# 파이차트 - 품목별 비중
item_share = df.groupby('품목')['수출금액'].sum()
axes[1].pie(item_share.values,
labels=item_share.index,
autopct='%1.1f%%',
startangle=90,
colors=sns.color_palette('Set3'))
axes[1].set_title('품목별 수출 비중', fontsize=13)
plt.tight_layout()
plt.show()
# ============================================
# 섹션 5: 연도별 시계열 추세
# ============================================
yearly = df.groupby('연도').agg({
'수출금액': 'sum',
'수입금액': 'sum'
}).reset_index()
yearly['무역수지'] = yearly['수출금액'] - yearly['수입금액']
fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(yearly['연도'], yearly['수출금액'],
marker='o', label='수출금액', linewidth=2, color='steelblue')
ax.plot(yearly['연도'], yearly['수입금액'],
marker='s', label='수입금액', linewidth=2, color='tomato')
ax.fill_between(yearly['연도'], yearly['수출금액'], yearly['수입금액'],
alpha=0.1, color='green', label='무역수지')
ax.set_title('연도별 수출입 추세', fontsize=14)
ax.set_xlabel('연도')
ax.set_ylabel('금액 (억 달러)')
ax.legend()
ax.grid(alpha=0.3)
plt.tight_layout()
plt.show()
# 수치 출력
print("\n[연도별 수출입 요약]")
display(yearly)
# ============================================
# 섹션 6: 상관관계 분석
# ============================================
corr_value = df['수출금액'].corr(df['수입금액'])
print(f"\n수출금액 ↔ 수입금액 상관계수: {corr_value:.4f}")
fig, ax = plt.subplots(figsize=(8, 6))
ax.scatter(df['수출금액'], df['수입금액'],
alpha=0.5, color='steelblue', s=30)
# 회귀선 추가
z = np.polyfit(df['수출금액'].dropna(),
df['수입금액'].dropna(), 1)
p = np.poly1d(z)
x_line = np.linspace(df['수출금액'].min(), df['수출금액'].max(), 100)
ax.plot(x_line, p(x_line), 'r--', linewidth=2, label='회귀선')
ax.set_title(f'수출금액 vs 수입금액 (상관계수: {corr_value:.3f})',
fontsize=13)
ax.set_xlabel('수출금액')
ax.set_ylabel('수입금액')
ax.legend()
ax.grid(alpha=0.3)
plt.tight_layout()
plt.show()
STEP 2-3: AI에게 코드 해석 요청 (15분)
코드를 직접 이해하지 않아도, AI에게 결과 해석을 요청하면 된다.
해석 요청 프롬프트
방금 Python EDA 코드를 실행했습니다.
아래 결과를 보고 비즈니스 관점에서 해석해 주세요.
[결과 붙여넣기]
- 상관계수: 0.87
- 수출 TOP 3 국가: 미국, 중국, 베트남
- 연도별 수출금액: 2021년 850억, 2022년 920억, 2023년 880억, 2024년 1050억
- 품목별 1위: 반도체 (38%)
다음 3가지를 포함해서 설명해 주세요:
1. 가장 중요한 발견 2가지
2. 추가로 탐색이 필요한 질문 2가지
3. 의사결정자에게 전달할 핵심 메시지 1문장
실습 결과 기록
AI가 도출한 가장 중요한 발견:
1. ________________________________
2. ________________________________
추가 탐색 질문:
1. ________________________________
2. ________________________________
핵심 메시지 1문장:
________________________________
STEP 2-4: ydata-profiling으로 원클릭 EDA (15분)
ydata-profiling은 한 줄의 코드로 완전한 EDA 보고서를 생성하는 라이브러리다.
# 설치
!pip install ydata-profiling -q
from ydata_profiling import ProfileReport
import pandas as pd
df = pd.read_csv('kotra_trade_sample.csv', encoding='utf-8-sig')
# EDA 보고서 자동 생성 (2~3분 소요)
profile = ProfileReport(
df,
title="KOTRA 무역 데이터 EDA 보고서",
explorative=True,
minimal=False
)
# Colab에서 바로 표시
profile.to_notebook_iframe()
# HTML 파일로 저장 후 다운로드
profile.to_file("eda_report.html")
from google.colab import files
files.download("eda_report.html")
print("✅ EDA 보고서 다운로드 완료!")
💡 팁: 생성된 HTML 파일을 열면 변수별 분포, 상관관계, 결측값, 중복값 등이 인터랙티브하게 표시된다. 이 파일을 AI에 첨부하거나 주요 수치를 복사해서 추가 분석 프롬프트에 활용하면 된다.
프로젝트 3: AI 기반 데이터 정제 & 전처리 (60분)
학습 목표
- 실무에서 자주 마주치는 지저분한 데이터를 AI와 함께 처리한다
- Excel에서 수식/VBA 없이 AI 프롬프트로 데이터를 정제한다
- Python으로 대용량 정제 작업을 자동화한다
사용 데이터
public_data_sample.csv — 정제가 필요한 실무형 더미 데이터
STEP 3-1: 데이터 품질 문제 진단 (10분)
진단 프롬프트
이 CSV 파일의 데이터 품질을 진단해 주세요.
다음 항목을 각각 확인하고, 발견된 문제와 권장 처리 방법을 표로 정리해 주세요:
1. 결측값 (NaN, 빈 셀, "N/A", "-" 등)
2. 중복 행
3. 데이터 타입 불일치 (숫자 컬럼에 문자 혼재 등)
4. 이상값 (평균 ± 3σ 초과)
5. 텍스트 불일치 (대소문자, 공백, 오탈자)
6. 날짜 형식 불일치
각 문제에 대해:
- 심각도: 상/중/하
- 처리 방법: Excel 수식 / Python 코드 / 수동 처리
로 구분해 주세요.
STEP 3-2: Excel에서 AI 생성 수식으로 정제 (20분)
시나리오별 정제 프롬프트
[시나리오 A - 텍스트 정제]
Excel에서 다음 작업을 수행하는 수식을 작성해 주세요:
1. A열의 국가명 앞뒤 공백 제거: TRIM 사용
2. B열의 대소문자 통일 (첫 글자만 대문자): PROPER 사용
3. C열에서 특수문자 제거 후 숫자만 추출
4. 여러 조건으로 불량 데이터 행을 표시하는 IF 중첩 수식
[시나리오 B - 결측값 처리]
Excel에서 결측값을 처리하는 수식을 작성해 주세요:
1. 수치형 컬럼의 빈 셀을 해당 그룹(국가별) 평균으로 채우기
2. 텍스트 컬럼의 빈 셀을 "미분류"로 채우기
3. 조건부 서식으로 결측값 셀을 노란색으로 하이라이트
Excel 실습 체크리스트
□ TRIM 함수로 공백 제거 완료
□ IF(ISBLANK()) 수식으로 결측값 표시
□ IFERROR로 오류 셀 처리
□ 조건부 서식 적용 완료
STEP 3-3: Python으로 대용량 데이터 자동 정제 (20분)
Python 정제 코드 생성 프롬프트
Google Colab에서 실행할 데이터 정제 Python 코드를 작성해 주세요.
처리할 작업:
1. 중복 행 제거 (완전 중복만)
2. 결측값 처리:
- 수치형: 중앙값으로 대체
- 범주형: 최빈값으로 대체
3. 이상값 처리: IQR 방식으로 상하위 1.5%를 경계값으로 대체(Winsorizing)
4. 텍스트 정규화:
- 문자열 앞뒤 공백 제거
- 전각 문자를 반각으로 변환
5. 날짜 컬럼을 YYYY-MM-DD 형식으로 통일
6. 정제 전후 데이터 건수 및 통계 비교 출력
7. 정제된 데이터를 cleaned_data.csv로 저장
한국어 주석과 진행 상황 출력 메시지를 포함해 주세요.
직접 실행 가능한 정제 코드 템플릿
import pandas as pd
import numpy as np
# ─────────────────────────────
# 데이터 로드
# ─────────────────────────────
df = pd.read_csv('public_data_sample.csv', encoding='utf-8-sig')
original_shape = df.shape
print(f"원본 데이터: {original_shape[0]:,}행 × {original_shape[1]}열")
# ─────────────────────────────
# 1단계: 중복 행 제거
# ─────────────────────────────
before = len(df)
df = df.drop_duplicates()
print(f"\n✅ 중복 제거: {before - len(df):,}행 삭제 → {len(df):,}행 남음")
# ─────────────────────────────
# 2단계: 텍스트 정규화
# ─────────────────────────────
str_cols = df.select_dtypes(include='object').columns
for col in str_cols:
df[col] = df[col].str.strip() # 앞뒤 공백 제거
df[col] = df[col].str.normalize('NFKC') # 전각→반각
print(f"✅ 텍스트 정규화 완료: {len(str_cols)}개 컬럼")
# ─────────────────────────────
# 3단계: 결측값 처리
# ─────────────────────────────
num_cols = df.select_dtypes(include=[np.number]).columns
# 수치형: 중앙값 대체
for col in num_cols:
missing_count = df[col].isnull().sum()
if missing_count > 0:
median_val = df[col].median()
df[col] = df[col].fillna(median_val)
print(f" [{col}] 결측값 {missing_count}건 → 중앙값 {median_val:.2f}로 대체")
# 범주형: 최빈값 대체
for col in str_cols:
missing_count = df[col].isnull().sum()
if missing_count > 0:
mode_val = df[col].mode()[0]
df[col] = df[col].fillna(mode_val)
print(f" [{col}] 결측값 {missing_count}건 → 최빈값 '{mode_val}'로 대체")
# ─────────────────────────────
# 4단계: 이상값 처리 (Winsorizing)
# ─────────────────────────────
for col in num_cols:
Q1 = df[col].quantile(0.01)
Q3 = df[col].quantile(0.99)
outliers = ((df[col] < Q1) | (df[col] > Q3)).sum()
df[col] = df[col].clip(lower=Q1, upper=Q3)
if outliers > 0:
print(f" [{col}] 이상값 {outliers}건 → 경계값으로 대체")
# ─────────────────────────────
# 5단계: 정제 결과 비교
# ─────────────────────────────
print("\n" + "=" * 50)
print("📋 정제 전후 비교")
print("=" * 50)
print(f"원본: {original_shape[0]:,}행 × {original_shape[1]}열")
print(f"정제 후: {df.shape[0]:,}행 × {df.shape[1]}열")
print(f"제거된 행: {original_shape[0] - df.shape[0]:,}행")
print(f"남은 결측값: {df.isnull().sum().sum()}개")
# ─────────────────────────────
# 6단계: 저장
# ─────────────────────────────
df.to_csv('cleaned_data.csv', index=False, encoding='utf-8-sig')
print("\n✅ 정제 완료! 'cleaned_data.csv' 저장됨")
from google.colab import files
files.download('cleaned_data.csv')
STEP 3-4: 정제 결과 AI 검증 (10분)
[정제 결과 검증 프롬프트]
데이터 정제 후 아래 결과가 나왔습니다. 검토해 주세요.
정제 전: 5,230행, 결측값 312개, 중복 47행
정제 후: 5,183행, 결측값 0개
1. 이 정제 과정에서 놓쳤을 수 있는 품질 이슈가 있을까요?
2. 중앙값으로 결측값을 채운 것이 적절한 선택이었는지 평가해 주세요.
3. 이상값을 제거하는 대신 Winsorizing을 적용한 이유와 한계점을 설명해 주세요.
프로젝트 4: 데이터 시각화 자동화 (75분)
학습 목표
- AI가 생성한 시각화 코드로 인터랙티브 차트를 만든다
- Plotly로 웹 기반 인터랙티브 대시보드를 구성한다
- 시각화 결과를 AI에게 해석시켜 인사이트 문장을 자동 생성한다
STEP 4-1: 시각화 설계 프롬프트 (15분)
좋은 시각화는 “무엇을 보여줄 것인가”를 먼저 결정하는 데서 시작한다.
시각화 목적 정의 프롬프트
KOTRA 무역 데이터를 분석하려 합니다.
다음 4가지 질문에 가장 적합한 차트 유형을 추천하고,
Plotly Python 코드를 각각 작성해 주세요.
Q1. "3년간 국가별 수출 추세가 어떻게 변했는가?" → 시계열 비교
Q2. "품목별 수출 규모의 비중이 어떠한가?" → 구성 비율
Q3. "수출금액과 수입금액 사이에 관계가 있는가?" → 상관관계
Q4. "지역별 무역 규모를 한눈에 비교하려면?" → 히트맵 또는 버블차트
각 코드에:
- 한글 타이틀과 축 레이블 포함
- 색상 테마: 파란색 계열
- 범례 한국어 표기
를 적용해 주세요.
STEP 4-2: Plotly 인터랙티브 차트 실습 (35분)
설치 및 기본 설정
# Plotly는 Colab에 기본 설치되어 있음
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import pandas as pd
df = pd.read_csv('cleaned_data.csv', encoding='utf-8-sig')
차트 1: 연도별 국가별 수출 추세 (멀티라인)
# 국가별 연도별 합계
trend = df.groupby(['연도', '국가명'])['수출금액'].sum().reset_index()
# 상위 5개국만 표시
top5 = df.groupby('국가명')['수출금액'].sum().nlargest(5).index
trend_top5 = trend[trend['국가명'].isin(top5)]
fig = px.line(
trend_top5,
x='연도',
y='수출금액',
color='국가명',
markers=True,
title='주요 5개국 수출금액 연도별 추세',
labels={'수출금액': '수출금액 (억 달러)', '연도': '연도', '국가명': '국가'},
color_discrete_sequence=px.colors.qualitative.Set2
)
fig.update_layout(
font_family='NanumGothic',
hovermode='x unified',
legend_title_text='국가',
plot_bgcolor='white',
paper_bgcolor='white'
)
fig.show()
차트 2: 품목별 수출 비중 트리맵
item_df = df.groupby('품목')['수출금액'].sum().reset_index()
fig = px.treemap(
item_df,
path=['품목'],
values='수출금액',
title='품목별 수출금액 비중 (트리맵)',
color='수출금액',
color_continuous_scale='Blues'
)
fig.update_traces(textinfo='label+percent entry')
fig.update_layout(font_family='NanumGothic')
fig.show()
차트 3: 수출-수입 산점도 버블차트
country_df = df.groupby('국가명').agg({
'수출금액': 'sum',
'수입금액': 'sum',
'증감률': 'mean'
}).reset_index()
country_df['무역수지'] = country_df['수출금액'] - country_df['수입금액']
fig = px.scatter(
country_df,
x='수출금액',
y='수입금액',
size='수출금액',
color='증감률',
hover_name='국가명',
title='국가별 수출-수입 상관관계 (버블 크기 = 수출금액)',
labels={
'수출금액': '수출금액 (억 달러)',
'수입금액': '수입금액 (억 달러)',
'증감률': '수출 증감률(%)'
},
color_continuous_scale='RdYlBu',
trendline='ols'
)
fig.update_layout(font_family='NanumGothic')
fig.show()
차트 4: 연도 × 품목 히트맵
heatmap_df = df.pivot_table(
values='수출금액',
index='품목',
columns='연도',
aggfunc='sum'
)
fig = go.Figure(data=go.Heatmap(
z=heatmap_df.values,
x=heatmap_df.columns.astype(str).tolist(),
y=heatmap_df.index.tolist(),
colorscale='Blues',
text=heatmap_df.values.round(0),
texttemplate='%{text}',
textfont={'size': 11},
hovertemplate='연도: %{x}<br>품목: %{y}<br>수출금액: %{z:.0f}억달러<extra></extra>'
))
fig.update_layout(
title='연도별 품목별 수출금액 히트맵',
font_family='NanumGothic',
xaxis_title='연도',
yaxis_title='품목'
)
fig.show()
STEP 4-3: 통합 대시보드 구성 (15분)
# 4개 차트를 하나의 대시보드로 통합
fig = make_subplots(
rows=2, cols=2,
subplot_titles=(
'국가별 수출 추세',
'품목별 수출 비중',
'수출-수입 상관관계',
'연도×품목 히트맵'
),
vertical_spacing=0.12,
horizontal_spacing=0.08
)
# --- 차트 1: 라인 차트 ---
for country in top5:
data = trend_top5[trend_top5['국가명'] == country]
fig.add_trace(
go.Scatter(x=data['연도'], y=data['수출금액'],
name=country, mode='lines+markers'),
row=1, col=1
)
# --- 차트 2: 파이 차트 ---
fig.add_trace(
go.Pie(labels=item_df['품목'], values=item_df['수출금액'],
name='품목별', showlegend=False),
row=1, col=2
)
# --- 차트 3: 산점도 ---
fig.add_trace(
go.Scatter(x=country_df['수출금액'], y=country_df['수입금액'],
mode='markers',
marker=dict(size=8, color=country_df['증감률'],
colorscale='RdYlBu', showscale=False),
text=country_df['국가명'], name='국가'),
row=2, col=1
)
# --- 차트 4: 히트맵 ---
fig.add_trace(
go.Heatmap(z=heatmap_df.values,
x=heatmap_df.columns.astype(str).tolist(),
y=heatmap_df.index.tolist(),
colorscale='Blues', showscale=False),
row=2, col=2
)
fig.update_layout(
height=700,
title_text='🌐 KOTRA 무역 데이터 분석 대시보드',
font_family='NanumGothic',
showlegend=True
)
fig.show()
# HTML로 저장
fig.write_html('dashboard.html')
from google.colab import files
files.download('dashboard.html')
print("✅ 대시보드 HTML 저장 완료!")
STEP 4-4: AI에게 시각화 해석 요청 (10분)
교재 47~48페이지에서 강조한 “그래프 → 문장형 인사이트” 자동 전환 실습이다.
해석 프롬프트 (데이터 기반)
위 시각화 분석에서 도출한 주요 수치입니다.
이를 바탕으로 경영진에게 보고할 3문장짜리 인사이트 요약을 작성해 주세요.
[분석 결과 수치]
- 수출 1위: 미국 (전체 32%), 3년 연속 성장
- 반도체 품목 비중: 38% (2년 전 대비 +12%p)
- 베트남 수출 증감률: +23% (가장 높은 성장)
- 수출-수입 상관계수: 0.87 (강한 양의 상관)
요약 구조:
① 가장 주목할 성과 (수치 포함)
② 주요 리스크 또는 변화 포인트
③ 향후 대응 방향 제안
프로젝트 5: 비교 분석 인사이트 리포트 생성 (60분)
학습 목표
- 데이터 분석 결과를 구조화된 보고서로 자동 변환한다
- Markdown → Word/PDF 변환 파이프라인을 구성한다
- 여러 AI 모델의 분석 결과를 하나의 리포트로 통합한다
STEP 5-1: 보고서 구조 설계 (10분)
교재 36페이지의 “템플릿화된 자동 보고서” 4단 구조를 적용한다.
보고서 템플릿 생성 프롬프트
KOTRA 무역 데이터 분석 결과를 아래 구조의 보고서로 작성해 주세요.
[보고서 구조]
# 무역 데이터 분석 리포트
## 작성일: 2025년 XX월
## 분석 범위: 국가별 수출입 통계 (2021~2024)
### 1. 핵심 요약 (Executive Summary)
- 3~5줄의 핵심 내용만
### 2. 주요 지표 (Key Metrics)
- 표 형식으로 KPI 정리
- 전년 대비 증감 포함
### 3. 시장 분석 (Market Analysis)
- 국가별 분석
- 품목별 분석
- 트렌드 분석
### 4. 시사점 및 제언 (Insights & Recommendations)
- 기회 요인
- 리스크 요인
- 단기/중장기 제언
[사용할 데이터]
(앞의 분석 결과를 여기에 붙여넣기)
STEP 5-2: Python으로 자동 보고서 생성 (30분)
Markdown 보고서 자동 생성 코드
import pandas as pd
import numpy as np
from datetime import datetime
df = pd.read_csv('cleaned_data.csv', encoding='utf-8-sig')
# ─────────────────────────────
# 분석 지표 계산
# ─────────────────────────────
total_export = df['수출금액'].sum()
total_import = df['수입금액'].sum()
trade_balance = total_export - total_import
top3_countries = (df.groupby('국가명')['수출금액']
.sum().nlargest(3))
top_item = (df.groupby('품목')['수출금액']
.sum().idxmax())
top_item_ratio = (df.groupby('품목')['수출금액']
.sum().max() / total_export * 100)
# 연도별 성장률
yearly = df.groupby('연도')['수출금액'].sum()
growth_rate = (yearly.iloc[-1] / yearly.iloc[-2] - 1) * 100
# ─────────────────────────────
# 보고서 Markdown 생성
# ─────────────────────────────
report = f"""# 무역 데이터 분석 리포트
**작성일**: {datetime.now().strftime('%Y년 %m월 %d일')}
**분석 도구**: Python (pandas, plotly) + AI 지원 (Claude/ChatGPT)
**분석 범위**: {df['연도'].min()}~{df['연도'].max()}년 국가별 수출입 통계
---
## 1. 핵심 요약 (Executive Summary)
분석 기간 동안 총 수출금액은 **{total_export:,.0f}억 달러**로 집계되었으며,
전년 대비 수출 성장률은 **{growth_rate:+.1f}%** 를 기록했다.
수출 1위 국가는 **{top3_countries.index[0]}** ({top3_countries.iloc[0]:,.0f}억 달러)이며,
주력 품목인 **{top_item}**이 전체의 {top_item_ratio:.1f}%를 차지하며 시장을 견인하고 있다.
---
## 2. 주요 지표 (Key Metrics)
| 지표 | 값 |
|------|-----|
| 총 수출금액 | {total_export:,.0f}억 달러 |
| 총 수입금액 | {total_import:,.0f}억 달러 |
| 무역수지 | {trade_balance:+,.0f}억 달러 |
| 전년 대비 수출 성장률 | {growth_rate:+.1f}% |
| 수출 1위 국가 | {top3_countries.index[0]} |
| 최대 수출 품목 | {top_item} ({top_item_ratio:.1f}%) |
---
## 3. 시장 분석 (Market Analysis)
### 3-1. 국가별 분석
**수출금액 상위 3개국:**
"""
for i, (country, amount) in enumerate(top3_countries.items(), 1):
share = amount / total_export * 100
report += f"\n{i}. **{country}**: {amount:,.0f}억 달러 (점유율 {share:.1f}%)"
report += f"""
### 3-2. 품목별 분석
"""
item_analysis = (df.groupby('품목')['수출금액']
.sum()
.sort_values(ascending=False)
.reset_index())
item_analysis['비중(%)'] = (item_analysis['수출금액'] /
item_analysis['수출금액'].sum() * 100).round(1)
report += "| 품목 | 수출금액(억달러) | 비중(%) |\n"
report += "|------|---------|------|\n"
for _, row in item_analysis.iterrows():
report += f"| {row['품목']} | {row['수출금액']:,.0f} | {row['비중(%)']:.1f}% |\n"
report += f"""
### 3-3. 연도별 추세
"""
yearly_df = df.groupby('연도')['수출금액'].sum().reset_index()
report += "| 연도 | 수출금액(억달러) | 전년비 |\n"
report += "|------|---------|------|\n"
for i, row in yearly_df.iterrows():
if i == 0:
report += f"| {int(row['연도'])} | {row['수출금액']:,.0f} | - |\n"
else:
prev = yearly_df.iloc[i-1]['수출금액']
change = (row['수출금액'] / prev - 1) * 100
report += f"| {int(row['연도'])} | {row['수출금액']:,.0f} | {change:+.1f}% |\n"
report += """
---
## 4. 시사점 및 제언 (Insights & Recommendations)
### 기회 요인
- (AI 분석 결과를 여기에 삽입)
### 리스크 요인
- (AI 분석 결과를 여기에 삽입)
### 제언
- **단기 (6개월)**:
- **중기 (1~2년)**:
- **장기 (3년 이상)**:
---
*본 보고서는 AI(Claude/ChatGPT)와 Python 자동화 도구로 생성되었습니다.*
*최종 해석 및 의사결정은 담당자의 검토를 거쳐야 합니다.*
"""
# 저장
with open('trade_report.md', 'w', encoding='utf-8') as f:
f.write(report)
print("✅ 보고서 생성 완료: trade_report.md")
print("\n" + "=" * 60)
print(report[:500] + "...") # 미리보기
STEP 5-3: 보고서 시사점 AI로 자동 완성 (10분)
시사점 생성 프롬프트
위 분석 데이터를 바탕으로 보고서의 "시사점 및 제언" 섹션을 완성해 주세요.
[분석 결과 요약]
- 총 수출: 1,240억 달러 (+8.3% YoY)
- 1위: 미국 32%, 2위: 중국 24%, 3위: 베트남 15%
- 반도체 38%, 자동차 22%, 화학 18%
- 베트남 증감률 +23% (최고 성장국)
- 유럽권 수출 -7% (에너지 가격 영향)
작성 지침:
- 기회 요인 3가지 (수치 기반)
- 리스크 요인 2가지 (근거 포함)
- 단기/중기/장기 제언 각 1가지
- 경영진이 읽는 보고서 톤으로 작성
- 총 300자 이내
STEP 5-4: 보고서 파일 저장 (10분)
# Markdown을 다양한 형식으로 변환
# 방법 1: HTML 변환 (마크다운 라이브러리 사용)
!pip install markdown -q
import markdown
with open('trade_report.md', 'r', encoding='utf-8') as f:
md_content = f.read()
html_content = f"""
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
body {{ font-family: 'Malgun Gothic', sans-serif; max-width: 900px;
margin: 40px auto; padding: 20px; line-height: 1.8; }}
h1 {{ color: #1a3a6b; border-bottom: 3px solid #1a3a6b; }}
h2 {{ color: #2c5aa0; border-bottom: 1px solid #ddd; }}
h3 {{ color: #3a78c9; }}
table {{ border-collapse: collapse; width: 100%; margin: 15px 0; }}
th {{ background: #1a3a6b; color: white; padding: 10px; }}
td {{ border: 1px solid #ddd; padding: 8px; }}
tr:nth-child(even) {{ background: #f5f8ff; }}
</style>
</head>
<body>
{markdown.markdown(md_content, extensions=['tables'])}
</body>
</html>
"""
with open('trade_report.html', 'w', encoding='utf-8') as f:
f.write(html_content)
from google.colab import files
files.download('trade_report.md')
files.download('trade_report.html')
print("✅ 보고서 다운로드 완료!")
프로젝트 6: 전체 분석 파이프라인 구성 (45분)
학습 목표
- 1~5 프로젝트를 하나의 자동화 파이프라인으로 연결한다
- “데이터 업로드 → 분석 → 시각화 → 보고서” 원클릭 실행을 체험한다
- 내 업무에 맞게 파이프라인을 커스터마이징하는 방법을 익힌다
STEP 6-1: 파이프라인 설계 (10분)
교재 52페이지의 “데이터→분석→리포트→공유” 자동화 개념을 직접 구현한다.
파이프라인 설계 프롬프트
지금까지 실습한 내용을 하나의 자동화 파이프라인으로 통합하고 싶습니다.
Google Colab에서 실행할 수 있는 "All-in-One 분석 파이프라인" 코드를
작성해 주세요.
파이프라인 단계:
1. 파일 업로드 및 자동 인코딩 감지
2. 자동 데이터 품질 체크 (결측값, 중복, 타입)
3. 스마트 정제 (수치/범주형 자동 구분 처리)
4. 핵심 지표 자동 계산
5. 4종 차트 자동 생성 및 대시보드 저장
6. Markdown 보고서 자동 생성
7. 전체 결과물 ZIP으로 다운로드
실행 시 각 단계별 진행률 표시 (progressbar 또는 print)
오류 발생 시 사용자 친화적인 에러 메시지 출력
STEP 6-2: 원클릭 파이프라인 실행 (25분)
# ============================================================
# 🚀 AI 데이터 분석 파이프라인 v1.0
# 사용법: 이 셀을 실행하면 분석이 자동으로 완료됩니다.
# ============================================================
import pandas as pd
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import os, zipfile
from datetime import datetime
from google.colab import files
print("=" * 60)
print("🤖 AI 데이터 분석 파이프라인 시작")
print("=" * 60)
# ─────────────────────────────
# STEP 1: 파일 업로드
# ─────────────────────────────
print("\n📁 STEP 1/6: 파일 업로드")
uploaded = files.upload()
filename = list(uploaded.keys())[0]
# 인코딩 자동 감지
for enc in ['utf-8-sig', 'euc-kr', 'cp949', 'utf-8']:
try:
df = pd.read_csv(filename, encoding=enc)
print(f" ✅ {filename} 로드 완료 (인코딩: {enc})")
print(f" 📊 {df.shape[0]:,}행 × {df.shape[1]}열")
break
except:
continue
# ─────────────────────────────
# STEP 2: 자동 품질 체크
# ─────────────────────────────
print("\n🔍 STEP 2/6: 데이터 품질 체크")
issues = []
missing = df.isnull().sum().sum()
duplicates = df.duplicated().sum()
if missing > 0:
issues.append(f"결측값 {missing}개")
if duplicates > 0:
issues.append(f"중복행 {duplicates}개")
if issues:
print(f" ⚠️ 발견된 이슈: {', '.join(issues)}")
else:
print(" ✅ 품질 이슈 없음")
# ─────────────────────────────
# STEP 3: 자동 정제
# ─────────────────────────────
print("\n🧹 STEP 3/6: 데이터 자동 정제")
original_rows = len(df)
df = df.drop_duplicates()
num_cols = df.select_dtypes(include=[np.number]).columns
str_cols = df.select_dtypes(include='object').columns
for col in num_cols:
df[col] = df[col].fillna(df[col].median())
for col in str_cols:
df[col] = df[col].str.strip()
if df[col].isnull().any():
df[col] = df[col].fillna(df[col].mode()[0] if len(df[col].mode()) > 0 else '미분류')
df.to_csv('cleaned_pipeline.csv', index=False, encoding='utf-8-sig')
print(f" ✅ 정제 완료: {original_rows}행 → {len(df)}행")
# ─────────────────────────────
# STEP 4: 핵심 지표 계산
# ─────────────────────────────
print("\n📈 STEP 4/6: 핵심 지표 계산")
# 수치형 컬럼 첫 번째를 주요 지표로 사용
target_col = num_cols[0] if len(num_cols) > 0 else None
cat_col = str_cols[0] if len(str_cols) > 0 else None
date_col = next((c for c in df.columns if '연도' in c or 'year' in c.lower()), None)
kpi = {}
if target_col:
kpi['총계'] = df[target_col].sum()
kpi['평균'] = df[target_col].mean()
kpi['최댓값'] = df[target_col].max()
for k, v in kpi.items():
print(f" {k}({target_col}): {v:,.1f}")
# ─────────────────────────────
# STEP 5: 차트 자동 생성
# ─────────────────────────────
print("\n📊 STEP 5/6: 시각화 생성")
charts = []
if cat_col and target_col:
# 막대그래프
top_data = df.groupby(cat_col)[target_col].sum().nlargest(10).reset_index()
fig1 = px.bar(top_data, x=cat_col, y=target_col,
title=f'상위 10개 {cat_col}별 {target_col}',
color=target_col, color_continuous_scale='Blues')
fig1.write_html('chart1_bar.html')
charts.append('chart1_bar.html')
if date_col and target_col:
# 시계열
ts_data = df.groupby(date_col)[target_col].sum().reset_index()
fig2 = px.line(ts_data, x=date_col, y=target_col,
title=f'연도별 {target_col} 추세',
markers=True)
fig2.write_html('chart2_trend.html')
charts.append('chart2_trend.html')
if len(num_cols) >= 2:
# 산점도
fig3 = px.scatter(df, x=num_cols[0], y=num_cols[1],
title=f'{num_cols[0]} vs {num_cols[1]}',
opacity=0.6, trendline='ols')
fig3.write_html('chart3_scatter.html')
charts.append('chart3_scatter.html')
print(f" ✅ 차트 {len(charts)}개 생성 완료")
# ─────────────────────────────
# STEP 6: 보고서 자동 생성 및 ZIP 저장
# ─────────────────────────────
print("\n📝 STEP 6/6: 보고서 생성 및 패키징")
report_md = f"""# 자동 생성 데이터 분석 보고서
**생성일시**: {datetime.now().strftime('%Y-%m-%d %H:%M')}
**분석 파일**: {filename}
**데이터 규모**: {len(df):,}행 × {df.shape[1]}열
## 핵심 지표
| 지표 | 값 |
|------|-----|
"""
for k, v in kpi.items():
report_md += f"| {k} ({target_col}) | {v:,.1f} |\n"
report_md += f"""
## 분석 결과
{len(charts)}개의 시각화 차트가 생성되었습니다.
각 차트 파일을 브라우저에서 열어 인터랙티브하게 탐색하세요.
## AI 분석 제언
> 이 섹션은 AI(Claude/ChatGPT)에 아래 프롬프트를 사용해 채워 주세요:
>
> "위 분석 결과 수치를 보고, 비즈니스 관점에서
> 기회 요인, 리스크, 권장 액션을 3문장으로 요약해 주세요."
---
*본 보고서는 AI 데이터 분석 파이프라인으로 자동 생성되었습니다.*
"""
with open('auto_report.md', 'w', encoding='utf-8') as f:
f.write(report_md)
# ZIP으로 묶기
with zipfile.ZipFile('analysis_results.zip', 'w') as zf:
zf.write('cleaned_pipeline.csv')
zf.write('auto_report.md')
for c in charts:
zf.write(c)
print("\n" + "=" * 60)
print("🎉 파이프라인 완료!")
print("=" * 60)
files.download('analysis_results.zip')
print("\n✅ 결과물 ZIP 다운로드 시작!")
STEP 6-3: 나만의 파이프라인 커스터마이징 (10분)
커스터마이징 아이디어 브레인스토밍
아래 프롬프트로 자신의 업무에 맞는 파이프라인을 AI와 설계한다.
저는 [자신의 직종/부서]에서 일하고 있습니다.
매주 [업무 설명]을 수작업으로 하고 있습니다.
이 파이프라인을 제 업무에 맞게 수정해 주세요.
필요한 분석:
1. [원하는 분석 1]
2. [원하는 분석 2]
주요 데이터 컬럼: [컬럼명 나열]
매주 자동으로 실행되도록 Colab 스케줄링 방법도 알려주세요.
마무리 (15분)
과정 핵심 요약
AI 데이터 분석 7단계 워크플로우
1. 목표 정의 → 무엇을 알고 싶은가?
2. 데이터 탐색 → AI 프롬프트로 첫 인사이트
3. 정제 → Python으로 품질 확보
4. EDA → Colab + ydata-profiling
5. 시각화 → Plotly 인터랙티브 차트
6. 인사이트 → AI에게 해석 요청 (3단 구조)
7. 보고서 → 자동 생성 + AI 시사점 보완
LLM 역할 분담 권장 전략
| 작업 | 추천 AI | 이유 |
|---|---|---|
| 코드 생성 | ChatGPT / Claude | 코드 품질 우수 |
| 인과관계 해석 | Claude | 서술형 분석 강점 |
| 최신 시장 맥락 | Gemini / Perplexity | 실시간 검색 연동 |
| 보고서 문장 | ChatGPT / Claude | 구조적 요약 강점 |
다음 단계 학습 로드맵
즉시 적용 (이번 주)
- 본인 업무 데이터를 CSV로 내보내 프로젝트 1 실습 반복
- Colab 노트북을 구글 드라이브에 저장해 언제든 재실행
단기 심화 (1개월)
- pandas 기초 문법 학습 (데이터 필터링, 그룹화)
- Plotly 공식 문서에서 차트 유형 탐색
중장기 확장 (3개월)
- ChatGPT Action 또는 Claude Projects로 맞춤형 분석 GPT 구성
- n8n / Make로 정기 자동화 파이프라인 구축 (교재 4장 참고)
- Power BI 또는 Tableau와 연동해 대시보드 고도화
참고 리소스
| 리소스 | URL |
|---|---|
| KOTRA 빅데이터 플랫폼 | kotra.or.kr/bigdata/marketAnalysis |
| 공공데이터포털 | data.go.kr |
| Google Colab | colab.research.google.com |
| Plotly 공식 문서 | plotly.com/python |
| ydata-profiling | docs.profiling.ydata.ai |
| Pandas 한국어 튜토리얼 | pandas.pydata.org/docs |
Q&A 메모란
질문:
________________________________
________________________________
답변:
________________________________
________________________________
첫 포스팅: 25.10.29 / 포스트 문의: JUN (naebon@naver.com)