python进行高效记账的小工具

python进行高效记账的小工具

  • 现有记账工具梳理
  • 自己开发记账工具的思路
  • 记账工具代码简介
    • 1.建立3个数据库
    • 2.与数据库的交互
    • 3.提取数据
    • 4.添加交易对象
    • 5.生成财务报表
      • 5.1高频交易对象及金额报表
      • 5.2交易金额排名前20对象报表
        • 代码
      • 5.3按分类支出报表
        • 代码
  • 后续计划

现有记账工具梳理

对比 随手记 微信记账
优势 功能强大、报表丰富 自动记账
劣势 全手工录入、耗费时间,难以坚持;理财产品暴雷 私人订制功能少、无法自己定义类别、报表简单

那么有没有一款能结合两款产品优势的记账产品呢?
为此我尝试着自己做了一个

自己开发记账工具的思路

需求:

  1. 不能接受纯手动输入
  2. 能够有详细、可订制的分类
  3. 数据安全

开发思路:

  1. 微信支付的帐单批量下载;
  2. 通过python 、pandas将账单汇总;
  3. 对高频交易对象分类,将80%的交易按照对象自动分类;
  4. 设置金阈值,超过阈值8%的交易,手工分类备注;
  5. 利用pyechart 生成报表。

记账工具代码简介

1.建立3个数据库

数据库暂时先以csv格式保存,计划迭代后用mysql等专业数据库保存
数据读取时以dataframe的形式。

  • main_data

    • 交易流水的主数据库
    • index 为交易时间(微信支付时间戳最小单位为s)
    • columns:[‘交易对方’,‘收/支’, ‘金额(元)’, ‘支付方式’, ‘当前状态’,‘in_out_NO’]
  • trader_df

    • 交易对方 数据库(微信导出时将交易对象命名为“交易对方”,就不改了)
    • columns:[“交易对方”,“type01_num”]
  • type01_df

    • 管理支出分类
    • columns:[“type_01_num”,“type_01”]
    • 暂时只开发了一级分类,后期会根据需求增加二级分类
    • 该分类与 trader_df 绑定,每一个高频交易对象都会要求指定一个类别,这样就不用对每笔支出进行分类了。
    • 超过一定额度的交易,会强制要求进行再次确认,类似于你与食堂有一笔300元的交易,那么并不会自动归类为吃饭,还是会与你再次确认,是不是属于其他类别(人情往来等)
  • 收入_df (待开发)

  • 预算_df (待开发)

2.与数据库的交互


#建立basic——df的类
class Basic_Df():
    
    def __init__(self):
        
        self.path=[
            'basic_data/main_data.csv',
            'basic_data/trader_df.csv',
            'basic_data/type01_df.csv'            
        ]
        self.info='basic_df记录了是与基础数据调用的库'
    #导出数据
    def output_df(self,df_num):
        
        path=self.path[df_num]
        the_df=pd.read_csv(path,index_col=0)
        
        return the_df
    
    #导入数据
    def input_df(self,df_num,new_df):
        
        path=self.path[df_num]
        new_df.to_csv(path)
        
        return    

3.提取数据

微信支付数据提取

如上微信提取的为csv格式
提取csv格式数据


# 新增交易记录到main_data.csv
def get_data(path):
    """get data from path ,then put into main_data.csv

    Args:
        path (str): the path of add_data.csv
    """

    #导入新数据
    new_data=pd.read_csv(path,delimiter=",",skiprows=16,index_col=0)   
   
    #去掉金额列的 ¥金额 str格式转 float
    new_data['金额(元)']=(new_data['金额(元)']
                       .str.replace('¥','')
                       .astype('float'))
    #将交易对方 里的 “/”替换为 “ 微信红包退款 ”
    new_data.loc[new_data['交易对方']=='/','交易对方']='微信红包退款'
    new_data['in_out_NO']=1.0
    
    new_data.loc[new_data['收/支']=='收入','in_out_NO']=-1.0
    new_data.loc[new_data['收/支']=='支出','in_out_NO']=1.0
    new_data['金额(元)']=new_data['金额(元)']*new_data[

你可能感兴趣的:(小工具,python,pandas)