nodes <- read.csv("Dataset1-Media-Example-NODES.csv", header=T, as.is=T)
links <- read.csv("Dataset1-Media-Example-EDGES.csv", header=T, as.is=T)
head(nodes)
## id media media.type type.label audience.size
## 1 s01 NY Times 1 Newspaper 20
## 2 s02 Washington Post 1 Newspaper 25
## 3 s03 Wall Street Journal 1 Newspaper 30
## 4 s04 USA Today 1 Newspaper 32
## 5 s05 LA Times 1 Newspaper 20
## 6 s06 New York Post 1 Newspaper 50
head(links)
## from to weight type
## 1 s01 s02 10 hyperlink
## 2 s01 s02 12 hyperlink
## 3 s01 s03 22 hyperlink
## 4 s01 s04 21 hyperlink
## 5 s04 s11 22 mention
## 6 s05 s15 21 mention
nrow(nodes); length(unique(nodes$id))
## [1] 17
## [1] 17
nrow(links); nrow(unique(links[,c("from", "to")]))
## [1] 52
## [1] 49
links <- aggregate(links[,3], links[,-3], sum)
links <- links[order(links$from, links$to),]
colnames(links)[4] <- "weight"
rownames(links) <- NULL
nodes2 <- read.csv("Dataset2-Media-User-Example-NODES.csv", header=T, as.is=T)
links2 <- read.csv("Dataset2-Media-User-Example-EDGES.csv", header=T, row.names=1)
head(nodes2)
## id media media.type media.name audience.size
## 1 s01 NYT 1 Newspaper 20
## 2 s02 WaPo 1 Newspaper 25
## 3 s03 WSJ 1 Newspaper 30
## 4 s04 USAT 1 Newspaper 32
## 5 s05 LATimes 1 Newspaper 20
## 6 s06 CNN 2 TV 56
head(links2)
## U01 U02 U03 U04 U05 U06 U07 U08 U09 U10 U11 U12 U13 U14 U15 U16 U17
## s01 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## s02 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0
## s03 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0
## s04 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0
## s05 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0
## s06 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1
## U18 U19 U20
## s01 0 0 0
## s02 0 0 1
## s03 0 0 0
## s04 0 0 0
## s05 0 0 0
## s06 0 0 0
links2 <- as.matrix(links2)
dim(links2)
## [1] 10 20
dim(nodes2)
## [1] 30 5
library(igraph)
##
## Attaching package: 'igraph'
## The following objects are masked from 'package:stats':
##
## decompose, spectrum
## The following object is masked from 'package:base':
##
## union
net <- graph_from_data_frame(d=links, vertices=nodes, directed=T)
class(net)
## [1] "igraph"
net
## IGRAPH 526ae90 DNW- 17 49 --
## + attr: name (v/c), media (v/c), media.type (v/n), type.label
## | (v/c), audience.size (v/n), type (e/c), weight (e/n)
## + edges from 526ae90 (vertex names):
## [1] s01->s02 s01->s03 s01->s04 s01->s15 s02->s01 s02->s03 s02->s09
## [8] s02->s10 s03->s01 s03->s04 s03->s05 s03->s08 s03->s10 s03->s11
## [15] s03->s12 s04->s03 s04->s06 s04->s11 s04->s12 s04->s17 s05->s01
## [22] s05->s02 s05->s09 s05->s15 s06->s06 s06->s16 s06->s17 s07->s03
## [29] s07->s08 s07->s10 s07->s14 s08->s03 s08->s07 s08->s09 s09->s10
## [36] s10->s03 s12->s06 s12->s13 s12->s14 s13->s12 s13->s17 s14->s11
## [43] s14->s13 s15->s01 s15->s04 s15->s06 s16->s06 s16->s17 s17->s04
E(net) # The edges of the "net" object
## + 49/49 edges from 526ae90 (vertex names):
## [1] s01->s02 s01->s03 s01->s04 s01->s15 s02->s01 s02->s03 s02->s09
## [8] s02->s10 s03->s01 s03->s04 s03->s05 s03->s08 s03->s10 s03->s11
## [15] s03->s12 s04->s03 s04->s06 s04->s11 s04->s12 s04->s17 s05->s01
## [22] s05->s02 s05->s09 s05->s15 s06->s06 s06->s16 s06->s17 s07->s03
## [29] s07->s08 s07->s10 s07->s14 s08->s03 s08->s07 s08->s09 s09->s10
## [36] s10->s03 s12->s06 s12->s13 s12->s14 s13->s12 s13->s17 s14->s11
## [43] s14->s13 s15->s01 s15->s04 s15->s06 s16->s06 s16->s17 s17->s04
V(net) # The vertices of the "net" object
## + 17/17 vertices, named, from 526ae90:
## [1] s01 s02 s03 s04 s05 s06 s07 s08 s09 s10 s11 s12 s13 s14 s15 s16 s17
E(net)$type # Edge attribute "type"
## [1] "hyperlink" "hyperlink" "hyperlink" "mention" "hyperlink"
## [6] "hyperlink" "hyperlink" "hyperlink" "hyperlink" "hyperlink"
## [11] "hyperlink" "hyperlink" "mention" "hyperlink" "hyperlink"
## [16] "hyperlink" "mention" "mention" "hyperlink" "mention"
## [21] "mention" "hyperlink" "hyperlink" "mention" "hyperlink"
## [26] "hyperlink" "mention" "mention" "mention" "hyperlink"
## [31] "mention" "hyperlink" "mention" "mention" "mention"
## [36] "hyperlink" "mention" "hyperlink" "mention" "hyperlink"
## [41] "mention" "mention" "mention" "hyperlink" "hyperlink"
## [46] "hyperlink" "hyperlink" "mention" "hyperlink"
V(net)$media # Vertex attribute "media"
## [1] "NY Times" "Washington Post" "Wall Street Journal"
## [4] "USA Today" "LA Times" "New York Post"
## [7] "CNN" "MSNBC" "FOX News"
## [10] "ABC" "BBC" "Yahoo News"
## [13] "Google News" "Reuters.com" "NYTimes.com"
## [16] "WashingtonPost.com" "AOL.com"
plot(net, edge.arrow.size=.4,vertex.label=NA)
net <- simplify(net, remove.multiple = F, remove.loops = T)
as_edgelist(net, names=T)
## [,1] [,2]
## [1,] "s01" "s02"
## [2,] "s01" "s03"
## [3,] "s01" "s04"
## [4,] "s01" "s15"
## [5,] "s02" "s01"
## [6,] "s02" "s03"
## [7,] "s02" "s09"
## [8,] "s02" "s10"
## [9,] "s03" "s01"
## [10,] "s03" "s04"
## [11,] "s03" "s05"
## [12,] "s03" "s08"
## [13,] "s03" "s10"
## [14,] "s03" "s11"
## [15,] "s03" "s12"
## [16,] "s04" "s03"
## [17,] "s04" "s06"
## [18,] "s04" "s11"
## [19,] "s04" "s12"
## [20,] "s04" "s17"
## [21,] "s05" "s01"
## [22,] "s05" "s02"
## [23,] "s05" "s09"
## [24,] "s05" "s15"
## [25,] "s06" "s16"
## [26,] "s06" "s17"
## [27,] "s07" "s03"
## [28,] "s07" "s08"
## [29,] "s07" "s10"
## [30,] "s07" "s14"
## [31,] "s08" "s03"
## [32,] "s08" "s07"
## [33,] "s08" "s09"
## [34,] "s09" "s10"
## [35,] "s10" "s03"
## [36,] "s12" "s06"
## [37,] "s12" "s13"
## [38,] "s12" "s14"
## [39,] "s13" "s12"
## [40,] "s13" "s17"
## [41,] "s14" "s11"
## [42,] "s14" "s13"
## [43,] "s15" "s01"
## [44,] "s15" "s04"
## [45,] "s15" "s06"
## [46,] "s16" "s06"
## [47,] "s16" "s17"
## [48,] "s17" "s04"
as_adjacency_matrix(net, attr="weight")

