编注: 本文是「2024 年度征文」共创赛道的入围文章。文章代表作者个人观点,少数派仅对标题和排版略作修改。


前情提要 & 引子

在之前的文章中「自我记录、量化与回溯的数字之旅」,我提到了在用过一段时间的记账类 App 之后,逐步转变为以支付宝为主要支付手段,通过查看支付宝账单来对个人支出行为进行分析。

渐渐地,我转变思路,尝试将生活中大部分消费通过支付宝完成,然后通过支付宝的账单看每个月的支出金额和种类,这个策略足够简单和有效,而且确实做到了高度自动化,目前还在坚持。

不过由于无法避免微信支付的使用以及通过银行卡的一些消费,支付宝的账单分析仍无法做到对个人消费记录的完全覆盖。

然而,支付宝的产品经理仿佛有种魔力,你觉得好用的功能,他总喜欢改来改去。在 2025 年初这个时间节点,当你点开「支付宝-设置-账单-收支分析」时,你会看到在最显眼的上方跳动着一些奇怪的东西,明晃晃地写着「日常贴纸待领取」。我实在不知道这类贴纸的受众在哪里,甚至我用瑞幸 App 点咖啡的时候我还挺喜欢勋章系统,但是对于支付宝的贴纸,我却一点提不起兴趣(插个眼,万一以后打脸真香了)。

当然,你也可以点击右上角回到旧版账单,但是平心而论,新版的账单还更新了不少实用的功能,包括:

  • 月支出对比,即相对于上月变化了多少
  • 日支出的日历显示(但是很遗憾并没有做成颜色热力图)
  • 大额消费集中展示
  • 年度支出排行

甚至针对交通出行、餐饮美食等还做了更细致的自动分类,但并不是每笔都准确,如果你关注这个,最好每笔都确认一下。然而,我在使用过程中逐渐觉得支付宝自带的账单还是有点没达到预期,对于我的消费行为不能做到更精准的分析和解读,以及切换年份月份时,实在是有点繁琐。 

刚巧最近 AI 编程非常火,我从去年 11 月开始种草并开始使用 cursor,已经有了一些搭建小项目的经验。既然支付宝的账单展示我不满意,那不如我自己来,把它做成我喜欢的样子。

开干 - 账单导出与结构解析

既然选择自己干,那首先需要拿到原始数据,这点支付宝做的还是不错的,账单界面右上角点击可以开具交易流水证明,选择用于个人对账,再选择交易流水的范围(最长可选 1 年,因此建议按年导出),点击下一步,输入邮箱,便可以将 csv 文件发送到个人邮箱。同时,邮件附件压缩文件下载后,要再回到开具记录里面查看解压密码,防止发错邮箱造成的个人信息泄漏。

如何获取支付宝账单

解压后便得到一个 csv 文件,我建议按年份命名为「alipay_record_2024.csv」格式,到这一步,恭喜你已完成所有前置准备工作。打开csv文件,除了最上面的表头部分,下方的表格信息包括:交易时间、交易分类、交易对方、对方账号、商品说明、收/支出、金额、收/付款方式、交易状态、交易订单号、商家订单号、备注。

账单原始文件格式

这些信息足够详细,接下来就是通过工具来处理和展示账单内容。由于我并非程序员出身,之前只在学校用过 MATLAB 处理实验数据,所以我选择使用简单的 Python 与 Flask 来搭建网页前端。基本的逻辑是,通过一个 Python 脚本持续运行,读取本地 csv 文件,进行数据切分和筛选,并将分析结果在网页上展示。

编程方面的工作我不详细展开,因为我基本上也没写一句代码,全程使用 cursor composer 搭配 claude-3.5-sonnet 进行代码生成与修改,主打一个用谈话的方式进行编程。期间由于自己编程经验的不熟悉,以及技术栈选择的不到位,绕了一些弯路,或者是和 composer 一直反复修改某个功能却还是失败。

好在花了几天时间,勉强拼凑出一个半成品,也尝试部署到 pythonanywhere 以供各位体验。那么接下来,各位,让我介绍一下这款自制的支付宝账单分析工具。

界面简介

登录网站「支付宝账单分析」,网页主要由左侧导航栏以及右侧主界面组成。导航栏分为首页、年度总览、月度分析、分类分析、时间分析、消费洞察、交易记录以及设置,点击导航栏按钮会跳转到各页面,左下角有一个筛选菜单,用于筛选全部交易、仅大额交易、仅小额交易。网站整体 UI 参照 Apple Design 的风格,图表部分基于 Apache ECharts 进行搭建,鼠标置于图表具体区域都可展示对应元素的悬浮信息,交互性尚可。

首页有简单的功能介绍,下方可点击上传账单文件。点击后会跳转到设置界面,可以进行文件的上传和管理。

网站首页

