Python居然还能用到财务当中?数据清洗中的运用!无所不能的Py

Python居然还能用到财务当中?数据清洗中的运用!无所不能的Py

目前,江北区审计局数据分析小组运用Python语言对区级20个部门预算执行审计项目的多个部门财务数据进行了清理,相对其他数据清理工具,Python更加灵活、简洁、高效和准确。

由于我区各部门财务核算软件未统一,各单位财务软件类型和版本各异,会计科目设置及会计处理方式不一致,给我们进行数据分析带来了难度,导致我们不能直接将转换后的财务数据进行总体分析。根据审计目标和重点,在充分了解20个部门财务数据结构的情况下,我们利用Python工具按照《2017年政府收支分类科目》对财务数据中经济分类科目进行重新标记,便于从宏观层面分析各类经济科目的日常支出,例如将含有燃油费、燃料费、洗车费及过路过桥等关键词的科目统一标记为公务用车运行维护费。

进群:548377875  即可获取数十套PDF以及大量的视频教程!

一、 建立关键词表

按照《2017年政府收支分类科目》的支出经济分类科目以及可能出现的代表同类型的经济科目的词汇录入支出经济分类科目表中。如下图:

Python居然还能用到财务当中?数据清洗中的运用!无所不能的Py

扫描二维码关注公众号,回复: 4248633 查看本文章

二、 数据清理步骤

(一)在数据库中查询20个单位的会计凭证及辅助凭证创建审计中间表,以防止对原始数据产生影响,并添加经济分类编码、经济分类名称、整理标记三列,其中整理标记是辨别数据准确程度的标记。

(二)确定整理标记为两类,一是会计科目末级为经济分类科目末级且上一级科目为经济分类科目上一级的,标记为“一类”;二是会计科目末级虽为经济分类科目末级但上一级科目不是经济分类科目上一级的,标记为“二类”。

(三)代码执行过程。首先清空上述三列数据,遍历人工录入的支出经济分类科目表中的关键词,将对应的经济分类科目名称及编码标记到审计中间表中,依次标记到上述两类整理标记,已标记的不重复执行。

以下为Python执行代码:

import cx_Oracle

import datetime

import connection

# 连接数据库

def connect(user,pw,dsn):

return cx_Oracle.connect(user,pw,dsn)

# 清空待标记的列

def clean_e(table_name):

cur = conn.cursor()

sql_clean = """

update %s set 经济分类编码='',经济分类名称='',整理标记=''

"""%table_name

cur.execute(sql_clean)

conn.commit()

cur.close()

return True

def up_tb(tb_name,lx,sql_up):

tb_name = tb_name

cur = conn.cursor()

sql_ecode = """

select * from jbaudit2.支出经济分类科目

"""

cur.execute(sql_ecode)

re_fi = cur.fetchall()

for in re_fi:

kmlm = r[1]

kmkm = r[3]

gjc = r[4].split(',')

kmbm = r[5]

# 遍历支出经济分类科目表中每一行的所有关键词

for in gjc:

if lx=='一类':

# 更新凭证或辅助凭证中上级科目中包含经济科目大类,且会计科目名称或辅助科目名称与关键词完全一样的记录

sql_up_f = sql_up.format(tb_name=tb_name,e_code=kmbm,e_name=kmkm,ff_name=kmlm,f_name=i,lx=lx)

else:

# 更新凭证或辅助凭证中会计科目名称或辅助科目名称与关键词完全一样的记录

sql_up_f = sql_up.format(tb_name=tb_name,e_code=kmbm, e_name=kmkm, f_name=i,lx=lx)

cur.execute(sql_up_f)

record = cur.rowcount

update_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')

conn.commit()

# 导入日志记录到数据库

sql_insert = """

insert into uprecord(表名,更新时间,经济科目大类,经济科目名称,关键词,更新条数,类型) values('%s','%s','%s','%s','%s','%s','%s')

"""%(tb_name,update_time,kmlm,kmkm,i,record,lx)

cur.execute(sql_insert)

conn.commit()

cur.close()

# 更新表的sql语句

sql_up_one = """

update {tb_name} set 经济分类编码='{e_code}',经济分类名称='{e_name}',整理标记='{lx}'

where 会计科目编码 like '5%' and

会计科目全称 like '%'||'{ff_name}'||'%' and 会计科目名称='{f_name}' and 整理标记 is null

"""

sql_up_two = """

update {tb_name} set 经济分类编码='{e_code}',经济分类名称='{e_name}',整理标记='{lx}'

where 会计科目编码 like '5%' and

会计科目名称='{f_name}' and 整理标记 is null

"""

sql_up_th = """

update {tb_name} set 经济分类编码='{e_code}',经济分类名称='{e_name}',整理标记='{lx}'

where 会计科目编码 like '5%' and

会计科目全称 like '%'||'{ff_name}'||'%' and (会计科目名称='{f_name}' or 辅助科目名称='{f_name}') and 整理标记 is null

"""

sql_up_fo = """

update {tb_name} set 经济分类编码='{e_code}',经济分类名称='{e_name}',整理标记='{lx}'

where 会计科目编码 like '5%' and

(会计科目名称='{f_name}' or 辅助科目名称='{f_name}') and 整理标记 is null

"""

if __name__ == "__main__":

conn = connect(connection.user, connection.pw, connection.dsn)

a = clean_e('财务账凭证查询_20部门')

if a == True:

up_tb('财务账凭证查询_20部门''一类', sql_up_one)

up_tb('财务账凭证查询_20部门''二类', sql_up_two)

print('update 财务账凭证查询_20部门 is done!')

b = clean_e('财务账辅助凭证明细_20部门')

if b == True:

up_tb('财务账辅助凭证明细_20部门''一类', sql_up_th)

up_tb('财务账辅助凭证明细_20部门''二类', sql_up_fo)

print('update 财务账辅助凭证明细_20部门 is done!')

conn.close()

标记结果图展示:

Python居然还能用到财务当中?数据清洗中的运用!无所不能的Py

三、成果运用

清理后的数据表格式统一,能够对20个部门的经济活动进行总体分析,可实现对20个部门总支出以及每一类经济分类的横向比对,计算出人均、车均数据,发现疑点,分散核查,确保审计结果的准确性。

猜你喜欢

转载自blog.csdn.net/qq_42156420/article/details/84442652
今日推荐