网易首页 > 网易号 > 正文 申请入驻

分享一个流水穿透工具

0
分享至

以前发过一个流水穿透闭环工具,传送门:银行流水闭环核查工具

那个是我用VBA写的,可以指定一个终点,穿透所有从起点账户到终点账户的路径,这个工具主要有几个问题:

一是没有考虑时间因素,比如5号A→B,3号B→C,这条路径应该是错的(资金的时间先后),但还是被穿出来了;

二是必须要设置一个终点,如果我想看所有的流水是怎么发散的,看不到;

三是可视化程度比较一般

对于第一个问题,我其实琢磨过很久,如果流水的完整性不能保证的话,日期其实没有太大意义,比如5号A→B,3号B→C,如果考虑日期先后,那么这个路径就不成立了,但万一是因为你少要了一张卡的流水,或者他取现了,缺了2号A→B的数据呢,那么实际应该穿透的反而没有穿透出来..不过完全不考虑日期也有点说不过去..

这次利用了自己的服务器,重写并部署了一个可视化的流水穿透工具给大家免费使用,大概长这样↓

看似比较乱... 别急,接着看↓

01

首先鼠标放在账户的节点(节点就是这个圆圈,代表这个账户)上,可以显示所有他所在的路径(计算了时间先后顺序),比如这里右下角的U账户↓

02

其次,我们可以看到节点有大小之分,颜色深浅之分,线有粗细之分

节点的大小,代表他的边数,最大的点,代表经过他的线是最多的,也就是资金汇集或者分发的地方,比如这个这个最大的节点,选中的时候他所关联的线都会加粗显示↓

03

节点颜色的深浅,是使用了pagerank算法计算的重要度,pagerank算法是谷歌搜索引擎的网页排序算法,可以用在有向图上,感兴趣的可以去搜索一下这个算法,颜色越深代表这个账户在该算法的下的重要性越高。

当然,这个重要性也只是用来作为参考

04

在没有选中任何节点时,线的粗细代表他的金额,金额最大的线就是最粗的,比如这条最粗的线,全场最高,500W↓

05

可以利用筛选的功能,将我们关注的账户筛出来,比如在03图中,我看到了A→F→D这条线,想看看他们的情况,我可以在网页上方的筛选器中依次选择node(节点)-id(名称),并多选账户名↓

或者我想看一下所有与E账户有关的路径,那么筛选edge(边)-from/to-E账户,筛选两次↓

06

最下面还有一些图的物理属性可以设置,比如线的长短,松紧度等等,可以自己玩玩↓

所以这个图看起来好像挺乱,但是配合这些要素,可以比较轻松地浏览一个大概出来,再配合筛选去详细看他们的交易应该能省掉一些翻流水的时间

下面是使用方法:

1.打开流水的填写模板,把信息填进去并保存

2.填完以后打开网页,选择刚保存好的模板,点击预览,即可在线看到解析结果,点击下载即可将文档(html网页文件)下载到本地

注意:

这个解析工具是部署在我自己的服务器上,因此数据是需要上传到我的服务器进行解析的,由于流水是非常敏感的数据,大家肯定在数据的安全性上有更多的考虑,毕竟如果我自己,当我得知什么账套啊,流水数据要上传到别人的服务器解析,那我是坚决不会用的

因此,我在流水的模板中又写了一个混淆的功能,点击混淆-字母,会将本方、对方账户名全部用A、B、C等字母替换,点击混淆-数字会自动生成6位随机数替换账户名,以此完成自动化脱敏,大家按自己心情选择一种混淆方式就行,然后把混淆字典存好备查

混淆后会生成字典↓

混淆的代码可以直接打开VBE编辑器(ALT+F11)查看,动没动手脚一看便知↓

如果你既不想混淆,又过于谨慎.. 又想用..

那么写好的代码直接给你,你用python自己跑一下也行


# -*- coding: utf-8 -*-import networkx as nximport pandas as pdimport matplotlib.pyplot as pltfrom pyvis.network import Network
def cmap_to_hex(cmap, value):rgba = cmap(value)r, g, b, a = int(rgba[0]*255), int(rgba[1]*255), int(rgba[2]*255), int(rgba[3]*255)return f"#{r:02x}{g:02x}{b:02x}"
def is_time_ordered(date_list):for k in range(0, len(date_list) - 1):if date_list[k] > date_list[k + 1]:return Falsereturn True
df = pd.read_excel('资金穿透模板.xlsm','数据源')G = nx.MultiDiGraph() # 创建多边有向图grouped = df.groupby(['本方账户', '对方账户', '日期'])['支出'].sum() # 汇总grouped2 = df.groupby(['本方账户', '对方账户', '日期'])['收入'].sum() # 汇总
max_value = grouped.max()min_value = grouped.min() # 获取最小值weight_factor = 3 / (max_value - min_value) # 假设边的最大宽度为 3
for index, value in grouped.items():source, target, dated = index # 解包得到分组的键date = dated.strftime('%Y-%m-%d')if value != 0:weight = int(value * weight_factor) # 根据金额计算边的粗细amount_str = "{:,.2f}".format(value) # 显示千分符G.add_edge(str(source), str(target), amount=amount_str,prev=str(source) + '→' + str(target) + ':' + str(amount_str) + ',时间:' + date,weight=weight, date=date)

