Analisis tiempo mediao pagina hecho

parent be1b401e
......@@ -59,11 +59,11 @@ def estadisticasDuracionSesiones(registros):
if duraciones[j] == i:
histograma[i] += 1
# Obtengo la moda (Posicion del valor mas alto del histograma)
malto=-1
moda=0
malto = -1
moda = 0
for i in range(len(histograma)):
if i!=0 and malto < histograma[i]:
malto=histograma[i]
moda=i
if i != 0 and malto < histograma[i]:
malto = histograma[i]
moda = i
# Devuelvo todos los parametros
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
from Filtros import getTiempoEnPagina
from Filtros import getDistintasPaginas
def analisisTiempoMedioPorPagina(registros):
#Ordeno los registros por sesion
reg=ordenaRegistros(registros,1800)
#Obtengo los id de las sesiones existentes
idsExistentes=getDistintasSesiones(reg)
#Obtengo las distintas paginas existentes
paginas=getDistintasPaginas()
#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
max=-1
# Ordeno los registros por sesion
reg = ordenaRegistros(registros, 1800)
# Obtengo los id de las sesiones existentes
idsExistentes = getDistintasSesiones(reg)
# Obtengo las distintas paginas existentes
paginas = getDistintasPaginas()
# 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
max = -1
for pag in paginas:
suma=0
c=0
suma = 0
c = 0
for sesion in idsExistentes:
suma+=getTiempoEnPagina(sesion,pag,reg)
c+=1
if c!=0:
t=round(suma/c, 2)
suma += getTiempoEnPagina(sesion, pag, reg)
c += 1
if c != 0:
t = round(suma / c, 2)
tiempos.append(t)
if t > max:
max=t
max = t
else:
tiempos.append(0)
#Creo el histograma
histograma=[]
max=int(max)+2
# Creo el histograma
histograma = []
max = int(max) + 2
for i in range(max):
histograma.append(0)
#Relleno el histograma
# Relleno el histograma
for t in tiempos:
histograma[int(round(t,0))]+=1
return paginas, tiempos,histograma
histograma[int(round(t, 0))] += 1
return paginas, tiempos, histograma
......@@ -11,7 +11,8 @@ class Cesta:
def obtenerFlags(self, sesiones, tam):
# Se rellenan los flags segun si son de la misma sesion o no para cada directorio
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)
else:
self.flags.append(False)
......
......@@ -5,49 +5,53 @@ def ordenarPorSesion(registros):
registros[i], registros[j] = registros[j], registros[i]
return registros
def getDistintasSesiones(registros):
s=set ()
s = set()
for r in registros:
s.add(r.idSesion)
return list(s)
def getDistintasPaginas(registros):
paginas = set()
for r in registros:
paginas.add(r.url)
paginas = 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
def getTiempoEnPagina(id,pagina,registros):
s=0#<-- Suma de los tiempos pasados entre paginas
for i in range(len(registros)-1):
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 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
def getTiempoEnPagina(id, pagina, registros):
s = 0 # <-- Suma de los tiempos pasados entre paginas
for i in range(len(registros) - 1):
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
#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):
#Ordeno por sesion
reg=ordenarPorSesion(registros)
sesionActual=reg[0].idSesion
iMin=-1
iMax=-1
idSesionesNoValidas=set ()
# Ordeno por sesion
reg = ordenarPorSesion(registros)
sesionActual = reg[0].idSesion
iMin = -1
iMax = -1
idSesionesNoValidas = set()
for i in range(len(reg)):
if reg[i].idSesion==sesionActual:
if iMin==-1:
iMin=i
if reg[i].idSesion == sesionActual:
if iMin == -1:
iMin = i
else:
iMax=i
iMax = i
else:
if iMin!=iMax:#<--- Si ha visitado mas de dos paginas en la sesion miro el tiempo
tiempo=abs(reg[iMax].marcaTiempo-reg[iMin].marcaTiempo)
if iMin != iMax: # <--- Si ha visitado mas de dos paginas en la sesion miro el tiempo
tiempo = abs(reg[iMax].marcaTiempo - reg[iMin].marcaTiempo)
if tiempo < 0.5:
idSesionesNoValidas.add(sesionActual)
sesionActual=reg[i].idSesion
#Me quedo con los registros con ids validos
ret=[]
sesionActual = reg[i].idSesion
# Me quedo con los registros con ids validos
ret = []
for r in reg:
if r.idSesion not in idSesionesNoValidas:
ret.append(r)
......
......@@ -5,6 +5,7 @@ from Cesta import obtenerDirectorios
from Cesta import obtenerCestaTransformada
from Filtros import eliminarComportamientoAutomatico
from AnalisisTMedioPagina import analisisTiempoMedioPorPagina
from AnalisisPaginasVisitadas import getEstadisticasPaginasVisitadas
RUTA_ARCHIVO = "../access_log_Aug95_reducido"
E_SPIDERING = True
......@@ -77,3 +78,12 @@ printDirectorios(d, cont, num_dir, num_reg)
cesta = obtenerCestaTransformada(d, ses)
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