R/Конверсия биграфа в монограф
Материал из Letopisi.Ru — «Время вернуться домой»
(Различия между версиями)
(→Загружаем исходный файл и переводим) |
|||
Строка 12: | Строка 12: | ||
g2 <- data.frame(User = paste("U",ghist[,1],sep=":" ) , Page = paste("P",ghist[,2],sep=":") ) # если мы хотим добавим указания на страницы и участников | 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 <- data.frame(User = ghist[,1] , Page = ghist[,2] ) # |
+ | |||
+ | И с этим графом - [[биграф]]ом работаем. | ||
=== Превращение из биграфа в one-mode === | === Превращение из биграфа в one-mode === |
Версия 21:01, 19 марта 2016
Превращение биграфа в граф = история превращения графа, в котором есть и субъекты - person и объекты
Исходный пример - есть люди и есть группы, к которым они относятся
- obebukhova Литература
- 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)
и еще лучше с учетом веса:
gm <- graph_from_adjacency_matrix(Acol, weighted=T, mode = "undirected") gm <- simplify(gm) E(gm)$label = E(gm)$weight # указываем вес на ребрах set.seed(10)
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 )
Ссылки:
- http://www.r-bloggers.com/working-with-bipartiteaffiliation-network-data-in-r/
- http://www.r-bloggers.com/working-with-bipartiteaffiliation-network-data-in-r/ - Working with Bipartite/Affiliation Network Data in R (Solomon)