# analisis-de-grafos-en-python-y-networkx
Análisis de Grafos en Python y NetworkX
Volver a la portada del cursoDocumentación y Recursos de NetworkX
Sección 2 · Fundamentos de NetworkX
Documentación y recursos de NetworkX
NetworkX tiene cientos de funciones: solo las que terminan en _centrality son 30 en la versión 3.6.1. Nadie las memoriza. Lo que sí se aprende es dónde buscar, cómo leer la página de una función y cómo comprobar desde Python lo que dice la documentación. Esta lección es ese mapa.
El sitio oficial
La documentación vive en networkx.org/documentation/stable y tiene cinco partes que usarás en el curso:
- Install: instalación con
pipy dependencias opcionales. - Tutorial: un recorrido corto por la creación de grafos, atributos, grafos dirigidos y dibujo. Es la mejor primera lectura.
- Reference: la referencia completa de la API, organizada por temas.
- Gallery: ejemplos ejecutables con su figura, agrupados en categorías como Basic, Drawing, Graph y Algorithms. Por ejemplo, «Betweenness Centrality» o «Spring Layout».
- Guides: el sitio nx-guides, con notebooks más largos sobre algoritmos y aplicaciones.
Un detalle de versiones: la dirección stable apunta siempre a la versión más reciente (hoy es la 3.7). Este curso usa la 3.6.1, cuya documentación sigue disponible en networkx.org/documentation/networkx-3.6.1. Si una función no se comporta como dice la página, revisa primero nx.__version__.
Cómo está organizada la referencia
La referencia tiene 16 secciones. Estas son las que más vas a abrir:
| Sección | Qué encuentras | Ejemplo en el curso |
|---|---|---|
| Graph types | Graph, DiGraph, MultiGraph, MultiDiGraph y sus métodos | G.add_edge, G.neighbors |
| Algorithms | Un módulo por tema: centralidad, comunidades, componentes, caminos más cortos, clustering, núcleos… | nx.betweenness_centrality |
| Functions | Utilidades sobre cualquier grafo | nx.density |
| Graph generators | Grafos clásicos, aleatorios y de ejemplo | nx.karate_club_graph |
| Converting | Conversión desde y hacia pandas, NumPy y SciPy | nx.to_pandas_edgelist |
| Reading and writing | Formatos de archivo (GraphML, listas de aristas, GML…) | nx.write_graphml |
| Drawing | Dibujo con Matplotlib y algoritmos de posición (layouts) | nx.spring_layout |
Las comunidades están en su propio subpaquete y se llaman como nx.community.louvain_communities. Su página agrupa los métodos por familia: basados en modularidad, Louvain, Leiden, propagación de etiquetas, bipartición (Kernighan-Lin) y particiones por centralidad (Girvan-Newman), además de modularity para medir una partición.
Cómo leer la página de una función
Casi todas siguen el mismo formato: firma, Parameters, Returns y, según el caso, Raises, Notes, References y Examples. Las dos partes que más errores evitan son los valores por defecto de los parámetros y lo que devuelve la función. Puedes consultar ambas sin salir de Python:
import inspect
import networkx as nx
print(nx.__version__)
print(nx.density.__doc__.strip().splitlines()[0])
com = [f for f in dir(nx.community) if f.endswith("_communities")]
print(len(com), com[:3])
cen = [f for f in dir(nx) if f.endswith("_centrality")]
print(len(cen))
print(inspect.signature(nx.betweenness_centrality))
print(inspect.signature(nx.pagerank))
Salida:
3.6.1
Returns the density of a graph.
8 ['asyn_lpa_communities', 'fast_label_propagation_communities', 'greedy_modularity_communities']
30
(G, k=None, normalized=True, weight=None, endpoints=False, seed=None, *, backend=None, **backend_kwargs)
(G, alpha=0.85, personalization=None, max_iter=100, tol=1e-06, nstart=None, weight='weight', dangling=None, *, backend=None, **backend_kwargs)
Las dos firmas muestran algo que la documentación explica y que es fácil pasar por alto: betweenness_centrality ignora los pesos por defecto (weight=None), mientras que pagerank los usa (weight='weight'). Además, cuando la intermediación usa pesos, los interpreta como distancias: un peso alto significa un camino largo. En la red de PyShop el peso es cuántas veces se compraron juntos dos productos, así que pasarlo tal cual invierte su sentido. En Jupyter, nx.pagerank? muestra la documentación completa en el notebook, y help(nx.pagerank) hace lo mismo en cualquier consola.
Cómo buscar una función
- Nombra el concepto en inglés. «Puente» es bridge, «componente conexa» es connected component, «núcleo» es k-core. El buscador del sitio responde a esos términos.
- Entra por la sección Algorithms. Si no sabes el nombre, recorre la lista de módulos por tema.
- Busca un ejemplo en la galería. Muchas preguntas de dibujo ya tienen un ejemplo con su código.
- Comprueba con
direinspect. Confirma que la función existe en tu versión y revisa sus parámetros por defecto.
Recursos para seguir
- Facebook Network Analysis (nx-guides): análisis exploratorio de una red de 4,039 nodos y 88,234 aristas con densidad, caminos, centralidades, clustering, puentes y comunidades. Repasa casi todo el curso con datos reales.
- Networks in Epidemiology: Hantavirus (nx-guides): reconstruye con un
DiGraphuna red de transmisión publicada. - Network Science, de Albert-László Barabási: libro de texto (Cambridge University Press, 2016) que se lee gratis en línea; cubre grafos aleatorios, redes libres de escala, robustez y comunidades.
- Complex Network Analysis in Python, de Dmitry Zinoviev (Pragmatic Bookshelf, 2018): construcción, análisis y visualización de redes con NetworkX, con casos de estudio.
- El artículo que presentó la biblioteca: Hagberg, Schult y Swart, «Exploring network structure, dynamics, and function using NetworkX», Proceedings of the 7th Python in Science Conference (SciPy 2008), pp. 11-15. Es la referencia que se usa para citar NetworkX en trabajos académicos.
Trampas comunes
- Leer la documentación de otra versión. Fíjate en el número de versión de la página.
- Suponer el valor de
weight. Cada función tiene su propio valor por defecto; revísalo siempre. - Esperar una lista y recibir un generador.
nx.connected_components(G)devuelve un generador; envuélvelo enlist()o recórrelo. - Modificar una vista.
G.degreeoG.subgraph(nodos)son vistas del grafo original, no copias; la página de cada método lo indica.
Cuando una función nueva aparezca en el curso, abre su página una vez: firma, valores por defecto y qué devuelve. Son dos minutos que evitan horas de resultados raros.