在网络中建立术语关系

2024-05-19 21:37:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图表示A列中的数字和B列中相应值之间的关系

A            B
Home     [Kitchen, Home, Towel]
Donald   [US, 02 , Donald, Trump]
Trump    [Trump,Family, Cat, Dog]
Dog      [Dog,Cat,Paws]

A列中的数字和B列中的数字是图中的节点。我想将B中的元素连接到A或相互连接。例如:

  • 在一个世界里,家是与自己相连的;如果我在B列中查看(该值仅出现在第一行),B中的Home连接到Kitchen and Tobber(输入链接)
  • 唐纳德在中与自己相连,因为唐纳德只在B中;然而,B中的唐纳德也与美国、02和特朗普(ingoing link)有关
  • 特朗普与唐纳德有外向的联系,而与唐纳德有内向的联系(家庭、猫和狗)
  • 狗与特朗普有一个传出链接和一个传入链接(猫和爪子)

规则应如下所示:

  • 如果a中的一个单词位于B中的另一行,则创建一个传出链接
  • 如果A中的单词也包含在B中,则为B中的每个单词创建一个指向A中单词的输入链接

我应该如何调整我的代码

file = file.assign(B=file.B.map(list)).explode('B')


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

nx.draw_networkx(G)
plt.show()

Tags: pathaddhome关系链接数字towel单词
1条回答
网友
1楼 · 发布于 2024-05-19 21:37:53

将表转换为pandasdataframe,然后在其行中循环,您可以像这样添加相应的边:

import networkx as nx
import pandas as pd
from pyvis.network import Network


df = pd.DataFrame(
    [
        ['Home', ['Kitchen', 'Home', 'Towel']],
        ['Donald', ['US', '02' , 'Donald', 'Trump']],
        ['Trump', ['Trump','Family', 'Cat', 'Dog']],
        ['Dog', ['Dog', 'Cat' , 'Paws']]
    ],
    columns=['A', 'B']
)

G = nx.DiGraph()

for i, j in enumerate(df['A']):
    for index, row in df.iterrows():
        if i != index:
            if j in row['B']:
                G.add_edge(row['A'], j)
        else:
            for n in row['B']:
                if j != n:
                    G.add_edge(j, n)

    if G.in_degree(j) == 0:
        G.add_edge(j , j)

N = Network(directed=True)  # using pyvis to show self loops as well

for n, attrs in G.nodes.data():
    N.add_node(n)

for e in G.edges.data():
    N.add_edge(e[0], e[1])

N.write_html('graph.html')

这给了我以下图表:

enter image description here

希望这是你想要的

相关问题 更多 >