银行流水有什么用(银行流水作假)

]: for k,v in pathlen[node].items(): # 找出路径中最长的路径 if (v==max(pathlen[node].

# -*- coding:utf-8 -*-import networkx as nximport pandas as pdfrom pyvis.network import Networkif __name__ == '__main__':    # 读取流水数据    df_trade = pd.read_excel(r'C:\Users\wuchao\Desktop\test.xls',converters={'转账日期':str})    # 交易是有方向的 按照方向提取数据生成图 转入转出分别生成有向图digraph    G1 = nx.from_pandas_edgelist(df_trade.loc[df_trade['转出转入标志']=='转出'],                                 source='客户名称',target='对方客户名称',                                 edge_attr=['转账日期','转账金额'],                                 create_using=nx.MultiDiGraph())    G2 = nx.from_pandas_edgelist(df_trade.loc[df_trade['转出转入标志']=='转入'],                                 source='对方客户名称',target='客户名称',                                 edge_attr=['转账日期','转账金额'],                                 create_using=nx.MultiDiGraph())    # 合并两个子图    G = nx.compose(G1,G2)    # 计算点的 中介中心性(Betweeness Centrality)    betweenness = nx.load_centrality(G)  # 取中介中心性最大的5个点    print(sorted(betweenness.items(),key = lambda x:x[1],reverse=True)[0:5])    # 转为dict存储 后续用于可视化设置点大小    keynodesdict = dict(sorted(betweenness.items(),key = lambda x:x[1],reverse=True)[0:5])    # 定义用于存储最短路径中边的list    # 后续用于标注路径中这些边的颜色    specEdges = []    # 计算点和其他点的路径长度    pathlen = dict(nx.shortest_path_length(G))    # 找出以'N0','N1'为源头的路径中最长的路径    for node in ['N0','N1']:        for k,v in pathlen[node].items():        # 找出路径中最长的路径            if (v==max(pathlen[node].values())):        # 找到最远的目标点,然后将源头和目标点之间的最短路径都提取出来        # 没有考虑日期因素                for p in nx.all_simple_edge_paths(G,source=node,target=k):                    for i in range(0,len(p)-1):                        e1 = p[i]                        e2 = p[i+1]                        e1_date = (G.get_edge_data(e1[0],e1[1])[e1[2]]['转账日期'])                        e2_date = (G.get_edge_data(e2[0],e2[1])[e2[2]]['转账日期'])                        # 考虑日期因素                        # 如果后一手的转账日期小于前一手 则路径就到当前为止                        if e1_date>e2_date:                            p = p[0:i+1]                            break                            # 显示有效路径 并存入最短路径list                            print(p)                            specEdges = specEdges + p                            # 不同的路径中 边有重复 去重                            specEdges = list(set(specEdges))    net = Network(height='800px', width='800px', directed=True, heading='资金网络')    # 由于两点之间有多条边 必须设置参数    opts = '''var options = {"physics": {"minVelocity": 0.5,"solver": "forceAtlas2Based"}}'''    net.set_options(opts)    # 边的标签设置为转账日期    for edge in G.edges(data=True):        edge[2]['label'] = edge[2]['转账日期']# 边的光标悬停提示设置为转账金额    for edge in G.edges(data=True):        edge[2]['title'] = str(edge[2]['转账金额'])+'元'# 根据点中介度大小设置点的尺寸    for k,v in keynodesdict.items():        G.nodes[k]['size']=10*(v/min(keynodesdict.values()))# 根据点中介度大小设置最大三个点为红色    for k,v in list(keynodesdict.items())[0:3]:        G.nodes[k]['color']='red'# 将找出来的边标注为红色    for edge in specEdges:        G.edges[edge]['color']='red'    net.from_nx(G)#输出并生成demo2.html    net.show('资金可视化追踪.html')
「数据分析」银行对账单资金交易流水分析

转载:https://www.shangyexinzhi.com/article/5089895.html

转载:http://sjj.jingzhou.gov.cn/sjzc/sjlt/202210/t20221025_790922.shtml

关键词: edge 路径 nx
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 931614094@qq.com 举报,一经查实,本站将立刻删除。
银行流水有什么用(银行流水作假)文档下载: PDF DOC TXT