【问题标题】:how to create graph from edge list using GraphFrame如何使用 GraphFrame 从边缘列表创建图形
【发布时间】:2019-06-07 13:52:37
【问题描述】:

我有两列是边缘列表的数据框,我想使用 pyspark 或 python 从它创建图形 任何人都可以建议如何做到这一点。 在 R 中,可以使用 igraph 中的以下命令来完成

graph.edgelist(as.matrix(df))

我的输入数据框是 df

    valx      valy 
1: 600060     09283744
2: 600131     96733110 
3: 600194     01700001

我的输出应该如下所示(基本上都是 V1 下的 valx 和 valy 以及 V2 下的成员信息)

V1               V2
600060           1
96733110         1
01700001         2

【问题讨论】:

标签: pyspark networkx igraph spark-graphx


【解决方案1】:

根据您想要的输出,您似乎不想要一个图表,而是一个显示您的 V1 值最初存储在哪一行的数组。您可以从原始数据框中获取。

我将假设您想要将数据框转换为图形格式,而不是上述格式。

import networkx as nx
import pandas as pd

filelocation = r'C:\Users\Documents\Tilo Edgelist'

Panda_edgelist = pd.read_csv(filelocation)

g = nx.from_pandas_edgelist(Panda_edgelist,'valx','valy')

nx.draw(g,with_labels = True,node_size = 0)

上面的代码将在 python 中为你创建一个图形,下面是你使用 networkx 的 draw 函数绘制图形时的输出。

我已经假设您正在通过读取某种文件来创建数据框。

如果您可以将此文件转换为 csv 文件,那么您可以使用 pandas 将其读入数据框。

我使用的csv文件格式如下:

valx,valy

600060,09283744

600131,96733110 

600194,01700001

用引号之间的文件路径替换 csv 文件的文件路径。

您可以在下面看到来自pd.read_csv 的数据框是什么样子的

   valx      valy
0  600060   9283744
1  600131  96733110
2  600194   1700001

然后我们将这个数据框传递给networkx来创建图表

g = nx.from_pandas_edgelist(Panda_edgelist,'valx','valy')

在上面的函数中,您可以看到我给它提供了参数Panda_edgelist,然后分别将'valx''valy' 作为源节点和目标节点列名。它使用这些参数来创建一个名为 g 的图。

最后,我使用nx.draw 将生成的图形绘制到控制台。

 nx.draw(g,with_labels = True,node_size = 0)

此函数需要您将图形传递给它,在我们的例子中是 g。

with_labels = True 用于绘制节点名称/ID。

node_size = 0用于使绘制的节点的大小为0。默认情况下,如果你不给函数这个参数,那么它会绘制红色的小圆圈来表示图中的节点。

【讨论】:

    猜你喜欢
    • 2016-10-02
    • 2016-01-30
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多