## 17 x 17 sparse Matrix of class "dgCMatrix"
## [[ suppressing 17 column names 's01', 's02', 's03' ... ]]
##
## s01 . 22 22 21 . . . . . . . . . . 20 . .
## s02 23 . 21 . . . . . 1 5 . . . . . . .
## s03 21 . . 22 1 . . 4 . 2 1 1 . . . . .
## s04 . . 23 . . 1 . . . . 22 3 . . . . 2
## s05 1 21 . . . . . . 2 . . . . . 21 . .
## s06 . . . . . . . . . . . . . . . 21 21
## s07 . . 1 . . . . 22 . 21 . . . 4 . . .
## s08 . . 2 . . . 21 . 23 . . . . . . . .
## s09 . . . . . . . . . 21 . . . . . . .
## s10 . . 2 . . . . . . . . . . . . . .
## s11 . . . . . . . . . . . . . . . . .
## s12 . . . . . 2 . . . . . . 22 22 . . .
## s13 . . . . . . . . . . . 21 . . . . 1
## s14 . . . . . . . . . . 1 . 21 . . . .
## s15 22 . . 1 . 4 . . . . . . . . . . .
## s16 . . . . . 23 . . . . . . . . . . 21
## s17 . . . 4 . . . . . . . . . . . . .
as_data_frame(net, what="edges")
## from to type weight
## 1 s01 s02 hyperlink 22
## 2 s01 s03 hyperlink 22
## 3 s01 s04 hyperlink 21
## 4 s01 s15 mention 20
## 5 s02 s01 hyperlink 23
## 6 s02 s03 hyperlink 21
## 7 s02 s09 hyperlink 1
## 8 s02 s10 hyperlink 5
## 9 s03 s01 hyperlink 21
## 10 s03 s04 hyperlink 22
## 11 s03 s05 hyperlink 1
## 12 s03 s08 hyperlink 4
## 13 s03 s10 mention 2
## 14 s03 s11 hyperlink 1
## 15 s03 s12 hyperlink 1
## 16 s04 s03 hyperlink 23
## 17 s04 s06 mention 1
## 18 s04 s11 mention 22
## 19 s04 s12 hyperlink 3
## 20 s04 s17 mention 2
## 21 s05 s01 mention 1
## 22 s05 s02 hyperlink 21
## 23 s05 s09 hyperlink 2
## 24 s05 s15 mention 21
## 25 s06 s16 hyperlink 21
## 26 s06 s17 mention 21
## 27 s07 s03 mention 1
## 28 s07 s08 mention 22
## 29 s07 s10 hyperlink 21
## 30 s07 s14 mention 4
## 31 s08 s03 hyperlink 2
## 32 s08 s07 mention 21
## 33 s08 s09 mention 23
## 34 s09 s10 mention 21
## 35 s10 s03 hyperlink 2
## 36 s12 s06 mention 2
## 37 s12 s13 hyperlink 22
## 38 s12 s14 mention 22
## 39 s13 s12 hyperlink 21
## 40 s13 s17 mention 1
## 41 s14 s11 mention 1
## 42 s14 s13 mention 21
## 43 s15 s01 hyperlink 22
## 44 s15 s04 hyperlink 1
## 45 s15 s06 hyperlink 4
## 46 s16 s06 hyperlink 23
## 47 s16 s17 mention 21
## 48 s17 s04 hyperlink 4
as_data_frame(net, what="vertices")
## name media media.type type.label audience.size
## s01 s01 NY Times 1 Newspaper 20
## s02 s02 Washington Post 1 Newspaper 25
## s03 s03 Wall Street Journal 1 Newspaper 30
## s04 s04 USA Today 1 Newspaper 32
## s05 s05 LA Times 1 Newspaper 20
## s06 s06 New York Post 1 Newspaper 50
## s07 s07 CNN 2 TV 56
## s08 s08 MSNBC 2 TV 34
## s09 s09 FOX News 2 TV 60
## s10 s10 ABC 2 TV 23
## s11 s11 BBC 2 TV 34
## s12 s12 Yahoo News 3 Online 33
## s13 s13 Google News 3 Online 23
## s14 s14 Reuters.com 3 Online 12
## s15 s15 NYTimes.com 3 Online 24
## s16 s16 WashingtonPost.com 3 Online 28
## s17 s17 AOL.com 3 Online 33
head(nodes2)
## id media media.type media.name audience.size
## 1 s01 NYT 1 Newspaper 20
## 2 s02 WaPo 1 Newspaper 25
## 3 s03 WSJ 1 Newspaper 30
## 4 s04 USAT 1 Newspaper 32
## 5 s05 LATimes 1 Newspaper 20
## 6 s06 CNN 2 TV 56
head(links2)
## U01 U02 U03 U04 U05 U06 U07 U08 U09 U10 U11 U12 U13 U14 U15 U16 U17
## s01 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## s02 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0
## s03 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0
## s04 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0
## s05 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0
## s06 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1
## U18 U19 U20
## s01 0 0 0
## s02 0 0 1
## s03 0 0 0
## s04 0 0 0
## s05 0 0 0
## s06 0 0 0
net2 <- graph_from_incidence_matrix(links2)
table(V(net2)$type)
##
## FALSE TRUE
## 10 20
net2.bp <- bipartite.projection(net2)
as_incidence_matrix(net2) %*% t(as_incidence_matrix(net2))
## s01 s02 s03 s04 s05 s06 s07 s08 s09 s10
## s01 3 0 0 0 0 0 0 0 0 1
## s02 0 3 0 0 0 0 0 0 1 0
## s03 0 0 4 1 0 0 0 0 1 0
## s04 0 0 1 3 1 0 0 0 0 1
## s05 0 0 0 1 3 1 0 0 0 1
## s06 0 0 0 0 1 3 1 1 0 0
## s07 0 0 0 0 0 1 3 1 0 0
## s08 0 0 0 0 0 1 1 4 1 0
## s09 0 1 1 0 0 0 0 1 3 0
## s10 1 0 0 1 1 0 0 0 0 2
t(as_incidence_matrix(net2)) %*% as_incidence_matrix(net2)
## U01 U02 U03 U04 U05 U06 U07 U08 U09 U10 U11 U12 U13 U14 U15 U16 U17
## U01 2 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
## U02 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## U03 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## U04 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0
## U05 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0
## U06 0 0 0 0 0 2 1 1 1 0 0 0 0 0 0 0 0
## U07 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0
## U08 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0
## U09 0 0 0 0 0 1 1 1 2 1 1 0 0 0 0 0 0
## U10 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0
## U11 1 0 0 0 0 0 0 0 1 1 3 1 1 0 0 0 0
## U12 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0
## U13 0 0 0 0 0 0 0 0 0 0 1 1 2 1 0 0 1
## U14 0 0 0 0 0 0 0 0 0 0 0 0 1 2 1 1 1
## U15 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0
## U16 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 2 1
## U17 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 2
## U18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
## U19 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1
## U20 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
## U18 U19 U20
## U01 0 0 0
## U02 0 0 0
## U03 0 0 0
## U04 0 0 1
## U05 0 0 1
## U06 0 1 1
## U07 0 0 0
## U08 0 0 0
## U09 0 0 0
## U10 0 0 0
## U11 0 0 0
## U12 0 0 0
## U13 0 0 0
## U14 0 0 0
## U15 0 0 0
## U16 1 1 0
## U17 1 1 0
## U18 1 1 0
## U19 1 2 1
## U20 0 1 2
plot(net2.bp$proj1, vertex.label.color="black", vertex.label.dist=1,
vertex.size=7, vertex.label=nodes2$media[!is.na(nodes2$media.type)])

