Как найти все триплеты узлов (связанные компоненты размера 3) из файла tsv? - PullRequest
0 голосов
/ 20 февраля 2019

Из приведенной ниже матрицы я должен создать сеть и найти все подключенные компоненты размером 3. Набор данных, который я использую:

0   1   1   0   0   0   0   0   0   0   0
1   0   0   0   0   0   0   0   0   0   0
1   0   0   1   0   0   0   0   0   0   0
0   0   1   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   1
0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   1   0   0   0   0   0   0

Кто-нибудь может помочь?И ожидаемые подключенные триплеты будут: -

1   2   3
1   3   4
2   1   3
3   1   4

Мой код:

import networkx as nx
from itertools import chain
import csv
import numpy as np
import pandas as pd

adj = []
infile="2_mutual_info_adjacency.tsv"
df=pd.read_csv(infile,delimiter="\t",header=None)
arr=np.array(df.iloc[0:10,:])
arr1=np.array(df.iloc[:,0:10])

for i in range(arr):
  for j in range(arr1):
    if (i,j)==1:
      for k in range(j+1,arr1):
        if (i,k)==1:
          adj.append(i,j,k)
      for l in range(i+1,arr):
        if(l,j)==1:
          adj.append(i,j,l)

Будет полезна небольшая помощь.Заранее спасибо.

1 Ответ

0 голосов
/ 07 марта 2019

Вы можете найти все подключенные компоненты, используя функцию connected_componets().Впоследствии вы можете отфильтровать компоненты, которые состоят из трех узлов:

import networkx as nx
import pandas as pd
from itertools import chain

adj_matrix = [
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 1, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
]

df = pd.DataFrame(adj_matrix)

G = nx.from_pandas_adjacency(df)

# filter components of size 3
triplets = [c for c in nx.connected_components(G) if len(c) == 3]

triples_chain = set(chain.from_iterable(triplets))
color = ['lime' if n in triples_chain else 'pink' for n in  G.nodes()]

# jupyter notebook
%matplotlib inline
nx.draw(G, with_labels=True, node_color=color, node_size=1000)

Graph

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...