Получить вес узла для простого двудольного графа

Я создал двухкомпонентный сетевой график из CSV-файла, который сопоставляет расстройства с симптомами. Таким образом, расстройство может быть связано с одним или несколькими симптомами.

for disorder, symptoms in csv_dictionary.items():
    for i in range (0, len(symptoms)):
        G.add_edge(disorder, symptoms[i])

Что мне нужно, так это найти, какие симптомы связаны с несколькими заболеваниями, и отсортировать их в соответствии с их весомостью. Какие-либо предложения?


person Cumatru    schedule 14.03.2020    source источник


Ответы (1)


Вы можете использовать degree из созданный график. Каждый симптом со степенью больше 1 относится как минимум к двум заболеваниям:

Я добавил пример csv_dictionary (пожалуйста, укажите его в своем следующем вопросе как минимальный воспроизводимый пример) и создал набор всех симптомов во время создания графика. Вы также можете подумать о добавлении этой информации в качестве функции узла на график.

import networkx as nx

csv_dictionary = {"a": ["A"], "b": ["B"], "c": ["A", "C"], "d": ["D"], "e": ["E", "B"], "f":["F"], "g":["F"], "h":["F"]}

G = nx.Graph()

all_symptoms = set()
for disorder, symptoms in csv_dictionary.items():
    for i in range (0, len(symptoms)):
        G.add_edge(disorder, symptoms[i])

        all_symptoms.add(symptoms[i])

symptoms_with_multiple_diseases = [symptom for symptom in all_symptoms if G.degree(symptom) > 1]
print(symptoms_with_multiple_diseases)
# ['B', 'F', 'A']

sorted_symptoms = list(sorted(symptoms_with_multiple_diseases, key= lambda symptom: G.degree(symptom)))
print(sorted_symptoms)
# ['B', 'A', 'F']
person Sparky05    schedule 14.03.2020