Co-adoption Network

############################## 
"topic-label networks"
## [1] "topic-label networks"
############################## 

setwd("D:/Twitter-Sentimental-Analysis-master/")


require(plyr)
## Loading required package: plyr


load("./person-topic-matrix-1en.RData")  # dtmt
dtmt1 = t(dtmt)
load("./person-topic-matrix-2ce.RData")  # dtmt
dtmt2 = dtmt

load("./person-topic-matrix-3le.RData")  # dtmt
dtmt3 = dtmt

load("./person-topic-matrix-4hr.RData")  # dtmt
dtmt4 = dtmt

load("./person-topic-matrix-5he.RData")  # dtmt
dtmt5 = dtmt

load("./person-topic-matrix-6ed.RData")  # dtmt
dtmt6 = dtmt

join_matrix = function(m1, m2) {
    m3 = rbind.fill.matrix(m1, m2)
    rownames(m3) = c(rownames(m1), rownames(m2))
    m3[is.na(m3)] = 0
    m3 = t(sapply(by(m3, rownames(m3), colSums), identity))
    return(m3)
}

dtmt = join_matrix(dtmt1, dtmt2)
dtmt = join_matrix(dtmt, dtmt3)
dtmt = join_matrix(dtmt, dtmt4)
dtmt = join_matrix(dtmt, dtmt5)
dtmt = join_matrix(dtmt, dtmt6)
dtmt = dtmt[rownames(dtmt)[-1], ]

# aggregae again?
mat = t(dtmt)
get_common_person = function(mat) {
    com = combn(colnames(mat), 2)
    n = ncol(com)
    min_i = NULL
    colids = lapply(1:n, function(x) com[, x])
    for (i in 1:n) {
        mat_i = mat[, colids[[i]]]
        min_i[[i]] = sum(pmin(mat_i[, 1], mat_i[, 2]))
    }
    colids = do.call(rbind, colids)
    colids = data.frame(colids, stringsAsFactors = FALSE)
    colids = data.frame(colids, min_i, stringsAsFactors = FALSE)
    return(colids)
}

net = get_common_person(mat)
net = net[which(net[, 3] != 0), ]

####################### 
"PLOT NETWORK"
## [1] "PLOT NETWORK"
####################### 
library(igraph)
g = graph.data.frame(net[, 1:2], directed = FALSE)
E(g)$weight = net[, 3]

set.seed(34)  ## to make this reproducable
l = layout.fruchterman.reingold(g)
# <U+660E><U+786E><U+8282><U+70B9><U+5C5E><U+6027>
nodesize = centralization.degree(g)$res
V(g)$size = log(centralization.degree(g)$res) + 2
E(g)$width = (E(g)$weight - min(E(g)$weight))/500 + 1

nodeLabel = V(g)$name

# <U+4FDD><U+5B58><U+56FE><U+7247><U+683C><U+5F0F>
# png('./topic_label_networks.png', width=10, height=10, units='in',
# res=700)

plot(g, vertex.label = nodeLabel, edge.curved = FALSE, vertex.frame.color = "#FFFFFF", 
    vertex.label.cex = 0.8, edge.arrow.size = 0.02, layout = l)

plot of chunk unnamed-chunk-1


# <U+7ED3><U+675F><U+4FDD><U+5B58><U+56FE><U+7247> dev.off()

"Community detection for semantic network"
## [1] "Community detection for semantic network"

fc = fastgreedy.community(g)
sizes(fc)
## Community sizes
##  1  2  3 
## 14  7 18
mfc = membership(fc)
node_cluster = data.frame(names(mfc), mfc)
for (i in 1:max(mfc)) cat("\n", i, names(mfc[mfc == i]), "\n")
## 
##  1 active participation community support diversified methods government support learning experiences legal enforcement life skills training piloting & initiatives protect vulnerable groups public advocacy reform systems religious leaders Resource support train the trainers 
## 
##  2 awareness building build facilities conduct research ICT/mobile therapy information-based practices prevention provide treatment 
## 
##  3 collective action community engagement engage vulnerable groups fair trade ICT involve companies loans&financial support marketing/distribution media advocacy networking/sharing partnership policy making scaling up/replication small business sustainable practice training/education use existing resources volunteering


