1. Read the data into links and nodes, and create the network in igraph with graph_from_data_frame().
  2. Find the density of the network.
  3. Make a histogram of the distances in the network.
  4. Find the legnth of the diameter of the network.
  5. Mutate the following into the nodes data: label, title, degree, and set value = degree.
  6. Mutate betweenness into the links data, and set it to value.
  7. Create a diagram with visNetwork, with a title and options set for a menu and highlightNearest.
  8. Find the communities in the network, mutate a group column in the nodes data, and create another diagram displaying the colored groups.

This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

library(tidyverse)
library(igraph)                    
library(visNetwork)                
library(DT)
library(plotly)
  1. First, we need to read in the data.
Sept11_nodes <- read_csv("Sept11_nodes.csv")
Parsed with column specification:
cols(
  id = col_double(),
  name = col_character()
)
Sept11_links <- read_csv("Sept11_links.csv")
Parsed with column specification:
cols(
  from = col_double(),
  to = col_double()
)
  1. The next step was to create a graph using igraph.
terrorist_network <- graph_from_data_frame(Sept11_links, 
                                           vertices = Sept11_nodes, 
                                           directed = F)
terrorist_network %>% 
  vcount()
[1] 62
terrorist_network %>%
  ecount()
[1] 151
  1. Next, we want to determine the density of the network.
terrorist_network %>% 
  edge_density()
[1] 0.07985193
  1. Then, we want to create a visual representation (using a histogram) of the distances in the network. You can see that the history is roughly symmetrical, and that most individuals are linked between 2 and 4 hops.
terrorist_network %>% 
  distances() %>% 
  as.vector() %>%              
  as_tibble() %>%             
  plot_ly(x = ~value) %>% 
  add_histogram()
  1. Now, we will find the legth of the diameter of the network.
terrorist_network %>%
  get_diameter()
+ 6/62 vertices, named, from 30a8d6a:
[1] Samir_Kashk            Essid_Sami_Ben_Khemais Tarek_Maaroufi         Abu_Qatada             Abu_Walid             
[6] Kamel_Daoudi          

It appears there are 6 terrorists.

  1. Next, we mutated data for the nodes in order to create a data table including degrees, name, and label.

Sept11_nodes <- Sept11_nodes %>% 
  mutate(label = name)

Sept11_nodes %>% 
  datatable()
  1. The next step is to mutate in betweenness into the links data set.

Sept11_links <- Sept11_links %>%
  mutate(betweenness = edge_betweenness(terrorist_network)) %>%
  mutate(value = betweenness)

Sept11_links
  1. Here I created a diagram using visNetwork to look at the links of those involved in the 9/11 terrorist attack.
visNetwork(Sept11_nodes, 
           Sept11_links, 
           main = "Network of Terrorists Involved in the 9/11 Terrorist Attack") %>% 
  visIgraphLayout(layout = "layout_nicely") %>% 
  visOptions(highlightNearest = T, nodesIdSelection = T)
  1. Finally, a graph was created according to what group a certain terrorist was in.
