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 ObtencionRegistro import obtenerRegistros
from Cesta import obtenerDirectorios from Cesta import obtenerDirectorios
from Cesta import obtenerCestaTransformada from Cesta import obtenerCestaTransformada
from AnalisisDuracionSesion import estadisticasDuracionSesiones
RUTA_ARCHIVO = "../access_log_Aug95_reducido" RUTA_ARCHIVO = "../access_log_Aug95_reducido"
E_SPIDERING = True E_SPIDERING = True
...@@ -60,8 +61,9 @@ def printCestaTransformada(cesta): ...@@ -60,8 +61,9 @@ def printCestaTransformada(cesta):
# Se crean los registros, identificando usuarios y sesiones y se muestran # Se crean los registros, identificando usuarios y sesiones y se muestran
r = obtenerRegistros(RUTA_ARCHIVO, E_SPIDERING, EXTENSIONES_ADMITIDAS, EXTENSIONES_NOADMITIDAS, UMBRAL_SESIONES) r = obtenerRegistros(RUTA_ARCHIVO, E_SPIDERING, EXTENSIONES_ADMITIDAS, EXTENSIONES_NOADMITIDAS, UMBRAL_SESIONES)
num_reg = len(r) num_reg = len(r)
printRegistro(r) # printRegistro(r)
'''
# Se obtienen los directorios con contadores y la cesta # Se obtienen los directorios con contadores y la cesta
umbral = int(num_reg * FACTOR_UMBRAL / 100) umbral = int(num_reg * FACTOR_UMBRAL / 100)
d, cont, ses = obtenerDirectorios(r, umbral) d, cont, ses = obtenerDirectorios(r, umbral)
...@@ -71,3 +73,13 @@ printDirectorios(d, cont, num_dir, num_reg) ...@@ -71,3 +73,13 @@ printDirectorios(d, cont, num_dir, num_reg)
# Obtiene cesta transformada y la muestra # Obtiene cesta transformada y la muestra
cesta = obtenerCestaTransformada(d, ses) cesta = obtenerCestaTransformada(d, ses)
printCestaTransformada(cesta) 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