Инструмент или библиотека для создания графиков с экспортом

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

Типы графов (сетевых топологий ), которые мне нужно сгенерировать, следующие:

  • Эрдос-Реньи
  • Барабаси-Альберт
  • Случайный обычный
  • Уоттс-строгац (по желанию)

Я могу взять 2 графа, сгенерированных с использованием вышеуказанных моделей, и связать их вместе, например, соединив граф Эрдоса-Реньи со случайным регулярным графом.

Мне нужен инструмент или библиотека, способная генерировать и экспортировать графики. Приемлемые форматы экспорта: файлы CSV, JSON, XML и gml. Чем проще формат экспорта, тем лучше.

Дуги в графе могут быть направленными или ненаправленными, взвешенными или невзвешенными, а узлы должны содержать основную информацию (например, параметр «потребление»). Последнее может быть сделано через наследование и не имеет решающего значения.

Мне не нужно визуализировать сгенерированные графики прямо сейчас, я мог бы использовать для этого другой инструмент. Было бы неплохо, но больше всего меня волнует качество генерируемой сети.

Я предпочитаю инструменты с хорошей документацией и качественными руководствами .

Я знаю Java и C++ , предпочитая первый. Я также мог бы использовать Python (если это лучший вариант), но я не совсем знаком с ним.

Некоторые из библиотек, которые я рассматриваю:

JGraphT — известная библиотека Java, имеет всеобъемлющий JavaDoc , но его учебные пособия довольно плохи, и, похоже, он не способен генерировать все сетевые топологии, которые мне нужны.

Библиотека Boost Graph — известная библиотека C++, имеет исчерпывающую документацию , но я не могу найти для нее учебники и не уверен, что в ней есть все необходимые мне генераторы.

Neo4j представляет собой набор алгоритмов Java , имеет всеобъемлющий документ JavaDoc , но не имеет руководств и, похоже, отсутствует генератор случайных чисел .

NetworkX — это библиотека Python, которая, кажется, имеет лучшую документацию и учебные пособия, кажется, в ней есть все генераторы, которые мне нужны, но для этого потребуется, чтобы я использовал Python. Это действительно так хорошо?

Ваш совет приветствуется.

Ответы (1)

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

NetworkX очень хорош, но я бы также посоветовал взглянуть на plotly/matplotlib/scipy для некоторых дополнительных инструментов.

Чтобы ответить на последний вопрос, Python действительно так хорош — есть всего пара действительно важных вещей, которые нужно помнить, <space>*nне равны <tab>, и если ваш код не очень хорошо продуман, он не будет работать, как вы ожидаете, или не будет работать вообще.

Я попробую. К сожалению, у меня нет времени, чтобы как следует изучить Python. Учебные пособия по библиотеке выглядят так, будто это так же просто, как ввести в командной строке. Может, я справлюсь.