网络开发人员,告别样板代码
#python #部署 #networkx #memgraph

如果您正在使用NetworkX,则会知道可以从数据网络获得的宝贵见解。这些网络或图形在各种业务用例中变得越来越流行,它们有助于做出重要的决策,以多种方式影响业务成功。

NetworkX具有大量有趣的图形算法,它可以快速分析数据网络,但只能在一定范围内进行分析。您可能已经发现自己想知道如何留在围绕NetworkX图形算法建立的安全世界中,但仍然能够创建准备就绪的应用程序以轻松与他人分享您的工作。也许您无聊编写数百行代码,只是为了获取要探索的数据。

这篇博客文章将告诉您更多有关如何避免所有样板代码并通过使用MEMGRAPH(一个开源的内存中图形数据库)避免所有样板代码并顺利部署应用程序的,您可以在其上使用NetworkX执行图形分析,您熟悉您很熟悉,无论是在静态和流数据集上。

无缝连接到Memgraph的许多数据源

每个NetworkX项目的开始都包括数据导入。如果您是从不同来源导入数据,则您的代码可能与每个其他来源都在滚雪球。事情变得凌乱了,每次您更改代码中的内容时,您都必须再次从所有这些不同的来源中获取数据。该项目越来越难以维护,并且您的时间不必要地浪费在提取数据而不是实际分析上。

使用memgraph,您可以轻松地连接到数据源并在项目开头导入数据,并可以随时更改它。尽管它是内存的,但Memgraph仍然保留您的数据,这意味着您的数据集在每次运行中都必须加载。它足以加载一次,然后查询,分析和更改它。您可以探索所需的图表的一部分,并对数据集进行分析。 Memgraph如何做?

networkX_developers_say_farewell_to_the_boilerplate_code_img_1

MEMGRAPH本地具有多种数据导入方法 - 从filesMySQLPostgreSQLdata streams导入。 Memgraph也是高度可扩展的,在其Python客户端GQLAlchemy的帮助下,您几乎可以从任何地方导入数据。

gqlalchemy的koude0将表数据从文件转换为绘制数据并将其导入到memgraph中。目前,GQLalchemy支持通过Pyarrow软件包阅读CSV,Parquet,Orc和IPC/Feather/Arrow文件格式。这些文件可以从本地源,Azure Blob存储或Amazon S3服务加载。除此之外,如果您想从Gqlalchemy当前不支持的文件系统中阅读或从其他来源阅读,则可以通过扩展抽象类koude1koude2来阅读implement a custom file system importer

memgraph在导入流数据集时特别有用,因为它可以连接到任何KAFKA,PULSAR或REDPANDA数据流。例如,如果您在公司中使用Debezium来监视数据库中的更改,则可以使用MEMGRAPH进行监视,您可以使用connect to that Kafka stream

由于NetworkX算法是在当前内存中的图形上运行的,因此它没有提供动态图和在每个更改上运行动态图形算法的可能性。 Memgraph可以在数据库中的一定更改或更新上启动动态算法的触发器的帮助。这种设置可为您更快地提供图形算法的结果。 Check out在Mage中实现了哪种动态图算法,这是一个开源存储库,其中包含Python,C/C ++和Rust的图形算法和模块。

因此,如果您的项目需要从各种来源导入流或静态数据,则不必担心在网络X代码中导入。

memgraph和NetworkX集成

NetworkX提供了广泛的图形算法来探索数据,并且可以在Memgraph中使用它们。 memgraph是内置的,它具有C ++,并保存用于Memgraphs图的包装对象,称为Memgraphpaph,MemgraphDigraph,MemgraphMultigraph或MemgraphMultIdigraph,具体取决于存储在数据库中的图形类型。

这些对象优化了NetworkX算法的使用。为了使向Memgraph的过渡更加方便,我们实施了使用Memgraph图调用NetworkX函数的过程,以便您可以在框外访问图形算法。

例如,通过运行:

在预加载数据集上调用betweenness_centrality算法

CALL nxalg.betweenness_centrality() YIELD *;

