История Летописи

Материал из Letopisi.Ru — «Время вернуться домой»
(Различия между версиями)
Перейти к: навигация, поиск
(Lin/Lon Modularity)
(Association strength)
Строка 131: Строка 131:
  
  
[[Файл:Lthist02vw.png|300px|]]
+
[[Файл:Lthist02vw.png|400px|]]
  
 
==== Фрагмент карты ====
 
==== Фрагмент карты ====

Версия 21:27, 22 января 2017

На этой странице история создания и правок страниц Летописи будет представлена как граф. Что у нас есть и что нам понадобиться?

Вся история изменений Летописи в текстовом формате csv на 143 мгб История за каждый год с 2006 по 2015 доступна на сайте открытых данных https://hubofdata.ru/dataset?q=letopisi - для дальнейшего анализа. Каждый желающий может взять эти данные

Содержание

Разделение по годам

rev_timestamp;rev_user_text;rev_page;rev_user;page_title;rev_len
20090416061258;Наталия Ефимова;135741;27831;""Школа_№12,_города_Кунгура,_Пермского_края"";87
20070427072926;Анна Коровко;42443;190;"BOTANICUS"_Малышева_И.В.;102
20090320120452;Рината Рахимзянова;131370;27415;"Jack_London_and_his_creativity";3657
20090320120526;Рината Рахимзянова;131370;27415;"Jack_London_and_his_creativity";3656
20090320120558;Рината Рахимзянова;131370;27415;"Jack_London_and_his_creativity";3655

Возьмем R и попробуем выделить только правки 2006 года

  • 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), ] # Отсортировали записи по дате

Получили:

     rev_timestamp     rev_user_text rev_page rev_user       page_title rev_len
759708 20051223042724      OckhamTheFox    96562        0     Мульт_Постер      48
100385 20060127110211 MediaWiki default        1        0 Главная_страница     253
100386 20060127134527             Admin        1        1 Главная_страница     699
100387 20060127134633             Admin        1        1 Главная_страница     703
100388 20060127135228             Admin        1        1 Главная_страница     718
100389 20060127140007 Евгений Патаракин        1        2 Главная_страница     747


  1. lhist.sub2006 <- subset(lhist2,as.numeric(rev_timestamp) < 20070000000000 & as.numeric(rev_timestamp) > 20060000000000 ) ; Действия 2006 года
  2. lhist.sub2007 <- subset(lhist2,as.numeric(rev_timestamp) < 20080000000000 & as.numeric(rev_timestamp) > 20070000000000 ) ; 2007
  3. lhist.sub2008 <- subset(lhist2,as.numeric(rev_timestamp) < 20090000000000 & as.numeric(rev_timestamp) > 20080000000000 ) ; 2008

Сохранили все данные по годам - https://hubofdata.ru/dataset?q=letopisi - для дальнейшего анализа

Данные для каждого года

Для каждого года мы можем посмотреть

  1. E - общее число действий legth(lhist.sub2007[,2])
  2. U - users2007 <- unique(lhist.sub2007[,2]) = length(unique(lhist.sub2009[,2]))  ;
  3. P - pages2007 <- unique(lhist.sub2007[,5])  ;
  • users <- unique(lhist[,2])  ; выделить участников
    • length(unique(lhist[,2])) - посчитать участников
  • pages <- unique(lhist[,5])  ;
    • length(pages) = length(unique(lhist[,5]))


Ветераны - узлы, которые были активны в последующем

Сколько в 2007 году было ветеранов? - тех, кто уже работал в 2006 году?
length(intersect(users2007,users2006))

Превращение данных в сеть

В конкретном примере на данных 2006 года


  • lt2 <- data.frame(User = paste("U",lhist.sub[,2],sep=":" ) , Page = paste("P",lhist.sub[,5],sep=":") ) # Оставили только участников и страницы. На всякий случай добавили к цифрам буковки U: - user и P: - страница, чтобы проще идентифицировать на графе.
  • lt2.network <- graph.data.frame(lt2,directed=T) # использовали пакет igraph и получили сеть
  • lt2.network <- simplify(lt2.network) # упростили сеть - убрали множественные связи между участниками и страницами
  • V(lt2.network)$color <-ifelse (substring(V(lt2.network)$name, 1, 1) == "U",'red','blue') # - участники выделены красным цветом - страницы - синим
  • V(lt.network)$shape <-ifelse (substring(V(ubi2.network)$name, 1, 1) == "U",'circle','square') # участники - круг, страница - квадрат

Одноразовые узлы

Это узлы, связанные с сетью только одной связью

  • poor.vs<-V(lt2.network)[degree(lt2.network)<2] = 3160
Одноразовые участники - участники, которые совершили только одно действие
length(grep(pattern = "U:", as_ids(poor.vs), value = TRUE)) ; = 250 участников с одноразовым действием
Одноразовые страницы - страницы, в отношении которых было совершено только одно действие (это страницы, которые были созданы, но больше они никогда не изменялись)
length(grep(pattern = "P:", as_ids(poor.vs), value = TRUE)) ; = 2910 страниц - созданных, но не измененных

Объединение связей

Уберем множественные связи между узлами. (До этого хорошо бы понять - а можем ли мы посчитать распределение всех узлов по degree?)

lt2s.network <- simplify(lt2.network , remove.multiple = T, remove.loops = T, edge.attr.comb=c(weight="sum", type="ignore") ) ; length(V(lt2s.network)) = 7688 (как и прежде) length(E(lt2s.network)) = 10175 - заметно сократилось число узлов

poors.vs<-V(lt2s.network)[degree(lt2s.network)<2] - мы опять выделяем узлы, каждый из которых связан только с одним узлом

length(poors.vs) = 4951 - всего узлов с одной связью

length(grep(pattern = "U:", as_ids(poors.vs), value = TRUE)) - 482- участников, которые связаны только с одной страницей

length(grep(pattern = "P:", as_ids(poors.vs), value = TRUE)) - 4469 - страницы, которые связаны только с одним участником


  • graph.density(lt2s.network) 0.0003443453
  • clusters(lt2s.network)$no 136
  • diameter(lt2s.network) 12
  • transitivity(lt2s.network, type="global") 0
  • centralization.betweenness (lt2s.network) 0.3379552

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

  • usersg <- V(lt2.network)[V(lt2.network)$color == 'red']
  • pages <- V(lt2.network)[V(lt2.network)$color == 'blue']

Отдельно посчитали авторов и страницы

  1. Inspect the data:

V(lt2.network) #prints the list of vertices (people) - перечень узлов E(lt2.network) # - перечень degree(bsk.network) #print the number of edges per vertex (relationships per people)



gs <-delete.vertices(lt2s.network, poors.vs) # удалили узлы с единичной связью


и уже этот обработанный граф отправили на визуализацию в VOSviewer

Lin/Lon Modularity

Lthist01vw.png

Lthist01vw.png

Association strength

Lthist02vw.png


Lthist02vw.png

Фрагмент карты

Lthist03vw.png



См.

  1. История Летописи/Иллюстрации
  2. История образовательной Галактики

Сравнение отдельных проектов Летописи в R - ВикиграммаR



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