设置界面包含了如何获取支付宝账单的说明,点击上传文件按钮选择 csv 文件即可,支持多个文件上传。数据方面,默认会话时长 30 分钟,计时结束后自动删除缓存与各项数据,也可点击下方按钮手动进行删除。如果对数据安全有疑虑,还可以将项目克隆到本地运行,代码已上传到 GitHub(alipay_record_analysis),记得给个 star。

设置-文件管理界面

年度总览 & 月度分析

文件上传成功后,点击「年度总览」页面,就能看到按年统计的收支信息以及按月份排列的趋势图。上方有一个年份选择器,点击左右按钮可以切换不同的年份。统计信息展示了年度收入与支出、交易笔数以及与前一年的对比。下方则是支出趋势图和支出分类情况,直观地展示了支出的变化。趋势图的右上角有一个支出/收入切换按钮,点击后趋势图和下方饼图会进行切换。

年度总览-概况&支出趋势
年度总览-支出分类

「月度分析」页面的功能与年度总览类似,不过时间单位变成了月份。支出趋势则按天展示。通过这些页面,可以轻松看到每年、每月甚至每天的支出变化情况,以及支出类别占比。当然这只是最浅显的数据展示,为了洞悉自己的消费行为,我们还需要更进一步。

月度分析-概况&支出趋势
月度分析-支出分类

弹窗交互

传统的账单分析工具往往交互性不够强,这也是我觉得支付宝账单分析不够理想的原因之一。既然是自建的工具,我便希望按我的使用习惯加强交互性。在此,我引入了第一个全局交互,弹窗表格。具体来说,我们可以在任何图表界面的元素上(例如趋势图的柱状条、饼图的扇区、热力图的格子等)点击,弹出详细的交易信息。

例如,在 2023 年的每月支出趋势中,我发现某个月支出异常高,便可点击柱子区域,展开弹窗,便可看到当月的所有支出明细,点击弹窗的右上角可选择按支出或按金额排列,便可看到当月支出最大的几笔消费。这个功能可以快速展开图标的详细信息,方便回顾消费状况。

弹窗展示支出明细

筛选交互

而第二个全局交互,是左下角的悬浮菜单,可用于筛选大额和小额交易(以 1000 元为分割线)。点击后,网站上的所有数据和图表都只会显示筛选后的结果。例如:

  • 在弹窗界面,我点击「仅大额交易」后,就只会显示超过 1000 元的交易。
  • 在年度、月度包括后续的各个界面,点击「仅小额交易」,统计信息、支出趋势以及支出分类中,都只会包含金额小于 1000 元的交易的信息,方便查看小额交易的情况。

这是因为大额交易往往是不定期的,会破坏一定程度上的趋势走向和分类占比,通过这个筛选菜单可以将大额和小额交易分离开,方便我从两个维度对我的消费行为进行分析。

弹窗中筛选显示-仅大额交易

如下图通过筛选 2023 年的仅小额交易,基本可以看到每个月的基本生活开支,处于比较稳定的位置,2 月与 3 月处于过年期间,各类开支不高,而 8 月的消费增加则是由于出门旅行。

年度页面筛选显示-仅小额交易

总之,有了弹窗筛选这两个交互,我可以在任意界面元素点开我感兴趣的内容,并分离大额和小额交易来进行分析,这带来的体验和功能提升让我回顾数据和分析消费行为的效率大大增加。

分类分析

通常分析账单,我会关注两件事:

  1. 吃的等必要消费花了多少
  2. 数码产品等额外消费花了多少

而这里就要说到,支付宝的账单相比于微信账单的两个优势,一个是单次导出范围可以选择一年,而微信只有 3 个月。第二个便是支付宝导出的账单包含了分类相关的信息(来自支付宝的自动分类,也可以自己在 App 中手动更改),而微信只有交易类型的信息(如商户消费、转账、二维码付款),参考价值不大。

因此,针对支付宝的分类信息,我制作了「分类分析」页面,这个页面主要实现针对分类的各类分析。首页最上方为分类卡片,鼠标移到分类卡片上便会弹出所有分类以供选择,默认展示餐饮美食分类。

选择分类界面

该页面下的数据均来自于卡片中选顶的分类,以餐饮美食为例,上方与年度页面类似,显示一些支出概况,包括支出金额,占比,月均支出和消费频率。下方则是支出趋势图,显示每月支出金额的变化,以及在该月的占比变化(某种意义上的恩格尔系数),这个曲线可以反映我日常饮食开销状态。

分类分析-餐饮美食-年视图

分类分析页面上方有年份选择器,以及右侧有时间范围切换按钮,可以切换显示「所有/年度/月度」。切换到月度界面则是会显示日趋势图,如此,某天是下的小馆子还是吃的餐厅便一目了然。

分类分析-餐饮美食-月视图

