본문 바로가기

Server Story....

데이터의 연금술: 파이썬 Pandas로 리포트 자동 생성 및 PDF 시각화

반응형

파이썬 Pandas로 리포트 자동 생성 및 PDF


 

1. 도입 및 배경 (Why?) 💡

데이터는 수집하는 것보다 **'어떻게 보여주는가'**가 더 중요합니다. 수천 줄의 엑셀 데이터보다 잘 그려진 차트 한 장이 의사결정에 더 큰 도움을 주기 때문입니다.

애드센스 역시 단순 정보 나열보다는 데이터를 분석하여 시각적 결과물을 만들어내는 콘텐츠에 높은 점수를 줍니다. 오늘은 파이썬의 강력한 라이브러리인 PandasMatplotlib을 활용해, 매일 아침 자동으로 생성되는 '데이터 요약 리포트' 시스템을 구축해 보겠습니다.


2. 리포트 자동화 프로세스 (Process) 🏗️

데이터가 수집되어 시각화된 리포트로 변환되는 단계별 흐름입니다.

  1. Data Loading: MSSQL 또는 CSV에서 원본 데이터 로드
  2. Transformation: Pandas를 이용한 통계 계산 및 그룹화
  3. Visualization: 차트 생성 (막대 그래프, 파이 차트 등)
  4. Export: 이미지를 포함한 PDF 리포트 최종 저장

3. 사전 준비: 시각화 라이브러리 설치 🛠️

데이터 분석과 차트 생성을 위한 필수 라이브러리를 설치합니다.

Bash
 
# 데이터 분석 및 시각화 필수 패키지
pip install pandas matplotlib seaborn dataframe_image fpdf
  • Pandas: 데이터 핸들링의 표준
  • Matplotlib / Seaborn: 파이썬 시각화의 핵심
  • FPDF: 가공된 데이터를 PDF 문서로 변환

4. 핵심 코드: 리포트 생성 스크립트 (report_gen.py) 🐍

실제 데이터를 가공하고 차트를 포함한 리포트를 만드는 정석 코드입니다.

■ 4-1. 데이터 가공 및 차트 생성

Python
 
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from fpdf import FPDF

# 1. 샘플 데이터 생성 (실제로는 MSSQL에서 가져온 데이터를 사용하세요)
data = {
    'Category': ['News', 'IT', 'Finance', 'Life', 'Health'],
    'Views': [1200, 2500, 1800, 900, 1500],
    'Earnings': [15.5, 45.2, 30.1, 10.5, 22.8]
}
df = pd.DataFrame(data)

# 2. 시각화 (Seaborn 활용)
plt.figure(figsize=(10, 6))
sns.barplot(x='Category', y='Views', data=df, palette='viridis')
plt.title('Daily Blog Views by Category')
plt.savefig('daily_chart.png') # 이미지로 저장
plt.close()

print("✅ 차트 이미지 생성 완료: daily_chart.png")

■ 4-2. PDF 리포트 파일로 출력

Python
 
# 3. PDF 리포트 작성
class PDF(FPDF):
    def header(self):
        self.set_font('Arial', 'B', 15)
        self.cell(0, 10, 'Daily Analytics Automation Report', 0, 1, 'C')
        self.ln(10)

pdf = PDF()
pdf.add_page()
pdf.set_font("Arial", size=12)

# 데이터 요약 텍스트 추가
summary_text = f"Total Views: {df['Views'].sum()} / Avg Earnings: ${df['Earnings'].mean():.2.2f}"
pdf.cell(0, 10, txt=summary_text, ln=True)

# 차트 이미지 삽입
pdf.image('daily_chart.png', x=10, y=40, w=190)

pdf.output("Daily_Report.pdf")
print("🚀 PDF 리포트가 성공적으로 생성되었습니다: Daily_Report.pdf")

5. 시니어의 한 수: 애드센스가 좋아하는 '데이터 인사이트' 📈

단순히 차트를 그리는 데 그치지 말고, **'분석 의견'**을 자동 생성하는 로직을 추가해 보세요. 이것이 콘텐츠의 '가치'를 결정합니다.

  • 성과 분석: "전일 대비 IT 카테고리의 조회수가 20% 상승했습니다. 관련 포스팅을 늘리세요."
  • 이상 징후 탐지: "Finance 카테고리의 수익률이 평균보다 낮습니다. 키워드 점검이 필요합니다."

이런 로직을 파이썬의 if/else 구문으로 간단히 구현하여 PDF 하단에 추가하면, 인공지능 분석 리포트와 같은 고퀄리티 콘텐츠가 됩니다.


6. 트러블슈팅: 당신이 겪을 삽질 기록 🛠️

🚨 에러: PDF나 차트에서 한글이 깨져요!

  • 원인: Matplotlib과 FPDF의 기본 폰트가 한글을 지원하지 않기 때문입니다.
  • 해결: matplotlib.rc('font', family='NanumGothic') 설정을 추가하고, FPDF에 나눔고딕 같은 한글 폰트(.ttf) 파일을 직접 등록해 주어야 합니다.

🚨 에러: 서버(CLI)에서 실행하면 차트 창이 안 닫혀요.

  • 원인: 리눅스 서버에는 모니터(GUI)가 없기 때문입니다.
  • 해결: plt.show() 대신 반드시 plt.savefig()를 사용하고, 작업이 끝나면 plt.close()로 메모리를 반환하세요.

 


🔍 더 알아보기

이 데이터 리포트를 더 스마트하게 활용하고 싶다면, 아래 키워드를 검색해 보세요!

  • "Slack 알림": 생성된 PDF 리포트를 매일 아침 슬랙으로 전송받는 법
  • "Crontab": 매일 새벽 5시에 리포트를 자동 생성하도록 예약하는 법
  • "MSSQL 전처리": DB 데이터를 Pandas 데이터프레임으로 깔끔하게 읽어오는 법
반응형