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

Sep 16
2008

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

Consideraciones previas


El tratamiento de datos viene precedido por una fase de trastienda que consiste en la limpieza de datos. Esta limpieza de datos no consiste en eliminar lo que no queramos saber: se trata de sólo escoger los datos que son necesarios para los objetivos que se plantea el análisis.

Incluso en la colección de datos que nos interesa, es habitual encontrar datos defectuosos fruto de la recogida de información (el trabajo de campo) que también deben ser eliminados para conseguir una mayor fiabilidad de la información.

En el siguiente ejemplo descarto datos de acuerdo con los objetivos que me planteo, pero no hago una limpieza posterior, con una doble intención: comprobar que es necesario, y ver que los datos erróneos también tienen unas características propias, que son detectables con métodos estadísticos básicos.

Objetivos


El objetivo principal de la extracción de datos es analizar la afluencia de tráfico que se generan a partir de los enlaces que pongo en los posts, y verificar si hay variaciones substanciales entre enlaces.

Este análisis podría dar paso a búsquedas posteriores para determinar si existe alguna relación entre tales enlaces y sus características propias (número de palabras del enlace, términos utilizados en el enlace) como ajenas (posición en el conjunto del texto, posición dentro del párrafo, posición en una frase). De todos modos este estudio más complejo que dejo al margen para otras ocasiones.

Extrayendo datos de Piwik


Con una consola o cliente de MySQL se pueden recuperar los datos anteriores.  Vale la pena (obviamente) realizar el análisis en una máquina diferente a la que almacena los datos, si es que la máquina está totalmente en funcionamiento.

Por ahora vamos a extraer una serie de datos para tener una idea de la información que hay almacenada en la base de datos.

Empezaremos por comprobar cuántas salidas genera el blog hacia otros sitios. Para ello, ejecuto la consulta:

SELECT pla.name,count(*) salidas FROM `piwik_log_visit` plv inner join piwik_log_action pla on plv.visit_exit_idaction=pla.idaction WHERE pla.name like 'http%' and pla.name not like '%sopadebits.com%' group by visit_exit_idaction order by salidas desc

La consulta selecciona los nombres de los sitios que han recibido visitas desde un enlace en mi blog.  Para detectar los sitios externos, filtro los datos teniendo en cuenta que el campo name de la tabla piwik_log_action empiece por "http" [pla.name like 'http%'] y que no contengan el dominio del post [pla.name not like '%sopadebits.com%']. Ordeno el resultado según la cantidad de visitas (de más a menos):

El resultado es parecido a:













idaction  URL Visitas
 6 http://teethgrinder.co.uk/open-flash-chart  27
 24 http://www.um.es/dp-lengua-espa/revista/vol7/relevancia.pdf  6
 31 http://articles.techrepublic.com.com/5100-10877_11-6160661.html  5
 135 http://jlibrary.sourceforge.net  3
 106 http://www.vectorsite.net/tsawk_3.html  3
 11 http://jlibrary.sourceforge.net/12/screencast3.html  2
 53 http://espanol.answers.yahoo.com/question/index?qid=20070723132213AA3U5yy  2
 107  http://www.deakialli.com/2007/09/13/bibliotecas-publicas-servicios-electronicos-de-informacion-y-web-social  2
 ...  ...

Ahora quiero comprobar si alguno de los enlaces más solicitados está recibiendo una relación de salidas más alta que los otros. Es decir, quiero medir el  ratio de click-through. Para eso voy a hacer dos consultas: primero, averiguar qué páginas de mi blog dirigen hacia estos enlaces, y luego consultar el número de visualizaciones de estas páginas.

Dividiendo el número de visualizaciones por el número de salidas, tendré el ratio de click-through. El primer paso se consigue con la consulta siguiente:

select distinct pllva.idaction_ref,pllva.idaction from piwik_log_action pla inner join piwik_log_link_visit_action pllva on pla.idaction=pllva.idaction_ref where pllva.idaction in (6, 24, 31, 135, 106, 11, 53, 107)


Ahora tenemos que los enlaces anteriores salen de las siguientes páginas:


















name idaction_ref idaction
content/view/open-flash-chart-graficos-estadisticos-open-source 5 6
content/view/jlibrary-gestor-documental-open-source 10 11
content/view/organizacion-de-la-informacion-personal-eliminando-archivos-duplicados 30 31
content/view/normalizacion-distancias-normalizadas 7 53
content/view/teoria-de-la-relevancia-en-linguistica 8 24
http://www.um.es/dp-lengua-espa/revista/vol7/relevancia.pdf 24 24
content/view/www.themedicieffect.com 61 107
content/view/efecto-medici-innovacion-interdisciplinar 27 107
content/view/trabajando-con-subversion-y-awk 12 106
http://www.vectorsite.net/tsawk_3.html 106 106
content/view/jlibrary-gestor-documental-open-source 10 135
content/view/descargas 17 6
extranet/open-flash-chart-graficos-estadisticos-open-source 144 6

