For creating and working with graphs (networks) in Python, `NetworkX` stands out as a highly useful library. It provides tools for the creation, manipulation, and study of the structure, dynamics, and functions of complex networks. With `NetworkX`, you can load and store networks in standard and nonstandard data formats, generate many types of random and classic networks, analyze network structure, build network models, design new network algorithms, draw networks, and much more. Here’s a concise reference guide for common use cases with `NetworkX`: # `NetworkX` Reference Guide ## Installation ``` pip install networkx ``` ## Basic Usage ### Importing NetworkX ```python import networkx as nx ``` ### Creating Graphs ```python # Create an empty graph G = nx.Graph() # Create a directed graph D = nx.DiGraph() # Create a multi-graph (multiple edges between same two nodes) M = nx.MultiGraph() # Create a multi-directed graph MD = nx.MultiDiGraph() ``` ### Adding Nodes and Edges ```python # Add a single node G.add_node(1) # Add multiple nodes G.add_nodes_from([2, 3, 4, 5]) # Add an edge (also adds nodes if they don't exist) G.add_edge(1, 2) # Add multiple edges (also adds nodes if they don't exist) G.add_edges_from([(1, 2), (1, 3), (3, 4)]) ``` ### Graph Properties ```python # Number of nodes num_nodes = G.number_of_nodes() # Number of edges num_edges = G.number_of_edges() # Neighbors of a node neighbors = list(G.neighbors(1)) # Degree of a node degree = G.degree(1) ``` ### Accessing Edges and Nodes ```python # Access edge attributes G.edges[1, 2]['attribute_name'] = 'value' # Access node attributes G.nodes[1]['attribute_name'] = 'value' ``` ## Analyzing Graphs ### Pathfinding ```python # Shortest path path = nx.shortest_path(G, source=1, target=4) # Shortest path length path_length = nx.shortest_path_length(G, source=1, target=4) ``` ### Centrality Measures ```python # Degree centrality degree_centrality = nx.degree_centrality(G) # Betweenness centrality betweenness = nx.betweenness_centrality(G) # Closeness centrality closeness = nx.closeness_centrality(G) ``` ### Community Detection ```python # Using the Clauset-Newman-Moore greedy modularity maximization from networkx.algorithms.community import greedy_modularity_communities communities = list(greedy_modularity_communities(G)) ``` ## Visualizing Graphs ```python import matplotlib.pyplot as plt # Simple graph drawing nx.draw(G, with_labels=True) plt.show() # Drawing with layout pos = nx.spring_layout(G) nx.draw(G, pos, with_labels=True, node_color='skyblue', edge_color='gray') plt.show() ``` `NetworkX` is incredibly versatile for handling and analyzing complex networks. It supports numerous types of networks and graphs, including social networks, word co-occurrence networks, and many others. This guide covers foundational operations, but `NetworkX`'s capabilities are extensive, supporting advanced graph theory and network analysis methods that can be tailored to specific projects or research needs. NetworkX's comprehensive set of features and algorithms, combined with its integration with Python's scientific computing ecosystem (like NumPy, SciPy, and Matplotlib), makes it an invaluable tool for researchers and practitioners working in data science, network analysis, and beyond.