Articulo de referencia

RedX

NetworkX es una biblioteca de Python para estudiar gráficos y redes . NetworkX es un software libre publicado bajo la nueva licencia BSD . Historia NetworkX comenzó a desarrolla...

NetworkX es una biblioteca de Python para estudiar gráficos y redes . NetworkX es un software libre publicado bajo la nueva licencia BSD .

Historia

NetworkX comenzó a desarrollarse en 2002 por Aric A. Hagberg, Daniel A. Schult y Pieter J. Swart. [4] Cuenta con el apoyo de la Administración Nacional de Seguridad Nuclear del Departamento de Energía de los EE. UU . en el Laboratorio Nacional de Los Álamos .

El paquete fue diseñado con el objetivo de crear herramientas para analizar datos y estrategias de intervención para controlar la propagación epidémica de enfermedades, al tiempo que se explora la estructura y la dinámica de sistemas sociales, biológicos y de infraestructura más generales. [4]

Inspirado por el ensayo de Guido van Rossum de 1998 sobre la representación gráfica en Python, [5] NetworkX hizo su debut público en la conferencia anual SciPy de 2004. En abril de 2005, NetworkX se puso a disposición como software de código abierto. [1]

Hay varios paquetes de Python centrados en la teoría de grafos , incluidos igraph , graph-tool y muchos otros. En abril de 2024, NetworkX tenía más de 50 millones de descargas, [6] superando en más de 50 veces el recuento de descargas del segundo paquete más popular, igraph. [7] Esta importante tasa de adopción podría atribuirse potencialmente al lanzamiento temprano de NetworkX y su continua evolución dentro del ecosistema SciPy.

En 2008, SageMath , un sistema de matemáticas de código abierto, incorporó NetworkX a su paquete y agregó soporte para más algoritmos y funciones gráficas. [4]


Características

Tipos de gráficos admitidos

Descripción general

Los gráficos, en este contexto, representan conjuntos de vértices (nodos) y aristas (conexiones) entre ellos. NetworkX ofrece compatibilidad con varios tipos de gráficos, cada uno adecuado para diferentes aplicaciones y escenarios.

Grafos dirigidos (DiGraph)

Los grafos dirigidos, o DiGraphs, consisten en nodos conectados por aristas dirigidas. En un grafo dirigido, las aristas tienen una dirección que indica el flujo o la relación entre los nodos. [10]

Gráfico dirigido realizado con NetworkX

Grafos no dirigidos (Gráfico)

Los grafos no dirigidos, denominados simplemente grafos en NetworkX, son grafos en los que los bordes no tienen una dirección inherente. Las conexiones entre los nodos son simétricas, es decir, si el nodo A está conectado al nodo B, entonces el nodo B también está conectado al nodo A. [11]

Gráfico no dirigido creado con NetworkX

MultiGráficos

Los multigrafos permiten múltiples aristas entre el mismo par de nodos. En otras palabras, los multigrafos permiten aristas paralelas , donde puede existir más de una arista entre dos nodos. [12]

MultiGraph creado con NetworkX

MultiDiGrafos

Los MultiDiGraphs son gráficos dirigidos que permiten múltiples aristas dirigidas entre el mismo par de nodos. De manera similar a los MultiGraphs, los MultiDiGraphs permiten el modelado de escenarios donde existen múltiples relaciones dirigidas entre nodos. [13]

MultiDiGraph creado con NetworkX

Desafíos en la visualización

Si bien NetworkX ofrece herramientas potentes para la creación y el análisis de gráficos, la producción de visualizaciones de gráficos complejos puede resultar un desafío. La visualización de gráficos grandes o densamente conectados puede requerir técnicas especializadas y bibliotecas externas que van más allá de las capacidades de NetworkX por sí solas.

Diseños de gráficos

NetworkX ofrece varios algoritmos de diseño para visualizar gráficos en un espacio bidimensional. Estos algoritmos de diseño determinan las posiciones de los nodos y los bordes en la visualización de un gráfico, con el objetivo de revelar su estructura y sus relaciones de manera eficaz.

Disposición de primavera

El diseño Spring es un algoritmo de diseño dirigido por fuerza inspirado en sistemas físicos. Simula las fuerzas de atracción y repulsión entre nodos, tratando los bordes como resortes y los nodos como partículas cargadas. Esto da como resultado un diseño en el que los nodos con conexiones fuertes se colocan más cerca unos de otros, mientras que los nodos con conexiones más débiles se separan más. [14]

Disposición espectral

