def index(request): product_list = Product.objects.all()[1:3] usuario = User.objects.all()[0] product_list_2, metadatos_recomendacion = recomendaciones_conocimiento.recomendacion_por_reglas(usuario) template = loader.get_template("recomendador/index.html") context = {"product_list": product_list_2, "metadatos_usuario": metadatos_recomendacion} return HttpResponse(template.render(context, request))
def index_busqueda(request): #Se generan las lista que se van a generar en el index usuario_activo = request.user usuario = Users.objects.get(pk=usuario_activo.id) nombre_usuario = usuario.Nombre + " " + usuario.Apellido_p # Carrusel de resultados de busqueda texto_busqueda = "" if request.GET.get('busqueda_main') is not None: texto_busqueda = request.GET.get('busqueda_main') productos_busqueda = busqueda.coincidencia(texto_busqueda) productoExtra = Product_extras() for cada_producto in productos_busqueda: productoExtra = productoExtra.calculaPromedio(cada_producto) # Carrusel de productos que te han gustado productos_calificados = recomendaciones_contenido.productos_calificados(usuario) for productoEvaluado in productos_calificados: productoExtra = productoExtra.calculaPromedio(productoEvaluado) # Carrusel de productos similares productos_similares = recomendaciones_contenido.recomendacion_similares(usuario) for productoEvaluado in productos_similares: productoExtra = productoExtra.calculaPromedio(productoEvaluado) # Recomendaciones por perfil productos_perfil, metadatos_recomendacion4 = recomendaciones_conocimiento.recomendacion_por_reglas(usuario) for productoEvaluado in productos_perfil: productoExtra = productoExtra.calculaPromedio(productoEvaluado) # Recomendaciones productos_fc productos_fc = recomendaciones_filtrado_colaborativo.recomendaciones_fc(usuario) for productoEvaluado in productos_fc: productoExtra = productoExtra.calculaPromedio(productoEvaluado) # Recomendaciones hibridas recomendaciones_predictivas = recomendaciones_filtrado_colaborativo.recomendaciones_hibridas(productos_fc) for productoEvaluado in recomendaciones_predictivas: productoExtra = productoExtra.calculaPromedio(productoEvaluado) template = loader.get_template('products/index.html') perfil_usuario = recomendaciones_conocimiento.perfil_usuario(usuario) context = { 'nombre_usuario_saludo': nombre_usuario, 'perfil': perfil_usuario, 'productos_busqueda': productos_busqueda, 'productos_calificados': productos_calificados, 'productos_similares': productos_similares, 'productos_perfil': productos_perfil, 'productos_predictivos': recomendaciones_predictivas, 'productos_fc': productos_fc } return HttpResponse(template.render(context, request))
def index(request): product_list = Product.objects.all()[1:3] usuario = User.objects.all()[0] product_list_2, metadatos_recomendacion = recomendaciones_conocimiento.recomendacion_por_reglas(usuario) template = loader.get_template('recomendador/index.html') context = { 'product_list': product_list_2, 'metadatos_usuario': metadatos_recomendacion } return HttpResponse(template.render(context, request))
def index_busqueda(request): texto_busqueda = "" if request.GET.get('busqueda_main') is not None: texto_busqueda = request.GET.get('busqueda_main') print texto_busqueda if request.user.is_authenticated(): usuario = Users.objects.get(pk=request.user.id) nombre_usuario = usuario.Nombre + " " + usuario.Apellido_p else: usuario = Users.objects.all()[3] nombre_usuario = "Usuario anónimo" # Carrusel de resultados de busqueda productos_busqueda = busqueda.coincidencia(texto_busqueda) # Carrusel de productos que te han gustado calificaciones = Calificaciones.objects.filter( users=usuario.id).values_list('product_id', flat=True) print "lista:: ", calificaciones productos_calificados = Product.objects.filter(pk__in=list(calificaciones)) # Carrusel de productos similares productos_similares = clasificador_k_vecinos.k_vecinos_lista_productos( productos_calificados, 15) # Recomendaciones por perfil productos_perfil, metadatos_recomendacion4 = recomendaciones_conocimiento.recomendacion_por_reglas( usuario) # Recomendaciones de usuarios similares recomendaciones_usuarios_similares = clasificador_k_vecinos.recomendaciones_usuarios_similares( usuario) # Recomendaciones productos_fc productos_fc = clasificador_k_vecinos.recomendaciones_fc(usuario) template = loader.get_template('products/index.html') perfil_usuario = recomendaciones_conocimiento.perfil_usuario(usuario) context = { 'nombre_usuario_saludo': nombre_usuario, 'perfil': perfil_usuario, 'productos_busqueda': productos_busqueda[:50], 'productos_calificados': productos_calificados, 'productos_similares': productos_similares[:50], 'productos_perfil': productos_perfil[:50], 'productos_contenido': recomendaciones_usuarios_similares[:50], 'productos_fc': productos_fc[:50] } return HttpResponse(template.render(context, request))
def index_busqueda(request): texto_busqueda = "" if request.GET.get('busqueda_main') is not None: texto_busqueda = request.GET.get('busqueda_main') print texto_busqueda if request.user.is_authenticated(): usuario = Users.objects.get(pk=request.user.id) nombre_usuario = usuario.Nombre + " " + usuario.Apellido_p else: usuario = Users.objects.all()[3] nombre_usuario = "Usuario anónimo" # Carrusel de resultados de busqueda productos_busqueda = busqueda.coincidencia(texto_busqueda) # Carrusel de productos que te han gustado calificaciones = Calificaciones.objects.filter(users=usuario.id).values_list('product_id', flat=True) print "lista:: ", calificaciones productos_calificados = Product.objects.filter(pk__in=list(calificaciones)) # Carrusel de productos similares productos_similares = clasificador_k_vecinos.k_vecinos_lista_productos(productos_calificados, 15) # Recomendaciones por perfil productos_perfil, metadatos_recomendacion4 = recomendaciones_conocimiento.recomendacion_por_reglas(usuario) # Recomendaciones de usuarios similares recomendaciones_usuarios_similares = clasificador_k_vecinos.recomendaciones_usuarios_similares(usuario) # Recomendaciones productos_fc productos_fc = clasificador_k_vecinos.recomendaciones_fc(usuario) template = loader.get_template('products/index.html') perfil_usuario = recomendaciones_conocimiento.perfil_usuario(usuario) context = { 'nombre_usuario_saludo': nombre_usuario, 'perfil': perfil_usuario, 'productos_busqueda': productos_busqueda[:50], 'productos_calificados': productos_calificados, 'productos_similares': productos_similares[:50], 'productos_perfil': productos_perfil[:50], 'productos_contenido': recomendaciones_usuarios_similares[:50], 'productos_fc': productos_fc[:50] } return HttpResponse(template.render(context, request))
def index(request): # Esta parte inserta calificaciones de manera aleatoria de los productos especificados # productosx = Product.objects.all() # usuariosx = Users.objects.all()[:10] # for productox in productosx : # for usuariox in usuariosx : # try: # calificacionE = Calificaciones.objects.get(product=productox, users=usuariox) # except Calificaciones.DoesNotExist: # comentario = "" # valorCalif = random.randint(0, 5) # calificacionE = Calificaciones(product=productox, users=usuariox, calificacion_producto=valorCalif, comentario=comentario) # calificacionE.save() #Aqui debería proponerse un algoritmo que calcule la calificacion promedio de cada producto #de manera diaria - Si el promedio es el del dia no se recalculará. #En caso de que el promedio sea del dia anterior se recalculará el promedio de manera automática #en cuanto se cargue esta página #Evitando de esta manera que el servidor se sobrecargue y el promedio este en tiempo real #Se generan las lista que se van a generar en el index product_list = Product.objects.all()[1:3] usuario_activo = request.user usuario = Users.objects.get(pk=usuario_activo.id) latest_productos_list_new, metadatos_recomendacion = recomendaciones_conocimiento.recomendacion_por_reglas( usuario) latest_productos_list = Product.objects.all()[:20] for productoEvaluado in latest_productos_list: suma = 0.0 n = 1 try: calificacionesExistentes = Calificaciones.objects.filter( product=productoEvaluado) for calificacionExistente in calificacionesExistentes: suma = suma + calificacionExistente.calificacion_producto n = n + 1 calificacion_promedio = suma / (n - 1) if calificacion_promedio >= 0 and calificacion_promedio <= 0.5: calificacion_promedio = 0.50 if calificacion_promedio > 0.5 and calificacion_promedio <= 1.0: calificacion_promedio = 1.00 if calificacion_promedio > 1.0 and calificacion_promedio <= 1.5: calificacion_promedio = 1.50 if calificacion_promedio > 1.5 and calificacion_promedio <= 2.0: calificacion_promedio = 2.00 if calificacion_promedio > 2.0 and calificacion_promedio <= 2.5: calificacion_promedio = 2.50 if calificacion_promedio > 2.5 and calificacion_promedio <= 3.0: calificacion_promedio = 3.00 if calificacion_promedio > 3.0 and calificacion_promedio <= 3.5: calificacion_promedio = 3.50 if calificacion_promedio > 3.5 and calificacion_promedio <= 4.0: calificacion_promedio = 4.00 if calificacion_promedio > 4.0 and calificacion_promedio <= 4.5: calificacion_promedio = 4.50 if calificacion_promedio > 4.5 and calificacion_promedio <= 5.0: calificacion_promedio = 5.00 except Calificaciones.DoesNotExist: calificacionesExistentes = None calificacion_promedio = 0.0 try: productoExtra = Product_extras.objects.get( Product=productoEvaluado) productoExtra.Calificacion_promedio = calificacion_promedio except Product_extras.DoesNotExist: productoExtra = Product_extras( Product=productoEvaluado, Calificacion_promedio=calificacion_promedio, Precio=0.00, Descuento=0.00) productoExtra.save() usuario2 = Users.objects.all()[0] latest_productos_list2, metadatos_recomendacion2 = recomendaciones_conocimiento.recomendacion_por_reglas( usuario2) usuario3 = Users.objects.all()[0] latest_productos_list3, metadatos_recomendacion3 = recomendaciones_conocimiento.recomendacion_por_reglas( usuario3) usuario4 = Users.objects.all()[0] latest_productos_list4, metadatos_recomendacion4 = recomendaciones_conocimiento.recomendacion_por_reglas( usuario4) template = loader.get_template('products/index.html') context = { 'latest_productos_list': latest_productos_list[:100], 'metadatos_usuario': metadatos_recomendacion, 'latest_productos_list2': latest_productos_list2[:100], 'metadatos_usuario2': metadatos_recomendacion2, 'latest_productos_list3': latest_productos_list3[:100], 'metadatos_usuario3': metadatos_recomendacion3, 'latest_productos_list4': latest_productos_list4[:100], 'metadatos_usuario4': metadatos_recomendacion4 } return HttpResponse(template.render(context, request))
def detail(request, product_id): #Buscar Lista de Productos recomendados para el usuario valorCalificacion = 0 usuario_activo = request.user usuario = Users.objects.get(pk=usuario_activo.id) product_list = Product.objects.all()[1:3] latest_productos_list, metadatos_recomendacion = recomendaciones_conocimiento.recomendacion_por_reglas( usuario) #Busca el producto seleccionado Producto = get_object_or_404(Product, pk=product_id) #Busca objeto de Producto con calificacion para el usuario try: calificacionExistente = Calificaciones.objects.get(product=Producto, users=usuario) except Calificaciones.DoesNotExist: comentario = "" valorCalificacion = 0 calificacionExistente = Calificaciones( product=Producto, users=usuario, calificacion_producto=valorCalificacion, comentario=comentario) if request.POST.get('comentario') is not None: comentario = request.POST.get('comentario') # comentario = unicode(comentario, "utf-8") calificacionExistente.calificacion_producto = valorCalificacion calificacionExistente.comentario = comentario calificacionExistente.save() else: if calificacionExistente.comentario is not None: comentario = calificacionExistente.comentario else: comentario = "" if request.POST.get('calificacion') is not None: valorCalificacion = request.POST.get('calificacion') # calificacionExistente = Calificacionx(productx=Producto, userx=usuario, calificacion_producto=valorCalificacion, comentario=comentario) calificacionExistente.calificacion_producto = valorCalificacion calificacionExistente.comentario = comentario calificacionExistente.save() else: if calificacionExistente.calificacion_producto is not None: valorCalificacion = calificacionExistente.calificacion_producto else: valorCalificacion = 0 #Busca comentarios del mismo Producto por otros usuarios try: comentariosExistentes = Calificaciones.objects.filter( product=Producto).exclude( users=usuario).order_by('-fecha').select_related('users') except Calificaciones.DoesNotExist: comentariosExistentes = None #Construcción del template y envío de Respuesta template = loader.get_template('products/detail.html') context = { 'latest_productos_list': latest_productos_list[:150], 'metadatos_usuario': metadatos_recomendacion, 'Producto': Producto, 'id_user': usuario_activo.id, 'calificacionExistente': calificacionExistente, 'comentario': comentario, 'valorCalificacion': valorCalificacion, 'comentariosExistentes': comentariosExistentes } return HttpResponse(template.render(context, request))
def recomendaciones_xti(usuario): # Se generan las lista que se van a presentar en el index nombre_usuario = ( usuario.Nombre.encode("utf-8").lower().capitalize() + " " + usuario.Apellido_p.encode("utf-8").lower().capitalize() ) ciudad_usuario = usuario.Ciudad.encode("utf-8").lower().capitalize() contacto_usuario = usuario.Contacto.encode("utf-8").lower() listas_productos = [] configuracion_layout = Listas_recomendadores_config.objects.all().order_by("secuencia") for cada_c in configuracion_layout: titulo = cada_c.titulo_interfaz algoritmo = cada_c.algoritmo_recomendador longitud = cada_c.longitud_max parametro = cada_c.param if algoritmo == "calificados": # Carrusel de productos que te han gustado productos_calificados = recomendaciones_contenido.productos_calificados_rec(usuario, longitud) if len(productos_calificados) > 0: listas_productos.append({"titulo": titulo, "productos": productos_calificados}) else: print "No hay productos en Productos que has calificado" elif algoritmo == "comentados_ciudad": # Recomendaciones lo mas comentado en tu ciudad productos_comentados_ciudad = busqueda.productos_comentados_ciudad(longitud, ciudad_usuario) if len(productos_comentados_ciudad) > 0: listas_productos.append({"titulo": titulo, "productos": productos_comentados_ciudad}) else: print "No hay productos en Lo más comentado en tu ciudad" elif algoritmo == "reglas_perfil": # Recomendaciones por perfil productos_perfil = recomendaciones_conocimiento.recomendacion_por_reglas(usuario) if len(productos_perfil) > 0: listas_productos.append({"titulo": titulo, "productos": productos_perfil}) else: print "No hay productos en Recomendaciones a tu pefil" elif algoritmo == "nuevos": # Alianzas nuevas en tu ciudad productos_nuevos = busqueda.productos_nuevos(longitud, parametro) if len(productos_nuevos) > 0: listas_productos.append({"titulo": titulo, "productos": productos_nuevos}) else: print "No hay productos en Nuevas alianzas X-ti" elif algoritmo == "usuario_similar_demografico": # Recomendaciones usuarios socialmente similares productos_usuarios_similares = recomendaciones_contenido.recomendaciones_usuarios_similares( usuario, longitud ) if len(productos_usuarios_similares) > 0: listas_productos.append({"titulo": titulo, "productos": productos_usuarios_similares}) else: print "No hay productos en Usuarios como tú recomiendan" elif algoritmo == "productos_similares_gustado": # Carrusel de productos similares productos_similares = recomendaciones_contenido.recomendacion_similares(usuario, longitud) if len(productos_similares) > 0: listas_productos.append({"titulo": titulo, "productos": productos_similares}) else: print "No hay productos en Productos similares a los que te han gustado" elif algoritmo == "filtrado_colaborativo": # Recomendaciones productos_fc productos_fc = recomendaciones_filtrado_colaborativo.recomendaciones_fc(usuario, longitud) if len(productos_fc) > 0: listas_productos.append({"titulo": titulo, "productos": productos_fc}) else: print "No hay productos en Usuarios con gustos similares les han gustado" elif algoritmo == "hibrido": # Recomendaciones hibridas recomendaciones_predictivas = recomendaciones_filtrado_colaborativo.recomendaciones_hibridas( productos_fc, longitud ) if len(recomendaciones_predictivas) > 0: listas_productos.append({"titulo": titulo, "productos": recomendaciones_predictivas}) else: print "No hay productos en Productos interesantes para tí" return listas_productos
def recomendaciones_xti(usuario): #Se generan las lista que se van a presentar en el index nombre_usuario = usuario.Nombre.encode("utf-8").lower().capitalize( ) + " " + usuario.Apellido_p.encode("utf-8").lower().capitalize() ciudad_usuario = usuario.Ciudad.encode("utf-8").lower().capitalize() contacto_usuario = usuario.Contacto.encode("utf-8").lower() listas_productos = [] # Carrusel de productos que te han gustado productos_calificados = recomendaciones_contenido.productos_calificados( usuario) if len(productos_calificados) > 0: listas_productos.append({ 'titulo': 'Productos que has calificado', 'productos': productos_calificados }) else: print "No hay productos en Productos que has calificado" # Recomendaciones lo mas comentado en tu ciudad productos_comentados_ciudad = busqueda.productos_comentados_ciudad( 15, ciudad_usuario) if len(productos_comentados_ciudad) > 0: listas_productos.append({ 'titulo': 'Lo más comentado en tu ciudad', 'productos': productos_comentados_ciudad }) else: print "No hay productos en Lo más comentado en tu ciudad" # Recomendaciones por perfil productos_perfil = recomendaciones_conocimiento.recomendacion_por_reglas( usuario) if len(productos_perfil) > 0: listas_productos.append({ 'titulo': 'Recomendaciones a tu pefil', 'productos': productos_perfil }) else: print "No hay productos en Recomendaciones a tu pefil" # Alianzas nuevas en tu ciudad productos_nuevos = busqueda.productos_nuevos(15, 90) if len(productos_nuevos) > 0: listas_productos.append({ 'titulo': 'Nuevas alianzas X-ti', 'productos': productos_nuevos }) else: print "No hay productos en Nuevas alianzas X-ti" # Recomendaciones usuarios socialmente similares productos_usuarios_similares = recomendaciones_contenido.recomendaciones_usuarios_similares( usuario, 15) if len(productos_usuarios_similares) > 0: listas_productos.append({ 'titulo': 'Usuarios como tú recomiendan', 'productos': productos_usuarios_similares }) else: print "No hay productos en Usuarios como tú recomiendan" # Carrusel de productos similares productos_similares = recomendaciones_contenido.recomendacion_similares( usuario) if len(productos_similares) > 0: listas_productos.append({ 'titulo': 'Productos similares a los que te han gustado', 'productos': productos_similares }) else: print "No hay productos en Productos similares a los que te han gustado" # Recomendaciones productos_fc productos_fc = recomendaciones_filtrado_colaborativo.recomendaciones_fc( usuario) if len(productos_fc) > 0: listas_productos.append({ 'titulo': 'Usuarios con gustos similares les han gustado', 'productos': productos_fc }) else: print "No hay productos en Usuarios con gustos similares les han gustado" # Recomendaciones hibridas recomendaciones_predictivas = recomendaciones_filtrado_colaborativo.recomendaciones_hibridas( productos_fc) if len(recomendaciones_predictivas) > 0: listas_productos.append({ 'titulo': 'Productos interesantes para tí', 'productos': recomendaciones_predictivas }) else: print "No hay productos en Productos interesantes para tí" return listas_productos
def recomendaciones_xti(usuario): #Se generan las lista que se van a presentar en el index nombre_usuario = usuario.Nombre.encode("utf-8").lower().capitalize() + " " + usuario.Apellido_p.encode("utf-8").lower().capitalize() ciudad_usuario = usuario.Ciudad.encode("utf-8").lower().capitalize() contacto_usuario = usuario.Contacto.encode("utf-8").lower() listas_productos = [] # Carrusel de productos que te han gustado productos_calificados = recomendaciones_contenido.productos_calificados(usuario) if len(productos_calificados) > 0: listas_productos.append({'titulo': 'Productos que has calificado', 'productos': productos_calificados}) else: print "No hay productos en Productos que has calificado" # Recomendaciones lo mas comentado en tu ciudad productos_comentados_ciudad = busqueda.productos_comentados_ciudad(15, ciudad_usuario) if len(productos_comentados_ciudad) > 0: listas_productos.append({'titulo': 'Lo más comentado en tu ciudad', 'productos': productos_comentados_ciudad}) else: print "No hay productos en Lo más comentado en tu ciudad" # Recomendaciones por perfil productos_perfil = recomendaciones_conocimiento.recomendacion_por_reglas(usuario) if len(productos_perfil) > 0: listas_productos.append({'titulo': 'Recomendaciones a tu pefil', 'productos': productos_perfil}) else: print "No hay productos en Recomendaciones a tu pefil" # Alianzas nuevas en tu ciudad productos_nuevos = busqueda.productos_nuevos(15, 90) if len(productos_nuevos) > 0: listas_productos.append({'titulo': 'Nuevas alianzas X-ti', 'productos': productos_nuevos}) else: print "No hay productos en Nuevas alianzas X-ti" # Recomendaciones usuarios socialmente similares productos_usuarios_similares = recomendaciones_contenido.recomendaciones_usuarios_similares(usuario, 15) if len(productos_usuarios_similares) > 0: listas_productos.append({'titulo': 'Usuarios como tú recomiendan', 'productos': productos_usuarios_similares}) else: print "No hay productos en Usuarios como tú recomiendan" # Carrusel de productos similares productos_similares = recomendaciones_contenido.recomendacion_similares(usuario) if len(productos_similares) > 0: listas_productos.append({'titulo': 'Productos similares a los que te han gustado', 'productos': productos_similares}) else: print "No hay productos en Productos similares a los que te han gustado" # Recomendaciones productos_fc productos_fc = recomendaciones_filtrado_colaborativo.recomendaciones_fc(usuario) if len(productos_fc) > 0: listas_productos.append({'titulo': 'Usuarios con gustos similares les han gustado', 'productos': productos_fc}) else: print "No hay productos en Usuarios con gustos similares les han gustado" # Recomendaciones hibridas recomendaciones_predictivas = recomendaciones_filtrado_colaborativo.recomendaciones_hibridas(productos_fc) if len(recomendaciones_predictivas) > 0: listas_productos.append({'titulo': 'Productos interesantes para tí', 'productos': recomendaciones_predictivas}) else: print "No hay productos en Productos interesantes para tí" return listas_productos
def index(request): #Se generan las lista que se van a generar en el index usuario_activo = request.user usuario = Users.objects.get(pk=usuario_activo.id) nombre_usuario = usuario.Nombre + " " + usuario.Apellido_p ## populate comments # se insertan 10,000 comentarios de 1000 usuarios sobre 1000 productos, 10 por usuario # se colectan 1000 usuarios al azar #todos_usuarios = Users.objects.order_by('?')[:1000] #todos_productos = Product.objects.order_by('?')[:1000] #calificaciones_por_usuario = 10 #for cada_usuario in todos_usuarios: # print "HEY: Ho ", cada_usuario.Nombre # for i in range(0, calificaciones_por_usuario): # valorCalificacion = random.randint(1, 5) # producto_calificar = todos_productos[random.randint(0, len(todos_productos)-1)] # comentario = comentarios_predefinidos[valorCalificacion] # calificacionExistente = Calificaciones(product=producto_calificar, users=cada_usuario, calificacion_producto=valorCalificacion, comentario=comentario) # print "cali: ", calificacionExistente # calificacionExistente.save() #valorCalificacion = request.POST.get('calificacion') #calificacionExistente.calificacion_producto=valorCalificacion #calificacionExistente.comentario=comentario #calificacionExistente.save() # Carrusel de resultados de busqueda texto_busqueda = "" if request.GET.get('busqueda_main') is not None: texto_busqueda = request.GET.get('busqueda_main') productos_busqueda = busqueda.coincidencia(texto_busqueda) productoExtra = Product_extras() for cada_producto in productos_busqueda: productoExtra = productoExtra.calculaPromedio(cada_producto) # Carrusel de productos que te han gustado productos_calificados = recomendaciones_contenido.productos_calificados(usuario) for productoEvaluado in productos_calificados: productoExtra = productoExtra.calculaPromedio(productoEvaluado) # Carrusel de productos similares productos_similares = recomendaciones_contenido.recomendacion_similares(usuario) for productoEvaluado in productos_similares: productoExtra = productoExtra.calculaPromedio(productoEvaluado) # Recomendaciones por perfil productos_perfil, metadatos_recomendacion4 = recomendaciones_conocimiento.recomendacion_por_reglas(usuario) for productoEvaluado in productos_perfil: productoExtra = productoExtra.calculaPromedio(productoEvaluado) # Recomendaciones productos_fc productos_fc = recomendaciones_filtrado_colaborativo.recomendaciones_fc(usuario) for productoEvaluado in productos_fc: productoExtra = productoExtra.calculaPromedio(productoEvaluado) # Recomendaciones hibridas recomendaciones_predictivas = recomendaciones_filtrado_colaborativo.recomendaciones_hibridas(productos_fc) for productoEvaluado in recomendaciones_predictivas: productoExtra = productoExtra.calculaPromedio(productoEvaluado) template = loader.get_template('products/index.html') perfil_usuario = recomendaciones_conocimiento.perfil_usuario(usuario) context = { 'nombre_usuario_saludo': nombre_usuario, 'perfil': perfil_usuario, 'productos_busqueda': productos_busqueda, 'productos_calificados': productos_calificados, 'productos_similares': productos_similares, 'productos_perfil': productos_perfil, 'productos_predictivos': recomendaciones_predictivas, 'productos_fc': productos_fc } return HttpResponse(template.render(context, request))
def detail(request, product_id): #Buscar Lista de Productos recomendados para el usuario valorCalificacion = 0 usuario_activo = request.user usuario = Users.objects.get(pk=usuario_activo.id) latest_productos_list, metadatos_recomendacion = recomendaciones_conocimiento.recomendacion_por_reglas(usuario) latest_productos_list = recomendaciones_contenido.k_vecinos_productos(product_id, 10) #Busca el producto seleccionado Producto = get_object_or_404(Product, pk=product_id) #Busca objeto de Producto con calificacion para el usuario try: calificacionExistente = Calificaciones.objects.get(product=Producto, users=usuario) except Calificaciones.DoesNotExist: comentario = "" valorCalificacion = 0 calificacionExistente = Calificaciones(product=Producto, users=usuario, calificacion_producto=valorCalificacion, comentario=comentario) if request.POST.get('comentario') is not None: comentario = request.POST.get('comentario') calificacionExistente.calificacion_producto=valorCalificacion calificacionExistente.comentario=comentario calificacionExistente.save() else: if calificacionExistente.comentario is not None: comentario = calificacionExistente.comentario else: comentario = "" if request.POST.get('calificacion') is not None: valorCalificacion = request.POST.get('calificacion') calificacionExistente.calificacion_producto=valorCalificacion calificacionExistente.comentario=comentario calificacionExistente.save() else: if calificacionExistente.calificacion_producto is not None: valorCalificacion = calificacionExistente.calificacion_producto else: valorCalificacion = 0 #Busca comentarios del mismo Producto por otros usuarios try: comentariosExistentes = Calificaciones.objects.filter(product=Producto).order_by('-fecha').select_related('users')[:20] except Calificaciones.DoesNotExist: comentariosExistentes = None #Construccion del template y envio de Respuesta template = loader.get_template('products/detail.html') context = { 'latest_productos_list': latest_productos_list[:100], 'metadatos_usuario': metadatos_recomendacion, 'Producto': Producto, 'id_user': usuario_activo.id, 'calificacionExistente': calificacionExistente, 'comentario': comentario, 'valorCalificacion': valorCalificacion, 'comentariosExistentes': comentariosExistentes } return HttpResponse(template.render(context, request))
def detail(request, product_id): #Buscar Lista de Productos recomendados para el usuario valorCalificacion = 0 usuario = Users.objects.get(pk=request.user.id) product_list = Product.objects.all()[1:3] #Busca el producto seleccionado Producto = get_object_or_404(Product, pk=product_id) latest_productos_list, metadatos_recomendacion = recomendaciones_conocimiento.recomendacion_por_reglas(usuario) latest_productos_list = clasificador_k_vecinos.k_vecinos_productos(product_id, 20) print "In views detail: product count: ", len(latest_productos_list) #Busca objeto de Producto con calificacion para el usuario try: calificacionExistente = Calificaciones.objects.get(product=Producto, users=usuario) except Calificaciones.DoesNotExist: comentario = "" valorCalificacion = 0 calificacionExistente = Calificaciones(product=Producto, users=usuario, calificacion_producto=valorCalificacion, comentario=comentario) if request.POST.get('comentario') is not None: comentario = request.POST.get('comentario') # comentario = unicode(comentario, "utf-8") calificacionExistente.calificacion_producto=valorCalificacion calificacionExistente.comentario=comentario calificacionExistente.save() else: if calificacionExistente.comentario is not None: comentario = calificacionExistente.comentario else: comentario = "" if request.POST.get('calificacion') is not None: valorCalificacion = request.POST.get('calificacion') # calificacionExistente = Calificacionx(productx=Producto, userx=usuario, calificacion_producto=valorCalificacion, comentario=comentario) calificacionExistente.calificacion_producto=valorCalificacion calificacionExistente.comentario=comentario calificacionExistente.save() else: if calificacionExistente.calificacion_producto is not None: valorCalificacion = calificacionExistente.calificacion_producto else: valorCalificacion = 0 #Construcción del template y envío de Respuesta template = loader.get_template('products/detail.html') context = { 'latest_productos_list': latest_productos_list[:100], 'metadatos_usuario': metadatos_recomendacion, 'Producto': Producto, 'id_user': usuario.id, 'calificacionExistente': calificacionExistente, 'comentario': comentario, 'valorCalificacion': valorCalificacion } return HttpResponse(template.render(context, request))
def index(request): # Esta parte inserta calificaciones de manera aleatoria de los productos especificados # productosx = Product.objects.all() # usuariosx = Users.objects.all()[:10] # for productox in productosx : # for usuariox in usuariosx : # try: # calificacionE = Calificaciones.objects.get(product=productox, users=usuariox) # except Calificaciones.DoesNotExist: # comentario = "" # valorCalif = random.randint(0, 5) # calificacionE = Calificaciones(product=productox, users=usuariox, calificacion_producto=valorCalif, comentario=comentario) # calificacionE.save() #Aqui debería proponerse un algoritmo que calcule la calificacion promedio de cada producto #de manera diaria - Si el promedio es el del dia no se recalculará. #En caso de que el promedio sea del dia anterior se recalculará el promedio de manera automática #en cuanto se cargue esta página #Evitando de esta manera que el servidor se sobrecargue y el promedio este en tiempo real #Se generan las lista que se van a generar en el index product_list = Product.objects.all()[1:3] usuario_activo = request.user usuario = Users.objects.get(pk=usuario_activo.id) latest_productos_list_new, metadatos_recomendacion = recomendaciones_conocimiento.recomendacion_por_reglas(usuario) latest_productos_list = Product.objects.all()[:20] for productoEvaluado in latest_productos_list: suma = 0.0 n = 1 try: calificacionesExistentes = Calificaciones.objects.filter(product=productoEvaluado) for calificacionExistente in calificacionesExistentes: suma = suma + calificacionExistente.calificacion_producto n = n + 1 calificacion_promedio = suma/(n-1) if calificacion_promedio >= 0 and calificacion_promedio <= 0.5: calificacion_promedio = 0.50 if calificacion_promedio > 0.5 and calificacion_promedio <= 1.0: calificacion_promedio = 1.00 if calificacion_promedio > 1.0 and calificacion_promedio <= 1.5: calificacion_promedio = 1.50 if calificacion_promedio > 1.5 and calificacion_promedio <= 2.0: calificacion_promedio = 2.00 if calificacion_promedio > 2.0 and calificacion_promedio <= 2.5: calificacion_promedio = 2.50 if calificacion_promedio > 2.5 and calificacion_promedio <= 3.0: calificacion_promedio = 3.00 if calificacion_promedio > 3.0 and calificacion_promedio <= 3.5: calificacion_promedio = 3.50 if calificacion_promedio > 3.5 and calificacion_promedio <= 4.0: calificacion_promedio = 4.00 if calificacion_promedio > 4.0 and calificacion_promedio <= 4.5: calificacion_promedio = 4.50 if calificacion_promedio > 4.5 and calificacion_promedio <= 5.0: calificacion_promedio = 5.00 except Calificaciones.DoesNotExist: calificacionesExistentes = None calificacion_promedio = 0.0 try: productoExtra = Product_extras.objects.get(Product=productoEvaluado); productoExtra.Calificacion_promedio = calificacion_promedio except Product_extras.DoesNotExist: productoExtra = Product_extras(Product=productoEvaluado, Calificacion_promedio=calificacion_promedio, Precio=0.00, Descuento=0.00); productoExtra.save() usuario2 = Users.objects.all()[0] latest_productos_list2, metadatos_recomendacion2 = recomendaciones_conocimiento.recomendacion_por_reglas(usuario2) usuario3 = Users.objects.all()[0] latest_productos_list3, metadatos_recomendacion3 = recomendaciones_conocimiento.recomendacion_por_reglas(usuario3) usuario4 = Users.objects.all()[0] latest_productos_list4, metadatos_recomendacion4 = recomendaciones_conocimiento.recomendacion_por_reglas(usuario4) template = loader.get_template('products/index.html') context = { 'latest_productos_list': latest_productos_list[:100], 'metadatos_usuario': metadatos_recomendacion, 'latest_productos_list2': latest_productos_list2[:100], 'metadatos_usuario2': metadatos_recomendacion2, 'latest_productos_list3': latest_productos_list3[:100], 'metadatos_usuario3': metadatos_recomendacion3, 'latest_productos_list4': latest_productos_list4[:100], 'metadatos_usuario4': metadatos_recomendacion4 } return HttpResponse(template.render(context, request))
def detail(request, product_id): #Buscar Lista de Productos recomendados para el usuario valorCalificacion = 0 usuario = Users.objects.get(pk=request.user.id) product_list = Product.objects.all()[1:3] #Busca el producto seleccionado Producto = get_object_or_404(Product, pk=product_id) latest_productos_list, metadatos_recomendacion = recomendaciones_conocimiento.recomendacion_por_reglas( usuario) latest_productos_list = clasificador_k_vecinos.k_vecinos_productos( product_id, 20) print "In views detail: product count: ", len(latest_productos_list) #Busca objeto de Producto con calificacion para el usuario try: calificacionExistente = Calificaciones.objects.get(product=Producto, users=usuario) except Calificaciones.DoesNotExist: comentario = "" valorCalificacion = 0 calificacionExistente = Calificaciones( product=Producto, users=usuario, calificacion_producto=valorCalificacion, comentario=comentario) if request.POST.get('comentario') is not None: comentario = request.POST.get('comentario') # comentario = unicode(comentario, "utf-8") calificacionExistente.calificacion_producto = valorCalificacion calificacionExistente.comentario = comentario calificacionExistente.save() else: if calificacionExistente.comentario is not None: comentario = calificacionExistente.comentario else: comentario = "" if request.POST.get('calificacion') is not None: valorCalificacion = request.POST.get('calificacion') # calificacionExistente = Calificacionx(productx=Producto, userx=usuario, calificacion_producto=valorCalificacion, comentario=comentario) calificacionExistente.calificacion_producto = valorCalificacion calificacionExistente.comentario = comentario calificacionExistente.save() else: if calificacionExistente.calificacion_producto is not None: valorCalificacion = calificacionExistente.calificacion_producto else: valorCalificacion = 0 #Construcción del template y envío de Respuesta template = loader.get_template('products/detail.html') context = { 'latest_productos_list': latest_productos_list[:100], 'metadatos_usuario': metadatos_recomendacion, 'Producto': Producto, 'id_user': usuario.id, 'calificacionExistente': calificacionExistente, 'comentario': comentario, 'valorCalificacion': valorCalificacion } return HttpResponse(template.render(context, request))
def recomendaciones_xti(usuario): #Se generan las lista que se van a presentar en el index nombre_usuario = usuario.Nombre.encode("utf-8").lower().capitalize( ) + " " + usuario.Apellido_p.encode("utf-8").lower().capitalize() ciudad_usuario = usuario.Ciudad.encode("utf-8").lower().capitalize() contacto_usuario = usuario.Contacto.encode("utf-8").lower() listas_productos = [] configuracion_layout = Listas_recomendadores_config.objects.all().order_by( 'secuencia') for cada_c in configuracion_layout: titulo = cada_c.titulo_interfaz algoritmo = cada_c.algoritmo_recomendador longitud = cada_c.longitud_max parametro = cada_c.param if algoritmo == "calificados": # Carrusel de productos que te han gustado productos_calificados = recomendaciones_contenido.productos_calificados_rec( usuario, longitud) if len(productos_calificados) > 0: listas_productos.append({ 'titulo': titulo, 'productos': productos_calificados }) else: print "No hay productos en Productos que has calificado" elif algoritmo == "comentados_ciudad": # Recomendaciones lo mas comentado en tu ciudad productos_comentados_ciudad = busqueda.productos_comentados_ciudad( longitud, ciudad_usuario) if len(productos_comentados_ciudad) > 0: listas_productos.append({ 'titulo': titulo, 'productos': productos_comentados_ciudad }) else: print "No hay productos en Lo más comentado en tu ciudad" elif algoritmo == "reglas_perfil": # Recomendaciones por perfil productos_perfil = recomendaciones_conocimiento.recomendacion_por_reglas( usuario) if len(productos_perfil) > 0: listas_productos.append({ 'titulo': titulo, 'productos': productos_perfil }) else: print "No hay productos en Recomendaciones a tu pefil" elif algoritmo == "nuevos": # Alianzas nuevas en tu ciudad productos_nuevos = busqueda.productos_nuevos(longitud, parametro) if len(productos_nuevos) > 0: listas_productos.append({ 'titulo': titulo, 'productos': productos_nuevos }) else: print "No hay productos en Nuevas alianzas X-ti" elif algoritmo == "usuario_similar_demografico": # Recomendaciones usuarios socialmente similares productos_usuarios_similares = recomendaciones_contenido.recomendaciones_usuarios_similares( usuario, longitud) if len(productos_usuarios_similares) > 0: listas_productos.append({ 'titulo': titulo, 'productos': productos_usuarios_similares }) else: print "No hay productos en Usuarios como tú recomiendan" elif algoritmo == "productos_similares_gustado": # Carrusel de productos similares productos_similares = recomendaciones_contenido.recomendacion_similares( usuario, longitud) if len(productos_similares) > 0: listas_productos.append({ 'titulo': titulo, 'productos': productos_similares }) else: print "No hay productos en Productos similares a los que te han gustado" elif algoritmo == "filtrado_colaborativo": # Recomendaciones productos_fc productos_fc = recomendaciones_filtrado_colaborativo.recomendaciones_fc( usuario, longitud) if len(productos_fc) > 0: listas_productos.append({ 'titulo': titulo, 'productos': productos_fc }) else: print "No hay productos en Usuarios con gustos similares les han gustado" elif algoritmo == "hibrido": # Recomendaciones hibridas recomendaciones_predictivas = recomendaciones_filtrado_colaborativo.recomendaciones_hibridas( productos_fc, longitud) if len(recomendaciones_predictivas) > 0: listas_productos.append({ 'titulo': titulo, 'productos': recomendaciones_predictivas }) else: print "No hay productos en Productos interesantes para tí" return listas_productos