Primeros pasos con networkx

Instalación o configuración

Bienvenido al mundo de los gráficos. Si tiene datos conectados, es posible que necesite uno de los tipos de gráficos para modelar esos patrones. Hay varias cosas que se pueden hacer con gráficos, como mapear patrones de tráfico, administrar redes de distribución de agua, análisis de redes sociales, etc. Básicamente, necesitamos poder crear nodos y bordes con datos asociados sobre cada uno.

NetworkX es una biblioteca que se ocupa de la creación/importación/exportación/manipulación/algoritmos/trazado de bases de datos gráficas. Puede comenzar a utilizar varios tipos de gráficos de red. Por ejemplo: Facebook podría poner a sus usuarios en un Graph() simple

import networkx as nx
facebook = nx.Graph()  
facebook.add_node('you')
facebook.add_node('me')
if both_agree_to_be_friends('you','me'):
    facebook.add_edge('you','me') #order isn't important here.

Facebook usaría un Graph() normal porque no hay nada especial en el borde entre los nodos. Este ejemplo de Facebook solo puede tener un borde (amistad) entre nodos.

Otro tipo de gráfico sería un gráfico dirigido. Twitter usaría un gráfico dirigido porque los nodos tienen una dirección. En Twitter puedo seguirte pero no tienes que seguirme. Así que podríamos representar eso con este código:

import networkx as nx
twitter = nx.DiGraph()
twitter.add_node('you')
twitter.add_node('me')
twitter.add_edge('me','you') #order is important here.

Así es como Twitter podría configurar ‘yo’ para seguir a ‘usted’, pero no al revés.

También hay MultiGraphs() y MultiDiGraphs() en caso de que desee más de un borde entre dos nodos. Estos cuatro tipos cubren una amplia variedad de problemas que se pueden representar con gráficos. Si lo desea, puede agregar un diccionario de datos tanto a los nodos como a los bordes. La documentación sobre este módulo es increíble. Cada algoritmo está bien investigado y bien implementado. Espero que disfrutes trabajando con él.

Instrucciones de instalación: Las instrucciones detalladas sobre la instalación de NetworkX están disponibles aquí.

Al igual que con cualquier otro paquete de python, NetworkX se puede instalar usando pip, Miniconda/Anaconda y desde el código fuente.

Instalando con pip

pip install networkx

Se intentará encontrar e instalar una versión adecuada de NetworkX que coincida con su sistema operativo y la versión de Python.

Para usar pip, debe tener instaladas las herramientas de configuración.

Si desea instalar la versión de desarrollo desde GitHub, use el comando

pip install git://github.com/networkx/networkx.git#egg=networkx

Miniconda y Anaconda usan conda para la instalación/actualización de software.

NetworkX está actualmente instalado con Anaconda. Miniconda no viene con NetworkX por defecto.

Puede actualizar/instalar NetworkX a la última versión con:

conda install networkx

o si desea actualizar la instalación de NetworkX, entonces

conda update networkx

Instalando desde la fuente

Archivo de archivo fuente

  1. Descarga la fuente de https://pypi.python.org/pypi/networkx/ or get the latest version.
  2. Desembalar y cambiar directory to the source directory (it should have the files README.txt and setup.py).
  3. Ejecute python setup.py install para compilar y install
  4. (Opcional) Ejecute nosetests para ejecutar las pruebas si tiene nose installed.

Instalación desde GitHub

  1. Clone el repositorio de NetworkX (consulte https://github.com/networkx/networkx/ para conocer las opciones)

    git clone https://github.com/networkx/networkx.git
    
  2. Cambiar directorio a NetworkX

  3. Ejecute python setup.py install para compilar e instalar

  4. (Opcional) Ejecute nosetests para ejecutar las pruebas si tiene nose instalado.

Si no tiene permiso para instalar software en su sistema, puede instalarlo en otro directorio usando los indicadores --user, --prefix o --home para setup.py.

Requisitos Para usar NetworkX necesita Python 2.7, 3.3 o posterior

Paquetes Opcionales

  1. NumPy: proporciona representación matricial de gráficos y se utiliza en algunos algoritmos gráficos para cálculos matriciales de alto rendimiento. (http://scipy.org/Descargar)
  2. SciPy: proporciona representación matricial dispersa de gráficos y muchas herramientas científicas numéricas. (http://scipy.org/Descargar)
  3. Matplotlib: proporciona dibujo flexible de gráficos. (http://matplotlib.sourceforge.net/)
  4. GraphViz junto con PyGraphviz (http://pygraphviz.github.io) o pydotplus (https://github.com/carlos-jenkins/pydotplus): proporciona algoritmos de dibujo y diseño de gráficos. (http://graphviz.org)
  5. PyYAML: Requerido para lectura y escritura en formato YAML. (http://pyyaml.org)

3: http://conda.pydata.org/miniconda.html 2: https://networkx.github.io/documentation/development/install.html

Programa básico para mostrar nodos en matplotlib usando networkx

import networkx as nx  # importing networkx package
import matplotlib.pyplot as plt # importing matplotlib package and pyplot is for displaying the graph on canvas 
b=nx.Graph()
b.add_node('helloworld')
b.add_node(1)
b.add_node(2)
'''Node can be called by any python-hashable obj like string,number etc'''
nx.draw(b)  #draws the networkx graph containing nodes which are declared till before
plt.show()  # displays the networkx graph on matplotlib canvas

Aclaración adicional:

nx.draw(b,nodelist=[1,'helloworld']) #displays the particular nodes which are given by nodelist only 
nx.draw_networkx(b,nodelist=[1,'helloworld']) #displays the node along with its name given by us i.e 1, hello  respectively