파이썬을 활용한 신용카드 명세서 자동 분석 및 개인 재정 관리: PDF 파싱부터 소비 패턴 시각화까지
신용카드 명세서를 수동으로 분석하는 데 시간을 낭비하고 계신가요? 파이썬을 사용하여 PDF 명세서를 자동으로 파싱하고, 소비 패턴을 시각화하여 개인 재정을 효율적으로 관리하는 방법을 소개합니다. 엑셀 시트와의 전쟁은 이제 끝입니다.
1. The Challenge / Context
매달 신용카드 명세서를 받을 때마다 얼마나 많은 시간을 소비하고 계신가요? 엑셀에 옮겨 적고, 카테고리별로 분류하고, 소비 패턴을 파악하는 과정은 번거롭고 시간이 많이 소요됩니다. 또한, 카드사에서 제공하는 분석 툴은 종종 제한적이고 개인의 니즈에 맞지 않는 경우가 많습니다. 특히, 여러 개의 카드를 사용하는 경우 전체적인 소비 흐름을 파악하기 더욱 어려워집니다. 파이썬을 활용하면 이러한 문제를 해결하고 개인 재정 관리를 자동화하여 시간을 절약하고 더욱 정확한 분석을 수행할 수 있습니다.
2. Deep Dive: pdfminer.six & Pandas
핵심 기술은 PDF 파싱을 위한 pdfminer.six 라이브러리와 데이터 분석 및 조작을 위한 Pandas 라이브러리입니다. pdfminer.six는 PDF 문서를 텍스트로 추출하는 데 사용되며, Pandas는 추출된 데이터를 DataFrame 형태로 변환하여 분석을 용이하게 합니다.
pdfminer.six는 PDF 문서의 레이아웃을 분석하여 텍스트를 정확하게 추출하는 기능을 제공합니다. 단순히 텍스트를 추출하는 것 외에도, 폰트 크기, 위치 등 다양한 정보를 함께 추출할 수 있어 복잡한 형식의 PDF 문서도 효과적으로 처리할 수 있습니다.
Pandas는 강력한 데이터 조작 및 분석 기능을 제공합니다. DataFrame은 테이블 형태의 데이터를 다루는 데 최적화되어 있으며, 필터링, 정렬, 그룹핑, 집계 등 다양한 작업을 수행할 수 있습니다. 또한, Pandas는 다양한 데이터 시각화 도구와 연동되어 소비 패턴을 그래프로 쉽게 표현할 수 있도록 지원합니다.
3. Step-by-Step Guide / Implementation
Step 1: 필요한 라이브러리 설치
먼저 pdfminer.six와 Pandas 라이브러리를 설치해야 합니다. 터미널 또는 명령 프롬프트에서 다음 명령을 실행하십시오.
pip install pdfminer.six pandas matplotlib
Step 2: PDF 파일에서 텍스트 추출
다음 코드는 PDF 파일에서 텍스트를 추출하는 기본적인 예시입니다. 파일 경로를 실제 명세서 PDF 파일 경로로 변경해야 합니다.
from pdfminer.high_level import extract_text
def extract_text_from_pdf(pdf_path):
text = extract_text(pdf_path)
return text
pdf_file_path = 'your_credit_card_statement.pdf' # 실제 파일 경로로 변경
extracted_text = extract_text_from_pdf(pdf_file_path)
print(extracted_text)
Step 3: 추출된 텍스트 데이터 정제
추출된 텍스트는 대부분 불필요한 공백, 특수 문자, 카드사 로고 정보 등을 포함하고 있습니다. 정규 표현식 또는 문자열 조작 함수를 사용하여 필요한 데이터만 추출해야 합니다.
import re
def clean_text(text):
# 불필요한 문자 제거 (예: 페이지 번호, 카드사 로고)
cleaned_text = re.sub(r'Page \d+ of \d+', '', text)
cleaned_text = re.sub(r'카드사 로고 관련 텍스트', '', cleaned_text)
cleaned_text = cleaned_text.strip()
return cleaned_text
cleaned_text = clean_text(extracted_text)
print(cleaned_text)
Step 4: 거래 내역 데이터 추출 및 구조화
정제된 텍스트에서 날짜, 사용처, 금액 등의 거래 내역 데이터를 추출합니다. 각 카드사마다 명세서 형식이 다르므로, 정규 표현식 또는 문자열 파싱 방법을 명세서 형식에 맞게 조정해야 합니다. 핵심은 **정규 표현식**을 능숙하게 사용하는 것입니다. 예를 들어, 날짜 형식이 'YYYY.MM.DD'인 경우, `r'\d{4}\.\d{2}\.\d{2}'`와 같은 정규 표현식을 사용할 수 있습니다.
import re
import pandas as pd
def extract_transactions(text):
# 카드사 명세서 형식에 맞는 정규 표현식 사용
pattern = re.compile(r'(\d{4}\.\d{2}\.\d{2})\s+([\w\s\.\-]+)\s+([\d,\.]+)')
transactions = []
for match in pattern.finditer(text):
date = match.group(1)
description = match.group(2).strip()
amount = float(match.group(3).replace(',', '')) # 쉼표 제거 후 float 변환
transactions.append({'Date': date, 'Description': description, 'Amount': amount})
return transactions
transactions = extract_transactions(cleaned_text)
df = pd.DataFrame(transactions)
print(df)
Step 5: 소비 카테고리 분류
추출된 거래 내역을 기반으로 소비 카테고리를 분류합니다. 예를 들어, "스타벅스"는 "카페", "쿠팡"은 "온라인 쇼핑" 등으로 분류할 수 있습니다. 사전에 카테고리 정의 및 규칙을 설정하고, Pandas의 `apply` 함수를 사용하여 각 거래 내역에 카테고리를 할당합니다.
def categorize_transaction(description):
if '스타벅스' in description:
return '카페'
elif '쿠팡' in description:
return '온라인 쇼핑'
elif '택시' in description:
return '교통'
else:
return '기타'
df['Category'] = df['Description'].apply(categorize_transaction)
print(df)
Step 6: 소비 패턴 시각화
Matplotlib 또는 Seaborn과 같은 데이터 시각화 라이브러리를 사용하여 소비 패턴을 시각화합니다. 월별 소비 추이, 카테고리별 소비 비중 등을 그래프로 표현하여 개인 재정 상황을 쉽게 파악할 수 있도록 합니다.
import matplotlib.pyplot as plt
# 월별 소비 추이
df['Date'] = pd.to_datetime(df['Date'])
monthly_spending = df.groupby(pd.Grouper(key='Date', freq='M'))['Amount'].sum()
monthly_spending.plot(kind='line', title='월별 소비 추이')
plt.show()
# 카테고리별 소비 비중
category_spending = df.groupby('Category')['Amount'].sum()
category_spending.plot(kind='pie', autopct='%1.1f%%', title='카테고리별 소비 비중')
plt.show()
4. Real-world Use Case / Example
저는 이 워크플로우를 통해 매달 2시간 이상을 절약하고 있습니다. 이전에는 카드 명세서를 수동으로 엑셀에 입력하고 분석하는 데 많은 시간을 소비했지만, 이제는 파이썬 스크립트를 실행하는 것만으로 소비 패턴을 파악하고 불필요한 지출을 줄이는 데 집중할 수 있습니다. 특히, 매달 발생하는 '기타' 카테고리의 지출을 분석하여 새로운 소비 습관을 발견하고 개선하는 데 도움을 받았습니다.
5. Pros & Cons / Critical Analysis
- Pros:
- 자동화된 데이터 추출 및 분석으로 시간 절약
- 개인화된 소비 패턴 분석 및 시각화
- 다양한 카드사 명세서 형식에 맞춰 유연하게 적용 가능 (정규 표현식 활용)
- Cons:
- 초기 설정 및 스크립트 작성에 약간의 프로그래밍 지식 필요
- 카드사 명세서 형식이 변경될 경우 스크립트 수정 필요
- PDF 명세서의 품질에 따라 텍스트 추출 정확도가 달라질 수 있음
6. FAQ
- Q: pdfminer.six 대신 다른 PDF 파싱 라이브러리를 사용할 수 있나요?
A: 네, PyPDF2, textract 등 다양한 PDF 파싱 라이브러리를 사용할 수 있습니다. 각 라이브러리마다 장단점이 있으므로, 명세서 형식 및 개인적인 선호도에 맞춰 선택하시면 됩니다. pdfminer.six는 비교적 정확도가 높은 편이지만, 레이아웃이 복잡한 PDF의 경우 textract가 더 나은 결과를 보여줄 수도 있습니다. - Q: 보안상의 문제는 없나요?
A: 신용카드 명세서에는 민감한 개인 정보가 포함되어 있으므로, 스크립트 실행 환경 및 데이터 저장 위치에 대한 보안 조치를 취해야 합니다. 가능하다면 로컬 환경에서 스크립트를 실행하고, 추출된 데이터를 암호화하여 저장하는 것이 좋습니다. 또한, 스크립트를 GitHub와 같은 공개 저장소에 업로드할 때는 개인 정보가 포함되지 않도록 주의해야 합니다. - Q: 엑셀 파일로 내보낼 수 있나요?
A: Pandas의 `to_excel()` 함수를 사용하여 DataFrame을 엑셀 파일로 쉽게 내보낼 수 있습니다.df.to_excel('credit_card_analysis.xlsx', index=False)
7. Conclusion
파이썬을 활용한 신용카드 명세서 자동 분석은 개인 재정 관리를 혁신적으로 개선할 수 있는 강력한 도구입니다. 초기 설정에 약간의 노력이 필요하지만, 자동화된 워크플로우를 구축하면 매달 시간과 노력을 절약하고 더욱 효과적인 재정 관리를 할 수 있습니다. 지금 바로 카드 명세서 PDF를 준비하고, 위 코드를 활용하여 개인 재정 관리 자동화에 도전해 보세요!


