Laboratorio: Introducción a los Sistemas de Recomendación

Objetivo

El objetivo de este laboratorio es aprender los conceptos básicos de los sistemas de recomendación y cómo implementarlos utilizando Python. En este laboratorio, construirás un sistema de recomendación simple que sugiere productos a los usuarios en función de una entrada de texto. Utilizarás herramientas como Redis para procesar datos y hacer recomendaciones. Además, aprenderás a utilizar la API de Fake Store para obtener datos de productos de ejemplo. Al finalizar el laboratorio, podrás mejorar el sistema de recomendación agregando más funcionalidades y refinando el algoritmo de recomendación. También podrás implementar el sistema de recomendación en un sistema web utilizando Flask para permitir a los usuarios realizar consultas y recibir recomendaciones de productos en tiempo real.

Conceptos clave

  • Sistemas de recomendación: Los sistemas de recomendación son algoritmos que sugieren elementos a los usuarios en función de sus preferencias y comportamientos pasados. Estos sistemas son ampliamente utilizados en plataformas en línea para recomendar productos, películas, música, libros y otros elementos a los usuarios.

  • Redis: Redis es una base de datos en memoria de código abierto que se utiliza para almacenar y procesar datos en tiempo real. Redis es ampliamente utilizado en aplicaciones web y sistemas de recomendación para almacenar y recuperar datos de forma eficiente.

  • API de Fake Store: La API de Fake Store es una API de demostración que proporciona datos de productos ficticios para propósitos de demostración. La API de Fake Store se utiliza en este laboratorio para obtener datos de productos de ejemplo.

  • Flask: Flask es un framework de desarrollo web ligero y flexible para Python. Flask se utiliza en este laboratorio para implementar un sistema de recomendación en un sistema web y permitir a los usuarios realizar consultas y recibir recomendaciones de productos en tiempo real.

  • Procesamiento de lenguaje natural (NLP): El procesamiento de lenguaje natural es una rama de la inteligencia artificial que se ocupa de la interacción entre las computadoras y el lenguaje humano. En este laboratorio, se utiliza el procesamiento de lenguaje natural para analizar y comparar la entrada de texto y los títulos de los productos.

  • Docker: Docker es una plataforma de código abierto que permite a los desarrolladores empaquetar, enviar y ejecutar aplicaciones en contenedores. Docker se utiliza en este laboratorio para instalar Redis en un contenedor y configurar un entorno de desarrollo.

  • Docker Compose: Docker Compose es una herramienta que permite definir y ejecutar aplicaciones Docker multicontenedor. Docker Compose se utiliza en este laboratorio para configurar un contenedor de Redis y facilitar la instalación y configuración de Redis en un entorno de desarrollo.

Requisitos previos

En este laboratorio utilizamos la versión de python 3.12.4, el servidor redis será instalado en un contenedor de docker, por lo que necesitarás tener instalado Docker y Docker Compose en tu máquina. Además, necesitarás tener instaladas las bibliotecas redis y requests en tu entorno de Python. Puedes instalar las bibliotecas utilizando los siguientes comandos:

Creación de un entorno virtual

python3 -m venv env
source env/bin/activate

Instalación de Redis

pip install redis

Además, necesitarás una conexión a Internet para acceder a la API de Fake Store y obtener datos de productos de ejemplo.

Instalación de Redis

pip install requests

Introducción

Los sistemas de recomendación son algoritmos que sugieren elementos a los usuarios en función de sus preferencias y comportamientos pasados. Estos sistemas son ampliamente utilizados en plataformas en línea para recomendar productos, películas, música, libros y otros elementos a los usuarios. Los sistemas de recomendación pueden ser de varios tipos, como basados en contenido, filtrado colaborativo, filtrado basado en la popularidad, etc.

En este laboratorio, construirás un sistema de recomendación simple que sugiere productos a los usuarios en función de una entrada de texto. Utilizarás la API de Fake Store para obtener datos de productos de ejemplo y Redis para procesar datos y hacer recomendaciones.

Paso 0: Instalación de Redis con docker compose.

