{"id":14276,"url":"\/distributions\/14276\/click?bit=1&hash=721b78297d313f451e61a17537482715c74771bae8c8ce438ed30c5ac3bb4196","title":"\u0418\u043d\u0432\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u0442\u043e\u0432\u0430\u0440 \u0438\u043b\u0438 \u0443\u0441\u043b\u0443\u0433\u0443 \u0431\u0435\u0437 \u0431\u0438\u0440\u0436\u0438","buttonText":"","imageUuid":""}

Сравнение инструментов для Graph Mining

Graph Mining – одно из направлений интеллектуального анализа данных, в котором объемные комплексные данные представлены в виде графов. Задачей Graph Mining является обнаружение в графе типовых шаблонов. Общепринятым видом таких шаблонов являются часто встречающиеся подграфы. В области Data Science и аналитике также используются графы для моделирования многих задач.

Одной из популярных библиотек Python для построения графов является NetworkX. Она написана на языке Python, служит для создания, обработки, анализа и визуализации графов с помощью Matplotlib.

Основные особенности NetworkX:

  1. возможность работы с разными видами графов (простые, ориентированные и др.);
  2. работа со всеми распространенными форматами для хранения графов;
  3. работа с любой структурой данных для создания узлов (из текстовых данных, изображений или XML-файлов);
  4. есть возможности расчета множества характеристик: высоты, диаметра, радиуса и др.;
  5. визуализация объемных и плоских графиков.

Разработчики NetworkX заявляют, что библиотека способна работать с большими графами (10 000 000 узлов, 100 000 000 ребер).

Рассмотрим использование NetworkX на Python на примере обезличенных данных по обучающим курсам, которые прошли сотрудники и их должностям.

#Импортируем библиотеки import pandas as pd import networkx as nx import matplotlib.pyplot as plt #Загружаем наши данные df = pd.read_excel('Данные.xlsx')
#Создаем экземпляр класса graph = nx.Graph() #Задаем вершины course_list=df['Курс '].unique() for c in course_list: G.add_node(c, title=c,lable=c, color='blue') prof_list=df['Должность'].unique() for p in prof_list: G.add_node(p, title=p,lable=p, color=PROFF_COLOR) id_list=df['id сотрудника'].unique() for i in id_list: G.add_node(i, title=i,lable=i, color=ID_COLOR) #Смотрим сколько получилось вершин G.number_of_nodes()
#Пишем цикл для создания ребер for i in id_list: for c in course_list: G.add_edge(c, i, color='black') for p in prof_list: G.add_edge(i, p, color='black') #Рисуем граф nx.draw(G)

PyViz – библиотека Python, которая предназначена для быстрого создания визуальных сетевых графиков с минимальным кодом на Python, имеет интеграцию с NetworkX.

Построим граф с помощью pyviz на тех же данных (требуется интернет соединение):

# Импортируем библиотеку from pyvis.network import Network #Создаем граф на тех же данных из датафрейма net = Network(notebook=True) course_list=df['Курс'].unique() for c in course_list: net.add_node(c) prof_list=df['Должность'].unique() for p in prof_list: net.add_node(p) id_list=df['id сотрудника'].unique() for i in id_list: net.add_node(i) for i in id_list: for c in course_list: net.add_edge(c, i) for p in prof_list: net.add_edge(i, p) net.show_buttons(filter_=True) net.show('example.html')

Файл ‘example.html’ сразу сохраняется в ту же директорию, и его можно открывать как страничку в интернете вот в таком удобном виде и менять настройки:

Для визуализации графов существует множество программ: Gephi, Graphviz и др.

Чаще на практике используютGephi. Она написана на языке Java, позволяет манипулировать элементами графов с помощью мыши. Помимо визуализации есть возможность вычисления статистических характеристик графа и преобразование топологии.

Вот как выглядит граф на тех же данных, визуализированный в Gephi:

Итак, можно сформировать сравнительную таблицу всех этих библиотек:

Таким образом, если вы впервые занялись построением графа или пользовались только какой-либо одной библиотекой при построении, данная статья будет крайне полезна для понимания плюсов и минусов разных инструментов.

0
Комментарии
-3 комментариев
Раскрывать всегда