Construindo relações de termos dentro de uma rede
Aug 17 2020
Estou tentando representar relações entre números na coluna A e seus valores correspondentes em B.
A B
Home [Kitchen, Home, Towel]
Donald [US, 02 , Donald, Trump]
Trump [Trump,Family, Cat, Dog]
Dog [Dog,Cat,Paws]
Os números na coluna A e os números na B são nós em um gráfico. Eu gostaria de conectar os elementos de B a A ou entre si. Por exemplo:
- O lar em A está ligado a si mesmo; se eu olhar na coluna B (o valor aparece apenas na primeira linha), Casa em B está conectada a Cozinha e Toalha (link de entrada);
- Donald está ligado a si mesmo em como Donald está apenas em B; no entanto, Donald em B está conectado também com US, 02 e Trump (link de entrada);
- Trump tem um link de saída com Donald e links de entrada (Família, Gato e Cachorro);
- Dog tem um link de saída com Trump e links de entrada (Cat e Paws).
A regra deve ser a seguinte então:
- se uma palavra em A estiver em outra linha de B, crie um link de saída;
- para cada palavra em B, crie um link de entrada para a palavra em A, se a palavra em A também estiver incluída em B.
Como devo ajustar meu código?
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()
Respostas
2 AzimMazinani Aug 17 2020 at 16:26
Convertendo sua mesa em um pandas dataframe
e, em seguida, percorrendo suas linhas, você pode adicionar as bordas correspondentes desta forma:
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')
O que me deu o seguinte gráfico:

Espero que seja isso que você queria!
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas