Tuesday, May 28, 2013

Apuntes de visualización.




    2 philogb -> Las visualizaciones que realizó: http://philogb.github.io/blog/ y las herramientas que ha creado
      actualmente no se encuentra tan actualizado el proyecto JIT  ya que fue comprado por sencha labs.
       sin embargo para probar está bastante bueno.
    3 geonames.org en búsqueda avanzada es una herramienta que permite
      a partir de nombres obtener resultados con sitios geográficos que
      coincidan con ese nombre.
    4 marumushi.com -> flipboard lector de noticias, para dispositivos móbiles. realizó newsmap.jp
      realmente está buena esa página permite visualizar las noticias mediante un treemap en base a
      la cantidad de menciones en diferentes diarios.
    5 catherine plaisant -> participa como jurado en Vast
    6 algoritmo que utiliza el treemap: squarified tree map.         
    7 videos sobre visualizaciones:
           Ted Talks
           La belleza de visualización de los datos
           Shneiderman
    8 Learning getting started with D3 Listo. it-ebooks
    9 Robert Spence,  Information Visualization.  Falta por leer. y revisar mejor esta wiki: infovis-wiki.net

Sunday, May 26, 2013

D3 js una alternativa, para hacer visualizaciones con Javascript.



En este caso realicé un treemap de las aplicaciones de cliente para twitter que usaron las personas para hacer tweets en el flisol 2012 y que tuvieran en su "location" alguna información o palabra de estados de venezuela, o venezuela en sus distintas formas y además que mostrara el tamaño del cuadro con respecto a la cantidad de followers que tiene el usuario:

El ejemplo del treemap fue tomado de acá: http://bl.ocks.org/mbostock/4063582

Y Quiero hacer estas modificaciones: http://www.billdwhite.com/wordpress/2012/12/16/d3-treemap-with-title-headers/

pero será para otro post y en otro tiempo:

El enlace del resultado está acá: Flisol 2012 App de Twitter

El código es Js y html, con un wget de esto les funcionará.

La data formateada la realicé con varios scripts.

0 Obtener la data de los usuarios de acuerdo a los Ids. los Ids los pueden conseguir acá:

Github J3nnn1 Ids Twitter 

1 Pasar de CSV a Json al fomato que recibe el layout de treemap.

importante:
Ayuda a corregir si un json está mal formado! :)

http://jsonformatter.curiousconcept.com/#jsonformatter



Sunday, May 19, 2013

SPSS + Python + Ninja IDE = Menos consumo de memoria RAM

Menor consumo de memoria RAM, aunque usted no lo crea. Esto resulta de no ejecutar la interfaz de usuario de SPSS, sino usar las funciones de SPSS que se pueden acceder mediante su API en Python.

0 - Tener python instalado. (reiniciar con cada instalación, si es windows)
1 - Tener SPSS instalado.
2 - Instalar el plugin que corresponda, a la versión de SPSS que se tiene instalada, en mi caso la versión de spss es la 20. por lo que requiero este plugin (no instalar fixed si no tienes la versión de spss correcta): buscar acá:
python spss esential
Cuando instalen el plugin debería reconocer la ruta del python que tienen instalado para instalar las librerías que conformarán la API:

Configurar ninja IDE para que tome la versión del python que utiliza spss. muestro un screenshot de la ruta:



Y cuando ejecutan el script de python no pueden usar el spss,  con el mismo archivo, sino crea una copia del archivo.

Si en el scripts haces modificaciones al archivo puedes guardarlas y revisarlas al final :)
es lo más si cuentas con una máquina de pocos recursos. (2GB de ram) y ¡un poco más de data de lo habitual!

Algo extra: Cómo correr un proceso cron: SPSS como CronJob

Monday, May 13, 2013

Flisol 2013 tweets y Usuarios.

