человек сеть-степень центральности в игре - PullRequest
0 голосов
/ 19 октября 2018

У меня есть два столбца

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.

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

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

Кроме того, вы можете вычислить меру центральности для узла, который, по сути, пытается ответить на вопрос, как «хорошо связаны», «встроенный "или просто" центральный "узел находится на графике (я хорошо осознаю, что это сокращает многие понятия центральности, но это 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)

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

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

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)
)
0 голосов
/ 19 октября 2018

создайте график фрейма данных, используя 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 
...