前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python实现之数据血缘关系,by networkx

python实现之数据血缘关系,by networkx

作者头像
python与大数据分析
发布2022-03-11 16:51:04
发布2022-03-11 16:51:04
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

最近在进行数据逆向分析,无业务无界面无数据库的情况下,想通过对存储过程中关于输出输入表的分析快速了解业务的核心问题,然后再对核心业务进行逆向回溯。

其实问题很简单,一个存储过程会有多个输入表和输出表,一个存储过程的输出表可能会成为另外一个存储过程的输入表,从而将整个数据库的业务逻辑串接起来,基于长链会形成血缘关系,基于关联会形成聚合。

这里需要构造的节点数据和连接数据,节点数据是输入表和输出表剔重后的编号和标签,连接数据通过存储过程标签将节点数据进行关联。

代码之前有测试过,所以这次实现无太多需要讲解。

代码语言:javascript
代码运行次数:0
运行
复制
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#                     _ooOoo_
#                   o8888888o
#                    88" . "88
#                 ( | -  _  - | )
#                     O\ = /O
#                 ____/`---'\____
#                  .' \\| |// `.
#                 / \\|||:|||// \
#               / _|||||-:- |||||- \
#                | | \\\ - /// | |
#              | \_| ''\---/'' | _/ |
#               \ .-\__ `-` ___/-. /
#            ___`. .' /--.--\ `. . __
#         ."" '< `.___\_<|>_/___.' >'"".
#       | | : `- \`.;`\  _ /`;.`/ - ` : | |
#          \ \ `-. \_ __\ /__ _/ .-` / /
#      ==`-.____`-.___\_____/___.-`____.-'==
#                     `=---='
'''
@Project :pythonalgorithms 
@File :xueyuan.py
@Author :不胜人生一场醉@Date :2021/8/23 11:06 
'''
# !/usr/bin/env python
# -*- coding: UTF-8 -*-
#                     _ooOoo_
#                   o8888888o
#                    88" . "88
#                 ( | -  _  - | )
#                     O\ = /O
#                 ____/`---'\____
#                  .' \\| |// `.
#                 / \\|||:|||// \
#               / _|||||-:- |||||- \
#                | | \\\ - /// | |
#              | \_| ''\---/'' | _/ |
#               \ .-\__ `-` ___/-. /
#            ___`. .' /--.--\ `. . __
#         ."" '< `.___\_<|>_/___.' >'"".
#       | | : `- \`.;`\  _ /`;.`/ - ` : | |
#          \ \ `-. \_ __\ /__ _/ .-` / /
#      ==`-.____`-.___\_____/___.-`____.-'==
#                     `=---='
'''
@Project :pythonalgorithms 
@File :graphdatastructure.py
@Author :不胜人生一场醉@Date :2021/7/16 22:18 
'''
import networkx as nx
import matplotlib.pyplot as plt
from graphviz import Source
import pygraphviz as pgv

# 获得图中非连通点的列表 = []
if __name__ == "__main__":
   nodes, edges = getnodeedge()
   testGraphlabelpic(nodes, edges)
代码语言:javascript
代码运行次数:0
运行
复制
def testGraphlabelpic(nodes, edges):
   g = nx.DiGraph()
   g.add_nodes_from(nodes)
   g.add_edges_from(edges)
   plt.figure(figsize=(30, 18))
   pos = nx.spring_layout(g,iterations=20)
   # pos = nx.kamada_kawai_layout(g)
   # pos = nx.random_layout(g)
   # 调用draw(G, pos)将基础的点边拓扑先画出来
   nx.draw(g, pos)

   # 画节点
   nx.draw_networkx_nodes(g, pos=pos, node_color='#7FFF00', node_size=150, alpha=0.7)
   node_labels = nx.get_node_attributes(g, 'name')
   # 调用draw_networkx_labels画节点标签
   nx.draw_networkx_labels(g, pos, labels=node_labels)

   # 画边
   nx.draw_networkx_edges(g, pos=pos, width=0.3, alpha=0.2)  # 边的样式
   edge_labels = nx.get_edge_attributes(g, 'procname')
   # 调用draw_networkx_edge_labels画和边的标签。
   nx.draw_networkx_edge_labels(g, pos, edge_labels=edge_labels)
   plt.savefig('aa.jpg')
   plt.show()
   nx.drawing.nx_agraph.write_dot(g, "dot.gv")
   Source.from_file('dot.gv')


# gvd = pgv.AGraph(directed=True)
# gvd.add_nodes_from(nodes)
# gvd.add_edges_from(edges)
# gvd.layout(prog='neato')
# gvd.draw('pygraph.png')
def getnodeedge():
   file = open('nodes.txt', 'r')
   content = file.readlines()
   rows = len(content)  # 文件行数
   nodes = []
   nodenamedict = dict()
   for i in range(rows):
      data = content[i].strip().split('\t')
      nodenamedict['name'] = data[1]
      nodes.append([int(data[0]), nodenamedict])

   file = open('edge.txt', 'r')
   content = file.readlines()
   rows = len(content)  # 文件行数
   edges = []
   edgenamedict = dict()
   for i in range(rows):
      data = content[i].strip().split('\t')
      edgenamedict['procname'] = data[2]
      edges.append([int(data[0]), int(data[1]), edgenamedict])
   return nodes, edges
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python与大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档