viernes, 23 de noviembre de 2012

Grafo de hash tags (parte 3)

Tutorial de Grafos
Anterior        Índice        Siguiente

Hasta el momento podemos obtener un número de tweets deseados para un hash tag. El objetivo es obtener la relación entre hash tags. El programa de este post, analiza cada tweet y extrae los hash tags para poder construir más búsquedas. De esta forma podemos obtener más tweets de otros tópicos.

Al mismo tiempo de obtener tweets y extraer hash tags, iremos guardando la información. Usaremos la siguiente convención para guardar los datos. Por cada hash tag que consultemos crearemos un archivo, cuyo nombre es el resultado de concatenar un “timestamp” con el hash tag. El archivo contiene un hash tag por línea, estos son los hash tags encontrados en los tweets que regreso la búsqueda. Por ejemplo, después de consultar #Mexico, obtuvimos el siguiente archivo:

Nombre del archivo: 1351385380#mexico

Contenido del archivo:

#musica 
#cancun 
#guadalajara 
...
#instagram 
#instagramhub 
...
#saltillo 
#torreon 
...
#saltillo 
#argentina 
#colombia 
#bolivia 
#brasil 
...
#reforma 
#instagram
...

Como pueden ver, algunos hash tags aparecen más de una vez; esto se debe a que el mismo hash tag está en varios tweets. Decidí dejar los duplicados ya que considero que son un muy buen indicador de qué tan relacionados están los tópicos.

Esta versión del programa recibe cinco parámetros, por ejemplo:

python twitter_search.py "#Mexico" 50 5 500 ./tweets
  1. El hash tag inicial, es decir, con el que iniciaremos las búsquedas.
  2. El número de resultados por petición. En este ejemplo cada petición a Twitter regresará a lo más 50 tweets.
  3. El número de peticiones por hash tag. En el ejemplo, para cada hash tag que busquemos realizaremos a los más 5 peticiones. Este parámetro junto con el anterior nos da el máximo número de tweets por hash tag. En este caso a lo más 250 tweets por hash tag. Puede ser menor, ya que algunos tópicos son poco populares.
  4. El número de hash tags a visitar. Por ejemplo, buscaremos 500 hash tags.
  5. El directorio donde queremos guardar los resultados. Después de que se termine de ejecutar el comando anterior, tendremos 500 archivos en el directorio ./tweets

La lógica del programa es la siguiente:

Mientras no hayamos visitado el número de hash tags

  1. Obtener los tweets de un hash tag que aún no hayamos visitado.
  2. Extraer los hash tags de los tweets.
  3. Guardar los hash tags asociados al hash tag consultado.
  4. Actualizar la información de los hash tags a visitar con los hash tags obtenidos en el paso 2. En este paso sólo agregamos hash tags que no hayamos visitado y que no estén ya en la lista por visitar.

El código lo pueden encontrar en la siguiente liga.

Tutorial de Grafos
Anterior        Índice        Siguiente

domingo, 18 de noviembre de 2012

Grafo de hash tags (parte 2)

Tutorial de Grafos
Anterior        Índice        Siguiente

Ahora modificaremos el programa del post anterior para obtener más de 15 tweets; que es lo que regresa una petición sin parámetros. El programa recibe dos parámetros, además del hash tag inicial, también espera el número de tweets que se desean obtener. Por ejemplo:

python twitter_search.py "#Toluca" 35

Obtiene 35 tweets que contienen el hash tag #Toluca. El programa realiza peticiones hasta que obtiene los tweets deseados.

Sin embargo hay un punto a considerar, la documentación de Twitter menciona que para la API de búsqueda existe un límite en la frecuencia con la que se pueden realizar peticiones, pero no publican dicho límite. En caso de que excedamos este límite simplemente obtendremos algo como:

{"error":"..."}

Por lo que antes de iniciar una nueva petición, espero 5 segundos, si la petición resulta en un error, espero el doble. Quizá tengamos que modificar estos valores.

