效果先看:AI智能体生成的月度账单报告长这样
我受够了每月手动整理微信和支付宝账单——导出CSV、分类统计、画图表,一套流程下来至少半小时。现在,我让AI智能体帮我搞定一切:它自动读取账单文件,分析消费结构,找出可疑的异常支出,并生成一份图文并茂的HTML报告。下图是上个月的报告示例:
(这里插入一张截图,展示报告首页,包括总支出、分类饼图、异常支出列表)
报告内容包括:
- 月度总支出和收入概览
- 消费分类占比(如餐饮、交通、购物等)
- 异常支出提醒(比如突然的大额消费)
- 趋势图表(可选)
整个过程全自动,我只需把账单文件丢进指定文件夹,运行脚本就行。下面分享具体实现步骤。
第一步:准备账单数据——从微信/支付宝导出CSV
AI智能体需要原始数据,所以先得从微信和支付宝导出账单。操作很简单:
- 微信:打开「我」->「服务」->「钱包」->「账单」->右上角「常见问题」->「下载账单」->选择「用于个人对账」->导出CSV。
- 支付宝:打开「我的」->「账单」->右上角「…」->「开具交易流水证明」->「用于个人对账」->选择时间范围->导出CSV。
导出的文件通常命名如 微信支付账单(20250101-20250131).csv 和 alipay_record_20250101_20250131.csv。把它们放到一个文件夹,比如 ./bills/。
吐槽:支付宝的CSV格式偶尔会变,得注意适配——不过我的代码已经处理了常见情况。
第二步:编写Python代码,让AI智能体分析账单
我用Python写了个脚本,核心功能包括:读取CSV、清洗数据、分类消费、检测异常、生成报告。这里分块解释关键代码。
1. 安装依赖库
确保安装了以下库:
pip install pandas matplotlib jinja2
pandas 用于数据处理,matplotlib 画图,jinja2 生成HTML报告。
2. 读取和合并账单数据
脚本自动扫描 ./bills/ 文件夹,读取所有CSV文件,合并成一个DataFrame。微信和支付宝的字段不同,需要统一处理:
import pandas as pd
import os
def load_bills(folder_path='./bills/'):
all_data = []
for file in os.listdir(folder_path):
if file.endswith('.csv'):
path = os.path.join(folder_path, file)
try:
if '微信' in file:
df = pd.read_csv(path, encoding='gbk', skiprows=16) # 微信CSV有表头偏移
df = df.rename(columns={'交易时间': 'time', '交易类型': 'type', '金额(元)': 'amount', '商品': 'description'})
elif 'alipay' in file:
df = pd.read_csv(path, encoding='gbk')
df = df.rename(columns={'交易创建时间': 'time', '收/支': 'type', '金额(元)': 'amount', '商品名称': 'description'})
else:
continue
df['source'] = '微信' if '微信' in file else '支付宝'
all_data.append(df[['time', 'type', 'amount', 'description', 'source']])
except Exception as e:
print(f"读取 {file} 失败: {e}")
if not all_data:
return pd.DataFrame()
return pd.concat(all_data, ignore_index=True)
这段代码处理了编码和表头差异,统一了字段名。
3. 数据清洗和分类
合并后,清洗数据并添加分类标签。我基于描述关键词来分类,比如包含“餐厅”或“外卖”的归为“餐饮”:
def categorize_bills(df):
# 清洗:去除收入记录,只保留支出
df = df[df['type'].str.contains('支出|付款', na=False)]
df['amount'] = df['amount'].astype(str).str.replace('¥', '').astype(float)
# 分类规则
categories = {
'餐饮': ['餐厅', '外卖', '美食', '咖啡', '奶茶'],
'交通': ['打车', '地铁', '公交', '加油', '停车'],
'购物': ['淘宝', '京东', '超市', '购物', '服饰'],
'娱乐': ['电影', '游戏', 'KTV', '旅游'],
'生活': ['水电', '房租', '话费', '维修'],
'其他': [] # 默认类别
}
def get_category(desc):
desc = str(desc).lower()
for cat, keywords in categories.items():
for kw in keywords:
if kw in desc:
return cat
return '其他'
df['category'] = df['description'].apply(get_category)
return df
你可以根据自己的消费习惯调整关键词,提高分类准确率。
4. 异常支出检测
AI智能体用简单统计方法找异常:比如金额超过平均值的2倍,或突然出现不常见类别。
def detect_anomalies(df):
anomalies = []
avg_amount = df['amount'].mean()
std_amount = df['amount'].std()
for _, row in df.iterrows():
# 规则1: 金额大于平均值+2倍标准差
if row['amount'] > avg_amount + 2 * std_amount:
anomalies.append({
'time': row['time'],
'amount': row['amount'],
'description': row['description'],
'reason': '大额支出'
})
# 规则2: 类别为“其他”且金额较高
elif row['category'] == '其他' and row['amount'] > 100:
anomalies.append({
'time': row['time'],
'amount': row['amount'],
'description': row['description'],
'reason': '未分类高额支出'
})
return anomalies
这只是一个基础示例,你可以加入更复杂的机器学习模型来改进。
5. 生成图表和HTML报告
用matplotlib画饼图展示消费结构,然后用Jinja2模板生成HTML报告。
import matplotlib.pyplot as plt
from jinja2 import Template
def generate_report(df, anomalies, output_path='report.html'):
# 生成饼图
category_sum = df.groupby('category')['amount'].sum()
plt.figure(figsize=(8, 6))
plt.pie(category_sum.values, labels=category_sum.index, autopct='%1.1f%%')
plt.title('月度消费分类占比')
chart_path = 'category_pie.png'
plt.savefig(chart_path)
plt.close()
# HTML模板
template_str = """
月度账单报告
月度账单分析报告
分析时间: {{ time }}
总支出: ¥{{ total_amount }}
消费分类
异常支出提醒
{% if anomalies %}
{% for item in anomalies %}
- {{ item.time }} - ¥{{ item.amount }} - {{ item.description }} (原因: {{ item.reason }})
{% endfor %}
{% else %}
无异常支出。
{% endif %}
"""
template = Template(template_str)
html_content = template.render(
time=pd.Timestamp.now().strftime('%Y-%m-%d %H:%M:%S'),
total_amount=df['amount'].sum(),
chart_path=chart_path,
anomalies=anomalies
)
with open(output_path, 'w', encoding='utf-8') as f:
f.write(html_content)
print(f"报告已生成: {output_path}")
报告保存为HTML,可以在浏览器中打开查看。
第三步:运行脚本,查看结果
把以上代码整合成一个主函数,运行即可:
def main():
df = load_bills()
if df.empty:
print("未找到账单文件,请检查./bills/文件夹。")
return
df = categorize_bills(df)
anomalies = detect_anomalies(df)
generate_report(df, anomalies)
print("分析完成!打开report.html查看报告。")
if __name__ == '__main__':
main()
完整代码已上传到我的GitHub(链接在文末),你可以直接下载使用。
注意事项和优化建议
- 数据隐私:账单包含敏感信息,建议在本地运行脚本,不要上传到云端。
- 分类准确性:关键词分类可能不完美,你可以根据账单描述手动调整规则,或考虑用NLP模型改进。
- 扩展功能:可以添加月度趋势对比、预算提醒、自动邮件发送报告等功能。
- 错误处理:支付宝/微信的CSV格式可能更新,如果脚本报错,检查字段名是否匹配。
我用了这个AI智能体几个月,每月省下至少30分钟,还能清晰看到钱花哪儿了。它帮我发现过几次忘记的订阅扣费,挺实用的。
总结
通过Python脚本实现AI智能体管理家庭账单,核心步骤是:导出CSV、用pandas处理数据、基于规则分类和检测异常、生成可视化报告。代码简单易修改,你可以根据自己的需求定制。自动化后,理财变得更轻松——试试看,让你的AI助手帮你管账吧!
(完整代码和示例文件:GitHub链接)
本文来源:一江山水的随笔
本文地址:https://blog.298.name/post/192.html
主要内容:AI智能体帮我管账:每月自动分析微信/支付宝账单,生成可视化报告
版权声明:如无特别注明,转载请注明本文地址!
博主有点懒,啥也没写!
