python pymongo+networkx 实现mongo数据血缘关系可视化
为什么80%的码农都做不了架构师?>>>
数据血缘通常是指数据产生的链路,其采集主要通过自动解析(存储过程、SQL、ETL过程等文件)结合人工收集的方式实现。本文不涉及数据血缘如何获取,只对如何通过python操作mongodb并可视化数据血缘关系提供一些思路。
首先通过pymongo连接本地数据库,并插入测试数据
import pymongo
myclient = pymongo.MongoClient("mongodb://127.0.0.1:27017/")
mydb = myclient["world"]
mycol = mydb["areas"]
mylist = [
{ "_id" : 1, "name" : "Asia" },
{ "_id" : 2, "name" : "China", "belongsto" : "Asia" },
{ "_id" : 3, "name" : "ZheJiang", "belongsto" : "China" },
{ "_id" : 4, "name" : "HangZhou", "belongsto" : "ZheJiang" },
{ "_id" : 5, "name" : "NingBo", "belongsto" : "ZheJiang" },
{ "_id" : 6, "name" : "Xihu", "belongsto" : "HangZhou" }
]
x = mycol.insert_many(mylist)
for x in mycol.find():print(x)
输出结果:
{'_id': 1, 'name': 'Asia'}
{'_id': 2, 'name': 'China', 'belongsto': 'Asia'}
{'_id': 3, 'name': 'ZheJiang', 'belongsto': 'China'}
{'_id': 4, 'name': 'HangZhou', 'belongsto': 'ZheJiang'}
{'_id': 5, 'name': 'NingBo', 'belongsto': 'ZheJiang'}
{'_id': 6, 'name': 'Xihu', 'belongsto': 'HangZhou'}
递归查询name='Xihu'这个节点的父节点
pipeline = [{'$graphLookup':
{'from': "areas",'startWith': "$belongsto",'connectFromField': "belongsto",'connectToField': "name",'as': "belongHierarchy"}},{'$match': {'name' : 'Xihu'}}]
for doc in (mycol.aggregate(pipeline)):print (doc)
输出结果:
{'_id': 6, 'name': 'Xihu', 'belongsto': 'HangZhou','reportingHierarchy':
[{'_id': 1, 'name': 'Asia'},
{'_id': 2, 'name': 'China', 'belongsto': 'Asia'},
{'_id': 3, 'name': 'ZheJiang', 'belongsto': 'China'},
{'_id': 4, 'name': 'HangZhou', 'belongsto': 'ZheJiang'}]}
解析输出结果并可视化展示节点关系
import networkx as nx
import matplotlib.pyplot as plt
rs = list(mycol.aggregate(pipeline))
def get_relation(rs):G = nx.DiGraph()for node in rs:try:G.add_edge(node['name'], node['belongsto'])for item in node['belongHierarchy']:if 'belongsto' in item.keys():G.add_edge(item['name'], item['belongsto'])else:passexcept:passreturn G
G = get_relation(rs)
nx.draw(G, with_labels=True, font_weight='bold')
plt.show()
展示area这个collection中所有的节点
pipeline = [{'$graphLookup':
{'from': "areas",'startWith': "$belongsto",'connectFromField': "belongsto",'connectToField': "name",'as': "belongHierarchy"}}]
rs = list(mycol.aggregate(pipeline))
def get_relation(rs):G = nx.DiGraph()for node in rs:try:G.add_edge(node['name'], node['belongsto'])for item in node['belongHierarchy']:if 'belongsto' in item.keys():G.add_edge(item['name'], item['belongsto'])else:passexcept:passreturn G
G = get_relation(rs)
nx.draw(G, with_labels=True, font_weight='bold')
plt.show()
转载于:https://my.oschina.net/aubao/blog/3035977
python pymongo+networkx 实现mongo数据血缘关系可视化相关推荐
- 【DataHub】 现代数据栈的元数据平台--如何将数据血缘关系写入DataHub
什么是Data lineage? 在大数据时代,系统的数据来源广泛,各种类型的数据快速产生且爆发性增长.从数据的产生.ETL .数据融合分析.数据应用直至最终消亡,在数据流转过程中数据之间的关联关系称 ...
- 大数据治理入门系列:数据血缘关系
血缘关系在人类社会中扮演着重要角色.大多数家庭是基于血缘关系形成的,而家庭作为社会的基本单元,对维系社会稳定发挥着重要关系.其实,数据之间也存在类似的血缘关系.数据从产生.加工.流转,一直到消亡,每个 ...
- 2022数据血缘关系详解
在数据资产管理与数据治理领域,数据之间的血缘关系是一个绕不开的话题,数据血缘的完备程度也是评价一个企业数据中台成熟度的重要度量之一.到底什么是数据血缘,它对于数据工作者和数据使用者有哪些举足轻重的作用 ...
- 数据管理——数据血缘关系概述
摘要: 数据的血缘关系作为数据治理很重要的部分,需要引起格外的重视. 数据血缘关系的概念 在人类社会中,血缘关系是指由婚姻或生育而产生的人际关系.如父母与子女的关系,兄弟姐妹关系,以及由此而派生的其他 ...
- 数据治理:数据血缘关系
数据血缘关系,从概念来讲很好理解,即数据的全生命周期中,数据与数据之间会形成多种多样的关系,这些关系与人类的血缘关系类似,所以被称作数据的血缘关系 从技术角度来讲,数据a通过ETL处理生成了数据b,那 ...
- python实现之数据血缘关系,by networkx
最近在进行数据逆向分析,无业务无界面无数据库的情况下,想通过对存储过程中关于输出输入表的分析快速了解业务的核心问题,然后再对核心业务进行逆向回溯. 其实问题很简单,一个存储过程会有多个输入表和输出表, ...
- Mysql 数据血缘关系图_hive血缘关系之输入表与目标表的解析
接了一个新需求:需要做数据仓库的血缘关系.正所谓兵来将挡水来土掩,那咱就动手吧. 血缘关系是数据治理的一块,其实有专门的第三方数据治理框架,但考虑到目前的线上环境已经趋于稳定,引入新的框架无疑是劳民伤 ...
- 【Python】实时采集疫情数据,打造可视化地图,防疫从你我做起
文章目录 一.写在前面 二.准备工作 2.1.开发环境 2.2.知识点 三.爬虫部分 3.1.爬虫流程 3.2.数据采集 四.数据可视化部分 五.视频教程 六.写在最后 一.写在前面 兄弟们,最近又是 ...
- 用Python获取了微信好友数据,进行可视化分析发现~
大家好! 因为无事可做,就想着看看爬取一下微信好友,然后理智的分析一波~~ 01 数据采集 我们这次使用的是Itchat库来获取的微信好友数据. 01 登陆 用Itchat库来获取微信好友数据,首先需 ...
最新文章
- 从CTO到创始人 孙元浩基础软件破局之路
- 递推DP HDOJ 5459 Jesus Is Here
- 使用MySQL的LAST_INSERT_ID--转
- 华一银行开发安全内部培训圆满结束
- 中科院分词系统(NLPIR)JAVA简易教程
- 一文看透java8新特性
- TCP/UDP常见端口参考(超全_面试题常用_建议收藏)
- 720x576P时序参数图
- dedecms备份mysql数据库文件_dedecms备份的数据库文件在哪里
- 嵌入式大杂烩周记 | 第 7 期:zlog
- Janusgraph使用示例
- python解二元一次方程组 迭代法_解二元一次方程组多种方法
- 世界需要简化第四篇:从地面发射人造卫星或战术导弹,如何控制其运行轨道?——算法经高度抽象简化,所有下标经仔细核对
- 电脑键盘部分按键失灵_笔记本键盘部分失灵怎么办,笔记本个别键失灵的处理方法...
- 2018年sfdc工作总结_常见Salesforce 异常
- 基于Docker的frp内网穿透
- 关于unity debug.log日志不出现的问题
- 回顾过去 展望未来(写给自己)
- ZooKeeper原理和实践
- Linux的网卡配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33