#install.packages("igraph") library(igraph) library(networkD3) library(readxl) library(scales) library(ggplot2) # Leitura dos dados da rede ===================================== # Vertices (data.frame contendo informacoes dos vertices) nos <- read_excel("ex1.xlsx",sheet = "nos") # Arestas (data.frame contendo informacoes das arestas) arestas <- read_excel("ex1.xlsx",sheet = "arestas") # Obtendo o grafo a partir dos data.frames ex1 <- graph.data.frame(arestas,directed=FALSE, vertices=nos) ex1 # Propriedades dos vertices V(ex1) V(ex1)$name # Mesmo que id V(ex1)$label # Propriedades das arestas E(ex1)$weight E(ex1)$type # Plot da rede plot(ex1) # Calculando o grau de cada vertice degree(ex1) V(ex1)$grau <- degree(ex1) V(ex1)$grau # Obtendo clusters: cluster <- cluster_edge_betweenness(ex1) V(ex1)$grupos <- membership(cluster) V(ex1)$grupos # Definindo cores para cada vertice ########################## # Cores de acordo com a Categoria ---------------------------- #colrs <- c("gray50", "tomato", "gold") cores <- rainbow(7) V(ex1)$cores <- cores[V(ex1)$grupos] V(ex1)$tamanho <- V(ex1)$grau+1 #Plotar o Grafo: plot(ex1, vertex.size = V(ex1)$tamanho*5,vertex.color= V(ex1)$cores, vertex.label = "") plot(ex1, vertex.size = V(ex1)$tamanho*6,vertex.color= V(ex1)$cores) # # Layout Kamada Kawai ---------------------------------------- L.kk <- layout_with_kk(ex1) plot(ex1, layout=L.kk,vertex.size = V(ex1)$tamanho*6, vertex.color= V(ex1)$cores) # Layout Circular ---------------------------------------- L.circ <- layout.circle(ex1) plot(ex1, layout=L.circ,vertex.size = V(ex1)$tamanho*6, vertex.color= V(ex1)$cores) # Fruchterman-Reingold set.seed(567) L.fr <- layout_with_fr(ex1) plot(ex1, layout=L.fr,vertex.size = V(ex1)$tamanho*6, vertex.color= V(ex1)$cores) # Leyout dinamica com NetworkD3 ex1D3 <- igraph_to_networkD3(ex1,what = 'both', group = V(ex1)$grupos) ex1D3$links$value <- 1 ex1D3$nodes$label <- V(ex1)$label forceNetwork(Links = ex1D3$links, Nodes = ex1D3$nodes, Group = 'group', Value = "value", NodeID = "label", opacity = 0.9,zoom = TRUE) # Deteccao de comunidades # Evidenciar as comunidades dendPlot(cluster, mode="hclust") set.seed(123) plot(cluster, ex1) set.seed(567) plot(cluster,ex1, layout=L.kk,vertex.size = V(ex1)$tamanho*6, vertex.color= V(ex1)$cores) ################################################################ # Estudo do grau dos vertices grau <- V(ex1)$grau grau <- sort(grau) df.grau <- as.data.frame(grau) df.grau df.grau$acumulada <- 1 N <- nrow(df.grau) for (i in 1:N) { df.grau[i,2] <- (2*i-1)/(2*N) } df.grau$complementar <- 1-df.grau$acumulada df.grau plot(df.grau$grau,df.grau$complementar) ggplot(df.grau) + geom_point(aes(grau,complementar)) + scale_x_log10(breaks = trans_breaks("log10", function(x) 10^x), labels = trans_format("log10", math_format(10^.x))) + scale_y_log10(breaks = trans_breaks("log10", function(x) 10^x), labels = trans_format("log10", math_format(10^.x))) + coord_flip() + theme_light() # Distribuicao de Graus: d1 = degree.distribution(ex1, cumulative=FALSE) len = length(d1) barplot(d1, main="Distribuição de Graus",xlab="Graus", ylab="Função densidade de probabilidade (pdf)", names.arg=c(0:(len-1))) # Closeness Vertices: apenas para a maior componente comp <- components(ex1) V(ex1)$componente <- comp$membership # considerando apenas a componente 3 ex1.gc <- delete_vertices(ex1, V(ex1)$componente != 3) ex1.gc # Calculo de closeness cl = closeness(ex1.gc) cl # Betweenness (para vertices): b = betweenness(ex1.gc) b # Betweenness Arestas: eb = edge.betweenness(ex1.gc) eb # Outros algoritmos para deteccao de comunidades ==================== # Considerando apenas a componente gigante (GC) ex1.gc # edge betweenness -------------------------------------------------- ebc <- cluster_edge_betweenness(ex1.gc) modularity(ebc) grupos.eb = cbind(membership(ebc),V(ex1.gc)$label) grupos.eb # # walktrap: deteccao de comunidades por passeio aleatorio ----------- wtc <- cluster_walktrap(ex1.gc) modularity(wtc) grupos.wt = cbind(membership(wtc),V(ex1.gc)$label) grupos.wt # # fast_greedy (executar apenas para mmultiplas arestas) ------------- fgc <- cluster_fast_greedy(ex1.gc) modularity(fgc) grupos.fg = cbind(membership(fgc),V(ex1.gc)$label) grupos.fg