plot(net2.bp$proj2, vertex.label.color="black", vertex.label.dist=1,
vertex.size=7, vertex.label=nodes2$media[ is.na(nodes2$media.type)])

# Plot with curved edges (edge.curved=.1) and reduce arrow size:
plot(net, edge.arrow.size=.4, edge.curved=.1)

# Set edge color to gray, and the node color to orange.
# Replace the vertex label with the node names stored in "media"
plot(net, edge.arrow.size=.2, edge.curved=0,
vertex.color="orange", vertex.frame.color="#555555", vertex.label=V(net)$media, vertex.label.color="black", vertex.label.cex=.7)

# Generate colors based on media type:
colrs <- c("gray50", "tomato", "gold")
V(net)$color <- colrs[V(net)$media.type]
# Set node size based on audience size:
V(net)$size <- V(net)$audience.size*0.7
# The labels are currently node IDs.
# Setting them to NA will render no labels:
V(net)$label.color <- "black"
V(net)$label <- NA
# Set edge width based on weight:
E(net)$width <- E(net)$weight/6
#change arrow size and edge color:
E(net)$arrow.size <- .2
E(net)$edge.color <- "gray80"
E(net)$width <- 1+E(net)$weight/12
plot(net, edge.color="orange", vertex.color="gray50")

plot(net)
legend(x=-1.5, y=-1.1, c("Newspaper","Television", "Online News"), pch=21,
col="#777777", pt.bg=colrs, pt.cex=2, cex=.8, bty="n", ncol=1)

plot(net, vertex.shape="none", vertex.label=V(net)$media,
vertex.label.font=2, vertex.label.color="gray40",
vertex.label.cex=.7, edge.color="gray85")

edge.start <- ends(net, es=E(net), names=F)[,1]
edge.col <- V(net)$color[edge.start]
plot(net, edge.color=edge.col, edge.curved=.1)

net.bg <- sample_pa(80)
V(net.bg)$size <- 8
V(net.bg)$frame.color <- "white"
V(net.bg)$color <- "orange"
V(net.bg)$label <- ""
E(net.bg)$arrow.mode <- 0
plot(net.bg)

plot(net.bg, layout=layout_randomly)

l <- layout_in_circle(net.bg)
plot(net.bg, layout=l)

l <- cbind(1:vcount(net.bg), c(1, vcount(net.bg):2))
plot(net.bg, layout=l)

# Randomly placed vertices
l <- layout_randomly(net.bg)
plot(net.bg, layout=l)

# Circle layout
l <- layout_in_circle(net.bg)
plot(net.bg, layout=l)

# 3D sphere layout
l <- layout_on_sphere(net.bg)
plot(net.bg, layout=l)

