NetworkX — nx.draw(), по-видимому, создает бесконечный цикл

#python #networkx

#python #networkx

Вопрос:

Я пытаюсь создать сетевое представление группы учетных записей Twitter, используя данные, которые я собрал за последние несколько месяцев. Я использую словарь словарей для представления матрицы смежности с взвешенными направленными связями между учетными записями, где значения во внутреннем словаре являются этими числовыми весами. Однако проблема, с которой я продолжаю сталкиваться, возникает, когда я запускаю nx.draw() свой набор данных.

 def makeDiGraph(adjacencyMatrix = None):
    G = nx.DiGraph()
    for i in adjacencyMatrix:
        for j in adjacencyMatrix[i]:
            if adjacencyMatrix[i][j] > 0:
                G.add_edge(i, j)
    nx.draw(G)
    plt.show()
 

Когда я запускаю этот код, используя мой dict of dicts, я не получаю ошибок, но вместо этого я получаю то, что кажется каким-то бесконечным циклом в моей программе. Поскольку цикл, по-видимому, происходит внутри nx.draw() функции (как определено моим использованием операторов печати для определения того, где управление останавливается), я не могу много сделать для отладки, чтобы выяснить, в чем именно проблема. происходит. Я экспериментировал с добавлением и удалением следующей строки после создания экземпляра DiGraph() объекта, чтобы разместить узлы перед реализацией ребер, но я все еще сталкиваюсь с той же проблемой.

 for i in adjacencyMatrix:
    G.add_node(i)
 

Я полагаю, что проблема возникает где-то в том, как я размещаю ребра, но я не уверен, что не так с моим кодом.

Вот пример подмножества моих данных:

 {'@RepFinkenauer': {'@RepFinkenauer': 0, '@RepLindaSanchez': 11, '@RepKatieHill': 0, '@RepTimBurchett': 0, '@SenBooker': 13, '@RepSylviaGarcia': 15, '@RepDelBene': 6, '@amprog': 4, '@RepMcNerney': 0, '@RepJuanVargas': 18}, '@RepLindaSanchez': {'@RepFinkenauer': 0, '@RepLindaSanchez': 11, '@RepKatieHill': 0, '@RepTimBurchett': 0, '@SenBooker': 13, '@RepSylviaGarcia': 15, '@RepDelBene': 6, '@amprog': 4, '@RepMcNerney': 0, '@RepJuanVargas': 18}, '@RepKatieHill': {'@RepFinkenauer': 0, '@RepLindaSanchez': 11, '@RepKatieHill': 0, '@RepTimBurchett': 0, '@SenBooker': 13, '@RepSylviaGarcia': 15, '@RepDelBene': 6, '@amprog': 4, '@RepMcNerney': 0, '@RepJuanVargas': 18}, '@RepTimBurchett': {'@RepFinkenauer': 0, '@RepLindaSanchez': 11, '@RepKatieHill': 0, '@RepTimBurchett': 0, '@SenBooker': 13, '@RepSylviaGarcia': 15, '@RepDelBene': 6, '@amprog': 4, '@RepMcNerney': 0, '@RepJuanVargas': 18}, '@SenBooker': {'@RepFinkenauer': 0, '@RepLindaSanchez': 11, '@RepKatieHill': 0, '@RepTimBurchett': 0, '@SenBooker': 13, '@RepSylviaGarcia': 15, '@RepDelBene': 6, '@amprog': 4, '@RepMcNerney': 0, '@RepJuanVargas': 18}, '@RepSylviaGarcia': {'@RepFinkenauer': 0, '@RepLindaSanchez': 11, '@RepKatieHill': 0, '@RepTimBurchett': 0, '@SenBooker': 13, '@RepSylviaGarcia': 15, '@RepDelBene': 6, '@amprog': 4, '@RepMcNerney': 0, '@RepJuanVargas': 18}, '@RepDelBene': {'@RepFinkenauer': 0, '@RepLindaSanchez': 11, '@RepKatieHill': 0, '@RepTimBurchett': 0, '@SenBooker': 13, '@RepSylviaGarcia': 15, '@RepDelBene': 6, '@amprog': 4, '@RepMcNerney': 0, '@RepJuanVargas': 18}, '@amprog': {'@RepFinkenauer': 0, '@RepLindaSanchez': 11, '@RepKatieHill': 0, '@RepTimBurchett': 0, '@SenBooker': 13, '@RepSylviaGarcia': 15, '@RepDelBene': 6, '@amprog': 4, '@RepMcNerney': 0, '@RepJuanVargas': 18}, '@RepMcNerney': {'@RepFinkenauer': 0, '@RepLindaSanchez': 11, '@RepKatieHill': 0, '@RepTimBurchett': 0, '@SenBooker': 13, '@RepSylviaGarcia': 15, '@RepDelBene': 6, '@amprog': 4, '@RepMcNerney': 0, '@RepJuanVargas': 18}, '@RepJuanVargas': {'@RepFinkenauer': 0, '@RepLindaSanchez': 11, '@RepKatieHill': 0, '@RepTimBurchett': 0, '@SenBooker': 13, '@RepSylviaGarcia': 15, '@RepDelBene': 6, '@amprog': 4, '@RepMcNerney': 0, '@RepJuanVargas': 18}}
 

Похоже, проблема заключается в размере набора данных, поскольку я не сталкиваюсь с такой же проблемой при запуске кода для этого меньшего набора данных (1/50 размера реального набора данных).

Комментарии:

1. Что заставляет вас думать, что это бесконечный цикл? Это просто занимает много времени? Сколько узлов / ребер в вашем графике? Если вы уменьшите количество узлов до <100, он будет отображаться?

2. Не могли бы вы привести минимальный пример, который можно воспроизвести??

3. Проблема, вероятно, в том, что сеть очень большая, и рисование занимает слишком много времени. Я очень сомневаюсь, что здесь есть бесконечный цикл.

4. на второй взгляд, это не бесконечный цикл! проблема, однако, в том, что для создания очень переполненного холста требуется много времени, которое затем перестает отвечать на запросы и приводит к сбою приложения «python». не уверен, следует ли мне использовать другую функцию рисования