NetworkX 是 Python 上最常用的图分析包,GraphScope 兼容 NetworkX 接口。本文中我们将分享如何用 GraphScope 像 NetworkX 一样在(大)图上进行分析。
背景
NetworkX 是一个用 Python 语言开发的图论与复杂网络建模工具,它内置了常用的图与复杂网络分析算法,提供了一套简单易用的图分析接口,可以方便地进行复杂网络数据分析、仿真建模等工作。NetworkX 的接口设计十分简洁,对于作为刚进入图算法领域的小白来说,NetworkX 的接口可以帮助使用者快速建立起对图数据的感知,并且对于中小型数据集,NetworkX 的接口也是非常好上手的。
但由于 NetworkX 是基于 Python 语言开发,算法的性能并不是它的强项,而且也无法有效地处理工业级别的大规模图数据。基于这一背景,GraphScope 提供了一套兼容 NetworkX 的图分析接口,在能使用像 NetworkX 这样简单易用的接口的同时,也能提供高性能的图分析算法以支持超大规模图数据的处理。
NetworkX 是如何进行图分析的
我们通过一个小例子来简单介绍一下 NetworkX 的图分析过程。
# NetworkX 的图分析过程从图的构建开始
import networkx
# 初始化一个空的无向图
G = networkx.Graph()
# 通过 add_edges_from 接口添加边列表
# 此处添加了两条边(1, 2)和(1, 3)
G.add_edges_from([(1, 2), (1, 3)])
# 通过 add_node 添加点4
G.add_node(4)
# 接着查看一些图的信息
# 使用 G.number_of_nodes 查询图G目前点的数目
G.number_of_nodes()
# 4
# 类似地,G.number_of_edges 可以查询图G中
# 边的数量
G.number_of_edges()
# 2
# 通过 G.degree 来查看图G中每个点的度数
sorted(d for n, d in G.degree())
# [0, 1, 1, 2]
# 最后调用 NetworkX 内置的算法对对图进行分析
# 调用 connected_components 算法分析图G的
# 联通分量
list(networkx.connected_components(G))
# [{1, 2, 3}, {4},]
# 调用 clustering 算法分析图G的聚类情况
networkx.clustering(G)
# {1: 0, 2: 0, 3: 0, 4: 0}
上述例子只是对 NetworkX 做图分析的一个简单的介绍,更多 NetworkX 的接口介绍以及详细的使用说明,内置的算法等可以参考 NetworkX 官方文档。
用 GraphScope 像 NetworkX 一样做图分析
NetworkX 官方的 NetworkX tutorial 是一个 NetworkX 接口使用以及图的入门教程。为了演示 GraphScope 对 NetworkX 的兼容性以及如何使用 GraphScope 的 NetworkX 接口进行图分析,下面我们使用 GraphScope 来执行教程中的例子。
使用 GraphScope 的 NetworkX 兼容接口,我们只需要简单地将教程中的import netwokx as nx
替换为import graphscope.nx as nx
即可, 当然这里只是依照 NetworkX 的惯例使用nx
作为别名, 你也可以其他自定义的别名,例如 import graphscope.nx as gs_nx
。
图的构建
GraphScope 支持与 NetworkX 完全相同的载图语法,示例里我们使用nx.Graph()
来建立一个空的无向图。