Here is a list的所有已实施的NetworkX算法。要了解有关Memgraph中网络X算法使用的更多信息,请查看Social network analysis with NetworkX tutorial.

用来查询memgraph的Cypher查询语言可以轻松扩展使用query modules中的自定义过程。这些过程可以用Python,C/C ++和Rust编写。在用Python编写的自定义过程中,您可以使用NetworkX库。实施自定义过程的最简单方法是使用Memgraph的Visual用户界面Memgraph Lab。只需将网络代码粘贴到Memgraph Lab的 Query模块部分的代码编辑器中的自定义读取过程。

要使用自定义过程,请使用Cypher CALL子句调用。 Memgraph没有对girvan_newman社区算法的自定义实现,因此可以在自定义读取过程中实现。只需小心使用正确的图形类型,具体取决于数据集 - 图形,Digraph,Multigraph或Multidigraph。

image alt

在上面的示例中,MemgraphDiGraph是由mgp.ProcCtx创建的,该mgp.ProcCtx表示当前状态中数据库内的整个图。该图被施放到NetworkX DiGraph,因此可以使用NetworkX girvan_newman算法。该过程返回属于某个社区的节点列表。

要调用上述自定义过程,我们首先需要导入数据集。许多数据集可以在实验室的数据集部分中找到。我们将查询数据集空手道俱乐部友谊网络。

image alt

用于调用自定义过程并返回结果的查询是:

CALL communities.detect()
YIELD communities
UNWIND communities AS community
RETURN community; 

这是模板数据集空手道俱乐部友谊网络上获得的结果。

image alt

在独立网络脚本中,您首先需要一堆代码来提取所有要探索的数据。然后,您将调用该算法,最后,结果必须存储在某个地方。因此,要运行一种简单的算法,您必须编写很多代码。现在,将其乘以更多的数据源,并使用NetworkX进行更复杂的分析。使用MEMGRAPH,您可以导入数据或连接到数据源,并运行您喜欢的现有或自定义图形算法。

有关使用NetworkX集成的更多示例,请在Memgraph文档上查看Exploring a musical social network tutorial

轻松分享您的工作结果

NetworkX不是数据库,因此,当然,它缺少在部署应用程序时派上用场的其他功能。例如,使用图数据库,您始终可以进行临时图形查询。如果您使用的是memgraph,还将获得一组可扩展的可扩展算法,称为法师(Memgraph Advanced Graph Extensions)。这意味着您可以将整个项目放在一个地方。

数据集是在Memgraph中加载的,您可以通过查询数据库或运行已经实现或自定义过程来通过Memgraph Lab探索它。它为您提供了必要的灵活性,同时仍然易于使用并与他人共享。您的脚本可以保存图形分析,机器学习项目,简单的计算,并且可以写回数据库,也可以读取并返回所需的结果。

您的查询可以通过Memgraph Lab可视化,并发送或呈现给您的同事。另外,如果您正在部署项目,则不必担心应用程序运行所需的组件集,您只需要管理Memgraph即可。

有许多部署和管理项目的方法,但是为了使您更容易,我们是运行Memgraph Docker Images所需的prepared docker-compose.yml文件。阅读我们的博客文章,以了解有关how to orchestrate your graph application with Docker Compose的更多信息。如果您需要Memgraph作为Kubernetes群集的一部分,则可以使用prepared Helm Chart进行简单的设置。

image alt

memgraph Lab提供了在查询收集中保存准备好查询的可能性。 Memgraph Lab具有丰富的查询集合,可让您命名集合中的每个查询并添加其描述。另外,您可以在集合中运行每个查询以显示工作结果。

结论

memgraph是网络项目中大部分样板代码的大部分替换,并提供相关的见解。它可以与流或静态数据集一起使用,并简单地集成任何网络代码。

在可视化和速度方面,Memgraph提供的结果是令人难以置信的,并且有足够的理由现在尝试。查看how Memgraph deals with data persistency, large-scale data analytics and visualizations when compared to NetworkXhow much faster Memgraph graph algorithms are

要了解更多信息,请前往我们的resources for NetworkX开发人员。