library(tidyverse)
library(igraph)                    # This is the package to analyze the network
library(visNetwork)                # Creates visualizations of the network
library(DT)
library(plotly)
  1. Read the data into links and nodes, and create the network in igraph with graph_from_data_frame().
Sept11_nodes <- read_csv("Sept11_nodes.csv")

── Column specification ──────────────────────────────────────────────────────────────────────────────────────
cols(
  id = col_double(),
  name = col_character()
)
Sept11_links <- read_csv("Sept11_links.csv")

── Column specification ──────────────────────────────────────────────────────────────────────────────────────
cols(
  from = col_double(),
  to = col_double()
)
Sept11_network <- graph_from_data_frame(Sept11_links, 
                                           vertices = Sept11_nodes, 
                                           directed = F)
Sept11_network
IGRAPH 8c51cbb UN-- 62 151 -- 
+ attr: name (v/c)
+ edges from 8c51cbb (vertex names):
 [1] Samir_Kashk           --Essid_Sami_Ben_Khemais Madjid_Sahoune        --Essid_Sami_Ben_Khemais
 [3] Fahid_al_Shakri       --Essid_Sami_Ben_Khemais Lased_Ben_Heni        --Essid_Sami_Ben_Khemais
 [5] Lased_Ben_Heni        --Mohamed_Bensakhria     Essid_Sami_Ben_Khemais--Seifallah_ben_Hassine 
 [7] Essid_Sami_Ben_Khemais--Mohamed_Bensakhria     Essid_Sami_Ben_Khemais--Mehdi_Khammoun        
 [9] Essid_Sami_Ben_Khemais--Essoussi_Laaroussi     Essid_Sami_Ben_Khemais--Tarek_Maaroufi        
[11] Essid_Sami_Ben_Khemais--Haydar_Abu_Doha        Essid_Sami_Ben_Khemais--Mohamed_Atta          
[13] Seifallah_ben_Hassine --Tarek_Maaroufi         Mohamed_Bensakhria    --Tarek_Maaroufi        
[15] Mehdi_Khammoun        --Haydar_Abu_Doha        Essoussi_Laaroussi    --Tarek_Maaroufi        
+ ... omitted several edges

This shows the network of terrorists on sept 11.

  1. Find the density of the network.
Sept11_network %>% 
  edge_density()
[1] 0.07985193

the density of the Sept 11 network is .08

  1. Make a histogram of the distances in the network.
Sept11_network %>% 
  distances() %>% 
  as.vector() %>%              # these two lines convert the distances matrix
  as_tibble() %>%              # to something plotly can graph
  plot_ly(x = ~value) %>% 
  add_histogram()

A hsitogram showing distances between the netowrk.

  1. Find the length of the diameter of the network.
Sept11_network %>% 
  get_diameter() %>% 
  length()
[1] 6

6 is the diameter length.

  1. Mutate the following into the nodes data: label, title, degree, and set value = degree.
Sept11_nodes<- Sept11_nodes%>%
  mutate(label= name)
Sept11_nodes<- Sept11_nodes%>%
  mutate(title= name)
Sept11_nodes<- Sept11_nodes%>%
  mutate(degree= degree(Sept11_network))
Sept11_nodes<- Sept11_nodes%>%
  mutate(value= degree)
Sept11_nodes%>%
  datatable()

This is a data table showing all the items that I mutated.

  1. Mutate betweenness into the links data, and set it to value.
Sept11_links <- Sept11_links %>% 
  mutate (betweenness = edge_betweenness(Sept11_network)) %>% 
  mutate(value = betweenness)
Sept11_links%>%
  datatable()

This is a datatable showing the mutation between value and betweenness.

  1. Create a diagram with visNetwork, with a title and options set for a menu and highlightNearest.
visNetwork(Sept11_nodes, 
           Sept11_links, 
           main = "Network of Terrorists involved in the 9/11 attack") %>% 
  visIgraphLayout(layout = "layout_nicely") %>% 
  visOptions(highlightNearest = T)

This is a visdiagram showing the network of terrorists involved in the Sept 11 attack.

  1. Find the communities in the network, mutate a group column in the nodes data, and create another diagram displaying the colored groups.
Sept11_network %>% 
  infomap.community()
IGRAPH clustering infomap, groups: 6, mod: 0.51
+ groups:
  $`1`
   [1] "Imad_Eddin_Barakat_Yarkas"         "Ramzi_Bin_al-Shibh"               
   [3] "Mohammed_Belfas"                   "Abdelghani_Mzoudi"                
   [5] "Ahmed_Khalil_Ibrahim_Samir_Al-Ani" "Mustafa_Ahmed_al-Hisawi"          
   [7] "Agus_Budiman"                      "Mounir_El_Motassadeq"             
   [9] "Zakariya_Essabar"                  "Mohamed_Atta"                     
  [11] "Fayez_Ahmed"                       "Mamduh_Mahmud_Salim"              
  [13] "Mamoun_Darkazanli"                 "Said_Bahaji"                      
  [15] "Ziad_Jarrah"                       "Marwan_Al-Shehhi"                 
  [17] "Wail_Alshehri"                     "Waleed_Alshehri"                  
  + ... omitted several groups/vertices
