My favorites | Sign in
Project Home Downloads Wiki Issues Source
Search
for
Taller_graphviz  
Updated Oct 29, 2010 by mariluz....@gmail.com

#Información para el taller de graphviz

Introductión

Graphviz es una aplicación y un conjunto de librerías open source para dibujar gráficos. Está desarrollada por investigadores de AT&T con algunas colaboraciones externas.

Los datos de entrada están en formato DOT, permite realizar diferentes layouts y obtener la salida en diferentes formatos. Muestra una galería de visualizaciones y los datos de entrada necesarios para realizarla.

Tiene una buena documentación y una interesante FAQ

Funciona para plataformas unix/windows/mac y tiene disponible el código fuente. Tanto ejecutables como fuentes se se pueden descargar desde su página de downloads

Caracteristicas

Data Set

Desde los tweets obtenidos del pasado mundial de Baloncesto se han creado un conjunto de relaciones basadas en la mención, es decir los nombres de usuarios twitter que aparecen en el texto del tweet. Dado que el tamaño de la red podría ser demasiado grande para la práctica se han seleccionado los nodos más mencionados y los nodos más activos. De estos dos conjuntos solo hay un elemento que está en ambos y que es @turkey2010, el community manager de la web del campeonato

Filtros

Si tenemos los datos en formato CSV separados por ; podríamos aplicar un par de filtros awk para convertirlo en formato dot.

Filtro 1: aplicado a la tabla de nodos:

# Datos de entrada: un fichero de texto con los datos de los nodos separados por tabulaciones 
#    posición de los datos
#    1:Id 2:Label 3:Group 4:Num Links 5:Links_in 6:links_out 7:Timestamp
# Solo se van a utilizar los  datos de las tres primeras comumnas
# Datos de salida: primera parte del fichero en formato dot 

BEGIN {
# Tratamiento inicial del filtro: se genera la cabecera del fichero dot
printf "digraph turkey2010 {\n"
printf "node [shape=plaintext];\n"
printf "edge [color=Grey];\n"
# limitación del tamaño del gráfico
printf "ranksep=\"1.0 equally\"\n"
printf "nodesep=\"1.0 equally\"\n"
flag_head="True"
}
{
# tratamiento para cada una de las filas del fichero

  if (flag_head=="False")
  {
    Id=$1
    Label= $2
    Group= $3

    printf "%s [label=\"%s\"];\n", Id,Label
    if (Group =="top_mentions")
      printf "%s [fontcolor=Red];\n",Id
    if (Group =="top_twitters")
      printf "%s [fontcolor=darkgreen];\n",Id
   }
   flag_head="False"
 
}
END {
# tratamiento final del fichero, no hay que hacer nada

}

Filtro 2: aplicado a la tabla de arcos:

# Datos de entrada: un fichero de texto con los datos de los arcos separados por tabulaciones 
#    posición de los datos
#    1:Source 2:Target 3:Weight 4:Timestamp
# Solo se van a utilizar los  datos de las dos primeras columnas
# Datos de salida: segunda parte del fichero en formato dot 

#tratamiento inicial
BEGIN {
flag_head="True"
}
{
# tratamiento para cada una de las filas del fichero
  if (flag_head == "False")
  {
    Source=$1
    Target= $2

    printf "\"%s\" ->\"%s\";\n", Source,Target
  }
  flag_head="False"
}   

END {
# tratamiento final del fichero, se inserta token de cierre
printf "}\n"

}

Cómo invocarlos:

awk -F";" -f node_tab2dot.awk  turkey2010_mentions_top_nodes.csv > turkey2010_top_mentions.dot
awk -F";" -f arc_tab2dot.awk  turkey2010_mentions_top_arcs.csv >> turkey2010_top_mentions.dot

Visualización

Datos de entrada

Los datos de entrada están en formato DOT, y son acesibles aquí

Se han generado automáticamente desde los tweets seleccionados del Turkey2010 de la manera más sencilla posible. Se ha evitado aplicar muchos atributos como font, fontsize, etc.. para que tome los valores por defecto.

Se ha adoptado un convenio de color: Los nodos rojos son los más mencionados y los verdes los más activos twiteando.

Se han eliminado los nodos que no tenían ninguna mención.

Layouts

  • dot Estructura jerárquica, se dibuja de evitando que los arcos se crucen y pasen por encima de los nodos. No es eficiente en el espacio ocupado. Se puede ajustar el tamaño mínimo poniendo los parametros "ranksep="0.2 equally" y nodesep="0.2 equally". (ranksep es la distancia en vertical entre nodos y nodesep es la distancia horizontal entre nodos, en pulgadas)
  • neato es un layout spring model que busca la mínima energía entre nodos, basado en el algoritmo Kamada-Kawai (no se puede ajustar las distancia entre nodos con los parámetros ranksep y nodesep)
  • fdp es un layout spring nodel que utiliza springs solo en los nodos conectados con un flecha y fuerzas respulsivas con el resto de los nodos. Implementa el heurístico Fruchterman-Reingold (no se puede ajustar las distancia entre nodos con los parámetros ranksep y nodesep).
  • twopi Dibuja un layout radial disponiendo los nodos concentricos a un nodo central en función de su distancia. En este caso ranksep y nodesep es la distancia radial
  • circo Dispone los nodos de forma circular (no se puede ajustar las distancia entre nodos con los parámetros ranksep y nodesep).

Formatos Salida

Permite los clasicos formatos de imágenes como jpg, png y gif así como Postscript (ps),o formatos estandarizados por el W3C como sgv, vml

Prática

  1. Bajar el fichero DOT: turkey2010_top_mentions.dot como texto
  2. Abrir el programa graphviz (GVedit.exe)
  3. Abrir fichero turkey2010_top_mentions.dot (en local)
  4. Seleccionar settings (Graphviz/settings) desde este formulario se pueden seleccionar el layout, el directorio de salida y el formato de salida. Por defecto toma como directorio de salida el mismo del que se encuentra el fichero de entarda .dot
  5. Seleccionar layout dot: y ejecutar. Se verá que el grafo es muy grande. Para ajustar tamaño poner los parámetros: ranksep="0.2 equally" nodesep="0.2 equally" debe quedar así:

  1. Seleccionar layout neato Como se ve, este layout no es muy adecuado a esta red y no podemos ajustar la distancia de los nodos.
  1. Seleccionar layout fdp. El gráfico debe quedar así:
  1. Seleccionar layout twopi. Para ajustar tamaño poner los parámetros: ranksep="1.0 equally" nodesep="1.0 equally". El resultado debe quedar así:
  1. Seleccionat layout circo. El layaout resultante no es muy adecuado para esta red y no se puede ajustar la distancia entre los nodos:

Hacer scroll hacia abajo que la imagen que sale es enorme

Comment by anibalro...@gmail.com, Oct 21, 2010

EStoy siguiendo el curso desde Argentina... Gracias!

Comment by albertop...@gmail.com, Oct 27, 2010

Hola, tengo una duda, como pasas de los dataset al archivo DOT ?

Comment by project member mariluz....@gmail.com, Oct 29, 2010

Alberto, incluido el filtro para generar el dot en la documentación

Anibalrossi, no hay de qué, hay que compartir


Sign in to add a comment
Powered by Google Project Hosting