Showing posts with label datamining. Show all posts
Showing posts with label datamining. Show all posts

Wednesday, July 18, 2018

instalando grafana

Deje este dataset household power consumption:

https://archive.ics.uci.edu/ml/machine-learning-databases/00235/


Grafana tiene multiples sources:
mysql, elastichsearch, influxdb, cloudwatch, graphite, opentsdb, postgresql, prometheus.

Por facilidad use mysql, de igual forma más adelante agregaré otros sources y otros datos.

mysql> create database household_power_consumption;

subiendo los datos:
create table consumption (
id int PRIMARY KEY NOT NULL AUTO_INCREMENT,
    date_consumption date NOT NULL ,
    datetime_consumption datetime NOT NULL,
    global_active_power float NOT NULL,
    global_reactive_power float NOT NULL,
    voltage float NOT NULL,
    global_intensity float NOT NULL,
    sub_metering_1 float NOT NULL,
    sub_metering_2 float NOT NULL,
    sub_metering_3 float NOT NULL
);
----

load data infile 'final.csv'
into table consumption
fields terminated by ','
OPTIONALLY ENCLOSED BY '"'
lines terminated by  '\n'
IGNORE 1 LINES
-- (`date_consumption`, `datetime_consumption`, `global_active_power`, `global_reactive_power`, `voltage`, `global_intensity`, `sub_metering_1`, `sub_metering_2`, `sub_metering_3`);
(@consumptiondate, @consumptiondatetime, `global_active_power`, `global_reactive_power`, `voltage`, `global_intensity`, `sub_metering_1`, `sub_metering_2`, `sub_metering_3`)
set date_consumption = STR_TO_DATE(@consumptiondate, '%d/%m/%Y'),
datetime_consumption = STR_TO_DATE(@consumptiondatetime, '%d/%m/%Y %H:%i:%s');


Inicializando grafana.

$ systemctl enable grafana

o sólo para levantarlo temporalmente

$ systemctl start grafana

luego se habilita la url:

http://127.0.0.1:3000/datasources/new?gettingstarted


Algo interesante es que grafana no hace validacion de las querys que le manda a mysql en caso de enviar una query que contenga DROP, DELETE y si el usuario que especificamos tiene los permisos de ejecucion lo va a hacer! asi que fuertemente recomienda al usuario   a CREAR un usuario con los permisos solo de lectura en la  base de datos.

este sería un vistazo de la interface y como configurarlo con la base de dato mysql.




Muy bueno es que tiene una comunidad muy activa con muchos tipos de dashboards creados:

https://grafana.com/dashboards?utm_source=grafana_search


Se puede agregar data sources acá se ve el listado de los que se ha definido:
http://127.0.0.1:3000/datasources

en settings > variables > Add variable

o agregar manualmente el grafico al dashboard:

El tema con agregar variables por query desde el datasource es que para mas de un millon de registros, el template de series de tiempo hace crash, sólo permite menos de 1millon de registros, por lo que lo recomendable es ajustar el rango de fechas teniendo en cuenta este límite del fetch permitido por la query. Otra cosa buena son los ejemplos que trae en cuanto a ese formato de macros que tiene siendo intuitivo, también se puede configurar alertas! para los picos y bueno es una alternativa más al mar de opciones.



Y eso es todo por hoy.
para más info:
http://docs.grafana.org/features/datasources/mysql/
:D

Sunday, November 24, 2013

Referencias sobre papers que hablan de datamining.


La imagen me encanta resumen bien, muchas de las cosas que se ven muy amenudo en Datamining.

Organizando, decidí recopilar muchas de las cosas que tenía impresa inecesariamente, y reciclarlas : D
así que en este post colocaré artículos, papers, información impresa que me gustaría tener un registro de ella:

Papers:

"Discovery of interesting Usage Patterns from Web data"
 http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.33.1543&rep=rep1&type=pdfData"
Interesante :O,  usan logs para analizar el comportamiento del usuario, es viejísimo el paper pero es
como el paper que es mencionado constantemente, también uno de los que escribió el paper es el
escritor del libro:
http://www.cse.msu.edu/~ptan/
Si quieres saber de Datamining y Web, es un buen punto para leer.