Para instalar Redis en tu máquina, puedes utilizar Docker Compose para configurar un contenedor de Redis. A continuación, se muestra un ejemplo de cómo instalar Redis con Docker Compose:

  1. Crear un archivo llamado docker-compose.yml y agregar el siguiente código:
services:
  redis:
    image: redis
    container_name: redis
    ports:
      - "6379:6379"
  1. Ejecutar el siguiente comando para iniciar el contenedor de Redis:
docker compose up --build -d

Con estos pasos, habrás configurado un contenedor de Redis en tu máquina y podrás utilizar Redis para almacenar y procesar datos en tu sistema de recomendación.

Paso 1: Obtener datos de productos de la API de Fake Store

En este paso, utilizarás la API de Fake Store para obtener datos de productos de ejemplo. La API de Fake Store proporciona datos de productos ficticios para propósitos de demostración. Puedes acceder a la API de Fake Store en la siguiente URL: https://fakestoreapi.com/.

Para obtener datos de productos de la API de Fake Store, puedes utilizar la biblioteca requests en Python. A continuación, se muestra un ejemplo de cómo obtener datos de productos de la API de Fake Store:

Para probar la obtención de datos de productos de la API de Fake Store, implementamos un script de Python que obtiene los datos de productos de la API y muestra los títulos de los productos en la consola.

Creamos un archivo llamado get_products.py y agregamos el siguiente código:

import requests

url = "https://fakestoreapi.com/products"
response = requests.get(url)
products = response.json()

for product in products:
    print(product["title"])

En este ejemplo, se utiliza la biblioteca requests para enviar una solicitud GET a la URL de la API de Fake Store y se obtienen los datos de productos en formato JSON. Luego, se imprime el título de cada producto en la consola.

Paso 2: Procesar datos de productos y construir un sistema de recomendación

En este paso, procesarás los datos de productos obtenidos de la API de Fake Store y construirás un sistema de recomendación simple que sugiere productos a los usuarios en función de una entrada de texto. Utilizarás Redis para almacenar y procesar los datos de productos y hacer recomendaciones.

Para construir el sistema de recomendación, puedes seguir los siguientes pasos:

  1. Obtener datos de productos de la API de Fake Store.

  2. Procesar los datos de productos y almacenarlos en Redis.

  3. Implementar un algoritmo de recomendación simple que sugiere productos en función de una entrada de texto.

A continuación, se muestra un ejemplo de cómo procesar los datos de productos y construir un sistema de recomendación simple, creamos un archivo llamado recommendation_system.py y agregamos el siguiente código:

import redis
import requests

# Conectar a Redis
r = redis.Redis(host='localhost', port=6379, db=0)

# Obtener datos de productos de la API de Fake Store
url = "https://fakestoreapi.com/products"
response = requests.get(url)
products = response.json()

# Procesar los datos de productos y almacenarlos en Redis
for product in products:
    r.set(product["id"], product["title"])

# Implementar un algoritmo de recomendación simple
def recommend_products(input_text):
    recommendations = []
    for key in r.keys():
        title = r.get(key).decode('utf-8')
        if input_text.lower() in title.lower():
            recommendations.append(title)
    return recommendations

# Hacer recomendaciones basadas en una entrada de texto
input_text = "shirt"
recommendations = recommend_products(input_text)
print("Recomendaciones:")
for recommendation in recommendations:
    print(recommendation)

En este ejemplo, se utiliza Redis para almacenar los datos de productos obtenidos de la API de Fake Store. Luego, se implementa un algoritmo de recomendación simple que sugiere productos en función de una entrada de texto. El algoritmo busca coincidencias entre la entrada de texto y los títulos de los productos almacenados en Redis y devuelve una lista de recomendaciones.

Ejecución del código

Para ejecutar el código, puedes guardar el código en un archivo Python (por ejemplo, recommendation_system.py) y ejecutarlo desde la línea de comandos:

python recommendation_system.py

Paso 3: Mejorar el sistema de recomendación

