今天咱们来聊聊一个很多人可能都面临过的问题——个人财务管理。尤其是对于我们这些已经完全依赖手机支付的年轻人来说,手机里满满的消费记录,怎么看都觉得应该理清楚点。
问题是,支付宝和微信这两个“支付大佬”互不搭界,数据也没法直接对接。这也就导致了一个尴尬的局面:即使我们已经有了海量的消费数据,却难以便捷地对这些数据进行管理和分析。难道我们要一条一条地手动记录和分析这些账单吗?显然,时代已经不允许我们这么做了。
那么,如何有效地管理这些财务数据呢?今天,我想通过一个简单的Python实现,带大家将支付宝和微信的账单数据导入到Notion,这样你就能把所有的数据都集中管理,方便后续分析。
Notion不仅仅是个笔记工具,它还可以用来构建个人财务管理系统。它的优点就在于,可以将来自不同来源的数据整合到一起,进行统一管理和可视化分析,甚至还可以自动化导入,省去了手动录入的麻烦。
1. 获取财务数据
1.1 获取支付宝账单
支付宝的账单下载其实挺简单的,只要登录支付宝,点击“交易记录”就可以看到相关的账单。
然后选择需要的日期范围,下载Excel格式的账单,得到的文件一般是CSV格式的。打开CSV,你会看到一大堆信息,别担心,我们的目标是提取我们需要的部分。
1.2 获取微信账单
微信的账单获取稍微复杂一点。你得打开微信,进入“服务”菜单,点击“钱包”,然后在右上角找到账单,下载账单。这时微信会要求你填写邮箱,账单会通过邮件发送给你,邮件里附带的压缩包密码则通过微信通知发送。下载后,解压得到的文件是CSV格式,同样也可以进行分析。
2. 获取Notion的API秘钥
2.1 获取秘钥
为了将数据导入Notion,我们需要通过API与Notion进行交互。首先,访问Notion Developers,登录你的Notion账号,并创建一个新的Integration,填写好名称后提交。
2.2 关联页面
在Notion里,找到你想要导入数据的数据库页面,确保你的页面和API进行了关联。这样,你的数据就可以顺利地流入Notion的数据库。
2.3 创建数据库
为了方便存储和管理账单数据,最好按照我提供的模板来创建数据库。模板会包含像“交易时间”、“金额”、“交易对方”、“交易方式”等字段,方便后续分析。
3. 代码编写
3.1 导入Python库
在Python中,我们需要用到pandas
和requests
库。pandas
是用来处理数据的,而requests
则是用来与Notion API交互的。
import pandas as pd
import requests
3.2 删除干扰数据
由于账单数据中可能有很多不需要的信息(例如退款记录等),我们要进行数据清洗。下面是清洗支付宝账单的代码:
def alipay_method(path):
alipay = pd.read_csv(path, encoding='gbk')
alipay = alipay.iloc[:, [8, 7, 9, 2, 10, 11]] # 只取需要的列
alipay.columns = ['name', 'company', 'money', 'time', 'status', 'method']
alipay['time'] = pd.to_datetime(alipay['time'])
alipay = alipay.replace(' ', '', regex=True)
alipay = alipay.loc[alipay['method'].isin(['交易成功', '等待确认收货'])]
alipay = alipay.loc[alipay['status'].isin(['支出', '收入'])]
alipay['method'] = '支付宝'
alipay['time'] = alipay['time'].dt.strftime('%Y-%m-%dT%H:%M:%S')
return alipay
同样,对于微信账单,我们也可以进行类似的清洗操作:
def weixing_method(path):
weixing = pd.read_csv(path)
weixing = weixing.iloc[:, [3, 2, 5, 0, 4, 7]] # 只取需要的列
weixing.columns = ['name', 'company', 'money', 'time', 'status', 'method']
weixing['time'] = pd.to_datetime(weixing['time'])
weixing = weixing.replace(' ', '', regex=True)
weixing = weixing.loc[weixing['status'].isin(['支出', '收入'])]
weixing['money'] = weixing['money'].replace('¥', '', regex=True).replace(',', '', regex=True).astype('float')
weixing['method'] = '微信'
weixing['time'] = weixing['time'].dt.strftime('%Y-%m-%dT%H:%M:%S')
return weixing
3.3 格式化数据
为了能够向Notion数据库导入数据,我们需要将账单数据格式化为JSON格式。下面是格式化账单数据的代码:
def get_json(name, company, money, time, status, method, database_id='your_database_id'):
if method == '支付宝':
color = 'blue'
else:
color = 'green'
if status == '收入':
color1 = 'green'
else:
color1 = 'red'
pay_json = {
"parent": {"type": "database_id", "database_id": database_id},
"properties": {
"交易额度": {"type": "number", "number": money},
"交易时间": {"type": "date", "date": {"start": time + ".000+08:00"}},
"支入支出": {"type": "status", "status": {"name": status, "color": color1}},
"交易对方": {"type": "rich_text", "rich_text": [{"type": "text", "text": {"content": company}}]},
"交易方式": {"type": "status", "status": {"name": method, "color": color}},
"商品名称": {"type": "title", "title": [{"type": "text", "text": {"content": name}}]}
}
}
return pay_json
3.4 向Notion导入数据
将数据成功格式化后,我们就可以通过以下代码将数据发送到Notion数据库:
def send_data(pay):
error = []
for i in pay.index:
name = pay['name'][i]
company = pay['company'][i]
money = pay['money'][i]
time = pay['time'][i]
status = pay['status'][i]
method = pay['method'][i]
json_data = get_json(name, company, money, time, status, method)
response = requests.post('https://api.notion.com/v1/pages', json=json_data, headers=headers)
if response.status_code != 200:
error.append(f"Error in adding {name} to Notion.")
return error
结语
通过这套方法,你可以轻松将支付宝和微信的账单数据导入到Notion,实现个人财务的自动化管理。
不仅能减少手动输入的错误,还能让你随时随地查看自己的消费状况,帮助你做出更理性的消费决策。这种方法简单、高效,适合现代忙碌的程序员,毕竟谁不希望自己的财务管理也能像代码一样精准和自动化呢?
-END-