"The class imbalance problem in pattern classfication and learning"
http://marmota.dlsi.uji.es/WebBIB/papers/2007/1_GarciaTamida2007.pdf
Notas:
alternativas que se pueden realizar cuando está desbalanceado el conjunto de datos,  bien sea over o under sampling, medidas de ganancia empleada, soluciones a nivel del algoritmo, mejora con ensembles, no siempre compensar la clase desbalanceada ayuda a clasificar, es mejor tener la medida de ganancia de modelo generado por ensembles, curva ROC, precisión y recall.

Este artículo está bueno leer.
http://www.datasciencecentral.com/profiles/blogs/66-job-interview-questions-for-data-scientists

"Aprendizaje Automático: Algoritmos genéticos" 2004
Quintairos
Notas: Metaheuritica, tiene buen esquema de los pasos de un algoritmo genético y no es tan viejo.

"Data Preparation for Mining World Wide Web Browsing Patterns"
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.11.3835&rep=rep1&type=pdf
Notas:
Información sobre como procesar datos provenientes de la Web, medidas como lift, confianza, belief (creencia), conjunto de creencias, las creencias pueden ser generadas manualmente en base al dominio del conocimiento, siendo esto  No práctico.  El dominio del conocimiento puede ser usado para automáticamente crear evidencia sobre las creencias.
Cobertura/ Coverage:  es la medida de la fracción total del número de transacciones que contienen al menos un item del itemset.  count (A y B) / NT
Este paper propone un modelo basado en el soporte lógico.
Establece el criterio para medir el interes o lo interesante de un atributo. pudiendo ser:
objetivo: soporte, lift, confianza. subjetivo: novelty o unexpectedness.

Web Mining tiene los siguientes tipos de dominio de información:
  1. contenido
  2. estructura
  3. usabilidad
La meta es identificar a un conjunto de creencias y usar este conjunto como filtro para identificar reglas interesantes.

Fundamental en web mining es el descubrimiento del conocimiento, y alguna expectacion definida del conocimiento  (creencias)

