Echando código: Haciendo data mining con PostgreSQL y Java, Parte II

En un articulo anterior yo les comentaba como hacer parsing the una bitacora de un servidor web Apache utilizando Java y PostgreSQL; También les comentaba que con SQL tenemos una flexibilidad increible para obtener y manipular los datos. Sin embargo, para que la presentación de los datos luzcan un poco más profesionales deberíamos usar un generador de reportes; De esa manera trabajamos menos y podemos repetir los resultados con otro tipo de reportes.

¿Porqué utilizar un generador de reportes? La razón más sencilla es que usted tiene cosas más importantes que hacer que generar un reporte que se vea bonito, usted debe concentrarse en solucionar problemas como administrador; Por otro lado, usando un generador de reportes usted puede fácilmente controlar el aspecto de sus datos (convirtiendolos en información) mientras utiliza lo obtenido ya sea para solucionar problemas o para comunicarle algo importante a sus clientes en un lenguaje que ellos puedan entender.

Empecé evaluando varias aplicaciones. La primera que traté de usar se llama ‘DataVision‘.

Yo tuve unos cuantos problemas usandolo con PostgreSQL y JDBC:

  • Manejo de el tipo de datos CIDR. No es texto, así que si quieren ver la dirección IP de la máquina en cuestion, deberán convertirlo a texto utilizando la función host (por ejemplo: select host(ip_addr) from http_log). Para más información, vean aquí las rutinas de manipulación de datos de tipo CIDR.
  • Bajese la última versión del manejador de JDBC para su base de datos. Yo tuve problemas con una versión vieja, asi que me busque el manejador para PostgreSQL 7.4.

El manual de DataVision es bastante preciso en cuanto a como proceder para obtener los reportes y para controlar la apariencia de los resultados. La mejor forma de probarlo es convertir uno de los SQL que escribimos anteriormente al reporte. Voy a utilizar uno sencillo:

  -- Count all IP addresses (including repetitive hits from the same IP address) that have visited the site for each day
SELECT log_date as Date ,count(ip_addr) AS "Visits"
FROM http_log
GROUP BY log_date
ORDER BY log_date DESC;

En mi caso, salida de esta consulta me retorna lo siguiente:

Date Visits
2005-03-25 246
2005-03-24 868
2005-03-23 743
2005-03-22 780
2005-03-21 824
2005-03-20 673
2005-03-19 644
2005-03-18 311

El primer golpe al usar esta herramienta, es que no soportaGroub By‘ en el SQL. Si usted quiere agrupar los datos, deberá dejar que sea Datavision quien lo haga. Eso puede que sea un inconveniente serio, dependiendo de la complejidad de el SQL. Como no puedo utilizar ‘group by’, entonces debo cambiar mi estrategia para contabilizar los totales por día; Eso no me agrada mucho, ya que yo quisiera concentrarme lo menos posible aprendiendo la herramienta, y más tiempo resolviendo el problema que tengo a la mano, asi que lo mejor es seguir buscando.

Revisando SourceForge otra vez, consigo que existe otro generador de reportes llamado ‘JasperReports‘. Parece ser que esta herramienta cuenta con un soporte inmenso de la comunidad Open Source, y decido bajarme una interfaz gráfica para la herramienta llamada Ireport.

Usando un ‘Wizard’ obtuve mi primer reporte en 30 minutos. Increible, justo lo que yo quería, sin limitaciones en el SQL:

iReport logreport screenshot

Lo que sale en la pantalla es el reporte, el cual puede ser guardado en varios formatos (HTML, PDF, etc). Increiblemente conveniente, flexible. Justo lo que un SA con tiempo limitado necesita.

La creación de el reporte se limito a escoger la fuente de datos (no limitada a bases de datos), el diseño de la plantilla, compilarla y finalmente ejecutarla. Luego de correr el reporte, este se puede guardar en el disco duro en el formato de salida que se desee, además de que la plantilla de el reporte se puede guardar para una futura ocasión.

Puede bajarse mi reporte desde aquí.

2 thoughts on “Echando código: Haciendo data mining con PostgreSQL y Java, Parte II

  1. Quihubo Angel Negro, ¿que tal la semana santa gringa?

    Sólo como comentario, Yo tengo entendido que a la generación de reportes, cuando se hace hacia otra base de datos y usando estructuras multidimensionales, le llamaban “Data Warehouse”, o “Data Warehousing” según el caso, claro.

    Cuando a éste le aplicabas algoritmos de inteligencia artificial, para descubrir tendencias ocultas o patrones ocultos de información, le llamaban “Data Mining”.

    (Es cierto, que es medio echón el comentario, pero son conceptos viejos que tengo que es probable que estén desactualizados)

  2. Hola Technorrante,

    La Semana Santa aquí tiene otro matiz, de hecho yo vine a trabajar el viernes 😀

    Vamos a ver un poco las definiciones (con ayuda de el pana Google).

    Buscando en Google por ‘define:Data Warehouse’ nos sale:

    ‘According to William Inmon, widely considered the father of the modern data warehouse, a Data Warehouse is a “Subject-Oriented, Integrated, Time-Variant, Nonvolatile collection of data in support of decision making”. Data Warehouses tend to have these distinguishing features: (1) Use a subject oriented dimensional data model; (2) Contain publishable data from potentially multiple sources and; (3) Contain integrated reporting tools.
    http://www.peaksoftware.com/glossary/

    Así que tienes razón, lo que estamos haciendo aquí cuadra a la perfección. El titulo debería ser ‘Data Warehousing’ 🙂

    Ahora vamos a ver que sale para ‘Data Minning (define:Data Mining)’:

    ‘# An information extraction activity whose goal is to discover hidden facts contained in databases. Using a combination of machine learning, statistical analysis, modeling techniques and database technology, data mining finds patterns and subtle relationships in data and infers rules that allow the prediction of future results. Typical applications include market segmentation, customer profiling, fraud detection, evaluation of retail promotions, and credit risk analysis.
    http://www.twocrows.com/glossary.htm

    # Nontrivial extraction of implicit, previously unknown and potentially useful information from data, or the search for relationships and global patterns that exist in databases. [Bob Klevecz “The Whole EST Catalog” Scientist 12 (2): 22 Jan 18 1999] more… Algorithms & data analysis glossary
    http://www.genomicglossaries.com/content/chemoinformatics_gloss.asp

    Si bien se pueden utilizar las técnicas que tu mencionas, no tienen que ser tan sofisticadas para ser llamado ‘Data Mining’. Además, el proyecto tiene todo el potencial para aplicar eso y más (aunque lo que yo hice fué un reporte bien pendejo).

    No te preocupes por lo de pedante pana, aqui estamos todos para aprender 🙂

    Un abrazo,

    JV.

Comments are closed.