Manipulando Grafos no R

Manipulando Grafos no R

Hoje demonstraremos alguns passos para que possamos manipular Grafos no R. Para isso, precisaremos da biblioteca IGRAPH, que é um conjunto de ferramentas de análise de rede, de código aberto e livre, além dissso o IGRAPH pode ser programado em R, Python e C / C ++ (IGRAPH; 2016).

Para instalação do IGRAPH, podemos executar o comando:

install.packages("igraph")

A partir de então, podemos acessar a biblioteca com comando:

install.packages("igraph")
library(igraph)

Agora que temos a biblioteca instalada, precisamos de um grafo, como por exemplo a Fig.1 :

Figura 1 – Exemplo de grafo ponderado simples, Fonte:(STEEN; 2010)

Podemos representar o grafo, numa matriz de adjacências, usando uma planilha eletrônica como o Excel (Fig.2) e salvando o arquivo com extensão CSV:

Figura 2 – Matriz de adjacências no Excel

Figura 2 – Matriz de adjacências no Excel

Se visualizarmos o arquivo CSV gerado num editor de texto, como o NOTEPAD++, ele terá o seguinte formado:

Figura 3 – Arquivo CSV no NotePad++

Figura 3 – Arquivo CSV no NotePad++

Agora que temos os dados do grafo salvos, podemos manipulá-los no R, para carregar os dados, execute o comando:

install.packages("igraph")
library(igraph)
m <- read.table(row.names=1,file=file.choose(),header = TRUE,sep = ";")

Agora, deverá ser aberta uma janela, onde o arquivo CSV criado anteriormente deverá ser selecionado e jogaremos o conteúdo do arquivo na variável m. Após isso, digitando a variável m, podemos visualizar os dados na Fig.4:

Figura 5 – Conteúdo da variável m

Figura 4 – Conteúdo da variável m

Vamos preparar esses dados e jogá-los na variável g, que será o nosso grafo, com os  comandos demonstrados a seguir:

install.packages("igraph")
library(igraph)
m <- read.table(row.names=1,file=file.choose(),header = TRUE,sep = ";")
m <- as.matrix(m)
g <- graph.adjacency(m, mode="undirected", weighted=TRUE)

Agora que temos o nosso grafo, podemos manipulá-lo e para exibi-lo, podemos usar o código a seguir:

install.packages("igraph")
library(igraph)
m <- read.table(row.names=1,file=file.choose(),header = TRUE,sep = ";")
m <- as.matrix(m)
g <- graph.adjacency(m, mode="undirected", weighted=TRUE)
plot(g)
plot(g, edge.label=round(E(g)$weight, 3))
tkplot(g)

Com plot(g),  exibiremos o grafo sem os pesos:

install.packages("igraph")
library(igraph)
m <- read.table(row.names=1,file=file.choose(),header = TRUE,sep = ";")
m <- as.matrix(m)
g <- graph.adjacency(m, mode="undirected", weighted=TRUE)
plot(g)
plot(g, edge.label=round(E(g)$weight, 3))
tkplot(g)
plot(g)


Figura 8 – Exibição do grafo sem pesos

Figura 5 – Exibição do grafo sem pesos


Com o comando:

install.packages("igraph")
library(igraph)
m <- read.table(row.names=1,file=file.choose(),header = TRUE,sep = ";")
m <- as.matrix(m)
g <- graph.adjacency(m, mode="undirected", weighted=TRUE)
plot(g)
plot(g, edge.label=round(E(g)$weight, 3))
tkplot(g)
plot(g)

plot(g, edge.label=round(E(g)$weight, 3)

install.packages("igraph")
library(igraph)
m <- read.table(row.names=1,file=file.choose(),header = TRUE,sep = ";")
m <- as.matrix(m)
g <- graph.adjacency(m, mode="undirected", weighted=TRUE)
plot(g)
plot(g, edge.label=round(E(g)$weight, 3))
tkplot(g)
plot(g)
plot(g, edge.label=round(E(g)$weight, 3))

Assim exibiremos os pesos do Grafo:

Figura 9 – Exibindo os pesos dos Grafos

Figura 6 – Exibindo os pesos dos Grafos

Com tkplot(g) será aberta uma janela (Fig. 7) onde poderemos interagir com o grafo, esse comando é importante quando queremos mover alguns vértices ou arestas, a fim de realizarmos alguma análise no grafo.

Figura 10 – Interagindo com o grafo através do comando tkplot

Figura 7 – Interagindo com o grafo através do comando tkplot

O comando distances calcula o comprimento de todos os caminhos mais curtos a partir de um, ou para todos os vértices na rede

Para exibirmos todos os caminhos mais curtos do grafo, basta digitarmos distances(g), como demonstrado na Fig.8:

Figura 11 – Exibindo os caminhos mais curtos com o comando distances

Figura 8 – Exibindo os caminhos mais curtos com o comando distances

A seguir é demonstrado o código completo:

install.packages("igraph")
library(igraph)
m <- read.table(row.names=1,file=file.choose(),header = TRUE,sep = ";")
m <- as.matrix(m)
g <- graph.adjacency(m, mode="undirected", weighted=TRUE)
plot(g)
plot(g, edge.label=round(E(g)$weight, 3))
tkplot(g)
plot(g)
plot(g, edge.label=round(E(g)$weight, 3))
tkplot(g)
distances(g)

Até o próximo post!

Cristiano Manhães de Oliveira

Engenheiro/ Desenvolvedor Mestre em Engenharia de Produção e Doutorando em Cognição e Linguagem Contato: cristiano@destart.com.br

Deixe uma resposta