En este paso, mejorarás el sistema de recomendación agregando más funcionalidades y refinando el algoritmo de recomendación. Puedes probar diferentes enfoques y técnicas para mejorar la precisión y relevancia de las recomendaciones. Algunas ideas para mejorar el sistema de recomendación incluyen:

  • Utilizar técnicas de procesamiento de lenguaje natural (NLP) para analizar y comparar la entrada
  • Implementar un algoritmo de filtrado colaborativo para hacer recomendaciones basadas en el comportamiento de los usuarios
  • Utilizar técnicas de aprendizaje automático para mejorar la precisión de las recomendaciones

Puedes experimentar con diferentes enfoques y técnicas para mejorar el sistema de recomendación y hacer recomendaciones más precisas y relevantes.

Aplicación de mejoras

Para aplicar mejoras al sistema de recomendación, puedes probar diferentes enfoques y técnicas para mejorar la precisión y relevancia de las recomendaciones. Por ejemplo, puedes utilizar técnicas de procesamiento de lenguaje natural (NLP) para analizar y comparar la entrada, implementar un algoritmo de filtrado colaborativo para hacer recomendaciones basadas en el comportamiento de los usuarios, o utilizar técnicas de aprendizaje automático para mejorar la precisión de las recomendaciones.

A continuación, se muestra un ejemplo de cómo mejorar el sistema de recomendación utilizando técnicas de procesamiento de lenguaje natural (NLP) para analizar y comparar la entrada, creamos un archivo llamado improved_recommendation_system.py y agregamos el siguiente código:

import redis
import requests
import nltk
from nltk.tokenize import word_tokenize

# Descargar recursos de NLTK
nltk.download('punkt')

# Conectar a Redis
r = redis.Redis(host='localhost', port=6379, db=0)

# Obtener datos de productos de la API de Fake Store
url = "https://fakestoreapi.com/products"
response = requests.get(url)
products = response.json()

# Procesar los datos de productos y almacenarlos en Redis
for product in products:
    r.set(product["id"], product["title"])

# Implementar un algoritmo de recomendación mejorado
def recommend_products(input_text):
    recommendations = []
    input_tokens = word_tokenize(input_text.lower())
    for key in r.keys():
        title = r.get(key).decode('utf-8')
        title_tokens = word_tokenize(title.lower())
        if any(token in title_tokens for token in input_tokens):
            recommendations.append(title)
    return recommendations

# Hacer recomendaciones basadas en una entrada de texto
input_text = "blue shirt"
recommendations = recommend_products(input_text)
print("Recomendaciones:")
for recommendation in recommendations:
    print(recommendation)

En este ejemplo, se utiliza la biblioteca nltk para tokenizar la entrada de texto y los títulos de los productos. Luego, se compara si alguno de los tokens de la entrada de texto está presente en los títulos de los productos almacenados en Redis. Si se encuentra una coincidencia, se agrega el producto a la lista de recomendaciones.

Ejecución del código

Para ejecutar el código, puedes guardar el código en un archivo Python (por ejemplo, improved_recommendation_system.py) y ejecutarlo desde la línea de comandos:

python improved_recommendation_system.py

Implementación de recomendaciones en un sistema web

Para implementar recomendaciones en un sistema web, puedes utilizar un marco de desarrollo web como Flask para crear una aplicación web que permita a los usuarios ingresar una consulta y recibir recomendaciones de productos en función de la consulta. A continuación, se muestra un ejemplo de cómo implementar recomendaciones en un sistema web utilizando Flask:

  1. Instalar Flask
pip install Flask
  1. Crear una aplicación web con Flask

Creamos un archivo llamado app.py y agregamos el siguiente código:

from flask import Flask, request, jsonify
import redis
import nltk
from nltk.tokenize import word_tokenize

# Descargar recursos de NLTK
nltk.download('punkt')

# Conectar a Redis
r = redis.Redis(host='localhost', port=6379, db=0)

app = Flask(__name__)

# Implementar un algoritmo de recomendación mejorado

def recommend_products(input_text):
    recommendations = []
    input_tokens = word_tokenize(input_text.lower())
    for key in r.keys():
        title = r.get(key).decode('utf-8')
        title_tokens = word_tokenize(title.lower())
        if any(token in title_tokens for token in input_tokens):
            recommendations.append(title)
    return recommendations

@app.route('/recommend', methods=['POST'])
def get_recommendations():
    data = request.get_json()
    input_text = data['input_text']
    recommendations = recommend_products(input_text)
    return jsonify(recommendations)

