DAG-有向无环图-igraph
安装
pip install python-igraph
pip install pycairo
pip list发现Python安装的有igraph包有两个:igraph、python-igraph
有向图
有向图(Digraph) 是图论中的一种图结构,其中的边(弧)具有方向性,表明从一个节点(顶点)到另一个节点的单向关系。与无向图不同,无向图中的边不区分方向,而有向图则强调了某些关系的单向特性。
在某些情况下,单向关系可能是理解复杂网络结构的关键,使得有向图成为信息科学、社会科学以及工程学等领域的基础工具 cyclic acyclic
acyclic 没有环的图,即图中没有回路
g.is_acyclic() 方法 是否是无环图
def is_dag(self, *args, **kwargs)
Checks whether the graph is a DAG (directed acyclic graph)
使用
使用 Python 构建 DAG(有向无环图,Directed Acyclic Graph) 任务 Directed Acyclic Graph
由一组节点和有向边组成,其中每个节点表示一个任务或操作,有向边表示任务之间的依赖关系
构造依赖关系树和计算链
从任务编排和数据等的角度来看,DAG 的术语是叫工作流(Workflow)
跟踪计算状态以及它们之间的依赖关系,允许完全和部分重新计算
Graph
__init__(n=0, edges=None, directed=False, graph_attrs=None,
vertex_attrs=None, edge_attrs=None)
ig.Graph.Ring(n=nodes, circular=True)
通过继承Graph类并在子类中添加额外的方法和属性来实现
Graph.__init__(self, directed=True, graph_attrs={"name": name}, **kwargs)
DAGFlow继承了Graph类,并在其初始化方法中调用了父类的初始化方法 directed=True 指明了是有向图
实现
常规 DAG 到函数式 DAG
基于注解与条件的 DAG 函数
Apache Airflow 的 DAG 实现本着 “工作流即代码” 的思想设计
spec 是规约,规格的意思
基础包
Python itertools模块combinations(iterable, r)方法可以创建一个迭代器,
返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序
combinations 组合
permutations 排列
undirected graph with a fixed number of edges, without loops. g.to_directed(mode="acyclic")
as_directed as_undirected
mode:值可为IN,OUT,ALL,分别表示入度核值,出度核值,以及无向核值
计划
增量计算(Incremental computing)
如何设计增量 DAG 计算
异步函数 和可变函数
Memoization(记忆化)是函数式语言的一种特性,
使用一组参数初次调用函数时,缓存参数和计算结果,当再次使用相同的参数调用该函数时,直接返回相应的缓存结果
采用分布式键值存储来对结果进行缓存就是更好的选择
其他包
MessagePack (简称 msgPack)是一种高效的二进制序列化格式,可以将各种数据类型(如整数、字符串、数组等)转换为二进制格式,以便于在网络传输或存储时使用
BSON是一种计算机数据交换格式,主要被用作MongoDB数据库中的数据存储和网络传输格式
美国
国家能源研究科学计算中心NERSC(National Energy Research Scientific Computing Center)是
参考
https://python.igraph.org/en/stable/
https://python.igraph.org/en/stable/tutorials/quickstart.html
igraph 上手教程——使用 Python 开展社会网络分析和可视化 https://zhuanlan.zhihu.com/p/426397948
自动增量计算:构建高性能数据分析系统的任务编排 https://zhuanlan.zhihu.com/p/580966356
标签:directed,DAG,Python,Graph,环图,有向图,igraph
From: https://www.cnblogs.com/ytwang/p/18342331