En esta tabla, idaction_ref es el id de la página de origen, e idaction se corresponde con los enlaces externos.  Por lo tanto, tenemos que las páginas del blog que enlazan a los recursos anteriores tienen los id de acción [5,10,30,7,8,24,61,27,12,106,10,17,144].

De todos modos, en estos datos nos encontramos con dos temas:

  • vemos que las acciones 5 y 144 son equivalentes.
  • Vemos que las acciones 24 y 106 vuelven a ellas mismas, lo que sin duda es un error (quizá debido a un doble click del usuario mientras se procesa la consulta o algo por el estilo).


Las acciones 5 y 144 se tratarán pues como una sola entrada, mientras que  las acciones  24 y 106 deben eliminarse de la lista. Esto indica que un proceso de limpieza debería eliminar los datos cuyos valores de idaction e idaction_ref coinciden.

Nos quedamos entonces con los ítems  [5,10,30,7,8,61,27,12,10,17,144].  Ahora queda ejecutar la consulta para las páginas vistas de cada ítem:

select pla.idaction,pla.name,count(*) paginas_vistas from piwik_log_link_visit_action pllva inner join piwik_log_action pla on pllva.idaction=pla.idaction where pla.idaction in (5,10,30,7,8,61,27,12,10,17,144) group by pla.name order by paginas_vistas desc


La consulta devuelve un resultado como el siguiente (agrupando las acciones 5 y 144):













 idaction name  paginas_vistas
 5+144 content/view/open-flash-chart-graficos-estadistico... 354
 7 content/view/normalizacion-distancias-normalizadas 158
 30 content/view/organizacion-de-la-informacion-person... 149
 8 content/view/teoria-de-la-relevancia-en-linguistic... 97
 12 content/view/trabajando-con-subversion-y-awk 96
 27 content/view/efecto-medici-innovacion-interdiscipl... 56
 10 content/view/jlibrary-gestor-documental-open-sourc... 44
 17 content/view/descargas 42
 61 content/view/www.themedicieffect.com 8

Combinando esta tabla y la de visitas por URL, tenemos un ratio de click-through entre páginas y enlaces:













 idaction


name


 pag_vistas


enlaces_salientes


%CTR


 5


content/view/open-flash-chart-graficos-estadistico...


354


29


8,19%


 7


content/view/normalizacion-distancias-normalizadas


158


3


1,90%


 30


content/view/organizacion-de-la-informacion-person...


149


5


3,36%


 8


content/view/teoria-de-la-relevancia-en-linguistic...


97


6


6,19%


 12


content/view/trabajando-con-subversion-y-awk


96


3


3,13%


 27


content/view/efecto-medici-innovacion-interdiscipl...


56


2


3,57%


 10


content/view/jlibrary-gestor-documental-open-sourc...


44


6


13,64%


 17


content/view/descargas


42


0


0,00%


 61


content/view/www.themedicieffect.com


8


2


25,00%



De lo anterior hay que sacar muchas conclusiones, pero especialmente una: antes de tratar con datos estadísticos es necesario hacer una purga que sólo nos deje con los datos necesarios de acuerdo con unos objetivos.

Por ejemplo, el enlace 61 es claramente un error, probablemente debido a un error en la introducción del enlace.  El click-through que presenta puede ser debido a que el usuario trata de accede r repetidas veces al enlace. Es probable que se pudiera unificar con la acción 27 (el post sobre el efecto Medici), y que los dos clicks fueran porque el usuario vuelve a intentar el enlace.

El cálculo aporta información interesante, aunque no significativa.  De lo anterior sólo  los tres primeros enlaces tienen datos suficientes como para sacar alguna conclusión. Entre ellos cabe destacar en positivo el enlace de open-flash-chart y en negativo el de las distancias normalizadas.

Sobre el resto, precisamente el enlace del Medici Effect aporta información interesante...  pero para corregir errores. Esto en sí mismo es interesante porque el detectar que el ratio  varía bastante (aunque es poco significativo por los pocos datos). éste es un caso determinado nos induce a pensar que algo sucede. Pero no era el objetivo de estas consultas.

También cabe comentar que todo este proceso podría haberse realizado con una sola consulta, máximo dos.  En cualquier caso estas consultas no serían eficientes en un servidor a pleno rendimiento.

El siguiente paso (en otro artículo) será extraer datos globales de las relaciones entre enlaces para realizar un análisis basado en cadenas de Markov. Para eso utilizaremos el paquete estadístico 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.