Top Banner
1 1
23
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 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