Professional Documents
Culture Documents
FACULTAD DE INGENIERA
UNIVERSIDAD DE BUENOS AIRES
Damin A. MARTINELLI
-2-
Agradecimientos
A mi familia por apoyarme y aconsejarme siempre. A mis
amigos porque siempre estn disponibles para un momento de
esparcimiento. A los profesores que me ensearon tantas cosas en
estos aos de estudio. A Hernan y Paola por guiarme en el
crecimiento de esta tesis. Y en especial a Naty, el amor de mi vida,
que me acompa y alent en todo momento.
Damin A. MARTINELLI
-3-
Damin A. MARTINELLI
-4-
RESUMEN
En esta Tesis se propone la utilizacin de redes neuronales
artificiales para la identificacin de hbitos de uso de sitios Web,
estudiando cmo pueden ser adaptadas para llevar a cabo con xito
esta tarea. Los resultados obtenidos son analizados y contrastados
con mtodos tradicionales de modo de poder valorar la solucin
propuesta.
ABSTRACT
This Thesis Research proposes the use of artificial neuronal
networks to identify the habits of web site usage and how they can
be adapted to reach this goal. The results obtained are analyzed and
compared with traditional methods in order to measure the proposed
solution.
Damin A. MARTINELLI
-5-
Damin A. MARTINELLI
-6-
INDICE
Agradecimientos..................................................................................................................... 3
RESUMEN ............................................................................................................................. 5
ABSTRACT ........................................................................................................................... 5
1. Introduccin........................................................................................................................ 9
2. Estado de la Cuestin ....................................................................................................... 12
2.1. Explotacin de Datos................................................................................................. 12
2.1.1. Descubrimiento de Reglas de Asociacin .......................................................... 15
2.1.2. Clasificacin de Datos ........................................................................................ 16
2.1.3. Agrupacin de Datos .......................................................................................... 17
2.1.4. K-Means ............................................................................................................. 19
2.2. Explotacin de Datos en la Web................................................................................ 20
2.2.1. Explotacin de Datos en el Contenido de la Web .............................................. 20
2.2.2. Explotacin de Datos en la Estructura de la Web .............................................. 21
2.2.3. Explotacin de Datos de Uso de la Web ............................................................ 21
2.3. Explotacin de Datos de Uso de la Web ................................................................... 21
2.3.1. Prepocesamiento................................................................................................. 22
2.3.2. Descubrimiento de Patrones ............................................................................... 24
2.3.3. Anlisis de Patrones............................................................................................ 25
2.4. Trabajos Realizados en la Explotacin de Datos de Uso de la Web ......................... 25
2.5. Self Organizing Maps (SOM).................................................................................... 27
2.5.1. Algoritmo del SOM ............................................................................................ 28
2.5.2. Arquitectura de la red SOM................................................................................ 28
2.5.3. Funcionamiento .................................................................................................. 29
2.5.4. Preprocesamiento de los datos............................................................................ 30
2.5.5. Aprendizaje......................................................................................................... 30
2.5.6. Visualizacin ...................................................................................................... 32
2.5.7. Aplicaciones ....................................................................................................... 33
2.6. Similitudes y Diferencias SOM y K-Means .............................................................. 33
3. Descripcin del problema................................................................................................. 35
4. Solucin propuesta ........................................................................................................... 36
4.1. Identificacin de los parmetros del problema.......................................................... 36
4.2. Definiciones............................................................................................................... 37
4.2.1. Archivos de Log ................................................................................................. 37
4.2.2. Preprocesamiento de Logs.................................................................................. 38
4.2.3. Limpieza de Logs ............................................................................................... 39
4.2.4. Identificacin de Usuarios .................................................................................. 40
4.2.5. Identificacin de Sesiones de Usuario................................................................ 41
4.2.6. Identificacin de Transacciones de Usuarios ..................................................... 42
4.2.7. Identificacin de Hbitos de Usuario ................................................................. 43
4.3. Mtodo de Generacin de Casos de Experimentacin .............................................. 43
4.4. Descripcin del Banco de Pruebas ............................................................................ 43
4.4.1. Funcionalidades .................................................................................................. 43
4.5. Dinmica del Banco de Pruebas ................................................................................ 46
5. Resultados Obtenidos ....................................................................................................... 48
5.1. Anlisis Logs sitio sobre msica ............................................................................... 48
5.1.1. Descripcin sitio sobre msica ........................................................................... 48
5.1.2. Pginas sitio sobre msica.................................................................................. 48
Damin A. MARTINELLI
-7-
5.1.3. Anlisis Log 29/5/2005 al 3/6/2005 del sitio sobre msica ............................... 49
5.1.4. Anlisis Log 22/5/2005 al 29/5/2005 del sitio sobre msica ............................. 55
5.1.5. Conclusin Anlisis Logs sitio sobre msica ..................................................... 62
5.2. Anlisis Logs El Cuerpo de Cristo ............................................................................ 63
5.2.1. Descripcin sitio El Cuerpo de Cristo ................................................................ 63
5.2.2. Pginas www.elcuerpodecristo.com.ar............................................................... 63
5.2.3. Anlisis Log Semana 3 de Mayo de 2005 de www.elcuerpodecristo.com.ar .... 64
5.2.4. Anlisis Log Semana 1 de Junio de 2005 de www.elcuerpodecristo.com.ar..... 72
5.2.5. Conclusin Anlisis Logs El Cuerpo de Cristo .................................................. 78
6. Conclusiones..................................................................................................................... 80
7. Trabajos Futuros ............................................................................................................... 81
8. Referencias ....................................................................................................................... 82
A. Apndice I: Joone ............................................................................................................ 90
B. Apndice II: Manual del Usuario..................................................................................... 99
C. Apndice III: Documentacin JavaDoc ......................................................................... 139
D. Apndice IV: Desarrollo de la Solucin Mtrica Versin 3....................................... 242
E. Apndice V: Pruebas...................................................................................................... 363
Damin A. MARTINELLI
-8-
1. Introduccin
Se denomina Explotacin o Minera de Datos al conjunto de tcnicas y herramientas
aplicadas al proceso no trivial de extraer y presentar conocimiento implcito, previamente
desconocido, potencialmente til y humanamente comprensible, a partir de grandes
conjuntos de datos, con objeto de describir de forma automatizada modelos previamente
desconocidos, predecir de forma automatizada tendencias y comportamientos [Felgaer,
2004; Frawley et al., 1991; Chen et al., 1996; Mannila, 1997].
La aplicacin de las tcnicas de Explotacin de Datos en la Web, llamada en ingls
Web Data Mining o sintticamente Web Mining, es definida como el estudio de las tcnicas
de Data Mining que automticamente descubren y extraen informacin desde la Web
[Cernuzzi - Molas, 2004].
La identificacin de hbitos de uso de sitios Web, conocida en ingls como Web
Usage Mining, consiste en el proceso de aplicar tcnicas de explotacin de datos para el
descubrimiento de patrones de uso en pginas Web [Srivastava et al., 2000; KosalaBlockeel, 2000]. sta utiliza los datos registrados en los logs de acceso de los servidores
Web, donde se registra el comportamiento de navegacin de los usuarios. Este
comportamiento toma la forma de una secuencia de vnculos (links) seguidos por el
usuario, produciendo una sesin [Batista-Silva, 2002; Borges-Levene, 2000; Chen-Chau,
2004].
Con la identificacin de hbitos de uso de sitios Web se busca [Borges-Levene, 2000;
Kosala-Blockeel, 2000; Srivastava et al., 2000]:
a) entender el comportamiento de navegacin del usuario, permitiendo adaptar los
sitios Web a sus necesidades;
b) obtener la informacin para la personalizacin de los sitios,
c) realizar mejoras en el sistema,
d) modificar el sitio acorde a los patrones descubiertos,
e) realizar inteligencia del negocio y
f) caracterizar el uso del sitio Web por los usuarios.
Mediante estas acciones se busca [Abraham-Ramos, 2003]:
a) atraer nuevos clientes,
b) retener a los clientes actuales,
c) realizar campaas de promociones efectivas y
d) encontrar la mejor estructura lgica del espacio Web.
La identificacin de hbitos de uso de sitios Web consiste de tres etapas [Srivastava
et al., 2000; Batista-Silva, 2002; Mobasher et al., 1999]:
Damin A. MARTINELLI
-9-
a) preprocesamiento,
b) descubrimiento de patrones, y
c) anlisis de patrones.
El preprocesamiento consiste en convertir la informacin de uso contenida en los logs
(registro de las pginas solicitadas por los clientes a un servidor), realizando previamente
una limpieza de los mismos, en una abstraccin de datos necesaria para el descubrimiento
de patrones. En esta etapa se identifican a los usuarios y al conjunto de sesiones de usuario
[Srivastava et al., 2000; Batista-Silva, 2002; Mobasher et al., 1999] .
La etapa siguiente es el descubrimiento de patrones mediante diversas tcnicas
disponibles, como por ejemplo, el anlisis estadstico, el descubrimiento de reglas de
asociacin, el agrupamiento, la clasificacin y los patrones secuenciales [Srivastava et al.,
2000] .
La ltima etapa del proceso completo de identificacin de hbitos de uso de sitios
Web es el anlisis de los patrones encontrados en la etapa anterior, filtrando reglas o
patrones no interesantes, y utilizando mtodos de visualizacin tiles para su anlisis [
Srivastava et al., 2000; Batista-Silva, 2002] , realizando proyecciones dinmicas, filtros,
zoom y distorsiones interactivas sobre los grficos generados [Keim, 2002; Ankerst, 2001].
Las redes neuronales artificiales pueden ser utilizadas para el descubrimiento de
patrones en la explotacin de datos. Las redes neuronales artificiales (de ac en adelante
RNA) son modelos que intentan reproducir el comportamiento del cerebro; las RNA son
capaces de aprender de la experiencia, de generalizar de casos anteriores a nuevos casos, de
abstraer caractersticas esenciales a partir de entradas que representan informacin
irrelevante, de realizar aprendizaje adaptativo, de realizar una autoorganizacin, adems de
tener tolerancia a fallos y operar en tiempo real [Grosser, 2004; Daza, 2003]. Conforme la
arquitectura del cerebro, la estructura de las RNA involucran una gran cantidad de
elementos simples de procesamiento llamadas neuronas. Estas unidades de procesamiento
se encuentran altamente interconectadas con las dems mediante conexiones con pesos
modificables, cada neurona obtiene sus seales de entrada de otras neuronas o de orgenes
externos, y enva seales de salida a otras neuronas o a destinos externos. El aprendizaje en
una RNA es desarrollado mediante el ajuste de los pesos de las conexiones entre las
neuronas [Roy, 2000; Abidi, 1996; Daza, 2003, Garca Martnez et al., 2003].
En este contexto, el propsito de este proyecto es aplicar redes neuronales artificiales
en el proceso de descubrimiento de patrones de uso de sitios Web, estudiando cmo puede
ser adaptada la red neuronal utilizada y las transformaciones necesarias que deben
realizarse en los datos de los logs de acceso de los servidores Web, de modo de poder ser
utilizados como seales de entrada. Los patrones descubiertos se analizarn en orden a su
comprensin y explicacin, y sern contrastados con los resultados obtenidos utilizando un
mtodo tradicional, el algoritmo K-Means.
En el Captulo 2. Estado de la Cuestin se presenta el contexto terico para el estudio
de la integracin del agrupamiento por SOM como mtodo de identificacin de hbitos de
uso de sitios Web. Se presenta la explotacin de datos y la explotacin de datos en la Web,
para luego describir ms en detalle la explotacin de datos de uso de la Web y los trabajos
Damin A. MARTINELLI
- 10 -
realizados en esta rea. Por ltimo, se describen los mapas auto-organizados SOM,
realizando un anlisis de las similitudes y diferencias entre SOM y el algoritmo K-Means.
En el Captulo 3. Descripcin del Problema se presenta el problema a resolver, se
fundamenta el porqu de su eleccin y se seala su importancia en el contexto de estudio.
En el Captulo 4. Solucin Propuesta se describe la respuesta al problema planteado,
identificando sus parmetros, planteando las definiciones necesarias, describiendo el origen
de los casos de experimentacin, y finalmente, se realiza una descripcin del Banco de
Pruebas, abordando sus funcionalidades y describiendo su dinmica de funcionamiento.
En el Captulo 5. Resultados Obtenidos se exponen los resultados obtenidos en los
experimentos realizados. Se analizan los logs de dos sitios Web, uno sobre msica y otro
sobre gastronoma, de modo de poder analizar los resultados obtenidos y evaluar la calidad
de la solucin propuesta en esta tesis. Para cada sitio se realizan todos los pasos
involucrados en la identificacin de hbitos de usuarios, comparando los resultados
obtenidos mediante la red neuronal SOM y mediante el algoritmo K-Means.
En el Captulo 6. Conclusiones se resumen los aportes que el presente trabajo de
Tesis brinda en relacin a la problemtica especfica de la identificacin de hbitos de uso
de sitios Web.
En el Captulo 7. Trabajos Futuros se presentan las futuras lneas de investigacin y
desarrollo que se pueden considerar a fin de continuar con el presente trabajo.
En el Apndice I. Joone se describe el framework de redes neuronales artificiales
Joone y el porqu de su eleccin como parte del banco de pruebas desarrollado.
En el Apndice II. Manual del Usuario se transcribe el manual de usuario del banco
de pruebas.
En el Apndice III. Documentacin JavaDoc se transcribe la documentacin tcnica
del banco de pruebas.
En el Apndice IV. Desarrollo de la Solucin Mtrica Versin 3 se detalla el
desarrollo del banco de pruebas utilizando la metodologa Mtrica Versin 3, incluyendo
cada actividad que involucra la misma.
En el Apndice V. Pruebas se detallan las pruebas realizadas sobre el banco de
pruebas, describiendo cada una y los resultados obtenidos.
Damin A. MARTINELLI
- 11 -
2. Estado de la Cuestin
En este captulo se presenta el contexto terico para el estudio de la integracin de
agrupamiento por SOM como mtodo de identificacin de hbitos de uso de sitios Web. Se
presenta la explotacin de datos (seccin 2.1), poniendo especial nfasis en el algoritmo KMeans (seccin 2.1.4). Se presenta la explotacin de datos en la Web (seccin 2.2), para
luego describir ms en detalle la explotacin de datos de uso de la Web (seccin 2.3) y los
trabajos realizados en esta rea (seccin 2.4). Por ltimo, se describen los mapas autoorganizados SOM (seccin 2.5), realizando un anlisis de las similitudes y diferencias entre
SOM y el algoritmo K-Means (seccin 2.6).
Damin A. MARTINELLI
- 12 -
Entendimiento de los Datos: esta fase comienza con una coleccin inicial de
datos y se procede a realizar actividades para familiarizarse con los datos, para
identificar problemas en la calidad de los mismos y para detectar subconjuntos
interesantes que permitan formular hiptesis sobre informacin oculta en los
datos.
Damin A. MARTINELLI
- 13 -
Evaluacin: en esta fase se posee uno o varios modelos, los cuales poseen una
alta calidad desde la perspectiva del anlisis de los datos. Antes de proceder al
despliegue final del modelo, es importante evaluar el modelo y revisar los pasos
ejecutados en la construccin del mismo, de modo de estar seguro que se
alcanzaron los objetivos del negocio de forma satisfactoria. Luego de finalizar
esta fase, se debera poder tomar una decisin sobre el uso que se le darn a los
resultados de la explotacin de datos.
Damin A. MARTINELLI
- 14 -
Damin A. MARTINELLI
- 15 -
1994]. En la primera iteracin, Apriori simplemente procesa todas las transacciones para
contar la cantidad de ocurrencias de cada tem, obteniendo el conjunto de candidatos 1itemsets. Luego de los candidatos se seleccionan los 1-itemsets frecuentes (con soporte
mayor al mnimo). Se sigue iterando para los 2-itemsets (conjunto de tems con dos
unidades cada uno), hasta obtener los k-itemsets frecuentes. Luego utiliza los itemsets
frecuentes para generar las reglas de asociacin. Apriori tiene en cuenta el hecho de que
todos los subconjuntos de un itemset frecuente deben ser tambin frecuentes (deben tener el
soporte mnimo), adems que si un itemset no es frecuente, ninguno de sus superconjuntos
es frecuente.
Se han hecho algunas mejoras al algoritmo bsico de reglas de asociacin Apriori
para hacerlo ms eficiente [Morales, 2003]:
Utilizar tablas de hash para reducir el tamao de los itemsets candidatos (DHP).
Hacer aproximaciones con muestreos del conjunto de todos los itemsets, para no
tener que leer todo el conjunto de datos.
Las reglas temporales son similares a las reglas de asociacin pero involucran la
nocin de tiempo, encontrando relaciones en los datos a travs del tiempo. Por ejemplo,
encontrar reglas en la evolucin de los valores de las acciones cotizadas en la bolsa [Chen
et al., 1996].
Damin A. MARTINELLI
- 16 -
construccin del modelo se realimenta de estas indicaciones del supervisor [Chen et al.,
1996; Lalani, 2003].
Para la clasificacin de datos se han utilizado distintas tcnicas, algunas de las cuales
utilizan las estadsticas, el machine learning, las redes neuronales o los sistemas expertos
[Weiss & Kulikowski, 1991].
La clasificacin basada en rboles de decisin es un mtodo de aprendizaje
supervisado que construye rboles de decisin a partir de un conjunto de entrenamiento.
Cada hoja del rbol posee un nombre de clase, cada nodo interior especifica una evaluacin
en un atributo y cada rama representa un resultado de esa evaluacin. La calidad de un
rbol depende de la precisin de la clasificacin y del tamao del rbol.
ID3 es un sistema tpico de construccin de rboles de decisin, el cual adopta una
estrategia de arriba hacia abajo e inspecciona solo una parte del espacio de bsqueda. ID-3
garantiza que ser encontrado un rbol simple, pero no necesariamente el ms simple. ID-3
utiliza la teora de la informacin para minimizar la cantidad de pruebas para clasificar un
objeto. Una heurstica selecciona el atributo que provee la mayor ganancia de la
informacin. Una extensin a ID3, C4.5 [Quinlan, 1993] extiende el dominio de
clasificacin de atributos categricos a numricos. J48 es una implementacin mejorada del
algoritmo de rboles de decisin C4.5. El algoritmo J48 funciona bien con atributos
nominales y numricos. Un paso importante en la construccin del rbol de decisin es la
poda, la cual elimina las ramas no necesarias, resultando en una clasificacin ms rpida y
una mejora en la precisin de la clasificacin de datos [Han & Kamber, 2001]. SPRINT
particiona recursivamente los datos hasta que todos los miembros pertenecen a la misma
clase o el nmero de miembros es suficientemente pequeo, para luego realizar una poda
del rbol generado, disminuyendo su complejidad [Ale, 2005b].
Existen muchos otros algoritmos de clasificacin de datos, incluyendo mtodos
estadsticos [Cheeseman & Stutz, 1996; Elder IV & Pregibon, 1996; Frawley et al., 1991],
como el anlisis de regresin lineal utilizada en [Elder IV & Pregibon, 1996]. Se han
estudiado tambin algoritmos de machine learning escalables que combinan clasificadores
bsicos de una particin del conjunto de datos [Cheeseman & Stutz, 1996]. Tambin
existen estudios de tcnicas de clasificacin en el contexto de grandes base de datos
[Agrawal et al., 1992]. Otro clasificador ha sido propuesto por [Agrawal et al., 1992] para
reducir el costo de la generacin de los rboles de decisin. Tambin se han utilizado las
redes neuronales para las tareas de clasificacin de datos [Lu et al., 1995], los algoritmos
genticos y la lgica difusa.
Damin A. MARTINELLI
- 17 -
Damin A. MARTINELLI
- 18 -
2.1.4. K-Means
K-Means en un mtodo particional de clustering donde se construye una particin de
una base de datos D de n objetos en un conjunto de k grupos, buscando optimizar el criterio
de particionamiento elegido. En K-Means cada grupo est representado por su centro. KMeans intenta formar k grupos, con k predeterminado antes del inicio del proceso. Asume
que los atributos de los objetos forman un vector espacial. El objetivo que se intenta
alcanzar es minimizar la varianza total intra-grupo o la funcin de error cuadrtico:
k
V = x j i
i = 0 jS i
Donde existen k grupos Si, i=1,2,...,k y i es el punto medio o centroide de todos los
puntos Xj Si.
K-Means comienza particionando los datos en k subconjuntos no vacos,
aleatoriamente o usando alguna heurstica. Luego calcula el centroide de cada particin
como el punto medio del cluster y asigna cada dato al cluster cuyo centroide sea el ms
prximo. Luego los centroides son recalculados para los grupos nuevos y el algoritmo se
repite hasta la convergencia, la cual es obtenida cuando no haya ms datos que cambien de
grupo de una iteracin a otra.
Para calcular el centroide ms cercano a cada punto se debe utilizar una funcin de
distancia. Para datos reales se suele utilizar la distancia euclediana. Para datos categricos
se debe establecer una funcin especfica de distancia para ese conjunto de datos. Algunas
de las opciones son utilizar una matriz de distancias predefinidas o una funcin heurstica.
Damin A. MARTINELLI
- 19 -
- 20 -
Damin A. MARTINELLI
- 21 -
preprocesamiento,
II.
descubrimiento de patrones, y
III.
anlisis de patrones.
2.3.1. Prepocesamiento
El preprocesamiento consiste en convertir la informacin de uso contenida en los logs
(registro de las pginas solicitadas por los clientes a un servidor), realizando previamente
una limpieza de los mismos, en una abstraccin de datos necesaria para el descubrimiento
de patrones. En esta etapa se identifican a los usuarios y al conjunto de sesiones de usuario
[Srivastava et al., 2000; Batista & Silva, 2002; Mobasher et al., 1999, Marbn Gallego,
2002]. Una sesin de usuario corresponde a una secuencia de vnculos (links) seguidos por
el usuario [Batista & Silva, 2002; Borges & Levene, 2000; Chen & Chau, 2004].
Damin A. MARTINELLI
- 22 -
Los datos de los logs pueden ser recolectados a nivel del servidor, del cliente o del
servidor proxy [Abraham & Ramos, 2003; Chen et al., 1996; Batista & Silva, 2002]:
los servidores Web guardan el comportamiento de los visitantes del sitio Web,
la recoleccion de datos del lado del cliente puede ser implementada usando
agentes remotos o modificando los navegadores existentes, y
los servidores proxy actuan como un nivel intermedio de cacheo entre los
navegadores de los clientes y los servidores Web.
Damin A. MARTINELLI
- 23 -
Damin A. MARTINELLI
- 24 -
Damin A. MARTINELLI
- 25 -
basado en perfiles de usuarios utilizando redes neuronales. [Rangarajan et al., 2003] realiza
un agrupamiento de usuarios utilizando una red neuronal ART (teora de la Resonancia
Adaptativa). Otras herramientas desarrolladas por investigadores acadmicos son WebSIFT
[Cooley et al., 1999] y Web Utilization Miner [Spiliopoulou & Faulstich, 1999]. LOGML
(Log Markup Language) propuesto por [Punin et al., 2001], implementa un lenguaje de
marcas basado en XML para almacenar la informacin del uso de los sitios Web.
Mucho trabajo de investigacin ha sido realizado en la personalizacin de sitios Web
[Lalani, 2003]. Adaptative Sites usa informacin acerca de los patrones de acceso de los
usuarios para mejorar la organizacin y la presentacin para diferentes tipos de usuarios
[Perkowitz & Etzioni, 1997]. [Mobasher et al., 1999] y [Mobasher et al., 2001] proponen
tcnicas para capturar perfiles de usuarios utilizando reglas de asociacin y la agrupacin
de pginas basada en el uso de los visitantes. [Spiliopoulou et al., 2000] desarrollo una
metodologa para asegurar la calidad de un sitio Web basada en el descubrimiento y
comparacin de patrones de navegacin de clientes y no-clientes, proponiendo una tcnica
de adaptacin de sitios dinmicamente. Un algoritmo para reorganizar un sitio Web
utilizando la clasificacin de pginas y la frecuencia de acceso de las mismas, es propuesto
por [Fu et al., 2001]. Una herramienta es desarrollada y descripta en [Masseglia et al.,
1999] que permite personalizar un sitio Web dinmicamente. [Kitsuregawa et al., 2001]
realiza descubrimiento de reglas de asociacin para descubrir patrones de comportamiento
interesantes de usuarios en dispositivos mviles. La bsqueda de ubicaciones de pginas
que son diferentes a las que los usuarios esperan que sean, tambin ayuda a la
reestructuracin del sitio Web [Srikant & Yang, 2001].
Ejemplos de aplicaciones comerciales incluyen:
Mientras la mayora de las aplicaciones de anlisis del uso de sitios Web se focalizan
en un solo sitio, la compaa de publicidad DoubleClick (http://www.doubleclick.com/),
vendiendo y administrando 2.000 millones de publicidades online por da, recolecta
gigabytes de datos de acceso de diferentes sitios Web. Los logs de los motores de bsqueda
tambin proveen de conocimiento acerca del comportamiento de los usuarios en las
bsquedas de la Web. Varios anlisis han sido realizados en los logs del motor de bsqueda
Excite (http://www.excite.com/) [Jansen et al., 2000; Spink & Xu, 2000; Spink et al.,
2001]. [Silverstein et al., 1999] tambin conduce un estudio de 153 millones de consultas a
buscadores recolectadas de AltaVista (http://www.altavista.com/). Algunos de las
bsquedas ms interesantes de estos anlisis incluyen el conjunto de las palabras ms
utilizadas en las consultas a los buscadores Web, el largo promedio de las consultas, el uso
de operadores bolanos en las consultas, y la cantidad promedio de pginas del resultado
Damin A. MARTINELLI
- 26 -
vistas por los usuarios. Tal informacin es muy til para que los investigadores intenten
alcanzar un mejor entendimiento del comportamiento en las bsquedas y en la informacin
buscada, para mejorar el diseo de los sistemas de bsqueda de la Web [Chen et al., 1996].
Un completo resumen de las investigaciones realizadas en la identificacin de hbitos
de uso de sitios Web puede encontrarse en [Cooley, 2000; Kosala & Blockeel, 2000;
Srivastava et al., 2000; Koutri et al., 2004, Eirinaki & Vazirgiannis, 2003].
Adems existen varias aplicaciones que proveen de estadsticas de uso de sitios Web,
como Analog, ClickTracks, Hitbox, LogRover, Website Tracker, WebStat, WUSAGE,
Analog, Count Your Blessings, Webalizer o Awstats. Estas herramientas de anlisis de logs
(tambin llamadas herramientas de anlisis de trafico) toman como entrada el log del
servidor Web y lo procesan para extraer informacin estadstica. Tal informacin incluye
estadsticas como el nmero total de visitas, promedio de visitas por intervalo de tiempo,
pedidos de pginas exitosos, fallidos o redirigidos, errores del servidor, errores de pginas
no encontradas, pginas ms visitadas, pginas de entrada y salida del sitio, principales
ubicaciones geogrficas de los visitantes, navegadores de los visitantes, etc.. Algunas
herramientas tambin realizan anlisis de secuencias de pginas visitadas, que identifican
caminos seguidos por los visitantes a travs del sitio, agrupando pedidos consecutivos
desde la misma IP. Con estas estadsticas usualmente se realizan reportes y diagramas
[Eirinaki & Vazirgiannis, 2003]. Estas estadsticas pueden ser tiles para los
administradores Web para obtener informacin sobre la carga actual del servidor. Sin
embargo, los datos estadsticos disponibles pueden proveer solo la informacin explcita
debido a la naturaleza y las limitaciones de la metodologa. Para sitios Web pequeos, estas
estadsticas de uso pueden ser adecuadas para analizar los patrones y las tendencias de uso;
pero cuando el tamao y la complejidad del sitio aumenta, estas estadsticas se vuelven
inadecuadas y son necesarias otras tcnicas [Roussinov & Zhao, 2003; Yang & Zhang,
2003; Abraham, 2003; Zhang & Dong, 2003; Abraham & Ramos, 2003].
Damin A. MARTINELLI
- 27 -
Damin A. MARTINELLI
- 28 -
2.5.3. Funcionamiento
Cuando se presenta a la entrada una informacin Ek = (e1k, e2k,...,enk), cada una de
las M neuronas de la capa de salida la recibe a travs de las conexiones feedforward con
pesos wij. Tambin estas neuronas reciben las entradas correspondientes a las interacciones
laterales con el resto de las neuronas de salida y cuya influencia depender de la distancia a
la que se encuentren.
As, la salida generada por una neurona de salida j ante un vector de entrada Ek ser:
N
i =1
p =1
Donde Int pj es una funcin del tipo sombrero mejicano que representa la influencia
lateral de la neurona p sobre la neurona j. La funcin de activacin de las neuronas de
salida (f) ser del tipo continuo, lineal o sigmoidal, ya que esta red trabaja con valores
reales.
Es evidente que se trata de una red de tipo competitivo, ya que al presentarse una
entrada Ek, la red evoluciona hasta alcanzar un estado estable en el que solo hay una
neurona activada, la ganadora. La formulacin matemtica del funcionamiento de esta red
puede simplificarse as [Hilera & Martnez, 2000]:
si
1 MIN || E k W j ||= MIN (
Sj =
resto
0
(e
i =1
(k )
i
wij ) 2 )
Ecuacin 2-3
Damin A. MARTINELLI
- 29 -
pesos donde se registran los datos almacenados por la red durante el aprendizaje. Durante el
funcionamiento, lo que se pretende es encontrar el dato aprendido ms parecido al de
entrada para averiguar qu neurona se activar y en qu zona del espacio bidimensional de
salida se encuentra.
La red SOM realiza una tarea de clasificacin ya que la neurona de salida activada
ante una entrada representa la clase a la que pertenece dicha informacin. Adems, como
ante otra entrada parecida se activa la misma neurona o una cercana a la anterior, se
garantiza que las neuronas topologicamente cercanas sean sensibles a entradas fsicamente
similares. Por esto, la red es muy til para establecer relaciones antes desconocidas entre
conjunto de datos.
2.5.5. Aprendizaje
El aprendizaje en las redes SOM es del tipo off line, por lo que se distingue una etapa
de aprendizaje y otra de funcionamiento. En la etapa de aprendizaje se fijan los pesos de las
conexiones feedforward entre las capas de entrada y salida.
Esta red emplea un aprendizaje no supervisado de tipo competitivo. Las neuronas de
la capa de salida compiten por activarse y solo una de ellas permanece activa ante una
entrada determinada. Los pesos de las conexiones se ajustan en funcin de la neurona que
haya resultado vencedora.
Damin A. MARTINELLI
- 30 -
10.
d j = (ei( k ) wij ) 2
1 j M
i =1
Ecuacin 2-4
11.
Donde:
12.
13.
wij : Peso de la conexin entre las neuronas i (de entrada) y j (de salida).
4. Una vez localizada la neurona vencedora j*, se actualizan los pesos de las
conexiones feedforward que llegan a dicha neurona y a sus vecinas. Con esto se
consigue asociar la informacin de entrada con cierta zona de la capa de salida.
14.
j Zona j* (t )
Ecuacin 2-5
15.
16. Zona j* (t ) es la zona de vecindad de la neurona vencedora j*. El tamao de la zona
se puede reducir en cada iteracin del entrenamiento aunque en la practica es
habitual mantener esa zona fija.
Damin A. MARTINELLI
- 31 -
(t ) =
1
t
(t ) = 1 1
Ecuacin 2-6
2.5.6. Visualizacin
El SOM es una aproximacin de la funcin de densidad de probabilidad de los datos
de entrada [Kohonen, 1995] y puede representarse de una manera visual.
La representacin U-Matrix (Unified Distance Matrix) del SOM visualiza la distancia
entre neuronas adyacentes [Figura 2.2]. La misma se calcula y se presenta con diferentes
colores entre los nodos adyacentes. Un color oscuro entre neuronas corresponde a una
distancia grande que representa un espacio importante entre los valores de los patrones en
el espacio de entrada. Un color claro, en cambio, significa que los patrones estn cerca unos
de otros. Las reas claras pueden pensarse como clases y las oscuras como separadores.
Esta puede ser una representacin muy til de los datos de entrada sin tener informacin a
priori sobre las clases.
En la [Figura 2.2] podemos observar las neuronas indicadas por un punto negro. La
representacin revela que existe una clase separada en la esquina superior derecha de la red.
Las clases estn separadas por una zona negra. Este resultado se logra con aprendizaje no
supervisado, es decir, sin intervencin humana. Ensear a un SOM y representarla con la
U-Matrix ofrece una forma rpida de analizar la distribucin de los datos.
Damin A. MARTINELLI
- 32 -
2.5.7. Aplicaciones
Se ha demostrado que los SOM son muy tiles en aplicaciones tcnicas. En la
industria, se ha utilizado, por ejemplo, en monitoreo de procesos y mquinas, identificacin
de fallas y control de robots [Ritter et al., 1992].
La capacidad de dividir el espacio en clases y patrones representativos lo hace muy
poderoso tambin para la clasificacin y segmentacin de los datos; en el caso de estudio
de este trabajo se presentan miles de sesiones de usuario de acceso a un sitio Web y las
redes SOM clasifican a los usuarios en base a sus hbitos.
SOM
Tarea realizada
Supervisin necesaria
Funcin de Distancia
Necesita etapa de
aprendizaje
K-Means
Segmentacin.
Ninguna.
Es necesario definir una
funcin de distancia a
utilizar para la
determinacin de la neurona
vencedora.
Si.
Segmentacin.
Ninguna.
Es necesario definir una
funcin de distancia para
poder asociar cada dato a su
centroide ms cercano.
Si.
Damin A. MARTINELLI
- 33 -
SOM
Tipo de segmentador
Cantidad de grupos a
descubrir
Caractersticas de los datos
de entrada
Sensibilidad a los
parmetros iniciales
Posibilidad de determinar
grupos ms parecidos a
otros
K-Means
Red Neuronal.
Mapa bidimensional de
NxN, donde N es un
parmetro del mtodo.
Normalizacin de los datos
de entrada para tener una
escala de 0 a 1.
Mtodo Particional.
Construye K grupos, siendo
K un parmetro del mtodo.
Damin A. MARTINELLI
- 34 -
Damin A. MARTINELLI
- 35 -
4. Solucin propuesta
En este captulo se describe la respuesta al problema planteado. Se identifican los
parmetros del problema (seccin 4.1), se plantean definiciones necesarias (seccin 4.2). Se
describe el origen de los casos de experimentacin (seccin 4.3). Finalmente, se realiza una
descripcin del Banco de Pruebas (seccin 4.4), abordando sus funcionalidades (seccin
4.4.1) y describiendo su dinmica de funcionamiento (seccin 4.4.2).
Nemotcnico
logCount
pageCount
logFormat
pageExtensions
validsStatus
idsPages
timeoutSession
minPagesInSession
minPageFrequency
trainingCicles
Damin A. MARTINELLI
- 36 -
dimClusters
4.2. Definiciones
Para la mejor comprensin de cierta terminologa utilizada en el presente trabajo, es
til definir:
Archivos de Log
Preprocesamiento de Logs
Limpieza de Logs
Identificacin de Usuarios
Identd es el nombre del usuario remoto, siguiendo la RFC 1413 [RFC 1413];
Damin A. MARTINELLI
- 37 -
Luego, la W3C [W3Clog] present un formato mejorado para los archivos de logs de
los servidores Web denominado Formato Extendido de Log (EFF, Extended Log Format).
Este formato permite la personalizacin de los archivos de log para que sean almacenados
en un formato soportado por las herramientas de anlisis genricas. La principal extensin
al formato de log comn es la incorporacin de campos. Los ms importantes son el campo
Referrer, que indica la URL desde donde se realiza cada peticin; el campo Agente, donde
se indica qu aplicacin esta utilizando el cliente para realizar las peticiones; y el campo
Cookie, para almacenar las cookies de los usuarios del sitio Web, en caso que el mismo las
utilice.
Damin A. MARTINELLI
- 38 -
Damin A. MARTINELLI
- 39 -
Damin A. MARTINELLI
- 40 -
Damin A. MARTINELLI
- 41 -
un costo fijo. Sin embargo, generalmente, es utilizado el valor de 30 minutos como valor
mximo entre dos peticiones de una misma sesin.
Para la identificacin de sesiones tambin puede utilizarse IDs de sesin incluidas en
la peticin por parte de la aplicacin Web [Srivastava et al., 2000], dado que el servidor de
contenido puede mantener variables para cada sesin activa. Este mtodo puede ser muy
til, pero su utilizacin depende del sitio Web a analizar.
Un problema adicional en la identificacin de las sesiones de los usuarios son las
pginas almacenadas en la memoria cache [Srivastava et al., 2000], ya sea en el cliente o en
servidores proxy. El campo referrer puede ser utilizado para detectar algunas de las pginas
almacenadas en la memoria cache que fueron accedidas por el usuario. Si una pgina es
accedida por un usuario en una sesin desde una pgina del mismo sitio, y la peticin de
esta pgina no fue registrada en el archivo de log, se puede inferir que dicha pgina fue
accedida y obtenida mediante un cache. El conocimiento de la estructura del sitio tambin
puede ayudar a detectar pginas almacenadas en la memoria cache [Huysmans et al., 2003],
de modo que si en el log aparecen dos peticiones consecutivas a dos pginas distintas (A y
luego B), las cuales no poseen un vnculo entre ellas, se puede inferir el acceso a la pgina
de conexin (C) entre estas dos pginas. Esto es vlido si es poco probable que el usuario
acceda directamente a B, o si el usuario no accedi anteriormente a otra pgina (D) que
posea un vinculo a B, debido a que la misma puede haber sido almacenada en la memoria
cache, y realmente se este accediendo a B desde D. Se pueden realizar heursticas basadas
en la estructura del sitio y en el campo referrer que mejoren la deteccin de pginas
almacenadas en la memoria cache.
Damin A. MARTINELLI
- 42 -
4.4.1. Funcionalidades
El Banco de Pruebas provee las siguientes funcionalidades:
Damin A. MARTINELLI
- 43 -
Para el presente trabajo se decidi utilizar el formato de log comn (CLF) debido a la
gran utilizacin del mismo. Tambin se permite la utilizacin del formato de log comn
ms los campos Referrer y Agent.
Se realiz la herramienta parametrizable, de modo que las tareas de limpieza puedan
ser adaptadas a las necesidades de cada caso. Para ello, se utilizaron distintos filtros a los
archivos de log, los cuales permiten que el usuario defina su comportamiento.
El primer filtro que se implement es un filtro de extensiones de recursos. El usuario
puede indicar cules extensiones de los recursos deben ser includas en el armado de las
sesiones de los usuarios. Toda extensin no indicada por el usuario, ser filtrada e ignorada
para el armado de las sesiones.
El segundo filtro disponible es sobre la base de los cdigos de error de http. El
usuario indica qu cdigos de error son considerados para la tarea de la construccin de las
sesiones de usuarios. Solo las lneas del archivo de log que posean los cdigos de error
especificados por el usuario sern includas en el proceso de construccin de sesiones. En
forma predeterminada, solo el cdigo de error 200 es considerado.
El tercer filtro disponible viene dado por el amplio empleo actual de pginas
generadas dinmicamente. Muchas de estas pginas poseen una plantilla o un controlador,
donde son incluidas las distintas pginas. Por ende, en los archivos de log, queda registrada
la peticin solamente a la pgina correspondiente a la plantilla o al controlador. En varias
ocasiones, se puede diferenciar a las distintas pginas reales includas en un sitio debido al
uso de una variable que identifica la pgina a ser includa. Esta variable es comunicada
generalmente mediante el mtodo GET al servidor, por lo cual, el valor de esta variable
aparece en la URL de la peticin. No es el caso si el mtodo utilizado es POST. El filtro
permite indicar qu variables identifican a pginas distintas dentro de una misma plantilla o
controlador, de modo de poder ser reconocidas las distintas pginas reales visitadas por el
usuario. Este filtro resulta de gran utilidad en la actualidad y se presenta en este trabajo de
forma novedosa.
- 44 -
4.4.1.4. Identificacin de hbitos de uso mediante red neuronal mapa autoorganizativo (SOM)
La solucin propuesta consiste en la utilizacin de una red neuronal SOM para la
identificacin de hbitos de usuarios. Esta red neuronal debe agrupar a los usuarios de un
sitio Web sobre la base de las pginas accedidas por los mismos. Para ello, se debe procesar
el archivo de log del sitio a analizar, para identificar a los usuarios y a las sesiones de los
mismos. Luego, con estas sesiones de usuarios es entrenada la red, para agrupar a los
usuarios de forma automtica. La eleccin de la red neuronal SOM se debe a que posee un
entrenamiento no supervisado, permitiendo realizar el agrupamiento de los usuarios en
forma automtica, sin intervencin del usuario mas que para configurar algunos pocos
parmetros para el anlisis.
Luego de identificar todas las sesiones de los usuarios, se debe generar el formato
adecuado para poder ingresar las sesiones como patrones a la red neuronal. Para cada
sesin, se indica la presencia (1) o la ausencia (0) de cada pgina perteneciente al sitio
Web, resultando en un vector, de tamao igual a la cantidad de pginas del sitio, para cada
sesin. Cada elemento del vector es un nmero binario, indicando la presencia o no de la
pgina representada por esa posicin. Estos vectores corresponden con los patrones de
entrada de la red neuronal utilizada para la identificacin de hbitos de los usuarios.
La red neuronal empleada es un mapa auto-organizativo (SOM), que posee tantas
entradas como pginas frecuentes posea un sitio Web. Las pginas frecuentes son las que
poseen una frecuencia mayor a la especificada por el usuario en la tarea de
preprocesamiento. La red neuronal se construye en forma dinmica para permitir las
entradas necesarias para el sitio Web analizado. La salida de la red neuronal SOM es un
mapa de dos dimensiones de N x N, donde N es configurable por el usuario, y depende de
la cantidad de clusters que el mismo desee obtener. En el mapa de salida, solo una salida
ser activada, indicado por el valor binario uno. Todas las dems salidas tendrn un valor
nulo. La salida activada representa el cluster al cual pertenece el patrn ingresado. Patrones
similares pertenecern al mismo cluster o a clusters cercanos en el mapa de salida.
Damin A. MARTINELLI
- 45 -
1. Preprocesado del archivo de log del servidor Web: indicando el archivo de log
que se utilizar, el formato del mismo y los parmetros deseados para el
preprocesado.
2. Identificacin de usuarios y sus sesiones: utilizando el log preprocesado de un
proyecto, se procede a la identificacin de los usuarios y sus sesiones. Se indican los
parmetros deseados para este paso.
3. Agrupamiento de usuarios utilizando red neuronal SOM: se procede al
agrupamiento de usuarios utilizando la red neuronal SOM, indicando los parmetros
a utilizarse.
4. Agrupamiento de usuarios utilizando algoritmo K-Means: se procede al
agrupamiento de usuarios utilizando el algoritmo K-Means, indicando los
parmetros a utilizarse.
5. Anlisis de los grupos descubiertos: se comparan los grupos descubiertos en los
dos pasos anteriores mediante las herramientas proporcionadas por el banco de
pruebas.
A continuacin se diagrama la dinmica del banco de pruebas [Figura 4.1]:
Damin A. MARTINELLI
- 46 -
Se extrae el archivo de log del servidor Web utilizado por el sitio a analizar,
realizando su preprocesamiento y la posterior identificacin de usuarios y sus sesiones. El
agrupamiento de los usuarios es realizado utilizando la red neuronal SOM y el algoritmo KMeans, permitiendo el anlisis de los grupos descubiertos y su comparacin.
Damin A. MARTINELLI
- 47 -
5. Resultados Obtenidos
En este captulo se exponen los resultados obtenidos de los experimentos realizados.
Se analizaron los logs de dos sitios Web, uno sobre msica (seccin 5.1) y otro sobre
gastronoma (seccin 5.2), de modo de poder analizar los resultados obtenidos y evaluar la
calidad de la solucin propuesta en esta tesis. Para cada sitio se realizaron todos los pasos
involucrados en la identificacin de hbitos de usuarios, comparando los resultados
obtenidos mediante la red neuronal SOM y mediante el algoritmo K-Means.
Damin A. MARTINELLI
- 48 -
del
album'/:
Damin A. MARTINELLI
- 49 -
155601
HitsSaves:
155601
Input:
access-emepe3-29-5-2005-3-62005.log
Extensions:
php
StatusCodes:
200
IdsPages:
Pginas Distintas
Cargadas:
37
Proyecto: emepe3-1
Cantidad de Registros de Log Cargados:
155601
28840
Damin A. MARTINELLI
- 50 -
Sesiones
770
25446
2611
13
Damin A. MARTINELLI
- 51 -
Sesiones
17883
2237
5097
3623
5.1.3.6. Comparacin
A continuacin se muestra la comparacin entre la cantidad de sesiones en cada
cluster obtenida mediante los dos mtodos [Tabla 5.5]:
Damin A. MARTINELLI
- 52 -
Sesiones SOM
Sesiones K-Means
770
17883
25446
2237
2611
5097
13
3623
K-Means
Porcentaje
Pgina
Porcentaje
Cluster 0
/top.php
98.8312
/thumbnail.php
96.7532
/flashes_home.php
95.7143
/login.php
92.6187
Cluster 1
/login.php
73.8426
/detalle_album.php
100.0
/detalle_album.php
28.1341
/login.php
100.0
Cluster 2
/top.php
96.7062
/thumbnail.php
96.1317
/detalle_album.php
76.7905
/preview.php
37.8782
/detalle_grupo.php
29.1076
Damin A. MARTINELLI
- 53 -
/detalle_album.php
100.0
Cluster 3
/software.php
100.0
/top.php
94.2037
/thumbnail.php
100.0
/thumbnail.php
93.3757
/top.php
100.0
/detalle_album.php
51.8079
/detalle_album.php
92.3077
/preview.php
30.1408
/flashes_home.php
92.3077
/preview.php
92.3077
/login.php
76.9231
/registracion.php
76.9231
/carrito.php
69.2308
/download_software.php
69.2308
/index.php
69.2308
/micuenta.php
69.2308
/busqueda_artista.php
53.8462
/busqueda_general.php
53.8462
/detalle_grupo.php
53.8462
/terminosdeventa.php
38.4615
/olvido_password.php
30.7692
/soporte.php
30.7692
/terminosdeuso.php
30.7692
Cluster 1
Usuarios que inician sesin, por ende son usuarios ya registrados. Tambin miran
detalles de albumes de msica.
Damin A. MARTINELLI
- 54 -
Cluster 2
Usuarios que sin iniciar sesin, acceden a albumes de msica y a informacin sobre
grupos. Tambin escuchan fragmentos de temas de los albumes y grupos que visitaron.
Cluster 3
Usuarios que recorren mucho ms todo el sitio. Si estn registrados, inician sesin,
sino, se registran. Miran albumes, grupos, realizan bsquedas y compras algunos temas.
Cluster 1
Usuarios registrados que inician sesin y acceden a detalles de albumes.
Cluster 2
Usuarios, que sin iniciar sesin, acceden a detalles de albumes.
Cluster 3
Usuarios, que sin iniciar sesin, acceden a detalles de albumes y escuchan fragmentos
de algunos temas.
Damin A. MARTINELLI
- 55 -
163947
HitsSaves:
163947
Input:
access-emepe3-22-5-2005-29-52005.log
Extensions:
php
StatusCodes:
200
IdsPages:
Pginas Distintas
Cargadas:
38
Proyecto: emepe3-4
Cantidad de Registros de Log Cargados:
163948
9814
Damin A. MARTINELLI
- 56 -
Sesiones
3792
209
5808
Damin A. MARTINELLI
- 57 -
Sesiones
2768
2372
4335
339
Damin A. MARTINELLI
- 58 -
5.1.4.6. Comparacin
A continuacin se muestra la comparacin entre la cantidad de sesiones en cada
cluster obtenida mediante los dos mtodos [Tabla 5.11]:
Sesiones SOM
Sesiones K-Means
3792
2768
209
2372
5808
4335
339
Damin A. MARTINELLI
- 59 -
K-Means
Porcentaje
Pgina
Porcentaje
Cluster 0
/thumbnail.php
58.2278
/login.php
51.3728
/top.php
56.6192
/detalle_grupo.php
29.7688
/login.php
39.3196
Cluster 1
/thumbnail.php
100.0
/top.php
100.0
/preview.php
86.6029
/detalle_grupo.php
83.2536
/detalle_album.php
82.7751
/flashes_home.php
62.201
/login.php
50.7177
/busqueda_genero_detalle.php
35.4067
/index.php
27.7512
/detalle_album.php 100.0
Cluster 2
/detalle_album.php
83.4366
/thumbnail.php
99.9077
/top.php
41.6322
/top.php
99.7232
/thumbnail.php
41.0124
/detalle_album.php 60.7843
/preview.php
32.3414
/flashes_home.php 25.5133
Cluster 3
/terminosdeuso.php
100.0
/terminosdeventa.php
100.0
/politica.php
80.0
/software.php
80.0
/detalle_album.php
60.0
/politicadeprivacidad.php
60.0
/registracion.php
60.0
/detalle_imagen.php
40.0
Damin A. MARTINELLI
- 60 -
/top.php
100.0
/olvido_password.php
40.0
Cluster 1
Usuarios que acceden a albumes de msica y a informacin sobre grupos. Tambin
escuchan fragmentos de temas de los albumes y grupos que visitaron. Realizan algunas
bsquedas.
Cluster 2
Usuarios que sin iniciar sesin, acceden a albumes de msica.
Cluster 3
Usuarios que recorren mucho ms todo el sitio. Acceden a varias pginas del sitio
donde obtienen informacin sobre el mismo. Tambin acceden a detalles de albumes de
msica, y muchos se registran en el sitio.
Cluster 1
Usuarios, que sin iniciar sesin, acceden a detalles de albumes.
Cluster 2
Usuarios, que sin iniciar sesin, acceden a detalles de albumes y escuchan fragmentos
de algunos temas.
Cluster 3
Usuarios que no recorren mucho el sitio.
Damin A. MARTINELLI
- 61 -
Damin A. MARTINELLI
- 62 -
recetodromoII/index.php:
ingredientes.
tiki-forums.php: foro.
Damin A. MARTINELLI
permite
buscar
- 63 -
recetas
seleccionando
sus
tiki-meta.php: pgina principal del sitios, con los artculos y wikis ms nuevos.
Damin A. MARTINELLI
- 64 -
34086
HitsSaves:
34086
Input:
access-S03-05-2005.log
Extensions:
php
StatusCodes:
200
IdsPages:
Pginas Distintas Cargadas:
71
Proyecto: cc-S03-05-2005 2
Cantidad de Registros de Log Cargados:
34086
5445
Damin A. MARTINELLI
- 65 -
Sesiones
4563
808
67
Damin A. MARTINELLI
- 66 -
Sesiones
724
394
3674
653
Damin A. MARTINELLI
- 67 -
5.2.3.6. Comparacin
A continuacin se muestra la comparacin entre la cantidad de sesiones en cada
cluster obtenida mediante los dos mtodos [Tabla 5.17]:
Sesiones SOM
Sesiones K-Means
724
4563
394
808
3674
67
653
K-Means
Porcentaje
Pgina
Porcentaje
Cluster 0
/tiki-edit_submission.php
100.0
/tiki-editpage.php
100.0
/tikiview_forum_thread.php
85.7143
/tikirandom_num_img.php
62.8453
/tiki-list_submissions.php 71.4286
/tiki-browse_image.php
57.1429
/show_image.php
42.8571
/tiki-edit_article.php
42.8571
/tiki-galleries.php
42.8571
/tiki-pagehistory.php
42.8571
/topic_image.php
42.8571
Damin A. MARTINELLI
- 68 -
/tikidirectory_browse.php
28.5714
/tiki-editpage.php
28.5714
/tiki-index.php
28.5714
/tiki-list_articles.php
28.5714
/tiki-meta.php
28.5714
/tiki-upload_image.php
28.5714
/tiki-wiki_rss.php
28.5714
/tiki-searchindex.php
14.2857
/tiki-view_articles.php
14.2857
Cluster 1
/recetodromoII/index.php
19.2417
/tiki-index.php
99.7462
/tiki-editpage.php
18.0145
/tiki-editpage.php
30.203
/tiki-articles_rss.php
14.3765
/tiki-listpages.php
23.0964
/tiki-wiki_rss.php
11.5494
/tiki-list_articles.php
22.5888
/tikirandom_num_img.php
10.103
/tiki-pagehistory.php
21.3198
/tiki-edit_translation.php
18.5279
/tiki-wiki_rss.php
18.2741
/tiki-edit_submission.php
17.7665
/tiki-register.php
17.7665
/tiki-articles_rss.php
17.5127
/tikiuser_information.php
17.2589
/tikiview_forum_thread.php
17.2589
/tiki-print.php
16.7513
/tiki-searchindex.php
10.9137
/show_image.php
10.4061
/tikibrowse_categories.php
10.1523
Cluster 2
/show_image.php
78.7129
/recetodromoII/index.php
21.8018
/tiki-browse_image.php
26.1139
/tiki-articles_rss.php
17.583
/show_image.php
15.1606
Damin A. MARTINELLI
- 69 -
/tiki-wiki_rss.php
14.1535
Cluster 3
/tiki-editpage.php
100.0
/tiki-pagehistory.php
69.0658
/tiki-edit_submission.php
100.0
/tiki-print.php
36.9066
/tiki-listpages.php
100.0
/tiki-listpages.php
24.8086
/tiki-list_articles.php
100.0
/tiki-editpage.php
18.0704
/tiki-articles_rss.php
98.5075
/tikibrowse_categories.php
15.6202
/tiki-index.php
98.5075
/tiki-edit_translation.php
14.5482
/tiki-register.php
98.5075
/tiki-backlinks.php
14.242
/tiki-wiki_rss.php
98.5075
/tikiuser_information.php
95.5224
/tiki-pagehistory.php
92.5373
/tiki-edit_translation.php
91.0448
/tiki-print.php
88.0597
/tikiview_forum_thread.php
44.7761
/tiki-edit_templates.php
40.2985
/tiki-view_forum.php
25.3731
/tiki-print_article.php
23.8806
/tiki-backlinks.php
22.3881
/tiki-list_submissions.php 22.3881
/tikibrowse_categories.php
20.8955
/tiki-forums.php
20.8955
/tiki-browse_image.php
19.403
/tiki-galleries.php
19.403
/tiki-list_gallery.php
16.4179
Damin A. MARTINELLI
- 70 -
Cluster 1
Usuarios que no recorren mucho el sitio. Algunos utilizan el recetodromo (buscador
de recetas), editan pginas del wiki y acceden a los artculos y a las pginas del wiki
mediante RSS.
Cluster 2
Usuarios que unicamente ven las galeras de imgenes y las imgenes de las mismas.
Cluster 3
Usuarios que recorren mucho ms todo el sitio. Listan, ven y editan pginas del wiki.
Tambien ven artculos y acceden al foro. Si no estan registrados, se registran. Ven artculos
y pginas del wiki mediante RSS. Algunos acceden a las galeras de imgenes.
Cluster 1
Usuarios que recorren bastante el sitio. Algunos ven y editan pginas del wiki.
Algunos ven artculos, acceden a las pginas y/o a los wikis mediante RSS. Algunos
usuarios se registran en el sitio.
Cluster 2
Usuarios que no recorren mucho el sitio. Algunos utilizan el recetodromo (buscador
de recetas), acceden a los artculos y a las pginas del wiki mediante RSS, y ven alguna
imgen.
Damin A. MARTINELLI
- 71 -
Cluster 3
Usuarios que acceden a pginas relacionadas al wiki. Listan pginas del wiki, las
editan, editan las traducciones, ven la versin de impresin y ven la historia de
modificacin de una pgina.
Damin A. MARTINELLI
Carga:
12489
HitsSaves:
12489
Input:
access-S01-06-2005.log
Extensions:
php
StatusCodes:
200
- 72 -
71
Proyecto: cc-S01-06-2005 2
Cantidad de Registros de Log Cargados:
12489
4616
Damin A. MARTINELLI
- 73 -
Sesiones
3935
645
13
23
Damin A. MARTINELLI
- 74 -
Sesiones
3880
125
206
405
5.2.4.6. Comparacin
A continuacin se muestra la comparacin entre la cantidad de sesiones en cada
cluster obtenida mediante los dos mtodos [Tabla 5.23]:
Damin A. MARTINELLI
- 75 -
Sesiones SOM
Sesiones K-Means
3935
3880
645
125
13
206
23
405
K-Means
Porcentaje
Pgina
Porcentaje
Cluster 0
/recetodromoII/index.php
27.5222
/recetodromoII/index.php
30.6443
/tiki-articles_rss.php
13.291
/tiki-editpage.php
14.5103
/tiki-editpage.php
12.249
/show_image.php
13.299
/show_image.php
11.7154
/tiki-articles_rss.php
11.4948
/tikirandom_num_img.php
10.5155
Cluster 1
/recetodromoII/index.php
29.6124
/tiki-editpage.php
20.0
/show_image.php
14.1085
/tikirandom_num_img.php
13.1783
/tiki-blogs_rss.php
80.8
Cluster 2
/tiki-editpage.php
Damin A. MARTINELLI
46.1538
/tiki-editpage.php
- 76 -
22.8155
/tiki-index.php
30.7692
/recetodromoII/index.php
15.534
/tiki-searchindex.php
23.0769
/tiki-pagehistory.php
13.5922
/tiki-browse_image.php
15.3846
/tiki-edit_translation.php
12.6214
/tikidirectory_browse.php
15.3846
/tiki-list_articles.php
15.3846
/tiki-meta.php
15.3846
/tiki-read_article.php
15.3846
Cluster 3
/tiki-editpage.php
34.7826
/tiki-wiki_rss.php
61.9753
/tiki-searchindex.php
34.7826
/tiki-articles_rss.php
25.679
/tikiview_forum_thread.php
26.087
/recetodromoII/index.php
11.1111
/show_image.php
13.0435
/tiki-browse_image.php
13.0435
/tiki-index.php
13.0435
/tiki-meta.php
13.0435
Cluster 1
Usuarios que no recorren mucho el sitio. Algunos utilizan el recetodromo (buscador
de recetas), editan pginas del wiki y ven algunas imgenes. Los hbitos de los usuarios de
este cluster son muy similares a los del cluster 0, las diferencias recaen en que un mayor
porcentaje de los usuarios del cluster 1 editan pginas del wiki y que lo usuarios del cluster
1 no acceden a los artculos mediante RSS.
Damin A. MARTINELLI
- 77 -
Cluster 2
Usuarios que recorren ms todo el sitio. Editan pginas del wiki. Realizan bsquedas
en el sitio. Algunos acceden a las galeras de imgenes.
Cluster 3
Usuarios que recorren ms todo el sitio. Listan, ven y editan pginas del wiki y
artculos. Realizan bsquedas en el sitio. Algunos acceden a las galeras de imgenes.
Tambin acceden al foro.
Cluster 1
Usuarios que nicamente acceden a los artculos y a las pginas del wiki mediante
RSS.
Cluster 2
Usuarios que utilizan el recetodromo (buscador de recetas), editan pginas del wiki,
editan las traducciones de las pginas del wiki y acceden al historial de modificacin de las
pginas del wiki.
Cluster 3
Usuarios que acceden a los artculos y a las pginas del wiki mediante RSS. Algunos
utilizan el recetdromo (buscador de recetas).
Damin A. MARTINELLI
- 78 -
Damin A. MARTINELLI
- 79 -
6. Conclusiones
El presente trabajo constituye un aporte original en la identificacin de hbitos de uso
de sitios Web, para ello:
Damin A. MARTINELLI
- 80 -
7. Trabajos Futuros
De la experiencia adquirida durante la realizacin del presente trabajo de Tesis surgen
las siguientes propuestas:
Identificar nuevos aspectos de los hbitos de uso que sean capaces de ser
descubiertos mediante redes neuronales artificiales.
Damin A. MARTINELLI
- 81 -
8. Referencias
[Abidi, S.S.R.; 1996] Abidi, S.S.R., Neural networks: their efficacy towards the
Malaysian IT environment. School of Computer Sciences. Universiti Sains
Malaysia. Penang. Malaysia, 1996.
[Abraham, A.; 2003] Abraham, A., i-Miner: A Web usage mining framework
using hierarchical intelligent systems. The IEEE International Conference on
Fuzzy Systems FUZZ-IEEE'03, pp. 1129/1134, IEEE Press, 2003.
[Abraham, A., Ramos, V.; 2003] Abraham, A., Ramos, V. Web Usage Mining
Using Artificial Ant Colony Clustering and Linear Genetic Programming, 2003.
[Agrawal, R., Srikant, R.; 1994] Agrawal, R., Srikant, R., Fast Algorithms for
Mining Association Rules. IBM Almaden Research Center. Proceedings of the
20th International Conference on Very Large Data Bases, pages 478/499,
Septiembre 1994.
[Agrawal, R., Gehrke, J., Gunopulos, D., Raghavan, P.; 1998] Agrawal, R.,
Gehrke, J., Gunopulos, D., Raghavan, P., Automatic Subspace Clustering of
High Dimensional Data for Data Mining Applications. IBM Almaden Research
Center, 1998.
[Agrawal, R., Ghosh S., Imielinski T., Iyer B., Swami A.; 1992] Agrawal, R.,
Ghosh S., Imielinski T., Iyer B., Swami A., An Interval Classifier for Database
Mining Applications. Proceedings of the 18th International Conference on Very
Large Data Bases, pginas 560/573, Agosto 1992.
[Agrawal, R., Imielinski, T., Swami, A.; 1993} Agrawal, R., Imielinski, T.,
Swami, A Mining Association Rules between Sets of Items in Large Databases.
Proceedings of ACM SIGMOD, pginas 207/216, Mayo 1993.
[Ankerst, M.; 2001] Ankerst, M., Visual Data Mining with Pixel-oriented
Visualization Techniques. The Boing Company. Seattle, WA., 2001.
[Ankerst, M., Breunig, M.M., Kriegel, H., Sander, J.; 1999] Ankerst, M.,
Breunig, M.M., Kriegel, H., Sander, J., OPTICS: Ordering Points To Identify
the Clustering Structure.Institute for Computer Science, University of Munich.
Munich, Germany, 1999.
[Batista, P., Silva, M.J.; 2002] Batista, P., Silva, M.J., Mining Web Access Logs
of an On-line Newspaper. Departamento de Informtica, Faculdade de Ciencias
Universidade de Lisboa. Lisboa. Portugal, 2002.
Damin A. MARTINELLI
- 82 -
[Borges, J., Levene, M.; 2000] Borges, J., Levene, M., A Fine Grained Heuristic
to Capture Web Navigation Patterns. ACM SIGKDD, Julio 2000.
[Catledge, L., Pitkow, J.; 1995] Catledge, L., Pitkow, J., Characterizing
browsing strategies in the world wide Web. Computer Networks and ISDN
Systems, 27(6): 10651073, Abril 1995.
[Cernuzzi, L., Molas, M.L.; 2004] Cernuzzi, L., Molas, M.L., Integrando
diferentes tcnicas de Data Mining en procesos de Web Usage Mining.
Universidad Catlica "Nuestra Seora de la Asuncin". Asuncin. Paraguay,
2004.
[Chapman, P., Clinton, J., Kerber, R., Khabaza, T., Reinartz, T., Shearer, C.,
Wirth, R.; 2000] Chapman, P., Clinton, J., Kerber, R., Khabaza, T., Reinartz, T.,
Shearer, C., Wirth, R. (2000). CRISP-DM 1.0 Step-by-step data mining guide.
http://www.crisp-dm.org/CRISPWP-0800.pdf. Vigente al 19/11/2005.
[Cheeseman, P., Stutz, J.; 1996] Cheeseman, P., Stutz, J., Bayesian
classification (AutoClass): Theory and results. In U.M. Fayyad, G. PiatetskyShapiro, P. Smyth, and R. Uthurusamy, editors, Advances in Knowledge
Discovery and Data Mining, pginas 153/180. AAAI/MIT Press, 1996.
[Chen, H., Chau, M.; 2004] Chen, H., Chau, M., Web Mining: Machine
Learning for Web Applications. Annual Review of Information Science and
Technology, 38, (289-329), 2004.
[Chen, M., Han, J., Yu, P.; 1996] Chen, M., Han, J., Data mining: An overview
from database perspective. IEEE Transactions on Knowledge and Data Eng.,
1996.
[Chen, M.S., Park, J.S., Yu, P.S.; 1996] Chen, M.S., Park, J.S., Yu, P.S., Data
mining for path traversal patterns in a Web environment. pginas 385/392,
1996.
[Chi, E.H., Rosien, A., Heer, J.; 2002] Chi, E.H., Rosien, A., Heer, J.,
LumberJack: Intelligent Discovery and Analysis of Web User Traffic
Composition. PARC (Palo Alto Research Center), 2002.
[Cohen, E., Krishnamurthy, B., Rexford, J.; 1998] Cohen, E., Krishnamurthy,
B., Rexford, J., Improving End-to-end Performance of the Web using Server
Volumes and Proxy Filters in Proceedings of the ACM SIGCOMM, pginas
241-253, 1998.
[Cooley R., Mobasher R., Srivastava J.; 1999] Cooley R., Mobasher R.,
Srivastava J., Data Preparation for Mining World Wide Web Browsing Patterns.
Knowledge and Information Systems, volumen 1, 1999.
[Cooley, R.; 2000] Cooley, R., Web usage mining: Discovery and application of
interesting patterns from Web data. PhD Thesis, Department of Computer
Science, University, 2000.
[Cooley, R., Tan, P.N., Srivastava, J.; 1999] Cooley, R., Tan, P.N., Srivastava,
J., Discovery of interesting usage patterns from Web data. University of
Minnesota, 1999.
Damin A. MARTINELLI
- 83 -
[Daza P., S.P.; 2003] Daza P., S.P., Redes neuronales artificiales: Fundamentos,
modelos y aplicaciones. Universidad Militar Nueva Granada. Facultad de
Ingeniera Mecatrnica. Bogot. Colombia, 2003.
[Eirinaki, M., Vazirgiannis, M.; 2003] Eirinaki, M., Vazirgiannis, M., Web
Mining for Web Personalization. Athens University of Economics and Business,
2003.
[Elder IV, J., Pregibon, D.; 1996] Elder IV, J., Pregibon, D., A statistical
perspective on knowledge discovery in databases. In U.M. Fayyad, G. PiatetskyShapiro, P. Smyth, and R. Uthurusamy, editors, Advances in Knowledge
Discovery and Data Mining, pginas 83/115. AAAI/MIT Press, 1996.
[Essenreiter R., Karrenbach, M., Treitel S.; 1999] Essenreiter R., Karrenbach,
M., Treitel S., Identification and classification of multiple reflections with
selforganizing maps. Geophysical Institute, University of Karlsruhe, Germany,
1999.
[Ester, M., Kriegel, H. P., Xu, X.; 1995] Ester, M., Kriegel, H. P., Xu, X.,
Knowledge discovery in large spatial databases: Focusing techniques for
efficient class identification. In Proc. 4th Int. Symp. on Large Spatial Databases
(SSD'95), pginas 67/82, Portland, Maine, Agosto 1995.
[Ester, M., Kriegel, H., Sander J., Xu X.; 1996] Ester, M., Kriegel, H., Sander J.,
Xu X., A Density-Based Algorithm for Discovering Clusters in Large Spatial
Databases with Noise. Institute for Computer Science, University of Munich.
Mnchen, Germany, 1996.
[Felgaer, Pablo E.; 2004] Felgaer, Pablo E., Redes bayesianas aplicadas a
minera de datos inteligente. Laboratorio de Sistemas Inteligentes. Facultad de
Ingeniera. UBA. Argentina, 2004.
[Fu, Y., Shih, M., Creado, M., Ju, C.; 2001] Fu, Y., Shih, M., Creado, M., Ju, C.,
Reorganizing websites based on user access patterns. Department of Computer
Science. University of Missouri-Rolla, 2001.
[Garca Martnez, R., Servente, M., Pasquini, D.; 2003] Garca Martnez, R.,
Servente, M., Pasquini, D., Sistemas Inteligentes. Nueva Librera. (Pginas 67148), 2003.
[Guha, S., Rastogi, R., Shim, K.; 1998] Guha, S., Rastogi, R., Shim, K., CURE:
An efficient clustering algorithm for large databases, 1998.
Damin A. MARTINELLI
- 84 -
[Han, J., Kamber, M.; 2001] Han, J., Kamber, M.; Data mining: Concepts and
techniques. Morgan Kauffmann Publishers, 2001.
[Hand, D., Mannila, H., Smyth, P.; 2001] Hand, D., Mannila, H., Smyth, P.,
Principles of data mining. The MIT Press, 2001.
[Hilera J. R., Martnez V.; 2000] Hilera J. R., Martnez V., Redes Neuronales
Artificiales: Fundamentos, modelos y aplicaciones, RA-MA Editorial, Madrid,
2000.
[Hinneburg, A., Keim, D.; 1998] Hinneburg, A., Keim, D., An Efficient
Approach to Clustering in Large Multimedia Databases with Noise. Institute of
Computer Science, University of Halle, Germany, 1998.
[Hollmen J.; 1996] Hollmen J., Process Modeling using the Self-Organizing
Map, Helsinki University of Technology Department of Computer Science,
1996.
[Hoppfield J.J.; 1982] Hoppfield J.J., Neural networks and physical systems with
emergent collective computational abilities. National Academy of Sciences, vol
79, Abril, (Pginas 2554-2558), 1982.
[Huysmans, J., Baesens B., Vanthienen J.; 2003] Huysmans, J., Baesens B.,
Vanthienen J., Web Usage Mining: A Practical Study. Katholieke Universiteit
Leuven, Dept. of Applied Economic Sciences, 2003.
[Jain, A. K., Dubes, R. C.; 1988] Jain, A. K., Dubes, R. C., Algorithms for
Clustering Data. Printice Hall, 1988.
[Jansen, B. J., Spink, A., Saracevic, T.; 2000] Jansen, B. J., Spink, A., Saracevic,
T., Real life, real users, and real needs: A study and analysis of user queries on
the Web. Information Processing and Management, 2000.
[Kaufman, L., Rousseeuw, P. J.; 1990] Kaufman, L., Rousseeuw, P. J., Finding
Groups in Data: an Introduction to Cluster Analysis. Wiley-Interscience, 1990.
[Keim, D.A.; 2002] Keim, D.A., Information Visualization and Visual Data
Mining. IEEE Transactions on Visualization and Computer Graphics, VOL. 7,
NO. 1, Enero-Marzo 2002.
[Kerkhofs, J., Vanhoof, K., Pannemans, D.; 2001] Kerkhofs, J., Vanhoof, K.,
Pannemans, D., Web Usage Mining on Proxy Servers: A Case Study. Limburg
University Centre, 2001.
Damin A. MARTINELLI
- 85 -
[Kosala, R., Blockeel, H.; 2000] Kosala, R., Blockeel, H., Web Mining
Research: A Survey. ACM SIGKDD, Julio 2000.
[Koutri, M., Avouris, N., Daskalaki, S.; 2004] Koutri, M., Avouris, N.,
Daskalaki, S., A survey on Web usage mining techniques for Web-based
adaptive hypermedia systems. University of Patras. Greece, 2004.
[Lalani, A.S.; 2003] Lalani, A.S., Data mining of Web access logs. School of
Computer Science and Information Technology. Royal Melbourne Institute of
Technology. Melbourne, Victoria, Australia, 2003.
[Lu H., Setiono R., Liu, H.; 1995] Lu H., Setiono R., Liu, H., NeuroRule: A
Connectionist Approach to Data Mining. Proceedings of the 21th International
Conference on Very Large Data Bases, pginas 478/489, Septiembre 1995.
[Mannila, H.; 1997] Mannila, H., Methods and problems in data mining. In
Proc. of International Conference on Database Theory, Delphi, Greece, 1997.
[Marrone, Paolo; 2005] Marrone, Paolo, The Complete Guide: All you need to
know
about
Joone.
http://prdownloads.sourceforge.net/joone/JooneCompleteGuide.pdf?download.
Vigente al 19/11/2005.
[Masseglia, F., Poncelet, P., Teisseire, M.; 1999] Masseglia, F., Poncelet, P.,
Teisseire, M., Using data mining techniques on Web access logs to dynamically
improve hypertext structure. In ACM SigWeb Letters, 8(3): 13-19, 1999.
[Mobasher, B., Cooley R., Srivastava, J.; 1999] Mobasher, B., Cooley R.,
Srivastava, J., Creating Adaptive Web Sites Through Usage-Based Clustering of
URLs, 1999.
[Mobasher, B., Dai, H., Luo, T., Nakagawa, M.; 2001] Mobasher, B., Dai, H.,
Luo, T., Nakagawa, M., Effective personalization based on association rule
discovery from Web usage data. In Proc. of the 3rd ACM Workshop on Web
Information and Data Management (WIDM01), Atlanta, 2001.
Damin A. MARTINELLI
- 86 -
[Nasraoui, O., Pavuluri, M.; 2004] Nasraoui, O., Pavuluri, M., Accurate Web
recommendations Based in Profile-Specific URL-Predictor Neural Networks.
Dept. of Electrical and Computer Engineering. The University of Menphis,
2004.
[Ng, R., Han, J.; 1994] Ng, R., Han, J., Efficient and effective clustering method
for spatial data mining. In Proc. 1994 Int. Conf. Very Large Data Bases,
(Pginas 144/155), Santiago, Chile, Septiembre 1994.
[Pazzani, M., Billsus D.; 1997] Pazzani, M., Billsus D., Learning and revising
user profiles: The identification of interesting Web sites. Machine Learning, 27,
(Pginas 313/331), 1997.
[Perkowitz, M., Etzioni, O.; 1998] Perkowitz, M., Etzioni, O., Adaptive Web
sites: Automatically synthesizing Web pages. In Proc. of the 15th National
Conference on Artificial Intelligence, (Pginas 727/732), 1998.
[Perkowitz, M., Etzioni, O.; 1997] Perkowitz, M., Etzioni, O., Adaptive sites:
Automatically learning from user access patterns. In Proc. of the Sixth
International WWW Conference, Santa Clara, CA, 1997.
[Pirolli, P., Pitkow J., Rao R.; 1996] Pirolli, P., Pitkow J., Rao R., Silk from a
sow's ear: Extracting usable structures from the Web. In Proc. on Human
Factors in Computing Systems (CHI'96). ACM Press, 1996.
[Pitkow, J.; 1997] Pitkow, J., In search of reliable usage data on the WWW.
Xerox Palo Alto Research Center. Palo Alto, California, 1997.
[Punin, J., Krishnamoorthy, M., Zaki, M.; 2001] Punin, J., Krishnamoorthy, M.,
Zaki, M., LOGML: Log Markup Language for Web Usage Mining. Computer
Science Department. Rensselaer Polytechnic Institute, 2001.
[Quinlan, J. R.; 1993] Quinlan, J. R., C4.5: Programs for Machine Learning.
Morgan Kaufmann, 1993.
[Rangarajan, S., Phoha, V., Balagani, K., Iyengar, S., Selmic, R.; 2003]
Rangarajan, S., Phoha, V., Balagani, K., Iyengar, S., Selmic, R., Web User
Clustering and Its Application to Prefetching Using ART Neural Networks.
Louisiana Tech University & Louisiana State University, 2003.
Damin A. MARTINELLI
- 87 -
RFC
2616
Hypertext
Transfer
Protocol
[Ritter H., Martinetz T., Schulten K.; 1992] Ritter H., Martinetz T., Schulten K.,
Neural Computation and Self-Organizing Maps. Addison-Wesley Publishing
Company, 1992.
[Roussinov, D., Zhao JL., 2003] Roussinov, D., Zhao JL., Automatic discovery
of similarity relationships through Web mining. Decision Support Systems,
35(1), (149/166), 2003.
[Roy, A., 2000] Roy, A., Artificial Neural Networks - A Science in Trouble.
ACM SIGKDD, Enero 2000.
[Silverstein, C., Henzinger, M., Marais, H., Moricz, M.; 1999] Silverstein, C.,
Henzinger, M., Marais, H., Moricz, M., Analysis of a Very Large Web Search
Engine Query Log. ACM SIGIR Forum, 33(1), (6-12), 1999.
[Smith, K.A., Ng, A.; 2002] Smith, K.A., Ng, A., Web page clustering usign a
self-organizing map of user navigation patterns. School of Business Systems.
Monash University. Victoria. Australia, 2002.
[Spiliopoulou, M., Pohle, C., Faulstich, L. C.; 2000] Spiliopoulou, M., Pohle,
C., Faulstich, L. C., Improving the effectiveness of a website with Web usage
mining. In Advances in Web Usage Analysis and User Profiling, Berln,
Springer, (Pginas 14162), 2000.
[Spink, A., Xu, J.; 2000] Spink, A., Xu, J., Selected Results from a Large Study
of Web Searching: The Excite Study. Information Research.
[Spink, A., Wolfram, D., Jansen, B. J., Saracevic, T.; 2001] Spink, A., Wolfram,
D., Jansen, B. J., Saracevic, T., Searching the Web: The Public and Their
Queries. Journal of the American Society for Information Science and
Technology, 52(3), (226-234), 2001.
[Srikant, R., Yang, Y.; 2001] Srikant, R., Yang, Y., Mining Web logs to improve
website organization. In Proc. of the tenth International World Wide Web
Conference, Hong Kong, 2001.
[Srivastava, J., Cooley, R., Deshpande, M., Tan, P.N.; 2000] Srivastava, J.,
Cooley, R., Deshpande, M., Tan, P.N., Web Usage Mining: Discovery and
Applications of Usage Patterns from Web Data. ACM SIGKDD, Enero 2000.
Damin A. MARTINELLI
- 88 -
HTTP/1.1.
[Vesanto J., Alhoniemi E.; 2000] Vesanto J., Alhoniemi E., Clustering of the
Self-Organizing Map. IEEE transactions on neural networks, Vol 11, No. 3,
2000.
[Wang, R., Yang, Y., Muntz, R.; 1997] Wang, R., Yang, Y., Muntz, R., STING:
A Statistical Information Grid Approach to Spatial Data. Department of
Computer Science. University of California, Los Angeles, 1997.
WCA.
Web
characterization
terminology
&
http://www.w3.org/1999/05/WCA-terms/. Vigente al 19/11/2005.
[Yan, T., Javobsen, J., Garcia-Molina, H., Dayal, U.; 1996] Yan, T., Javobsen,
J., Garcia-Molina, H., Dayal, U., From User Access Patterns to Dynamic
Hypertext Linking, 1996.
[Yang, Q., Zhang HH.; 2003] Yang, Q., Zhang HH., Web-log mining for
predictive Web caching. IEEE Transactions on Knowledge and Data
Engineering, Vol. 15, No. 4, (Pginas 1050/1053), 2003.
[Zhang, D., Dong Y.; 2003] Zhang, D., Dong Y., A novel Web usage mining
approach for search engines. Computer Networks, 39(3), (303/310), 2003.
[Zhang, T., Ramakrishnan R., Livny, M.; 1996] Zhang, T., Ramakrishnan R.,
Livny, M., BIRCH: an efficient data clustering method for very large databases.
In Proc. 1996 ACM-SIGMOD Int. Conf. Management of Data, Montreal,
Canada, Junio 1996.
Damin A. MARTINELLI
- 89 -
definitions.
A. Apndice I: Joone
A.1. Descripcin de Joone.................................................................................................... 91
A.1.1. Capas de Neuronas ................................................................................................ 92
A.1.1.1. Capa Lineal..................................................................................................... 92
A.1.1.2. Capa Lineal Parcial......................................................................................... 93
A.1.1.3. Capa Sigmoidal............................................................................................... 93
A.1.1.4. Capa Tangente Hiperblica ............................................................................ 93
A.1.1.5. Capa Logartmica............................................................................................ 93
A.1.1.6. Capa Senoidal ................................................................................................. 93
A.1.1.7. Capa con Retraso ............................................................................................ 93
A.1.1.8. Capa con Contexto.......................................................................................... 93
A.1.1.9. Capa de Gauss ................................................................................................ 93
A.1.1.10. Capa RBF Gaussiana .................................................................................... 94
A.1.1.11. Capa El Ganador Se Lleva Todo............................................................... 94
A.1.1.12. Capa Gaussiana............................................................................................. 94
A.1.2. Sinapsis .................................................................................................................. 94
A.1.2.1. Sinapsis Directa .............................................................................................. 94
A.1.2.2. Sinapsis Completa .......................................................................................... 94
A.1.2.3. Sinapsis con Retraso ....................................................................................... 95
A.1.2.4. Sinapsis de Kohonen....................................................................................... 95
A.1.2.5. Sinapsis de Sanger .......................................................................................... 95
A.1.3. Sinapsis de Entrada................................................................................................ 95
A.1.3.1. Sinapsis de Entrada de Archivo...................................................................... 95
A.1.3.2. Sinapsis de Entrada de URL ........................................................................... 96
A.1.3.3. Sinapsis de Entrada de Excel.......................................................................... 96
A.1.3.4. Sinapsis de Entrada de JDBC ......................................................................... 96
A.1.3.5. Sinapsis de Entrada de Yahoo Finance........................................................... 96
A.1.3.6. Sinapsis de Entrada de Memoria .................................................................... 96
A.1.4. Sinapsis de Salida .................................................................................................. 96
A.1.5. Sinapsis Maestra .................................................................................................... 96
A.1.6. El Monitor.............................................................................................................. 97
A.2. Eleccin de Joone ......................................................................................................... 97
Damin A. MARTINELLI
- 90 -
En la figura se observa un ejemplo de una red con dos capas y conectada mediante
una sinapsis. Cada capa esta compuesta de una cierta cantidad de neuronas, cada una de las
cuales poseen las mismas caractersticas (funcin de transferencia, tasa de aprendizaje,
etc.).
Una red neuronal construida con Joone puede estar compuesta de cualquier cantidad
de capas de diferentes tipos. Cada capa procesa sus seales de entrada, aplica la funcin de
transferencia y enva los patrones resultantes a la sinapsis que la conecta con la capa
siguiente.
Damin A. MARTINELLI
- 91 -
Para asegurar que sea posible construir cualquier arquitectura de red neuronal, se
necesita un mtodo para transferir los patrones a travs de la red sin un punto central de
control. Para cumplir este objetivo, cada capa de neuronas es implementada como un objeto
Runnable, de modo que cada capa se ejecute independientemente de las otras, obteniendo
los patrones de entrada, aplicndoles la funcin de transferencia y colocando los patrones
resultantes en la sinapsis de salida, para que las capas siguientes puedan recibirlos,
procesarlos y continuar con las dems capas, hasta llegar a la capa de salida.
Este mecanismo de transporte es tambin utilizado durante la etapa de entrenamiento
para propagar el error desde la capa de salida a la capa de entrada [Figura A.2], permitiendo
modificar los pesos de las conexiones utilizando el algoritmo de aprendizaje seleccionado
(backpropagation, por ejemplo).
Las capas y las sinapsis poseen sus propios mecanismos para ajustar los pesos
dependiendo del algoritmo de aprendizaje seleccionado.
Damin A. MARTINELLI
- 92 -
Damin A. MARTINELLI
- 93 -
A.1.2. Sinapsis
El objeto Sinapsis (Synapse) representa la conexin entre dos capas de neuronas,
permitiendo que un patrn se transfiera de una capa a la otra.
Las sinapsis poseen los pesos de las conexiones, los cuales son modificados en la
etapa de entrenamiento de acuerdo al algoritmo de aprendizaje seleccionado.
Damin A. MARTINELLI
- 94 -
La Sinapsis Completa (FullSynapse) conecta todos los nodos de una capa con todos
los nodos de otra capa.
Los pesos de sus conexiones se modifican en la etapa de entrenamiento de acuerdo al
algoritmo de aprendizaje seleccionado.
Damin A. MARTINELLI
- 95 -
Damin A. MARTINELLI
- 96 -
A.1.6. El Monitor
El objeto Monitor representa en punto central donde se encuentran todos los
parmetros necesarios para que los componentes de la red neuronal funcionen
correctamente, como la velocidad de aprendizaje, el momento, el algoritmo de aprendizaje,
la cantidad de ciclos de entrenamiento, el ciclo actual, etc.
Cada capa de neuronas y cada sinapsis de una red neuronal recibe un puntero a una
instancia de un objeto Monitor, de modo que, cuando el usuario desea cambiar algn
parmetro, solo debe hacerlo en el objeto Monitor.
El Monitor tambin provee a la aplicacin que lo utiliza de un mecanismo de
notificaciones basado en varios eventos arrojados cuando una accin en particular sucede.
Por ejemplo, una aplicacin externa puede ser informada cuando la red neuronal comienza
o termina los ciclos de entrenamiento, cuando finaliza un ciclo o cuando el valor del error
global cambia durante la etapa de entrenamiento.
Damin A. MARTINELLI
- 97 -
Damin A. MARTINELLI
- 98 -
Damin A. MARTINELLI
- 99 -
Damin A. MARTINELLI
- 100 -
Damin A. MARTINELLI
- 101 -
Damin A. MARTINELLI
- 102 -
Para agregar un nuevo proyecto se debe presionar sobre el boton Nuevo Proyecto,
ubicado en el men de la izquierda.
Luego, completar el campo Nombre, indicando el nombre del proyecto a crear, y el
campo Descripcin, con la descripcin del mismo [Figura B.6]. Presionar sobre Crear
Proyecto para crear un proyecto nuevo.
A modo de ejemplo, se visualiza la creacin de un proyecto de prueba llamado
proyecto, cuya descripcin es Proyecto de Prueba [Figura B.6].
Damin A. MARTINELLI
- 103 -
Damin A. MARTINELLI
- 104 -
Damin A. MARTINELLI
- 105 -
B.7.3. Logs
Permite subir un nuevo archivo de log, el cual estara disponible para todos los
proyectos del usuario, cargar ese log pre-procesandolo y ver todos los registros del log
cargado [Figura B.11].
Damin A. MARTINELLI
- 106 -
Damin A. MARTINELLI
- 107 -
B.7.6. Sesiones/Clusters
Permite acceder a las estadsticas mostrando la cantidad de sesiones en cada grupo de
usuarios generados utilizando la red neuronal mapa auto-organizativo (SOM), el algoritmo
K-Means y una comparacin entre estos dos [Figura B.13].
Damin A. MARTINELLI
- 108 -
B.7.8. Pginas/Clusters
Permite acceder al detalle de las pginas mas frecuentes entre los accesos de los
usuarios de cada grupo descubierto mediante la red neuronal SOM, el algoritmo K-Means o
una comparacin entre estos dos [Figura B.15].
Damin A. MARTINELLI
- 109 -
Damin A. MARTINELLI
- 110 -
Damin A. MARTINELLI
- 111 -
Descripcin de campos:
Cdigos: se indican los codigos de error devueltos por el servidor Web, que
seran tenidos en consideracin para pre-procesar el archivo de log. Estos
cdigos deben estar separados por comas. Por defecto, el nico codigo a
considerar es el cdigo 200, el cual significa respuesta correcta.
ID Pginas: se indican los nombre de las variables GET que son consideradas
diferenciadoras de pginas distintas dentro del sitio Web analizado. Estos
nombres deben estar separados por comas. Por defecto no se posee ningn
nombre de variable identificadora de pginas distintas.
Damin A. MARTINELLI
- 112 -
Damin A. MARTINELLI
- 113 -
Damin A. MARTINELLI
- 114 -
Damin A. MARTINELLI
- 115 -
Descripcin de campos:
Damin A. MARTINELLI
- 116 -
Damin A. MARTINELLI
- 117 -
Damin A. MARTINELLI
- 118 -
Descripcin de campos:
Damin A. MARTINELLI
- 119 -
Damin A. MARTINELLI
- 120 -
Descripcin de campos:
Damin A. MARTINELLI
- 121 -
Damin A. MARTINELLI
- 122 -
Damin A. MARTINELLI
- 123 -
Damin A. MARTINELLI
- 124 -
B.13.3. Comparacin
Para acceder al detalle de la cantidad de sesiones de usuario que posee cada grupo de
usuarios descubiertos mediante la red neuronal mapa auto-organizativo (SOM)
comparndolo con los descubiertos mediente el algoritmo K-Means, se debe acceder al subelemento Comparacin del elemento Sesiones/Clusters del men principal del sistema
[Figura B.42].
Damin A. MARTINELLI
- 125 -
Damin A. MARTINELLI
- 126 -
al sub-elemento SOM del elemento Detalle Sesiones del men principal del sistema
[Figura B.44].
Damin A. MARTINELLI
- 127 -
Damin A. MARTINELLI
- 128 -
Damin A. MARTINELLI
- 129 -
B.14.3. Comparacin
Para acceder al detalle de las sesiones indicando el grupo de usuario descubierto
mediante la red neuronal mapa auto-organizativo (SOM) y el algoritmo K-Means al cual
pertenece, se debe acceder al sub-elemento Comparacin del elemento Detalle Sesiones
del men principal del sistema [Figura B.48].
Damin A. MARTINELLI
- 130 -
Damin A. MARTINELLI
- 131 -
Damin A. MARTINELLI
- 132 -
Damin A. MARTINELLI
- 133 -
Damin A. MARTINELLI
- 134 -
Damin A. MARTINELLI
- 135 -
B.15.3. Comparacin
Para acceder al detalle de las pginas ms frecuentes entre las sesiones de los usuarios
de cada grupo descubierto mediante la red neuronal SOM comparandolas con la de los
grupos descubiertos mediante el algoritmo K-Means, se debe acceder al sub-elemento
Comparacin del elemento Pginas/Clusters del men principal del sistema [Figura
B.54].
Damin A. MARTINELLI
- 136 -
Damin A. MARTINELLI
- 137 -
Damin A. MARTINELLI
- 138 -
Damin A. MARTINELLI
- 139 -
BinarySessionClusterBean
ClusterCounterBean
ClusterCounterGraphBean
ConfigFileParserBean
CreateProjectBean
CreateUserBean
DeleteProjectBean
FileBean
FilesViewBean
InputMakerBean
KMeansBean
LogBean
LogCleanerBean
LogFilesViewBean
LogFileUploadBean
LoginBean
LogLoaderBean
Damin A. MARTINELLI
- 140 -
Class Summary
datos.
LogViewBean
PageCounterBean
PagesInClustersBean
PagesInClustersViewBean
SessionClusterBean
SessionMakerBean
SessionSaver
SessionsClusterViewBean
SOMBean
UserBean
Damin A. MARTINELLI
- 141 -
Constructor Summary
BinarySessionClusterBean()
Method Summary
void count(java.lang.String inputFilename)
Constructor Detail
BinarySessionClusterBean
public BinarySessionClusterBean()
BinarySessionClusterBean
throws java.lang.Exception
Throws:
java.lang.Exception
Method Detail
Damin A. MARTINELLI
- 142 -
count
public void count(java.lang.String
inputFilename)
count
throws java.lang.Exception
Method Summary
void count()
Damin A. MARTINELLI
- 143 -
int getClustersCount()
Constructor Detail
ClusterCounterBean
Damin A. MARTINELLI
- 144 -
public ClusterCounterBean()
ClusterCounterBean
throws java.lang.Exception
Method Detail
count
public void count()
count
throws java.lang.Exception
getCount
public java.lang.String getCount()
getCount
throws java.lang.Exception
getClustersCount
public int getClustersCount()
getClustersCount
goFirstCluster
public void goFirstCluster()
goFirstCluster
Damin A. MARTINELLI
- 145 -
hasNextCluster
public boolean hasNextCluster()
hasNextCluster
getNextCluster
public java.lang.String getNextCluster()
getNextCluster
getNextClusterSessions
public java.lang.String getNextClusterSessions()
getNextClusterSessions
setUser
public void setUser(java.lang.String
userName)
setUser
getUser
public java.lang.String getUser()
getUser
setProject
public void setProject(java.lang.String
projectName)
setProject
Damin A. MARTINELLI
- 146 -
getProject
public java.lang.String getProject()
getProject
setType
public void setType(java.lang.String
typeClustering)
setType
getType
public java.lang.String getType()
getType
main
public static void main(java.lang.String[]
args)
main
throws java.lang.Exception
Throws:
java.lang.Exception
Damin A. MARTINELLI
- 147 -
Author:
Damian Martinelli
Constructor Summary
ClusterCounterGraphBean()
Method Summary
double[] getData()
Constructor Detail
ClusterCounterGraphBean
public ClusterCounterGraphBean()
ClusterCounterGraphBean
throws java.lang.Exception
Damin A. MARTINELLI
- 148 -
Method Detail
getGraph
public java.lang.String getGraph()
getGraph
getMap
public java.lang.String getMap()
getMap
getData
public double[] getData()
getData
setData
public void setData(double[]
data)
setData
getLabels
public java.lang.String[] getLabels()
getLabels
setLabels
public void setLabels(java.lang.String[]
labels)
setLabels
Damin A. MARTINELLI
- 149 -
Parameters:
labels - Etiquetas del grafico.
getPath
public java.lang.String getPath()
getPath
setPath
public void setPath(java.lang.String
path)
setPath
Author:
Damian Martinelli
See Also:
Serialized Form
Constructor Summary
ConfigFileParserBean()
Method Summary
java.lang.String getDatabaseName()
Damin A. MARTINELLI
- 150 -
java.lang.String getDatabasePass()
java.lang.String getDatabaseServer()
java.lang.String getDatabaseUser()
java.lang.String getDirFiles()
static void main(java.lang.String[] args)
void setDatabaseName(java.lang.String databaseName)
void setDatabasePass(java.lang.String databasePass)
void setDatabaseServer(java.lang.String databaseServer)
void setDatabaseUser(java.lang.String databaseUser)
void setDirFiles(java.lang.String dirFiles)
Constructor Detail
ConfigFileParserBean
public ConfigFileParserBean()
ConfigFileParserBean
Method Detail
getDatabaseServer
public java.lang.String getDatabaseServer
getDatabaseServer()
eServer
Damin A. MARTINELLI
- 151 -
setDatabaseServer
public void setDatabaseServer(java.lang.String
databaseServer)
setDatabaseServer
getDatabaseName
public java.lang.String getDatabaseName()
getDatabaseName
setDatabaseName
public void setDatabaseName(java.lang.String
databaseName)
setDatabaseName
getDatabaseUser
public java.lang.String getDatabaseUser()
getDatabaseUser
setDatabaseUser
public void setDatabaseUser(java.lang.String
databaseUser)
setDatabaseUser
getDatabasePass
public java.lang.String getDatabasePass()
getDatabasePass
setDatabasePass
public void setDatabasePass(java.lang.String
databasePass)
setDatabasePass
getDirFiles
public java.lang.String getDirFiles()
getDirFiles
setDirFiles
public void setDirFiles(java.lang.String
dirFiles)
setDirFiles
main
Damin A. MARTINELLI
- 152 -
Throws:
java.lang.Exception
Method Summary
boolean createNewProject()
Damin A. MARTINELLI
- 153 -
java.lang.String getProject()
Constructor Detail
CreateProjectBean
public CreateProjectBean()
CreateProjectBean
throws java.lang.Exception
Method Detail
setUser
public void setUser(java.lang.String
userName)
setUser
getUser
public java.lang.String getUser()
getUser
Damin A. MARTINELLI
- 154 -
setDescription
public void setDescription(java.lang.String
description)
setDescription
getDescription
public java.lang.String getDescription()
getDescription
setProject
public void setProject(java.lang.String
projectName)
setProject
getProject
public java.lang.String getProject()
getProject
getNewProject
public java.lang.String getNewProject()
getNewProject
Crea un nuevo proyecto, si ha sido seteado el nombre del usuario y el nombre del
proyecto a crear.
Returns:
Nombre del proyecto creado.
createNewProject
public boolean createNewProject()
createNewProject
Crea un nuevo proyecto, si ha sido seteado el nombre del usuario y el nombre del
proyecto a crear.
Damin A. MARTINELLI
- 155 -
Returns:
true si creo el proyecto correctamente, false sino.
Method Summary
boolean createNewUser()
Damin A. MARTINELLI
- 156 -
Constructor Detail
CreateUserBean
public CreateUserBean()
CreateUserBean
throws java.lang.Exception
Method Detail
setUser
public void setUser(java.lang.String
userName)
setUser
getUser
public java.lang.String getUser()
getUser
setPassword
public void setPassword(java.lang.String
pass)
setPassword
getPassword
public java.lang.String getPassword()
getPassword
createNewUser
Damin A. MARTINELLI
- 157 -
Method Summary
boolean deleteProject()
Damin A. MARTINELLI
- 158 -
java.lang.String getUser()
Constructor Detail
DeleteProjectBean
public DeleteProjectBean()
DeleteProjectBean
throws java.lang.Exception
Method Detail
setUser
public void setUser(java.lang.String
userName)
setUser
getUser
public java.lang.String getUser()
getUser
setProject
public void setProject(java.lang.String
projectName)
setProject
- 159 -
Parameters:
projectName - Nombre del proyecto.
getProject
public java.lang.String getProject()
getProject
getDeleteProject
public java.lang.String getDeleteProject()
getDeleteProject
deleteProject
public boolean deleteProject()
deleteProject
Clase utilizada para guardar informacion en la base de datos sobre los archivo
utilizados en la herramienta.
Author:
Damin A. MARTINELLI
- 160 -
Damian Martinelli
See Also:
Serialized Form
Constructor Summary
FileBean()
Method Summary
java.lang.String getDescription()
Damin A. MARTINELLI
- 161 -
Constructor Detail
FileBean
public FileBean()
FileBean
throws java.lang.Exception
Method Detail
setFile
public void setFile(java.lang.String
filename)
setFile
throws java.lang.Exception
getFile
public java.lang.String getFile()
getFile
setUser
public void setUser(java.lang.String
userName)
setUser
getUser
Damin A. MARTINELLI
- 162 -
setDescription
public void setDescription(java.lang.String
description)
setDescription
getDescription
public java.lang.String getDescription()
getDescription
setProject
public void setProject(java.lang.String
projectName)
setProject
getProject
public java.lang.String getProject()
getProject
setFilePath
public void setFilePath(java.lang.String
set)
setFilePath
Si todos los atributos necesarios fueron seteados, setea el path y el nombre del
archivo donde se debe copiar el archivo y carga la informacion del archivo en la
base de datos.
Parameters:
set - No se utiliza. Solo por compatibilidad con JavaBeans.
Damin A. MARTINELLI
- 163 -
getFilePath
public java.lang.String getFilePath()
getFilePath
setSavePath
public void setSavePath(java.lang.String
savePath)
setSavePath
setType
public void setType(java.lang.String
typeFile)
setType
getType
public java.lang.String getType()
getType
Damin A. MARTINELLI
- 164 -
implements java.io.Serializable
Clase utilizada para obtener todos los archivos de un cierto tipo, para un usuario y
proyecto dado.
Author:
Damian Martinelli
See Also:
Serialized Form
Constructor Summary
FilesViewBean()
Method Summary
java.lang.String getNextDescription()
Damin A. MARTINELLI
- 165 -
Constructor Detail
FilesViewBean
public FilesViewBean()
FilesViewBean
throws java.lang.Exception
Method Detail
goFirstFile
public void goFirstFile()
goFirstFile
Inicializa para la lectura de todos los archivos de un tipo, para un usuario y proyecto
dado.
hasNextFile
public boolean hasNextFile()
asNextFile
getNextFile
public java.lang.String getNextFile()
getNextFile
getNextDescription
public java.lang.String getNextDescription()
getNextDescription
Damin A. MARTINELLI
- 166 -
setUser
public void setUser(java.lang.String
userName)
setUser
getUser
public java.lang.String getUser()
getUser
setProject
public void setProject(java.lang.String
projectName)
setProject
getProject
public java.lang.String getProject()
getProject
setType
public void setType(java.lang.String
typeFile)
setType
getType
public java.lang.String getType()
getType
- 167 -
Method Summary
java.lang.String getKMeansEnabled()
Damin A. MARTINELLI
- 168 -
Constructor Detail
InputMakerBean
public InputMakerBean()
InputMakerBean
throws java.lang.Exception
Method Detail
make
public void make()
make
throws java.lang.Exception
Damin A. MARTINELLI
- 169 -
setKMeansFile
public void setKMeansFile(java.lang.String
name)
setKMeansFile
throws java.lang.Exception
getKMeansFile
public java.lang.String getKMeansFile()
getKMeansFile
setSOMFile
public void setSOMFile(java.lang.String
name)
setSOMFile
throws java.lang.Exception
getSOMFile
public java.lang.String getSOMFile()
getSOMFile
setKMeansEnabled
Damin A. MARTINELLI
- 170 -
getKMeansEnabled
public java.lang.String getKMeansEnabled()
getKMeansEnabled
setSOMEnabled
public void setSOMEnabled(java.lang.String
setSOMEnabled
enabled)
getSOMEnabled
public java.lang.String getSOMEnabled()
getSOMEnabled
getSessions
public java.lang.String getSessions()
getSessions
throws java.lang.Exception
Si estan todos los atributos necesarios seteados, crean los archivos de sesiones
seleccionados.
Returns:
Resumen de la cantidad de sesiones representadas en los archivos creados.
Throws:
java.lang.Exception
setUser
public void setUser(java.lang.String
userName)
setUser
Damin A. MARTINELLI
- 171 -
getUser
public java.lang.String getUser()
getUser
setProject
public void setProject(java.lang.String
projectName)
setProject
getProject
public java.lang.String getProject()
getProject
main
public static void main(java.lang.String[]
args)
main
throws java.lang.Exception
Throws:
java.lang.Exception
Damin A. MARTINELLI
- 172 -
Method Summary
java.lang.String getClusters()
Damin A. MARTINELLI
- 173 -
Constructor Detail
KMeansBean
public KMeansBean()
KMeansBean
KMeansBean
public KMeansBean(java.lang.String
input,
KMeansBean
java.lang.String output,
int k)
throws java.lang.Exception
Method Detail
setInput
public void setInput(java.lang.String
file)
setInput
getInput
public java.lang.String getInput()
getInput
Damin A. MARTINELLI
- 174 -
setOutput
public void setOutput(java.lang.String
file)
setOutput
getOutput
public java.lang.String getOutput()
getOutput
setK
public void setK(java.lang.String
k)
setK
getK
public java.lang.String getK()
getK
getClusters
public java.lang.String getClusters()
getClusters
save
Damin A. MARTINELLI
- 175 -
main
public static void main(java.lang.String[]
args)
main
Method Summary
java.lang.String getAuthuser()
Damin A. MARTINELLI
- 176 -
Constructor Detail
LogBean
public LogBean()
LogBean
LogBean
public LogBean(java.lang.String
IP,
LogBean
java.lang.String authuser,
java.lang.String page,
java.lang.String timestamp)
Damin A. MARTINELLI
- 177 -
authuser
Method Detail
setIP
public void setIP(java.lang.String
IP)
setIP
getIP
public java.lang.String getIP()
getIP
setAuthuser
public void setAuthuser(java.lang.String
authuser)
setAuthuser
getAuthuser
public java.lang.String getAuthuser()
getAuthuser
setPage
public void setPage(java.lang.String
page)
setPage
Damin A. MARTINELLI
- 178 -
getPage
public java.lang.String getPage()
getPage
setTimestamp
public void setTimestamp(java.lang.String
timestamp)
etTimestamp
getTimestamp
public java.lang.String getTimestamp()
getTimestamp
toString
public java.lang.String toString()
toString
Overrides:
toString in class java.lang.Object
- 179 -
Author:
Damian Martinelli
See Also:
Serialized Form
Constructor Summary
LogCleanerBean()
Method Summary
void clean()
Constructor Detail
LogCleanerBean
public LogCleanerBean()
LogCleanerBean
throws java.lang.Exception
- 180 -
java.lang.Exception
Method Detail
clean
public void clean()
clean
throws java.lang.Exception
getCleaneds
public java.lang.String getCleaneds()
getCleaneds
throws java.lang.Exception
Si toda la informacion necesaria esta seteada, borra todos los registros de log de la
tabla de logs.
Returns:
Cantidad de registros eliminados.
Throws:
java.lang.Exception
setUser
public void setUser(java.lang.String
userName)
setUser
throws java.lang.Exception
getUser
public java.lang.String getUser()
getUser
setProject
Damin A. MARTINELLI
- 181 -
getProject
public java.lang.String getProject()
getProject
main
public static void main(java.lang.String[]
args)
main
throws java.lang.Exception
Throws:
java.lang.Exception
Clase utilizada para listar todos los archivos de log cargados por un usuario
Author:
Damian Martinelli
See Also:
Serialized Form
Damin A. MARTINELLI
- 182 -
Constructor Summary
LogFilesViewBean()
Method Summary
java.lang.String getNextDescription()
Constructor Detail
LogFilesViewBean
public LogFilesViewBean()
LogFilesViewBean
throws java.lang.Exception
Method Detail
goFirstLog
public void goFirstLog()
goFirstLog
Damin A. MARTINELLI
- 183 -
hasNextLog
public boolean hasNextLog()
hasNextLog
getNextLog
public java.lang.String getNextLog()
getNextLog
getNextDescription
public java.lang.String getNextDescription()
getNextDescription
setUser
public void setUser(java.lang.String
userName)
setUser
getUser
public java.lang.String getUser()
getUser
Damin A. MARTINELLI
- 184 -
Method Summary
void doUpload(javax.servlet.http.HttpServletRequest request)
Damin A. MARTINELLI
- 185 -
java.lang.String getUser()
Constructor Detail
LogFileUploadBean
public LogFileUploadBean()
LogFileUploadBean
throws java.lang.Exception
Method Detail
setLogFile
public void setLogFile(java.lang.String
filename)
setLogFile
throws java.lang.Exception
getInput
public java.lang.String getInput()
getInput
- 186 -
Returns:
Nombre del archivo.
getUpload
public boolean getUpload()
getUpload
setRequest
public void setRequest(javax.servlet.http.HttpServletRequest
request)
setRequest
setUser
public void setUser(java.lang.String
userName)
setUser
getUser
public java.lang.String getUser()
getUser
getFilename
public java.lang.String getFilename()
getFilename
getFilepath
Damin A. MARTINELLI
- 187 -
setSavePath
public void setSavePath(java.lang.String
savePath)
setSavePath
getContentType
public java.lang.String getContentType()
getContentType
getFieldValue
public java.lang.String getFieldValue(java.lang.String
fieldName)
getFieldValue
getFieldsValues
public java.lang.String getFieldsValues()
getFieldsValues
doUpload
public void doUpload(javax.servlet.http.HttpServletRequest
request)
doUpload
throws java.io.IOException
Damin A. MARTINELLI
- 188 -
request
Method Summary
java.lang.String getUser()
Constructor Detail
Damin A. MARTINELLI
- 189 -
LoginBean
public LoginBean()
LoginBean
throws java.lang.Exception
Method Detail
setUser
public void setUser(java.lang.String
userName)
setUser
getUser
public java.lang.String getUser()
getUser
setPass
public void setPass(java.lang.String
password)
setPass
isValidUser
public boolean isValidUser()
isValidUser
Damin A. MARTINELLI
- 190 -
java.lang.Object
ar.com.do2.iadh.LogLoaderBean
Clase utilizada para leer el archivo de log y obtener la informacion del mismo para
almacenarla en la base de datos.
Author:
Damian Martinelli
See Also:
Serialized Form
Constructor Summary
LogLoaderBean()
Method Summary
java.lang.String getExtensions()
Damin A. MARTINELLI
- 191 -
java.lang.String getTypeLog()
Constructor Detail
LogLoaderBean
public LogLoaderBean()
LogLoaderBean
throws java.lang.Exception
Method Detail
Damin A. MARTINELLI
- 192 -
load
public void load(java.lang.String
inputFilename)
load
throws java.lang.Exception
getLoad
public java.lang.String getLoad()
getLoad
throws java.lang.Exception
setInput
public void setInput(java.lang.String
inputFilename)
setInput
throws java.lang.Exception
getInput
public java.lang.String getInput()
getInput
setTypeLog
Damin A. MARTINELLI
- 193 -
getTypeLog
public java.lang.String getTypeLog()
getTypeLog
setUser
public void setUser(java.lang.String
userName)
setUser
throws java.lang.Exception
getUser
public java.lang.String getUser()
getUser
setProject
public void setProject(java.lang.String
projectName)
setProject
throws java.lang.Exception
Damin A. MARTINELLI
- 194 -
java.lang.Exception
getProject
public java.lang.String getProject()
getProject
setExtensions
public void setExtensions
setExtensions(java.lang.String
values)
Extensions
Setea las extensiones de los archivos considerados de pginas, o las extensiones que
se necesitan tener en cuenta.
Parameters:
values - Extensiones validas.
getExtensions
public java.lang.String getExtensions()
getExtensions
setStatusCodes
public void setStatusCodes(java.lang.String
values)
setStatusCodes
getStatusCodes
public java.lang.String getStatusCodes()
getStatusCodes
setIdsPage
Damin A. MARTINELLI
- 195 -
getIdsPage
public java.lang.String getIdsPage()
getIdsPage
Obtiene las variables que identifican pginas distintas, separadas por coma.
Returns:
Nombre de variables identificadoras de pgina.
getHitsSaves
public java.lang.String getHitsSaves()
getHitsSaves
main
public static void main(java.lang.String[]
args)
main
throws java.lang.Exception
Throws:
java.lang.Exception
Damin A. MARTINELLI
- 196 -
Constructor Summary
LogViewBean()
Method Summary
java.lang.String getCurrentLog()
Damin A. MARTINELLI
- 197 -
Field Detail
logsPerPage
protected int logsPerPage
Constructor Detail
LogViewBean
public LogViewBean()
LogViewBean
throws java.lang.Exception
Method Detail
goFirstLog
public void goFirstLog()
goFirstLog
hasNextLog
public boolean hasNextLog()
hasNextLog
getNextLog
Damin A. MARTINELLI
- 198 -
setUser
public void setUser(java.lang.String
userName)
setUser
getUser
public java.lang.String getUser()
getUser
setProject
public void setProject(java.lang.String
projectName)
setProject
getProject
public java.lang.String getProject()
getProject
setLogsPerPage
public void setLogsPerPage(java.lang.String
logs)
setLogsPerPage
Damin A. MARTINELLI
- 199 -
getLogsPerPage
public java.lang.String getLogsPerPage()
getLogsPerPage
setCurrentLog
public void setCurrentLog(java.lang.String
log)
setCurrentLog
getCurrentLog
public java.lang.String getCurrentLog()
getCurrentLog
main
public static void main(java.lang.String[]
args)
main
throws java.lang.Exception
Throws:
java.lang.Exception
Damin A. MARTINELLI
- 200 -
Constructor Summary
NumericSessionClusterBean()
Method Summary
void count(java.lang.String inputFilename)
Constructor Detail
NumericSessionClusterBean
public NumericSessionClusterBean()
NumericSessionClusterBean
throws java.lang.Exception
Method Detail
Damin A. MARTINELLI
- 201 -
count
public void count(java.lang.String
inputFilename)
count
throws java.lang.Exception
Method Summary
java.lang.String getPages()
Damin A. MARTINELLI
- 202 -
java.lang.String getUser()
Constructor Detail
PageCounterBean
public PageCounterBean()
ageCounterBean
throws java.lang.Exception
Method Detail
start
public void start()
start
throws java.lang.Exception
getPages
public java.lang.String getPages()
getPages
throws java.lang.Exception
Damin A. MARTINELLI
- 203 -
setUser
public void setUser(java.lang.String
userName)
setUser
throws java.lang.Exception
getUser
public java.lang.String getUser()
getUser
setProject
public void setProject(java.lang.String
projectName)
setProject
throws java.lang.Exception
getProject
public java.lang.String getProject()
getProject
Damin A. MARTINELLI
- 204 -
main
public static void main(java.lang.String[]
args)
main
throws java.lang.Exception
Throws:
java.lang.Exception
Method Summary
java.lang.String getPages()
Damin A. MARTINELLI
- 205 -
Constructor Detail
PagesInClustersBean
public PagesInClustersBean()
PagesInClustersBean
throws java.lang.Exception
Method Detail
start
public void start()
start
throws java.lang.Exception
getPages
public java.lang.String getPages()
getPages
Damin A. MARTINELLI
- 206 -
throws java.lang.Exception
setUser
public void setUser(java.lang.String
userName)
setUser
getUser
public java.lang.String getUser()
getUser
setProject
public void setProject
projectName)
setProject(java.lang.String
ct
getProject
public java.lang.String getProject()
getProject
setType
public void setType(java.lang.String
typeClustering)
setType
Damin A. MARTINELLI
- 207 -
Parameters:
typeClustering
- Tipo de clusters.
getType
public java.lang.String getType()
getType
Clase que se encarga de obtener la informacion de las pginas que accedieron los
usuarios de cada cluster, indicando el porcentaje de acceso.
Author:
Damian Martinelli
Constructor Summary
PagesInClustersViewBean()
Method Summary
java.lang.String getCluster()
Damin A. MARTINELLI
- 208 -
java.lang.String getNextPage()
Constructor Detail
Damin A. MARTINELLI
- 209 -
PagesInClustersViewBean
public PagesInClustersViewBean()
PagesInClustersViewBean
throws java.lang.Exception
Method Detail
goFirstPage
public void goFirstPage()
goFirstPage
hasNextPage
public boolean hasNextPage()
hasNextPage
getNextPage
public java.lang.String getNextPage()
getNextPage
getNextPercentage
public java.lang.String getNextPercentage()
getNextPercentage
goFirstCluster
public void goFirstCluster()
goFirstCluster
Damin A. MARTINELLI
- 210 -
hasNextCluster
public boolean hasNextCluster()
hasNextCluster
getNextCluster
public java.lang.String getNextCluster()
getNextCluster
setUser
public void setUser(java.lang.String
userName)
setUser
getUser
public java.lang.String getUser()
getUser
setProject
public void setProject(java.lang.String
projectName)
setProject
getProject
public java.lang.String getProject()
getProject
Damin A. MARTINELLI
- 211 -
setType
public void setType(java.lang.String
typeClustering)
setType
getType
public java.lang.String getType()
getType
setCluster
public void setCluster(java.lang.String
clusterNumber)
setCluster
getCluster
public java.lang.String getCluster()
getCluster
setMinPercentage
public void setMinPercentage(java.lang.String
percentage)
setMinPercentage
getMinPercentage
public java.lang.String getMinPercentage()
getMinPercentage
Damin A. MARTINELLI
- 212 -
Returns:
Minimo porcentaje de frecuencia de pgina.
setMaxPagesPerCluster
public void setMaxPagesPerCluster(java.lang.String
pages)
setMaxPagesPerCluster
getMaxPagesPerCluster
public java.lang.String getMaxPagesPerCluster()
getMaxPagesPerCluster
Damin A. MARTINELLI
- 213 -
Constructor Summary
SessionClusterBean()
Method Summary
abstract void count(java.lang.String inputFilename)
Damin A. MARTINELLI
- 214 -
Field Detail
conn
protected java.sql.Connection conn
pstm
protected java.sql.PreparedStatement pstm
pstmDelete
protected java.sql.PreparedStatement pstmDelete
user
protected java.lang.String user
project
protected java.lang.String project
filename
protected java.lang.String filename
Damin A. MARTINELLI
- 215 -
type
protected java.lang.String type
Constructor Detail
SessionClusterBean
public SessionClusterBean()
SessionClusterBean
throws java.lang.Exception
Method Detail
count
public abstract void count(java.lang.String
inputFilename)
count
throws java.lang.Exception
getCount
public java.lang.String getCount()
getCount
throws java.lang.Exception
Realiza el conteo de los clusters descubiertos, si todos los atributos necesarios han
sido seteados, devolviendo la cantidad de sesiones contabilizadas.
Returns:
Cantidad de sesiones contabilizadas.
Throws:
java.lang.Exception
setFile
public void setFile(java.lang.String
name)
setFile
Damin A. MARTINELLI
- 216 -
throws java.lang.Exception
Setea el nombre del archivo donde se encuentran las sesiones con el cluster al cual
pertenecen.
Parameters:
name - Nombre del archivo.
Throws:
java.lang.Exception
getFile
public java.lang.String getFile()
getFile
Obtiene el nombre del archivo donde se encuentran las sesiones con el cluster al
cual pertenecen.
Returns:
String Nombre del archivo.
setUser
public void setUser(java.lang.String
userName)
setUser
getUser
public java.lang.String getUser()
getUser
setProject
public void setProject(java.lang.String
projectName)
setProject
getProject
public java.lang.String getProject()
getProject
Damin A. MARTINELLI
- 217 -
setType
public void setType(java.lang.String
typeClustering)
setType
getType
public java.lang.String getType()
getType
Damin A. MARTINELLI
- 218 -
SessionMakerBean()
Method Summary
java.lang.String getMinPageFrequency()
Damin A. MARTINELLI
- 219 -
Constructor Detail
SessionMakerBean
public SessionMakerBean()
SessionMakerBean
throws java.lang.Exception
Method Detail
make
public void make()
make
throws java.lang.Exception
getSessions
public java.lang.String getSessions()
getSessions
throws java.lang.Exception
Si toda la informacion necesaria esta seteada, arma todas las sesiones para un
pryecto de un usuario. Devuelve la cantidad de sesiones distintas generadas.
Returns:
Cantidad de sesiones distintas generadas.
Throws:
java.lang.Exception
setUser
public void setUser(java.lang.String
userName)
setUser
throws java.lang.Exception
Damin A. MARTINELLI
- 220 -
getUser
public java.lang.String getUser()
getUser
setProject
public void setProject(java.lang.String
projectName)
setProject
throws java.lang.Exception
getProject
public java.lang.String getProject()
getProject
setMinPagesInSession
public void setMinPagesInSession(java.lang.String
pages)
setMinPagesInSession
getMinPagesInSession
public java.lang.String getMinPagesInSession()
getMinPagesInSession
setTimeoutSession
Damin A. MARTINELLI
- 221 -
getTimeoutSession
public java.lang.String getTimeoutSession()
getTimeoutSession
setMinPageFrequency
public void setMinPageFrequency(java.lang.String
setMinPageFrequency
frequency)
getMinPageFrequency
public java.lang.String getMinPageFrequency
getMinPageFrequency()
PageFrequency
main
public static void main(java.lang.String[]
args)
main
throws java.lang.Exception
Throws:
java.lang.Exception
Damin A. MARTINELLI
- 222 -
Method Summary
int getMinPagesInSession()
Damin A. MARTINELLI
- 223 -
Constructor Detail
SessionSaver
public SessionSaver()
SessionSaver
throws java.lang.Exception
Method Detail
save
public void save(java.lang.String
IP,
save
java.lang.String authuser,
java.lang.String page,
java.lang.String timestamp)
throws java.lang.Exception
setUser
public void setUser(java.lang.String
userName)
setUser
throws java.lang.Exception
- 224 -
Parameters:
userName - Nombre del usuario.
Throws:
java.lang.Exception
getUser
public java.lang.String getUser()
getUser
setProject
public void setProject(java.lang.String
setProject
projectName)
throws java.lang.Exception
getProject
public java.lang.String getProject()
getProject
getSessionsCount
public int getSessionsCount()
getSessionsCount
setTimeoutSession
public void setTimeoutSession(long
timeout)
setTimeoutSession
Damin A. MARTINELLI
- 225 -
Parameters:
timeout - Timeout de sesion.
getTimeoutSession
public long getTimeoutSession()
getTimeoutSession
setMinPagesInSession
public void setMinPagesInSession(int
pages)
setMinPagesInSession
getMinPagesInSession
public int getMinPagesInSession()
getMinPagesInSession
main
public static void main(java.lang.String[]
args)
main
throws java.lang.Exception
Throws:
java.lang.Exception
Damin A. MARTINELLI
- 226 -
Constructor Summary
SessionsClusterViewBean()
Method Summary
java.lang.String getCurrentSession()
Damin A. MARTINELLI
- 227 -
void goFirstSession()
Field Detail
conn
protected java.sql.Connection conn
pstm
protected java.sql.PreparedStatement pstm
sessionsPerPage
protected int sessionsPerPage
Constructor Detail
SessionsClusterViewBean
public SessionsClusterViewBean()
SessionsClusterViewBean
throws java.lang.Exception
Damin A. MARTINELLI
- 228 -
Method Detail
goFirstSession
public void goFirstSession()
goFirstSession
throws java.lang.Exception
hasNextSession
public boolean hasNextSession()
hasNextSession
getNextSession
public java.lang.String getNextSession()
getNextSession
getNextCluster
public java.lang.String getNextCluster()
getNextCluster
getNextSequencePages
public java.lang.String getNextSequencePages()
getNextSequencePages
Damin A. MARTINELLI
- 229 -
setUser
public void setUser(java.lang.String
userName)
setUser
getUser
public java.lang.String getUser()
getUser
setProject
public void setProject(java.lang.String
projectName)
setProject
getProject
public java.lang.String getProject()
getProject
setType
public void setType(java.lang.String
typeClustering)
setType
getType
public java.lang.String getType()
getType
- 230 -
setSessionsPerPage
public void setSessionsPerPage(java.lang.String
sessions)
setSessionsPerPage
getSessionsPerPage
public java.lang.String getSessionsPerPage()
getSessionsPerPage
setCurrentSession
public void setCurrentSession
session)
setCurrentSession(java.lang.String
entSession
getCurrentSession
public java.lang.String getCurrentSession()
getCurrentSession
Damin A. MARTINELLI
- 231 -
Method Summary
void cicleTerminated(org.joone.engine.NeuralNetEvent e)
Damin A. MARTINELLI
- 232 -
Constructor Detail
SOMBean
public SOMBean()
SOMBean
SOMBean
public SOMBean(java.lang.String
input,
SOMBean
java.lang.String output,
int dim)
throws java.lang.Exception
Damin A. MARTINELLI
- 233 -
output
Method Detail
setInput
public void setInput(java.lang.String
file)
setInput
getInput
public java.lang.String getInput()
getInput
setOutput
public void setOutput(java.lang.String
file)
setOutput
getOutput
public java.lang.String getOutput()
getOutput
setDim
public void setDim(java.lang.String
dim)
setDim
Damin A. MARTINELLI
- 234 -
getDim
public java.lang.String getDim()
getDim
setTrainingCicles
public void setTrainingCicles(java.lang.String
cicles)
setTrainingCicles
getTrainingCicles
public java.lang.String getTrainingCicles()
getTrainingCicles
getClusters
public java.lang.String getClusters()
getClusters
train
public void train(int
cicles)
train
cicleTerminated
public void cicleTerminated(org.joone.engine.NeuralNetEvent
e)
cicleTerminated
Damin A. MARTINELLI
- 235 -
Parameters:
e - Evento de la red neuronal.
errorChanged
public void errorChanged(org.joone.engine.NeuralNetEvent
e)
errorChanged
netStarted
public void netStarted(org.joone.engine.NeuralNetEvent
e)
netStarted
netStopped
public void netStopped(org.joone.engine.NeuralNetEvent
e)
netStopped
netStoppedError
public void netStoppedError(org.joone.engine.NeuralNetEvent
e,
netStoppedError
java.lang.String error)
Damin A. MARTINELLI
- 236 -
save
public void save(java.lang.String
fileName)
save
main
public static void main(java.lang.String[]
args)
main
Method Summary
java.lang.String getLogCount()
Damin A. MARTINELLI
- 237 -
java.lang.String getProject()
Constructor Detail
UserBean
public UserBean()
UserBean
throws java.lang.Exception
Method Detail
setUser
Damin A. MARTINELLI
- 238 -
getUser
public java.lang.String getUser()
getUser
setProject
public void setProject(java.lang.String
setProject
projectName)
getProject
public java.lang.String getProject()
getProject
isSetProject
public boolean isSetProject()
isSetProject
unsetProject
public void unsetProject()
unsetProject
getProjects
Damin A. MARTINELLI
- 239 -
goFirstProject
public void goFirstProject()
goFirstProject
hasNextProject
public boolean hasNextProject()
hasNextProject
getNextProject
public java.lang.String getNextProject()
getNextProject
getNextDescription
public java.lang.String getNextDescription
getNextDescription()
scription
getLogCount
public java.lang.String getLogCount()
getLogCount
getSessionCount
Damin A. MARTINELLI
- 240 -
Damin A. MARTINELLI
- 241 -
Damin A. MARTINELLI
- 242 -
Damin A. MARTINELLI
- 243 -
Damin A. MARTINELLI
- 244 -
D.5.4.2. Tarea CSI 4.2: Realizacin de las Pruebas de Integracin y del Sistema..... 359
D.5.4.3. Tarea CSI 4.3: Evaluacin del Resultado de las Pruebas de Integracin y del
Sistema ....................................................................................................................... 362
D.5.5. Actividad CSI 5: Elaboracin de los Manuales de Usuario ................................ 362
D.5.5.1. Tarea CSI 5.1: Elaboracin de los Manuales de Usuario ............................. 362
D.5.6. Actividad CSI 6: Aprobacin del Sistema de Informacin ................................. 362
D.5.6.1. Tarea CSI 6.1: Presentacin y Aprobacin del Sistema de Informacin ..... 362
Damin A. MARTINELLI
- 245 -
Damin A. MARTINELLI
- 246 -
poder desplegarlas en los medios que logren el mayor impacto sobre los receptores de las
mismas.
El Departamento de Diseo Grfico utilizar las descripciones de los grupos de
usuarios para modificar la estructura y navegacin del sitio, de modo de mantener unidas
las pginas que acceden cada grupo de usuarios descubierto. De esta forma, se le facilita el
acceso a los usuarios de la informacin que necesitan.
Los Administradores de los servidores Web tendrn que suministrar al sistema los
registros de logs de los sitios, para que se pueda realizar el estudio de los mismos.
o Analista Semi-Senior
o Analista Senior
o Diseador
o Programador Senior
Al tratarse de un proyecto de tesis, todos los roles sern cumplidos por el
autor de la misma.
-
Damin A. MARTINELLI
- 247 -
Fecha de
Fecha de
Duracin
Comienzo Finalizacin
(das)
02/05/2005 03/05/2005
1
03/05/2005 04/05/2005
1
04/05/2005 07/05/2005
3
Tarea
Definicin del equipo de trabajo
Descripcin general del PSI
Catlogo de objetivos del PSI
Descripcin general de procesos de la
organizacin afectados
Catlogo de usuarios
09/05/2005 11/05/2005
11/05/2005 12/05/2005
Damin A. MARTINELLI
- 248 -
Damin A. MARTINELLI
- 249 -
Damin A. MARTINELLI
- 250 -
Como restriccin legal se debe tener en consideracin que no pueden ser publicados
los accesos de navegacin de una persona en particular, de modo de preservar su
privacidad.
Mdulo
Preprocesamiento y construccin de
sesiones de usuarios
Damin A. MARTINELLI
Solucin
Desarrollo de una herramienta a medida, para
poder realizar todas las tareas de
preprocesamiento requeridas.
- 251 -
Mdulo
Solucin
Realizacin de estas tareas mediante comandos
de tipo scripts, como grep, sed, awk, etc.. No se
posee disponible ningn producto estndar
como para poder llevar a cabo esta tarea de
forma completa.
Utilizacin de herramientas disponibles que
realizan esta actividad, como Weka.
Realizacin a medida de los algoritmos de
agrupamiento, ya sea la red neuronal SOM o el
algoritmo K-Means.
Agrupamiento de usuarios
Incorporacin de componentes ya
implementados, como una red neuronal SOM o
el algoritmo K-Means, en una herramienta
realizada a medida, adaptando dichos
componentes, de modo que lleven a cabo las
tareas requeridas.
Realizacin de una herramienta a medida. Es la
solucin que mejor se adapta debido a que se
desea analizar resultados para los cuales no se
ha encontrado herramienta que permita dicho
anlisis.
Anlisis de resultados
Solucin herramienta a medida: se debe realizar una herramienta capaz de preprocesar los registros de archivos de log, para luego identificar a los usuarios y a
sus sesiones. Para ello se tendrn distintas clases encargadas de realizar cada
tarea, obteniendo como entrada los resultados del procesamiento de la clase
anterior.
Solucin mediante comandos de tipo scripts: con esta solucin se deben realizar
varios scripts que realicen cada una de las tareas de preprocesamiento, para ser
ejecutadas secuencialmente por el usuario, o mediante otro script que automatice
esta operacin.
Mdulo Agrupamiento de usuarios:
Damin A. MARTINELLI
- 252 -
Damin A. MARTINELLI
- 253 -
Damin A. MARTINELLI
- 254 -
Damin A. MARTINELLI
- 255 -
Mdulo
Solucin
Preprocesamiento y construccin de
sesiones de usuarios
Agrupamiento de usuarios
Anlisis de resultados
Damin A. MARTINELLI
- 256 -
que se le desee dar a los resultados obtenidos, el sistema nicamente los despliega para la
correcta comprensin por parte del usuario del sistema.
A continuacin se muestra el diagrama de contexto [Figura D.3]:
Damin A. MARTINELLI
- 257 -
CLF Extendido utilizando los campos Referrer y Agent (Common Log Format
Extendido, Combined Log Format) [http://www.w3.org/TR/WD-logfile.html].
Estos formatos son soportados por los principales servidores Web disponibles,
como por ejemplo Apache HTTP Server, Apache Tomcat, Microsoft IIS y Netscape
Enterprise Server.
R1.
R2.
R3.
R4.
R5.
R6.
R7.
Se deben poder tener varios usuarios en el sistema, los cuales deben iniciar
sesin mediante una contrasea.
R8.
Cada usuario puede tener varios proyectos, donde se realizan distintos anlisis
de sitios Web.
R9.
Los formatos de log que debe soportar el sistema son el formato de log comn
(CLF) y el formato extendido con los campos del CLF ms los campos Referer y
Agent.
Damin A. MARTINELLI
- 258 -
Damin A. MARTINELLI
- 259 -
X
X
X
X
X
X
X
X
X
Damin A. MARTINELLI
- 260 -
Implantacin
X
X
X
X
X
X
Seguridad
R1 Preprocesamiento Log
R2 Identificacin de Usuarios
R3 Identificacin de Sesiones de Usuarios
R4 Agrupamiento de Usuarios con SOM
R5 Agrupamiento de Usuarios con K-Means
R6 Anlisis de Resultados
R7 Usuarios del Sistema
R8 Proyectos de Usuarios
R9 Formatos de Logs
R10 Filtros de Preprocesamiento de Logs
R11 Criterios para la Identificacin de Usuarios
R12 Criterios para la Identificacin de Sesiones de Usuarios
R13 Caractersticas de la Red Neuronal SOM
Rendimiento
Funcional
Damin A. MARTINELLI
- 261 -
Caso de Uso
Descripcin
Precondiciones
Poscondiciones
Especificacin
Damin A. MARTINELLI
Paso
Accin
- 262 -
Caso de Uso
Identificar usuarios
Descripcin
Precondiciones
Poscondiciones
Especificacin
Damin A. MARTINELLI
Paso
Accin
- 263 -
Caso de Uso
Descripcin
Precondiciones
Poscondiciones
Especificacin
Damin A. MARTINELLI
Paso
Accin
- 264 -
Caso de Uso
Descripcin
Precondiciones
Poscondiciones
Especificacin
Damin A. MARTINELLI
Paso
Accin
- 265 -
Caso de Uso
Descripcin
Precondiciones
Poscondiciones
Especificacin
Damin A. MARTINELLI
Paso
Accin
- 266 -
Caso de Uso
Descripcin
Precondiciones
Poscondiciones
Especificacin
Paso
Accin
Damin A. MARTINELLI
Pre-procesadorLog
- 267 -
Caso de Uso
Clases
Asociadas
Caso de Uso
Clases
Asociadas
Caso de Uso
Clases
Asociadas
Caso de Uso
Clases
Asociadas
Caso de Uso
Clases
Asociadas
Identificar usuarios
IdentificadorUsuarios
IdentificadorSesiones
AgruparSOM
AgruparK-Means
ContadorSesiones
ContadorPginas
SesionesEnCluster
Damin A. MARTINELLI
- 268 -
Pre-procesar
archivo de
log
Identificar
usuarios
Identificar
sesiones de
usuario
Agrupar
usuarios
utilizando
red neuronal
SOM
Clase
Atributos
Responsabilidades
AgruparSOM
Damin A. MARTINELLI
- 269 -
archivoLog
tipoArchivoLog
extensionesPgina
erroresValidos
variablesIdentificadorasPgina
tiempoMaximoEntrePeticiones
cantidadMinimaPginasEnSesion
minimaFrecuenciaDePgina
cardinalidadMapa
cantidadCiclosEntrenamiento
Caso de Uso
Clase
Atributos
Responsabilidades
usuarios, utilizando la red
entrenada. El entrenamiento se
debe realizar la cantidad de ciclos
seteada.
Agrupar
usuarios
utilizando KMeans
AgruparK-Means
ContadorSesiones
Analizar
grupos de
usuarios
descubiertos
ContadorPginas
SesionesEnCluster
cantidadDeGrupos
Damin A. MARTINELLI
- 270 -
Cada pantalla tendr un ttulo descriptivo que le informar al usuario en que seccin
del sistema se encuentra.
Cuando se necesite el ingreso de datos por parte del usuario, se har en formularios
con no ms de cinco campos cada uno. En caso de requerirse ms cantidad de datos, los
mismos sern ingresados en sucesivos pasos, donde se lo guiar para completarlos.
Todos los mensajes de error en el sistema sern desplegados en la parte superior del
cuerpo principal utilizando fuente en color rojo.
Damin A. MARTINELLI
- 271 -
Damin A. MARTINELLI
- 272 -
Damin A. MARTINELLI
- 273 -
Damin A. MARTINELLI
- 274 -
Mtodos para facilitar el anlisis por parte del usuario de los resultados
obtenidos. Cantidad de sesiones por grupo de usuarios, porcentaje de acceso a
pginas en cada grupo, y detalle de las sesiones.
Damin A. MARTINELLI
- 275 -
Requisito
Entrada
Proceso
Anlisis de
Resultados
Salida
Se procesa el archivo de
log dejando solo los
registros que posean las
extensiones y los
cdigos seleccionados
por el usuario.
Archivo de
log procesado
segn los
parmetros
ingresados por el
usuario.
Log
preprocesado con
los usuarios
identificados.
Sesiones de
usuarios.
Sesiones de
usuarios con
grupo SOM
asignado.
Sesiones de
usuarios con
grupo K-Means
asignado.
Se contabiliza la
Reporte de
cantidad de sesiones en cantidad de
cada grupo. Se
sesiones por
determina el porcentaje grupo.
de acceso a cada pgina Reporte de
por parte de las sesiones porcentaje de
de cada grupo.
accesos a pginas
por grupo.
Reporte de
detalle de
sesiones.
Las sesiones de usuario
son agrupadas mediante
el algoritmo K-Means.
Damin A. MARTINELLI
- 276 -
D.3.7.3. Tarea ASI 7.3: Definicin de las Pruebas de Aceptacin del Sistema
Se le solicitar al usuario que realice un proceso completo de anlisis de un archivo
de log. Mientras el usuario realiza este anlisis podr evaluar cada paso del mismo. En caso
de ser necesario, deber hacer llegar los comentarios pertinentes al encargado del proyecto,
de modo de que ste pueda ejecutar una accin correctiva y lograr finalmente la aceptacin
del sistema por parte del usuario final.
Damin A. MARTINELLI
- 277 -
Se realizarn clases de tipo JavaBeans para todas las clases que se correspondan
a esta estructura.
Los nombres de las clases deben poseer cada inicial de palabra en mayscula.
Damin A. MARTINELLI
- 278 -
Los nombres de los mtodos y de los atributos de las clases deben poseer cada
inicial de palabra en mayscula, a excepcin de la primera que deber comenzar
en minscula. Esta misma nomenclatura se utilizara para los nombres de las
variables.
Damin A. MARTINELLI
- 279 -
Caso de Uso
Descripcin
Clases
Asociadas
LoginBean
UserBean
Caso de Uso
Registrar usuario
Descripcin
Clases
Asociadas
CreateUserBean
Caso de Uso
Crear proyecto
Descripcin
Clases
Asociadas
Damin A. MARTINELLI
CreateProjectBean
- 280 -
Caso de Uso
Seleccionar proyecto
Descripcin
Clases
Asociadas
UserBean
Caso de Uso
Eliminar proyecto
Descripcin
Clases
Asociadas
DeleteProjectBean
LogCleanerBean
Caso de Uso
Descripcin
Clases
Asociadas
Damin A. MARTINELLI
LogFileUploadBean
- 281 -
Caso de Uso
Descripcin
Clases
Asociadas
LogLoaderBean
PageCounterBean
Caso de Uso
Descripcin
Clases
Asociadas
LogViewBean
LogBean
Caso de Uso
Descripcin
Clases
Asociadas
Damin A. MARTINELLI
SessionMakerBean
SessionSaver
- 282 -
Caso de Uso
Descripcin
Clases
Asociadas
InputMakerBean
SOMBean
BinarySessionClusterBean
FileBean
ClusterCounterBean
PagesInClustersBean
Caso de Uso
Descripcin
Clases
Asociadas
Damin A. MARTINELLI
InputMakerBean
KMeansBean
NumericSessionClusterBean
FileBean
ClusterCounterBean
PagesInClustersBean
- 283 -
Caso de Uso
Descripcin
Clases
Asociadas
ClusterCounterBean
ClusterCounterGraphBean
Caso de Uso
Descripcin
Clases
Asociadas
SessionsClusterViewBean
Caso de Uso
Descripcin
Clases
Asociadas
Damin A. MARTINELLI
PagesInClustersViewBean
- 284 -
Caso de Uso
Ver archivo
Descripcin
Clases
Asociadas
FilesViewBean
LogFilesViewBean
Descripcin
Especificacin
Paso
Accin
Damin A. MARTINELLI
- 285 -
Caso de Uso
Descripcin
Especificacin
Paso
Accin
Caso de Uso
Registrar usuario
Descripcin
Especificacin
Paso
Accin
Damin A. MARTINELLI
- 286 -
Caso de Uso
Crear proyecto
Descripcin
Especificacin
Paso
Accin
Caso de Uso
Seleccionar proyecto
Descripcin
Especificacin
Paso
Accin
Damin A. MARTINELLI
- 287 -
Caso de Uso
Eliminar proyecto
Descripcin
Especificacin
Paso
Accin
Caso de Uso
Descripcin
Especificacin
Paso
Accin
Damin A. MARTINELLI
- 288 -
Caso de Uso
Descripcin
Especificacin
Paso
Accin
El usuario indica que se comience con la carga y preprocesado del archivo de log.
Damin A. MARTINELLI
- 289 -
Caso de Uso
Descripcin
Especificacin
Paso
Accin
Caso de Uso
Descripcin
Especificacin
Paso
Accin
Damin A. MARTINELLI
- 290 -
Caso de Uso
Descripcin
Especificacin
Paso
Accin
10
11
Damin A. MARTINELLI
- 291 -
Caso de Uso
Descripcin
Especificacin
Paso
Accin
10
Damin A. MARTINELLI
- 292 -
Caso de Uso
Descripcin
Especificacin
Paso
Accin
Caso de Uso
Descripcin
Especificacin
Paso
Accin
Damin A. MARTINELLI
- 293 -
Caso de Uso
Descripcin
Especificacin
Paso
Accin
Caso de Uso
Ver archivo
Descripcin
Especificacin
Paso
Accin
Damin A. MARTINELLI
- 294 -
Caso de Uso
Descripcin
Especificacin
Paso
Accin
Men principal
A continuacin se muestra el prototipo de la interfaz Men principal [Figura D.11]:
Damin A. MARTINELLI
- 295 -
Submen Logs
A continuacin se muestra el prototipo de la interfaz Submen Logs [Figura D.13]:
Damin A. MARTINELLI
- 296 -
Submen Sesiones/Clusters
A continuacin se muestra el prototipo de la interfaz Submen Sesiones/Clusters
[Figura D.15]:
Damin A. MARTINELLI
- 297 -
Submen Pginas/Clusters
A continuacin se muestra el prototipo de la interfaz Submen Detalle Sesiones
[Figura D.17]:
Damin A. MARTINELLI
- 298 -
Damin A. MARTINELLI
- 299 -
Damin A. MARTINELLI
- 300 -
Authuser
Fecha y Hora
Pgina
192.168.1.101
2005-05-22 07:15:06.0
/pgina1.php
192.168.1.101
2005-05-22 07:18:56.0
/pgina2.php
192.168.1.102
2005-05-22 07:19:02.0
/pgina2.php
192.168.1.101
2005-05-22 07:19:04.0
/pgina1.php
192.168.1.101
2005-05-22 07:20:45.0
/pgina3.php
192.168.1.103
usuario
2005-05-22 07:21:15.0
/pgina1.php
192.168.1.103
usuario
2005-05-22 07:23:17.0
/pgina3.php
Damin A. MARTINELLI
- 301 -
192.168.1.101
2005-05-22 07:23:35.0
/pgina3.php
192.168.1.105
2005-05-22 07:23:43.0
/pgina6.php
192.168.1.105
2005-05-22 07:23:45.0
/pgina1.php
192.168.1.105
2005-05-22 07:24:01.0
/pgina1.php
192.168.1.102
2005-05-22 07:24:07.0
/pgina1.php
192.168.1.102
2005-05-22 07:59:02.0
/pgina2.php
192.168.1.102
2005-05-22 07:59:03.0
/pgina2.php
Damin A. MARTINELLI
- 302 -
Figura D.27. Interfaz Caso de Uso: Agrupar usuarios utilizando red neuronal SOM
Damin A. MARTINELLI
- 303 -
Figura D.29. Interfaz Caso de Uso: Ver cantidad de sesiones en cada cluster descubierto
Figura D.30. Interfaz Caso de Uso: Ver detalle de sesiones y cluster al cual pertenecen
Damin A. MARTINELLI
- 304 -
Caso de Uso: Ver porcentaje de acceso a cada pgina por los usuarios de cada cluster
A continuacin se muestra el prototipo de la interfaz Caso de Uso: Ver porcentaje de
acceso a cada pgina por los usuarios de cada cluster [Figura D.31]:
Figura D.31. Interfaz Caso de Uso: Ver porcentaje de acceso a cada pgina por los usuarios de cada
cluster
Damin A. MARTINELLI
- 305 -
LoginBean
UserBean
CreateUserBean
CreateProjectBean
DeleteProjectBean
LogCleanerBean
LogFileUploadBean
LogLoaderBean
PageCounterBean
LogViewBean
SessionMakerBean
SessionSaver
InputMakerBean
SOMBean
BinarySessionClusterBean
FileBean
ClusterCounterBean
PagesInClustersBean
KMeansBean
NumericSessionClusterBean
ClusterCounterGraphBean
SessionsClusterViewBean
PagesInClustersViewBean
FilesViewBean
LogFilesViewBean
LogBean
Damin A. MARTINELLI
- 306 -
Clase
Atributos
Clase
Atributos
Clase
Atributos
Clase
Atributos
Damin A. MARTINELLI
LoginBean
Connection conn
PreparedStatement pstm
String user
String pass
UserBean
Connection conn
PreparedStatement pstm
String user
String project
ResultSet rsProjects
boolean moreProjects
CreateUserBean
Connection conn
PreparedStatement pstm
String user
String pass
CreateProjectBean
Connection conn
PreparedStatement pstm
String user
String project
String description
- 307 -
Clase
Atributos
Clase
Atributos
Damin A. MARTINELLI
DeleteProjectBean
Connection conn
PreparedStatement pstm
String user
String project
LogCleanerBean
Connection conn
PreparedStatement pstm
String user
String project
int cleaneds
- 308 -
Clase
Atributos
Clase
Atributos
Damin A. MARTINELLI
LogFileUploadBean
Connection conn
PreparedStatement pstm
String logFile
String user
String savePath
String filepath
String filename
String contentType
Dictionary fields
HttpServletRequest request
LogLoaderBean
Connection conn
PreparedStatement pstm
String inputFile
String[] pageExtensions
String[] validsStatus
String[] idsPage
int hits
String user
String project
int ID
String savePath
int typeLog
- 309 -
Clase
Atributos
Clase
Atributos
Clase
Atributos
Damin A. MARTINELLI
PageCounterBean
Connection conn
PreparedStatement pstm
String user
String project
int pages
LogViewBean
Connection conn
PreparedStatement pstm
String user
String project
ResultSet rsLogs
boolean moreLogs
int logsPerPage
int currentLog
SessionMakerBean
Connection conn
PreparedStatement pstm
String user
String project
int minPagesInSession
long timeoutSession
int sessionsCount
int minPageFrequency
- 310 -
Clase
Atributos
Damin A. MARTINELLI
SessionSaver
Connection conn
PreparedStatement pstm
String user
String project
String lastIP
String lastAuthuser
String lastTimestamp
String firstTimestamp
long timeoutSession
long maxTimeSession
int ID
int sequence
int sessionsCount
int minPagesInSession
String pagesWaiting[]
- 311 -
Clase
Atributos
Clase
Atributos
Damin A. MARTINELLI
InputMakerBean
Connection conn
String user
String project
FileOutputStream fosSOM
FileOutputStream fosKMeans
int pagesCount
boolean session[]
int sessionsSOM
int sessionsKMeans
String SOMFilename
String KMeansFilename
boolean SOMEnabled
boolean KMeansEnabled
SOMBean
NeuralNet nnet
FileInputSynapse inputStream
FileOutputSynapse
outputSynapse
String inputFilename
String outputFilename
int dimClusters
int columns
int patterns
int trainingCicles
- 312 -
Clase
Atributos
Clase
Atributos
Clase
Atributos
Damin A. MARTINELLI
SessionClusterBean
Connection conn
PreparedStatement pstm
String user
String project
PreparedStatement pstmDelete
String filename
String type
int countSessions
BinarySessionClusterBean
int countSessions
FileBean
Connection conn
PreparedStatement pstm
String user
String project
String file
String type
String basePath
String savePath
String description
String filePath
- 313 -
Clase
Atributos
Clase
Atributos
Damin A. MARTINELLI
ClusterCounterBean
Connection conn
PreparedStatement pstm
String user
String project
PreparedStatement pstmInsert
String type
String count
ResultSet rsClusters
boolean moreClusters
PagesInClustersBean
Connection conn
String user
String project
PreparedStatement pstmDelete
PreparedStatement pstmInsert
PreparedStatement pstmQuery
PreparedStatement
pstmQuerySessionsInCluster
String type
- 314 -
Clase
Atributos
Clase
Atributos
Clase
Atributos
Damin A. MARTINELLI
KmeansBean
String inputFilename
String outputFilename
int K
int columns
int patterns
SimpleKMeans kmeans
NumericSessionClusterBean
int countSessions
ClusterCounterGraphBean
double[] data
String[] labels
ChartDirector.PieChart chart
String path
- 315 -
Clase
Atributos
Clase
Atributos
Damin A. MARTINELLI
SessionsClusterViewBean
Connection conn
PreparedStatement pstm
String user
String project
String type
ResultSet rsSessions
boolean moreSessions
int sessionsPerPage
int currentSession
PagesInClustersViewBean
Connection conn
PreparedStatement pstm
String user
String project
String type
PreparedStatement pstmClusters
ResultSet rsPages
boolean morePages
ResultSet rsClusters
boolean moreClusters
int cluster
int minPercentage
int maxPagesPerCluster
- 316 -
Clase
Atributos
Clase
Atributos
Clase
Atributos
FilesViewBean
Connection conn
PreparedStatement pstm
String user
String project
String type
ResultSet rsFiles
boolean moreFiles
LogFilesViewBean
Connection conn
PreparedStatement pstm
String user
ResultSet rsLogs
boolean moreLogs
LogBean
String IP
String authuser
String page
String timestamp
Damin A. MARTINELLI
- 317 -
LoginBean
Clase utilizada para iniciar la sesin a un usuario en la herramienta.
Constructor Summary
LoginBean()
Method Summary
java.lang.String getUser()
UserBean
Clase que se encarga del manejo de la informacin de un usuario y sus proyectos.
Constructor Summary
UserBean()
Method Summary
java.lang.String getLogCount()
Damin A. MARTINELLI
- 318 -
Method Summary
Obtiene el nombre del siguiente proyecto.
java.lang.String getProject()
CreateUserBean
Clase utilizada para la creacin de nuevos usuarios.
Constructor Summary
CreateUserBean()
Method Summary
Damin A. MARTINELLI
- 319 -
boolean createNewUser()
CreateProjectBean
Clase utilizada para la creacin de un nuevo proyecto.
Constructor Summary
CreateProjectBean()
Method Summary
boolean createNewProject()
Damin A. MARTINELLI
- 320 -
DeleteProjectBean
Clase utilizada para la eliminacin de proyectos.
Constructor Summary
DeleteProjectBean()
Method Summary
boolean deleteProject()
LogCleanerBean
Clase utilizada para borrar todo los registros de log de un proyecto.
Damin A. MARTINELLI
- 321 -
Constructor Summary
LogCleanerBean()
Method Summary
void clean()
LogFileUploadBean
Clase utilizada para guardar en la base de datos informacin sobre un archivo de log y
copiar el archivo al servidor.
Method Summary
void doUpload(javax.servlet.http.HttpServletRequest request)
Damin A. MARTINELLI
- 322 -
LogLoaderBean
Clase utilizada para leer el archivo de log y obtener la informacin del mismo para
almacenarla en la base de datos.
Constructor Summary
LogLoaderBean()
Damin A. MARTINELLI
- 323 -
Method Summary
private getExtension(java.lang.String url)
static java.lang.String
java.lang.String getExtensions()
java.lang.String getTypeLog()
Damin A. MARTINELLI
- 324 -
PageCounterBean
Damin A. MARTINELLI
- 325 -
Constructor Summary
PageCounterBean()
Method Summary
java.lang.String getPages()
LogViewBean
Clase encargada de obtener el detalle de todos los registros de log cargados en la base
de datos por un proyecto de un usuario.
Constructor Summary
LogViewBean()
Method Summary
Damin A. MARTINELLI
- 326 -
java.lang.String getCurrentLog()
SessionMakerBean
Clase SessionMakerBean encargada de armar las sesiones a partir de los registros de
log almacenados en la base de datos.
Constructor Summary
SessionMakerBean()
Damin A. MARTINELLI
- 327 -
Method Summary
java.lang.String getMinPageFrequency()
SessionSaver
Clase SessionSaver encargada de ir armando las sesiones y guardarlas en la base de
datos.
Constructor Summary
SessionSaver()
Damin A. MARTINELLI
- 328 -
Method Summary
private getLongTimestamp(java.lang.String timestamp)
static long
InputMakerBean
Damin A. MARTINELLI
- 329 -
Constructor Summary
InputMakerBean()
Method Summary
java.lang.String getKMeansEnabled()
Damin A. MARTINELLI
- 330 -
SOMBean
Clase SOMBean encargada de clusterizar las sesiones de usuarios utilizando la red
neuronal SOM. Esta clase se implementar utilizando los componentes de redes neuronales
artificiales provistos por Joone [Apndice I].
Constructor Summary
SOMBean()
Method Summary
void cicleTerminated(org.joone.engine.NeuralNetEvent e)
Damin A. MARTINELLI
- 331 -
Method Summary
java.lang.String getInput()
KMeansBean
Clase encargada de realizar la clusterizacin mediante K-Means. El algoritmo KMeans
se
implementar
utilizando
las
clases
provistas
por
Weka
[http://www.cs.waikato.ac.nz/ml/weka/].
Damin A. MARTINELLI
- 332 -
Constructor Summary
KMeansBean()
Method Summary
java.lang.String getClusters()
SessionClusterBean
Clase utilizada para contabilizar los clusters descubiertos y cargar esta informacin en
la base de datos.
Constructor Summary
SessionClusterBean()
Damin A. MARTINELLI
- 333 -
Method Summary
void count(java.lang.String inputFilename)
BinarySessionClusterBean
Clase encargada de cargar en la base de datos la informacin de clusterizacin
almacenada en un archivo, que posee en cada lnea nmeros binarios indicando si la sesin
pertenece o no al cluster correspondiente a la posicin de dicho numero binario.
Constructor Summary
Damin A. MARTINELLI
- 334 -
BinarySessionClusterBean()
Method Summary
void count(java.lang.String inputFilename)
NumericSessionClusterBean
Clase encargada de cargar en la base de datos la informacin de clusterizacin
almacenada en un archivo, que posee en cada lnea el nmero de cluster al cual pertenece la
sesin.
Constructor Summary
NumericSessionClusterBean()
Method Summary
void count(java.lang.String inputFilename)
FileBean
Clase utilizada para guardar informacin en la base de datos sobre los archivo
utilizados en la herramienta.
Constructor Summary
FileBean()
Damin A. MARTINELLI
- 335 -
Method Summary
java.lang.String getDescription()
ClusterCounterBean
Damin A. MARTINELLI
- 336 -
Constructor Summary
ClusterCounterBean()
Method Summary
void count()
Damin A. MARTINELLI
- 337 -
PagesInClustersBean
Clase encargada de obtener la informacin de que pginas aparecen en las sesiones de
cada cluster.
Constructor Summary
PagesInClustersBean()
Method Summary
private int getMaxCluster()
Damin A. MARTINELLI
- 338 -
void start()
ClusterCounterGraphBean
Clase encargada de generar los grficos de porcentajes de sesiones en cada cluster. Se
implementar
utilizando
la
librera
de
grficos
Chart
Director
[http://www.advsofteng.com/].
Constructor Summary
ClusterCounterGraphBean()
Method Summary
double[] getData()
SessionsClusterViewBean
Damin A. MARTINELLI
- 339 -
Clase encargada de obtener el detalle de las sesiones y a que cluster pertenece cada
una.
Constructor Summary
SessionsClusterViewBean()
Method Summary
java.lang.String getCurrentSession()
Damin A. MARTINELLI
- 340 -
PagesInClustersViewBean
Clase que se encarga de obtener la informacin de las pginas que accedieron los
usuarios de cada cluster, indicando el porcentaje de acceso.
Constructor Summary
PagesInClustersViewBean()
Method Summary
java.lang.String getCluster()
Damin A. MARTINELLI
- 341 -
void goFirstCluster()
FilesViewBean
Clase utilizada para obtener todos los archivos de un cierto tipo, para un usuario y
proyecto dado.
Constructor Summary
FilesViewBean()
Method Summary
java.lang.String getNextDescription()
Damin A. MARTINELLI
- 342 -
java.lang.String getNextFile()
LogFilesViewBean
Clase utilizada para listar todos los archivos de log cargados por un usuario.
Constructor Summary
LogFilesViewBean()
Method Summary
java.lang.String getNextDescription()
Damin A. MARTINELLI
- 343 -
Damin A. MARTINELLI
- 344 -
Damin A. MARTINELLI
- 345 -
D.4.5.2. Tarea DSI 5.2: Especificacin de los Caminos de Acceso a los Datos
Clase
Tablas
Damin A. MARTINELLI
LoginBean
Tabla user
- 346 -
Clase
Tablas
Clase
Tablas
Clase
Tablas
Clase
Tablas
Clase
Tablas
Clase
Tablas
Damin A. MARTINELLI
UserBean
Tabla project
Tabla log
Tabla session
CreateUserBean
Tabla user
CreateProjectBean
Tabla project
DeleteProjectBean
Tabla project
LogCleanerBean
Tabla log
LogFileUploadBean
Tabla logFile
- 347 -
Clase
Tablas
Clase
Tablas
Clase
Tablas
Clase
Tablas
Clase
Tablas
Clase
Tablas
Damin A. MARTINELLI
LogLoaderBean
Tabla log
PageCounterBean
Tabla page
Tabla log
LogViewBean
Tabla log
SessionMakerBean
Tabla log
Tabla page
SessionSaver
Tabla session
InputMakerBean
Tabla session
Tabla page
- 348 -
Clase
SOMBean
Tablas
Clase
BinarySessionClusterBean
Tablas
Clase
FileBean
Tablas
Clase
Tablas
Clase
Tablas
Tabla sessionCluster
Tabla file
ClusterCounterBean
Tabla sessionCluster
PagesInClustersBean
Tabla pageInCluster
Tabla page
Tabla sessionCluster
Clase
KMeansBean
Tablas
Damin A. MARTINELLI
- 349 -
Clase
Tablas
NumericSessionClusterBean
Tabla sessionCluster
Clase
ClusterCounterGraphBean
Tablas
Clase
SessionsClusterViewBean
Tablas
Clase
Tablas
Clase
Tablas
Clase
Tabla sessionCluster
Tabla session
PagesInClustersViewBean
Tabla pageInCluster
FilesViewBean
Tabla file
LogFilesViewBean
Tablas
Clase
LogBean
Tablas
Damin A. MARTINELLI
Tabla logFile
- 350 -
Damin A. MARTINELLI
- 351 -
D.4.7.4. Tarea DSI 7.4: Elaboracin de Especificaciones del Modelo Fsico de Datos
La base de datos a utilizar ser MySQL, con tablas en formato MyISAM.
Los script SQL para la creacin de las tablas son:
#
# Table structure for table `file`
#
CREATE TABLE `file` (
`name` varchar(50) NOT NULL default '',
`description` varchar(100) default NULL,
`user` varchar(20) NOT NULL default '',
`project` varchar(20) NOT NULL default '',
`type` varchar(20) NOT NULL default '',
PRIMARY KEY (`name`,`user`,`project`,`type`)
) TYPE=MyISAM;
# -------------------------------------------------------#
# Table structure for table `log`
#
CREATE TABLE `log` (
`ID` int(11) NOT NULL default '0',
`IP` varchar(50) NOT NULL default '',
`authuser` varchar(20) NOT NULL default '',
`page` varchar(255) NOT NULL default '',
`timestamp` timestamp(14) NOT NULL,
`project` varchar(20) NOT NULL default '',
`user` varchar(20) NOT NULL default '',
PRIMARY KEY (`ID`,`project`,`user`)
) TYPE=MyISAM;
# -------------------------------------------------------#
# Table structure for table `logfile`
#
Damin A. MARTINELLI
- 352 -
Damin A. MARTINELLI
- 353 -
Damin A. MARTINELLI
- 354 -
Damin A. MARTINELLI
- 355 -
Damin A. MARTINELLI
- 356 -
Ver Archivo
Construir sesiones
Eliminar proyecto
Seleccionar proyecto
Crear proyecto
R1
Preprocesamiento Log
R2 Identificacin de
Usuarios
R3 Identificacin de
Sesiones de Usuarios
R4 Agrupamiento de
Usuarios con SOM
R5 Agrupamiento de
Usuarios con K-Means
R6 Anlisis de
Resultados
R7 Usuarios del
X
Sistema
R8 Proyectos de
Usuarios
R9 Formatos de
Logs
R10 Filtros de
Preprocesamiento de
Logs
R11 Criterios para la
Identificacin de
Usuarios
R12 Criterios para la
Identificacin de
Sesiones de Usuarios
R13 Caractersticas
de la Red Neuronal
SOM
Registrar usuario
X
X
X
X
X
XX X
X
X
X
X
X
X
X
X
Damin A. MARTINELLI
- 357 -
D.5.2.2. Tarea CSI 2.2: Generacin del Cdigo de los Procedimientos de Operacin y
Seguridad
Se posee tambin el cdigo fuente relativo a la autenticacin de los distintos usuarios
del sistema, compilado y listo para su ejecucin.
Damin A. MARTINELLI
- 358 -
D.5.4.2. Tarea CSI 4.2: Realizacin de las Pruebas de Integracin y del Sistema
Se realizaron pruebas de integracin correspondientes a cada paso del proceso de
identificacin de hbitos de uso de sitios Web, tomando cada paso de forma independiente
y analizando los resultados de cada uno.
A continuacin se detalla una muestra de las pruebas de integracin realizadas [Tabla
D.8, Tabla D.9, Tabla D.10, Tabla D.11]:
Prueba
Descripcin
Objetivo
Damin A. MARTINELLI
- 359 -
Parmetros Utilizados
Resultado Esperado
Prueba
Descripcin
Objetivo
Parmetros Utilizados
Resultado Esperado
Damin A. MARTINELLI
- 360 -
Prueba
Descripcin
Objetivo
Parmetros Utilizados
Resultado Esperado
Prueba
Descripcin
Objetivo
Parmetros Utilizados
Resultado Esperado
Para la realizacin de las pruebas del sistema se toma como base las pruebas de
integracin, las cuales ejecutadas una a continuacin de la otra, corresponden con un
Damin A. MARTINELLI
- 361 -
D.5.4.3. Tarea CSI 4.3: Evaluacin del Resultado de las Pruebas de Integracin y del
Sistema
Las pruebas de integracin y del sistema han sido satisfactorias y han mostrado que el
sistema funciona correctamente. El detalle de las mismas se encuentra en el Apndice V
Pruebas de Integracin y de Sistema.
Damin A. MARTINELLI
- 362 -
E. Apndice V: Pruebas
E.1. Pruebas Unitarias ........................................................................................................ 364
E.2. Resultados Pruebas Unitarias...................................................................................... 383
E.3. Pruebas de Integracin y de Sistema........................................................................... 385
Damin A. MARTINELLI
- 363 -
BinarySessionClusterBeanTest
package ar.com.do2.iadh;
import junit.framework.*;
import java.lang.*;
import java.sql.*;
public class BinarySessionClusterBeanTest extends TestCase {
private Connection conn;
protected void setUp() throws Exception {
ConfigFileParserBean config = new ConfigFileParserBean();
String urldb = "jdbc:mysql://" + config.getDatabaseServer() +
"/" + config.getDatabaseName();
String login = config.getDatabaseUser();
String password = config.getDatabasePass();
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(urldb,login,password);
String delete = "DELETE FROM sessionCluster WHERE user='testUser'";
Statement stmt = conn.createStatement();
stmt.execute(delete);
}
public void testGetCount() throws Exception {
BinarySessionClusterBean session = new
BinarySessionClusterBean();
session.setUser("testUser");
session.setProject("testProject");
session.setType("SOM");
session.setFile("testBinaryClusters.txt");
//Deben cargarse 5 sesiones
Assert.assertEquals(session.getCount(), "5");
}
}
Damin A. MARTINELLI
- 364 -
ClusterCounterBeanTest
package ar.com.do2.iadh;
import junit.framework.*;
import java.lang.*;
import java.sql.*;
public class ClusterCounterBeanTest extends TestCase {
private Connection conn;
private ClusterCounterBean counter;
protected void setUp() throws Exception {
ConfigFileParserBean config = new ConfigFileParserBean();
String urldb = "jdbc:mysql://" + config.getDatabaseServer() +
"/" + config.getDatabaseName();
String login = config.getDatabaseUser();
String password = config.getDatabasePass();
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(urldb,login,password);
String delete = "DELETE FROM sessionCluster WHERE user='testUser'";
Statement stmt = conn.createStatement();
stmt.execute(delete);
stmt.execute("INSERT INTO sessionCluster (session,cluster,user,project,type)
VALUES ('1','1','testUser','testProject','SOM')");
stmt.execute("INSERT INTO sessionCluster (session,cluster,user,project,type)
VALUES ('2','1','testUser','testProject','SOM')");
stmt.execute("INSERT INTO sessionCluster
(session,cluster,user,project,type) VALUES ('3','1','testUser','testProject','SOM')");
stmt.execute("INSERT INTO sessionCluster
(session,cluster,user,project,type) VALUES ('4','2','testUser','testProject','SOM')");
stmt.execute("INSERT INTO sessionCluster
(session,cluster,user,project,type) VALUES ('5','2','testUser','testProject','SOM')");
stmt.execute("INSERT INTO sessionCluster
(session,cluster,user,project,type) VALUES ('6','2','testUser','anotherProject','SOM')");
stmt.execute("INSERT INTO sessionCluster
(session,cluster,user,project,type) VALUES ('7','2','testUser','testProject','KMEANS')");
counter = new ClusterCounterBean();
counter.setUser("testUser");
counter.setProject("testProject");
counter.setType("SOM");
}
public void testGetClustersCount() throws Exception {
//Deben existir 2 clusters
Assert.assertEquals(counter.getClustersCount(), 2);
Damin A. MARTINELLI
- 365 -
counter.goFirstCluster();
String cluster = "0";
if (counter.hasNextCluster())
cluster = counter.getNextCluster();
//El primero debe ser el cluster 1
Assert.assertEquals(cluster, "1");
//La cantidad de sesiones del cluster 1 debe ser 3
Assert.assertEquals(counter.getNextClusterSessions(),"3");
cluster = "0";
if (counter.hasNextCluster())
cluster = counter.getNextCluster();
//El segundo debe ser el cluster 2
Assert.assertEquals(cluster, "2");
//La cantidad de sesiones del cluster 2 debe ser 2
Assert.assertEquals(counter.getNextClusterSessions(),"2");
}
public void testGoFirstCluster() throws Exception {
counter.goFirstCluster();
//Luego de ir al primer cluster debe tener un siguiente
Assert.assertTrue(counter.hasNextCluster());
}
public void testGetNextCluster() throws Exception {
counter.goFirstCluster();
String cluster = "0";
if (counter.hasNextCluster())
cluster = counter.getNextCluster();
//El primero debe ser el cluster 1
Assert.assertEquals(cluster, "1");
//La cantidad de sesiones del cluster 1 debe ser 3
Assert.assertEquals(counter.getNextClusterSessions(),"3");
cluster = "0";
if (counter.hasNextCluster())
cluster = counter.getNextCluster();
//El segundo debe ser el cluster 2
Assert.assertEquals(cluster, "2");
//La cantidad de sesiones del cluster 2 debe ser 2
Assert.assertEquals(counter.getNextClusterSessions(),"2");
}
}
ConfigFileParserBeanTest
package ar.com.do2.iadh;
import junit.framework.*;
Damin A. MARTINELLI
- 366 -
import java.lang.*;
import java.sql.*;
public class ConfigFileParserBeanTest extends TestCase {
private ConfigFileParserBean config;
protected void setUp() {
config = new ConfigFileParserBean();
}
public void testGetDatabaseServer() {
Assert.assertEquals(config.getDatabaseServer(),"testDatabaseServer");
}
public void testGetDatabaseName() {
Assert.assertEquals(config.getDatabaseName(),"testDatabaseName");
}
public void testGetDatabaseUser() {
Assert.assertEquals(config.getDatabaseUser(),"testDatabaseUser");
}
public void testGetDatabasePass() {
Assert.assertEquals(config.getDatabasePass(),"testDatabasePass");
}
}
CreateProjectBeanTest
package ar.com.do2.iadh;
import junit.framework.*;
import java.lang.*;
import java.sql.*;
public class CreateProjectBeanTest extends TestCase {
private Connection conn;
protected void setUp() throws Exception {
ConfigFileParserBean config = new ConfigFileParserBean();
String urldb = "jdbc:mysql://" + config.getDatabaseServer() +
"/" + config.getDatabaseName();
String login = config.getDatabaseUser();
String password = config.getDatabasePass();
Class.forName("com.mysql.jdbc.Driver").newInstance();
Damin A. MARTINELLI
- 367 -
conn = DriverManager.getConnection(urldb,login,password);
String delete = "DELETE FROM project WHERE user='testUser'";
Statement stmt = conn.createStatement();
stmt.execute(delete);
}
public void testCreateNewProject() throws Exception {
CreateProjectBean creator = new CreateProjectBean();
creator.setUser("testUser");
creator.setProject("testProject");
creator.setDescription("testProjectDescription");
creator.createNewProject();
String query = "SELECT * FROM project WHERE user='testUser'";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
boolean more = rs.next();
//Debe haberse creado un proyecto
Assert.assertTrue(more);
if (more) {
//Debe haberse creado un proyecto de nombre
testProject
Assert.assertEquals(rs.getString("project"),
"testProject");
//Y con descripcion testProjectDescription
Assert.assertEquals(rs.getString("description"), "testProjectDescription");
}
more = rs.next();
//No debe existir otro proyecto para el usuario testUser
Assert.assertTrue(!more);
}
}
CreateUserBeanTest
package ar.com.do2.iadh;
import junit.framework.*;
import java.lang.*;
import java.sql.*;
public class CreateUserBeanTest extends TestCase {
private Connection conn;
protected void setUp() throws Exception {
ConfigFileParserBean config = new ConfigFileParserBean();
String urldb = "jdbc:mysql://" + config.getDatabaseServer() +
"/" + config.getDatabaseName();
Damin A. MARTINELLI
- 368 -
DeleteProjectBeanTest
package ar.com.do2.iadh;
import junit.framework.*;
import java.lang.*;
import java.sql.*;
public class DeleteProjectBeanTest extends TestCase {
private Connection conn;
protected void setUp() throws Exception {
ConfigFileParserBean config = new ConfigFileParserBean();
Damin A. MARTINELLI
- 369 -
FileBeanTest
package ar.com.do2.iadh;
import junit.framework.*;
import java.lang.*;
import java.sql.*;
public class FileBeanTest extends TestCase {
private Connection conn;
protected void setUp() throws Exception {
ConfigFileParserBean config = new ConfigFileParserBean();
String urldb = "jdbc:mysql://" + config.getDatabaseServer() +
"/" + config.getDatabaseName();
String login = config.getDatabaseUser();
String password = config.getDatabasePass();
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(urldb,login,password);
String delete = "DELETE FROM file";
Statement stmt = conn.createStatement();
stmt.execute(delete);
}
Damin A. MARTINELLI
- 370 -
FilesViewBeanTest
package ar.com.do2.iadh;
import junit.framework.*;
import java.lang.*;
import java.sql.*;
public class FilesViewBeanTest extends TestCase {
private Connection conn;
private FilesViewBean files;
protected void setUp() throws Exception {
ConfigFileParserBean config = new ConfigFileParserBean();
String urldb = "jdbc:mysql://" + config.getDatabaseServer() +
"/" + config.getDatabaseName();
String login = config.getDatabaseUser();
String password = config.getDatabasePass();
Damin A. MARTINELLI
- 371 -
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(urldb,login,password);
String delete = "DELETE FROM file";
Statement stmt = conn.createStatement();
stmt.execute(delete);
FileBean file = new FileBean();
file.setFile("testFilename");
file.setUser("testUser");
file.setDescription("testFileDescription");
file.setProject("testProject");
file.setType("INPUT-SOM");
file.setFilePath("");
file = new FileBean();
file.setFile("testFilename2");
file.setUser("testUser");
file.setDescription("testFileDescription2");
file.setProject("testProject");
file.setType("INPUT-SOM");
file.setFilePath("");
file = new FileBean();
file.setFile("testFilename3");
file.setUser("testUser");
file.setDescription("testFileDescription3");
file.setProject("testProject2");
file.setType("INPUT-SOM");
file.setFilePath("");
file = new FileBean();
file.setFile("testFilename4");
file.setUser("testUser2");
file.setDescription("testFileDescription4");
file.setProject("testProject");
file.setType("INPUT-SOM");
file.setFilePath("");
file = new FileBean();
file.setFile("testFilename5");
file.setUser("testUser");
file.setDescription("testFileDescription5");
file.setProject("testProject");
file.setType("OUTPUT-SOM");
file.setFilePath("");
files = new FilesViewBean();
files.setUser("testUser");
files.setProject("testProject");
files.setType("INPUT-SOM");
}
public void testGoFirstFile() throws Exception {
Damin A. MARTINELLI
- 372 -
files.goFirstFile();
//Luego de ir al primer file debe tener un siguiente
Assert.assertTrue(files.hasNextFile());
}
public void testGetNextFile() throws Exception {
files.goFirstFile();
if (files.hasNextFile()) {
//El primero debe ser el file testFilename
Assert.assertEquals(files.getNextFile(),
"testFilename");
}
else
Assert.assertTrue(false);
if (files.hasNextFile()) {
//El segundo debe ser el file testFilename2
Assert.assertEquals(files.getNextFile(),
"testFilename2");
}
else
Assert.assertTrue(false);
//Solo deben ser dos files
Assert.assertTrue(!files.hasNextFile());
}
}
LogCleanerBeanTest
package ar.com.do2.iadh;
import junit.framework.*;
import java.lang.*;
import java.sql.*;
public class LogCleanerBeanTest extends TestCase {
private LogCleanerBean logCleaner;
private Connection conn;
protected void setUp() throws Exception {
ConfigFileParserBean config = new ConfigFileParserBean();
String urldb = "jdbc:mysql://" + config.getDatabaseServer() +
"/" + config.getDatabaseName();
String login = config.getDatabaseUser();
String password = config.getDatabasePass();
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(urldb,login,password);
Damin A. MARTINELLI
- 373 -
LoginBeanTest
package ar.com.do2.iadh;
import junit.framework.*;
import java.lang.*;
import java.sql.*;
public class LoginBeanTest extends TestCase {
protected void setUp() throws Exception {
ConfigFileParserBean config = new ConfigFileParserBean();
String urldb = "jdbc:mysql://" + config.getDatabaseServer() +
"/" + config.getDatabaseName();
String login = config.getDatabaseUser();
String password = config.getDatabasePass();
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn =
DriverManager.getConnection(urldb,login,password);
String delete = "DELETE FROM user WHERE user='testUser'";
Statement stmt = conn.createStatement();
stmt.execute(delete);
String insert = "INSERT INTO user (user,pass) VALUES ('testUser','testUser')";
stmt.execute(insert);
}
public void testIsValidUser() throws Exception {
Damin A. MARTINELLI
- 374 -
LogLoaderBeanTest
package ar.com.do2.iadh;
import junit.framework.*;
import java.lang.*;
import java.sql.*;
public class LogLoaderBeanTest extends TestCase {
private LogLoaderBean log;
private Connection conn;
protected void setUp() throws Exception {
ConfigFileParserBean config = new ConfigFileParserBean();
String urldb = "jdbc:mysql://" + config.getDatabaseServer() +
"/" + config.getDatabaseName();
String login = config.getDatabaseUser();
String password = config.getDatabasePass();
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(urldb,login,password);
String delete = "DELETE FROM log WHERE user='testUser' AND
project='testProject'";
Statement stmt = conn.createStatement();
stmt.execute(delete);
log = new LogLoaderBean();
log.setUser("testUser");
log.setProject("testProject");
}
public void testLoad() throws Exception {
log.load("testLog.txt");
String query = "SELECT COUNT(*) as logs FROM log WHERE user='testUser'
AND project='testProject'";
Damin A. MARTINELLI
- 375 -
NumericSessionClusterBeanTest
package ar.com.do2.iadh;
import junit.framework.*;
import java.lang.*;
import java.sql.*;
public class NumericSessionClusterBeanTest extends TestCase {
private Connection conn;
protected void setUp() throws Exception {
ConfigFileParserBean config = new ConfigFileParserBean();
String urldb = "jdbc:mysql://" + config.getDatabaseServer() +
"/" + config.getDatabaseName();
String login = config.getDatabaseUser();
String password = config.getDatabasePass();
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(urldb,login,password);
String delete = "DELETE FROM sessionCluster WHERE user='testUser'";
Statement stmt = conn.createStatement();
stmt.execute(delete);
}
public void testGetCount() throws Exception {
NumericSessionClusterBean session = new
NumericSessionClusterBean();
session.setUser("testUser");
session.setProject("testProject");
session.setType("SOM");
session.setFile("testNumericClusters.txt");
//Deben cargarse 5 sesiones
Assert.assertEquals(session.getCount(), "5");
}
}
Damin A. MARTINELLI
- 376 -
PageCounterBeanTest
package ar.com.do2.iadh;
import junit.framework.*;
import java.lang.*;
import java.sql.*;
public class PageCounterBeanTest extends TestCase {
private Connection conn;
protected void setUp() throws Exception {
ConfigFileParserBean config = new ConfigFileParserBean();
String urldb = "jdbc:mysql://" + config.getDatabaseServer() +
"/" + config.getDatabaseName();
String login = config.getDatabaseUser();
String password = config.getDatabasePass();
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(urldb,login,password);
String delete = "DELETE FROM log WHERE user='testUser'";
Statement stmt = conn.createStatement();
stmt.execute(delete);
String deletePages = "DELETE FROM page WHERE user='testUser'";
stmt.execute(deletePages);
}
public void testLoad() throws Exception {
LogLoaderBean log = new LogLoaderBean();
log.setUser("testUser");
log.setProject("testProject");
log.load("testLog2.txt");
PageCounterBean counter = new PageCounterBean();
counter.setUser("testUser");
counter.setProject("testProject");
//Deben haberse cargado 4 paginas
Assert.assertEquals(counter.getPages(), "4");
}
public void testLoadWithIds() throws Exception {
LogLoaderBean log = new LogLoaderBean();
log.setUser("testUser");
log.setProject("testProject");
log.setIdsPage("do");
log.load("testLog.txt");
PageCounterBean counter = new PageCounterBean();
Damin A. MARTINELLI
- 377 -
counter.setUser("testUser");
counter.setProject("testProject");
//Deben haberse cargado 3 paginas
Assert.assertEquals(counter.getPages(), "3");
}
}
SessionMakerBeanTest
package ar.com.do2.iadh;
import junit.framework.*;
import java.lang.*;
import java.sql.*;
public class SessionMakerBeanTest extends TestCase {
private Connection conn;
protected void setUp() throws Exception {
ConfigFileParserBean config = new ConfigFileParserBean();
String urldb = "jdbc:mysql://" + config.getDatabaseServer() +
"/" + config.getDatabaseName();
String login = config.getDatabaseUser();
String password = config.getDatabasePass();
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(urldb,login,password);
String delete = "DELETE FROM log WHERE user='testUser'";
Statement stmt = conn.createStatement();
stmt.execute(delete);
String deletePages = "DELETE FROM page WHERE user='testUser'";
stmt.execute(deletePages);
}
public void testSave() throws Exception {
LogLoaderBean log = new LogLoaderBean();
log.setUser("testUser");
log.setProject("testProject");
log.setIdsPage("do");
log.load("testLog.txt");
PageCounterBean counter = new PageCounterBean();
counter.setUser("testUser");
counter.setProject("testProject");
counter.getPages();
SessionMakerBean maker = new SessionMakerBean();
maker.setUser("testUser");
maker.setProject("testProject");
Damin A. MARTINELLI
- 378 -
SessionSaverTest
package ar.com.do2.iadh;
import junit.framework.*;
import java.lang.*;
import java.sql.*;
public class SessionSaverTest extends TestCase {
private SessionSaver sessionSaver;
private Connection conn;
protected void setUp() throws Exception {
ConfigFileParserBean config = new ConfigFileParserBean();
String urldb = "jdbc:mysql://" + config.getDatabaseServer() +
"/" + config.getDatabaseName();
String login = config.getDatabaseUser();
String password = config.getDatabasePass();
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(urldb,login,password);
String delete = "DELETE FROM session WHERE user='testUser' AND
project='testProject'";
Statement stmt = conn.createStatement();
stmt.execute(delete);
sessionSaver = new SessionSaver();
sessionSaver.setUser("testUser");
sessionSaver.setProject("testProject");
}
Damin A. MARTINELLI
- 379 -
Damin A. MARTINELLI
- 380 -
if (more)
maxID = rs.getInt("MAX(ID)");
//Deben haberse creado dos sesiones mas de usuarios
Assert.assertEquals(maxID, 4);
//Distincion de sesiones en base al authuser de sesion
sessionSaver.save("127.0.0.1","user1","/index.php","2004-0615 15:05:41.0");
sessionSaver.save("127.0.0.1","user1","/page.php","2004-0615 15:06:41.0");
sessionSaver.save("127.0.0.1","user1","/page2.php","200406-15 15:07:41.0");
sessionSaver.save("127.0.0.1","user1","/page3.php","200406-15 15:08:41.0");
sessionSaver.save("127.0.0.1","user2","/index.php","2004-0615 15:05:41.0");
sessionSaver.save("127.0.0.1","user2","/page.php","2004-0615 15:06:41.0");
sessionSaver.save("127.0.0.1","user2","/page2.php","200406-15 15:07:41.0");
sessionSaver.save("127.0.0.1","user2","/page3.php","200406-15 15:08:41.0");
rs = stmt.executeQuery(query);
maxID = 0;
more = rs.next();
if (more)
maxID = rs.getInt("MAX(ID)");
//Deben haberse creado dos sesiones mas de usuarios
Assert.assertEquals(maxID, 6);
}
}
A continuacin se muestran los archivos utilizados en las pruebas.
testLog.txt
127.0.0.1 - - [27/Jan/2005:12:25:01 -0300] "GET /css/estilos.css HTTP/1.1" 200 3694
127.0.0.1 - - [27/Jan/2005:12:25:01 -0300] "GET /js/prototype.js HTTP/1.1" 200 61894
127.0.0.1 - - [27/Jan/2005:12:25:01 -0300] "GET /js/scriptaculous.js HTTP/1.1" 200 2322
127.0.0.1 - - [27/Jan/2005:12:25:01 -0300] "GET /js/builder.js HTTP/1.1" 200 4268
127.0.0.1 - - [27/Jan/2005:12:25:01 -0300] "GET /js/dragdrop.js HTTP/1.1" 200 31513
127.0.0.1 - - [27/Jan/2005:12:25:01 -0300] "GET /js/effects.js HTTP/1.1" 200 33802
127.0.0.1 - - [27/Jan/2005:12:25:02 -0300] "GET /js/controls.js HTTP/1.1" 200 28803
127.0.0.1 - - [27/Jan/2005:12:25:02 -0300] "GET /js/slider.js HTTP/1.1" 200 11283
127.0.0.1 - - [27/Jan/2005:12:25:02 -0300] "GET /xajax/xajax_js/xajax.js HTTP/1.1" 200
15903
127.0.0.1 - - [27/Jan/2005:12:25:02 -0300] "GET /js/datepicker.js HTTP/1.1" 200 20057
127.0.0.1 - - [27/Jan/2005:12:25:02 -0300] "GET /js/validate.js HTTP/1.1" 200 3611
Damin A. MARTINELLI
- 381 -
testLog2.txt
127.0.0.1 - - [15/Jun/2004:15:05:41 -0300] "GET /index.php HTTP/1.1" 200 3694
127.0.0.1 - - [15/Jun/2004:15:06:41 -0300] "GET /page.php HTTP/1.1" 200 3694
127.0.0.1 - - [15/Jun/2004:15:07:41 -0300] "GET /page2.php HTTP/1.1" 200 3694
127.0.0.1 - - [15/Jun/2004:15:08:41 -0300] "GET /page3.php HTTP/1.1" 200 3694
127.0.0.2 - - [15/Jun/2004:15:05:41 -0300] "GET /index.php HTTP/1.1" 200 3694
127.0.0.2 - - [15/Jun/2004:15:06:41 -0300] "GET /page.php HTTP/1.1" 200 3694
127.0.0.2 - - [15/Jun/2004:15:07:41 -0300] "GET /page2.php HTTP/1.1" 200 3694
127.0.0.2 - - [15/Jun/2004:15:08:41 -0300] "GET /page3.php HTTP/1.1" 200 3694
Damin A. MARTINELLI
- 382 -
testBinaryClusters.txt
1.0;0.0;0.0;0.0
0.0;0.0;1.0;0.0
0.0;1.0;0.0;0.0
0.0;1.0;0.0;0.0
1.0;0.0;0.0;0.0
testNumericClusters.txt
1
3
2
2
1
Damin A. MARTINELLI
- 383 -
...
Time: 4,484
OK (3 tests)
java junit.textui.TestRunner ar.com.do2.iadh.ConfigFileParserBeanTest
....
Time: 1,907
OK (4 tests)
java junit.textui.TestRunner ar.com.do2.iadh.CreateProjectBeanTest
.
Time: 2,468
OK (1 test)
java junit.textui.TestRunner ar.com.do2.iadh.DeleteProjectBeanTest
.
Time: 4,359
OK (1 test)
java junit.textui.TestRunner ar.com.do2.iadh.FileBeanTest
.
Time: 4,047
OK (1 test)
java junit.textui.TestRunner ar.com.do2.iadh.FilesViewBeanTest
..
Time: 3,969
OK (2 tests)
java junit.textui.TestRunner ar.com.do2.iadh.LogCleanerBeanTest
.
Time: 3,36
OK (1 test)
Damin A. MARTINELLI
- 384 -
Damin A. MARTINELLI
- 385 -
Prueba
Descripcin
Objetivo
Parmetros Utilizados
Resultado Esperado
Ejecucin
Resultado
Correcta
Descripcin Resultado
Damin A. MARTINELLI
- 386 -
Prueba
Descripcin
Objetivo
Parmetros Utilizados
Resultado Esperado
Ejecucin
Resultado
Correcta
Descripcin Resultado
Damin A. MARTINELLI
- 387 -
Prueba
Descripcin
Objetivo
Parmetros Utilizados
Resultado Esperado
Ejecucin
Resultado
Correcta
Descripcin Resultado
Prueba
Descripcin
Objetivo
Damin A. MARTINELLI
- 388 -
Parmetros Utilizados
Resultado Esperado
Ejecucin
Resultado
Correcta
Descripcin Resultado
Damin A. MARTINELLI
- 389 -