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
got_network %>%
edge_density()
[1] 0.0545183
got_network %>%
distances() %>%
as.vector() %>%
as_tibble() %>%
plot_ly(x = ~value) %>%
add_histogram()
got_network %>%
get_diameter() %>%
length()
[1] 7
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()
got_links <- got_links %>%
mutate(betweenness = edge_betweenness(got_network)) %>%
mutate(value = betweenness)
got_links %>%
datatable()
visNetwork(got_nodes, got_links, main = "Connections Between Characters in 'Game of Thrones'") %>%
visIgraphLayout(layout = "layout_nicely") %>%
visOptions(highlightNearest = T, nodesIdSelection = T)
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