1 1
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Representacin de Grafos en Python
Ulises Tirado Zatarain
1
1Maestra en Ciencias con Especialidad en Computacin y Matemticas
Industriales
Centro de Investigacin en Matemticas, A. C.
Octubre 6, 2014
1/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
ndice
1
Libreras y herramientas
2
Construccin y manipulacin
3
Visualizacin
2/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Herramientas
anaconda: integracin de muchas libreras
(Windows+Linux+Mac)
pip: comando para instalar libreras en python
(Windows+Linux+Mac)
pip install
3/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Libreras
networkx: Representacin de grafos
Similar a la STL de C++ pero ms simple
Manipula grafos/redes
Soporta varios tipos de grafos
matplotlib: Visualizacin en 2D
mayavi: Visualizacin en 3D
numpy/scipy: Algebra matricial
4/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Libreras
networkx: Representacin de grafos
Similar a la STL de C++ pero ms simple
Manipula grafos/redes
Soporta varios tipos de grafos
matplotlib: Visualizacin en 2D
mayavi: Visualizacin en 3D
numpy/scipy: Algebra matricial
4/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Libreras
networkx: Representacin de grafos
Similar a la STL de C++ pero ms simple
Manipula grafos/redes
Soporta varios tipos de grafos
matplotlib: Visualizacin en 2D
mayavi: Visualizacin en 3D
numpy/scipy: Algebra matricial
4/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Libreras
networkx: Representacin de grafos
Similar a la STL de C++ pero ms simple
Manipula grafos/redes
Soporta varios tipos de grafos
matplotlib: Visualizacin en 2D
mayavi: Visualizacin en 3D
numpy/scipy: Algebra matricial
4/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Construccin
import networkx as nx
G = nx . Graph ( ) # Grafo s imp l e
G. add_edge ( ' a ' , ' b ' )
G . add_edge ( ' a ' , ' c ' )
G . add_edge ( ' a ' , ' d ' )
H = nx . grid_2d_graph (4 , 5 ) # Grafo en g r i d
F = nx . gnm_random_graph (10 ,30) # Grafo a l e a t o r i o
C = nx . cyc l e_graph (24) # Grafo c c l i c o
D = nx . DiGraph (G) # Grafo d i r i g i d o a p a r t i r de G
5/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Manipulacin: Nodos/Vrtices
Dado un grafo simple G:
import networkx as nx
G = nx . Graph ( )
Podemos agregarle nodos de distintas formas:
Uno por uno:
G . add_node ( 1 ) ; G . add_node (2 )
A partir de una lista o conjunto iterable:
G . add_nodes_from ( [ 3 , 4 , 5 ] )
Agregando aristas se crean nodos no existentes de forma
automtica:
G . add_edge (7 , 9 )
6/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Manipulacin: Nodos/Vrtices
Dado un grafo simple G:
import networkx as nx
G = nx . Graph ( )
Podemos agregarle nodos de distintas formas:
Uno por uno:
G . add_node ( 1 ) ; G . add_node (2 )
A partir de una lista o conjunto iterable:
G . add_nodes_from ( [ 3 , 4 , 5 ] )
Agregando aristas se crean nodos no existentes de forma
automtica:
G . add_edge (7 , 9 )
6/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Manipulacin: Nodos/Vrtices
Dado un grafo simple G:
import networkx as nx
G = nx . Graph ( )
Podemos agregarle nodos de distintas formas:
Uno por uno:
G . add_node ( 1 ) ; G . add_node (2 )
A partir de una lista o conjunto iterable:
G . add_nodes_from ( [ 3 , 4 , 5 ] )
Agregando aristas se crean nodos no existentes de forma
automtica:
G . add_edge (7 , 9 )
6/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Manipulacin: Nodos/Vrtices
A partir de otro grafo:
F = nx . gnm_random_graph (10 ,30)
G . add_nodes_from (F)
Es posible agregarlo tambin con add_node?
G . add_node (F)
Cuidado!! En el ltimo caso el grafo F es un nodo de G.
7/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Manipulacin: Nodos/Vrtices
A partir de otro grafo:
F = nx . gnm_random_graph (10 ,30)
G . add_nodes_from (F)
Es posible agregarlo tambin con add_node?
G . add_node (F)
Cuidado!! En el ltimo caso el grafo F es un nodo de G.
7/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Manipulacin: Nodos/Vrtices
A partir de otro grafo:
F = nx . gnm_random_graph (10 ,30)
G . add_nodes_from (F)
Es posible agregarlo tambin con add_node?
G . add_node (F)
Cuidado!! En el ltimo caso el grafo F es un nodo de G.
7/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Manipulacin: Aristas
Una por una:
G . add_edge (1 , 2 )
De igual forma se pueden agregar una lista de aristas:
G . add_edges_from ( [ ( 1 , 2 ) , ( 1 , 3 ) ] )
Agregar las aristas de otro grafo:
G . add_edges_from (H. edges ( ) )
8/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Manipulacin: Aristas
Una por una:
G . add_edge (1 , 2 )
De igual forma se pueden agregar una lista de aristas:
G . add_edges_from ( [ ( 1 , 2 ) , ( 1 , 3 ) ] )
Agregar las aristas de otro grafo:
G . add_edges_from (H. edges ( ) )
8/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Manipulacin: Aristas
Una por una:
G . add_edge (1 , 2 )
De igual forma se pueden agregar una lista de aristas:
G . add_edges_from ( [ ( 1 , 2 ) , ( 1 , 3 ) ] )
Agregar las aristas de otro grafo:
G . add_edges_from (H. edges ( ) )
8/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Manipulacin: Otras funciones
Eliminar nodos y aristas:
# Borra un nodo y todas su s a r i s t a s
Graph . remove_node ( n o d e l a b e l )
# Borra una l i s t a de nodos
Graph . remove_nodes_from ( n o d e l i s t )
# Borra una a r i s t a s
Graph . remove_edge ( edge )
# Borra una l i s t a de a r i s t a s
Graph . remove_edges_from ( e d g e l i s t )
# Borra todos l o s nodos y a r i s t a s
Graph . c l e a r ( )
Cantidad de nodos y aristas:
Graph . number_of_nodes ( ) # Cant idad de nodos
Graph . number_of_edges ( ) # Cant idad de v e r t i c e s
9/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Manipulacin: Otras funciones
Lista de nodos, aristas y vecinos:
Graph . nodes ( ) # L i s t a de nodos
Graph . edges ( ) # L i s t a de a r i s t a s
# L i s t a de v e c i n o s de un nodo
Graph . n e i g hbo r s ( n o d e l a b e l )
Algebra lineal:
# Copia d e l g r a f o con e t i q u e t a d o con
# en t e r o s c o n s e c u t i v o s
conve r t_node_labe l s_to_in tege r s (G)
# Matr i z de adyac enc i a
# ( Sc iPy : v e r to_numpy_matrix )
ad jacency_mat r i x (G, n o d e l i s t=None )
# Matr i z de i n c i d e n c i a ( Sc iPy )
i n c i d en c e_mat r i x (G, n o d e l i s t=None , e d g e l i s t=None )
10/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Visualizacin 2D
import ma t p l o t l i b . p y p l o t as p l t
import networkx as nx
G = nx . dodecahedra l_graph ( )
nx . draw (G)
p l t . show ( )
11/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Visualizacin 3D
import numpy as np
from mayavi import mlab
import networkx as nx
G = nx . dodecahedra l_graph ( )
pos = nx . s p r i n g_ l a you t (G, dim=3)
xyz = np . a r r a y ( [ pos [ v ] fo r v in s o r t e d (G ) ] )
f u n c t i o n = np . random . rand ( l e n (G . nodes ( ) ) )
mlab . f i g u r e (1 , b g c o l o r =(0 , 0 , 0 ) )
p t s = mlab . po i n t s 3d ( xyz [ : , 0 ] , xyz [ : , 1 ] , xyz [ : , 2 ] ,
f u n c t i o n ,
s c a l e_ f a c t o r =0.1 , scale_mode=' none ' ,
co lormap=' j e t ' , r e s o l u t i o n =20)
12/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientas
Construccin y manipulacin
Visualizacin
Visualizacin 3D
p t s . mlab_source . d a t a s e t . l i n e s = np . a r r a y (G . edges ( ) )
tube = mlab . p i p e l i n e . tube ( pts , tube_rad iu s =0.02)
mlab . p i p e l i n e . s u r f a c e ( tube , c o l o r = ( 0 . 8 , 0 . 8 , 0 . 8 ) )
mlab . show ( )
13/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Documentacin Bibliografa
Bibliografa I
http://networkx.github.io/documentation/networkx-1.9.1/
http://docs.enthought.com/mayavi/mayavi/index.html
http://docs.scipy.org/doc/numpy/reference/index.html
http://matplotlib.org/
14/14 Ulises Tirado Zatarain Representacin de Grafos en Python
Libreras y herramientasConstruccin y manipulacinVisualizacinApndice