История Летописи
(→Превращение данных в сеть) |
(→Одноразовые узлы) |
||
Строка 80: | Строка 80: | ||
; Одноразовые страницы - страницы, в отношении которых было совершено только одно действие (это страницы, которые были созданы, но больше они никогда не изменялись | ; Одноразовые страницы - страницы, в отношении которых было совершено только одно действие (это страницы, которые были созданы, но больше они никогда не изменялись | ||
: length(grep(pattern = "P:", as_ids(poor.vs), value = TRUE)) ; | : length(grep(pattern = "P:", as_ids(poor.vs), value = TRUE)) ; | ||
+ | |||
+ | === Объединение связей === | ||
+ | |||
+ | Уберем множественные связи между узлами. До этого хорошо бы понять - а можем ли мы посчитать распределение всех узлов по degree? | ||
+ | |||
==== Отдельно получить перечень участников и страниц ==== | ==== Отдельно получить перечень участников и страниц ==== |
Версия 18:06, 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]))
- 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]) ;
Ветераны - узлы, которые были активны в последующем
- Сколько в 2007 году было ветеранов? - тех, кто уже работал в 2006 году?
- length(intersect(users2007,users2006))
Превращение данных в сеть
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]
- Одноразовые участники - участники, которые совершили только одно действие
- length(grep(pattern = "U:", as_ids(poor.vs), value = TRUE)) ;
- Одноразовые страницы - страницы, в отношении которых было совершено только одно действие (это страницы, которые были созданы, но больше они никогда не изменялись
- length(grep(pattern = "P:", as_ids(poor.vs), value = TRUE)) ;
Объединение связей
Уберем множественные связи между узлами. До этого хорошо бы понять - а можем ли мы посчитать распределение всех узлов по degree?
Отдельно получить перечень участников и страниц
- usersg <- V(lt2.network)[V(lt2.network)$color == 'red']
- pages <- V(lt2.network)[V(lt2.network)$color == 'blue']
Отдельно посчитали авторов и страницы
- 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)
См.
Сравнение отдельных проектов Летописи в R - ВикиграммаR