# Analise de redes library(igraph) library(networkD3) # Multipartida a seguir. # Leitura de arquivos do tipo csv ------------------------------ g2.nos <- read.csv("mpartida_nos.csv",header=TRUE, sep = ";") g2.arestas <- read.csv("mpartida_arestas.csv",header=TRUE, sep = ";") # Obtencao do grafo a partir dos data.frames rede <- graph.data.frame(g2.arestas,directed=FALSE, vertices=g2.nos) rede # Alterando o nome dos vertices para Label # A coluna id sera "criada" para armazenar os numeros dos vertices V(rede)$id <- V(rede)$name V(rede)$name <- V(rede)$Label # Espessura das arestas E(rede)$width <- E(rede)$weight # Calculando o grau de cada vertice V(rede)$Grau <- degree(rede) # Definindo cores para cada tipo vertice ########################## # Cores de acordo com a Categoria ---------------------------- colrs <- c("gray50", "tomato", "gold") V(rede)$Cores <- colrs[V(rede)$CategoriaNum] # Layouts para a rede ######################################## # Layout Kamada Kawai ---------------------------------------- L.kk.2 <- layout_with_kk(rede) plot(rede, layout=L.kk.2,vertex.size = V(rede)$Grau*8,vertex.color= V(rede)$Cores) # Layout Circular ---------------------------------------- L.circ <- layout.circle(rede) plot(rede, layout=L.circ,vertex.size = V(rede)$Grau*8,vertex.color= V(rede)$Cores) # Fruchterman-Reingold set.seed(567) L.fr <- layout_with_fr(rede) plot(rede, layout=L.fr,vertex.size = V(rede)$Grau*8,vertex.color= V(rede)$Cores) # Layouts para redes bi- tri-partidas camada <- V(rede)$CategoriaNum L.trip <- layout_with_sugiyama(rede, layers=V(rede)$CategoriaNum) plot(rede,layout=cbind(camada,L.trip$layout[,1]), vertex.size=V(rede)$Grau*8,vertex.color= V(rede)$Cores) # Matriz de Adjacência ----------------------------------------- ma.2 <- as_adjacency_matrix(rede, type = "both",attr="weight") ma.2 # Medidas relacionadas à rede ---------------------------------- # Densidade densidade <- graph.density(rede, loops = FALSE) densidade # Grau médio grau.medio <- mean(degree(rede)) grau.medio # Comprimento de caminho médio (average path length) L.medio <- average.path.length(rede, unconnected = TRUE) L.medio # Diâmetro diametro <- diameter(rede) diametro # Coeficiente de agrupamento m?dio agrup.medio <- transitivity(rede, type = "average") agrup.medio # Tabela com resultados para a rede Medida <- c("Grau Médio","Densidade","Distância Média","Diâmetro","Coef. Agrup. Médio") Valor <- c(grau.medio,densidade,L.medio,diametro,agrup.medio) rede.valores <- as.data.frame(cbind(Medida,Valor)) rede.valores # Medidas relacionadas aos nós --------------------------------- # Grau grau.nos <- degree(rede) grau.nos # Tabela para Grau grau.tab <- as.data.frame(grau.nos) grau.tab$Nome <- row.names(grau.tab) names(grau.tab) <- c("Grau","Nome") grau.tab <- grau.tab[,c(2,1)] grau.tab <- as.data.frame(grau.tab) grau.tab # Pagerank pg.rnk <- page.rank(rede) pg.rank <- pg.rnk$vector # Tabela para page rank pgrnk.tab <- as.data.frame(pg.rank) pgrnk.tab$Nome <- row.names(pgrnk.tab) names(pgrnk.tab) <- c("PageRank","Nome") pgrnk.tab <- pgrnk.tab[,c(2,1)] pgrnk.tab <- as.data.frame(pgrnk.tab) pgrnk.tab # Intermediacao interm.nos <- betweenness(rede,normalized = TRUE) # Tabela para intermediacao betw.nos.tab <- as.data.frame(interm.nos) betw.nos.tab$Nome <- row.names(betw.nos.tab) names(betw.nos.tab) <- c("Betweenness","Nome") betw.nos.tab <- betw.nos.tab[,c(2,1)] betw.nos.tab <- as.data.frame(betw.nos.tab) betw.nos.tab # Clustering agrup <- transitivity(rede, type = "local") # Tabela para Clustering agrup.tab <- as.data.frame(agrup) agrup.tab$Nome <- row.names(grau.tab) names(agrup.tab) <- c("Clustering","Nome") agrup.tab <- agrup.tab[,c(2,1)] agrup.tab <- as.data.frame(agrup.tab) agrup.tab # Data frame agregado resumo1 <- merge(grau.tab,pgrnk.tab,by="Nome") resumo2 <- merge(betw.nos.tab,agrup.tab,by="Nome") resumo.no <- merge(resumo1,resumo2,by="Nome") resumo.no <- resumo.no[order(-resumo.no$PageRank),] rm(resumo1,resumo2) resumo.no # Medidas para arestas ----------------------------------------- interm.arestas <- edge_betweenness(rede, directed = FALSE) interm.arestas E(rede)$EdgeBetw <- interm.arestas aresta.tab <- as_edgelist(rede, names = TRUE) aresta.nam <- paste(aresta.tab[,1],"--",aresta.tab[,2]) df.aresta <- as.data.frame(cbind(aresta.nam,interm.arestas)) names(df.aresta) <- c("Aresta","Edge.Betweenness") df.aresta rede_d3 <- igraph_to_networkD3(rede, group = V(rede)$CategoriaNum) # Create force directed network plot forceNetwork(Links = rede_d3$links, Nodes = rede_d3$nodes, Source = 'source', Target = 'target', NodeID = 'name', Group = 'group') # ---------------------------------------------------------- # O arquivo Lista02_Respostas.doc com as respostas, # feito com Rmarkdown: # output1 = "mpartida.doc" output2 = "mpartida.html" rmarkdown::render('mpartida.Rmd', output_file = output2, #params = params, envir = new.env(parent = globalenv())) #----------------------------------------------------------- # #######################################################################