Categorias
Artigos

Networkx

Analisando grafos com Python e a biblioteca Networkx

NetworkX é um pacote Python utilizado para manipulação de grafos e redes complexas. A documentação da biblioteca, além de exemplos mais aprofundados, estão disponíveis em: https://networkx.org/. Neste artigo, apresentaremos como manipular grafos usando essa biblioteca. A antes de nos aprofundarmos no Networkx, precisamos explorar o conceito de grafos.

Grafos

Grafos são estruturas que representam um conjunto de itens e o relacionamento entre eles. Um grafo G(V, E) é composto por vértices (também conhecidos como nós) que se conectar por meio das arestas (também conhecidos como links ou pares de nós).

Exemplo de grafo composto por seis vértices. Cada esfera representa um vértice, e as linhas que os conectam são as arestas que indicam um relacionamento entre eles. Fonte: User:AzaToth, Public domain, via Wikimedia Commons

Primeiros passos

Instalação

No Python 3, você pode instalá-lo com o comando:

pip3 install networkx

No Python 2, use:

pip install networkx

No Anaconda use:

conda install networkx

Criando um objeto networkx

Como apresentado anteriormente, um grafo é composto por vértices conectados por arestas. NetworkX permite que vértices possam ser strings de texto, números, etc.

O código a seguir cria um objeto networkx:

import networkx as nx
G = nx.Graph()

Adicionando vértices

Agora vamos adicionar dois vértices e criar uma aresta para conectá-los:

import networkx as nx
G = nx.Graph()

# adicionando vertices
G.add_node(1)
G.add_node(2)


# Visualizando os vertices
print(G.nodes())
 #[1, 2]

#adicionando arestas
G.add_edge(1, 2)

# total de vertices e arestas
n_vertices = G.number_of_nodes()
n_arestas = G.number_of_edges()

print('vertices: ', n_vertices, '\narestas: ', n_arestas)
#vertices:  2 
#arestas:  1

Note que ao executar o comando:

G.add_edge(4, 5)
print(G.nodes()) # [4, 5]

Networkx irá criar os vértices 4 e 5, e depois irá criar uma aresta os conectando.

Removendo vértices

Podemos remover um vértice usando a função remove_node( ):

# adicionando vertices
G.add_node(1)
G.add_node(2) 
print(G.nodes()) #[1, 2]

# remove o nó 2
G.remove_node(2)
print(G.nodes())
 #[1]

Navegando pelo grafo

Resumo
DescriçãoComando
Iniciar um grafoG = nx.Graph()
Criar um novo vértice (nó)G.add_node(1)
G.add_node(2)
Ver todos os vérticesG.nodes()
Cria uma arestaG.add_edge(1, 2)
Contar total de vérticesG.number_of_nodes()
Contar total de arestasG.number_of_edges()
Remover vérticeG.remove_node(2)

Por Diego Mariano

Doutor em Bioinformática pela Universidade Federal de Minas Gerais com atuação na área de ciência de dados e aprendizado de máquina aplicados ao aperfeiçoamento de enzimas usadas na produção de biocombustíveis. Mestre em Bioinformática, também pela UFMG, atuando na área de desenvolvimento de sistemas Web para montagem de genomas. Atualmente realiza estágio pós-doutoral no Departamento de Ciência da Computação da UFMG com foco em desenvolvimento de sistemas Web para Bioinformática, análise exploratória e visualização de dados. Tem conhecimentos nas linguagens: PHP, JavaScript, Python, R, Perl, HTML, CSS e SQL.