for index, value in grouped2.items():target, source, dated = index # 解包得到分组的键date = dated.strftime('%Y-%m-%d')if value != 0:weight = int(value * weight_factor) # 根据金额计算边的粗细amount_str = "{:,.2f}".format(value) # 显示千分符G.add_edge(str(source), str(target), amount=amount_str,prev=str(source) + '→' + str(target) + ':' + str(amount_str) + ',时间:' + date,weight=weight, date=date)

nodesize = dict(G.out_degree) # 节点大小max_Ns = max(nodesize.values())node_sizes = {}node_size_scale = 800
edgecount = nx.pagerank(G, alpha=0.85) # 颜色深浅cmap = plt.get_cmap('YlOrRd')
net = Network(height='800px', width='100%', directed=True, notebook=True, filter_menu=True) # filter_menu=True notebook
# 拿到所有路径的列表path_list = []for node in G.nodes:try:paths = nx.shortest_path(G, source=node)path_list.extend(paths.values())except:pass
# 将包含该节点的穿透路径(考虑时间)添加title信息for node in G.nodes:path_node_list = [] # 包含该节点的所有路径for path in path_list:if node in path:path_node_list.append(path)
# 拿了该节点所有路径以后,判断时间,加载到titlenode_path_str = []for i in range(0, len(path_node_list) - 1):
if len(path_node_list[i]) > 1: # 如果子列表有2个元素,才开始遍历,判断时间date_list = []for j in range(0, len(path_node_list[i]) - 1):st = path_node_list[i][j]ed = path_node_list[i][j + 1]edge_data = G.get_edge_data(st, ed) # 拿到所有两个节点的路径
edge_minindex = min(edge_data, key=lambda x: edge_data[x]['date'])min_date = edge_data[edge_minindex]['date'] # 拿到所有路径中的最小日期date_list.append(min_date)
if len(date_list) == 1: # 如果时间列表只有一个,那么只有2个节点,不用判断时间对穿透的影响,直接添加node_path_str.append(path_node_list[i])else:if is_time_ordered(date_list): # 如果时间列表超过一个,那么从前向后判断时间是否小于后者,满足要求再添加node_path_str.append(path_node_list[i])
node_path_title = '\n'.join([' -> '.join(map(str, node_path)) for node_path in node_path_str])net.add_node(node, value=nodesize[node] / max_Ns * node_size_scale,color=cmap_to_hex(cmap, edgecount[node] / max(edgecount.values())),alpha=0.8, label=node, title=node_path_title)
for u, v, d in G.edges(data=True):# 添加边,并设置title属性net.add_edge(u, v, title=str(d['prev']), width=d['weight'], color='black',label=d['date'] + ":" + d['amount']) # ,label=d['date']
net.force_atlas_2based(spring_length=500, overlap=1, spring_strength=0.001)net.show_buttons(filter_=['physics']) # filter_=['physics']net.show('资金穿透.html')

温馨提示:加入审友交流群/转载/投稿请联系:审家小编 shenjizhijia1。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
卡佩罗谈大罗离开皇马:他每天都开派对,还鼓励大家和他一起玩

卡佩罗谈大罗离开皇马:他每天都开派对,还鼓励大家和他一起玩

直播吧
2024-06-20 00:08:06
新婚一个月,丈夫始终拒绝同房,妻子跟踪却发现惊天秘密……

新婚一个月,丈夫始终拒绝同房,妻子跟踪却发现惊天秘密……

极品小牛肉
2024-03-04 11:28:45
搞事?下一期《歌手》收视率要爆?导演组邀请了那英最不想见的人

搞事?下一期《歌手》收视率要爆?导演组邀请了那英最不想见的人

八卦王者
2024-06-20 15:29:36
中美正面硬刚!3艘055大驱迎战2艘美国航母,鹰击-21堪称航母杀手

中美正面硬刚!3艘055大驱迎战2艘美国航母,鹰击-21堪称航母杀手

战域笔墨
2024-06-17 19:41:38
突然暴雷,抛售10万亿!央行刚抛375亿,日本银行接力做空美债?

