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:Итак, можно сформировать сравнительную таблицу всех этих библиотек:Таким образом, если вы впервые занялись построением графа или пользовались только какой-либо одной библиотекой при построении, данная статья будет крайне полезна для понимания плюсов и минусов разных инструментов.