1. This code will gather the data for all of the ‘Game of Thrones’ characters and their connections.
got_nodes <- read_csv("got_nodes.csv")
got_links <- read_csv("got_links.csv")

This uses that data and organizes it into an igraph. This shows us the links between the characters.

got_network <- graph_from_data_frame(got_links, vertices = got_nodes, 
                                     directed = F)

got_network
IGRAPH 1c7f9ec UN-- 104 292 -- 
+ attr: name (v/c)
+ edges from 1c7f9ec (vertex names):
 [1] Aemon    --Grenn     Aemon    --Samwell   Aerys    --Jaime     Aerys    --Robert    Aerys    --Tyrion    Aerys    --Tywin     Alliser  --Mance     Amory    --Oberyn    Arya     --Anguy    
[10] Arya     --Beric     Arya     --Bran      Arya     --Brynden   Arya     --Cersei    Arya     --Gendry    Arya     --Gregor    Jaime    --Arya      Arya     --Joffrey   Arya     --Jon      
[19] Arya     --Rickon    Arya     --Roose     Arya     --Sandor    Arya     --Thoros    Tyrion   --Arya      Belwas   --Barristan Belwas   --Illyrio   Beric    --Thoros    Bran     --Hodor    
[28] Bran     --Jojen     Bran     --Jon       Bran     --Meera     Bran     --Nan       Bran     --Rickon    Samwell  --Bran      Bran     --Theon     Brienne  --Loras     Gregor   --Bronn    
[37] Bronn    --Podrick   Brynden  --Walder    Brienne  --Catelyn   Brynden  --Catelyn   Catelyn  --Edmure    Catelyn  --Hoster    Jaime    --Catelyn   Catelyn  --Jeyne     Catelyn  --Lysa     
[46] Catelyn  --Petyr     Catelyn  --Robb      Catelyn  --Roslin    Catelyn  --Sansa     Tyrion   --Catelyn   Walder   --Catelyn   Cersei   --Brienne   Cersei   --Gregor    Cersei   --Ilyn     
[55] Jaime    --Cersei    Cersei   --Joffrey   Cersei   --Meryn     Robert   --Cersei    Cersei   --Sandor    Tyrion   --Cersei    Craster  --Karl      Daario   --Irri      Daenerys --Aegon    
[64] Barristan--Daenerys  Belwas   --Daenerys  Daario   --Daenerys  Daenerys --Drogo     Irri     --Daenerys  Daenerys --Jorah     Daenerys --Kraznys   Daenerys --Missandei Daenerys --Rakharo  
+ ... omitted several edges
  1. This code finds the density of the links.
got_network %>% 
  edge_density()
[1] 0.0545183
  1. This code gathers the distances between characters in the network and puts it into a histogram so you can easily see the most common number of links.
got_network %>% 
  distances() %>% 
  as.vector() %>%             
  as_tibble() %>%            
  plot_ly(x = ~value) %>% 
  add_histogram() 
  1. This code finds the diameter, which is the longest number of links.
got_network %>% 
  get_diameter() %>% 
  length()
[1] 7
  1. This code adds another column to the nodes data table called ‘label’. This makes it so names will show up into diagrams.
got_nodes <- got_nodes %>% 
  mutate(label = name)

got_nodes %>% 
  datatable()

This code adds another column in the nodes data table named ‘title’ and this will make it so when you hover the mouse over a dot in a diagram, it shows a name.

got_nodes <- got_nodes %>% 
  mutate(title = name)

got_nodes %>%
  datatable()

This code finds the degree for each character, which is how many links each character has.