突然暴雷,抛售10万亿!央行刚抛375亿,日本银行接力做空美债?

财说得明白
2024-06-20 19:02:10
嫦娥六号成功登月,NASA专家:等美开建月球基地,中国或已建50年

嫦娥六号成功登月,NASA专家:等美开建月球基地,中国或已建50年

吾天
2024-06-21 02:05:33
1991年,中国总理奔赴远东招募苏联专家,从白俄罗斯淘回镇国神器

1991年,中国总理奔赴远东招募苏联专家,从白俄罗斯淘回镇国神器

干史人
2024-05-10 19:25:03
社会正在批量生产文盲和精神病!

社会正在批量生产文盲和精神病!

读史
2024-06-18 07:00:46
一辈子都被贵人保佑的 4 个生肖,寿命高享福不尽,心态还超好,日子过得神仙都羡慕 !

一辈子都被贵人保佑的 4 个生肖,寿命高享福不尽,心态还超好,日子过得神仙都羡慕 !

老六师傅
2024-06-20 22:10:24
【2024.6.20】贾静雯立场?墨雨云间播出效果?霍建华新戏?郭碧婷和苗苗关系?段奕宏在圈内咖位?

【2024.6.20】贾静雯立场?墨雨云间播出效果?霍建华新戏?郭碧婷和苗苗关系?段奕宏在圈内咖位?

娱乐真爆姐
2024-06-20 23:35:54
记者:路易斯、特谢拉、朱辰杰等7名球员没随申花出征佛山

记者:路易斯、特谢拉、朱辰杰等7名球员没随申花出征佛山

懂球帝
2024-06-20 22:11:09
上海市委书记、上海警备区党委第一书记陈吉宁简历

上海市委书记、上海警备区党委第一书记陈吉宁简历

探秘桂北
2024-05-03 00:11:57
18岁苏瑞·克鲁斯首次公开男友!共赴毕业舞会,情侣考入不同名校

18岁苏瑞·克鲁斯首次公开男友!共赴毕业舞会,情侣考入不同名校

译言
2024-06-20 09:40:56
人民日报:以为是养生,实际最耗气血的十大“好习惯”,有一个都可能摧毁健康!

人民日报:以为是养生,实际最耗气血的十大“好习惯”,有一个都可能摧毁健康!

每周文摘
2024-05-11 10:59:33
丈夫经常出差,61岁的邻居老汉,给了我做女人从未有过的幸福

丈夫经常出差,61岁的邻居老汉,给了我做女人从未有过的幸福

娱乐洞察点点
2024-06-19 23:15:33
“女魔头”金与正:手段狠辣让朝鲜恐惧,能左右哥哥金正恩的想法

“女魔头”金与正:手段狠辣让朝鲜恐惧,能左右哥哥金正恩的想法

洞鉴历史
2024-01-26 15:20:21
财政破产,亡国之兆

财政破产,亡国之兆

求实处
2024-05-10 23:05:43
收割亚洲失败,日本大举抛美债,万亿美债无人敢接,耶伦紧急警告

收割亚洲失败,日本大举抛美债,万亿美债无人敢接,耶伦紧急警告

前沿天地
2024-06-20 19:54:03
38岁博尔特现状:与1米55女友生了3孩子,每年领400万美元至终身

38岁博尔特现状:与1米55女友生了3孩子,每年领400万美元至终身

十点街球体育
2024-06-17 17:25:31
姚明打了8个赛季NBA,一共拿到9802分,那他5年CBA生涯拿了多少分

姚明打了8个赛季NBA,一共拿到9802分,那他5年CBA生涯拿了多少分

兵哥篮球故事
2024-06-20 00:35:02
2024-06-21 04:02:44
审计之家
审计之家
审计从业人员交流学习社群
3824文章数 12614关注度
往期回顾 全部

科技要闻

小米SU7流量泼天,富贵却被蔚来接住了

头条要闻

欧洲杯:凯恩破门 英格兰1-1丹麦

头条要闻

欧洲杯:凯恩破门 英格兰1-1丹麦

体育要闻

千夫所指的关系户 成了拯救葡萄牙的英雄

娱乐要闻

叶舒华参加柯震东生日聚会,五毒俱全

财经要闻

楼市新“王炸”!释放何信号?

汽车要闻

售价11.79-14.39万元 新一代哈弗H6正式上市

态度原创

教育
时尚
艺术
房产
旅游

教育要闻

学霸的题目,当然要学霸来做了!学渣挤眉弄眼一个字都没写出来

当男人不耍帅时,就是最帅的时候(穿衣篇)

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

房产要闻

海棠湾!一所重量级国际学校真的来了!

旅游要闻

铁路儿童票新规 已有超4900万小旅客免费出行

无障碍浏览 进入关怀版