Обсуждение: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()
Персональные инструменты
Инструменты