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