首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >建立网络模型

建立网络模型
EN

Stack Overflow用户
提问于 2020-08-15 03:18:07
回答 2查看 93关注 0票数 1

关于如何创建具有以下特点的网络,我有一个问题:

代码语言:javascript
复制
A            B
12     [32, 12, 45]
2      [43, 41 ,2,15]
15     [15,18,24,1]
1      [1,24,7]

其中A列中的数字和B中的数字是节点。我想在B中找到A和它们的对应值之间的联系;然后,将B中的元素连接到A或彼此之间。例如:

  • 12与自身链接(因为没有其他节点与其链接);
  • 2与自身和15连接;
  • 15与自身连接,1和2;
  • 1与自身链接(隔离)

<代码>F 210

我怎么能画出来呢?

我认为我应该使用爆炸;我使用错误的方法对edgelist:

代码语言:javascript
复制
G = nx.from_pandas_edgelist(df, 'A', 'B')
plt.figure(3,figsize=(30,24)) 
nx.draw(G, node_size=200, with_labels=False)
pos = nx.spring_layout(G) 
nx.draw(G, pos = pos)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-15 05:54:37

我对这类图的经验很少,但我用explode()实现了列表扩展,并在matplotlib中创建了一个以A和B列作为路径的图。

代码语言:javascript
复制
import pandas as pd
import numpy as np
import io

df = pd.DataFrame({'A':[12,2,15,1], 'B':[[32, 12, 45], [43,41,2,15], [15,18,24,1], [1,24,7]]})
df = df.explode('B', ignore_index=True)

import matplotlib.pyplot as plt
import networkx as nx

G = nx.DiGraph()
nx.add_path(G, df['A'])
nx.add_path(G, df['B'])

nx.draw_networkx(G)
plt.show()

票数 0
EN

Stack Overflow用户

发布于 2020-08-15 06:19:24

根据您的需求,您不仅需要使用else,还需要为要保留的唯一节点集过滤数据(否则,它将绘制所有可用的节点)。

规定-

  • 12与自身链接(因为没有其他节点与其连接);
  • 2与自身和15连接;
  • 15与自身连接,1和2连接;
  • 1与自身链接(隔离?-不完全,15连接到1)

<代码>F29

你可以做下面的处理数据-

代码语言:javascript
复制
df = pd.DataFrame({'A':[12,2,15,1], 'B':[[32, 12, 45], [43,41,2,15], [15,18,24,1], [1,24,7]]})
df = df.explode('B')

vocab = set(df['A'].unique()).intersection(set(df['B'].unique()))
df = df[df['B'].isin(vocab)]
print(df)
代码语言:javascript
复制
#leaving only the nodes that have existing connections.
    A   B
0  12  12
1   2   2
1   2  15
2  15  15
2  15   1
3   1   1

然后,您可以简单地使用networkx从Source数据from进行绘图。

代码语言:javascript
复制
G = nx.from_pandas_edgelist(df, 'A', 'B')
nx.draw_networkx(G)
plt.show()

检查自己的回路-

代码语言:javascript
复制
print("Nodes with self loops:",list(G.nodes_with_selfloops()))
代码语言:javascript
复制
Nodes with self loops: [12, 2, 15, 1]

如果您想用自循环实现绘图,那么您需要使用Graphviz来绘制它,就像在这个SO post中提到的那样

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63422243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档