igraphでTwitterのネットワークを描いてみる2
昨日の続き。
少しは見通しが良くなったかな。
水色は中核であるYMOメンバー本人と直接の関係者のクラスタ、ピンクは漫画家のクラスタ、のこり2つのクラスタは良く分からない。
そもそもYMO周辺の人々だけを選んでいるので、その中をクラスタに分割するのはちょっと無理があったみたい。
でもなんとなく感じがつかめてきた。
library(twitteR) library(igraph) init <- initSession("bob3bob3", "************") # YMO周辺の方々 account <- c( "o3a3", "takano_hiroshi", "postymo","room66plus", "skmt09", "t0da", "Eguchinn", "corneliusjapan", "kenso1978", "9moichi", "tomoeshinohara", "videobird", "seikoito", "miusakamoto") # フォロー先の名前を抽出 # 100件までしか抽出できないみたい edge <- NULL for (i in account){ friends <- userFriends(i,init) size <- length(friends) if (size == 0) next name <- character(size) for (j in 1:size){ name[j] <- screenName(friends[[j]]) } df <- data.frame(FROM=rep(i,length(name)), TO=name) edge <- rbind(edge,df) } # graphオブジェクトに変換 g <- graph.data.frame(edge) # ノードごとの次数 DG <- degree(g) # ノードのリスト VL <- rownames(get.adjacency(g)) # 次数が2以下の人の名前 CUT <- VL[DG < 3] # エッジリスト EL <- get.edgelist(g) # 次数が1の人を含むエッジを除く for (k in CUT) EL <- EL[EL[,1]!=k,] for (l in CUT) EL <- EL[EL[,2]!=l,] # graphオブジェクトに変換 gg <- graph.data.frame(EL) # ページランクを算出し、ノードの大きさに使う PR <- page.rank(gg)$vector # クラスタごとにノードの色を変える (wtc <- walktrap.community(gg)) # stepsの数値はwtc$mergesとmodularityを見ながら決める # ここでRが落ちることがある…… memb <- community.to.membership(gg, wtc$merges, steps=30) modularity(g, memb$membership) table(memb$membership) # 4つのクラスタに分かれた # 0 1 2 3 # 12 11 7 4 V(gg)$color <- memb$membership +5 # ネットワーク図を描く V(gg)$label <- V(gg)$name plot(gg, layout=layout.fruchterman.reingold, vertex.size=20*PR/max(PR), edge.arrow.size=0.5)