terrorist_network %>% 
  infomap.community() %>% 
  membership()
                      Samir_Kashk                    Madjid_Sahoune                   Fahid_al_Shakri 
                                2                                 2                                 2 
                   Lased_Ben_Heni            Essid_Sami_Ben_Khemais             Seifallah_ben_Hassine 
                                2                                 2                                 2 
               Mohamed_Bensakhria                    Mehdi_Khammoun                Essoussi_Laaroussi 
                                2                                 2                                 2 
                   Tarek_Maaroufi                   Haydar_Abu_Doha                      Ahmed_Ressam 
                                2                                 2                                 2 
                       Abu_Qatada                         Abu_Walid              Jean-Marc_Grandvisir 
                                3                                 3                                 3 
                      Abu_Zubeida                    Mizar_Trabelsi                     Djamal_Beghal 
                                3                                 3                                 3 
                     Kamel_Daoudi               Jerome_Courtaillier                David_Courtaillier 
                                3                                 3                                 3 
               Zacarias_Moussaoui         Imad_Eddin_Barakat_Yarkas                Ramzi_Bin_al-Shibh 
                                3                                 1                                 1 
                  Mohammed_Belfas                 Abdelghani_Mzoudi Ahmed_Khalil_Ibrahim_Samir_Al-Ani 
                                1                                 1                                 1 
          Mustafa_Ahmed_al-Hisawi                      Agus_Budiman              Mounir_El_Motassadeq 
                                1                                 1                                 1 
                 Zakariya_Essabar                      Mohamed_Atta                       Fayez_Ahmed 
                                1                                 1                                 1 
              Mamduh_Mahmud_Salim                 Mamoun_Darkazanli                       Said_Bahaji 
                                1                                 1                                 1 
                      Ziad_Jarrah                  Marwan_Al-Shehhi                     Wail_Alshehri 
                                1                                 1                                 1 
                  Waleed_Alshehri                   Mohand_Alshehri                      Satam_Suqami 
                                1                                 5                                 1 
              Abdul_Aziz_Al-Omari                      Lotfi_Raissi                  Ahmed_Al_Haznawi 
                                1                                 6                                 5 
                      Raed_Hijazi                   Nabil_al-Marabh                    Hamza_Alghamdi 
                                5                                 5                                 5 
                   Ahmed_Alghamdi                     Salem_Alhazmi                      Hani_Hanjour 
                                5                                 4                                 6 
                   Bandar_Alhazmi           Rayed_Mohammed_Abdullah                   Raisal_Al_Salmi 
                                6                                 6                                 6 
                      Majed_Moqed                 Khalid_Al-Mihdhar                     Nawaf_Alhazmi 
                                4                                 4                                 4 
                  Osama_Awadallah                Abdussattar_Shaikh                      Mohamed_Abdi 
                                4                                 4                                 4 
                     Ahmed_Alnami                    Saeed_Alghamdi 
                                5                                 5 
Sept11_nodes <- Sept11_nodes %>% 
  mutate(group = membership(infomap.community(terrorist_network)))

terrorist_nodes %>% 
  datatable()



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

