Как визуализировать социальные сети с помощью Python - PullRequest
30 голосов
/ 03 ноября 2011

Мне нужно определить социальную сеть , проанализировать ее и нарисовать. Я мог бы нарисовать его вручную и проанализировать (рассчитать различные метрики) вручную. Но я не хотел бы изобретать велосипед.

Я пытался использовать matplotlib, но мне нужно использовать его в интерактивном режиме, и в нескольких строках рассказать ему, как загрузить данные, а затем вызвать функцию рендеринга, которая будет отображать график в виде SVG.

Как я могу визуализировать социальные сети описанным способом?

Ответы [ 4 ]

28 голосов
/ 17 марта 2013

networkx - очень мощная и гибкая библиотека Python для работы с сетевыми графиками.Направленные и ненаправленные соединения могут использоваться для соединения узлов.Сети могут быть построены путем добавления узлов и затем соединяющих их ребер, или просто путем перечисления пар ребер (будут автоматически созданы неопределенные узлы).После создания узлы (и ребра) могут быть аннотированы произвольными метками.

Хотя networkx можно использовать для визуализации сети (см. Документацию), вы можете предпочесть использовать визуализацию сетиприложение, такое как Gephi (доступно из gephi.org ). networkx поддерживает широкий спектр форматов импорта и экспорта.Если вы экспортируете сеть в таком формате, как GraphML , экспортированный файл можно легко загрузить в Gephi и отобразить там.

import networkx as nx
G=nx.Graph()
G.add_edges_from([(1,2),(1,3),(1,4),(3,4)])
G
>>> <networkx.classes.graph.Graph object at 0x128a930>
G.nodes(data=True)
>>> [(1, {}), (2, {}), (3, {}), (4, {})]
G.node[1]['attribute']='value'
G.nodes(data=True)
>>> [(1, {'attribute': 'value'}), (2, {}), (3, {}), (4, {})]
nx.write_graphml(G,'so.graphml')
14 голосов
/ 21 декабря 2014

Есть три ответа, в которых упоминаются Networkx и Gephi, но никто не упомянул graph-tool . Основное отличие состоит в том, что алгоритмы реализованы на C ++, что дает повышение производительности по сравнению, например, с. NetworkX.

И это также охватывает визуализацию. С сайта:

Удобно рисовать свои графики, используя различные алгоритмы и форматы вывода (в том числе на экран). Граф-инструмент имеет свой собственный алгоритмы компоновки и универсальные, интерактивные процедуры рисования на основе Cairo и GTK +, но он также может работать как очень удобный интерфейс к отличному пакету графвиз.

Вот хороший пример из документов (их много и много):

Block partition of a political blogs network

(Блокировка раздела сети политических блогов).

И, код для него:

>>> g = gt.collection.data["polblogs"]
>>> g = gt.GraphView(g, vfilt=gt.label_largest_component(gt.GraphView(g, directed=False)))
>>> state = gt.BlockState(g, B=g.num_vertices(), deg_corr=True)
>>> state = gt.multilevel_minimize(state, B=2)
>>> gt.graph_draw(g, pos=g.vp["pos"], vertex_fill_color=state.get_blocks(), output="polblogs_agg.pdf")
<...>

(Примечание: позиции каждого узла предопределены в этом примере, поэтому не нужно было запускать алгоритм компоновки)

Вот еще один пример использования тех же данных (и результат невероятный): http://ryancompton.net/2014/10/05/graph-tools-visualization-is-pretty-good/

1 голос
/ 11 августа 2014

Другой способ - Cytoscape .Вы также можете использовать файлы gml.

Как сказал psychemedia, вы можете использовать Networkx для построения графика и экспорта в файл gml.

nx.write_graphml(G,'my_file.gml')

После этого в Cytoscape нажмите From Network File и выберите ваш gml-файл.Там вы также можете изменить стиль.

0 голосов
/ 19 июня 2019

В последнее время здесь произошло много событий! Netwulf - это библиотека, предназначенная для обеспечения простой воспроизводимой интерактивной визуализации сетей в Python (отказ от ответственности: я участник).

img

Также проверьте webweb , что лучше, если вы хотите экспортировать сеть в формате html.

...