lettura facile

I grafi in Python

In questo tutorial vediamo come lavorare con i grafi in Python tramite il modulo NetworkX.

Cos'è NetworkX? E' una libreria Python potente per la creazione, manipolazione e studio della struttura, dinamica e funzioni di reti complesse.

Ecco un semplice esempio pratico per creare un grafo, aggiungere nodi, aggiungere archi e visualizzarlo.

Per prima cosa devi assicurati di avere NetworkX e Matplotlib installati nel tuo ambiente Python.

Puoi installarli utilizzando il comando pip dalla riga di comando del sistema operativo del tuo PC:

pip install networkx matplotlib

Il modulo "matplotlib" è necessario per la visualizzazione dei grafi.

Se stai lavorando con Python utilizzando un IDE (Integrated Development Environment) come PyCharm, la gestione dei moduli e delle librerie esterne è più semplice grazie agli strumenti e alle funzionalità integrati nel software. In questo caso devi seguire le indicazioni del software IDE che stai usando per aggiungere nuovi moduli al tuo ambiente operativo Python.

Se hai già installato i moduli, puoi semplicemente importarli in memoria tramite l'istruzione import.

import networkx as nx
import matplotlib.pyplot as plt

A questo punto puoi usare tutte le funzionalità di NetworkX.

Crea un oggetto grafo tramite la funzione Graph()

G = nx.Graph()

Poi aggiungi dei nodi/vertici al grafo tramite add_node().

G.add_node(1)

Puoi anche aggiungere più nodi o vertici insieme usando la funzione add_nodes_form().

G.add_nodes_from([2, 3, 4, 5])

Finora ai aggiunto cinque vertici.

Per inserire gli archi (o spigoli) nel grafo devi usare la funzione add_edge()

G.add_edge(1, 2)

Se vuoi aggiungere più archi contemporaneamente puoi usare la funzione add_edges_from()

G.add_edges_from([(2, 3), (3, 4), (4, 5), (1, 5)])

Quando aggiungi degli archi nel grafo, i nodi vengono aggiunti automaticamente se non esistono.

A questo punto puoi disegnare il grafo usando la funzione nx.draw() che genera un oggetto grafico.

nx.draw(G, with_labels=True, font_weight='bold')

L'opzione "with_labels=True" ti consente di visualizzare queste etichette nel grafico risultante.

Per visualizzare il grafo ti basta eseguire il metodo show() di matpolotlib.

plt.show()

Questo script crea un semplice grafo non diretto (grafo non orientato) con 5 vertici e li collega con alcuni spigoli (archi).

I vertici sono etichettati con i loro identificativi.

un grafo

Ricorda che NetworkX è estremamente flessibile e supporta una vasta gamma di tipi di grafi, inclusi grafi ponderati, diretti (digrafi) e multigrafi.

Inoltre, ha una ricca libreria di algoritmi per analizzare la struttura e la dinamica delle reti.

Come creare un grafo orientato?

Per disegnare un grafo diretto o orientato devi creare un oggetto DiGraph.

Cos'è un grafo orientato? Un grafo diretto/orientato, o digrafo, è un insieme di nodi connessi da archi, dove gli archi hanno una direzione specificata che indica da quale nodo parte e a quale nodo arriva.

Ecco come puoi creare un digrafo, aggiungere nodi e archi, e visualizzarlo con NetworkX:

import networkx as nx
import matplotlib.pyplot as plt

# Creazione di un oggetto digrafo
G = nx.DiGraph()

# Aggiunta di nodi al digrafo
G.add_node(1)
G.add_nodes_from([2, 3, 4, 5])

# Aggiunta di archi al digrafo (i nodi vengono aggiunti automaticamente se non esistono)
G.add_edge(1, 2)
G.add_edges_from([(2, 3), (3, 4), (4, 5), (5, 1)]) # Nota che ora possiamo avere una direzione

# Disegna il digrafo
nx.draw(G, with_labels=True, font_weight='bold', node_color='skyblue', arrowstyle='-|>', arrowsize=12)
plt.show()

In questo esempio, l'uso di DiGraph invece di Graph specifica che stai creando un grafo diretto.

Quando aggiungi archi in un digrafo, l'ordine dei nodi nell'arco ((u, v)) indica che l'arco va dal nodo u al nodo v, rispettando la direzionalità del grafo.

L'opzione arrowstyle nel metodo nx.draw specifica lo stile delle frecce, mentre l'opzione arrowsize ne determina la dimensione.

Questo script visualizza un digrafo con cinque nodi connessi da archi diretti, mostrando chiaramente la direzione di ciascun collegamento (arco) tra i nodi.

il digrafo

In questo tutorial hai imparato a generare un grafo e un digrafo usando il linguaggio Python.




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin