Графовый анализ в 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) предоставляют широкие возможности для решения задач графового (сетевого) анализа.
Спасибо за статью, редко тут увидишь код! Слышал, что на графах (DAG) можно решать вопросы причинно-следственных связей (casual inference), можете подсказать, где про это хорошо написано?
Благодарим за интерес ) Уточним у автора и вернемся к вам с ответом!
Так вы не сами что ли пишете?
Как вы заметили, тематика наших публикаций довольно разнообразна. В нашем сообществе посты пишут несколько авторов, специализирующихся на той или иной теме.
Если вас интересует тема направленных ациклических графов в контексте языка R, то можно посмотреть информацию по конкретным инструментам, например, dagitty
да, конечно же о daggity наслышан и пользовался. Язык не так важен, думал, ваши авторы смогут написать статью с практическим кейсом о Cas Inf
Хорошая идея! Попробуем подготовить публикацию на данную тему )