##############################
"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)
# <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)
# <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>