Создать сеть из фрейма данных, используя общий столбец - PullRequest
1 голос
/ 02 апреля 2020

Я сейчас пытаюсь сгенерировать Network-Graph с NetworkX на Python. Набор данных имеет следующий формат (это CSV):

Id, Tag
0, 'science'
0, 'history'
1, 'sports'
3, 'sci-fi'
3, 'history'
3, 'music'

Цель - показать связь между тегами. Например, наука действительно тесно связана с историей, потому что они имеют один и тот же идентификатор. Теперь вот где я застрял: как я могу создать таблицу / матрицу, которая имеет 2 столбца для использования NetworkX в качестве источника (-Tag) и цели (-Tag) с Python?

Я попытался создать Dataframe с Pandas и последующим использованием одного и того же столбца дважды, но у меня это не сработало.

1 Ответ

1 голос
/ 02 апреля 2020

Чтобы соединить узлы на основе Id, вот один из подходов: вы можете группировать Id, объединять группы в списки и строить ориентированный граф, добавляя списки в виде путей:

df = pd.read_csv('my_file.csv', sep=', ')
l = df.groupby('Id').Tag.agg(list).tolist()
# [['science', 'history'], ['sports'], ['sci-fi', 'history', 'music']]

G=nx.Graph()
for sl in l:
    nx.add_path(G, sl)

nx.draw(G, node_color='lightblue', 
        with_labels=True, 
        node_size=800)

enter image description here


Для ориентированного графа:

G=nx.DiGraph()
for sl in l:
    nx.add_path(G, sl)

nx.draw(G, node_color='lightblue', 
        with_labels=True, 
        node_size=800)

enter image description here

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