l <- layout_with_fr(net.bg)
plot(net.bg, layout=l)

par(mfrow=c(2,2), mar=c(0,0,0,0))
plot(net.bg, layout=layout_with_fr)
plot(net.bg, layout=layout_with_fr)
plot(net.bg, layout=l)
plot(net.bg, layout=l)

l <- layout_with_fr(net.bg)
l <- norm_coords(l, ymin=-1, ymax=1, xmin=-1, xmax=1)
par(mfrow=c(2,2), mar=c(0,0,0,0))
plot(net.bg, rescale=F, layout=l*0.4)
plot(net.bg, rescale=F, layout=l*0.6)
plot(net.bg, rescale=F, layout=l*0.8)
plot(net.bg, rescale=F, layout=l*1.0)

l <- layout_with_kk(net.bg)
plot(net.bg, layout=l)
plot(net.bg, layout=layout_with_lgl)
layouts <- grep("^layout_", ls("package:igraph"), value=TRUE)[-1]
# Remove layouts that do not apply to our graph.
layouts <- layouts[!grepl("bipartite|merge|norm|sugiyama|tree", layouts)]
par(mfrow=c(3,3), mar=c(1,1,1,1))

for (layout in layouts) {
print(layout)
l <- do.call(layout, list(net))
plot(net, edge.arrow.mode=0, layout=l, main=layout) }
## [1] "layout_as_star"
## [1] "layout_components"
## [1] "layout_in_circle"
## [1] "layout_nicely"
## [1] "layout_on_grid"
## [1] "layout_on_sphere"
## [1] "layout_randomly"
## [1] "layout_with_dh"
## [1] "layout_with_drl"

## [1] "layout_with_fr"
## [1] "layout_with_gem"
## [1] "layout_with_graphopt"
## [1] "layout_with_kk"
## [1] "layout_with_lgl"
## [1] "layout_with_mds"
hist(links$weight)
mean(links$weight)
## [1] 12.40816
sd(links$weight)
## [1] 9.905635
cut.off <- mean(links$weight)
net.sp <- delete_edges(net, E(net)[weight<cut.off])
plot(net.sp)
E(net)$width <- 1.5
plot(net, edge.color=c("dark red", "slategrey")[(E(net)$type=="hyperlink")+1],
vertex.color="gray40", layout=layout.circle)

net.m <- net - E(net)[E(net)$type=="hyperlink"] # another way to delete edges
net.h <- net - E(net)[E(net)$type=="mention"]
# Plot the two links separately:
par(mfrow=c(1,2))
plot(net.h, vertex.color="orange", main="Tie: Hyperlink")
plot(net.m, vertex.color="lightsteelblue2", main="Tie: Mention")

# Make sure the nodes stay in place in both plots:
l <- layout_with_fr(net)
plot(net.h, vertex.color="orange", layout=l, main="Tie: Hyperlink")
plot(net.m, vertex.color="lightsteelblue2", layout=l, main="Tie: Mention")

tkid <- tkplot(net) #tkid is the id of the tkplot that will open
l <- tkplot.getcoords(tkid) # grab the coordinates from tkplot
tk_close(tkid, window.close = T)
plot(net, layout=l)
netm <- get.adjacency(net, attr="weight", sparse=F)
colnames(netm) <- V(net)$media
rownames(netm) <- V(net)$media
palf <- colorRampPalette(c("gold", "dark orange"))
heatmap(netm[,17:1], Rowv = NA, Colv = NA, col = palf(100),
scale="none", margins=c(10,10) )


V(net2)$color <- c("steel blue", "orange")[V(net2)$type+1]
V(net2)$shape <- c("square", "circle")[V(net2)$type+1]
V(net2)$label <- ""
V(net2)$label[V(net2)$type==F] <- nodes2$media[V(net2)$type==F]
V(net2)$label.cex=.4
V(net2)$label.font=2
plot(net2, vertex.label.color="white", vertex.size=(2-V(net2)$type)*8)
plot(net2, vertex.label=NA, vertex.size=7, layout=layout_as_bipartite)

plot(net2, vertex.shape="none", vertex.label=nodes2$media,
vertex.label.color=V(net2)$color, vertex.label.font=2.5,
vertex.label.cex=.6, edge.color="gray70", edge.width=2)
edge_density(net, loops=F)
## [1] 0.1764706
ecount(net)/(vcount(net)*(vcount(net)-1)) #for a directed network
## [1] 0.1764706
reciprocity(net)
## [1] 0.4166667
dyad_census(net) # Mutual, asymmetric, and nyll node pairs
## $mut
## [1] 10
##
## $asym
## [1] 28
##
## $null
## [1] 98
2*dyad_census(net)$mut/ecount(net) # Calculating reciprocity
## [1] 0.4166667
transitivity(net, type="global") # net is treated as an undirected network
## [1] 0.372549
transitivity(as.undirected(net, mode="collapse")) # same as above
## [1] 0.372549
transitivity(net, type="local")
## [1] 0.2142857 0.4000000 0.1153846 0.1944444 0.5000000 0.2666667 0.2000000
## [8] 0.1000000 0.3333333 0.3000000 0.3333333 0.2000000 0.1666667 0.1666667
## [15] 0.3000000 0.3333333 0.2000000
triad_census(net) # for directed networks
## [1] 244 241 80 13 11 27 15 22 4 1 8 4 4 3 3 0
diameter(net, directed=F, weights=NA)
## [1] 4
diameter(net, directed=F)
## [1] 28
diam <- get_diameter(net, directed=T)
diam
## + 7/17 vertices, named, from 5274fcf:
## [1] s12 s06 s17 s04 s03 s08 s07
class(diam)
## [1] "igraph.vs"
as.vector(diam)
## [1] 12 6 17 4 3 8 7
vcol <- rep("gray40", vcount(net))
vcol[diam] <- "gold"
ecol <- rep("gray80", ecount(net))
ecol[E(net, path=diam)] <- "orange"
# E(net, path=diam) finds edges along a path, here 'diam'
plot(net, vertex.color=vcol, edge.color=ecol, edge.arrow.mode=0)