NA
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKMS4gUmVhZCB0aGUgZGF0YSBpbnRvIGxpbmtzIGFuZCBub2RlcywgYW5kIGNyZWF0ZSB0aGUgbmV0d29yayBpbiBpZ3JhcGggd2l0aCBncmFwaF9mcm9tX2RhdGFfZnJhbWUoKS4gIAoyLiBGaW5kIHRoZSBkZW5zaXR5IG9mIHRoZSBuZXR3b3JrLiAgCjMuIE1ha2UgYSBoaXN0b2dyYW0gb2YgdGhlIGRpc3RhbmNlcyBpbiB0aGUgbmV0d29yay4gIAo0LiBGaW5kIHRoZSBsZWdudGggb2YgdGhlIGRpYW1ldGVyIG9mIHRoZSBuZXR3b3JrLiAgCjUuIE11dGF0ZSB0aGUgZm9sbG93aW5nIGludG8gdGhlIG5vZGVzIGRhdGE6IGxhYmVsLCB0aXRsZSwgZGVncmVlLCBhbmQgc2V0IHZhbHVlID0gZGVncmVlLiAgCjYuIE11dGF0ZSBiZXR3ZWVubmVzcyBpbnRvIHRoZSBsaW5rcyBkYXRhLCBhbmQgc2V0IGl0IHRvIHZhbHVlLiAgCjcuIENyZWF0ZSBhIGRpYWdyYW0gd2l0aCB2aXNOZXR3b3JrLCB3aXRoIGEgdGl0bGUgYW5kIG9wdGlvbnMgc2V0IGZvciBhIG1lbnUgYW5kIGhpZ2hsaWdodE5lYXJlc3QuICAKOC4gRmluZCB0aGUgY29tbXVuaXRpZXMgaW4gdGhlIG5ldHdvcmssIG11dGF0ZSBhIGdyb3VwIGNvbHVtbiBpbiB0aGUgbm9kZXMgZGF0YSwgYW5kIGNyZWF0ZSBhbm90aGVyIGRpYWdyYW0gZGlzcGxheWluZyB0aGUgY29sb3JlZCBncm91cHMuCgoKCgoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoaWdyYXBoKSAgICAgICAgICAgICAgICAgICAgCmxpYnJhcnkodmlzTmV0d29yaykgICAgICAgICAgICAgICAgCmxpYnJhcnkoRFQpCmxpYnJhcnkocGxvdGx5KQpgYGAKCjEuIEZpcnN0LCB3ZSBuZWVkIHRvIHJlYWQgaW4gdGhlIGRhdGEuCmBgYHtyfQpTZXB0MTFfbm9kZXMgPC0gcmVhZF9jc3YoIlNlcHQxMV9ub2Rlcy5jc3YiKQpTZXB0MTFfbGlua3MgPC0gcmVhZF9jc3YoIlNlcHQxMV9saW5rcy5jc3YiKQpgYGAKCgoyLiBUaGUgbmV4dCBzdGVwIHdhcyB0byBjcmVhdGUgYSBncmFwaCB1c2luZyBpZ3JhcGguCgpgYGB7cn0KdGVycm9yaXN0X25ldHdvcmsgPC0gZ3JhcGhfZnJvbV9kYXRhX2ZyYW1lKFNlcHQxMV9saW5rcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlcyA9IFNlcHQxMV9ub2RlcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RlZCA9IEYpCgpgYGAKCgpgYGB7cn0KdGVycm9yaXN0X25ldHdvcmsgJT4lIAogIHZjb3VudCgpCmBgYAoKYGBge3J9CnRlcnJvcmlzdF9uZXR3b3JrICU+JQogIGVjb3VudCgpCgpgYGAKCgozLiBOZXh0LCB3ZSB3YW50IHRvIGRldGVybWluZSB0aGUgZGVuc2l0eSBvZiB0aGUgbmV0d29yay4KCmBgYHtyfQp0ZXJyb3Jpc3RfbmV0d29yayAlPiUgCiAgZWRnZV9kZW5zaXR5KCkKYGBgCgoKNC4gVGhlbiwgd2Ugd2FudCB0byBjcmVhdGUgYSB2aXN1YWwgcmVwcmVzZW50YXRpb24gKHVzaW5nIGEgaGlzdG9ncmFtKSBvZiB0aGUgZGlzdGFuY2VzIGluIHRoZSBuZXR3b3JrLiBZb3UgY2FuIHNlZSB0aGF0IHRoZSBoaXN0b3J5IGlzIHJvdWdobHkgc3ltbWV0cmljYWwsIGFuZCB0aGF0IG1vc3QgaW5kaXZpZHVhbHMgYXJlIGxpbmtlZCBiZXR3ZWVuIDIgYW5kIDQgaG9wcy4KCmBgYHtyfQp0ZXJyb3Jpc3RfbmV0d29yayAlPiUgCiAgZGlzdGFuY2VzKCkgJT4lIAogIGFzLnZlY3RvcigpICU+JSAgICAgICAgICAgICAgCiAgYXNfdGliYmxlKCkgJT4lICAgICAgICAgICAgIAogIHBsb3RfbHkoeCA9IH52YWx1ZSkgJT4lIAogIGFkZF9oaXN0b2dyYW0oKQpgYGAKCjUuIE5vdywgd2Ugd2lsbCBmaW5kIHRoZSBsZWd0aCBvZiB0aGUgZGlhbWV0ZXIgb2YgdGhlIG5ldHdvcmsuCgpgYGB7cn0KdGVycm9yaXN0X25ldHdvcmsgJT4lCiAgZ2V0X2RpYW1ldGVyKCkKCmBgYAoKSXQgYXBwZWFycyB0aGVyZSBhcmUgNiB0ZXJyb3Jpc3RzLgoKCjYuIE5leHQsIHdlIG11dGF0ZWQgZGF0YSBmb3IgdGhlIG5vZGVzIGluIG9yZGVyIHRvIGNyZWF0ZSBhIGRhdGEgdGFibGUgaW5jbHVkaW5nIGRlZ3JlZXMsIG5hbWUsIGFuZCBsYWJlbC4KCmBgYHtyfQoKU2VwdDExX25vZGVzIDwtIFNlcHQxMV9ub2RlcyAlPiUgCiAgbXV0YXRlKGxhYmVsID0gbmFtZSkKClNlcHQxMV9ub2RlcyAlPiUgCiAgZGF0YXRhYmxlKCkKYGBgCgoKCjcuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gbXV0YXRlIGluIGJldHdlZW5uZXNzIGludG8gdGhlIGxpbmtzIGRhdGEgc2V0LgoKYGBge3J9CgpTZXB0MTFfbGlua3MgPC0gU2VwdDExX2xpbmtzICU+JQogIG11dGF0ZShiZXR3ZWVubmVzcyA9IGVkZ2VfYmV0d2Vlbm5lc3ModGVycm9yaXN0X25ldHdvcmspKSAlPiUKICBtdXRhdGUodmFsdWUgPSBiZXR3ZWVubmVzcykKClNlcHQxMV9saW5rcwpgYGAKCjguIEhlcmUgSSBjcmVhdGVkIGEgZGlhZ3JhbSB1c2luZyB2aXNOZXR3b3JrIHRvIGxvb2sgYXQgdGhlIGxpbmtzIG9mIHRob3NlIGludm9sdmVkIGluIHRoZSA5LzExIHRlcnJvcmlzdCBhdHRhY2suCgpgYGB7cn0KdmlzTmV0d29yayhTZXB0MTFfbm9kZXMsIAogICAgICAgICAgIFNlcHQxMV9saW5rcywgCiAgICAgICAgICAgbWFpbiA9ICJOZXR3b3JrIG9mIFRlcnJvcmlzdHMgSW52b2x2ZWQgaW4gdGhlIDkvMTEgVGVycm9yaXN0IEF0dGFjayIpICU+JSAKICB2aXNJZ3JhcGhMYXlvdXQobGF5b3V0ID0gImxheW91dF9uaWNlbHkiKSAlPiUgCiAgdmlzT3B0aW9ucyhoaWdobGlnaHROZWFyZXN0ID0gVCwgbm9kZXNJZFNlbGVjdGlvbiA9IFQpCmBgYAoKOS4gRmluYWxseSwgYSBncmFwaCB3YXMgY3JlYXRlZCBhY2NvcmRpbmcgdG8gd2hhdCBncm91cCBhIGNlcnRhaW4gdGVycm9yaXN0IHdhcyBpbi4KCmBgYHtyfQp0ZXJyb3Jpc3RfbmV0d29yayAlPiUgCiAgaW5mb21hcC5jb21tdW5pdHkoKSAlPiUgCiAgbWVtYmVyc2hpcCgpCgpTZXB0MTFfbm9kZXMgPC0gU2VwdDExX25vZGVzICU+JSAKICBtdXRhdGUoZ3JvdXAgPSBtZW1iZXJzaGlwKGluZm9tYXAuY29tbXVuaXR5KHRlcnJvcmlzdF9uZXR3b3JrKSkpCgp0ZXJyb3Jpc3Rfbm9kZXMgJT4lIAogIGRhdGF0YWJsZSgpCgoKdmlzTmV0d29yayhTZXB0MTFfbm9kZXMsIAogICAgICAgICAgIFNlcHQxMV9saW5rcywgCiAgICAgICAgICAgbWFpbiA9ICJOZXR3b3JrIG9mIFRlcnJvcmlzdHMgSW52b2x2ZWQgaW4gdGhlIDkvMTEgVGVycm9yaXN0IEF0dGFjayIpICU+JSAKICB2aXNJZ3JhcGhMYXlvdXQobGF5b3V0ID0gImxheW91dF9uaWNlbHkiKSAlPiUgCiAgdmlzT3B0aW9ucyhoaWdobGlnaHROZWFyZXN0ID0gVCwgbm9kZXNJZFNlbGVjdGlvbiA9IFQsIHNlbGVjdGVkQnkgPSAiZ3JvdXAiKQoKYGBgCgoKCgoKCgoK