V(g)$color[which(V(g)$name %in% names(mfc[mfc == 1]))] = "purple"
## Warning: number of items to replace is not a multiple of replacement
## length
V(g)$color[which(V(g)$name %in% names(mfc[mfc == 2]))] = "blue"
V(g)$color[which(V(g)$name %in% names(mfc[mfc == 3]))] = "green"
V(g)$color[which(V(g)$name %in% names(mfc[mfc == 4]))] = "red"


# <U+4FDD><U+5B58><U+56FE><U+7247><U+683C><U+5F0F>
# png('./topic_label_networks_color.png', width=10, height=10, units='in',
# res=700)

plot(g, vertex.label = nodeLabel, edge.curved = FALSE, vertex.frame.color = "#FFFFFF", 
    vertex.label.cex = 1, edge.arrow.size = 0.02, layout = l)

plot of chunk unnamed-chunk-1


# <U+7ED3><U+675F><U+4FDD><U+5B58><U+56FE><U+7247> dev.off()
"d3 network"
## [1] "d3 network"
#################################### 
require(d3Network)
## Loading required package: d3Network

name = unique(c(net[, 1], net[, 2]))
net[, 1] = match(net[, 1], name)
net[, 2] = match(net[, 2], name)
net[, 3] = log(net[, 3])

library(igraph)
g = graph.data.frame(net[, 1:2], directed = FALSE)
E(g)$weight = net[, 3]
fc = fastgreedy.community(g)
sizes(fc)
## Community sizes
##  1  2  3  4 
## 10 11  7 11
group = membership(fc)
node_group = data.frame(name = name, group)

# http://christophergandrud.github.io/d3Network/

names(net) = c("source", "target", "value")

d3SimpleNetwork(net, width = 1400, height = 1250, textColour = "orange", linkColour = "red", 
    opacity = 0.9)
