Analisis tiempo mediao pagina hecho

parent be1b401e
...@@ -59,11 +59,11 @@ def estadisticasDuracionSesiones(registros): ...@@ -59,11 +59,11 @@ def estadisticasDuracionSesiones(registros):
if duraciones[j] == i: if duraciones[j] == i:
histograma[i] += 1 histograma[i] += 1
# Obtengo la moda (Posicion del valor mas alto del histograma) # Obtengo la moda (Posicion del valor mas alto del histograma)
malto=-1 malto = -1
moda=0 moda = 0
for i in range(len(histograma)): for i in range(len(histograma)):
if i!=0 and malto < histograma[i]: if i != 0 and malto < histograma[i]:
malto=histograma[i] malto = histograma[i]
moda=i moda = i
# Devuelvo todos los parametros # Devuelvo todos los parametros
return histograma, media, moda, maxDur, minDur, desviacionTipica return histograma, media, moda, maxDur, minDur, desviacionTipica
import math
from Filtros import getDistintasPaginas
def getEstadisticasPaginasVisitadas(registros):
# Cojo la lista de las distintas paginas exitentes
paginas = getDistintasPaginas(registros)
# Creo lista con el numero de ocurrencias para cada pagina (coincidiendo los indices)
ocurrencias = []
max = -1
min = 1000000000
media = 0
for p in paginas:
sesiones = set()
for r in registros:
if r.url == p:
sesiones.add(r.idSesion)
cantidad = len(sesiones)
ocurrencias.append(cantidad)
if max < cantidad:
max = cantidad
if min > cantidad:
min = cantidad
media += cantidad
media /= len(paginas)
# Calculo la desviacion tipica
suma = 0
for o in ocurrencias:
suma += ((o - media) ** 2)
desviacionTipica = math.sqrt(suma / len(paginas))
# Creo el histograma
histograma = []
for i in range(len(ocurrencias)):
suma = 0
for o in ocurrencias:
if o == i:
suma += 1
histograma.append(suma)
# Obtengo la moda
moda = -1
for i in range(len(ocurrencias)):
if ocurrencias[i] > moda:
moda = ocurrencias[i]
return histograma, max, min, moda, media, desviacionTipica
...@@ -3,38 +3,37 @@ from Filtros import getDistintasSesiones ...@@ -3,38 +3,37 @@ from Filtros import getDistintasSesiones
from Filtros import getTiempoEnPagina from Filtros import getTiempoEnPagina
from Filtros import getDistintasPaginas from Filtros import getDistintasPaginas
def analisisTiempoMedioPorPagina(registros): def analisisTiempoMedioPorPagina(registros):
#Ordeno los registros por sesion # Ordeno los registros por sesion
reg=ordenaRegistros(registros,1800) reg = ordenaRegistros(registros, 1800)
#Obtengo los id de las sesiones existentes # Obtengo los id de las sesiones existentes
idsExistentes=getDistintasSesiones(reg) idsExistentes = getDistintasSesiones(reg)
#Obtengo las distintas paginas existentes # Obtengo las distintas paginas existentes
paginas=getDistintasPaginas() paginas = getDistintasPaginas()
#Creo una lista para guardar el tiempo medio que han pasado los usuarios en las paginas # Creo una lista para guardar el tiempo medio que han pasado los usuarios en las paginas
tiempos=[]#El indice del vector tiempos es igual al indice vector paginas tiempos = [] # El indice del vector tiempos es igual al indice vector paginas
max=-1 max = -1
for pag in paginas: for pag in paginas:
suma=0 suma = 0
c=0 c = 0
for sesion in idsExistentes: for sesion in idsExistentes:
suma+=getTiempoEnPagina(sesion,pag,reg) suma += getTiempoEnPagina(sesion, pag, reg)
c+=1 c += 1
if c!=0: if c != 0:
t=round(suma/c, 2) t = round(suma / c, 2)
tiempos.append(t) tiempos.append(t)
if t > max: if t > max:
max=t max = t
else: else:
tiempos.append(0) tiempos.append(0)
#Creo el histograma # Creo el histograma
histograma=[] histograma = []
max=int(max)+2 max = int(max) + 2
for i in range(max): for i in range(max):
histograma.append(0) histograma.append(0)
#Relleno el histograma # Relleno el histograma
for t in tiempos: for t in tiempos:
histograma[int(round(t,0))]+=1 histograma[int(round(t, 0))] += 1
return paginas, tiempos,histograma
return paginas, tiempos, histograma
...@@ -11,7 +11,8 @@ class Cesta: ...@@ -11,7 +11,8 @@ class Cesta:
def obtenerFlags(self, sesiones, tam): def obtenerFlags(self, sesiones, tam):
# Se rellenan los flags segun si son de la misma sesion o no para cada directorio # Se rellenan los flags segun si son de la misma sesion o no para cada directorio
for i in range(tam): for i in range(tam):
if sesiones[i] == self.sesion: # Hay que obtener distribuciones de frecuencia aquí o no ############################3 if sesiones[
i] == self.sesion: # Hay que obtener distribuciones de frecuencia aquí o no ############################3
self.flags.append(True) self.flags.append(True)
else: else:
self.flags.append(False) self.flags.append(False)
......
...@@ -5,49 +5,53 @@ def ordenarPorSesion(registros): ...@@ -5,49 +5,53 @@ def ordenarPorSesion(registros):
registros[i], registros[j] = registros[j], registros[i] registros[i], registros[j] = registros[j], registros[i]
return registros return registros
def getDistintasSesiones(registros): def getDistintasSesiones(registros):
s=set () s = set()
for r in registros: for r in registros:
s.add(r.idSesion) s.add(r.idSesion)
return list(s) return list(s)
def getDistintasPaginas(registros): def getDistintasPaginas(registros):
paginas = set() paginas = set()
for r in registros: for r in registros:
paginas.add(r.url) paginas.add(r.url)
paginas = list(paginas) return list(paginas)
#Pasado el id de sesion y la pagina, se suma el tiempo que ha pasado el usuario desde que accedio a la pagina hasta que
#cambio de pagina # Pasado el id de sesion y la pagina, se suma el tiempo que ha pasado el usuario desde que accedio a la pagina hasta que
def getTiempoEnPagina(id,pagina,registros): # cambio de pagina
s=0#<-- Suma de los tiempos pasados entre paginas def getTiempoEnPagina(id, pagina, registros):
for i in range(len(registros)-1): s = 0 # <-- Suma de los tiempos pasados entre paginas
if registros[i].url==pagina and registros[i].idSesion==id and registros[i+1].idSesion==id: for i in range(len(registros) - 1):
s+=abs(registros[i+1].marcaTiempo-registros[i].marcaTiempo) if registros[i].url == pagina and registros[i].idSesion == id and registros[i + 1].idSesion == id:
s += abs(registros[i + 1].marcaTiempo - registros[i].marcaTiempo)
return s return s
#Elimina las sesiones que han invertido menos de 0,5 segundos en el acceso
# Elimina las sesiones que han invertido menos de 0,5 segundos en el acceso
def eliminarComportamientoAutomatico(registros): def eliminarComportamientoAutomatico(registros):
#Ordeno por sesion # Ordeno por sesion
reg=ordenarPorSesion(registros) reg = ordenarPorSesion(registros)
sesionActual=reg[0].idSesion sesionActual = reg[0].idSesion
iMin=-1 iMin = -1
iMax=-1 iMax = -1
idSesionesNoValidas=set () idSesionesNoValidas = set()
for i in range(len(reg)): for i in range(len(reg)):
if reg[i].idSesion==sesionActual: if reg[i].idSesion == sesionActual:
if iMin==-1: if iMin == -1:
iMin=i iMin = i
else: else:
iMax=i iMax = i
else: else:
if iMin!=iMax:#<--- Si ha visitado mas de dos paginas en la sesion miro el tiempo if iMin != iMax: # <--- Si ha visitado mas de dos paginas en la sesion miro el tiempo
tiempo=abs(reg[iMax].marcaTiempo-reg[iMin].marcaTiempo) tiempo = abs(reg[iMax].marcaTiempo - reg[iMin].marcaTiempo)
if tiempo < 0.5: if tiempo < 0.5:
idSesionesNoValidas.add(sesionActual) idSesionesNoValidas.add(sesionActual)
sesionActual=reg[i].idSesion sesionActual = reg[i].idSesion
#Me quedo con los registros con ids validos # Me quedo con los registros con ids validos
ret=[] ret = []
for r in reg: for r in reg:
if r.idSesion not in idSesionesNoValidas: if r.idSesion not in idSesionesNoValidas:
ret.append(r) ret.append(r)
......
...@@ -5,6 +5,7 @@ from Cesta import obtenerDirectorios ...@@ -5,6 +5,7 @@ from Cesta import obtenerDirectorios
from Cesta import obtenerCestaTransformada from Cesta import obtenerCestaTransformada
from Filtros import eliminarComportamientoAutomatico from Filtros import eliminarComportamientoAutomatico
from AnalisisTMedioPagina import analisisTiempoMedioPorPagina from AnalisisTMedioPagina import analisisTiempoMedioPorPagina
from AnalisisPaginasVisitadas import getEstadisticasPaginasVisitadas
RUTA_ARCHIVO = "../access_log_Aug95_reducido" RUTA_ARCHIVO = "../access_log_Aug95_reducido"
E_SPIDERING = True E_SPIDERING = True
...@@ -77,3 +78,12 @@ printDirectorios(d, cont, num_dir, num_reg) ...@@ -77,3 +78,12 @@ printDirectorios(d, cont, num_dir, num_reg)
cesta = obtenerCestaTransformada(d, ses) cesta = obtenerCestaTransformada(d, ses)
printCestaTransformada(cesta) printCestaTransformada(cesta)
''' '''
histograma, max, min, moda, media, desviacionTipica=getEstadisticasPaginasVisitadas(r)
print("Max:"+str(max)+"\n")
print("Min:"+str(min)+"\n")
print("Moda:"+str(moda)+"\n")
print("Media:"+str(media)+"\n")
print("DV:"+str(desviacionTipica)+"\n")
print(histograma)
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment