NetworkX
Főnév
NetworkX (tsz. NetworkXs)
A NetworkX egy népszerű Python-könyvtár, amelyet gráfok és hálózatok kezelésére terveztek. Segítségével egyszerűen modellezhetünk, elemezhetünk és vizualizálhatunk gráfokat, legyen szó szociális hálózatokról, közlekedési útvonalakról, vagy bármilyen más hálózati struktúráról.
Főbb képességek
- Gráf reprezentációk és építés:
- Irányított és irányítatlan gráfok támogatása.
- Súlyozott, címkézett és több éllel rendelkező gráfok (Multigraph) kezelése.
- Gráf elemzése:
- Alapvető mutatók: csúcsok és élek száma, fokszámok.
- Hálózati mérőszámok: központiság, átmérő, összefüggő komponensek.
- Útvonalkeresés:
- Legrövidebb út algoritmusok, mint Dijkstra és Bellman-Ford.
- Minimális feszítőfák.
- Gráf-módosítás:
- Új csúcsok és élek hozzáadása/eltávolítása.
- Részgráfok kinyerése.
- Vizualizáció:
- Könnyen integrálható a
matplotlib
-pel a gráfok rajzolásához.
- Könnyen integrálható a
NetworkX telepítése
A könyvtár telepítéséhez használja a következőt:
pip install networkx
Példák a NetworkX képességeire
1. Gráf létrehozása
import networkx as nx
# Egyszerű gráf létrehozása
G = nx.Graph()
# Csúcsok hozzáadása
G.add_node(1)
G.add_nodes_from([2, 3, 4])
# Élek hozzáadása
G.add_edge(1, 2)
G.add_edges_from([(2, 3), (3, 4)])
# Gráf adatai
print("Csúcsok:", G.nodes)
print("Élek:", G.edges)
Kimenet:
Csúcsok: [1, 2, 3, 4] Élek: [(1, 2), (2, 3), (3, 4)]
2. Gráf vizualizáció
A gráf megjelenítéséhez használhatjuk a matplotlib
-et:
import matplotlib.pyplot as plt
# Gráf rajzolása
nx.draw(G, with_labels=True)
plt.show()
3. Legrövidebb út (Dijkstra algoritmus)
# Súlyozott gráf
G = nx.DiGraph()
G.add_weighted_edges_from([
(1, 2, 4),
(1, 3, 2),
(3, 2, 1),
(2, 4, 5),
(3, 4, 8)
])
# Legrövidebb út és annak hossza
shortest_path = nx.shortest_path(G, source=1, target=4, weight='weight')
path_length = nx.shortest_path_length(G, source=1, target=4, weight='weight')
print("Legrövidebb út:", shortest_path)
print("Úthossz:", path_length)
Kimenet:
Legrövidebb út: [1, 3, 2, 4] Úthossz: 10
4. Gráf mérőszámok
Gráf fokszámának vizsgálata:
# Csúcsok fokszámának lekérdezése
print("Fokszámok:", dict(G.degree()))
Gráf sűrűsége:
# Sűrűség: Az élek számának aránya az összes lehetséges élhez képest
density = nx.density(G)
print("Sűrűség:", density)
5. Minimális feszítőfa
A minimális feszítőfa kiszámítása súlyozott gráfokhoz:
# Gráf minimális feszítőfája
T = nx.minimum_spanning_tree(nx.Graph(G))
print("Minimális feszítőfa élei:", list(T.edges(data=True)))
# Vizualizáció
nx.draw(T, with_labels=True)
plt.show()
6. Közösségi detektálás
A gráf közösségeit (összefüggő komponenseit) is meghatározhatjuk:
# Összefüggő komponensek
components = list(nx.connected_components(nx.Graph(G)))
print("Összefüggő komponensek:", components)
7. Topologikus sorrend
Csak irányított körmentes gráfok (DAG) esetén:
# DAG létrehozása
dag = nx.DiGraph([(1, 2), (1, 3), (3, 4), (2, 4)])
# Topologikus sorrend
topological_order = list(nx.topological_sort(dag))
print("Topologikus sorrend:", topological_order)
Kimenet:
Topologikus sorrend: [1, 2, 3, 4]
8. Random gráf generálása
# Random gráf létrehozása (Erdős-Rényi modell)
random_graph = nx.erdos_renyi_graph(n=10, p=0.3)
# Vizualizáció
nx.draw(random_graph, with_labels=True)
plt.show()
Összegzés
A NetworkX rendkívül sokoldalú eszköz gráfok modellezésére, elemzésére és vizualizálására. Használható: - Szociális hálózatok elemzésére. - Közlekedési útvonalak optimalizálására. - Tudományos kutatások során hálózatok elemzésére. - Egyéb hálózati rendszerek (például internetes infrastruktúra) modellezésére.
A könyvtár egyszerű szintaxisa és erőteljes funkciói miatt kiváló választás kezdők és haladó programozók számára egyaránt.