belief utiliza un framework de lógica difusa (Baldwin's support logic) manejando multiples fuentes de evidencia. y busca reglas que no contradigan una creencia existente.

Define evidencia como cada pieza de información (regla, termino o medida).
cada creencia posee una escala de evidencia, o evidencia necesaria. y cada creencia tiene una cantidad de ignorancia acerca de la creencia. La evidencia se clasifica en: evidencia necesaria, evidencia posible.

Las evidencias son interesantes cuando:
las creencias entran en conflicto con la evidencia.
las creencias con evidencia de la fuente.

Clasificadores Basados en Reglas:
Ripper: analiza la ganancia de la información, el conjunto de datos más pequeños, como clasificación positiva y el resto como clasificación negativa.
Prims:  No toma en cuenta el tamaño de la clase, sino que a medida que va iterando va añadiendo atributos de la clase como condición por lo que tiende a sobreajustar los datos y para ello puede hacerse prunning en cada iteración  o prunning global.

Sobre Metaheuristica:

"Improving User Profiles for E-Commerce by Genetic Algorithms"

Paper Yi-Shin and Cyrus Shanabi
Notas: meciona diferentes tipos de sistema de recomendación, técnicas de análisis de datos.
técnicas de filtrado: content-based filtering, collaborative filtering.  Cada uno tiene sus puntos beneficios y sus puntos débiles. Cabe destacar que el sistema es susceptible en generar soluciones no adecuadas si el comportamiento del usuario no es consistente, en cuanto al flujo de su navegación. Y mencionan que no existe algún mecanismo de aprendizaje automático que pueda lidiar con  comportamientos inconsistentes.
El cromosoma será decodificado en un perfil del usuario.
La función fitness toma en cuenta dos factores, promedio de satisfacción de usuarios con la lista generada, y la lista de deseos estimada para el usuario, midiendo la similaridad entre estos dos factores, mientras más parecido mejor es la lista de deseos del usuario.

"A  Review of evolutionary Algorithms for E-Commmerce"
Paper Alex. A Freitas
Menciona varios papers que  tratan de algoritmos evolutivos y su aplicación para ecommerce, tiene una aplicación muy clara de programación genética con una estructura de datos de árboles. definiciones variasGA = algoritmo evolutivo, PG = programación genética. cada iteración es una generación, la función fitness filtra los individuos que estarán en la siguiente generación. La tasa de mutación, crossover definirá los cambios que se realizan sobre la población.


"Genetic Algorithms for credit card fraud detection"
SATVIK VATS, SURYA KANT DUBEY, NAVEEN KUMAR PANDEY


"Review on evolutionary algorithms in Datamining"
A. Freitas

"A review on evolutionary algorithms in Bayesian network learning and inference tasks"
A review on evolutionary algorithms in Bayesian network learning and inference tasks

"Integración de técnicas de Minería de datos y metaheurísticas en sitios de comercio electrónico"
Barragan Edgar, Giraldo Fabián Andres. 

Modelado de Tópicos.


Cosas que me gustaría tener como referencia sobre el Modelado de Tópicos.


Papers: 
"On Smoothing and Inference for Topic Models"
http://www.ics.uci.edu/~asuncion/pubs/UAI_09.pdf
Notas:
para el cálculo de la Probabilidad Apriori utilizan PLSA ó LDA.
para el cáculo de la Probabilidad Posteriori mencionan:  Gibbs sampling, Collapsed variational Bayesian Inference, Inference Variational Bayesian, Maxímo Likehood Estimation (ME), Maximo Posteriori Estimation.

"An Estimate of an Upper Bound for the Entropy of English "
http://acl.ldc.upenn.edu/J/J92/J92-1002.pdf
Notas:
La definición de entropía como medida sobre que tan bueno o no es un modelo, por su representación en bits. cuantos bits utiliza un modelo. bits/palabras, bits/trigrams, bits/bigrams.


"Probabilistic topic models"
http://www.cs.princeton.edu/~blei/papers/Blei2012.pdf
Notas:
Una revisión bien completa y que define de forma fácil cómo funciona el modelado de tópicos.


"Latent Dirichlet Allocation"
http://www.cs.princeton.edu/~blei/papers/BleiNgJordan2003.pdf
Notas:
¿Cuantos tópicos son apropiados?, ¿Cuantas iteraciones de muestreo son necesarias?, ¿Cómo puede ser optimizado?
Exchangeability: NO significa que las variables aleatorias son independientes e identicamente distribuidas. se le define como "condicionalmente independientes" e identicamente distribuidas.
La distribución conjunta de variables aleatoriaas es simple y calculada cn la probabilidad marginal ajustada a la distribución LDA.
Los Documentos son representados como una mezcla aleatoria de tópicos donde cada tópico es caracterizado por una distribución sobre palabras.
Para variar el alfa y beta ( utiliza Newton-Rapson) estos parametros influyen en la perplejidad del modelo.
Perplejidad es una métrica que mide que tan bueno es el modelo,
Si perplejidad es menor el modelo es mejor, tiende a ser más general, y se define que el modelo hace un mejor trabajo de comprensión de la data de prueba.
Si la perplejidad incrementa, se diría que desmejora. La perplejidad es una medida de la teoría de la información, Este es el paper que da base al software de modelado de tópicos Mallet.
LDA utiliza: Distribución de probabilidad conjunta observada y aleatoria.

Algunas definiciones, creo que es de la wikipedia, son anotaciones personales:

Gibbs Samplings: Es un algoritmo del tipo MCMC (Markov Chain Monte Carlo) que permite obtener una secuencia de observaciones. Donde sus valores son una distribución de probabilidad multivariada (es decir la unión de distribuciones e probabilidades diferentes de 2 o más variables) .
Esta secuencia puede ser usada para aproximar distribuciones que no siguen una distribución conocida sino que contiene partes de varias.

Gibbs Samplings es comúnmente usado en la estadística de inferencia, especialmente por la inferencia bayesiana. Es un algoritmo de resultados aleatorios por lo que en cada ejecución arroja diferentes resultados.
Gibbs Samplings genera una cadena de Markov donde cada elemento está relacionado con el inmediato siguiente, y no con el resto de eventos pasados. (ley de memoria distribución exponencial, La probabilidad de ocurrencia de eventos presentes o futuros no depende (eventos independientes) de los que hayan ocurrido en el pasado)
Gibbs para datos continuos --> se divide en carpetas (bin) y se utiliza ME (expectation maximization)
para datos discretos --> Maximun Posteriori. Mallet utiliza Gibbs Sampling por defecto, sin embago se puede modificar.
tf-idf,  valora palabras basado en cuan especial son ellas a un documento en particular con un gran corpus. LSA utiliza este score con una matriz de documentos y términos.  otra forma es a través del SVD (singular value descomposition) permite descubrir como una palabra se encuentra relacionada con la otra.
pLSA asume  que un documento es un conjunto de tópicos, más no de palabras (los tópicos son generados primeros que los documentos.).


Saturday, August 10, 2013

Mallet How to.



En linux es realmente sencillo, sólo descargar y exportar la variable de ambiente en la terminal/línea de comando/consola. En Win igual sólo que hay que saber como editar las variables de entorno.

export MALLET_HOME = 'ruta/donde/esta/mallet'

En general Mallet viene con stopwords definidas para inglés y alemán. Se encuentran en el directorio stoplists. En caso de añadir nuevas stopwords colocarlas en este directorio por llevar un orden, realmente se pueden colocar en cualquier sitio ya que luego en el comando se le añade la ruta del listado de palabras que se desean eliminar.

sample-data: directorio con data de ejemplo.
bin: directorio con el binario, a usar para ejecutar mallet.
test:
src: se puede ver el código de mallet en su mayoría se reduce a contar palabras, el 90 % del tiempo esto es lo que se hace cuando nos referimos a text mining.

Yo creé un directorio llamado data: ahí están todos los txts, de los cuales quiero extraer los tópicos, Mallet también lee el formato csv, donde la primera columna es el título y el resto es el contenido o texto que quiero analizar. cada línea sería un texto o documento diferente.

cosas que no vamos a tocar, ni mirar:
pom.xml, build.xml, Makefile : archivo de configuración de Maven.
lib: librerías para que funcione mallet, un monton de archivos jar.
dist: Archivo jar que contiene la funcionalidad de mallet.
class: archivos binarios ya compilados de Java.



Obtener el formato mallet desde un archivo csv:

./bin/mallet  import-file --input allmyfavorites.csv --output myfavorites.mallet

Obtener el formato Mallet de aproximadamente 6500 articulos:

bin/mallet import-dir --input ./data \
--keep-secuence  true \
--output noticias.mallet \
--stoplist-file ./stoplists/stopwords.txt
comenzó: 5:18 termino 5.19. para 6000 documento bastante rápido veamos..
lo siguiente, hará el trabajo de obtener tópicos mediante el algoritmo LDA:

bin/mallet train-topics \
--input noticias.mallet \
--optimize-interval 20 \
--num-topics 20 \
--word-topic-counts-file  noticias_word-topic-counts.txt \
--output-state noticias-topic-state.gz \
--output-topic-keys noticias_keys.txt \
--output-doc-topics noticias_composition.txt 
Comenzó a las 5.22 aplicando LDA a 6500 documentos.
Terminó : 6y22 :( al menos lo hizo y no dió error de memoria :)
Total time: 56 minutes 46 seconds

Los archivos de salida son 3:

noticias_keys.txt tendría todos los tópicos que encontró el algoritmo.
noticias_composition.txt tendría todos los tópicos, y la porción de cada tópico en cada documento, de este archivo se puede realizar grafos, heatmap, treemap, y es el que contiene la información que podría definir similaridad entre documentos.
noticias-topic-state.gz contiene todas las palabras, que encontró en los distintos documentos, podría servir para hacer una nube de palabras, y para analizar globalmente con R.

Esto se realizó siguiendo este tutoríal: http://programminghistorian.org
La fotografía, es de una exposición donde las ilustraciones deben reflejar lo que contiene el texto de la derecha de la imagen.
Licencia, Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported


Mas info y scripts: https://github.com/j3nnn1/topic_model


Thursday, August 1, 2013

Modelado de Tópicos "automagically".


Es una técnica para tratar documentos que no tienen alguna categorización,
y asume que cada documento es una mezcla aleatorias de categorías o tópicos
donde cada categoría es definida por la preferencia de algunas palabras
sobre otras. Finalmente pretendemos que vamos a generar cada palabra
en cada documento desde 0 una y otra vez, y aleatoriamente escogemos una
categoría y de esta categoría escogemos una palabra que representen dicha
categoría basado en la preferencia de esta palabra sobre otras.

Un tópico en el contexto de modelado de tópicos es una distribución
de probabilidades de palabras para un conjunto, e indica la probabilidad
que una palabra aparezca en un documento  sobre un tópico en particular.

Resumen.

1 - El modelado de tópicos asume que las palabras que comprende el texto
fueron generadas aleatoriamente. (mmmjum si claro, y en la luna ha oxigeno.)
2 - Su objetivo es Inferir una convincente respuesta bajo la asunción que el punto
1 siempre es verdadero.

Poco creíble ¿no?, pero lo cierto es que segun lo leído en su mayoría funciona.
Comentan que el potencial del modelado de tópicos no se observa en cada
documento individualmente, sino más bien en un enfoque global analizando
grandes cantidades de documentos para visualizar patrones entre ellos. Esto
me trae buenos recuerdo de Bertalanffy y su teoría general de sistemas.


Para definir un proyecto de modelado,  consta de 5 atributos:

1 - ¿cual es el corpus a analizar?
2 - ¿qué técnica o algoritmo de modelado se va a aplicar?
3 - ¿Cual es la unidad de Análisis?
4 - ¿Como fue el postprocesamiento?
5 -¿Puedo visualizarlo mediante y gráfico y cómo?

Los Proyectos de modelado de tópicos se dividen en:

Proyectos de enfoque sincrónico: en el cual el valor de la unidad de análisis
no posee límite de tiempo, o mejor dicho no se identifica con una brecha de
tiempo.

Proyecto de enfoque diacrónico: La unidad de analisis de tiempo se genera
en un fecha o rango de fecha definido.

Respondiendo esto de acuerdo a un proyecto que tengo actualmente:
1 - ¿cual es el corpus a analizar?
    noticias, artículos y opiniones de 10 periódicos en internet,
    bajo la sección de economía, sin tomar en cuenta la fecha
    en la que se hizo el fetch de la url.
2 - ¿qué técnica o algoritmo de modelado se va a aplicar?
    Vanilla LDA Mallet. (Distribution Dirichlet?)
 3 - ¿Cual es la unidad de Análisis?
    1 documento = 1 noticia.
4 - ¿Como fue el postprocesamiento?
    si el tiempo es generoso con nosotros hacer cluster en R
    en base a esta data de tópicos.
5 - ¿visualización?
   un heapmap sería una buena opción. Si murphy no anda cerca.
   un gráfico de líneas,  con variable x = tiempo y scoring
   de relevancia y cada línea sería un tópico diferente.

Referencia.
topic-modeling-in-the-humanities-an-overview

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 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)


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/
 

