<jupyter_start><jupyter_text>Proyecto 03 - Sistemas de Recomendación Dataset: STEAM**Recuerda descargar el dataset de [aquí](https://github.com/kang205/SASRec). Son dos archivos, uno de calificaciones y otro de información sobre los juegos.**En este notebook te dejamos unas celdas para que puedas comenzar a trabajar con este dataset. Sin embargo, **deberás** modificarlas para hacer un mejor manejo de datos. Algunas cosas a las que deberás prestar atención (tal vez no a todas):1. Tipos de datos: elige tipos de datos apropiados para cada columna.2. Descartar columnas poco informativas.3. Guardar en memoria datasets preprocesados para no tener que repetir código que tarde en correr. Exploración de datosDedícale un buen tiempo a hacer un Análisis Exploratorio de Datos. Elige preguntas que creas que puedas responder con este dataset. Por ejemplo, ¿cuáles son los juegos más populares?¿Y los menos populares? Filtro ColaborativoDeberás implementar un sistema de recomendación colaborativo para este dataset. Ten en cuenta:1. Haz todas las transformaciones de datos que consideres necesarias. Justifica.1. Evalúa de forma apropiada sus resultados. Justifica la métrica elegida.1. Elige un modelo benchmark y compara tus resultados con este modelo.1. Optimiza los hiperparámetros de tu modelo.Puedes implementar un filtro colaborativo a partir de la similitud coseno o índice de Jaccard. ¿Puedes utilizar los métodos de la librería Surprise? Si no es así, busca implementaciones (por ejemplo, nuevas librerías) que sean apropiadas.Para comenzar a trabajar, puedes asumir que cada entrada es un enlace entre una persona usuaria y un item, **independientemente** de si la crítica es buena o mala.  Para pensar, investigar y, opcionalmente, implementar1. ¿Cómo harías para ponerle un valor a la calificación?1. ¿Cómo harías para agregar contenido? Por ejemplo, cuentas con el género, precio, fecha de lanzamiento y más información de los juegos.1. ¿Hay algo que te gustaría investigar o probar? **¡Tómate tiempo para investigar y leer mucho!**<jupyter_code>import gzip
import pandas as pd

def parse(path):
    g = gzip.open(path, 'r')
    for l in g:
        yield eval(l)<jupyter_output><empty_output><jupyter_text>**Reviews**<jupyter_code>contador = 0
data_reviews = []
# Vamos a guardar una de cada 10 reviews para no llenar la memoria RAM. Si pones n = 3, 
# abrira uno de cada tres, y asi.
n = 10
for l in parse('steam_reviews.json.gz'):
    if contador%n == 0:
        data_reviews.append(l)
    else:
        pass
    contador += 1

data_reviews = pd.DataFrame(data_reviews)
data_reviews.head()
data_reviews.isna().sum()<jupyter_output><empty_output><jupyter_text>**Games**<jupyter_code>data_games = []
for l in parse('steam_games.json.gz'):
    data_games.append(l)
data_games = pd.DataFrame(data_games)
data_games.head()
data_games[data_games.id == '35140']<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.07177363699102829, 'fraction_numerical': 0.00966183574879227, 'mean_word_length': 5.0020703933747415, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 13, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '350088', 'license': 'MIT', 'n_tokens_mistral': 997, 'n_tokens_neox': 978, 'n_words': 363, 'path': 'DS_Proyecto_03_SR_Pablo_Cruz.ipynb', 'repo_name': 'picruz/Proyecto3Acamica', 'size': '2898'}