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).

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ção | Comando |
---|---|
Iniciar um grafo | G = nx.Graph() |
Criar um novo vértice (nó) | G.add_node(1) G.add_node(2) |
Ver todos os vértices | G.nodes() |
Cria uma aresta | G.add_edge(1, 2) |
Contar total de vértices | G.number_of_nodes() |
Contar total de arestas | G.number_of_edges() |
Remover vértice | G.remove_node(2) |