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

Материал из Letopisi.Ru — «Время вернуться домой»
(Различия между версиями)
Перейти к: навигация, поиск
(История Галактики средствами R)
 
(не показана 1 промежуточная версия 1 участника)
Строка 6: Строка 6:
 
Понадобится пакет igraph
 
Понадобится пакет igraph
  
  rm(list=ls()) # очистим всё
+
  rm(list=ls())
  ubi <- read.csv(file.choose(),sep=";", as.is=T, header=F, encoding ="UTF-8") # header=TRUE - если есть заголовки столбцов
+
 
  ubi2 <- data.frame(User = paste("U",ubi[,1],sep=":" ) , Page = paste("P",ubi[,2],sep=":") ) # Это мы на всякий случай обозначили участников и страницы
+
  ghist <- read.csv(file.choose(),sep=";", as.is=T, header=T, encoding ="UTF-8")  
  ubi2.network <- graph.data.frame(ubi2,directed=T) # у нас было 2 столбца - и мы из этих данных построили сеть - в принципе мы могли их всех
+
ghist <- na.omit(ghist )
  ubi2.network <- simplify(ubi2.network) # упрощение
+
  ghist.sub <- na.omit(ghist.sub)
или
+
g2 <- data.frame(User = paste("U",lhist.sub[,1],sep=":" ) , Page = paste("P",lhist.sub[,2],sep=":") )
ubi2.network <- simplify(ubi2.network, edge.attr.comb=list(Weight="sum","ignore"))
+
  g2.network <- graph.data.frame(g2,directed=T) ;; Если хотим направленный граф
  V(ubi2.network)$color <-ifelse (substring(V(ubi2.network)$name, 1, 1) == "U",'red','blue')
+
  g2.network <- simplify(g2.network) ;; убрали повторы связей
  V(ubi2.network)$shape <-ifelse (substring(V(ubi2.network)$name, 1, 1) == "U",'circle','square')
+
  V(g2.network)$color <-ifelse (substring(V(g2.network)$name, 1, 1) == "U",'red','blue')
 +
  V(g2.network)$shape <-ifelse (substring(V(g2network)$name, 1, 1) == "U",'circle','square')
 
  set.seed(42)
 
  set.seed(42)
  par(mai=c(0,0,1,0))
+
;;  
  plot(ubi2.network, edge.arrow.size=.4,vertex.label=NA, vertex.size=2, layout=layout.kamada.kawai)
+
  plot(g2.network, edge.arrow.size=.4,vertex.label=NA, vertex.size=2, layout=layout.kamada.kawai)
+
 
bad.vs<-V(ubi2.network)[degree(ubi2.network)<3] #identify those vertices part of less than three edges 
+
Если
  ubi2.network<-delete.vertices(ubi2.network, bad.vs) #exclude them from the graph - убрать узлы с
+
  
 +
poor.vs<-V(g2.network)[degree(g2.network)<2]
 +
rich.vs <-V(g2.network)[degree(g2.network)>40]
 +
g2.network<-delete.vertices(lt2.network, bad.vs)
 +
V(lt2.network)$label <-ifelse (substring(V(lt2.network)$name, 1, 1) == "U", V(lt2.network)$name, NA)
 +
deg <- degree(lt2.network, mode="all")
 +
V(lt2.network)$label <-ifelse (substring(V(lt2.network)$name, 1, 1) == "U" & deg > 50, V(lt2.network)$name, NA)
 +
plot(lt2.network, edge.arrow.size=.4,vertex.size=deg/10, layout=layout.kamada.kawai)
  
rm(list=ls())
+
plot(degree.distribution(g2.network)) ;; Распределение по числу связей
  
ghist <- read.csv(file.choose(),sep=";", as.is=T, header=T, encoding ="UTF-8")
+
    usersg <- V(lt2.network)[V(lt2.network)$color == 'red'] ;; участники
ghist <- na.omit(ghist )
+
    pages <- V(lt2.network)[V(lt2.network)$color == 'blue'] ;; страницы
