Человек сеть-степень центральности в графике

У меня две колонки

temp <- read.delim(text = 'columnA columnB tnum
*Mickey Daffy 12345
*Minnie Donald 34567
Huey Minnie 21345
Donald Minnie 22345
Scrooge Mickey 22456', sep = ' ')

Я пытаюсь создать как направленный, так и неориентированный граф со степенью центральности (DoC) с этими людьми, чтобы показать, что у Минни высокий DoC.

Отредактировано: Извините, чтобы уточнить немного больше: я хочу создать график, как показано ниже, с каждым узлом, имеющим имя и номер.Человек сеть-степень центральности в графике

Я также хотел бы знать, как продемонстрировать промежуточность, подобную приведенному изображению. Строка ниже

plot.igraph(g, edge.label = edge_attr(g, "tnum")) 

вычислить веса ребер на основе того, насколько велико число tnum? - потому что я хочу вычислить экземпляры / частоты определенного числа tnum и нарисовать край / градус на основе этого.

Что вы хотите показать, что у Минни высокий степень или высокий центральность? Если центральность, то какого рода (степень, промежуточность, собственный вектор, ...)?

Oliver Baumann 19.10.2018 21:42

Я немного расстроен тем, что вы ожидаете, что мы сделаем всю работу за вас и не укажете, что вы изо всех сил старались решить свои проблемы перед отправкой в ​​SO. По сути, вы спросили: «Как мне это сделать, покажите мне, пожалуйста, весь код», что не так, как работает SO. Я отредактировал свой ответ с помощью некоторого графического кода, но вы могли бы сделать все это самостоятельно, предварительно проведя небольшое исследование, например прочитав эти вопросы: Цвет узлов в igraph, края графика в зависимости от веса

Oliver Baumann 22.10.2018 13:20

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

Oliver Baumann 25.10.2018 17:14

Хотя оба приведенных ниже метода работали, я пытался проверить все самостоятельно, прежде чем опубликовать здесь свой вопрос, поэтому не задавал с нуля. :) Приношу извинения, если так попалось. вот что я собирался, где я пытался измерить eigen_centrality (по сравнению со степенью центральности) (код добавлен ниже как комментарий к общему сообщению).

analog_kid 30.10.2018 20:39

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

Oliver Baumann 31.10.2018 11:31
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
504
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

сделайте график кадра данных с помощью igraph::graph_from_dataframe, затем просто передайте график в igraph::degree

dirG <- graph_from_data_frame(temp)
degree(dirG)

даст тебе

*Mickey *Minnie    Huey  Donald Scrooge   Daffy  Minnie  Mickey 
      1       1       1       2       1       1       2       1 

Попытка построить график зависимости eigen_centrality от степени центральности (все еще просматриваю руководство igraph, чтобы выяснить разницу между ними и adv. Использования одного над другим) Функция eigen_centrality дает мне число с большим количеством значащих цифр; пытался округлить это число до приемлемого числа с помощью пары простых функций, представленных ниже, но по-прежнему получал неуправляемый график. Нижеприведенный:

analog_kid 30.10.2018 20:51

Это зависит от того, что вы подразумеваете под «степенью центральности»: узел в графе имеет степень, то есть количество связей, которые он имеет с другими узлами; в ориентированных графах это сумма входящей и исходящей степени.

Кроме того, вы можете вычислить меру центральности для узла, которая, по сути, пытается ответить на вопрос, насколько «хорошо связанный», «встроенный» или просто «центральный» узел находится в графе (я, хорошо, знаю, что это сокращает много понятие центральности короткое, но это StackOverflow, а не Википедия). Существует довольно много разных типов центральности, каждый из которых использует свой подход. Опять же, Википедия или ваша любимая книга по теории графов - ваш друг.

Вот код, который показывает, как вычислить степень узла и меру центральности:

library(igraph)

df <- data.frame(
  "from" = c("Mickey", "Minnie", "Huey", "Donald", "Scrooge"),
  "to" = c("Daffy", "Donald", "Minnie", "Minnie", "Minnie")
)

g <- graph_from_data_frame(df, directed = TRUE) # or FALSE
g <- set_edge_attr(g, name = "tnum", value = c(12345, 34567, 21345, 22345, 22456))

plot.igraph(g, edge.label = edge_attr(g, "tnum"))

degree(g)
centralization.betweenness(g)

Если вам требуются другие меры центральности, поиск руководство igraph для centrality или centralization будет правильным решением.

Если вы хотите раскрасить свой график на основе этих мер центрильности, взгляните на этот код и обратитесь к отличному руководству igraph, если что-то неясно:

library(igraph)

df <- data.frame(
  "from" = c("Mickey", "Minnie", "Huey", "Donald", "Scrooge"),
  "to" = c("Daffy", "Donald", "Minnie", "Minnie", "Minnie")
)

# create an igraph object from the dataframe, which essentially is a list
# of edges between nodes
g <- graph_from_data_frame(df, directed = TRUE) # or FALSE

# each edge receives "tnum" as an attribute
g <-
  set_edge_attr(g,
                name = "tnum",
                value = c(12345, 34567, 21345, 22345, 22456))

# calculate betweenness of nodes and store it in an attribute "color" of the
# vertices. The color-attribute is treated specially when plotting graphs.
V(g)$color <- betweenness(g)

plot.igraph(g,
            # plot edge labels from the "tnum" attribute
            edge.label = edge_attr(g, "tnum"),
            # specify the palette of colours to use when plotting vertices
            palette = heat.colors(n = 99))

# same as above; we multiply by 100 to make sure all values are > 0, otherwise
# the colour will be interpreted as 0 (usually, white)
V(g)$color <- (eigen_centrality(g)$vector) * 100

# assign edge weights based on the last digit of "tnum"
E(g)$weight <- E(g)$tnum %% 10

plot.igraph(
  g,
  edge.label = edge_attr(g, "tnum"),
  edge.width = E(g)$weight,
  edge.arrow.size = .8,
  palette = heat.colors(n = 99)
)

Попытка сократить количество значащих цифр в eigen_centrality, используя часть кода @Oliver Baumann выше V (g) $ color <- (eigen_centrality (g) $ vector) V (g) $ doc <- (eigen_centrality (g) $ vector) V (g) $ doc = signif (V (g) $ doc, 1) V (g) $ doc = formatC (V (g) $ doc, format = "f", digits = 2) E (g) $ weight <- E (g) $ finfactor %% 10 plot.igraph (g, edge.label = edge_attr (g, "finfactor"), edge.width = E (g) $ weight, edge.arrow.size = .8, palette = heat.colors (n = 99))

analog_kid 30.10.2018 21:07

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