deg <- degree(net, mode="all")
plot(net, vertex.size=deg*3)
hist(deg, breaks=1:vcount(net)-1, main="Histogram of node degree")

deg.dist <- degree_distribution(net, cumulative=T, mode="all")
plot( x=0:max(deg), y=1-deg.dist, pch=19, cex=1.2, col="orange",
xlab="Degree", ylab="Cumulative Frequency")
degree(net, mode="in")
## s01 s02 s03 s04 s05 s06 s07 s08 s09 s10 s11 s12 s13 s14 s15 s16 s17
## 4 2 6 4 1 4 1 2 3 4 3 3 2 2 2 1 4
centr_degree(net, mode="in", normalized=T)
## $res
## [1] 4 2 6 4 1 4 1 2 3 4 3 3 2 2 2 1 4
##
## $centralization
## [1] 0.1985294
##
## $theoretical_max
## [1] 272
closeness(net, mode="all", weights=NA)
## s01 s02 s03 s04 s05 s06
## 0.03333333 0.03030303 0.04166667 0.03846154 0.03225806 0.03125000
## s07 s08 s09 s10 s11 s12
## 0.03030303 0.02857143 0.02564103 0.02941176 0.03225806 0.03571429
## s13 s14 s15 s16 s17
## 0.02702703 0.02941176 0.03030303 0.02222222 0.02857143
centr_clo(net, mode="all", normalized=T)
## $res
## [1] 0.5333333 0.4848485 0.6666667 0.6153846 0.5161290 0.5000000 0.4848485
## [8] 0.4571429 0.4102564 0.4705882 0.5161290 0.5714286 0.4324324 0.4705882
## [15] 0.4848485 0.3555556 0.4571429
##
## $centralization
## [1] 0.3753596
##
## $theoretical_max
## [1] 7.741935
eigen_centrality(net, directed=T, weights=NA)
## $vector
## s01 s02 s03 s04 s05 s06 s07
## 0.6638179 0.3314674 1.0000000 0.9133129 0.3326443 0.7468249 0.1244195
## s08 s09 s10 s11 s12 s13 s14
## 0.3740317 0.3453324 0.5991652 0.7334202 0.7519086 0.3470857 0.2915055
## s15 s16 s17
## 0.3314674 0.2484270 0.7503292
##
## $value
## [1] 3.006215
##
## $options
## $options$bmat
## [1] "I"
##
## $options$n
## [1] 17
##
## $options$which
## [1] "LR"
##
## $options$nev
## [1] 1
##
## $options$tol
## [1] 0
##
## $options$ncv
## [1] 0
##
## $options$ldv
## [1] 0
##
## $options$ishift
## [1] 1
##
## $options$maxiter
## [1] 1000
##
## $options$nb
## [1] 1
##
## $options$mode
## [1] 1
##
## $options$start
## [1] 1
##
## $options$sigma
## [1] 0
##
## $options$sigmai
## [1] 0
##
## $options$info
## [1] 0
##
## $options$iter
## [1] 7
##
## $options$nconv
## [1] 1
##
## $options$numop
## [1] 31
##
## $options$numopb
## [1] 0
##
## $options$numreo
## [1] 18
centr_eigen(net, directed=T, normalized=T)
## $vector
## [1] 0.6638179 0.3314674 1.0000000 0.9133129 0.3326443 0.7468249 0.1244195
## [8] 0.3740317 0.3453324 0.5991652 0.7334202 0.7519086 0.3470857 0.2915055
## [15] 0.3314674 0.2484270 0.7503292
##
## $value
## [1] 3.006215
##
## $options
## $options$bmat
## [1] "I"
##
## $options$n
## [1] 17
##
## $options$which
## [1] "LR"
##
## $options$nev
## [1] 1
##
## $options$tol
## [1] 0
##
## $options$ncv
## [1] 0
##
## $options$ldv
## [1] 0
##
## $options$ishift
## [1] 1
##
## $options$maxiter
## [1] 1000
##
## $options$nb
## [1] 1
##
## $options$mode
## [1] 1
##
## $options$start
## [1] 1
##
## $options$sigma
## [1] 0
##
## $options$sigmai
## [1] 0
##
## $options$info
## [1] 0
##
## $options$iter
## [1] 7
##
## $options$nconv
## [1] 1
##
## $options$numop
## [1] 31
##
## $options$numopb
## [1] 0
##
## $options$numreo
## [1] 18
##
##
## $centralization
## [1] 0.5071775
##
## $theoretical_max
## [1] 16
betweenness(net, directed=T, weights=NA)
## s01 s02 s03 s04 s05 s06
## 24.0000000 5.8333333 127.0000000 93.5000000 16.5000000 20.3333333
## s07 s08 s09 s10 s11 s12
## 1.8333333 19.5000000 0.8333333 15.0000000 0.0000000 33.5000000
## s13 s14 s15 s16 s17
## 20.0000000 4.0000000 5.6666667 0.0000000 58.5000000
edge_betweenness(net, directed=T, weights=NA)
## [1] 10.833333 11.333333 8.333333 9.500000 4.000000 12.500000 3.000000
## [8] 2.333333 24.000000 16.000000 31.500000 32.500000 9.500000 6.500000
## [15] 23.000000 65.333333 11.000000 6.500000 18.000000 8.666667 5.333333
## [22] 10.000000 6.000000 11.166667 15.000000 21.333333 10.000000 2.000000
## [29] 1.333333 4.500000 11.833333 16.833333 6.833333 16.833333 31.000000
## [36] 17.000000 18.000000 14.500000 7.500000 28.500000 3.000000 17.000000
## [43] 5.666667 9.666667 6.333333 1.000000 15.000000 74.500000
centr_betw(net, directed=T, normalized=T)
## $res
## [1] 24.0000000 5.8333333 127.0000000 93.5000000 16.5000000
## [6] 20.3333333 1.8333333 19.5000000 0.8333333 15.0000000
## [11] 0.0000000 33.5000000 20.0000000 4.0000000 5.6666667
## [16] 0.0000000 58.5000000
##
## $centralization
## [1] 0.4460938
##
## $theoretical_max
## [1] 3840
hs <- hub_score(net, weights=NA)$vector
as <- authority_score(net, weights=NA)$vector
par(mfrow=c(1,2))

