{"id":14089,"url":"\/distributions\/14089\/click?bit=1&hash=0455aa44b94d3f6d56662f56c320d128afbd2525a11de55fa7e9a355fd6c21e9","title":"\u041a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430 \u043c\u0430\u0440\u043a\u0435\u0442\u043f\u043b\u0435\u0439\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435","buttonText":"\u0423\u0437\u043d\u0430\u0442\u044c","imageUuid":"2f860e57-0a5d-5f4d-aa8e-e8129a59d9e8"}

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