if __name__ == '__main__':
    app.run(debug=True)

En este ejemplo, se utiliza Flask para crear una aplicación web que permite a los usuarios enviar una consulta a través de una solicitud POST y recibir recomendaciones de productos en función de la consulta. La aplicación web utiliza el algoritmo de recomendación mejorado implementado anteriormente para generar recomendaciones.

Ejecución de la aplicación web

Para ejecutar la aplicación web, puedes guardar el código en un archivo Python (por ejemplo, app.py) y ejecutarlo desde la línea de comandos:

python app.py

Luego, puedes enviar una solicitud POST a la URL de la aplicación web con la consulta de entrada para recibir recomendaciones de productos. Por ejemplo, puedes utilizar la herramienta curl para enviar una solicitud POST a la URL de la aplicación web:

curl -X POST http://localhost:5000/recommend -H "Content-Type: application/json" -d '{"input_text": "blue shirt"}'

La aplicación web responderá con una lista de recomendaciones de productos basadas en la consulta de entrada.

Probar la aplicación con Thunder Client

Para probar la aplicación web con Thunder Client, puedes instalar la extensión Thunder Client en Visual Studio Code y enviar una solicitud POST a la URL de la aplicación web con la consulta de entrada. A continuación, se muestra un ejemplo de cómo probar la aplicación web con Thunder Client:

  1. Instalar la extensión Thunder Client en Visual Studio Code.

  2. Abrir Thunder Client y crear una nueva solicitud POST con la URL de la aplicación web y la consulta de entrada.

  3. Enviar la solicitud POST y recibir las recomendaciones de productos en la respuesta.

Para ello debes utilizar la siguiente URL: http://localhost:5000/recommend

Ejemplo

{
    "input_text": "blue shirt"
}

Se espera la salida de recomendaciones de productos basadas en la consulta de entrada.

Con Thunder Client, puedes probar la aplicación web y verificar si las recomendaciones de productos son precisas y relevantes.

Reto

Para el reto de este laboratorio, puedes mejorar el sistema de recomendación agregando más funcionalidades y refinando el algoritmo de recomendación. Puedes probar diferentes enfoques y técnicas para mejorar la precisión y relevancia de las recomendaciones. Algunas ideas para mejorar el sistema de recomendación incluyen:

  • Utilizar técnicas de procesamiento de lenguaje natural (NLP) para analizar y comparar la entrada

  • Implementar un algoritmo de filtrado colaborativo para hacer recomendaciones basadas en el comportamiento de los usuarios

  • Utilizar técnicas de aprendizaje automático para mejorar la precisión de las recomendaciones

Puedes experimentar con diferentes enfoques y técnicas para mejorar el sistema de recomendación y hacer recomendaciones más precisas y relevantes.

Tambien puedes implementar una aplicación de frontend para el sistema de recomendación utilizando un framework de desarrollo web como React o Angular. La aplicación de frontend puede permitir a los usuarios ingresar una consulta y recibir recomendaciones de productos en tiempo real.

Agregar .gitignore

Para evitar subir archivos innecesarios a tu repositorio, puedes agregar un archivo .gitignore para ignorar archivos y directorios específicos. A continuución se muestra un ejemplo de un archivo .gitignore para ignorar archivos y directorios generados por Python y Visual Studio Code:

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# Virtual environment
venv/
ENV/
env/
.venv/
.env/
env.bak/
venv.bak/

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/
docs/_static/
docs/_templates/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

Agregar README.md

Para documentar tu proyecto y proporcionar instrucciones de uso, puedes agregar un archivo README.md con información detallada sobre el sistema de recomendación y cómo utilizarlo. A continuación se muestra un ejemplo de un archivo README.md para un sistema de recomendación:

# Sistema de Recomendación

Este es un sistema de recomendación simple que sugiere productos a los usuarios en función de una entrada de texto. El sistema utiliza la API de Fake Store para obtener datos de productos de ejemplo y Redis para procesar datos y hacer recomendaciones.

## Requisitos previos

