Время прочтения: 4 мин.

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

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

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

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

Разработчики 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:

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

ИнструментПреимуществаНедостатки
NetworkXПроста для работы, возможность работы со всеми распространенными форматами хранения графов, возможность визуализации объемных и плоских графиков, не требовательна к операционной системеНе построить сложный граф (будет выглядеть не лучшим образом)
PyVizХороша в построении графов разной сложности, большой набор инструментовЕсли вы работаете в какой-либо внутренней сети, могут возникнуть сложности в работе с данной библиотекой, т.к. она использует интернет-соединение
GephiУдобно делать изменения в графе с помощью мыши, есть бизнес-аналитика, возможность интеграции с Excel, интерактивное исследование графиковНет возможности отката назад, что значительно затрудняет процесс корректировки графа; при построении больших графов (1000000 вершин) может не хватать вычислительной мощности

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