Estadisticas duraciones dos primeras paginas por tipo

parent f9852e09
No preview for this file type
This diff could not be displayed because it is too large.
...@@ -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)
......
...@@ -7,10 +7,10 @@ class Dato: ...@@ -7,10 +7,10 @@ class Dato:
def __init__(self, cadena): def __init__(self, cadena):
# Atributos # Atributos
self.Host_Remoto = None self.Host_Remoto = None
self.Clave=None self.Clave = None
self.Usuario=None self.Usuario = None
self.Fecha = None self.Fecha = None
self.Offset=None self.Offset = None
self.Metodo_Peticion = None self.Metodo_Peticion = None
self.URL_Solicitada = None self.URL_Solicitada = None
self.V_Protocolo = None self.V_Protocolo = None
...@@ -38,11 +38,11 @@ class Dato: ...@@ -38,11 +38,11 @@ class Dato:
# Obtenemos todos los valores necesarios, hostRemoto, fecha # Obtenemos todos los valores necesarios, hostRemoto, fecha
self.Host_Remoto, c = sacarLinea(cadena, c, aux, ' ') self.Host_Remoto, c = sacarLinea(cadena, c, aux, ' ')
self.Clave,c = sacarLinea(cadena, c, aux, ' ') self.Clave, c = sacarLinea(cadena, c, aux, ' ')
self.Usuario,c = sacarLinea(cadena, c, aux, ' ') self.Usuario, c = sacarLinea(cadena, c, aux, ' ')
self.Fecha, c = leerFecha(cadena, c, aux) self.Fecha, c = leerFecha(cadena, c, aux)
self.Offset, c = sacarLinea(cadena, c, aux, ']') self.Offset, c = sacarLinea(cadena, c, aux, ']')
self.Offset=self.Offset[1:len(self.Offset)] self.Offset = self.Offset[1:len(self.Offset)]
# Obtenemos modo de petición, url y protocolo # Obtenemos modo de petición, url y protocolo
c = leerLinea(cadena, c, '"') c = leerLinea(cadena, c, '"')
...@@ -60,7 +60,13 @@ class Dato: ...@@ -60,7 +60,13 @@ class Dato:
fechaBase = datetime.strptime("01/01/1995:00:00:00", '%d/%m/%Y:%H:%M:%S').timestamp() fechaBase = datetime.strptime("01/01/1995:00:00:00", '%d/%m/%Y:%H:%M:%S').timestamp()
self.Marca_Tiempo = int(fechaRegistro - fechaBase) self.Marca_Tiempo = int(fechaRegistro - fechaBase)
def enlaceDeContenido(self):
c = len(self.URL_Solicitada) - 1
while c > 0:
if self.URL_Solicitada[c] == '.':
return True
c -= 1
return False
# Se consideran valores erroneos, anomalos o nulos para descartarse este dato (se ignora # Se consideran valores erroneos, anomalos o nulos para descartarse este dato (se ignora
def isPerdido(self): def isPerdido(self):
...@@ -131,4 +137,4 @@ def modificarFecha(cadena): ...@@ -131,4 +137,4 @@ def modificarFecha(cadena):
mes = i mes = i
numero = numeros[meses.index(i)] numero = numeros[meses.index(i)]
return cadena.replace(mes, numero) return cadena.replace(mes, numero)
\ No newline at end of file
...@@ -37,7 +37,6 @@ class DirectoriosMasSol: ...@@ -37,7 +37,6 @@ class DirectoriosMasSol:
self.tabla.heading('#4', text="Porcentaje") self.tabla.heading('#4', text="Porcentaje")
self.tabla.column('#4', width=150, anchor=CENTER) self.tabla.column('#4', width=150, anchor=CENTER)
# Inserto los registros # Inserto los registros
self.tabla.delete(*self.tabla.get_children()) self.tabla.delete(*self.tabla.get_children())
index = 0 index = 0
...@@ -45,7 +44,7 @@ class DirectoriosMasSol: ...@@ -45,7 +44,7 @@ class DirectoriosMasSol:
self.tabla.insert("", 'end', values=total) self.tabla.insert("", 'end', values=total)
for i in range(num_dir): for i in range(num_dir):
index += 1 index += 1
per = ("{:.2f}".format(cont[i]/len(reg) * 100) + "%") per = ("{:.2f}".format(cont[i] / len(reg) * 100) + "%")
aux = [str(index), d[i], cont[i], per] aux = [str(index), d[i], cont[i], per]
self.tabla.insert("", 'end', values=aux) self.tabla.insert("", 'end', values=aux)
......
...@@ -2,12 +2,12 @@ ...@@ -2,12 +2,12 @@
def getFormatosFromCSV(cad): def getFormatosFromCSV(cad):
if cad !="" and cad[len(cad)-1]!=';': if cad != "" and cad[len(cad) - 1] != ';':
cad+=';' cad += ';'
ret= cad.split(sep=';') ret = cad.split(sep=';')
for i in range(len(ret)): for i in range(len(ret)):
if ret[i]!="" and ret[i][0]!='.': if ret[i] != "" and ret[i][0] != '.':
ret[i]="."+ret[i] ret[i] = "." + ret[i]
ret.pop() ret.pop()
return ret return ret
...@@ -53,19 +53,19 @@ def eliminarComportamientoAutomatico(reg, umbral): ...@@ -53,19 +53,19 @@ def eliminarComportamientoAutomatico(reg, umbral):
while c < len(reg): while c < len(reg):
if sesionActual != reg[c].ID_Sesion: if sesionActual != reg[c].ID_Sesion:
if indicePrimero != c: if indicePrimero != c:
sesiones[sesionActual] = abs(reg[c].Marca_Tiempo - reg[indicePrimero].Marca_Tiempo) / (c - indicePrimero) sesiones[sesionActual] = abs(reg[c].Marca_Tiempo - reg[indicePrimero].Marca_Tiempo) / (
c - indicePrimero)
sesionActual = reg[c].ID_Sesion sesionActual = reg[c].ID_Sesion
indicePrimero = c indicePrimero = c
c += 1 c += 1
numSesiones=len(sesiones) numSesiones = len(sesiones)
for i in range(1,numSesiones): for i in range(1, numSesiones):
dur=float(sesiones[i]) dur = float(sesiones[i])
if dur<=umbral: if dur <= umbral:
j=0 j = 0
while j < len(reg): while j < len(reg):
if reg[j].ID_Sesion==i: if reg[j].ID_Sesion == i:
reg.pop(j) reg.pop(j)
else: else:
j+=1 j += 1
return reg return reg
...@@ -9,6 +9,7 @@ from eliminarComportamientoAutomatico_GUI import FiltrarComportamientoAutomatico ...@@ -9,6 +9,7 @@ from eliminarComportamientoAutomatico_GUI import FiltrarComportamientoAutomatico
from ObtenerMasVisitados import ObtenerMasVisitados from ObtenerMasVisitados import ObtenerMasVisitados
from DirectoriosMasSolicitados_GUI import DirectoriosMasSol from DirectoriosMasSolicitados_GUI import DirectoriosMasSol
from TablaSesionesMenorTMedioPag import TablaSesionesMenorTMedioPag from TablaSesionesMenorTMedioPag import TablaSesionesMenorTMedioPag
from TipoPagExtension import TipoPagExtension
from AnalisisDuracionSesion import estadisticasDuracionSesiones from AnalisisDuracionSesion import estadisticasDuracionSesiones
from TablaExtFrec import TablaExtFrec from TablaExtFrec import TablaExtFrec
from Dato import Dato from Dato import Dato
...@@ -20,6 +21,7 @@ from TransfCesta import TransformarCesta ...@@ -20,6 +21,7 @@ from TransfCesta import TransformarCesta
from AnalisisRelacionVisitasDuracion import getRelacionVisitasDuracion from AnalisisRelacionVisitasDuracion import getRelacionVisitasDuracion
from AnalisisRelacionVisitasDuracion import getDuracionPrimerasVisitas from AnalisisRelacionVisitasDuracion import getDuracionPrimerasVisitas
def f_abrir(): def f_abrir():
RUTA_ARCHIVO = filedialog.askopenfilename(initialdir="/", title="Seleccione fichero", RUTA_ARCHIVO = filedialog.askopenfilename(initialdir="/", title="Seleccione fichero",
filetypes=( filetypes=(
...@@ -110,15 +112,22 @@ def fDurVis(): ...@@ -110,15 +112,22 @@ def fDurVis():
if len(REG) > 0: if len(REG) > 0:
getDuracionPrimerasVisitas(REG) getDuracionPrimerasVisitas(REG)
def extMasFrec(): def extMasFrec():
if len(REG) > 0: if len(REG) > 0:
TablaExtFrec(REG) TablaExtFrec(REG)
def TablaSesionesMasCortas(): def TablaSesionesMasCortas():
if len(REG) > 0: if len(REG) > 0:
TablaSesionesMenorTMedioPag(REG) TablaSesionesMenorTMedioPag(REG)
def tipoPagExtension():
if len(REG) > 0:
TipoPagExtension(REG)
def barraMenu(ventana): def barraMenu(ventana):
# DEFINIR BARRA DE MENÚ DE LA APLICACION: # DEFINIR BARRA DE MENÚ DE LA APLICACION:
barramenu = Menu(ventana) barramenu = Menu(ventana)
...@@ -155,7 +164,8 @@ def barraMenu(ventana): ...@@ -155,7 +164,8 @@ def barraMenu(ventana):
underline=0, compound=RIGHT) underline=0, compound=RIGHT)
menu2.add_command(label='Sesiones con menor tiempo medio', command=TablaSesionesMasCortas, menu2.add_command(label='Sesiones con menor tiempo medio', command=TablaSesionesMasCortas,
underline=0, compound=RIGHT) underline=0, compound=RIGHT)
menu2.add_command(label='Duracion de primeras 2 visitas por tipo', command=tipoPagExtension,
underline=0, compound=RIGHT)
menu3 = Menu(barramenu) menu3 = Menu(barramenu)
barramenu.add_cascade(menu=menu3, label='Cesta') barramenu.add_cascade(menu=menu3, label='Cesta')
...@@ -172,6 +182,7 @@ def barraMenu(ventana): ...@@ -172,6 +182,7 @@ def barraMenu(ventana):
command=about, command=about,
underline=0, compound=RIGHT) underline=0, compound=RIGHT)
# Obtiene los datos del registro para insertarlos en la tabla # Obtiene los datos del registro para insertarlos en la tabla
def getDatosRegistro(registro, atributos, contador): def getDatosRegistro(registro, atributos, contador):
ret = [] ret = []
...@@ -186,6 +197,7 @@ def getDatosRegistro(registro, atributos, contador): ...@@ -186,6 +197,7 @@ def getDatosRegistro(registro, atributos, contador):
return aux return aux
# Inserta cada tupla de todos los registros # Inserta cada tupla de todos los registros
def insertaRegistros(): def insertaRegistros():
tabla.delete(*tabla.get_children()) tabla.delete(*tabla.get_children())
...@@ -208,7 +220,6 @@ nombresAtributos.append("Num_Registro") ...@@ -208,7 +220,6 @@ nombresAtributos.append("Num_Registro")
for n in atributos: for n in atributos:
nombresAtributos.append(n) nombresAtributos.append(n)
# Creo la tabla y relleno las cabeceras # Creo la tabla y relleno las cabeceras
tabla = ttk.Treeview(ventana, height=100, columns=[f"#{n}" for n in range(len(nombresAtributos))]) tabla = ttk.Treeview(ventana, height=100, columns=[f"#{n}" for n in range(len(nombresAtributos))])
......
...@@ -35,21 +35,21 @@ def leerLog(ruta, extensionesAdmitidas, extensionesNoAdmitidas): ...@@ -35,21 +35,21 @@ def leerLog(ruta, extensionesAdmitidas, extensionesNoAdmitidas):
# Miro si el dato procede ser insertado o no # Miro si el dato procede ser insertado o no
def datoAdmitido(extensionesAdmitidas, extensionesNoAdmitidas, reg): def datoAdmitido(extensionesAdmitidas, extensionesNoAdmitidas, reg):
#Por defecto, si las listas estan vacias, se acepta todo # Por defecto, si las listas estan vacias, se acepta todo
if len(extensionesAdmitidas)==0 and len(extensionesNoAdmitidas)==0: if len(extensionesAdmitidas) == 0 and len(extensionesNoAdmitidas) == 0:
return True return True
ext="" ext = ""
if '.' not in reg.URL_Solicitada:#<-- Si el registro no tiene extension if '.' not in reg.URL_Solicitada: # <-- Si el registro no tiene extension
sinExtension=True sinExtension = True
else: else:
sinExtension=False sinExtension = False
#Saco la extension # Saco la extension
c=0 c = 0
while c < len(reg.URL_Solicitada) and reg.URL_Solicitada[c]!='.': while c < len(reg.URL_Solicitada) and reg.URL_Solicitada[c] != '.':
c+=1 c += 1
ext=reg.URL_Solicitada[c:len(reg.URL_Solicitada)] ext = reg.URL_Solicitada[c:len(reg.URL_Solicitada)]
if len(extensionesAdmitidas) != 0:#Se filtra por extensiones admitidas if len(extensionesAdmitidas) != 0: # Se filtra por extensiones admitidas
if sinExtension: if sinExtension:
if "" in extensionesAdmitidas: if "" in extensionesAdmitidas:
return True return True
...@@ -73,16 +73,9 @@ def datoAdmitido(extensionesAdmitidas, extensionesNoAdmitidas, reg): ...@@ -73,16 +73,9 @@ def datoAdmitido(extensionesAdmitidas, extensionesNoAdmitidas, reg):
return False return False
# Quita las entradas que pertenecen arañas, bots o crawler # Quita las entradas que pertenecen arañas, bots o crawler
def eSpidering(reg): def eSpidering(reg):
longitudOriginal=len(reg) longitudOriginal = len(reg)
aQuitar = ["spider", "bot", "crawler"] aQuitar = ["spider", "bot", "crawler"]
c = 0 c = 0
for r in reg: for r in reg:
...@@ -90,5 +83,6 @@ def eSpidering(reg): ...@@ -90,5 +83,6 @@ def eSpidering(reg):
if q in r.Host_Remoto.lower() or q in r.Usuario.lower(): if q in r.Host_Remoto.lower() or q in r.Usuario.lower():
reg.pop(c) reg.pop(c)
c += 1 c += 1
MessageBox.showinfo("Resultado De-Spidering", "Se han suprimido "+str(longitudOriginal-len(reg))+" registros con comportamiento automatico") MessageBox.showinfo("Resultado De-Spidering", "Se han suprimido " + str(
return reg longitudOriginal - len(reg)) + " registros con comportamiento automatico")
\ No newline at end of file return reg
...@@ -16,4 +16,4 @@ class ObtenerMasVisitados: ...@@ -16,4 +16,4 @@ class ObtenerMasVisitados:
self.app.mainloop() self.app.mainloop()
def cerrarVentana(self): def cerrarVentana(self):
self.app.destroy() self.app.destroy()
\ No newline at end of file
...@@ -5,23 +5,23 @@ import operator ...@@ -5,23 +5,23 @@ import operator
class TablaExtFrec: class TablaExtFrec:
def __init__(self,registros): def __init__(self, registros):
#Obtengo las extensiones mas repetidas junto con su numero de ocurrencias # Obtengo las extensiones mas repetidas junto con su numero de ocurrencias
ext={} ext = {}
for r in registros: for r in registros:
if '.' in r.URL_Solicitada: #Si tiene extension if '.' in r.URL_Solicitada: # Si tiene extension
#Saco la extension # Saco la extension
c=len(r.URL_Solicitada)-1 c = len(r.URL_Solicitada) - 1
while c > 0 and r.URL_Solicitada[c]!='.': while c > 0 and r.URL_Solicitada[c] != '.':
c-=1 c -= 1
extension=r.URL_Solicitada[c:len(r.URL_Solicitada)] extension = r.URL_Solicitada[c:len(r.URL_Solicitada)]
if extension in ext:#Si existe la extension en el diccionario if extension in ext: # Si existe la extension en el diccionario
ext[extension]=ext[extension]+1 ext[extension] = ext[extension] + 1
else: else:
ext[extension]=1 ext[extension] = 1
ext = sorted(ext.items(), key=operator.itemgetter(1)) ext = sorted(ext.items(), key=operator.itemgetter(1))
while len(ext) > 10: # Me quedo con las 10 que mas tengan while len(ext) > 10: # Me quedo con las 10 que mas tengan
ext.pop(0) ext.pop(0)
self.v = Tk() self.v = Tk()
...@@ -51,7 +51,7 @@ class TablaExtFrec: ...@@ -51,7 +51,7 @@ class TablaExtFrec:
# Inserto los registros # Inserto los registros
self.tabla.delete(*self.tabla.get_children()) self.tabla.delete(*self.tabla.get_children())
for i in range(len(ext)): for i in range(len(ext)):
aux = [ext[i][0],ext[i][1]] aux = [ext[i][0], ext[i][1]]
self.tabla.insert("", 'end', values=aux) self.tabla.insert("", 'end', values=aux)
self.v.mainloop() self.v.mainloop()
\ No newline at end of file
...@@ -3,25 +3,27 @@ from tkinter import * ...@@ -3,25 +3,27 @@ from tkinter import *
from Filtros import ordenarPorSesion from Filtros import ordenarPorSesion
import operator import operator
class TablaSesionesMenorTMedioPag: class TablaSesionesMenorTMedioPag:
def __init__(self, reg): def __init__(self, reg):
sesiones={} sesiones = {}
c=0 c = 0
sesionActual=reg[0].ID_Sesion sesionActual = reg[0].ID_Sesion
indicePrimero=0 indicePrimero = 0
while c < len(reg): while c < len(reg):
if sesionActual!=reg[c].ID_Sesion: if sesionActual != reg[c].ID_Sesion:
if indicePrimero!=c: if indicePrimero != c:
sesiones[sesionActual]=abs(reg[c].Marca_Tiempo-reg[indicePrimero].Marca_Tiempo)/(c-indicePrimero) sesiones[sesionActual] = abs(reg[c].Marca_Tiempo - reg[indicePrimero].Marca_Tiempo) / (
sesionActual=reg[c].ID_Sesion c - indicePrimero)
indicePrimero=c sesionActual = reg[c].ID_Sesion
elif c < len(reg)-1: indicePrimero = c
sesionActual = reg[c+1].ID_Sesion elif c < len(reg) - 1:
indicePrimero = c+1 sesionActual = reg[c + 1].ID_Sesion
c+=1 indicePrimero = c + 1
c += 1
sesiones = sorted(sesiones.items(), key=operator.itemgetter(1)) sesiones = sorted(sesiones.items(), key=operator.itemgetter(1))
while len(sesiones) > 20: #se visualizan 20 sesiones while len(sesiones) > 20: # se visualizan 20 sesiones
sesiones.pop() sesiones.pop()
self.v = Tk() self.v = Tk()
...@@ -55,4 +57,3 @@ class TablaSesionesMenorTMedioPag: ...@@ -55,4 +57,3 @@ class TablaSesionesMenorTMedioPag:
self.tabla.insert("", 'end', values=aux) self.tabla.insert("", 'end', values=aux)
self.v.mainloop() self.v.mainloop()
from tkinter import messagebox
import matplotlib.pyplot as plt
class TipoPagExtension:
def __init__(self, registros):
duracionesConPP = []
duracionesNavPP = []
duracionesConSP = []
duracionesNavSP = []
sesionActual = registros[0].ID_Sesion
ultimaSesion = registros[len(registros) - 1].ID_Sesion
c = 0
while sesionActual < ultimaSesion:
indicesContenido = []
indicesNavegacion = []
while c < (len(registros) - 1) and registros[c].ID_Sesion == sesionActual:
if registros[c].enlaceDeContenido():
indicesContenido.append(c)
else:
indicesNavegacion.append(c)
c += 1
# Calculo duracion paginas contenido
if len(indicesContenido) >= 2 and registros[indicesContenido[1] + 1].ID_Sesion == sesionActual:
duracionesConPP.append(
abs(registros[indicesContenido[1]].Marca_Tiempo - registros[indicesContenido[0]].Marca_Tiempo))
duracionesConSP.append(
abs(registros[indicesContenido[1] + 1].Marca_Tiempo - registros[indicesContenido[1]].Marca_Tiempo))
# Calculo duracion paginas navegacion
if len(indicesNavegacion) >= 2 and registros[indicesNavegacion[1] + 1].ID_Sesion == sesionActual:
duracionesNavPP.append(
abs(registros[indicesNavegacion[1]].Marca_Tiempo - registros[indicesNavegacion[0]].Marca_Tiempo))
duracionesNavSP.append(abs(
registros[indicesNavegacion[1] + 1].Marca_Tiempo - registros[indicesNavegacion[1]].Marca_Tiempo))
sesionActual = registros[c].ID_Sesion
# messagebox.showinfo(message=cad, title="Estadisticas")
visualizarHistograma(duracionesConPP, 'Duracion Primera Pagina Contenido')
visualizarHistograma(duracionesConSP, 'Duracion Segunda Pagina Contenido')
visualizarHistograma(duracionesNavPP, 'Duracion Primera Pagina Navegacion')
visualizarHistograma(duracionesNavSP, 'Duracion Segunda Pagina Navegacion')
def visualizarHistograma(duraciones, titulo):
num_bins = 5
n, bins, patches = plt.hist(duraciones, num_bins, facecolor='blue', alpha=0.5)
plt.title(titulo)
plt.show()
suma = 0.0
for x in duraciones:
suma += x
if (len(duraciones) != 0):
messagebox.showinfo(message=round((suma / len(duraciones)), 2), title="Media calculada")
def hacerHistograma(duraciones):
valorMax = int(max(duraciones) + 2)
x = []
y = []
for i in range(valorMax):
x.append(i)
for i in range(len(duraciones)):
y[i] = 0
for i in range(len(duraciones)):
y[round(duraciones[i])] += 1
return x, y
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