El diseño espectral se basa en las propiedades espectrales de la matriz de adyacencia del gráfico. Utiliza los valores y vectores propios de la matriz de adyacencia para posicionar los nodos en un espacio de baja dimensión. El diseño espectral tiende a enfatizar la estructura global del gráfico, lo que lo hace útil para identificar grupos y comunidades. [15]

Disposición circular

El diseño circular organiza los nodos de manera uniforme alrededor de un círculo, con los bordes dibujados como líneas rectas que los conectan. Este diseño es particularmente adecuado para visualizar gráficos cíclicos o simétricos , donde la disposición de los nodos a lo largo del círculo refleja la topología subyacente del gráfico. [16]

Disposición de la carcasa

El diseño de conchas organiza los nodos en círculos concéntricos o conchas en función de su distancia desde un centro específico. Los nodos dentro de la misma concha tienen la misma distancia desde el centro, mientras que los bordes se dibujan radialmente entre los nodos en conchas adyacentes. El diseño de conchas se utiliza a menudo para visualizar estructuras jerárquicas o de árbol. [17]

Disposición Kamada-Kawai

El algoritmo de diseño Kamada-Kawai posiciona los nodos en función de sus distancias por pares, con el objetivo de minimizar la energía total del sistema. Tiene en cuenta tanto la topología del gráfico como las longitudes de los bordes, lo que da como resultado un diseño que enfatiza la precisión geométrica y la legibilidad. [18]

Uso

NetworkX ofrece funciones para aplicar distintos algoritmos de diseño a los gráficos y visualizar los resultados mediante Matplotlib u otras bibliotecas de gráficos. Los usuarios pueden especificar el algoritmo de diseño deseado al llamar a las funciones de dibujo, lo que permite visualizaciones de gráficos flexibles y personalizables.

Idoneidad

NetworkX es adecuado para operar en grandes gráficos del mundo real: por ejemplo, gráficos de más de 10 millones de nodos y 100 millones de aristas. [ aclaración necesaria ] [19] Debido a su dependencia de una estructura de datos de "diccionario de diccionarios" de Python puro, NetworkX es un marco razonablemente eficiente, muy escalable y altamente portátil para el análisis de redes y redes sociales . [4]

Aplicaciones

NetworkX fue diseñado para ser fácil de usar y aprender, así como una herramienta potente y sofisticada para el análisis de redes. Se utiliza ampliamente en muchos niveles, desde la educación en informática y análisis de datos hasta estudios científicos a gran escala. [4]

NetworkX tiene aplicaciones en cualquier campo que estudie datos como gráficos o redes, como matemáticas, física, biología, informática y ciencias sociales. [20] Los nodos en un gráfico NetworkX pueden especializarse para contener cualquier dato, y los datos almacenados en los bordes son arbitrarios, lo que lo hace ampliamente aplicable a diferentes campos. Es capaz de leer redes a partir de datos y generar redes aleatoriamente con cualidades específicas. Esto permite que se utilice para explorar cambios en grandes cantidades de redes. [4] La siguiente figura demuestra un ejemplo simple de la capacidad del software para crear y modificar variaciones en grandes cantidades de redes.

Representaciones gráficas de varias redes de árboles de expansión en el algoritmo de Karger

NetworkX cuenta con numerosos algoritmos de análisis de redes y gráficos que ayudan en una amplia variedad de propósitos de análisis de datos. Un ejemplo importante de esto son sus diversas opciones para algoritmos de ruta más corta. Los siguientes algoritmos están incluidos en NetworkX, con complejidades temporales dadas la cantidad de vértices (V) y aristas (E) en el gráfico: [21]

Un ejemplo del uso de algoritmos de grafos NetworkX se puede ver en un estudio de 2018, en el que se utilizó para analizar la resiliencia de las redes de producción ganadera a la propagación de epidemias. El estudio utilizó un modelo informático para predecir y estudiar las tendencias de las epidemias en las redes de producción porcina estadounidenses, teniendo en cuenta todos los roles de la industria ganadera. En el estudio, se utilizó NetworkX para encontrar información sobre el grado, las rutas más cortas, la agrupación y los k-cores a medida que el modelo introducía infecciones y simulaba su propagación. Esto luego se utilizó para determinar qué redes son más susceptibles a las epidemias. [22]

Además de la creación y el análisis de redes, NetworkX también tiene muchas capacidades de visualización. Proporciona enlaces a Matplotlib y GraphViz para imágenes 2D, y a VTK y UbiGraph para imágenes 3D. [4] Esto hace que el paquete sea útil para demostrar y generar informes de análisis y datos de redes de manera sencilla, y permite la simplificación de redes para el procesamiento visual.