plot(net, vertex.size=hs*50, main="Hubs")
plot(net, vertex.size=as*30, main="Authorities")

mean_distance(net, directed=F)
## [1] 2.058824
mean_distance(net, directed=T)
## [1] 2.742188
distances(net) # with edge weights
## s01 s02 s03 s04 s05 s06 s07 s08 s09 s10 s11 s12 s13 s14 s15 s16 s17
## s01 0 4 2 6 1 5 3 4 3 4 3 3 9 4 7 26 8
## s02 4 0 4 8 3 7 5 6 1 5 5 5 11 6 9 28 10
## s03 2 4 0 4 1 3 1 2 3 2 1 1 7 2 5 24 6
## s04 6 8 4 0 5 1 5 6 7 6 5 3 3 6 1 22 2
## s05 1 3 1 5 0 4 2 3 2 3 2 2 8 3 6 25 7
## s06 5 7 3 1 4 0 4 5 6 5 4 2 4 5 2 21 3
## s07 3 5 1 5 2 4 0 3 4 3 2 2 8 3 6 25 7
## s08 4 6 2 6 3 5 3 0 5 4 3 3 9 4 7 26 8
## s09 3 1 3 7 2 6 4 5 0 5 4 4 10 5 8 27 9
## s10 4 5 2 6 3 5 3 4 5 0 3 3 9 4 7 26 8
## s11 3 5 1 5 2 4 2 3 4 3 0 2 8 1 6 25 7
## s12 3 5 1 3 2 2 2 3 4 3 2 0 6 3 4 23 5
## s13 9 11 7 3 8 4 8 9 10 9 8 6 0 9 4 22 1
## s14 4 6 2 6 3 5 3 4 5 4 1 3 9 0 7 26 8
## s15 7 9 5 1 6 2 6 7 8 7 6 4 4 7 0 23 3
## s16 26 28 24 22 25 21 25 26 27 26 25 23 22 26 23 0 21
## s17 8 10 6 2 7 3 7 8 9 8 7 5 1 8 3 21 0
distances(net, weights=NA) # ignore weights
## s01 s02 s03 s04 s05 s06 s07 s08 s09 s10 s11 s12 s13 s14 s15 s16 s17
## s01 0 1 1 1 1 2 2 2 2 2 2 2 3 3 1 3 2
## s02 1 0 1 2 1 3 2 2 1 1 2 2 3 3 2 4 3
## s03 1 1 0 1 1 2 1 1 2 1 1 1 2 2 2 3 2
## s04 1 2 1 0 2 1 2 2 3 2 1 1 2 2 1 2 1
## s05 1 1 1 2 0 2 2 2 1 2 2 2 3 3 1 3 3
## s06 2 3 2 1 2 0 3 3 3 3 2 1 2 2 1 1 1
## s07 2 2 1 2 2 3 0 1 2 1 2 2 2 1 3 4 3
## s08 2 2 1 2 2 3 1 0 1 2 2 2 3 2 3 4 3
## s09 2 1 2 3 1 3 2 1 0 1 3 3 4 3 2 4 4
## s10 2 1 1 2 2 3 1 2 1 0 2 2 3 2 3 4 3
## s11 2 2 1 1 2 2 2 2 3 2 0 2 2 1 2 3 2
## s12 2 2 1 1 2 1 2 2 3 2 2 0 1 1 2 2 2
## s13 3 3 2 2 3 2 2 3 4 3 2 1 0 1 3 2 1
## s14 3 3 2 2 3 2 1 2 3 2 1 1 1 0 3 3 2
## s15 1 2 2 1 1 1 3 3 2 3 2 2 3 3 0 2 2
## s16 3 4 3 2 3 1 4 4 4 4 3 2 2 3 2 0 1
## s17 2 3 2 1 3 1 3 3 4 3 2 2 1 2 2 1 0
dist.from.NYT <- distances(net, v=V(net)[media=="NY Times"], to=V(net), weights=NA)
# Set colors to plot the distances:
oranges <- colorRampPalette(c("dark red", "gold"))
col <- oranges(max(dist.from.NYT)+1)
col <- col[dist.from.NYT+1]
plot(net, vertex.color=col, vertex.label=dist.from.NYT, edge.arrow.size=.6,
vertex.label.color="white")
news.path <- shortest_paths(net,
from = V(net)[media=="MSNBC"],
to = V(net)[media=="New York Post"],
output = "both") # both path nodes and edges
# Generate edge color variable to plot the path:
ecol <- rep("gray80", ecount(net))
ecol[unlist(news.path$epath)] <- "orange"
# Generate edge width variable to plot the path:
ew <- rep(2, ecount(net))
ew[unlist(news.path$epath)] <- 4
# Generate node color variable to plot the path:
vcol <- rep("gray40", vcount(net))
vcol[unlist(news.path$vpath)] <- "gold"
plot(net, vertex.color=vcol, edge.color=ecol,
edge.width=ew, edge.arrow.mode=0)

inc.edges <- incident(net, V(net)[media=="Wall Street Journal"], mode="all")
# Set colors to plot the selected edges.
ecol <- rep("gray80", ecount(net))
ecol[inc.edges] <- "orange"
vcol <- rep("grey40", vcount(net))
vcol[V(net)$media=="Wall Street Journal"] <- "gold"
plot(net, vertex.color=vcol, edge.color=ecol)
neigh.nodes <- neighbors(net, V(net)[media=="Wall Street Journal"], mode="out")
# Set colors to plot the neighbors:
vcol[neigh.nodes] <- "#ff9d00"
plot(net, vertex.color=vcol)