## 
##   <!DOCTYPE html> 
##   <meta charset="utf-8">
##   <body> 
##  <style> 
## .link {  
## stroke: red;
## opacity: 0.9;
## stroke-width: 1.5px; 
## } 
## .node circle { 
## stroke: #fff; 
## opacity: 0.9;
## stroke-width: 1.5px; 
## } 
## text { 
## font: 7px serif; 
## opacity: 0.9;
## pointer-events: none; 
## } 
## </style> 
## 
## <script src=http://d3js.org/d3.v3.min.js></script>
## 
## <script> 
##  var links = [ { "source" : 1, "target" : 2 }, { "source" : 1, "target" : 4 }, { "source" : 1, "target" : 5 }, { "source" : 1, "target" : 6 }, { "source" : 1, "target" : 7 }, { "source" : 1, "target" : 8 }, { "source" : 1, "target" : 9 }, { "source" : 1, "target" : 10 }, { "source" : 1, "target" : 11 }, { "source" : 1, "target" : 12 }, { "source" : 1, "target" : 15 }, { "source" : 1, "target" : 16 }, { "source" : 1, "target" : 17 }, { "source" : 1, "target" : 18 }, { "source" : 1, "target" : 19 }, { "source" : 1, "target" : 20 }, { "source" : 1, "target" : 21 }, { "source" : 1, "target" : 22 }, { "source" : 1, "target" : 23 }, { "source" : 1, "target" : 24 }, { "source" : 1, "target" : 25 }, { "source" : 1, "target" : 27 }, { "source" : 1, "target" : 29 }, { "source" : 1, "target" : 30 }, { "source" : 1, "target" : 31 }, { "source" : 1, "target" : 32 }, { "source" : 1, "target" : 33 }, { "source" : 1, "target" : 34 }, { "source" : 1, "target" : 35 }, { "source" : 1, "target" : 36 }, { "source" : 1, "target" : 37 }, { "source" : 1, "target" : 38 }, { "source" : 1, "target" : 39 }, { "source" : 2, "target" : 3 }, { "source" : 2, "target" : 5 }, { "source" : 2, "target" : 6 }, { "source" : 2, "target" : 7 }, { "source" : 2, "target" : 9 }, { "source" : 2, "target" : 11 }, { "source" : 2, "target" : 13 }, { "source" : 2, "target" : 14 }, { "source" : 2, "target" : 17 }, { "source" : 2, "target" : 22 }, { "source" : 2, "target" : 23 }, { "source" : 2, "target" : 24 }, { "source" : 2, "target" : 25 }, { "source" : 2, "target" : 26 }, { "source" : 2, "target" : 27 }, { "source" : 2, "target" : 28 }, { "source" : 2, "target" : 29 }, { "source" : 2, "target" : 30 }, { "source" : 2, "target" : 31 }, { "source" : 2, "target" : 32 }, { "source" : 2, "target" : 33 }, { "source" : 2, "target" : 35 }, { "source" : 2, "target" : 37 }, { "source" : 2, "target" : 38 }, { "source" : 2, "target" : 39 }, { "source" : 3, "target" : 7 }, { "source" : 3, "target" : 9 }, { "source" : 3, "target" : 13 }, { "source" : 3, "target" : 14 }, { "source" : 3, "target" : 22 }, { "source" : 3, "target" : 23 }, { "source" : 3, "target" : 25 }, { "source" : 3, "target" : 26 }, { "source" : 3, "target" : 28 }, { "source" : 3, "target" : 30 }, { "source" : 3, "target" : 32 }, { "source" : 3, "target" : 33 }, { "source" : 3, "target" : 37 }, { "source" : 3, "target" : 38 }, { "source" : 3, "target" : 39 }, { "source" : 4, "target" : 5 }, { "source" : 4, "target" : 9 }, { "source" : 4, "target" : 10 }, { "source" : 4, "target" : 12 }, { "source" : 4, "target" : 15 }, { "source" : 4, "target" : 19 }, { "source" : 4, "target" : 20 }, { "source" : 4, "target" : 21 }, { "source" : 4, "target" : 22 }, { "source" : 4, "target" : 23 }, { "source" : 4, "target" : 24 }, { "source" : 4, "target" : 25 }, { "source" : 4, "target" : 32 }, { "source" : 4, "target" : 33 }, { "source" : 4, "target" : 34 }, { "source" : 4, "target" : 35 }, { "source" : 4, "target" : 37 }, { "source" : 4, "target" : 38 }, { "source" : 4, "target" : 39 }, { "source" : 5, "target" : 6 }, { "source" : 5, "target" : 7 }, { "source" : 5, "target" : 8 }, { "source" : 5, "target" : 9 }, { "source" : 5, "target" : 10 }, { "source" : 5, "target" : 11 }, { "source" : 5, "target" : 12 }, { "source" : 5, "target" : 15 }, { "source" : 5, "target" : 16 }, { "source" : 5, "target" : 17 }, { "source" : 5, "target" : 18 }, { "source" : 5, "target" : 19 }, { "source" : 5, "target" : 20 }, { "source" : 5, "target" : 21 }, { "source" : 5, "target" : 22 }, { "source" : 5, "target" : 23 }, { "source" : 5, "target" : 24 }, { "source" : 5, "target" : 25 }, { "source" : 5, "target" : 27 }, { "source" : 5, "target" : 29 }, { "source" : 5, "target" : 30 }, { "source" : 5, "target" : 31 }, { "source" : 5, "target" : 32 }, { "source" : 5, "target" : 33 }, { "source" : 5, "target" : 34 }, { "source" : 5, "target" : 35 }, { "source" : 5, "target" : 36 }, { "source" : 5, "target" : 37 }, { "source" : 5, "target" : 38 }, { "source" : 5, "target" : 39 }, { "source" : 6, "target" : 7 }, { "source" : 6, "target" : 9 }, { "source" : 6, "target" : 11 }, { "source" : 6, "target" : 17 }, { "source" : 6, "target" : 23 }, { "source" : 6, "target" : 24 }, { "source" : 6, "target" : 27 }, { "source" : 6, "target" : 29 }, { "source" : 6, "target" : 31 }, { "source" : 6, "target" : 32 }, { "source" : 6, "target" : 33 }, { "source" : 6, "target" : 37 }, { "source" : 7, "target" : 9 }, { "source" : 7, "target" : 11 }, { "source" : 7, "target" : 13 }, { "source" : 7, "target" : 14 }, { "source" : 7, "target" : 17 }, { "source" : 7, "target" : 22 }, { "source" : 7, "target" : 23 }, { "source" : 7, "target" : 24 }, { "source" : 7, "target" : 25 }, { "source" : 7, "target" : 26 }, { "source" : 7, "target" : 27 }, { "source" : 7, "target" : 28 }, { "source" : 7, "target" : 29 }, { "source" : 7, "target" : 30 }, { "source" : 7, "target" : 31 }, { "source" : 7, "target" : 32 }, { "source" : 7, "target" : 33 }, { "source" : 7, "target" : 37 }, { "source" : 7, "target" : 38 }, { "source" : 7, "target" : 39 }, { "source" : 8, "target" : 9 }, { "source" : 8, "target" : 11 }, { "source" : 8, "target" : 16 }, { "source" : 8, "target" : 18 }, { "source" : 8, "target" : 22 }, { "source" : 8, "target" : 24 }, { "source" : 8, "target" : 25 }, { "source" : 8, "target" : 30 }, { "source" : 8, "target" : 32 }, { "source" : 8, "target" : 33 }, { "source" : 8, "target" : 36 }, { "source" : 8, "target" : 37 }, { "source" : 9, "target" : 10 }, { "source" : 9, "target" : 11 }, { "source" : 9, "target" : 12 }, { "source" : 9, "target" : 13 }, { "source" : 9, "target" : 14 }, { "source" : 9, "target" : 15 }, { "source" : 9, "target" : 16 }, { "source" : 9, "target" : 17 }, { "source" : 9, "target" : 18 }, { "source" : 9, "target" : 19 }, { "source" : 9, "target" : 20 }, { "source" : 9, "target" : 21 }, { "source" : 9, "target" : 22 }, { "source" : 9, "target" : 23 }, { "source" : 9, "target" : 24 }, { "source" : 9, "target" : 25 }, { "source" : 9, "target" : 26 }, { "source" : 9, "target" : 27 }, { "source" : 9, "target" : 28 }, { "source" : 9, "target" : 29 }, { "source" : 9, "target" : 30 }, { "source" : 9, "target" : 31 }, { "source" : 9, "target" : 32 }, { "source" : 9, "target" : 33 }, { "source" : 9, "target" : 34 }, { "source" : 9, "target" : 35 }, { "source" : 9, "target" : 36 }, { "source" : 9, "target" : 37 }, { "source" : 9, "target" : 38 }, { "source" : 9, "target" : 39 }, { "source" : 10, "target" : 12 }, { "source" : 10, "target" : 15 }, { "source" : 10, "target" : 19 }, { "source" : 10, "target" : 20 }, { "source" : 10, "target" : 21 }, { "source" : 10, "target" : 22 }, { "source" : 10, "target" : 23 }, { "source" : 10, "target" : 24 }, { "source" : 10, "target" : 25 }, { "source" : 10, "target" : 32 }, { "source" : 10, "target" : 33 }, { "source" : 10, "target" : 34 }, { "source" : 10, "target" : 35 }, { "source" : 10, "target" : 37 }, { "source" : 10, "target" : 38 }, { "source" : 10, "target" : 39 }, { "source" : 11, "target" : 16 }, { "source" : 11, "target" : 17 }, { "source" : 11, "target" : 18 }, { "source" : 11, "target" : 22 }, { "source" : 11, "target" : 23 }, { "source" : 11, "target" : 24 }, { "source" : 11, "target" : 25 }, { "source" : 11, "target" : 27 }, { "source" : 11, "target" : 29 }, { "source" : 11, "target" : 30 }, { "source" : 11, "target" : 31 }, { "source" : 11, "target" : 32 }, { "source" : 11, "target" : 33 }, { "source" : 11, "target" : 36 }, { "source" : 11, "target" : 37 }, { "source" : 12, "target" : 15 }, { "source" : 12, "target" : 19 }, { "source" : 12, "target" : 20 }, { "source" : 12, "target" : 21 }, { "source" : 12, "target" : 22 }, { "source" : 12, "target" : 23 }, { "source" : 12, "target" : 24 }, { "source" : 12, "target" : 25 }, { "source" : 12, "target" : 32 }, { "source" : 12, "target" : 33 }, { "source" : 12, "target" : 34 }, { "source" : 12, "target" : 35 }, { "source" : 12, "target" : 37 }, { "source" : 12, "target" : 38 }, { "source" : 12, "target" : 39 }, { "source" : 13, "target" : 14 }, { "source" : 13, "target" : 22 }, { "source" : 13, "target" : 23 }, { "source" : 13, "target" : 25 }, { "source" : 13, "target" : 26 }, { "source" : 13, "target" : 28 }, { "source" : 13, "target" : 30 }, { "source" : 13, "target" : 32 }, { "source" : 13, "target" : 33 }, { "source" : 13, "target" : 37 }, { "source" : 13, "target" : 38 }, { "source" : 13, "target" : 39 }, { "source" : 14, "target" : 22 }, { "source" : 14, "target" : 23 }, { "source" : 14, "target" : 25 }, { "source" : 14, "target" : 26 }, { "source" : 14, "target" : 28 }, { "source" : 14, "target" : 30 }, { "source" : 14, "target" : 32 }, { "source" : 14, "target" : 33 }, { "source" : 14, "target" : 37 }, { "source" : 14, "target" : 38 }, { "source" : 14, "target" : 39 }, { "source" : 15, "target" : 19 }, { "source" : 15, "target" : 20 }, { "source" : 15, "target" : 21 }, { "source" : 15, "target" : 22 }, { "source" : 15, "target" : 23 }, { "source" : 15, "target" : 24 }, { "source" : 15, "target" : 25 }, { "source" : 15, "target" : 32 }, { "source" : 15, "target" : 33 }, { "source" : 15, "target" : 34 }, { "source" : 15, "target" : 35 }, { "source" : 15, "target" : 37 }, { "source" : 15, "target" : 38 }, { "source" : 15, "target" : 39 }, { "source" : 16, "target" : 18 }, { "source" : 16, "target" : 22 }, { "source" : 16, "target" : 24 }, { "source" : 16, "target" : 25 }, { "source" : 16, "target" : 30 }, { "source" : 16, "target" : 32 }, { "source" : 16, "target" : 33 }, { "source" : 16, "target" : 36 }, { "source" : 16, "target" : 37 }, { "source" : 17, "target" : 23 }, { "source" : 17, "target" : 24 }, { "source" : 17, "target" : 27 }, { "source" : 17, "target" : 29 }, { "source" : 17, "target" : 31 }, { "source" : 17, "target" : 32 }, { "source" : 17, "target" : 33 }, { "source" : 17, "target" : 37 }, { "source" : 18, "target" : 22 }, { "source" : 18, "target" : 24 }, { "source" : 18, "target" : 25 }, { "source" : 18, "target" : 30 }, { "source" : 18, "target" : 32 }, { "source" : 18, "target" : 33 }, { "source" : 18, "target" : 36 }, { "source" : 18, "target" : 37 }, { "source" : 19, "target" : 20 }, { "source" : 19, "target" : 21 }, { "source" : 19, "target" : 22 }, { "source" : 19, "target" : 23 }, { "source" : 19, "target" : 24 }, { "source" : 19, "target" : 25 }, { "source" : 19, "target" : 32 }, { "source" : 19, "target" : 33 }, { "source" : 19, "target" : 34 }, { "source" : 19, "target" : 35 }, { "source" : 19, "target" : 37 }, { "source" : 19, "target" : 38 }, { "source" : 19, "target" : 39 }, { "source" : 20, "target" : 21 }, { "source" : 20, "target" : 22 }, { "source" : 20, "target" : 23 }, { "source" : 20, "target" : 24 }, { "source" : 20, "target" : 25 }, { "source" : 20, "target" : 32 }, { "source" : 20, "target" : 33 }, { "source" : 20, "target" : 34 }, { "source" : 20, "target" : 35 }, { "source" : 20, "target" : 37 }, { "source" : 20, "target" : 38 }, { "source" : 20, "target" : 39 }, { "source" : 21, "target" : 22 }, { "source" : 21, "target" : 23 }, { "source" : 21, "target" : 24 }, { "source" : 21, "target" : 25 }, { "source" : 21, "target" : 32 }, { "source" : 21, "target" : 33 }, { "source" : 21, "target" : 34 }, { "source" : 21, "target" : 35 }, { "source" : 21, "target" : 37 }, { "source" : 21, "target" : 38 }, { "source" : 21, "target" : 39 }, { "source" : 22, "target" : 23 }, { "source" : 22, "target" : 24 }, { "source" : 22, "target" : 25 }, { "source" : 22, "target" : 26 }, { "source" : 22, "target" : 28 }, { "source" : 22, "target" : 30 }, { "source" : 22, "target" : 32 }, { "source" : 22, "target" : 33 }, { "source" : 22, "target" : 34 }, { "source" : 22, "target" : 35 }, { "source" : 22, "target" : 36 }, { "source" : 22, "target" : 37 }, { "source" : 22, "target" : 38 }, { "source" : 22, "target" : 39 }, { "source" : 23, "target" : 24 }, { "source" : 23, "target" : 25 }, { "source" : 23, "target" : 26 }, { "source" : 23, "target" : 27 }, { "source" : 23, "target" : 28 }, { "source" : 23, "target" : 29 }, { "source" : 23, "target" : 30 }, { "source" : 23, "target" : 31 }, { "source" : 23, "target" : 32 }, { "source" : 23, "target" : 33 }, { "source" : 23, "target" : 34 }, { "source" : 23, "target" : 35 }, { "source" : 23, "target" : 37 }, { "source" : 23, "target" : 38 }, { "source" : 23, "target" : 39 }, { "source" : 24, "target" : 25 }, { "source" : 24, "target" : 27 }, { "source" : 24, "target" : 29 }, { "source" : 24, "target" : 30 }, { "source" : 24, "target" : 31 }, { "source" : 24, "target" : 32 }, { "source" : 24, "target" : 33 }, { "source" : 24, "target" : 34 }, { "source" : 24, "target" : 35 }, { "source" : 24, "target" : 36 }, { "source" : 24, "target" : 37 }, { "source" : 24, "target" : 38 }, { "source" : 24, "target" : 39 }, { "source" : 25, "target" : 26 }, { "source" : 25, "target" : 28 }, { "source" : 25, "target" : 30 }, { "source" : 25, "target" : 32 }, { "source" : 25, "target" : 33 }, { "source" : 25, "target" : 34 }, { "source" : 25, "target" : 35 }, { "source" : 25, "target" : 36 }, { "source" : 25, "target" : 37 }, { "source" : 25, "target" : 38 }, { "source" : 25, "target" : 39 }, { "source" : 26, "target" : 28 }, { "source" : 26, "target" : 30 }, { "source" : 26, "target" : 32 }, { "source" : 26, "target" : 33 }, { "source" : 26, "target" : 37 }, { "source" : 26, "target" : 38 }, { "source" : 26, "target" : 39 }, { "source" : 27, "target" : 29 }, { "source" : 27, "target" : 31 }, { "source" : 27, "target" : 32 }, { "source" : 27, "target" : 33 }, { "source" : 27, "target" : 37 }, { "source" : 28, "target" : 30 }, { "source" : 28, "target" : 32 }, { "source" : 28, "target" : 33 }, { "source" : 28, "target" : 37 }, { "source" : 28, "target" : 38 }, { "source" : 28, "target" : 39 }, { "source" : 29, "target" : 31 }, { "source" : 29, "target" : 32 }, { "source" : 29, "target" : 33 }, { "source" : 29, "target" : 37 }, { "source" : 30, "target" : 32 }, { "source" : 30, "target" : 33 }, { "source" : 30, "target" : 36 }, { "source" : 30, "target" : 37 }, { "source" : 30, "target" : 38 }, { "source" : 30, "target" : 39 }, { "source" : 31, "target" : 32 }, { "source" : 31, "target" : 33 }, { "source" : 31, "target" : 37 }, { "source" : 32, "target" : 33 }, { "source" : 32, "target" : 34 }, { "source" : 32, "target" : 35 }, { "source" : 32, "target" : 36 }, { "source" : 32, "target" : 37 }, { "source" : 32, "target" : 38 }, { "source" : 32, "target" : 39 }, { "source" : 33, "target" : 34 }, { "source" : 33, "target" : 35 }, { "source" : 33, "target" : 36 }, { "source" : 33, "target" : 37 }, { "source" : 33, "target" : 38 }, { "source" : 33, "target" : 39 }, { "source" : 34, "target" : 35 }, { "source" : 34, "target" : 37 }, { "source" : 34, "target" : 38 }, { "source" : 34, "target" : 39 }, { "source" : 35, "target" : 37 }, { "source" : 35, "target" : 38 }, { "source" : 35, "target" : 39 }, { "source" : 36, "target" : 37 }, { "source" : 37, "target" : 38 }, { "source" : 37, "target" : 39 }, { "source" : 38, "target" : 39 } ] ; 
##  var nodes = {}
## 
## // Compute the distinct nodes from the links.
## links.forEach(function(link) {
## link.source = nodes[link.source] || 
## (nodes[link.source] = {name: link.source});
## link.target = nodes[link.target] || 
## (nodes[link.target] = {name: link.target});
## link.value = +link.value;
## });
## 
## var width = 1400
## height = 1250;
## 
## var force = d3.layout.force() 
## .nodes(d3.values(nodes)) 
## .links(links) 
## .size([width, height]) 
## .linkDistance(50) 
## .charge(-200) 
## .on("tick", tick) 
## .start(); 
## 
## var svg = d3.select("body").append("svg") 
## .attr("width", width) 
## .attr("height", height); 
## 
## var link = svg.selectAll(".link") 
## .data(force.links()) 
## .enter().append("line") 
## .attr("class", "link"); 
## 
## var node = svg.selectAll(".node") 
## .data(force.nodes()) 
## .enter().append("g") 
## .attr("class", "node") 
## .on("mouseover", mouseover) 
## .on("mouseout", mouseout) 
## .on("click", click)
## .on("dblclick", dblclick)
## .call(force.drag); 
## 
## node.append("circle") 
## .attr("r", 8)
## .style("fill", "#3182bd");
## 
## node.append("text") 
## .attr("x", 12) 
## .attr("dy", ".35em") 
## .style("fill", "orange")
## .text(function(d) { return d.name; }); 
## 
## function tick() { 
## link 
## .attr("x1", function(d) { return d.source.x; }) 
## .attr("y1", function(d) { return d.source.y; }) 
## .attr("x2", function(d) { return d.target.x; }) 
## .attr("y2", function(d) { return d.target.y; }); 
## 
## node.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; }); 
## } 
## 
## function mouseover() { 
## d3.select(this).select("circle").transition() 
## .duration(750) 
## .attr("r", 16); 
## } 
## 
## function mouseout() { 
## d3.select(this).select("circle").transition() 
## .duration(750) 
## .attr("r", 8); 
## } 
## // action to take on mouse click
## function click() {
## d3.select(this).select("text").transition()
## .duration(750)
## .attr("x", 22)
## .style("stroke-width", ".5px")
## .style("opacity", 1)
## .style("fill", "#E34A33")
## .style("font", "17.5px serif");
## d3.select(this).select("circle").transition()
## .duration(750)
## .style("fill", "#E34A33")
## .attr("r", 16)
## }
## 
## // action to take on mouse double click
## function dblclick() {
## d3.select(this).select("circle").transition()
## .duration(750)
## .attr("r", 6)
## .style("fill", "#E34A33");
## d3.select(this).select("text").transition()
## .duration(750)
## .attr("x", 12)
## .style("stroke", "none")
## .style("fill", "#E34A33")
## .style("stroke", "none")
## .style("opacity", 0.9)
## .style("font", "7px serif");
## }
## 
## </script>
##  </body>