sábado, 12 de enero de 2013

Creación del grafo de hash tags

Tutorial de Grafos
Anterior        Índice        Siguiente

Ahora que ya tenemos datos podemos empezar a crear nuestro grafo. Existen dos formas principales de representar un grafo: matriz de adyacencia o lista de adyacencia. Aquí usaremos una lista de adyacencia, en particular, usaremos un diccionario de adyacencia.

El programa twitter_graph.py contiene un ciclo doble donde construye el grafo. Después entra a un cliclo donde podemos teclear un hash tag y despliega los 10 hash tags vecinos más frecuentes.

Nuestro grafo lo representamos con un diccionario de diccionarios. En el diccionario externo las llaves son los nodos del grafo y los valores son los vecinos de este nodo. Siendo más precisos, un valor es otro diccionario, donde las llaves son los vecinos y los valores representan el número de veces que un hash tag apareció.

Veamos un ejemplo de la variable que apunta al grafo en el programa usando los resultados de la imagen anterior.

  • graph["#cozumel"]
    : contiene los vecinos del hash tag #cozumel.
  • graph["#cozumel"]["#cancun"]
    : regresa el número de veces que #cancun apareció en la búsqueda de #cozumel, en este caso 10 veces.

Vale la pena mencionar dos funciones de los diccionarios en python que ayudan a hacer código más compacto. El siguiente fragmento de código agrega el hash tag al grafo en caso de ser necesario.

if hash_tag not in graph: 
  graph[hash_tag] = dict() 
links = graph[hash_tag]

Esto es equivalente a usar la función setdefault, la cual regresa el valor asociado con la llave (primer parámetro), en caso de no existir, inserta la llave con el segundo parámetro en el diccionario y por último regresa ese nuevo valor.

links = graph.setdefault(hash_tag, dict()) 

El siguiente código inicializa e incrementa el número de ocurrencias de un vecino.

if neighbor not in links: 
  links[neighbor] = 1 
else: 
  links[neighbor] = links[neighbor] + 1

Esto se puede reemplazar por la siguiente línea de código:

links[neighbor] = links.get(neighbor,0) + 1

La función get regresa el valor asociado con la llave o en caso de no existir regresa el segundo parámetro.

El código lo pueden encontrar aquí. Para ejecutarlo sólo recibe la carpeta donde están guardados los tweets:

python twitter_graph.py ./tweets

También incluí un archivo zip que contiene alrededor de 3,000 hash tags consultados, sólo tienen que descomprimir este archivo. AVISO: algunos de los hash tags pueden resultar ofensivos, pero eso es lo que encontró el programa.

En el siguiente post veremos algunas métricas de este grafo.

Tutorial de Grafos
Anterior        Índice        Siguiente

No hay comentarios:

Publicar un comentario