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

Материал из Letopisi.Ru — «Время вернуться домой»
(Различия между версиями)
Перейти к: навигация, поиск
Строка 3: Строка 3:
  
 
Вся история изменений Летописи в текстовом формате csv на 143 мгб
 
Вся история изменений Летописи в текстовом формате csv на 143 мгб
 +
 +
=== Разделение по годам ===
  
 
; rev_timestamp;rev_user_text;rev_page;rev_user;page_title;rev_len
 
; rev_timestamp;rev_user_text;rev_page;rev_user;page_title;rev_len
Строка 36: Строка 38:
 
lhist.sub <- na.omit(lhist.sub) # на всякий случай очистили данные
 
lhist.sub <- na.omit(lhist.sub) # на всякий случай очистили данные
  
 +
 +
* users <- unique(lhist[,2])  ; выделить участников
 +
**  length(unique(lhist[,2]))  - посчитать участников
 +
* pages <- unique(lhist[,5])  ;
 +
** length(pages) = length(unique(lhist[,5]))
 +
 +
 +
 +
 +
=== Превращение данных в сеть ===
 
lt2 <- data.frame(User = paste("U",lhist.sub[,4],sep=":" ) , Page = paste("P",lhist.sub[,3],sep=":") ) # Оставили только участников и страницы. На всякий случай добавили к цифрам буковки U - user и P
 
lt2 <- data.frame(User = paste("U",lhist.sub[,4],sep=":" ) , Page = paste("P",lhist.sub[,3],sep=":") ) # Оставили только участников и страницы. На всякий случай добавили к цифрам буковки U - user и P
  
Строка 46: Строка 58:
 
V(lt.network)$shape <-ifelse (substring(V(ubi2.network)$name, 1, 1) == "U",'circle','square') # участники - круг, страница - квадрат
 
V(lt.network)$shape <-ifelse (substring(V(ubi2.network)$name, 1, 1) == "U",'circle','square') # участники - круг, страница - квадрат
  
set.seed(42) # для воспроизводимости
 
  
plot(lt2.network, edge.arrow.size=.4,vertex.label=NA, vertex.size=2, layout=layout.kamada.kawai) # построили первый граф истории - превратили историю действий в структуру отношений
 
  
  

Версия 12:00, 22 января 2017

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

Вся история изменений Летописи в текстовом формате csv на 143 мгб

Содержание

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

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



lhist.sub <- subset(lhist,as.numeric(rev_timestamp) < 20070000000000 & as.numeric(rev_len) > 200) # Оставили изменения, которые были сделаны ранее 2007 года и где вклад в страницу был больше 200 символов

lhist.sub <- na.omit(lhist.sub) # на всякий случай очистили данные


  • users <- unique(lhist[,2])  ; выделить участников
    • length(unique(lhist[,2])) - посчитать участников
  • pages <- unique(lhist[,5])  ;
    • length(pages) = length(unique(lhist[,5]))



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

lt2 <- data.frame(User = paste("U",lhist.sub[,4],sep=":" ) , Page = paste("P",lhist.sub[,3],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') # участники - круг, страница - квадрат



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

  • 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)

Полная история - структура отношений

Lt2006.png

Без тех, у кого одна связь

Теперь уберем узлы, у которых только одна связь:

bd.vs<-V(lt2.network)[degree(lt2.network)<2]

lt2.network<-delete.vertices(lt2.network, bad.vs) # удалили узлы

Lt2006 2.png


Без тех, у кого только 2 связи

Let2006 3.png

Вполне уже читаемая карта, где можно выделить ключевых игроков. Теперь бы хотелось их назвать.

Ключевые игроки 2006

deg <- degree(lt2.network, mode="all")

V(lt2.network)$label <-ifelse (substring(V(lt2.network)$name, 1, 1) == "U" & deg > 40, V(lt2.network)$name, NA) # подпишем тех, кто с числом связей > 40

plot(lt2.network, edge.arrow.size=.1,vertex.size=deg/20, layout=layout.kamada.kawai) # Размер узла зависит от числа связей этого узла.


Let2006 key.png



Продолжение следует.

История образовательной Галактики


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



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