El siguiente es un ejemplo de la salida del programa.

El código lo pueden encontrar aquí. En el siguiente post comenzaremos a navegar entre hash tags.

Tutorial de Grafos
Anterior        Índice        Siguiente

sábado, 3 de noviembre de 2012

Grafo de hash tags (parte 1)

Tutorial de Grafos
Índice        Siguiente

Realizar una búsqueda usando la API de twitter es tan sencillo como construir la siguiente URL:

http://search.twitter.com/search.json?q=%23Toluca

Esta consulta regresa tweets recientes que contienen el hash tag #Toluca. De hecho si pegan esta URL en su navegado pueden observar el formato de la respuesta. La respuesta viene en formato JSON. Los signos de llaves indican un objeto y los corchetes indican un arreglo.

{
 "completed_in":0.089,
 "max_id":259679677768151040,
 "max_id_str":"259679677768151040",
 "next_page":"?page=2&max_id=259679677768151040&q=%23Toluca",
 "page":1,
 "query":"%23Toluca",
 "refresh_url":"?since_id=259679677768151040&q=%23Toluca",
 "results":
  [
   {
    "created_at":"Sat, 20 Oct 2012 15:18:54 +0000",
    "from_user":"tlcweather",
    "from_user_id":461072765,
    "from_user_id_str":"461072765",
    "from_user_name":"Toluca Weather",
    "geo":null,
    "id":259675063110995968,
    "id_str":"259675063110995968",
    "iso_language_code":"es",
    "metadata":{"result_type":"recent"},
    "profile_image_url":"http:\/\/a0.twimg.com\/profile_...",
    "profile_image_url_https":"https:\/\/si0.twimg.com\/...",
    "source":"<a href="http:\/\/www.google.com\/">Google<\/a>",
    "text":"Toluca, MEXICO Weather :: 13C Mist ... #Toluca #Mexico",
    "to_user":null,
    "to_user_id":0,
    "to_user_id_str":"0",
    "to_user_name":null
   },
   {...}
  ],
 "results_per_page":15,
 "since_id":0,
 "since_id_str":"0"
}

Analicemos algunas variables de la respuesta JSON que utilizaremos. Como podemos ver en la variable results_per_page, cada consulta regresa sólo 15 tweets. Para obtener los siguientes 15 tweets utilizaremos la variable next_page.

La variable results es un arreglo de objetos. Cada objeto de results contiene el usuario que creó el tweet, si está dirigido a alguien, cuándo fue creado y por supuesto el texto del tweet.

El programa en python recibe el hash tag que deseamos buscar:

python twitter_search.py "#Toluca"

El programa construye y realiza la petición de búsqueda. Después de parsear el resultado, obtenemos un mapa de llaves y valores. Por ejemplo, para acceder a la variable next_page usamos algo como search_result["next_page"]. El programa despliega todos los elementos del resultado de búsqueda, todos los elementos de un tweet y finalmente sólo los textos de los 15 tweets.

En el siguiente post extenderemos este ejemplo para obtener más de 15 tweets.

Tutorial de Grafos
Índice        Siguiente

Tutorial de Grafos

Una de las estructuras de datos que más ha llamado mi atención son los grafos. Y no sólo por la parte teórica, sino por su presencia en diversas situaciones. Uno de los ejemplos más claros son las redes sociales. Este es el primer post de una serie en la que hablaremos de grafos y algunos algoritmos.

El primer paso será construir un grafo. Resulta un tanto aburrido el estudiar grafos donde los nodos son simplemente letras y las conexiones entre ellos no tienen un significado real. Algunos libros cuando hablan de encontrar rutas usan ejemplos donde los nodos son ciudades y las conexiones son caminos entre ellas. Intentaré usar algo más atractivo para esta serie.

