Графовый анализ в R с igraph
Использование графов играет огромную роль в решении широкого спектра задач, где необходимо проанализировать данные, касающиеся взаимосвязей между сущностями - от AML и кредитного скоринга до анализа социальных сетей.
Задача анализа графа может состоять из множества небольших отдельных кирпичиков - подзадач. И в этой публикации я хочу сделать обзор отдельных базовых возможностей, а так же поделюсь своим опытом работы с пакетом igraph – мощным инструментом для анализа графов в экосистеме языка R.
Загружаем пакет igraph.
Далее сформируем датафрейм df и на основе него создадим граф my_graph с помощью метода graph_from_data_frame. Признак directed=TRUE определяет то, что граф направленный, в нашем случае от Sender к Recepient. Если же хотим работать просто со связями, то указываем directed=FALSE.
Посмотрим содержание нашего графа.
Теперь попробуем вывести изображение на основе полученного графа.
На изображении видно, что в нашем графе присутствуют множественное ребро (Кролик->Сова) и петля (Иа-Иа). Для избавления от множественных ребер и петель применим метод simplify.
Теперь рассмотрим такую характеристику, как степени (degree) или число связей узлов графа. Для нахождения данной характеристики воспользуемся соответствующим методом – degree.
Построим гистограмму с частотой связей по вершинам графа.
Рассмотрим ещё одну интересную функцию, как поиск и выделение подграфов. Здесь нам поможет метод induced_subgraph, который создаёт (выделяет) подграф, содержащий только определенные вершины и рёбра между ними.
Получаем подграф с первой по пятую вершину нашего основного графа:
Так же в igraph есть метод write_graph для сохранения графа в файл.
В данном случае мы используем значение format="ncol" для возможности восстановления графа с именованными вершинами. Для чтения графа из файла нужно будет воспользоваться методом read_graph.
В заключение хочу отметить, что open source пакет igraph прост в использовании, эффективен и имеет довольно высокую популярность, наряду с такими пакетами как sna. А имеющиеся отличные средства визуализации для R (например, ggplot2) предоставляют широкие возможности для решения задач графового (сетевого) анализа.