История Летописи/Процедура превращения журнала в карту
Материал из Letopisi.Ru — «Время вернуться домой»
Что у нас есть и что нам понадобиться?
Вся история изменений Летописи в текстовом формате csv на 143 мгб История за каждый год с 2006 по 2015 доступна на сайте открытых данных https://hubofdata.ru/dataset?q=letopisi - для дальнейшего анализа. Каждый желающий может взять эти данные
Содержание |
Разделение по годам
- lhist <- read.csv(file.choose(),sep=";", as.is=T, header=T, encoding ="UTF-8") # считали всю историю Летописи
- lhist <- na.omit(lhist ) # Убрали строки с неопределенными NA значениями
- sort1.let <- lhist[order(lhist$rev_timestamp), ] # Отсортировали записи по дате
- lhist.sub2006 <- subset(lhist2,as.numeric(rev_timestamp) < 20070000000000 & as.numeric(rev_timestamp) > 20060000000000 ) ; Действия 2006 года
- lhist.sub2007 <- subset(lhist2,as.numeric(rev_timestamp) < 20080000000000 & as.numeric(rev_timestamp) > 20070000000000 ) ; 2007
- lhist.sub2008 <- subset(lhist2,as.numeric(rev_timestamp) < 20090000000000 & as.numeric(rev_timestamp) > 20080000000000 ) ; 2008
Сохранили все данные по годам - https://hubofdata.ru/dataset?q=letopisi - для дальнейшего анализа
Данные для каждого года
Для каждого года мы можем посмотреть
- E - общее число действий legth(lhist.sub2007[,2])
- U - users2007 <- unique(lhist.sub2007[,2]) = length(unique(lhist.sub2009[,2])) ;
- P - pages2007 <- unique(lhist.sub2007[,5]) ;
- users <- unique(lhist[,2]) ; выделить участников
- length(unique(lhist[,2])) - посчитать участников
- pages <- unique(lhist[,5]) ; - выделить страницы
- length(pages) = length(unique(lhist[,5])) - посчитать страницы
Превращение данных в сеть
В конкретном примере на данных 2006 года
- lt06 <- data.frame(Source = paste("U",lhist.sub2006[,2],sep=":" ) , Target = paste("P",lhist.sub2006[,5],sep=":") )
- lt06.network <- graph.data.frame(lt06,directed=F) ;
- V(lt06.network)$type <- bipartite.mapping(lt06.network)$type
- всегда используем этот тип
- как получить вершины одного типа?
- lt06.network <- simplify(lt06.network , remove.multiple = T, remove.loops = T, edge.attr.comb=c(weight="sum") ) ; # Объединение связей
Данные о биграфе 2006 год
- graph.density(lt06.network)
- clusters(lt06.network)$no
- diameter(lt06.network)
- transitivity(lt06.network, type="global") ; # понятно, что 0
- centralization.betweenness (lt06.network) ;
Распределение узлов сети по различным параметрам
Здесь мы просто рассматриваем распределение узлов по их сетевым характеристикам
Распределение всех узлов по degree
- sorted_by_degrees <- sort(degree(lt06.network), decreasing=TRUE)
- write.csv(sorted_by_degrees, file="lt06_soterdby_degrees.csv", row.names=TRUE) ;
Распределение по центральности
- sorted_by_betw <- sort(betweenness(lt06.network), decreasing=TRUE)
- write.csv(sorted_by_betw, file="lt06_soterdby_betw.csv", row.names=TRUE) ;
Распределение по PageRank
- sorted_by_rank <- sort(page.rank(lt06.network)$vector, decreasing=TRUE)
- sorted_by_rank[1:50]
- write.csv(sorted_by_rank, file="lt06_soterdby_rank.csv", row.names=TRUE) ;
Распределение по коэффициенту кластеризации
- transitivity(g, type="local")
- order(transitivity(g, type="local")) - отранжировали узлы по кластеризации (имеет смысл только для одномодального графа) - Коэффициент кластеризации
Выделение кластеров для биграфа (?)
Превращение двумодального графа в одномодальный
- ltr06.network_users <- bipartite.projection(ltr06.network)$proj2
Посчитали характеристики одномодального графа участников
- graph.density(ltr06.network_users)
- clusters(ltr06.network_users)$no
- diameter(ltr06.network_users)
- transitivity(ltr06.network_users, type="global") ;
- centralization.betweenness (ltr06.network_users) ;
Выделили сообщества
Представили сообщества Летописи в VOSview - см. История Летописи
См.
Сравнение отдельных проектов Летописи в R - ВикиграммаR