Эффективный способ получить сообщества графов

У меня есть данные следующего типа, и я знаю, что будет много несвязанных сообществ (хорошее разделение). Я хочу эффективно (быстро и желательно с минимальными / отсутствующими зависимостями) разделять данные на их сообщества. Я знаю, что могу использовать граф для выполнения этой задачи, но надеялся, что существует быстрый базовый R-способ извлечения этих сообществ. Я показываю, как я разделяю сообщества, используя график ниже.

Есть ли быстрый базовый R-способ извлечения сообществ? Совместное использование небазовых подходов R тоже хорошо, так что этот вопрос будет более полезен для будущих искателей.

dat <-  data.frame(
    x = c('A', 'A', 'B', 'C',    'D', 'F',   'E',    'W', 'X', 'R', 'W'),
    y = c('A', 'B', 'C', 'C',    'F', 'F',   'E',    'Y', 'P', 'P', 'P')
)

mat <- xtabs(~ x + y, data = dat)

library(igraph)
g <- graph.data.frame(dat)
plot(g)

clust <- cluster_walktrap(g)

data.frame(
    val = clust$names,
    group = clust$membership
)

Желаемый результат

##    val group
## 1    A     2
## 2    B     2
## 3    C     2
## 4    D     3
## 5    F     3
## 6    E     4
## 7    W     1
## 8    X     1
## 9    R     1
## 10   Y     1
## 11   P     1

Эффективный способ получить сообщества графов

Вы не можете работать с графами в базе R так быстро, как с igraph. Почему вы против igraph? Из-за зависимостей? Определите, пожалуйста, «быстро».

Roland 15.11.2018 14:54

@Roland Я хотел избежать зависимости, но если это лучшее решение, то меня это устраивает. Это похоже на проблему кластеризации / взаимодействия, и я подумал, что, вероятно, есть решение матричной алгебры, которое я упускаю. Быстро было бы относительно igraph. Если он близок / похож по скорости или быстрее. Но быстро в моем понимании не является точным, тем более относительным. Конечно, я мог бы использовать цикл for / while и вручную искать индикаторы в строках и столбцах, но это было бы медленно.

Tyler Rinker 15.11.2018 15:04

Если бы существовал другой внешний пакет, который был бы быстрее, чем igraph, я был бы открыт для этого, и если бы мне все равно пришлось иметь зависимость, мне бы потребовался самый быстрый подход.

Tyler Rinker 15.11.2018 15:07

Это было бы не по теме. Я не ожидаю, что будет что-то быстрее, чем igraph. Но это могло быть возможно ...

Roland 15.11.2018 15:10

@TylerRinker Я согласен с Роландом в том, что вряд ли будет что-то быстрее, чем igraph, и, вероятно, не что-то такое же быстрое, как igraph. Насколько сильно снизится производительность, чтобы избежать зависимости?

duckmayr 15.11.2018 16:25

@TylerRinker, как сказано в ?clusters, для слабосвязанных компонентов использует поиск в ширину. Тогда, как говорится, например, в cs.stackexchange.com/questions/56504/…, нет лучшего асимптотического алгоритма (возможно, для отдельного графа). Также обратите внимание: «любой правильный алгоритм должен будет проверять каждую вершину и каждое ребро хотя бы один раз». Итак, все сводится к реализациям, и строки 89--162 в github.com/cran/igraph/blob/master/src/components.c выглядят довольно лаконично.

Julius Vainora 23.11.2018 20:39

... Тем не менее, я также не думаю, что можно придумать что-то заметно лучше.

Julius Vainora 23.11.2018 20:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
7
83
0

Другие вопросы по теме