Sept11_nodes <- Sept11_nodes %>% 
  mutate(group = membership(infomap.community(Sept11_network)))

Sept11_nodes %>% 
  datatable()
NA
visNetwork(Sept11_nodes, 
           Sept11_links, 
           main = "Network of Terrorists involved in the 9/11 bombing") %>% 
  visIgraphLayout(layout = "layout_nicely") %>% 
  visOptions(highlightNearest = T, nodesIdSelection = T, selectedBy = "group")

Here is the mutated data and the diagram.

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGlncmFwaCkgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyB0aGUgcGFja2FnZSB0byBhbmFseXplIHRoZSBuZXR3b3JrCmxpYnJhcnkodmlzTmV0d29yaykgICAgICAgICAgICAgICAgIyBDcmVhdGVzIHZpc3VhbGl6YXRpb25zIG9mIHRoZSBuZXR3b3JrCmxpYnJhcnkoRFQpCmxpYnJhcnkocGxvdGx5KQpgYGAKCjEuIFJlYWQgdGhlIGRhdGEgaW50byBsaW5rcyBhbmQgbm9kZXMsIGFuZCBjcmVhdGUgdGhlIG5ldHdvcmsgaW4gaWdyYXBoIHdpdGggZ3JhcGhfZnJvbV9kYXRhX2ZyYW1lKCkuIApgYGB7cn0KU2VwdDExX25vZGVzIDwtIHJlYWRfY3N2KCJTZXB0MTFfbm9kZXMuY3N2IikKU2VwdDExX2xpbmtzIDwtIHJlYWRfY3N2KCJTZXB0MTFfbGlua3MuY3N2IikKYGBgCgpgYGB7cn0KU2VwdDExX25ldHdvcmsgPC0gZ3JhcGhfZnJvbV9kYXRhX2ZyYW1lKFNlcHQxMV9saW5rcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlcyA9IFNlcHQxMV9ub2RlcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RlZCA9IEYpCgpgYGAKCmBgYHtyfQpTZXB0MTFfbmV0d29yawpgYGAKVGhpcyBzaG93cyB0aGUgbmV0d29yayBvZiB0ZXJyb3Jpc3RzIG9uIHNlcHQgMTEuCgoyLiBGaW5kIHRoZSBkZW5zaXR5IG9mIHRoZSBuZXR3b3JrLgoKYGBge3J9ClNlcHQxMV9uZXR3b3JrICU+JSAKICBlZGdlX2RlbnNpdHkoKQpgYGAKCnRoZSBkZW5zaXR5IG9mIHRoZSBTZXB0IDExIG5ldHdvcmsgaXMgLjA4CgozLiBNYWtlIGEgaGlzdG9ncmFtIG9mIHRoZSBkaXN0YW5jZXMgaW4gdGhlIG5ldHdvcmsuCgpgYGB7cn0KU2VwdDExX25ldHdvcmsgJT4lIAogIGRpc3RhbmNlcygpICU+JSAKICBhcy52ZWN0b3IoKSAlPiUgICAgICAgICAgICAgICMgdGhlc2UgdHdvIGxpbmVzIGNvbnZlcnQgdGhlIGRpc3RhbmNlcyBtYXRyaXgKICBhc190aWJibGUoKSAlPiUgICAgICAgICAgICAgICMgdG8gc29tZXRoaW5nIHBsb3RseSBjYW4gZ3JhcGgKICBwbG90X2x5KHggPSB+dmFsdWUpICU+JSAKICBhZGRfaGlzdG9ncmFtKCkKYGBgCgpBIGhzaXRvZ3JhbSBzaG93aW5nIGRpc3RhbmNlcyBiZXR3ZWVuIHRoZSBuZXRvd3JrLiAKCjQuIEZpbmQgdGhlIGxlbmd0aCBvZiB0aGUgZGlhbWV0ZXIgb2YgdGhlIG5ldHdvcmsuIAoKYGBge3J9ClNlcHQxMV9uZXR3b3JrICU+JSAKICBnZXRfZGlhbWV0ZXIoKSAlPiUgCiAgbGVuZ3RoKCkKYGBgCgo2IGlzIHRoZSBkaWFtZXRlciBsZW5ndGguIAoKNS4gTXV0YXRlIHRoZSBmb2xsb3dpbmcgaW50byB0aGUgbm9kZXMgZGF0YTogbGFiZWwsIHRpdGxlLCBkZWdyZWUsIGFuZCBzZXQgdmFsdWUgPSBkZWdyZWUuCgpgYGB7cn0KU2VwdDExX25vZGVzPC0gU2VwdDExX25vZGVzJT4lCiAgbXV0YXRlKGxhYmVsPSBuYW1lKQpgYGAKCmBgYHtyfQpTZXB0MTFfbm9kZXM8LSBTZXB0MTFfbm9kZXMlPiUKICBtdXRhdGUodGl0bGU9IG5hbWUpCmBgYAoKYGBge3J9ClNlcHQxMV9ub2RlczwtIFNlcHQxMV9ub2RlcyU+JQogIG11dGF0ZShkZWdyZWU9IGRlZ3JlZShTZXB0MTFfbmV0d29yaykpCmBgYAoKYGBge3J9ClNlcHQxMV9ub2RlczwtIFNlcHQxMV9ub2RlcyU+JQogIG11dGF0ZSh2YWx1ZT0gZGVncmVlKQpgYGAKCmBgYHtyfQpTZXB0MTFfbm9kZXMlPiUKICBkYXRhdGFibGUoKQpgYGAKClRoaXMgaXMgYSBkYXRhIHRhYmxlIHNob3dpbmcgYWxsIHRoZSBpdGVtcyB0aGF0IEkgbXV0YXRlZC4gCgo2LiBNdXRhdGUgYmV0d2Vlbm5lc3MgaW50byB0aGUgbGlua3MgZGF0YSwgYW5kIHNldCBpdCB0byB2YWx1ZS4gIAoKYGBge3J9ClNlcHQxMV9saW5rcyA8LSBTZXB0MTFfbGlua3MgJT4lIAogIG11dGF0ZSAoYmV0d2Vlbm5lc3MgPSBlZGdlX2JldHdlZW5uZXNzKFNlcHQxMV9uZXR3b3JrKSkgJT4lIAogIG11dGF0ZSh2YWx1ZSA9IGJldHdlZW5uZXNzKQpgYGAKCmBgYHtyfQpTZXB0MTFfbGlua3MlPiUKICBkYXRhdGFibGUoKQpgYGAKClRoaXMgaXMgYSBkYXRhdGFibGUgc2hvd2luZyB0aGUgbXV0YXRpb24gYmV0d2VlbiB2YWx1ZSBhbmQgYmV0d2Vlbm5lc3MuIAoKNy4gQ3JlYXRlIGEgZGlhZ3JhbSB3aXRoIHZpc05ldHdvcmssIHdpdGggYSB0aXRsZSBhbmQgb3B0aW9ucyBzZXQgZm9yIGEgbWVudSBhbmQgaGlnaGxpZ2h0TmVhcmVzdC4KCmBgYHtyfQp2aXNOZXR3b3JrKFNlcHQxMV9ub2RlcywgCiAgICAgICAgICAgU2VwdDExX2xpbmtzLCAKICAgICAgICAgICBtYWluID0gIk5ldHdvcmsgb2YgVGVycm9yaXN0cyBpbnZvbHZlZCBpbiB0aGUgOS8xMSBhdHRhY2siKSAlPiUgCiAgdmlzSWdyYXBoTGF5b3V0KGxheW91dCA9ICJsYXlvdXRfbmljZWx5IikgJT4lIAogIHZpc09wdGlvbnMoaGlnaGxpZ2h0TmVhcmVzdCA9IFQpCmBgYAoKVGhpcyBpcyBhIHZpc2RpYWdyYW0gc2hvd2luZyB0aGUgbmV0d29yayBvZiB0ZXJyb3Jpc3RzIGludm9sdmVkIGluIHRoZSBTZXB0IDExIGF0dGFjay4gCgo4LiBGaW5kIHRoZSBjb21tdW5pdGllcyBpbiB0aGUgbmV0d29yaywgbXV0YXRlIGEgZ3JvdXAgY29sdW1uIGluIHRoZSBub2RlcyBkYXRhLCBhbmQgY3JlYXRlIGFub3RoZXIgZGlhZ3JhbSBkaXNwbGF5aW5nIHRoZSBjb2xvcmVkIGdyb3Vwcy4KCmBgYHtyfQpTZXB0MTFfbmV0d29yayAlPiUgCiAgaW5mb21hcC5jb21tdW5pdHkoKQpgYGAKCmBgYHtyfQpTZXB0MTFfbm9kZXMgPC0gU2VwdDExX25vZGVzICU+JSAKICBtdXRhdGUoZ3JvdXAgPSBtZW1iZXJzaGlwKGluZm9tYXAuY29tbXVuaXR5KFNlcHQxMV9uZXR3b3JrKSkpCgpTZXB0MTFfbm9kZXMgJT4lIAogIGRhdGF0YWJsZSgpCgpgYGAKCmBgYHtyfQp2aXNOZXR3b3JrKFNlcHQxMV9ub2RlcywgCiAgICAgICAgICAgU2VwdDExX2xpbmtzLCAKICAgICAgICAgICBtYWluID0gIk5ldHdvcmsgb2YgVGVycm9yaXN0cyBpbnZvbHZlZCBpbiB0aGUgOS8xMSBib21iaW5nIikgJT4lIAogIHZpc0lncmFwaExheW91dChsYXlvdXQgPSAibGF5b3V0X25pY2VseSIpICU+JSAKICB2aXNPcHRpb25zKGhpZ2hsaWdodE5lYXJlc3QgPSBULCBub2Rlc0lkU2VsZWN0aW9uID0gVCwgc2VsZWN0ZWRCeSA9ICJncm91cCIpCmBgYAoKSGVyZSBpcyB0aGUgbXV0YXRlZCBkYXRhIGFuZCB0aGUgZGlhZ3JhbS4gCgoKCgoKCgoKCg==