got_network %>%
  degree()
       Aemon        Grenn      Samwell        Aerys        Jaime       Robert       Tyrion        Tywin      Alliser        Mance        Amory       Oberyn         Arya        Anguy        Beric 
           3            4           15            4           22           14           31           16            3           11            1            6           18            1            4 
        Bran      Brynden       Cersei       Gendry       Gregor      Joffrey          Jon       Rickon        Roose       Sandor       Thoros       Belwas    Barristan      Illyrio        Hodor 
          12            5           13            3           12           16           23            6            1           10            4            4            5            1            4 
       Jojen        Meera          Nan        Theon      Brienne        Loras        Bronn      Podrick       Walder      Catelyn       Edmure       Hoster        Jeyne         Lysa        Petyr 
           4            4            1            4            6            8            3            4            7           14            7            3            2            8            6 
        Robb       Roslin        Sansa         Ilyn        Meryn      Craster         Karl       Daario         Irri     Daenerys        Aegon        Drogo        Jorah      Kraznys    Missandei 
          22            3           23            4            6            5            1            3            3           14            1            3            6            1            1 
     Rakharo      Rhaegar      Viserys         Worm        Davos    Salladhor       Eddard      Eddison        Gilly         Elia        Balon       Qyburn        Renly      Stannis       Tommen 
           1            6            2            1            4            1           12            2            4            3            3            1            5           10            4 
       Janos        Bowen        Kevan     Margaery     Myrcella        Dalla   Melisandre        Orell       Qhorin  Rattleshirt         Styr          Val      Ygritte    Jon Arryn       Lancel 
           5            2            6            6            2            3            4            1            5            4            2            3            4            2            1 
       Varys       Olenna    Marillion Robert Arryn      Ellaria         Mace       Lothar      Rickard         Shae      Shireen      Chataya        Doran      Pycelle       Walton 
           4            2            2            2            1            3            2            1            3            1            1            1            2            1 

This code adds another column to the nodes data table for the degree information.

got_nodes <- got_nodes %>%
  mutate(degree = degree(got_network))

got_nodes %>% 
  datatable()
  1. This code gathers the betweenness, which measures the shortest paths of links, and puts it into the links data table.
got_links <- got_links %>%
  mutate(betweenness = edge_betweenness(got_network)) %>%
  mutate(value = betweenness)

got_links %>%
  datatable()
  1. This code creates a visNetwork diagram of the links between ‘Game of Thrones’ characters.
visNetwork(got_nodes, got_links, main = "Connections Between Characters in 'Game of Thrones'") %>% 
  visIgraphLayout(layout = "layout_nicely") %>% 
  visOptions(highlightNearest = T, nodesIdSelection = T)
  1. This code groups characters together by communitites and adds a ‘group’ column to the node data table.
got_nodes <- got_nodes %>% 
  mutate(group = membership(infomap.community(got_network)))
got_nodes %>%
  datatable()

This code uses the data above and puts it into a visNetwork that can be viewed by group.

visNetwork(got_nodes, 
           got_links, 
           main = "Connections Between Characters in 'Game of Thrones'") %>% 
  visIgraphLayout(layout = "layout_nicely") %>% 
  visOptions(highlightNearest = T, nodesIdSelection = T, selectedBy = "group")

