临文乍了了,彻卷兀若无。这篇文章主要讲述用 GraphScope 像 NetworkX 一样做图分析相关的知识,希望能为你提供帮助。
NetworkX 是 python 上最常用的图分析包,GraphScoep 兼容 NetworkX 接口。本文中我们将分享如何用 GraphScope 像 NetworkX 一样在(大)图上进行分析。快速访问graphscope:??https://github.com/alibaba/GraphScope?? NetworkX 是什么 NetworkX 是一个用 Python 语言开发的图论与复杂网络建模工具,它内置了常用的图与复杂网络分析算法,提供了一套简单易用的图分析接口,可以方便地进行复杂网络数据分析、仿真建模等工作。NetworkX 的接口设计十分简洁,对于作为刚进入图算法领域的小白来说,NetworkX 的接口可以帮助使用者快速建立起对图数据的感知,并且对于中小型数据集,NetworkX 的接口也是非常好上手的。 但由于 NetworkX 是基于 Python 语言开发,算法的性能并不是它的强项,而且也无法有效地处理工业级别的大规模图数据。基于这一背景,GraphScope 提供了一套兼容 NetworkX 的图分析接口,在能使用像 NetworkX 这样简单易用的接口的同时,也能提供高性能的图分析算法以支持超大规模图数据的处理。 我们通过一个小例子来简单介绍一下 NetworkX 的图分析过程。 # NetworkX 的图分析过程从图的构建开始 上述例子只是对 NetworkX 做图分析的一个简单的介绍,更多 NetworkX 的接口介绍以及详细的使用说明,内置的算法等可以参考 NetworkX 官方文档[1]。 用 GraphScope 像 NetworkX 一样做图分析 NetworkX 官方的 NetworkX tutorial[2] 是一个 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()? ?来建立一个空的无向图。import graphscope.nx as nx 增加节点和边GraphScope 的图操作接口也保持了与 NetworkX 的兼容,用户可以通过? ?add_node? ?和??add_nodes_from? ?来添加节点,通过??add_edge? ?和??add_edges_from? ?来添加边。# 通过 add_node 一次添加一个节点 查询图的元素GraphScope 支持兼容 NetworkX 的图查询接口。用户可以通过? ?number_of_nodes? ?和??number_of_edges? ?来获取图点和边的数量,通过??nodes? ?,
??edges? ?,??adj? ?和??degree? ?等接口来获取图当前的点和边,以及点的邻居和度数等信息。# 查询目前图中点和边的数目 从图中删除元素像 NetworkX 一样, GraphScope 也可以使用与添加元素相类似的方式从图中删除点和边,对图进行修改。例如可以通过? ?remove_node? ?和??remove_nodes_from? ?来删除图中的节点,通过??remove_edge? ?和??remove_edges_from? ?来删除图中的边。# 通过 remove_node 删除一个点 图分析GraphScope 可以通过兼容 NetworkX 的接口来对图进行各种算法的分析,示例里我们构建了一个简单图,然后分别使用? ?connected_components? ?分析图的联通分量,使用??clustering? ?来得到图中每个点的聚类系数,以及使用??all_pairs_shortest_path? ?来获取节点两两之间的最短路径。# 首先构建图 图的简单绘制同 NetworkX 一样,GraphScope 支持通过? ?draw? ?将图进行简单地绘制出来。(依赖? ?matplotlib? ?的绘图功能,如果未安装,需要先通过
pip install atplotlib
安装)import graphscope.nx as nx 文章图片 通过一些简单的例子,我们展示了 GraphScope 对于 NetworkX 接口的兼容性和一些图操作/分析接口的使用。更详细的使用可以参考 GraphScope 文档[3]。 GraphScope 相比 NetworkX 算法性能有着数量级的提升 GraphScope 支持了部分 NetworkX 内置的图算法,我们可以通过 NetworkX 的调用算法的方式来调用这些算法。下面我们通过一个简单的实验来看一下 GraphScope 对比 NetworkX 在算法性能上到底提升多少。 这个实验使用来自 SNAP 的 twitter[4] 图数据,测试算法是 NetworkX 内置的 Clustering[5] 算法。实验所用的机器配置为8核CPU, 16G内存。 我们首先准备下数据,使用 wget 将数据集下载到本地 wget https://raw.githubusercontent.com/GraphScope/gstest/master/twitter.e $HOME/twitter.e 接着我们分别使用 GraphScope 和 NetworkX 载入 snap-twitter 数据 import os 我们使用 Clustering 算法来对图进行聚类分析,来看一下 GraphScope 对比 NetworkX 在算法性能上有多少提升 %%time 从实验结果我们可以看到,GraphScope 在兼容 NetworkX 接口的同时,内置的算法对比 NetworkX 可以达到几个数量级的性能提升。GraphScope 在提供兼容 NetworkX 简单易用的接口的同时,也能提供非常高效的算法分析。 结语 【用 GraphScope 像 NetworkX 一样做图分析】本文介绍了如何让 GraphScope 使用 NetworkX 风格的方式对图数据进行操作和分析,同时,本文也通过在snap-twitter 图数据上聚类算法分析的对比来展示了 GraphScope 在兼容 NetworkX 接口的同时,提供了高效的算法分析能力。 在后续的文章中,我们将会通过 benchmark 的方式更细致地对比 GraphScope 与 NetworkX 在图操作,图查询和图分析上的一些性能比较,以及使用 GraphScope 来执行一些 github 社区中基于 NetworkX 的有趣的数据分析项目。 本文中涉及的代码都已经在 GraphScope Playground 中,感兴趣的读者可以直接点击下方的 阅读原文,进入 Playground 试用这些代码。 参考资料 [1] NetworkX 官方文档: https://networkx.org/documentation/stable/index.html [2] NetworkX tutorial: https://networkx.org/documentation/stable/tutorial.html [3] GraphScope 文档: https://graphscope.io/docs/reference/networkx/index.html [4] Snap-twitter: https://snap.stanford.edu/data/ego-Twitter.html [5] Clustering 算法: https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.cluster.clustering.html#networkx.algorithms.cluster.clustering |
推荐阅读
- 记一次MySql重置root密码无效
- MySQL数据库高级操作
- 剑指Offer-用两个栈实现队列
- ELT.ZIPOpenHarmony啃论文俱乐部——细数生活中的压缩点滴
- MySQL主从复制与读写分离
- python 包之 Pillow 图像处理教程
- 4月活动|春日学习正当时,一起挑战21天发文打卡
- 图计算 101(图计算的类型语言与系统)
- Tomcat实战案例(JPress 的安装部署)