Proyecto finalizado

parent a63973c8
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import statistics as stat
from tkinter import messagebox from tkinter import messagebox
...@@ -12,9 +13,9 @@ def getRelacionVisitasDuracion(reg): ...@@ -12,9 +13,9 @@ def getRelacionVisitasDuracion(reg):
# Se obtiene la ecuacion de regresión estimada según los máximos y mínimos # Se obtiene la ecuacion de regresión estimada según los máximos y mínimos
ecuacion = obtenerRegresion(paginas, tiempo) ecuacion = obtenerRegresion(paginas, tiempo)
x0 = min(paginas) x0 = min(paginas)
y0 = x0*ecuacion[0] + ecuacion[1] y0 = x0 * ecuacion[0] + ecuacion[1]
x1 = max(paginas) x1 = max(paginas)
y1 = x1*ecuacion[0] + ecuacion[1] y1 = x1 * ecuacion[0] + ecuacion[1]
plt.plot([x0, x1], [y0, y1], marker='o') plt.plot([x0, x1], [y0, y1], marker='o')
# Mostramos el gráfico y devolvemos la pendiente (ecuacion[0] con el tiempo medio de pagina) # Mostramos el gráfico y devolvemos la pendiente (ecuacion[0] con el tiempo medio de pagina)
...@@ -23,7 +24,8 @@ def getRelacionVisitasDuracion(reg): ...@@ -23,7 +24,8 @@ def getRelacionVisitasDuracion(reg):
plt.xlabel("Tiempo total de la Sesion") plt.xlabel("Tiempo total de la Sesion")
plt.show() plt.show()
datos = "Tiempo Medio de Pagina: {}. Pendiente: {}." datos = "Tiempo Medio de Pagina: {}. Pendiente: {}."
messagebox.showinfo(message=datos.format(tiempoMedioPagina, ecuacion[0]), title="Comparación tiempo medio con pendiente del modelo") messagebox.showinfo(message=datos.format(tiempoMedioPagina, ecuacion[0]),
title="Comparación tiempo medio con pendiente del modelo")
def getPaginasVisitas(reg): def getPaginasVisitas(reg):
...@@ -37,16 +39,16 @@ def getPaginasVisitas(reg): ...@@ -37,16 +39,16 @@ def getPaginasVisitas(reg):
for i in range(tam): for i in range(tam):
r = reg[i] r = reg[i]
if i < tam - 1: if i < tam - 1:
tiempoPagina.append(reg[i+1].Marca_Tiempo - r.Marca_Tiempo) tiempoPagina.append(reg[i + 1].Marca_Tiempo - r.Marca_Tiempo)
if r.ID_Sesion == reg[i+1].ID_Sesion: # Si es la misma sesion se incrementan valores if r.ID_Sesion == reg[i + 1].ID_Sesion: # Si es la misma sesion se incrementan valores
paginas[index] += 1 paginas[index] += 1
tiempoVisita[index] = reg[i+1].Marca_Tiempo tiempoVisita[index] = reg[i + 1].Marca_Tiempo
else: # Si no se crea nueva else: # Si no se crea nueva
index += 1 index += 1
paginas.append(1) paginas.append(1)
tiempoVisita.append(0) tiempoVisita.append(0)
tiempoMedioPag = sum(tiempoPagina)/len(tiempoPagina) tiempoMedioPag = sum(tiempoPagina) / len(tiempoPagina)
return paginas, tiempoVisita, tiempoMedioPag return paginas, tiempoVisita, tiempoMedioPag
...@@ -56,8 +58,8 @@ def obtenerRegresion(paginas, tiempo): ...@@ -56,8 +58,8 @@ def obtenerRegresion(paginas, tiempo):
tam = len(paginas) tam = len(paginas)
# Obtenemos medias aritmeticas # Obtenemos medias aritmeticas
medx = sum(paginas)/tam medx = sum(paginas) / tam
medy = sum(tiempo)/tam medy = sum(tiempo) / tam
# Obtenemos la covarianza y varianza de y # Obtenemos la covarianza y varianza de y
xy = 0 xy = 0
...@@ -67,13 +69,71 @@ def obtenerRegresion(paginas, tiempo): ...@@ -67,13 +69,71 @@ def obtenerRegresion(paginas, tiempo):
xy += paginas[i] * tiempo[i] xy += paginas[i] * tiempo[i]
sqx += paginas[i] * paginas[i] sqx += paginas[i] * paginas[i]
sqy += tiempo[i] * tiempo[i] sqy += tiempo[i] * tiempo[i]
cov = xy/tam - medx*medy cov = xy / tam - medx * medy
vay = sqy/tam - medy*medy vay = sqy / tam - medy * medy
# Obtenemos la recta de regresión de Y sobre X, y = cov/vay(x - medx) + medy # Obtenemos la recta de regresión de Y sobre X, y = cov/vay(x - medx) + medy
Ax = cov/vay Ax = cov / vay
Bc = Ax * medx + medy Bc = Ax * medx + medy
ecuacion.append(Ax) # Para Ax ecuacion.append(Ax) # Para Ax
ecuacion.append(Bc) # Para B ecuacion.append(Bc) # Para B
return ecuacion return ecuacion
def getDuracionPrimerasVisitas(reg):
# Obtenemos duraciones de primeras dos paginas (index se considera num sesion)
duraciones1, duraciones2, sesiones = getDuraciones(reg)
tam = len(duraciones1)
# Realizamos histogramas de duración de visitas de la duracion de las primeras paginas
plt.hist(x=duraciones1, bins=max(duraciones1) + 1, color='#F2AB6D', rwidth=0.85)
plt.ylabel("Frecuencia")
plt.xlabel("Tiempo de primera visita")
plt.title("Histograma: ")
plt.show()
# Obtenemos estadísticos habituales de ambas y los mostramos
media1, desv1, mediana1, moda1, minimo1, maximo1 = getEstadisticas(duraciones1, tam)
media2, desv2, mediana2, moda2, minimo2, maximo2 = getEstadisticas(duraciones2, tam)
datos = "{} -\n Media: {}. Desviación estándar: {}. Mediana: {}. Moda: {}. Mínimo: {}. Maximo: {}"
messagebox.showinfo(message=datos.format("PRIMERA PÁGINA - ", media1, desv1, mediana1, moda1, minimo1, maximo1),
title="Estadísticas Primeras Páginas: ")
messagebox.showinfo(message=datos.format("SEGUNDA PÁGINA - ", media2, desv2, mediana2, moda2, minimo2, maximo2),
title="Estadísticas Segundas Páginas: ")
def getDuraciones(reg):
duraciones1 = []
duraciones2 = []
sesiones = []
tam = len(reg)
for i in range(tam): # Si quedan hasta 2 sesiones mas se podran obtener las dos visitas de paginas
if tam - 2 > i:
r1 = reg[i]
r2 = reg[i + 1]
r3 = reg[i + 2]
sesion = r1.ID_Sesion
if sesion not in sesiones: # Si no ha sido introducido ya, si hay hasta 3 acceso en esa sesion, agrega las duraciones
if r1.ID_Sesion == r3.ID_Sesion:
duraciones1.append(r2.Marca_Tiempo - r1.Marca_Tiempo)
duraciones2.append(r3.Marca_Tiempo - r2.Marca_Tiempo)
sesiones.append(sesion)
return duraciones1, duraciones2, sesiones
def getEstadisticas(duraciones, tam):
# Obtenemos media, desviacion y mediana
media = sum(duraciones) / tam
desv = stat.stdev(duraciones)
mediana = stat.median(duraciones)
# Obtenemos moda, minimo y maximo
moda = stat.mode(duraciones)
minimo = min(duraciones)
maximo = max(duraciones)
return media, desv, mediana, moda, minimo, maximo
...@@ -16,7 +16,7 @@ from VentanaAbrir import VentanaAbrir ...@@ -16,7 +16,7 @@ from VentanaAbrir import VentanaAbrir
from About_GUI import VentanaAbout from About_GUI import VentanaAbout
from TransfCesta import TransformarCesta 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",
...@@ -105,7 +105,7 @@ def fRelVisDur(): ...@@ -105,7 +105,7 @@ def fRelVisDur():
def fDurVis(): def fDurVis():
if len(REG) > 0: if len(REG) > 0:
return #getDuracionPrimerasVisitas(REG) getDuracionPrimerasVisitas(REG)
def barraMenu(ventana): def barraMenu(ventana):
# DEFINIR BARRA DE MENÚ DE LA APLICACION: # DEFINIR BARRA DE MENÚ DE LA APLICACION:
......
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