E(net)[ V(net)[type.label=="Newspaper"] %->% V(net)[type.label=="Online"] ]
## + 7/48 edges from 5274fcf (vertex names):
## [1] s01->s15 s03->s12 s04->s12 s04->s17 s05->s15 s06->s16 s06->s17
cocitation(net)
## s01 s02 s03 s04 s05 s06 s07 s08 s09 s10 s11 s12 s13 s14 s15 s16 s17
## s01 0 1 1 2 1 1 0 1 2 2 1 1 0 0 1 0 0
## s02 1 0 1 1 0 0 0 0 1 0 0 0 0 0 2 0 0
## s03 1 1 0 1 0 1 1 1 2 2 1 1 0 1 1 0 1
## s04 2 1 1 0 1 1 0 1 0 1 1 1 0 0 1 0 0
## s05 1 0 0 1 0 0 0 1 0 1 1 1 0 0 0 0 0
## s06 1 0 1 1 0 0 0 0 0 0 1 1 1 1 0 0 2
## s07 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
## s08 1 0 1 1 1 0 0 0 0 2 1 1 0 1 0 0 0
## s09 2 1 2 0 0 0 1 0 0 1 0 0 0 0 1 0 0
## s10 2 0 2 1 1 0 0 2 1 0 1 1 0 1 0 0 0
## s11 1 0 1 1 1 1 0 1 0 1 0 2 1 0 0 0 1
## s12 1 0 1 1 1 1 0 1 0 1 2 0 0 0 0 0 2
## s13 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0
## s14 0 0 1 0 0 1 0 1 0 1 0 0 1 0 0 0 0
## s15 1 2 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0
## s16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
## s17 0 0 1 0 0 2 0 0 0 0 1 2 0 0 0 1 0
net.sym <- as.undirected(net, mode= "collapse",
edge.attr.comb=list(weight="sum", "ignore"))
cliques(net.sym) # list of cliques
## [[1]]
## + 1/17 vertex, named, from 5672ada:
## [1] s03
##
## [[2]]
## + 1/17 vertex, named, from 5672ada:
## [1] s06
##
## [[3]]
## + 1/17 vertex, named, from 5672ada:
## [1] s14
##
## [[4]]
## + 1/17 vertex, named, from 5672ada:
## [1] s09
##
## [[5]]
## + 1/17 vertex, named, from 5672ada:
## [1] s04
##
## [[6]]
## + 2/17 vertices, named, from 5672ada:
## [1] s04 s06
##
## [[7]]
## + 2/17 vertices, named, from 5672ada:
## [1] s03 s04
##
## [[8]]
## + 1/17 vertex, named, from 5672ada:
## [1] s05
##
## [[9]]
## + 2/17 vertices, named, from 5672ada:
## [1] s05 s09
##
## [[10]]
## + 2/17 vertices, named, from 5672ada:
## [1] s03 s05
##
## [[11]]
## + 1/17 vertex, named, from 5672ada:
## [1] s13
##
## [[12]]
## + 2/17 vertices, named, from 5672ada:
## [1] s13 s14
##
## [[13]]
## + 1/17 vertex, named, from 5672ada:
## [1] s10
##
## [[14]]
## + 2/17 vertices, named, from 5672ada:
## [1] s09 s10
##
## [[15]]
## + 2/17 vertices, named, from 5672ada:
## [1] s03 s10
##
## [[16]]
## + 1/17 vertex, named, from 5672ada:
## [1] s16
##
## [[17]]
## + 2/17 vertices, named, from 5672ada:
## [1] s06 s16
##
## [[18]]
## + 1/17 vertex, named, from 5672ada:
## [1] s08
##
## [[19]]
## + 2/17 vertices, named, from 5672ada:
## [1] s08 s09
##
## [[20]]
## + 2/17 vertices, named, from 5672ada:
## [1] s03 s08
##
## [[21]]
## + 1/17 vertex, named, from 5672ada:
## [1] s01
##
## [[22]]
## + 2/17 vertices, named, from 5672ada:
## [1] s01 s05
##
## [[23]]
## + 3/17 vertices, named, from 5672ada:
## [1] s01 s03 s05
##
## [[24]]
## + 2/17 vertices, named, from 5672ada:
## [1] s01 s04
##
## [[25]]
## + 3/17 vertices, named, from 5672ada:
## [1] s01 s03 s04
##
## [[26]]
## + 2/17 vertices, named, from 5672ada:
## [1] s01 s03
##
## [[27]]
## + 1/17 vertex, named, from 5672ada:
## [1] s17
##
## [[28]]
## + 2/17 vertices, named, from 5672ada:
## [1] s16 s17
##
## [[29]]
## + 3/17 vertices, named, from 5672ada:
## [1] s06 s16 s17
##
## [[30]]
## + 2/17 vertices, named, from 5672ada:
## [1] s13 s17
##
## [[31]]
## + 2/17 vertices, named, from 5672ada:
## [1] s04 s17
##
## [[32]]
## + 3/17 vertices, named, from 5672ada:
## [1] s04 s06 s17
##
## [[33]]
## + 2/17 vertices, named, from 5672ada:
## [1] s06 s17
##
## [[34]]
## + 1/17 vertex, named, from 5672ada:
## [1] s12
##
## [[35]]
## + 2/17 vertices, named, from 5672ada:
## [1] s12 s13
##
## [[36]]
## + 3/17 vertices, named, from 5672ada:
## [1] s12 s13 s14
##
## [[37]]
## + 2/17 vertices, named, from 5672ada:
## [1] s04 s12
##
## [[38]]
## + 3/17 vertices, named, from 5672ada:
## [1] s04 s06 s12
##
## [[39]]
## + 3/17 vertices, named, from 5672ada:
## [1] s03 s04 s12
##
## [[40]]
## + 2/17 vertices, named, from 5672ada:
## [1] s12 s14
##
## [[41]]
## + 2/17 vertices, named, from 5672ada:
## [1] s06 s12
##
## [[42]]
## + 2/17 vertices, named, from 5672ada:
## [1] s03 s12
##
## [[43]]
## + 1/17 vertex, named, from 5672ada:
## [1] s11
##
## [[44]]
## + 2/17 vertices, named, from 5672ada:
## [1] s04 s11
##
## [[45]]
## + 3/17 vertices, named, from 5672ada:
## [1] s03 s04 s11
##
## [[46]]
## + 2/17 vertices, named, from 5672ada:
## [1] s11 s14
##
## [[47]]
## + 2/17 vertices, named, from 5672ada:
## [1] s03 s11
##
## [[48]]
## + 1/17 vertex, named, from 5672ada:
## [1] s07
##
## [[49]]
## + 2/17 vertices, named, from 5672ada:
## [1] s07 s08
##
## [[50]]
## + 3/17 vertices, named, from 5672ada:
## [1] s03 s07 s08
##
## [[51]]
## + 2/17 vertices, named, from 5672ada:
## [1] s07 s10
##
## [[52]]
## + 3/17 vertices, named, from 5672ada:
## [1] s03 s07 s10
##
## [[53]]
## + 2/17 vertices, named, from 5672ada:
## [1] s07 s14
##
## [[54]]
## + 2/17 vertices, named, from 5672ada:
## [1] s03 s07
##
## [[55]]
## + 1/17 vertex, named, from 5672ada:
## [1] s15
##
## [[56]]
## + 2/17 vertices, named, from 5672ada:
## [1] s01 s15
##
## [[57]]
## + 3/17 vertices, named, from 5672ada:
## [1] s01 s05 s15
##
## [[58]]
## + 3/17 vertices, named, from 5672ada:
## [1] s01 s04 s15
##
## [[59]]
## + 2/17 vertices, named, from 5672ada:
## [1] s05 s15
##
## [[60]]
## + 2/17 vertices, named, from 5672ada:
## [1] s04 s15
##
## [[61]]
## + 3/17 vertices, named, from 5672ada:
## [1] s04 s06 s15
##
## [[62]]
## + 2/17 vertices, named, from 5672ada:
## [1] s06 s15
##
## [[63]]
## + 1/17 vertex, named, from 5672ada:
## [1] s02
##
## [[64]]
## + 2/17 vertices, named, from 5672ada:
## [1] s01 s02
##
## [[65]]
## + 3/17 vertices, named, from 5672ada:
## [1] s01 s02 s05
##
## [[66]]
## + 4/17 vertices, named, from 5672ada:
## [1] s01 s02 s03 s05
##
## [[67]]
## + 3/17 vertices, named, from 5672ada:
## [1] s01 s02 s03
##
## [[68]]
## + 2/17 vertices, named, from 5672ada:
## [1] s02 s10
##
## [[69]]
## + 3/17 vertices, named, from 5672ada:
## [1] s02 s09 s10
##
## [[70]]
## + 3/17 vertices, named, from 5672ada:
## [1] s02 s03 s10
##
## [[71]]
## + 2/17 vertices, named, from 5672ada:
## [1] s02 s05
##
## [[72]]
## + 3/17 vertices, named, from 5672ada:
## [1] s02 s05 s09
##
## [[73]]
## + 3/17 vertices, named, from 5672ada:
## [1] s02 s03 s05
##
## [[74]]
## + 2/17 vertices, named, from 5672ada:
## [1] s02 s09
##
## [[75]]
## + 2/17 vertices, named, from 5672ada:
## [1] s02 s03
sapply(cliques(net.sym), length) # clique sizes
## [1] 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 2 1 2 2 1 2 3 2 3 2 1 2 3 2 2 3 2 1 2
## [36] 3 2 3 3 2 2 2 1 2 3 2 2 1 2 3 2 3 2 2 1 2 3 3 2 2 3 2 1 2 3 4 3 2 3 3
## [71] 2 3 3 2 2
largest_cliques(net.sym) # cliques with max number of nodes
## [[1]]
## + 4/17 vertices, named, from 5672ada:
## [1] s03 s01 s02 s05
vcol <- rep("grey80", vcount(net.sym))
vcol[unlist(largest_cliques(net.sym))] <- "gold"
plot(as.undirected(net.sym), vertex.label=V(net.sym)$name, vertex.color=vcol)
ceb <- cluster_edge_betweenness(net)
## Warning in cluster_edge_betweenness(net): At community.c:460 :Membership
## vector will be selected based on the lowest modularity score.
## Warning in cluster_edge_betweenness(net): At community.c:467 :Modularity
## calculation with weighted edge betweenness community detection might not
## make sense -- modularity treats edge weights as similarities while edge
## betwenness treats them as distances
dendPlot(ceb, mode="hclust")