Thursday, February 28, 2013

Twitter permite bajar todos tus tweets

      Luego que twitter permitiera descargar todos tus tweets,  hice una nube de palabras con la librería de R y la librería tm. En general sólo necesitas 2, pero con el colorcito son 3:

library("tm")
library("wordcloud")
library("RColorBrewer")

      Sin analisis temporal, paso todos los tweets a un archivo (bag of words):
aproximadamente 22000 palabras diferentes desde el 2009 hasta ahora en
8999 tweets. Sí, lo sé, tweet-a-holic en rehabilitación (hay peores :P).

      La buena Noticias es si han cambiado los temas menos "Yoiismo"  (el arte de hablar de cada actividad que realizá uno mismo), a mencionar enlaces y opiniones de  linux, datamining, R, y varios lenguajes de programación.

cut -d, -f8 tweets.csv  > corpustweets.txt

Luego leo este archivo desde R.
en mi sistema de archivo existe la carpeta tweets/corpus/tweets.txt

txt =  DirSource('C:\\tweets\\corpus')    //Esto debe ser un directorio.
tweets.corpus = Corpus(txt)
                //extensión del tipo de archivo.

Luego hacemos la matriz de documentos y la conversión a una matriz ordinaria (matrix)
Filtrado de signos de puntuación, llevando a minúscula y eliminando stopwords (palabras que no añaden semantica a la oración, como artículos y conjunciones: el , la, otros, y, etc).
 tweets.corpus <- tm_map(tweets.corpus, removePunctuation)  
 tweets.corpus <- tm_map(tweets.corpus, tolower)  
 tweets.corpus <- tm_map(tweets.corpus, function(x) removeWords(x, stopwords("spanish")))  
 tweets.corpus <- tm_map(tweets.corpus, function(x) removeWords(x, stopwords("english")))  
 wordcloud(d$word,d$freq, scale=c(8,.3),min.freq=2,max.words=Inf, random.order=FALSE, rot.per=.15, colors=pal2, ordered.colors=T, vfont=c("sans serif","gothic english","plain"))  


