# install.packages("igraph") # install.packages("tidygraph") terms_labels <- read.csv("terms_labels.csv", header=TRUE) head(terms_labels) library(dplyr) terms_labels$uri %<>% as.character() %>% strsplit("/", fixed=TRUE) %>% sapply(tail, 1) terms_labels$narrower...uri %<>% as.character() %>% strsplit("/", fixed=TRUE) %>% sapply(tail, 1) %>% sapply(function(x) if(identical(x,character(0))) NA else x) terms_labels$broader...uri %<>% as.character() %>% strsplit("/", fixed=TRUE) %>% sapply(tail, 1) %>% sapply(function(x) if(identical(x,character(0))) NA else x) terms_labels %<>% select(uri,broader...uri,narrower...uri,pref.label,class) %>% rename(ID=uri,broader_ID=broader...uri,narrower_ID=narrower...uri,idmsClass=class) %>% transform(ID = as.numeric(ID), broader_ID = as.numeric(broader_ID), narrower_ID = as.numeric(narrower_ID), pref.label = as.character(pref.label), idmsClass = as.character(idmsClass)) head(terms_labels) terms_labels_subclass <- terms_labels %>% filter(idmsClass=="TPG") broader <- terms_labels_subclass %>% subset(select=c("broader_ID", "ID")) %>% na.omit() %>% unique() %>% rename(from=broader_ID,to=ID) narrower <- terms_labels_subclass %>% subset(select=c("ID", "narrower_ID")) %>% na.omit() %>% unique() %>% rename(from=ID,to=narrower_ID) edgelist <- broader %>% rbind(narrower) %>% unique() head(edgelist) library(tidygraph) library(igraph) g <- edgelist %>% as_tbl_graph(directed=TRUE) g print(paste0("# of edges: ", gsize(g)," | # of nodes: ", gorder(g), " | # of weakly connected components: ", length(decompose(g, mode="weak")))) options(repr.plot.width=10, repr.plot.height=10) g %>% plot(layout=layout.fruchterman.reingold, vertex.size=degree(g)*0.6, vertex.label.color="darkblue", vertex.label.cex=0.6, vertex.color="orange", edge.arrow.size=0.1, edge.width=0.5, edge.color="gray") options(repr.plot.width=5, repr.plot.height=4) example <- create_tree(6, children=3) %>% mutate(name = letters[1:6]) # example %>% plot(layout=layout.reingold.tilford,vertex.label.cex=1, vertex.size=40) library(IRdisplay) display_png(file="igraphTraversalExample.PNG") example %>% mutate(rank = map_bfs_int(node_is_root(), .f = function(rank, ...) { rank })) example %>% mutate(rank = map_dfs_int(node_is_root(), .f = function(rank, ...) { rank })) which(V(g) %>% sapply(function(x) neighbors(g,x,mode="in")) %>% sapply(length) == 0) g %>% mutate(depth = bfs_dist( which(V(g) %>% sapply(function(x) neighbors(g,x,mode="in")) %>% sapply(length) == 0) )) g %>% mutate(neighborhood_in_edges = map_local_dbl(mode="in", .f = function(neighborhood, ...) { gsize(neighborhood) })) %>% mutate(depth = bfs_dist(which(neighborhood_in_edges==0))) %>% arrange(neighborhood_in_edges) options(repr.plot.width=10, repr.plot.height=5) par(mfrow = c(1, 2)) g %>% plot(layout=layout.kamada.kawai,vertex.size=degree(g)*1.2, vertex.label.color="darkblue", vertex.label.cex=0.6, vertex.color="orange", edge.arrow.size=0.1, edge.width=0.5, edge.color="gray") mtext("Kamada Kawai layout") g %>% plot(layout=layout.reingold.tilford, vertex.size=10, vertex.label.color="darkblue", vertex.label.cex=0.6, vertex.color="orange", edge.arrow.size=0.2, edge.width=1, edge.color="darkgray") mtext("Reingold & Tilford’s Tidier layout") class_names = c("CTP", "NAME", "ID", "LEG", "SIT", "TPG", "ORG") results = data.frame() for(i in class_names){ terms_labels_subclass <- terms_labels %>% filter(idmsClass==i) broader <- terms_labels_subclass %>% subset(select=c("broader_ID", "ID")) %>% na.omit() %>% unique() %>% rename(from=broader_ID,to=ID) narrower <- terms_labels_subclass %>% subset(select=c("ID", "narrower_ID")) %>% na.omit() %>% unique() %>% rename(from=ID,to=narrower_ID) edgelist <- broader %>% rbind(narrower) %>% unique() g <- edgelist %>% as_tbl_graph(directed=TRUE) numVertex <- gorder(g) numEdge <- gsize(g) numComponents <- length(decompose(g, mode="weak")) if(numComponents == 1) { indegree <- V(g) %>% sapply(function(x) neighbors(g,x,mode="in")) %>% sapply(length) root <- names(which(indegree == 0)) } else { root = NA } row <- data.frame(i, numVertex, numEdge, numComponents, root) results <- rbind(results, row) } colnames(results) <- c("Class", "Vertices", "Edges", "Components", "Root") results