python实现之数据血缘关系,by networkx
最近在进行数据逆向分析,无业务无界面无数据库的情况下,想通过对存储过程中关于输出输入表的分析快速了解业务的核心问题,然后再对核心业务进行逆向回溯。
其实问题很简单,一个存储过程会有多个输入表和输出表,一个存储过程的输出表可能会成为另外一个存储过程的输入表,从而将整个数据库的业务逻辑串接起来,基于长链会形成血缘关系,基于关联会形成聚合。
这里需要构造的节点数据和连接数据,节点数据是输入表和输出表剔重后的编号和标签,连接数据通过存储过程标签将节点数据进行关联。
代码之前有测试过,所以这次实现无太多需要讲解。
#!/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)
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
python实现之数据血缘关系,by networkx相关推荐
- python pymongo+networkx 实现mongo数据血缘关系可视化
为什么80%的码农都做不了架构师?>>> 数据血缘通常是指数据产生的链路,其采集主要通过自动解析(存储过程.SQL.ETL过程等文件)结合人工收集的方式实现.本文不涉及数据血缘 ...
- 【DataHub】 现代数据栈的元数据平台--如何将数据血缘关系写入DataHub
什么是Data lineage? 在大数据时代,系统的数据来源广泛,各种类型的数据快速产生且爆发性增长.从数据的产生.ETL .数据融合分析.数据应用直至最终消亡,在数据流转过程中数据之间的关联关系称 ...
- 大数据治理入门系列:数据血缘关系
血缘关系在人类社会中扮演着重要角色.大多数家庭是基于血缘关系形成的,而家庭作为社会的基本单元,对维系社会稳定发挥着重要关系.其实,数据之间也存在类似的血缘关系.数据从产生.加工.流转,一直到消亡,每个 ...
- 2022数据血缘关系详解
在数据资产管理与数据治理领域,数据之间的血缘关系是一个绕不开的话题,数据血缘的完备程度也是评价一个企业数据中台成熟度的重要度量之一.到底什么是数据血缘,它对于数据工作者和数据使用者有哪些举足轻重的作用 ...
- 数据管理——数据血缘关系概述
摘要: 数据的血缘关系作为数据治理很重要的部分,需要引起格外的重视. 数据血缘关系的概念 在人类社会中,血缘关系是指由婚姻或生育而产生的人际关系.如父母与子女的关系,兄弟姐妹关系,以及由此而派生的其他 ...
- 数据治理:数据血缘关系
数据血缘关系,从概念来讲很好理解,即数据的全生命周期中,数据与数据之间会形成多种多样的关系,这些关系与人类的血缘关系类似,所以被称作数据的血缘关系 从技术角度来讲,数据a通过ETL处理生成了数据b,那 ...
- Mysql 数据血缘关系图_hive血缘关系之输入表与目标表的解析
接了一个新需求:需要做数据仓库的血缘关系.正所谓兵来将挡水来土掩,那咱就动手吧. 血缘关系是数据治理的一块,其实有专门的第三方数据治理框架,但考虑到目前的线上环境已经趋于稳定,引入新的框架无疑是劳民伤 ...
- 数据血缘关系图 工具_如何在论文中画出漂亮的插图?用它!丨城市数据派
[你投稿了没?10万+作者"平台好才是真的好",也许下一个就是你!](点击看详情),是由城市数据派主办的征稿活动,小派在此恭候派友们投稿分享![本期看点]LaTeX是一种非常好用的 ...
- python与大数据的关系论文_python与大数据的关系图
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
最新文章
- 一机玩转docker之十:创建及使用ssh镜像
- 基于SSM实现新闻推荐系统
- 内存如何分配和如何释放?
- C语言指针实现计算平均分等功能
- Qt creator5.7 OpenCV249之中值滤波(含源码下载)
- c语言标准差怎么计算,一个关于文段统计的问题,怎么在运行过程中计算标准差?...
- html5 websocket 手机,HTML5 WebSocket 示范
- 新东方java开发待遇_新东方教师薪酬与考核曝光!拿去即用(仅供参考)
- 基本数据类型和包装数据类型的使用标准
- 中科院计算机所网络安全,中科院着力培养网络空间安全人才
- Vue项目需求实现记录总目录(永久更新)
- .bin文件打开编辑
- 外行也看得懂!了解量子计算的奇迹
- 车机中行车记录仪(DVR)MVP模式开发总结
- SUG 180 Inversions(树状数组+离散化)
- 微生太 | 宏基因组分箱Binning(一)基础介绍与报告展示
- adf被打开_ADF格式文件 如何打开ADF文件 ADF是什么格式的文件 用什么打开 - The X Online Tools...
- 如何降低代码圈复杂度
- 【强化学习】Actor-Critic(演员-评论家)算法详解
- 例题8-6 两性亲分子 UVa 1606
热门文章
- Java设计模式--代理模式
- php勋章,phpwind v8.7 勋章体系2.0
- HttpClient4.x调用指定证书访问https
- 百度研究院research实习生面经-2020年10月
- windows 通过ftp更新系统
- C++:OTSU确定标线点云分割阈值
- Visual Studio Code在windows系统下的环境配置
- 想进阿里的悲剧了,马云说了今年不会增加一个员工(转载自钛媒体http://www.tmtpost.com/229500.html)
- CSS中的五大字体家族(cursive 手写字体族更吸引我)
- thinkphp6 数据库字段不存在的错误提示