A blog about data, information and IT, by Mario Alberich

Sep 15
2008

Análisis web com Piwik y GNU R (I)

La principal debilidad en el lado del cliente es que la recogida de estos datos funciona con javascript, por lo que si el navegador lo tiene desactivado, estos datos no se recogen. (Ref. a diferencias entre log servidor y cliente).

Para organizar esta información, normalmente se estructura en base a usuarios, visitas, y páginas vistas.  Hay un documento con definiciones muy bien planteadas (PDF)  para esta información básica en el sitio de la Web Analytics Association.  Para estructurar esta información se utiliza como elemento base el código de sesión. Este código es un valor único que el navegador del usuario almacena en su cookie .

Normalmente el servidor elimina los datos de sesión al cabo de un tiempo después del a última petición del usuario (pocos minutos por lo general), mientras que el navegador puede borrar la cookie cuando caduque o cuando el usuario lo solicite.  La diferencia entre la información a nivel cliente y servidor es el quebradero de cabeza para desglosar usuarios y visitas.  Sabemos con bastante fiabilidad cuándo se inicia o se acaba una visita, pero no podemos tener claro si una nueva visita se corresponde con un usuario anterior si la cookie se ha borrado.

En cambio, si la cookie existe, volverá a enviar el código de la última visita.  El gestor de analíticas habrá almacenado este código para poder identificar a ese usuario, y aunque le asigne un código nuevo, ya dispondrá de una relación entre dos visitas.

A este embrollo hay que añadir que un equipo no se corresponde con un usuario.  Los cibercafés, los PCs en centros académicos y el ordenador "de la familia" son ejemplos claros de este hecho.  Por lo tanto, la fiabilidad de los usuarios únicos es relativa, mientras que las páginas vistas y las visitas son datos mucho más fiables.

Con estos tres niveles de datos se pueden extraer informaciones interesantes.  Algunas de ellas son indicadores de sobra conocidos, como las páginas por visita, tiempo entre dos visitas de un usuario, páginas más vistas, etc.

Hasta aquí la teoría básica de las analíticas web.  Hay muchos recursos al respecto, el problema es filtrar qué recursos son más interesantes.


Uso de Piwik

El siguiente paso es tener acceso a estos datos.  Hay variedad de formas, aunque los más conocidos son el análisis de logs del servidor (análisis transaccional). Dado que puede interesar disponer de más información que la que proporciona el servidor, yo voy a utilizar los datos que proporciona la aplicación Piwik, una herramienta de código abierto desarrollada con PHP y con licencia GPL que permite acceder a esta información ya estructurada en una base de datos MySQL.

Visto lo anterior, escojo Piwik como herramienta de analítica web porque me permite acceder de forma estructurada a los datos, pero hay otras que también permiten esas funcionalidades. Está por ejemplo PHPMyVisits , que incluye además una funcionalidad para obtener el heatmap de clics de los usuarios (integrando ClickHeat desarrollado por labsmedia ).

Volviendo a Piwik, su web proporciona una imagen sencilla de su _esquema de la base de datos_ que almacena la información de la aplicación.  En este esquema, hay que destacar tres tablas, que son las que almacenan los datos de navegación como tales:

  • piwik_log_visit: Almacena los datos relativos a una visita.  Dado que se espera que cada visita mantenga los parámetros de equipo y navegador, no es necesario generar redundancia a cada clic del usuario.  Esta tabla incluye datos sobre cookie, localización, página de origen (referer ), opciones del navegador y del equipo, etc.
  • piwik_log_link_visit_action: Almacena los datos de la página vista.  Esto incluye un código único de URL actual (lo comento en la siguiente tabla), código de URL de origen, y el tiempo de estancia en esta página.  Esta tabla será importante en el momento de realizar un análisis de la navegación. 
  • piwik_log_action: Es una tabla auxiliar donde se almacenan las URL solicitadas, un registro por URL.

A todo esto hay que decir que Piwik genera tablas-resumen mensuales de los datos.  Estas tablas se tienen el formato piwik_archive_numeric_AÑO_MES y piwik_archive_blob_AÑO_MES. Estas tablas ayudan a mantener un tamaño reducido de las tablas anteriores, y siguen permitiendo el acceso a los datos básicos de fechas (tablas ..._numeric_...) o a los datos completos (tablas ..._blob_...).

Con todo esto, sólo queda añadir que el prefijo piwik de todas las tablas viene por defecto pero es posible cambiarlo en la fase de instalación de la aplicación.

La razón de existencia de la última tabla es que evita la redundancia de piwik_log_link_visit_action. Teniendo en cuenta que esta es la tabla que almacenará más datos, esto es importante para la agilización en la inserción de datos.

Analizando más a fondo la tabla piwik_log_visit, podemos ver que existen los campos visitor_idcookie y visitor_returning.  Estos datos nos permiten relacionar visitas para identificar a los "usuarios únicos", siempre teniendo en cuenta las consideraciones que comentaba antes.

Con estas tres tablas tenemos la estructura usuario-visita-página, necesaria para empezar a extraer información de forma estructurada.

En el próximo post empiezo a comentar las consultas SQL para extraer datos, los objetivos del análisis y su aplicación en GNU R.

Tags

gestión documental 10     Recuperación información 11     Linux 7     Usabilidad 5     open source 3     Tagging 12     lógica borrosa 2     fuentes de información 12     Google 6     off-topic 6     spam 2     grafos 6     Web social 11     modelización 12     Productividad 11     buscadores 2     utilidades 17     Profesionales 9     SEO 5     estándares 3     veracidad 3     relevancia 2     lingüística 2     PLN 2     lenguajes documentales 2     apis-mashups 3     reseñas 7     Flash 7     Gráficos estadísticos 13     Publicidad 3     Innovación 5     muestreo estadístico 9     PHP 14     internet 2     testeo 12     desarrollo 3     visualizacion 36     javascript 16     datos abiertos 9     elecciones 2     simulación 5     html5 7     phing 9     ssh 2     seguridad 3     indicadores 2     demografía 3     media 2     algoritmos 7     shell 4     mysql 2     backup 2     big data 6     twitter 2     d3js 11     revealjs 2     metodología 6     data-journalism 6     smartcities 2     NYT 2     privacidad 3     benchmarking 4     recopilaciones 21     magento 5     formacion 2     github 2     HHVM 3     psicología 2     angularjs 3     grep 2     nodejs 5     promises 2     mapreduce 3     crossfilter 2     exploración de datos 2     machine learning 2    

© 2007 and beyond Mario Alberich, licensed under CC-BY-SA unless stated otherwise.