Integración

NetworkX está integrado en SageMath . [23]

Véase también

Referencias

  1. ^ Primera versión pública de ab NetworkX (NX-0.2), De: Aric Hagberg, Fecha: 12 de abril de 2005, lista de correo Python-announce-list
  2. ^ Versión inicial de NetworkX, NX-0.2, hagberg – 2005-04-11, Información del proyecto – NetworkX, Registrado: 2004-10-21, SourceForge.net
  3. ^ "Versión 3.3". 6 de abril de 2024. Consultado el 8 de abril de 2024 .
  4. ^ abcdefg Aric A. Hagberg, Daniel A. Schult, Pieter J. Swart, Explorando la estructura, dinámica y función de la red usando NetworkX, Actas de la 7.ª conferencia Python in Science (SciPy 2008) , G. Varoquaux, T. Vaught, J. Millman (Eds.), págs. 11–15.
  5. ^ van Rossum, Guido (febrero de 1998). "Patrones de Python: implementación de gráficos". Python .
  6. ^ "networkx". Estadísticas de PyPi . Abril de 2024.
  7. ^ "igraph". Estadísticas de PyPi . Abril de 2024.
  8. ^ abcd "Registro de versiones antiguas". NetworkX . 22 de agosto de 2020 . Consultado el 24 de abril de 2024 .
  9. ^ "NetworkX 3.0". NetworkX . 7 de enero de 2023 . Consultado el 24 de abril de 2024 .
  10. ^ "DiGraph—Gráficos dirigidos con bucles propios — Documentación de NetworkX 3.3". networkx.org . Consultado el 24 de abril de 2024 .
  11. ^ "Grafo: gráficos no dirigidos con bucles propios: documentación de NetworkX 3.3". networkx.org . Consultado el 24 de abril de 2024 .
  12. ^ "MultiGraph—Grafos no dirigidos con bucles propios y aristas paralelas — Documentación de NetworkX 3.3". networkx.org . Consultado el 24 de abril de 2024 .
  13. ^ "MultiDiGraph: gráficos dirigidos con bucles propios y aristas paralelas: documentación de NetworkX 3.3". networkx.org . Consultado el 24 de abril de 2024 .
  14. ^ "spring_layout — Documentación de NetworkX 3.3". networkx.org . Consultado el 2 de mayo de 2024 .
  15. ^ "spectral_layout — Documentación de NetworkX 3.3". networkx.org . Consultado el 2 de mayo de 2024 .
  16. ^ "circular_layout — Documentación de NetworkX 3.3". networkx.org . Consultado el 2 de mayo de 2024 .
  17. ^ "shell_layout — Documentación de NetworkX 3.3". networkx.org . Consultado el 2 de mayo de 2024 .
  18. ^ "kamada_kawai_layout — Documentación de NetworkX 3.3". networkx.org . Consultado el 2 de mayo de 2024 .
  19. ^ Aric Hagberg, Drew Conway, "Hacking de redes sociales utilizando el lenguaje de programación Python (Módulo II – ¿Por qué hacer SNA en NetworkX?)", Sunbelt 2010: Red Internacional para el Análisis de Redes Sociales .
  20. ^ Hadaj, P.; Strzałka, D.; Nowak, M. (19 de octubre de 2022). "El uso de PLANS y NetworkX en el modelado de fallas del sistema de la red eléctrica". Sci Rep . 12 (1): 17445. doi :10.1038/s41598-022-22268-z. PMC 9581963 . PMID  36261496. 
  21. ^ "Caminos más cortos: documentación de NetworkX 3.3". networkx.org . Consultado el 29 de abril de 2024 .
  22. ^ Wiltshire, Serge W. (9 de marzo de 2018). "Uso de un modelo basado en agentes para evaluar el efecto de la especialización de los productores en la resiliencia epidemiológica de las redes de producción ganadera". PLOS ONE . ​​13 (3): e0194013. doi : 10.1371/journal.pone.0194013 . PMC 5844541 . PMID  29522574. 
  23. ^ "Sistema de software matemático SageMath - Sage".
  • Sitio web oficial: networkx.github.io
  • Grupo de discusión de NetworkX
  • Estudio del software de teoría de grafos existente
  • NetworkX en StackOverflow
  • networkx en GitHub
Retrieved from "https://en.wikipedia.org/w/index.php?title=NetworkX&oldid=1246675698"