Una nube de palabras sobre el flisol 2013. durante el transcurso del flisol estuve obteniendo los tweets que al menos algunas de estas 3 palabras hiciera mención: flisol flisolve flisol2013  y bueno aproximadamente sólo 1800 tweets obtuve hasta las 6pm de Venezuela.

un sort al archivo, y colocando todo en un sólo archivo, arrojó las siguientes imagenes:
Usuarios (screen_name).

Tweets frecuencia > 10

Todos los Tweets

Y curioseando con R y apriori, nada nuevo se vé porque hay mucha data que opaca los casos inusuales. ¿Sería cuestión de eliminar el resto de la data y tomar sólo la minoritaria? como diferenciar casos raros.

     lhs                          rhs                           support confidence      lift
{Hundreds,  Installing}      => {Latin}           0.009911894 1.00000000 69.846154 {¡No,                                                                                
      al,                                                                                 
      aquí:,                                                                              
      asistir,                                                                            
      importa,,                                                                           
      online,                                                                             
      puedes}                 => {míralo}                 0.006057269 1.00000000 165.090909

     {ciudadades,                                                                        
      dmuchas,                                                                           
      es,                                                                                
      Festival,                                                                          
      Instalación,                                                                       
      Latinoamericano,                                                                   
      Software}               => {Libre}                  0.006607930  1.0000000  25.22222
     {ciudadades,                                                                        
      contintente.,                                                                      
      dmuchas,                                                                           
      Festival,                                                                          
      Ho@wikinoticias:,                                                                  
      Instalación,                                                                       
      Latinoamericano,                                                                   
      Software}               => {Libre}                  0.005506608  1.0000000  25.22222
     
      En resumen: muchos tweets sobre que es el FLISOL, en inglés y en español, y además si
      no podías asistir compartían el enlace para visualizarlo por streaming, el usuario
      wikinoticias también cubrió la noticia. Eliminando algunas palabras que son las mayoritarias:

         lhs                          rhs                           support confidence      lift
    {#PanamGracias,                                                                       
     @Tecnomenia,                                                                       
     @utpfisc?,                                                                           
     míralo,                                                                              
     puedes}                  => {http://t.co/9yvPOaC7zI!} 0.004955947  1.0000000 201.77778
        
    {#CiudadDeMéxico}      => {#Hackerspace}            0.004405286  1.0000000 139.69231
   
Cuando aparecen las palabras del lado derecho seguido luego aparece un enlace para visualizarlo. Y la mención a esos usuarios de twitter. Estos usuario son de panamá: @utpfisc?, @Tecnomenia,  @la_cascara  y se meciona al flisol bogotá difundiendo sus sedes y varias ciudades de brasil que realizaron el flisol.

Sunday, May 12, 2013

predicciones con árboles.


árboles de decisión, son muy usados para establecer modelos predictivos,en base a hechos del pasado.

Ejecución de árboles en R.

que algoritmo utiliza R,

library(tree)
library(datasets)
iris.tr = tree(Species ~ ., iris)
iris.tr
> summary(iris.tr)

> plot(iris.tr)
> text(iris.tr)
> misclass.tree(iris.tr)
> misclass.tree(iris.tr, detail=TRUE)

> library(rpart)
> data(spam7)
> attach(spam7)
> spam.tree = rpart(formula = yesno ~ crl.tot + dollar + bang)
> spam.tree = rpart(formula = yesno ~ crl.tot + dollar + bang + money + n000 + make,method="class", data=spam7)
> plot(spam.tree)
> text(spam.tree)
printcp(spam.tree)
> spam.tree = rpart(formula = yesno ~ crl.tot + dollar + bang + money + n000 + make,method="class", data=spam7, cp=0.001)
> plotcp(spam.tree)
> spam7b.tree = prune(spam.tree, cp = spam.tree$cptable[which.min(spam.tree$cptable[,"xerror"]), "CP"])
> plot(spam7b.tree)
> text(spam7b.tree)



Con Weka desde R
> library("RWeka")
tree = make> tree = make_Weka_classifier("weka/classifiers/trees/J48", c("bar", "Weka_tree"))
> print(tree)
> WOW(tree)
> fm = tree(yesno ~ crl.tot + dollar + bang + money + n000 + make, data=spam7, control=Weka_control( S=TRUE, M=150))
> fm
table( observed= spam7$yesno, predicted = fitted(fm))
fm = tree(yesno ~ crl.tot + dollar + bang + money + n000 + make, data=spam7, control=Weka_control( S=TRUE, M=150))
library(party)
plot(fm)


Rotando un video porque UPS está al reves..


mencoder (Codificador de películas de MPlayer) es un sencillo codificador de películas, diseñado para codificar películas reproducibles con MPlayer (véase  más  arriba)  a  otros  formatos  también  reproducibles  con  MPlayer (véase más abajo).  Codifica a MPEG-4 (DivX/Xvid), uno de los códecs libavcodec y audio en PCM/MP3/VBRMP3 en 1, 2 o 3 pasadas.  Además, puede copiar flujos, un potente sistema de filtros (recortar,  expandir,  girar,   post-procesar, rotar, escalar, ruidos, conversión RGB/YUV) y más cosas.

referencia: man mencoder

En una boda, tome algunos videos, peeeero los realicé al reves, por lo que requería de una aplicación de edición de video que me permitiera rotarlo. 

En linux existen las gráficas y las no gráficas.

Mencoder es no gráfica y 
Openshot es una alternativa simple para edición de videos, menos compleja que cinelerra y blender. sólo se añade el video a la línea del tiempo, click derecho y se escoge hacia donde girar.

em mencoder es más de leer el man para ver si está actualizado y es igual a este: 

mencoder -vf rotate=1 -ovc lavc -oac pcm 16032008002.mp4 -o rotated.mp4
Y bueno chao.

PD: imagen tomada de google con la palabra boda+xkcd.

Saturday, May 11, 2013

crawlers o araña web Opensource.


Selección de un crawler.

- Tenga actualizaciones recientes en su software (2013).
- El lenguaje en el cual fue realizado, se pueda usar en los diferentes sistemas operativos. Con una instalación poco complicada.
- La licencia  del Software es importante, sin embargo una condición es que sea opensource,  ya que permitiría un estudio amplio de sus características y comportamiento.
-La documentación es MUY importante.

Abot, está hecho en c#, creo que por esta razón lo descarté.

Aspseek, está hecho en c++, funciona en sistemas POSIX, sin embargo es demasiado viejo, su última modificación fue en el año 2002, por lo que podemos decir que es un software poco usado hoy en día, sin embargo existen paquetes (rpm y .deb)para instalar esta antigüedad.

DataparkSearch: está escrito en C, existen paquetes para su instalación y su última actualización fue en el año 2010. Por lo que descartamos su utilización.

Wget: Es un crawler por línea de comando, que tiene una amplia gama de opciones para personalizar la descarga, obtiene el contenido de una página web, sin realizar el parseo, extracción, tokenización, del sitio web descargado, A diferencia de Nutch que realiza el proceso de parseo del formato HTML, y procesamiento de la data.
Curl ( http://curl.haxx.se/ ), principalmente utilizado para la transmisión de archivos también se utiliza aunque a menor escala para crawlear. Soporta entre otros protocolos FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, FILE y LDAP. Esta escrito en C++ y es multiplataforma ( *nix, Microsoft Windows, etc).

Grub: Ja, no el gestor de arranque de sistemas operativos.. es grub el crawler. Es un crawler distribuido, suena bien, y lo utiliza wikia, ya que fue comprado por Wikipedia en el 2007. Está escrito en c++ a pesar que durante un tiempo fue un proyecto de código cerrado, luego de la compra por wikipedia es un proyecto Opensource. El detalle por el cual es descartado es que tiene muy poca documentación. Sin embargo es un proyecto interesante y tiene un archivo TODO con cosas que se pueden realizar para contribuir con el proyecto, su última actualización fue el 03 de abril de este año (2013).

Heritrix: Es un crawler cuya última actualización fue realizada en el año 2006, está escrito en Java. Posee una interfaz web, para realizar funciones de cualquier crawler. 

Ht-//Dig: Es un crawler cuya última actualización fue en el año 2004, un software bastante viejo, y además con muy poca documentación.

HTTTrack: Crawler escrito en C, algo muy al estilo wget (software ejecutado por línea de comando) sólo que con algo más dulzura, permite expresiones regulares, maneja los enlaces con rutas relativas y enlaces originales, una de sus ventajas es su versatilidad de opciones para obtener resultados diferentes. algo interesante es que puede establecer prioridades por el tipo de archivo que descarga y tasa mínima y máxima de transferencia para no abarcar todo el ancho de banda.  

Sin embargo es un software no muy amigable que requiere un nivel mayor de conocimiento sobre como procesar los datos que obtiene este programa, ya que no realiza el parseo de los archivos obtenidos, y requiere de conocer un lenguaje de programación (perl, python) para procesar estos datos.

ICDL Crawler:  es un crawler distribuido, que parsea el contenido a un formato de Web semantica (archivos WPT) interesante el uso de ontologías para este formato, es una herramienta algo avanzada para el objetivo de este trabajo práctico. Pueden obtener más información de: http://www.omfica.org que utiliza este tipo de crawler de acuerdo a las especificaciones del sitio.

mnoGoSearch: software que se utiliza como motor de búsqueda, es privativo por lo que quedó descartado para la realización de este proyecto, además de no tener actualizaciones desde el año 2012.

PHP-Crawler:Es una herramienta web que usa una base de datos para guardar datos de un sitio web y permite hacer búsquedas en el sitio. No se utiliza por línea de comandos sino por el navegador, sin embargo no tomamos en cuenta este proyecto ya que no se actualiza desde el 2006.

tkWWW Robot: proyecto muy muy viejo desde el año 1992, y su última actualización en 1996.

Seeks y Yacy: su objetivo primordial es ser un motor de búsqueda alternativo y tienen su propio crawler, en vista que se enfoca más hacia un motor de búsqueda, no lo tomaré en cuenta para el proyecto.

Scrapy: se requiere conocer el lenguaje de programación python y tener un poco de conocimiento de programación orientada a objetos. Creo que cualquier persona con poco conocimiento puede obtener la data que requiere, a diferencia de un crawler que obtiene toda la data, acá podemos obtener la data que necesitamos y no más de ahí.. está más orientado al web scraping.

Nutch: Es un crawler por sí sólo no es posible utilizarlo, se requiere de solr para obtener la data indexada, importante a destacar es su estructura, aún se encuentran dos versiones estables:

La versión 1.6 que permite utilizar el crawler y solr, sin necesidad de instalar otras aplicaciones para su manejo como hadoop, hbase, agora, hive, entre otros. La versión 2.x se orienta a procesos de mayor escala, y permite implementar "crawlers" distribuidos, y el procesado del texto a través de map reduce.

En la versión 1.6 se puede usar solr "out the box" es decir luego de descomprimir los archivos, nutch es un crawler enfocado más a escribir que a ser un motor de búsqueda, muchas de las características son plugins que pueden ser personalizados en el archivo de propiedades del nutch. Entre las características personalizadas se encuentra:

- seleccionar que sólo descargue las páginas perteneciente a los dominios de las semillas mencionadas en el directorio url.

- Seleccionar que parsee el archivo durante el fetch del mismo. Pero consume mucha memoria, y genera muchos procesos de lectura y escritura.

http://pastebin.com/YSXySCW1

db.ignore.external.links a "true" para que no busque enlaces externos dentro de los dominios semillas.

- El proceso de crawler de nutch consta de varias etapas:  

 inject->generate->fetch->parse->updatedb   

- Añadimos una expresión regular de forma que sólo haga fetch de los sitios que pertenezcan a esos dominios definidos en el archivo regex-urlfilter.txt algo importante a comentar es que la utilización masiva de expresiones regulares realentiza el proceso del crawler. En nuestro caso son pocas urls, de igual forma en el archivo de configuración seteamos la propiedad:

Crawling e indexing.

./bin/crawl urls/ crawl http://localhost:8983/solr 2

./bin/nutch solrindex http://localhost:8983/solr crawl -linkdb crawl/linkdb crawl/segments/* 

Comandos Nutch para visualizar que descargamos:

Estadísticas de lo descargado:

./bin/nutch readdb crawl/crawldb -dump pageurl 

 ./bin/nutch readdb crawl/crawldb -stats

./bin/nutch readdb crawl/crawldb -url https://wwws.whitehouse.gov/petitions 
 
También:
 
bin/nutch readseg -list  crawl/segments/20130725200658 
bin/nutch readseg -dump  crawl/segments/20130725200658 dumpdir 
 
Contenido de un segmento descargado.
 
s=`ls -d crawl/segments/* | head -1` 

./bin/nutch readseg -dump crawl/segments/20130509191222 outputsegment
 
Para obtener Todo lo descargado en un solo archivo:
 
./bin/nutch readseg -list ./crawl/segments/ outputAllSegments 

 
Para más detalle de como es el proceso: 
http://florianhartl.com/nutch-how-it-works.html 
este enlace está muy bien explicado.

Y sobre scoring utilizado por defecto con el plugin de nutch:
si tienes duda de porque eligió esas páginas para el topN que seleccionaste: 
http://www2003.org/cdrom/papers/refereed/p007/p7-abiteboul.html  
 
En resumen: nutch > curl > wget  
 
(sí y solo si no sabes programar 
 
y buscas obtener el contenido rápido) 
 
sino libcurl > wget > nutch 
 

Borrar todos los índices en solr:

http://localhost:8983/solr/update?stream.body=%3Cdelete%3E%3Cquery%3E*:*%3C/query%3E%3C/delete%3E&commit=true

Listar Urls inyectadas.

bin/nutch readdb crawl/crawldb -stats  

bin/nutch readdb crawl/crawldb -dump dump

sí leiste todo esto tal véz te interese: como usar un scrapper con python:
Scrappy a scrapper.


Thursday, May 2, 2013

processing JS y Java. Una herramienta para Visualizaciones.



Un resumen muy introductorio, processing trata de una herramienta, que nos permite hacer visualizaciones, está realizado con Java y requiere un poco de conocimientos de este lenguaje, pero puede ser exportado en JavaScript, para publicarlo en algún sitio web.

La sintaxis es Java, sin embargo existen algunas funciones definidas que facilitan el trabajo, se pueden hacer animaciones, y en otras áreas artisticas es muy utilizado. (biopus) 

No sólo se puede exportar a Javascript sino también a Arduino, por esto es utilizado por grupos que realizan arte interactivo como http://www.biopus.com.ar/ 

La estructura de la sintaxis es de la siguiente forma:

//Todas las variables declaradas  
//afuera de estas funciones 
//serán tomadas como globales.

void setup() {
// se ejecutará una sóla vez, y al inicio de la aplicación.
}

void draw() {
// se ejecutará dependiendo de la tasa de imágenes por segundos 
// (framerate) esto es configurable en el ambiente.
}

un ejemplo lo pueden ver acá: http://maldonado.pl/buenosaires/index.html
y descargar de github: http://github.com/j3nnn1/homework/tree/master/cambiar_imagenes

Web de ProcessingJs http://processingjs.org/
Processing Javoso: http://processing.org/