Обсуждение:R/Конверсия биграфа в монограф
Материал из Letopisi.Ru — «Время вернуться домой»
Драфт - могут быть лишние строки
rm(list = ls()) # Удалили все, что есть
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] ) ## G2 Двудольный граф, умеем с ним работать ## Преврещаем в однодольный 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) ## Persons Acol <- t(A) %*% A ## Groups - Objects Acol ## Матрица смежности gn <- graph_from_adjacency_matrix(Acol,mode = c("directed"), weighted = NULL, diag = TRUE, add.colnames = NULL, add.rownames = NA) plot(gn, edge.arrow.size=.4, vertex.size=20, layout=layout.kamada.kawai, edge.arrow.size=.4,) gn4 <- simplify( gn, remove.multiple = T, remove.loops = T, edge.attr.comb=c(weight="sum", type="ignore") ) plot(gn4, edge.arrow.size=.4, vertex.size=20) ## Или gn <- graph_from_adjacency_matrix(Acol, mode = "undirected", diag = TRUE) gn <- graph_from_adjacency_matrix(Acol, mode = c("directed"), diag = TRUE) E(gn)$weight <- count.multiple(gn) gn <- simplify(gn) plot(gn, layout=layout.kamada.kawai, vertex.color="gray60", vertex.size = 25, edge.arrow.size = 0.5, edge.color = "gray80", edge.width = gn$weight ) ## plot(gn, layout=layout.kamada.kawai, vertex.color="gray60", vertex.size = 5, edge.arrow.size = 0.5, edge.color = "gray80", edge.width = 1+E(gn)$weight/24 ) 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 ) ## Тест веса gm <- graph_from_adjacency_matrix(Acol, weighted=T, mode = "undirected") gm <- simplify(gm) E(gm)$label = E(gm)$weight set.seed(10) plot(gm, edge.arrow.size=.4, vertex.size=20, edge.width = 1+E(gm)$weight/4, layout=layout.fruchterman.reingold) plot(gm, edge.arrow.size=.4, vertex.size=12, edge.width = 1+E(gm)$weight/4, layout=layout.fruchterman.reingold.grid) plot(gm, edge.arrow.size=.4, vertex.size=12, edge.width = 1+E(gm)$weight/4, layout=layout.graphopt) plot(gm, edge.arrow.size=.4, vertex.size=12, edge.width = 1+E(gm)$weight/4, layout=layout.lgl) plot(gm, edge.arrow.size=.4, vertex.size=12, edge.width = 1+E(gm)$weight/4, layout=layout.spring) plot(gm, edge.arrow.size=.4, vertex.size=12, edge.width = 1+E(gm)$weight/4, layout=layout.davidson.harel) ### plot(gn4, edge.arrow.size=.4, vertex.size=20) plot(gn4, layout=layout.fruchterman.reingold, vertex.color="gray60", vertex.size = 0, edge.arrow.size=.4) plot(gn4, layout=layout.kamada.kawai, vertex.color="gray60", vertex.size = 25, edge.arrow.size = 0.5, edge.color = "gray80") seed(10) E(gn4)$width <- E(gn4)$weight/6 plot(gn4, layout=layout.kamada.kawai, vertex.color="gray60", vertex.size = 25, edge.arrow.size = 0.5, edge.color = "gray80") E(gn4)$width <- 1+E(gn4)$weight/12 plot(gn4, layout=layout.kamada.kawai, vertex.color="gray60", vertex.size = 25, edge.arrow.size = 0.5, edge.color = "gray80") gu <- graph_from_adjacency_matrix(Arow,mode = c("directed"), weighted = NULL, diag = TRUE, add.colnames = NULL, add.rownames = NA) # получаем граф gu <- simplify(gu) # Упрощаем граф png("gu1.png") plot(gu, main = "layout.fruchterman.reingold", layout=layout.fruchterman.reingold) dev.off()