Analisis Duracion Sesion Hecho

parent a9240334
from Filtros import ordenarPorSesion
import math
# Construye un histograma y proporciona parametros estadisticos de la duracion de las sesiones de mas de una visita
def getDuracionSesion(id, registrosOrdenados):
iMin = -1
iMax = -1
for i in range(len(registrosOrdenados)):
if registrosOrdenados[i].idSesion == id:
if iMin == -1:
iMin = i
else:
iMax = i
if iMin == iMax: # Si solo se ha hecho un acceso en la sesion, devolvemos None para ignorar la sesion
return None
return abs(registrosOrdenados[iMax].marcaTiempo - registrosOrdenados[iMin].marcaTiempo)
def estadisticasDuracionSesiones(registros):
# Ordeno las tuplas por registros
reg = ordenarPorSesion(registros)
# Miro los distintos ids de Sesion que hay
distintos = set()
for r in reg:
distintos.add(r.idSesion)
distintos = list(distintos)
# Para cada id distinto calculo su duracion y la incorporo al array donde el indice sera el orden de la sesion
# en el array de distintos y el contenido será la duracion
duraciones = []
suma = 0 # <- Suma para la media
maxDur = -1 # <---Duracion Maxima
minDur = 100000000 # <---Duracion Minima
for i in distintos:
aux = getDuracionSesion(i, reg)
if aux is None: # Si solo hay un acceso en la sesion se ignora
distintos.remove(i)
continue
suma += aux
duraciones.append(aux)
if aux > maxDur:
maxDur = aux
if aux < minDur:
minDur = aux
# Calculo la media
media = suma / len(distintos)
# Calculo la desviacion tipica
suma = 0
for d in duraciones:
suma += ((d - media) ** 2)
desviacionTipica = math.sqrt(suma / len(distintos))
# Ahora hago el histograma
histograma = []
c = 0
while c < maxDur:
histograma.append(0)
c += 1
# Relleno el histograma
for i in range(len(histograma)):
for j in range(len(duraciones)):
if duraciones[j] == i:
histograma[i] += 1
# Obtengo la moda (Posicion del valor mas alto del histograma)
malto=-1
moda=0
for i in range(len(histograma)):
if i!=0 and malto < histograma[i]:
malto=histograma[i]
moda=i
# Devuelvo todos los parametros
return histograma, media, moda, maxDur, minDur, desviacionTipica
def ordenarPorSesion(registros):
for i in range(len(registros)):
for j in range(len(registros)):
if registros[i].idSesion < registros[j].idSesion:
registros[i], registros[j] = registros[j], registros[i]
return registros
\ No newline at end of file
from ObtencionRegistro import obtenerRegistros
from Cesta import obtenerDirectorios
from Cesta import obtenerCestaTransformada
from AnalisisDuracionSesion import estadisticasDuracionSesiones
RUTA_ARCHIVO = "../access_log_Aug95_reducido"
E_SPIDERING = True
......@@ -60,8 +61,9 @@ def printCestaTransformada(cesta):
# Se crean los registros, identificando usuarios y sesiones y se muestran
r = obtenerRegistros(RUTA_ARCHIVO, E_SPIDERING, EXTENSIONES_ADMITIDAS, EXTENSIONES_NOADMITIDAS, UMBRAL_SESIONES)
num_reg = len(r)
printRegistro(r)
# printRegistro(r)
'''
# Se obtienen los directorios con contadores y la cesta
umbral = int(num_reg * FACTOR_UMBRAL / 100)
d, cont, ses = obtenerDirectorios(r, umbral)
......@@ -71,3 +73,13 @@ printDirectorios(d, cont, num_dir, num_reg)
# Obtiene cesta transformada y la muestra
cesta = obtenerCestaTransformada(d, ses)
printCestaTransformada(cesta)
'''
histograma, media, moda, maxDur, minDur, desviacionTipica = estadisticasDuracionSesiones(r)
print("Media:", media)
print("Moda:", moda)
print("Maximo:", maxDur)
print("Minimo:", minDur)
print("DV:", desviacionTipica)
print("Histograma:", histograma)
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