分类分析页面往下拉,还有一个消费规律分析图,展示的是当前时间范围下分布在全天 24 个小时内的整体消费数据,比如你可以看到我是个早餐基本不花钱(不吃或家里吃),午餐钱花的不多,但是出去吃是挺多的,晚餐则是聚餐的重灾区。当然这更像是当代打工人代表。

餐饮-消费规律-2024

这个时候倘若我往前翻一下,便可以看到学生时代的我(2019 年)明显更舍得在午餐上花钱。

餐饮-消费规律-2019

再往下翻,则是金额的分布图,可以明显看到 0-50 元之间的消费,占据了我餐饮的大部分,超过 500 的则是极少数。这明显也是社畜代表性特征,这意味着即使参加好朋友饭局,我可能也不是付钱的那位,而是事后默默支付群收款。(当然,也可能餐饮相关的支出一部分在微信里,导致信息展示不完全)

餐饮-金额分布

当然,如果你对某个时间或金额内的具体支出行为感兴趣,也可以点击弹窗展开交易明细,明细就仅包含了当前时间或当前金额范围内的交易。如下图,就展示了 0-50 内的餐饮美食交易。

餐饮美食 0-50 元交易明细

说完餐饮美食,我另一个关注的分类便是数码电器,因为大额的剁手很可能都在这个分类中。切换到数码电器后,趋势图中基本可以看到我在哪几个月买了数码设备,对某个月的支出感到奇怪,便直接点柱子查看详细内容,具体详情便不再赘述。

分类分析-数码电器

时间分析

在「时间分析」页面,我添加了类 GitHub 风格的热力图,展示一年的支出行为变化,右上角可点击切换支出金额/收入金额/交易笔数。当然,点击任意格子,也可以弹窗显示当日消费详情。下方为日内时段分布,与分类分析页面类似,只不过以年为单位包含所有消费。

支出日历热图以及消费时段分布

最下方为「工作日/周末」的消费分布,可以粗略地看到各个分类在工作日以及周日消费的占比。例如,服饰装扮、美容美发类消费通常集中在周末,而餐饮则在平时和周末都有较大支出。

工作日/周末分布

消费洞察

接下来做了一个探索性的「消费洞察」页面,核心是依据消费的分类、时间、商家等规律,为用户展现一个消费者画像。不过目前只做了少数的功能,包括消费画像、最常光顾、消费场景、消费习惯等,还没有特别好的想法或者理好页面的核心逻辑,暂时先放着玩玩。

交易记录

最后一个分析类页面是交易记录,里面其实就是 csv 表格内容在网页端的展示,虽然目前该页面的筛选和搜索功能尚未完成,但基本的展示功能已经可以满足初步查看原始交易记录的需求。

交易记录页面

小结

这个项目从一开始的「一厢情愿」「自娱自乐」,到「觉得做得还可以」「有了一丝分享欲」,再到「做个网页 demo 好麻烦啊」「UI 细节的优化真的磨人」,最后「和自己和解」,「勉强接受目前的不足」,「先让项目核心组件运行起来」。最终在开始的一周之后,跟着文章一起捧到了大家面前。

我不是一个职业的程序员,也完全不以程序开发为主业,甚至这个项目还是我 github 上第一个上传的公开项目,就在今天晚上我还在问 ChatGPT GIT到底怎么用。项目初期的开发异常顺利,然而各种需求没有在一开始就整理好,因此留下了许多屎山代码,到后面改动一个小功能可能就要改动整个逻辑或接口,因此反而拖慢了很多进度。

然而过程或许略显枯燥,偶尔甚至有些痛苦,但是每次我把更新后的 demo 发给朋友去体验,那种兴奋确实无与伦比的。

回到账单分析这个话题上,我在做这个工具的时候无数次问自己,这样子有用吗,跟我抱有一样理念的人有几个呢,又有几个愿意如此麻烦地下载支付宝账单文件来体验一下呢?我分析的理念对吗,又或是我真的相比官方实用多少呢?这些都不得而知,但是我心中可能已经有了答案。

账单不只是消费的记录,也是我生活的记录。

使用的过程中,我经常惊喜或惊讶地发现,某年某月某日,我竟然干了某件事,然而我却早已忘得一干二净。在马上要步入而立之年的年纪,生活经常就是三点一线的日常,纷扰的信息、爆炸的新闻无不在吸引我的眼球,消耗我为数不多的记忆力,占据着我的脑子。5年前的今天,我在干嘛呢,喝了杯奶茶,还是看了场演唱会,或许账单能帮我找到答案,也或许找回一丝年少的记忆。

未完待续

项目整体堪堪可用,不足之处略多,如若各位感兴趣,请多提意见,谢谢!为了满足自己奇怪的偏好,应该还会对工具持续进行更新。

> 关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