NetworkX y Python [Grafos en Python]


grafos

La teoría de grafos también llamado el grafo de las gráficas es un campo de las matemáticas y de las ciencias de la computación, que estudia las propiedades de las gráficas estructuras que constan de dos partes el conjunto de vértices, nodos o puntos; y el conjunto de aristas, lineas o lados.
Entre las aplicaciones o importancia de los grafos esta el poder ordenar de una forma eficaz mediante algoritmos el trayecto del camino mas corto entre un punto y otro pasando por uno cuantos o muchos otros vértices(puntos)
Estos algoritmos se usan en economía, en teoría de juegos para tomar decisiones, en programación(cuando programamos en función de cuanta memoria debemos reservar) ya que necesitamos tomar una decisión, en arreglo de redes cableadas e alambrillas, en telefonía para no malgastar recursos(antenas de todo tipo) entre muchas otras aplicaciones.
para mas información:
https://es.wikipedia.org/wiki/Teor%C3%ADa_de_grafos
Una acotación o deducción de mi parte es que mientras buscaba en la red algunas aplicaciones interesantes que veremos mas adelante y python+grafos es que la mayoría de los artículos son de brasil y están en portugués, lo que me dio a entender que en brasil le están metiendo mano a la teoría de grafos y no nos extrañe que su gran impulso económico(pasar de ser un país como Venezuela subdesarrollado o en vías de desarrollo) a ser una potencia tiene que ver y mucho con la aplicación de la teoría de grafos.
NetworkX es un paquete o librería para Python para la creación, manipulación y estudio de las estructuras, dinámicas y funciones de redes complejas… Por que si adivinaste una red de personas tipo Facebook también es un grafo 😀 y muy muy complicado _:S
NetworkX esta diseñado con el fin de poder ayudar a el estudio de dinámicas sociales, biología y diseño de redes… es de fácil uso y rápido desarrollo como veremos en esta serie.
NetworkX esta basada totalmente en Python por lo que podremos modelar nuestros algoritmos de una manera mas intuitiva con resultados inmediatos, por algo Google en su buscador usa grafos 😀
Instalación en Debian o Ubuntu
Yo lo instale en Knoppix 😀

apt-get install python-networkx

Al instalar esto se instalaran

python-matplotlib python-matplotlib-data

que son paquetes necesarios para las imágenes de nuestros grafos!!!
Vemos un poco de practica aunque no explicare el código por el momento lo dejare para otra entrada :S

root@Microknoppix:/home/knoppix# python
Python 2.7.3 (default, Jan  2 2013, 16:53:07)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import networkx as nx
>>> g = nx.Graph()
>>> g.add_edge('a','b', weight=0.1)
>>> g.add_edge('b','c', weight=1.5)
>>> g.add_edge('a','c', weight=1.0)
>>> g.add_edge('c','d', weight=2.2)
>>> print nx.shortest_path (g, 'b', 'd')
['b', 'c', 'd']
>>> print nx.shortest_path (g, 'a', 'd', weight=True)
['a', 'c', 'd']

para los entendidos este es el algoritmo de Dijkstra’s , lo que hace es buscar el punto mas corto entre dos puntos o vértices… sin embargo este grafo no esta ponderado es solo un ejemplo podrían meter mas datos mas vértices y ver los caminos mas cortos entre un punto y otro 😀
Por otro lado dejare este grafo medio feo porque en realidad no hace nada pero nos servirá mas adelante para graficar y ver mejor las cosas

root@Microknoppix:/home/knoppix# python
Python 2.7.3 (default, Jan 2 2013, 16:53:07)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
import networkx as nx
import matplotlib.pyplot as plt

n = 7
G1 = nx.complete_graph(n-1)
nx.draw_circular(G1, ax=plt.axes((.3, .01+.25*2, .3, .22)))
plt.show()

pyplot es la librería que usa NetworkX junto a python para mostrar el grafo en un png se vería así

png-grafoa

Las opciones de  >>>  nx.draw_circular(G1, ax=plt.axes((.3, .01+.25*2, .3, .22))) se pueden modificar para el tamaño del grafo y su posición en la gráfica

Anuncios

2 pensamientos en “NetworkX y Python [Grafos en Python]

  1. Pingback: Python y Grafos en la Vida Real | La Shell del Bit Pegajoso

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s