Para ejecutar el sistema de recomendación, necesitarás tener instalado Docker y Docker Compose en tu entorno. Puedes instalarlos siguiendo las instrucciones de la documentación oficial de Docker.

## Ejecución del sistema de recomendación

1. Clona el repositorio:

bash
git clone https://github.com/statick88/SistemaRecomendacion.git

2. Instalación de bibliotecas desde el archivo requirements.txt

Para instalar las bibliotecas necesarias para ejecutar el sistema de recomendación, puedes utilizar el archivo **requirements.txt** que contiene una lista de las bibliotecas y sus versiones necesarias. Puedes instalar las bibliotecas utilizando el siguiente comando:

bash
pip install -r requirements.txt

3. Levantar el servidor Redis con Docker Compose

Para iniciar el contenedor de Redis, puedes utilizar Docker Compose para configurar el contenedor de Redis. Puedes ejecutar el siguiente comando para iniciar el contenedor de Redis:

bash
docker compose up --build -d

4. Ejecutar el sistema de recomendación

Par ejecutar el sistema de recomendación existen 3 formas en este repositorio:

- **recommendation_system.py**: Este script de Python se puede ejecutar para obtener recomendaciones de productos en función de una consulta de entrada. Puedes ejecutar el script utilizando el siguiente comando:

bash
python recommendation_system.py 

- **improve_recommendations_system.py**: Este script de Python se puede ejecutar para mejorar el sistema de recomendación utilizando la API de Fake Store. Puedes ejecutar el script utilizando el siguiente comando:

bash
python improve_recommendations_system.py

- **app.py**: Este script de Python contiene el código de la aplicación web que proporciona recomendaciones de productos en función de una consulta de entrada. Puedes ejecutar el script utilizando el siguiente comando:

bash
python app.py

5. Acceder a la aplicación web para recibir recomendaciones de productos

Una vez que hayas ejecutado el script **app.py**, puedes acceder a la aplicación web para recibir recomendaciones de productos en función de una consulta de entrada.

La url de la aplicación web es: [http://localhost:5000/recommend](http://localhost:5000/recommend)

Ejemplo de solicitud POST:

json
{
    "input_text": "blue shirt"
}

Con estos pasos, habrás ejecutado el sistema de recomendación y accedido a la aplicación web para recibir recomendaciones de productos en función de la consulta de entrada.

El archivo requirements.txt contendrá una lista de las bibliotecas y sus versiones necesarias para ejecutar el sistema de recomendación. Puedes utilizar el archivo requirements.txt para instalar las bibliotecas necesarias en un entorno virtual de Python.

Inicializamos el repositorio git

Para inicializar un repositorio git en tu proyecto, puedes ejecutar los siguientes comandos en la terminal:

git init
git add .
git commit -m "Initial commit"

Con estos comandos, habrás inicializado un repositorio git en tu proyecto y realizado el primer commit con los archivos y código fuente del sistema de recomendación.

Recursos

Conclusión

En este laboratorio, aprendiste los conceptos básicos de los sistemas de recomendación y cómo implementarlos utilizando Python. Construiste un sistema de recomendación simple que sugiere productos a los usuarios en función de una entrada de texto. Utilizaste herramientas como Redis para procesar datos y hacer recomendaciones. Además, aprendiste a utilizar la API de Fake Store para obtener datos de productos de ejemplo.

Durante el laboratorio, exploraste diferentes mejoras para el sistema de recomendación, como utilizar técnicas de procesamiento de lenguaje natural (NLP), implementar algoritmos de filtrado colaborativo y aplicar técnicas de aprendizaje automático. Estas mejoras pueden ayudar a mejorar la precisión y relevancia de las recomendaciones.

Además, consideraste la posibilidad de implementar una aplicación de frontend utilizando un framework de desarrollo web como React o Angular. Esto permitiría a los usuarios interactuar con el sistema de recomendación de manera más intuitiva y recibir recomendaciones en tiempo real.

En resumen, este laboratorio te brindó una introducción práctica a los sistemas de recomendación y te proporcionó las herramientas y conocimientos necesarios para construir y mejorar un sistema de recomendación utilizando Python.

¡Ahora estás listo para aplicar estos conceptos y técnicas en tus propios proyectos de recomendación!