//otras funciones que realizan similares 
commonality.cloud(m, comonality.measure=min) 
comparison.cloud(m)

Más info en: 
 
http://cran.r-project.org/web/packages/wordcloud/wordcloud.pdf

script R:  
 
https://github.com/j3nnn1/tools/blob/master/twitter/wordcloudTwitterText.r


En otro post revisaré un poco reglas de asociación, clustering de palabras, 

correlaciones, un ranking de mis seguidores, y luego un poco de grafos..

Thursday, November 1, 2012

Renderizado de los gráficos en R es lento.


Ayer actualicé mi máquina, y bueno pasó  que cada vez que realizaba una gráfica no se actualizaba el gráfico en la ventana de R, supongo que por alguna actualización de Xorg o el driver, supongo que alguna configuración habrá cambiado, por lo que el renderizado era lento, muy muy lento.

preguntando al tío Google, existe una forma de modificar las opciones de las X para R, siempre y cuando se tenga acceso al servidor  de las X.

leí que esta opción es más rápida:

X11.options(type="Xlib")

y esta opción no esta disponible si no se tiene la librería. Tiene más caracteristicas pero no es tan rápida como Xlib.


X11.options(type="cairo")

Para más información:
http://stat.ethz.ch/R-manual/R-patched/library/grDevices/html/x11.html

