вычислить свойства сети: такие как распределение степеней, плотность, диаметр с помощью Python - PullRequest
0 голосов
/ 24 мая 2018

У меня есть набор данных csv с 2 столбцами user_a и user_b (всего 1900655 строк), каждая строка является соединением дружбы.

Для каждой пары пользователей, которые являются прямыми друзьями, край соединения не является ненаправленным

Столбец user_a содержит идентификатор пользователя.Столбец user_b содержит идентификатор друга user_a.

user_a,user_b
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,9
0,10
0,11
0,12
0,13
....
196584,196537
196585,196539
196586,196539
196587,196540
196588,196540
196589,196547
196590,196561

для поиска сетевых свойств: таких как распределение степеней, плотность, диаметр. Я использовал networkx, когда я запускаю следующий код, мне нужно только использовать python.

import inline
import matplotlib
import networkx as nx
import community
import matplotlib.pyplot as plt

#%matplotlib.inline


with open("user_social.csv","r") as inf:
    next(inf, '')   # skip a line
    G = nx.read_edgelist(inf, delimiter=',', nodetype=int, encoding="utf-8")


#print nx.info(G)
print("Number of nodes in the graph")
print(len(G.nodes()))
print("Number of edges in the graph")
print(len(G.edges()))
print nx.diameter(G)

spring_pos = nx.spring_layout(G)

#plt.axis("off")
#nx.draw_networkx(G, pos = spring_pos, with_labels = False, node_size = 35)

plt.figure(figsize=(8,8))
plt.axis('off')
nx.draw_networkx_nodes(G, pos, node_size=600,node_color="blue",alpha=0.3)
nx.draw_networkx_edges(G, pos, alpha=0.3)
nx.draw_networkx_labels(G, pos)
plt.show(G)

он только показывает следующий результат

Number of nodes in the graph
196591
Number of edges in the graph
950327

, и его сохранение выполняется много часов без какого-либо другого графика или результата или любой ошибки.Я очень плохо знаком с Python и, возможно, я что-то пропустил в своем коде, так как я могу изменить свой код для вычисления распределения степеней, плотности, диаметра с помощью Python?

1 Ответ

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

Я бы порекомендовал вам использовать такие инструменты, как Gephi https://gephi.org/ для сбора статистики сети.В качестве альтернативы вы можете использовать систему сетевых баз данных, такую ​​как NEO4J https://neo4j.com, а затем выполнить запросы, чтобы узнать о ваших данных.Преимущество использования систем БД, таких как NEO4J, заключается в том, что вы можете сохранять и управлять всей своей информацией в одном месте.

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