R/Конверсия биграфа в монограф

Материал из Letopisi.Ru — «Время вернуться домой»
(Различия между версиями)
Перейти к: навигация, поиск
(Граф статей или групп)
(Граф статей или групп)
Строка 42: Строка 42:
  
 
Или!
 
Или!
  gn <- graph.adjacency(g96e, mode = "undirected")
+
  gn <- graph_from_adjacency_matrix(Acol, mode = "undirected", diag = TRUE)
 +
gn <- graph_from_adjacency_matrix(Acol, mode = c("directed"), diag = TRUE)
  
 
Now we need to tansform the graph so that multiple edges become an attribute ( E(g)$weight ) of each unique edge:  
 
Now we need to tansform the graph so that multiple edges become an attribute ( E(g)$weight ) of each unique edge:  
  
gn <- simplify(gu) # Упрощаем граф
+
 +
E(gn)$weight <- count.multiple(gn)
 +
gn <- simplify(gu) # Упрощаем граф
 +
 +
E(gn)$label = E(gn)$weight # Вес ребра будет показан на нем - label
 +
plot(gn, layout=layout.fruchterman.reingold, vertex.color="gray60", vertex.size = 15, edge.arrow.size = 0.1, edge.color = "gray80", edge.width = 1+E(gn)$weight/24 )
  
 +
 +
plot(gn, layout=layout.kamada.kawai, vertex.color="gray60", vertex.size = 25, edge.arrow.size = 0.5, edge.color = "gray80", edge.width = gn$weight )
  
 
----
 
----

Версия 07:54, 14 марта 2016

Превращение биграфа в граф = история превращения графа, в котором есть и субъекты - person и объекты

Исходный пример - есть люди и есть группы, к которым они относятся

  1. obebukhova Литература
  2. sch27@tagobr.ru Литература

Содержание

Загружаем исходный файл и переводим

ghist <- read.csv(file.choose(),sep=",", as.is=T, header=T, encoding ="UTF-8") # чтобы сохранить русские значения
ghist <- na.omit(ghist ) # если там были пропущенные значения, то удалим их
g2 <- data.frame(User = paste("U",ghist[,1],sep=":" ) , Page = paste("P",ghist[,2],sep=":") ) # если мы хотим добавим указания на страницы и участников
g2 <- data.frame(User = ghist[,1] , Page = ghist[,2] ) # или 

Превращение из биграфа в one-mode

 library('Matrix') # пакет для работы с матрицами 
A <- spMatrix(nrow=length(unique(g2$User)),
             ncol=length(unique(g2$Page)),
             i = as.numeric(factor(g2$User)),
             j = as.numeric(factor(g2$Page)),
             x = rep(1, length(as.numeric(g2$User))) )
row.names(A) <- levels(factor(g2$User))
colnames(A) <- levels(factor(g2$Page))
Arow <- A %*% t(A)  ## Это у нас граф участников
Acol <- t(A) %*% A ## А это у нас связи группы

Отдельно посмотрим на граф участников

Скорее всего, он очень большой, так что лучше бы его в output послать


gu <- graph_from_adjacency_matrix(Arow,mode = c("directed"), weighted = NULL, diag = TRUE, add.colnames = NULL, add.rownames = NA) # получаем граф
gu <- simplify(gu) # Упрощаем граф


Граф статей или групп

gn <- graph_from_adjacency_matrix(Arow,mode = c("directed"), weighted = NULL, diag = TRUE, add.colnames = NULL, add.rownames = NA) # получаем граф

Или!

gn <- graph_from_adjacency_matrix(Acol, mode = "undirected", diag = TRUE)
gn <- graph_from_adjacency_matrix(Acol, mode = c("directed"), diag = TRUE)

Now we need to tansform the graph so that multiple edges become an attribute ( E(g)$weight ) of each unique edge:


E(gn)$weight <- count.multiple(gn) 
gn <- simplify(gu) # Упрощаем граф

E(gn)$label = E(gn)$weight # Вес ребра будет показан на нем - label
plot(gn, layout=layout.fruchterman.reingold, vertex.color="gray60", vertex.size = 15, edge.arrow.size = 0.1, edge.color = "gray80", edge.width = 1+E(gn)$weight/24 )


plot(gn, layout=layout.kamada.kawai, vertex.color="gray60", vertex.size = 25, edge.arrow.size = 0.5, edge.color = "gray80", edge.width = gn$weight )


Ссылки:

Персональные инструменты
Инструменты