NA
LS0tDQp0aXRsZTogIkdPVCBBbmFseXNpcyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCjEuIFRoaXMgY29kZSB3aWxsIGdhdGhlciB0aGUgZGF0YSBmb3IgYWxsIG9mIHRoZSAnR2FtZSBvZiBUaHJvbmVzJyBjaGFyYWN0ZXJzIGFuZCB0aGVpciBjb25uZWN0aW9ucy4gDQoNCmBgYHtyfQ0KZ290X25vZGVzIDwtIHJlYWRfY3N2KCJnb3Rfbm9kZXMuY3N2IikNCmdvdF9saW5rcyA8LSByZWFkX2NzdigiZ290X2xpbmtzLmNzdiIpDQpgYGANCg0KDQpUaGlzIHVzZXMgdGhhdCBkYXRhIGFuZCBvcmdhbml6ZXMgaXQgaW50byBhbiBpZ3JhcGguIFRoaXMgc2hvd3MgdXMgdGhlIGxpbmtzIGJldHdlZW4gdGhlIGNoYXJhY3RlcnMuICANCg0KYGBge3J9DQpnb3RfbmV0d29yayA8LSBncmFwaF9mcm9tX2RhdGFfZnJhbWUoZ290X2xpbmtzLCB2ZXJ0aWNlcyA9IGdvdF9ub2RlcywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0ZWQgPSBGKQ0KDQpnb3RfbmV0d29yaw0KDQpgYGANCg0KMi4gVGhpcyBjb2RlIGZpbmRzIHRoZSBkZW5zaXR5IG9mIHRoZSBsaW5rcy4gDQoNCmBgYHtyfQ0KZ290X25ldHdvcmsgJT4lIA0KICBlZGdlX2RlbnNpdHkoKQ0KYGBgDQoNCjMuIFRoaXMgY29kZSBnYXRoZXJzIHRoZSBkaXN0YW5jZXMgYmV0d2VlbiBjaGFyYWN0ZXJzIGluIHRoZSBuZXR3b3JrIGFuZCBwdXRzIGl0IGludG8gYSBoaXN0b2dyYW0gc28geW91IGNhbiBlYXNpbHkgc2VlIHRoZSBtb3N0IGNvbW1vbiBudW1iZXIgb2YgbGlua3MuIA0KDQpgYGB7cn0NCmdvdF9uZXR3b3JrICU+JSANCiAgZGlzdGFuY2VzKCkgJT4lIA0KICBhcy52ZWN0b3IoKSAlPiUgICAgICAgICAgICAgDQogIGFzX3RpYmJsZSgpICU+JSAgICAgICAgICAgIA0KICBwbG90X2x5KHggPSB+dmFsdWUpICU+JSANCiAgYWRkX2hpc3RvZ3JhbSgpIA0KYGBgDQoNCg0KNC4gVGhpcyBjb2RlIGZpbmRzIHRoZSBkaWFtZXRlciwgd2hpY2ggaXMgdGhlIGxvbmdlc3QgbnVtYmVyIG9mIGxpbmtzLiANCg0KYGBge3J9DQpnb3RfbmV0d29yayAlPiUgDQogIGdldF9kaWFtZXRlcigpICU+JSANCiAgbGVuZ3RoKCkNCmBgYA0KDQo1LiBUaGlzIGNvZGUgYWRkcyBhbm90aGVyIGNvbHVtbiB0byB0aGUgbm9kZXMgZGF0YSB0YWJsZSBjYWxsZWQgJ2xhYmVsJy4gVGhpcyBtYWtlcyBpdCBzbyBuYW1lcyB3aWxsIHNob3cgdXAgaW50byBkaWFncmFtcy4gDQoNCmBgYHtyfQ0KZ290X25vZGVzIDwtIGdvdF9ub2RlcyAlPiUgDQogIG11dGF0ZShsYWJlbCA9IG5hbWUpDQoNCmdvdF9ub2RlcyAlPiUgDQogIGRhdGF0YWJsZSgpDQpgYGANCg0KVGhpcyBjb2RlIGFkZHMgYW5vdGhlciBjb2x1bW4gaW4gdGhlIG5vZGVzIGRhdGEgdGFibGUgbmFtZWQgJ3RpdGxlJyBhbmQgdGhpcyB3aWxsIG1ha2UgaXQgc28gd2hlbiB5b3UgaG92ZXIgdGhlIG1vdXNlIG92ZXIgYSBkb3QgaW4gYSBkaWFncmFtLCBpdCBzaG93cyBhIG5hbWUuIA0KDQpgYGB7cn0NCmdvdF9ub2RlcyA8LSBnb3Rfbm9kZXMgJT4lIA0KICBtdXRhdGUodGl0bGUgPSBuYW1lKQ0KDQpnb3Rfbm9kZXMgJT4lDQogIGRhdGF0YWJsZSgpDQpgYGANCg0KVGhpcyBjb2RlIGZpbmRzIHRoZSBkZWdyZWUgZm9yIGVhY2ggY2hhcmFjdGVyLCB3aGljaCBpcyBob3cgbWFueSBsaW5rcyBlYWNoIGNoYXJhY3RlciBoYXMuIA0KDQpgYGB7cn0NCmdvdF9uZXR3b3JrICU+JQ0KICBkZWdyZWUoKQ0KYGBgDQoNClRoaXMgY29kZSBhZGRzIGFub3RoZXIgY29sdW1uIHRvIHRoZSBub2RlcyBkYXRhIHRhYmxlIGZvciB0aGUgZGVncmVlIGluZm9ybWF0aW9uLg0KDQpgYGB7cn0NCmdvdF9ub2RlcyA8LSBnb3Rfbm9kZXMgJT4lDQogIG11dGF0ZShkZWdyZWUgPSBkZWdyZWUoZ290X25ldHdvcmspKQ0KDQpnb3Rfbm9kZXMgJT4lIA0KICBkYXRhdGFibGUoKQ0KYGBgDQoNCg0KNi4gVGhpcyBjb2RlIGdhdGhlcnMgdGhlIGJldHdlZW5uZXNzLCB3aGljaCBtZWFzdXJlcyB0aGUgc2hvcnRlc3QgcGF0aHMgb2YgbGlua3MsIGFuZCBwdXRzIGl0IGludG8gdGhlIGxpbmtzIGRhdGEgdGFibGUuIA0KDQpgYGB7cn0NCmdvdF9saW5rcyA8LSBnb3RfbGlua3MgJT4lDQogIG11dGF0ZShiZXR3ZWVubmVzcyA9IGVkZ2VfYmV0d2Vlbm5lc3MoZ290X25ldHdvcmspKSAlPiUNCiAgbXV0YXRlKHZhbHVlID0gYmV0d2Vlbm5lc3MpDQoNCmdvdF9saW5rcyAlPiUNCiAgZGF0YXRhYmxlKCkNCmBgYA0KDQoNCjcuIFRoaXMgY29kZSBjcmVhdGVzIGEgdmlzTmV0d29yayBkaWFncmFtIG9mIHRoZSBsaW5rcyBiZXR3ZWVuICdHYW1lIG9mIFRocm9uZXMnIGNoYXJhY3RlcnMuIA0KDQpgYGB7cn0NCnZpc05ldHdvcmsoZ290X25vZGVzLCBnb3RfbGlua3MsIG1haW4gPSAiQ29ubmVjdGlvbnMgQmV0d2VlbiBDaGFyYWN0ZXJzIGluICdHYW1lIG9mIFRocm9uZXMnIikgJT4lIA0KICB2aXNJZ3JhcGhMYXlvdXQobGF5b3V0ID0gImxheW91dF9uaWNlbHkiKSAlPiUgDQogIHZpc09wdGlvbnMoaGlnaGxpZ2h0TmVhcmVzdCA9IFQsIG5vZGVzSWRTZWxlY3Rpb24gPSBUKQ0KYGBgDQoNCjguIFRoaXMgY29kZSBncm91cHMgY2hhcmFjdGVycyB0b2dldGhlciBieSBjb21tdW5pdGl0ZXMgYW5kIGFkZHMgYSAnZ3JvdXAnIGNvbHVtbiB0byB0aGUgIG5vZGUgZGF0YSB0YWJsZS4gIA0KDQpgYGB7cn0NCmdvdF9ub2RlcyA8LSBnb3Rfbm9kZXMgJT4lIA0KICBtdXRhdGUoZ3JvdXAgPSBtZW1iZXJzaGlwKGluZm9tYXAuY29tbXVuaXR5KGdvdF9uZXR3b3JrKSkpDQpnb3Rfbm9kZXMgJT4lDQogIGRhdGF0YWJsZSgpDQpgYGANCg0KDQpUaGlzIGNvZGUgdXNlcyB0aGUgZGF0YSBhYm92ZSBhbmQgcHV0cyBpdCBpbnRvIGEgdmlzTmV0d29yayB0aGF0IGNhbiBiZSB2aWV3ZWQgYnkgZ3JvdXAuIA0KDQpgYGB7cn0NCnZpc05ldHdvcmsoZ290X25vZGVzLCANCiAgICAgICAgICAgZ290X2xpbmtzLCANCiAgICAgICAgICAgbWFpbiA9ICJDb25uZWN0aW9ucyBCZXR3ZWVuIENoYXJhY3RlcnMgaW4gJ0dhbWUgb2YgVGhyb25lcyciKSAlPiUgDQogIHZpc0lncmFwaExheW91dChsYXlvdXQgPSAibGF5b3V0X25pY2VseSIpICU+JSANCiAgdmlzT3B0aW9ucyhoaWdobGlnaHROZWFyZXN0ID0gVCwgbm9kZXNJZFNlbGVjdGlvbiA9IFQsIHNlbGVjdGVkQnkgPSAiZ3JvdXAiKQ0KDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K