Después de investigar un poco las APIs de Facebook y Twitter, decidí que utilizaremos el servicio de búsqueda de Twitter, ya que no requiere autenticación, así que es muy fácil de empezar a usar. Como lenguaje de programación usaremos Python y el código estará en mercurial.

En el siguiente post comenzaremos a investigar cómo construir nuestro grafo usando la API de Twitter.

Todos los post de esta serie se irán listando a continuación:

sábado, 20 de octubre de 2012

Grafo de Lenguajes de Programación

La siguiente página muestra una red de lenguajes de programación, donde las conexiones significan que un lenguaje influenció a otro. Entre más grande sea un nodo significa que ese lenguaje ha influenciado a más lenguajes de programación.

Cuando posicionas el cursor sobre un lenguaje muestra en un color los lenguajes que lo han influenciado y en otro color los que ha influenciado. Dando clic en el nodo despliega más información acerca del lenguaje.

Esta visualización resulta muy interesante. Además, si en algún momento deseamos aprender un nuevo lenguaje, puede ser una buena guía. Por ejemplo, tal vez resulte de más utilidad aprender un lenguaje que tiene mucha influencia, porque nos puede ayudar a aprender fácilmente más lenguajes.

En la página también explican como fue generado el grafo y tiene enlaces al código.

Programming Languages Influence Network

domingo, 2 de septiembre de 2012

Recomendaciones de video clases

El hecho de que universidades como el MIT, Berkeley, Stanford, University of Washington publiquen diferentes video clases de forma gratuita, nos brinda la oportunidad de estudiar por nuestra cuenta o reforzar conocimientos sobre alguna clase que cursemos. Además de poder seguir la clase a nuestro propio ritmo o ver sólo un tópico que nos resulte interesante.

Recientemente, me topé con un par de pláticas acerca de nuevos sitios que están impulsando la educación gratuita en línea y están promoviendo técnicas más interactivas. Además ambos sitios se enfocan en proveer tutoriales cortos (entre 5 y 10 minutos) para poder mantener lo mejor posible el interés del estudiante.

Udacity

Este sitio ofrece clases como inteligencia artificial, algoritmos, desarrollo web y criptografía. Las video clases son divididas en segmentos de alrededor de cinco minutos y entre videos usualmente se presenta un pequeño examen para reforzar lo aprendido.

Un punto que puede resultar atractivo es que el material es presentado por profesores de reconocidas universidades. Por ejemplo, el curso de inteligencia artificial fue preparado por Sebastian Thrun, quien además de ser uno de los fundadores de Udacity, es un reconocido profesor de inteligencia artificial de Stanford y es el líder del proyecto del automóvil autónomo de Google.

Khan Academy

Contiene videos acerca de una gran variedad de tópicos (economía, álgebra, cálculo, física, química, entre muchos otros) presentados de una forma muy amigable, explicando de la manera más simple los conceptos. Los videos son cortos y se obtiene más provecho cuando se selecciona una serie que cubre cierto tema.

Pero este sitio no sólo se limita a publicar videos. Han estado probando estrategias para hacer más interactiva y personalizada la educación. El siguiente video es una plática del fundador del sitio donde habla desde cómo nació la idea hasta cómo han estado colaborando con escuelas para mejorar la educación.

lunes, 27 de agosto de 2012

Recursos Ensamblador 8086

Durante los últimos meses estuvimos publicando diversos posts acerca de lenguaje ensamblador. En este post nos gustaría compartir las mejores fuentes de información que estuvimos usando:

  • Esta presentación de modos de direccionamiento resultó muy útil para estar constantemente revisando los diferentes detalles al direccionar localidades de memoria.
  • La siguiente página muestra una lista muy buena de interrupciones y posibles valores para los parámetros de dichas interrupciones.
  • Una breve lista de instrucciones.
  • Definitivamente esta página contiene bastante detalle. En ella consultamos cómo exportar variables y funciones entre módulos y cómo ligar varios módulos en un ejecutable.