ghist.sub <- na.omit(ghist.sub)
+
g2 <- data.frame(User = paste("U",lhist.sub[,1],sep=":" ) , Page = paste("P",lhist.sub[,2],sep=":") )
+
g2.network <- graph.data.frame(g2,directed=T) ;; Если хотим направленный граф
+
g2.network <- simplify(g2.network) ;; убрали повторы связей
+
V(g2.network)$color <-ifelse (substring(V(g2.network)$name, 1, 1) == "U",'red','blue')
+
V(g2.network)$shape <-ifelse (substring(V(g2network)$name, 1, 1) == "U",'circle','square')
+
set.seed(42)
+
;;  
+
plot(g2.network, edge.arrow.size=.4,vertex.label=NA, vertex.size=2, layout=layout.kamada.kawai)
+
bad.vs<-V(lt2.network)[degree(lt2.network)<2]
+
lt2.network<-delete.vertices(lt2.network, bad.vs)
+
V(lt2.network)$label <-ifelse (substring(V(lt2.network)$name, 1, 1) == "U", V(lt2.network)$name, NA)
+
deg <- degree(lt2.network, mode="all")
+
V(lt2.network)$label <-ifelse (substring(V(lt2.network)$name, 1, 1) == "U" & deg > 50, V(lt2.network)$name, NA)
+
plot(lt2.network, edge.arrow.size=.4,vertex.size=deg/10, layout=layout.kamada.kawai)
+
  
 
=== Полезные функции igraph ===
 
=== Полезные функции igraph ===

Текущая версия на 21:03, 8 февраля 2016

Как мы превращаем историю деятельности в структуру отношений? Здесь приведен пример истории образов


[править] История Галактики средствами R

Понадобится пакет igraph

rm(list=ls())
ghist <- read.csv(file.choose(),sep=";", as.is=T, header=T, encoding ="UTF-8") 
ghist <- na.omit(ghist )
ghist.sub <- na.omit(ghist.sub)
g2 <- data.frame(User = paste("U",lhist.sub[,1],sep=":" ) , Page = paste("P",lhist.sub[,2],sep=":") )
g2.network <- graph.data.frame(g2,directed=T) ;; Если хотим направленный граф
g2.network <- simplify(g2.network) ;; убрали повторы связей
V(g2.network)$color <-ifelse (substring(V(g2.network)$name, 1, 1) == "U",'red','blue')
V(g2.network)$shape <-ifelse (substring(V(g2network)$name, 1, 1) == "U",'circle','square')
set.seed(42)
plot(g2.network, edge.arrow.size=.4,vertex.label=NA, vertex.size=2, layout=layout.kamada.kawai)

Если

poor.vs<-V(g2.network)[degree(g2.network)<2]
rich.vs <-V(g2.network)[degree(g2.network)>40]
g2.network<-delete.vertices(lt2.network, bad.vs)
V(lt2.network)$label <-ifelse (substring(V(lt2.network)$name, 1, 1) == "U", V(lt2.network)$name, NA)
deg <- degree(lt2.network, mode="all")
V(lt2.network)$label <-ifelse (substring(V(lt2.network)$name, 1, 1) == "U" & deg > 50, V(lt2.network)$name, NA)
plot(lt2.network, edge.arrow.size=.4,vertex.size=deg/10, layout=layout.kamada.kawai)
plot(degree.distribution(g2.network)) ;; Распределение по числу связей
   usersg <- V(lt2.network)[V(lt2.network)$color == 'red'] ;; участники
   pages <- V(lt2.network)[V(lt2.network)$color == 'blue'] ;; страницы

[править] Полезные функции igraph

simplify
net <- simplify(net, remove.multiple = F, remove.loops = T)
можно было использовать simplify, чтобы свернуть несколько ребер в одно, суммируя их веса с помощью команды типа simplify(net, edge.attr.comb=list(Weight="sum","ignore"))


См. История Летописи - как мы можем сравнить 2 сообщества?

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