Bir ağ içinde terim ilişkileri kurma
Aug 17 2020
A sütunundaki sayılar ile B'deki karşılık gelen değerleri arasındaki ilişkileri temsil etmeye çalışıyorum.
A B
Home [Kitchen, Home, Towel]
Donald [US, 02 , Donald, Trump]
Trump [Trump,Family, Cat, Dog]
Dog [Dog,Cat,Paws]
A sütunundaki sayılar ve B'deki sayılar bir grafikteki düğümlerdir. B'deki elemanları A'ya veya birbirine bağlamak istiyorum. Örneğin:
- A'daki ev kendisiyle bağlantılıdır; B sütununa bakarsam (değer yalnızca ilk satırda görünür), B'deki Ev, Mutfak ve Havlu'ya bağlanır (gelen bağlantı);
- Donald sadece B'de olduğu için Donald kendisiyle bağlantılıdır; ancak B'deki Donald, US, 02 ve Trump (ingoing link) ile de bağlantılı;
- Trump'ın Donald ile giden bir bağı ve devam eden bağlantıları var (Aile, Kedi ve Köpek);
- Dog'un Trump ve gelen bağlantıları (Cat and Paws) ile giden bir bağı var.
O zaman kural aşağıdaki gibi olmalıdır:
- A'daki bir kelime B'de başka bir satırdaysa, giden bir bağlantı oluşturun;
- B'deki her kelime için A'daki kelimeye giden bir bağlantı oluşturun, eğer A'daki kelime B'ye de dahil edilmişse.
Kodumu nasıl ayarlamalıyım?
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()
Yanıtlar
2 AzimMazinani Aug 17 2020 at 16:26
Tablonuzu bir pandaya dönüştürüp dataframe
ardından sıraları arasında dolanarak, aşağıdaki gibi karşılık gelen kenarları ekleyebilirsiniz:
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')
Bu bana aşağıdaki grafiği verdi:

Umarım istediğin buydu!
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'