Monday, October 1, 2012

Pasar una matriz a un vector.


 
Una matrix de 10x10 => resultará un vector de 100 elementos.
 
mx <- code="code">matrix(rnorm(100,1:100),10,10)
vec <- code="code">c(mx)
 
En mi caso estoy usando una matriz de distancia, para obtener la distribución de las distancias y ver en que punto de corte se considera una estrella perteneciente a Hyades o no. Esto lo subiré después y más ordenado. La imagen es tomada de: http://hubblesite.org/newscenter/archive/releases/2012/37/image/a/format/large_web/

Wednesday, August 15, 2012

Formatos para reglas de asociación.

Formatos para obtener reglas de asociación.
Single:

IDtransaccion1, Producto1
IDtransaccion1, Producto2
IDtransaccion1, Producto3
IDtransaccion1, Producto4

Basket:

IDtransaccion1, Producto1, Producto2, Producto3, Producto4
IDtransaccion2, Producto1, Producto6, 
IDtransaccion3, Producto1, Producto2, Producto3, Producto4, Producto5,  Producto6

Basket no difuso:

IDtransaccion1, Producto1, Producto2, Producto3, Producto4
IDtransaccion2, Producto1, Producto2, Producto3, Producto4
IDtransaccion3, Producto1, Producto2, Producto3, Producto4
IDtransaccion4, Producto1, Producto2, Producto3, Producto4
IDtransaccion5, Producto1, Producto2, Producto3, Producto4

En Modeler, Transacional es el formato single. Y Tabular es el formato basket no difuso, es decir sus columnas siempre son iguales , y sus valores tienen ausencia o presencia de productos.

weka puede recibir un archivo csv, sin embargo requiere ser transformado a su formato natico arff, y recibe el formato basket difuso y no difuso.

En orange, recibe el formato basket, difuso y no difuso, pero separado con tabs.

R lee formato basket (difuso o no) y single.

La tetera me recuerda a kettle, que sirve para organizar, y preprocesar la data antes de ejecutar cualquier algoritmo.