plot(ceb, net)
class(ceb)
## [1] "communities"
length(ceb) # number of communities
## [1] 5
membership(ceb) # community membership for each node
## s01 s02 s03 s04 s05 s06 s07 s08 s09 s10 s11 s12 s13 s14 s15 s16 s17
## 1 2 3 4 1 4 3 3 5 5 4 4 4 4 1 4 4
modularity(ceb) # how modular the graph partitioning is
## [1] 0.292476
crossing(ceb, net) # boolean vector: TRUE for edges across communities
## s01|s02 s01|s03 s01|s04 s01|s15 s02|s01 s02|s03 s02|s09 s02|s10 s03|s01
## TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
## s03|s04 s03|s05 s03|s08 s03|s10 s03|s11 s03|s12 s04|s03 s04|s06 s04|s11
## TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE
## s04|s12 s04|s17 s05|s01 s05|s02 s05|s09 s05|s15 s06|s16 s06|s17 s07|s03
## FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE
## s07|s08 s07|s10 s07|s14 s08|s03 s08|s07 s08|s09 s09|s10 s10|s03 s12|s06
## FALSE TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE
## s12|s13 s12|s14 s13|s12 s13|s17 s14|s11 s14|s13 s15|s01 s15|s04 s15|s06
## FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE
## s16|s06 s16|s17 s17|s04
## FALSE FALSE FALSE
clp <- cluster_label_prop(net)
plot(clp, net)

cfg <- cluster_fast_greedy(as.undirected(net))
plot(cfg, as.undirected(net))
V(net)$community <- cfg$membership
colrs <- adjustcolor( c("gray50", "tomato", "gold", "yellowgreen"), alpha=.6)
plot(net, vertex.color=colrs[V(net)$community])

kc <- coreness(net, mode="all")
plot(net, vertex.size=kc*6, vertex.label=kc, vertex.color=colrs[kc])
assortativity_nominal(net, V(net)$media.type, directed=F)
## [1] 0.1715568
assortativity(net, V(net)$audience.size, directed=F)
## [1] -0.1102857
assortativity_degree(net, directed=F)
## [1] -0.009551146
