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:
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)
......
......@@ -7,10 +7,10 @@ class Dato:
def __init__(self, cadena):
# Atributos
self.Host_Remoto = None
self.Clave=None
self.Usuario=None
self.Clave = None
self.Usuario = None
self.Fecha = None
self.Offset=None
self.Offset = None
self.Metodo_Peticion = None
self.URL_Solicitada = None
self.V_Protocolo = None
......@@ -38,11 +38,11 @@ class Dato:
# Obtenemos todos los valores necesarios, hostRemoto, fecha
self.Host_Remoto, c = sacarLinea(cadena, c, aux, ' ')
self.Clave,c = sacarLinea(cadena, c, aux, ' ')
self.Usuario,c = sacarLinea(cadena, c, aux, ' ')
self.Clave, c = sacarLinea(cadena, c, aux, ' ')
self.Usuario, c = sacarLinea(cadena, c, aux, ' ')
self.Fecha, c = leerFecha(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
c = leerLinea(cadena, c, '"')
......@@ -60,7 +60,13 @@ class Dato:
fechaBase = datetime.strptime("01/01/1995:00:00:00", '%d/%m/%Y:%H:%M:%S').timestamp()
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
def isPerdido(self):
......
......@@ -37,7 +37,6 @@ class DirectoriosMasSol:
self.tabla.heading('#4', text="Porcentaje")
self.tabla.column('#4', width=150, anchor=CENTER)
# Inserto los registros
self.tabla.delete(*self.tabla.get_children())
index = 0
......@@ -45,7 +44,7 @@ class DirectoriosMasSol:
self.tabla.insert("", 'end', values=total)
for i in range(num_dir):
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]
self.tabla.insert("", 'end', values=aux)
......
......@@ -2,12 +2,12 @@
def getFormatosFromCSV(cad):
if cad !="" and cad[len(cad)-1]!=';':
cad+=';'
ret= cad.split(sep=';')
if cad != "" and cad[len(cad) - 1] != ';':
cad += ';'
ret = cad.split(sep=';')
for i in range(len(ret)):
if ret[i]!="" and ret[i][0]!='.':
ret[i]="."+ret[i]
if ret[i] != "" and ret[i][0] != '.':
ret[i] = "." + ret[i]
ret.pop()
return ret
......@@ -53,19 +53,19 @@ def eliminarComportamientoAutomatico(reg, umbral):
while c < len(reg):
if sesionActual != reg[c].ID_Sesion:
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
indicePrimero = c
c += 1
numSesiones=len(sesiones)
for i in range(1,numSesiones):
dur=float(sesiones[i])
if dur<=umbral:
j=0
numSesiones = len(sesiones)
for i in range(1, numSesiones):
dur = float(sesiones[i])
if dur <= umbral:
j = 0
while j < len(reg):
if reg[j].ID_Sesion==i:
if reg[j].ID_Sesion == i:
reg.pop(j)
else:
j+=1
j += 1
return reg
......@@ -9,6 +9,7 @@ from eliminarComportamientoAutomatico_GUI import FiltrarComportamientoAutomatico
from ObtenerMasVisitados import ObtenerMasVisitados
from DirectoriosMasSolicitados_GUI import DirectoriosMasSol
from TablaSesionesMenorTMedioPag import TablaSesionesMenorTMedioPag
from TipoPagExtension import TipoPagExtension
from AnalisisDuracionSesion import estadisticasDuracionSesiones
from TablaExtFrec import TablaExtFrec
from Dato import Dato
......@@ -20,6 +21,7 @@ from TransfCesta import TransformarCesta
from AnalisisRelacionVisitasDuracion import getRelacionVisitasDuracion
from AnalisisRelacionVisitasDuracion import getDuracionPrimerasVisitas
def f_abrir():
RUTA_ARCHIVO = filedialog.askopenfilename(initialdir="/", title="Seleccione fichero",
filetypes=(
......@@ -110,15 +112,22 @@ def fDurVis():
if len(REG) > 0:
getDuracionPrimerasVisitas(REG)
def extMasFrec():
if len(REG) > 0:
TablaExtFrec(REG)
def TablaSesionesMasCortas():
if len(REG) > 0:
TablaSesionesMenorTMedioPag(REG)
def tipoPagExtension():
if len(REG) > 0:
TipoPagExtension(REG)
def barraMenu(ventana):
# DEFINIR BARRA DE MENÚ DE LA APLICACION:
barramenu = Menu(ventana)
......@@ -155,7 +164,8 @@ def barraMenu(ventana):
underline=0, compound=RIGHT)
menu2.add_command(label='Sesiones con menor tiempo medio', command=TablaSesionesMasCortas,
underline=0, compound=RIGHT)
menu2.add_command(label='Duracion de primeras 2 visitas por tipo', command=tipoPagExtension,
underline=0, compound=RIGHT)
menu3 = Menu(barramenu)
barramenu.add_cascade(menu=menu3, label='Cesta')
......@@ -172,6 +182,7 @@ def barraMenu(ventana):
command=about,
underline=0, compound=RIGHT)
# Obtiene los datos del registro para insertarlos en la tabla
def getDatosRegistro(registro, atributos, contador):
ret = []
......@@ -186,6 +197,7 @@ def getDatosRegistro(registro, atributos, contador):
return aux
# Inserta cada tupla de todos los registros
def insertaRegistros():
tabla.delete(*tabla.get_children())
......@@ -208,7 +220,6 @@ nombresAtributos.append("Num_Registro")
for n in atributos:
nombresAtributos.append(n)
# Creo la tabla y relleno las cabeceras
tabla = ttk.Treeview(ventana, height=100, columns=[f"#{n}" for n in range(len(nombresAtributos))])
......
......@@ -35,21 +35,21 @@ def leerLog(ruta, extensionesAdmitidas, extensionesNoAdmitidas):
# Miro si el dato procede ser insertado o no
def datoAdmitido(extensionesAdmitidas, extensionesNoAdmitidas, reg):
#Por defecto, si las listas estan vacias, se acepta todo
if len(extensionesAdmitidas)==0 and len(extensionesNoAdmitidas)==0:
# Por defecto, si las listas estan vacias, se acepta todo
if len(extensionesAdmitidas) == 0 and len(extensionesNoAdmitidas) == 0:
return True
ext=""
if '.' not in reg.URL_Solicitada:#<-- Si el registro no tiene extension
sinExtension=True
ext = ""
if '.' not in reg.URL_Solicitada: # <-- Si el registro no tiene extension
sinExtension = True
else:
sinExtension=False
#Saco la extension
c=0
while c < len(reg.URL_Solicitada) and reg.URL_Solicitada[c]!='.':
c+=1
ext=reg.URL_Solicitada[c:len(reg.URL_Solicitada)]
sinExtension = False
# Saco la extension
c = 0
while c < len(reg.URL_Solicitada) and reg.URL_Solicitada[c] != '.':
c += 1
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 "" in extensionesAdmitidas:
return True
......@@ -73,16 +73,9 @@ def datoAdmitido(extensionesAdmitidas, extensionesNoAdmitidas, reg):
return False
# Quita las entradas que pertenecen arañas, bots o crawler
def eSpidering(reg):
longitudOriginal=len(reg)
longitudOriginal = len(reg)
aQuitar = ["spider", "bot", "crawler"]
c = 0
for r in reg:
......@@ -90,5 +83,6 @@ def eSpidering(reg):
if q in r.Host_Remoto.lower() or q in r.Usuario.lower():
reg.pop(c)
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(
longitudOriginal - len(reg)) + " registros con comportamiento automatico")
return reg
......@@ -5,20 +5,20 @@ import operator
class TablaExtFrec:
def __init__(self,registros):
#Obtengo las extensiones mas repetidas junto con su numero de ocurrencias
ext={}
def __init__(self, registros):
# Obtengo las extensiones mas repetidas junto con su numero de ocurrencias
ext = {}
for r in registros:
if '.' in r.URL_Solicitada: #Si tiene extension
#Saco la extension
c=len(r.URL_Solicitada)-1
while c > 0 and r.URL_Solicitada[c]!='.':
c-=1
extension=r.URL_Solicitada[c:len(r.URL_Solicitada)]
if extension in ext:#Si existe la extension en el diccionario
ext[extension]=ext[extension]+1
if '.' in r.URL_Solicitada: # Si tiene extension
# Saco la extension
c = len(r.URL_Solicitada) - 1
while c > 0 and r.URL_Solicitada[c] != '.':
c -= 1
extension = r.URL_Solicitada[c:len(r.URL_Solicitada)]
if extension in ext: # Si existe la extension en el diccionario
ext[extension] = ext[extension] + 1
else:
ext[extension]=1
ext[extension] = 1
ext = sorted(ext.items(), key=operator.itemgetter(1))
while len(ext) > 10: # Me quedo con las 10 que mas tengan
......@@ -51,7 +51,7 @@ class TablaExtFrec:
# Inserto los registros
self.tabla.delete(*self.tabla.get_children())
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.v.mainloop()
......@@ -3,25 +3,27 @@ from tkinter import *
from Filtros import ordenarPorSesion
import operator
class TablaSesionesMenorTMedioPag:
def __init__(self, reg):
sesiones={}
c=0
sesionActual=reg[0].ID_Sesion
indicePrimero=0
sesiones = {}
c = 0
sesionActual = reg[0].ID_Sesion
indicePrimero = 0
while c < len(reg):
if sesionActual!=reg[c].ID_Sesion:
if indicePrimero!=c:
sesiones[sesionActual]=abs(reg[c].Marca_Tiempo-reg[indicePrimero].Marca_Tiempo)/(c-indicePrimero)
sesionActual=reg[c].ID_Sesion
indicePrimero=c
elif c < len(reg)-1:
sesionActual = reg[c+1].ID_Sesion
indicePrimero = c+1
c+=1
if sesionActual != reg[c].ID_Sesion:
if indicePrimero != c:
sesiones[sesionActual] = abs(reg[c].Marca_Tiempo - reg[indicePrimero].Marca_Tiempo) / (
c - indicePrimero)
sesionActual = reg[c].ID_Sesion
indicePrimero = c
elif c < len(reg) - 1:
sesionActual = reg[c + 1].ID_Sesion
indicePrimero = c + 1
c += 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()
self.v = Tk()
......@@ -55,4 +57,3 @@ class TablaSesionesMenorTMedioPag:
self.tabla.insert("", 'end', values=aux)
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