{"id":14275,"url":"\/distributions\/14275\/click?bit=1&hash=bccbaeb320d3784aa2d1badbee38ca8d11406e8938daaca7e74be177682eb28b","title":"\u041d\u0430 \u0447\u0451\u043c \u0437\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0430\u0432\u0446\u044b \u0430\u0432\u0442\u043e?","buttonText":"\u0423\u0437\u043d\u0430\u0442\u044c","imageUuid":"f72066c6-8459-501b-aea6-770cd3ac60a6"}

Сравнение инструментов для 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 комментариев
Раскрывать всегда