4Geeks logo
4Geeks logo
Sobre Nosotros

Catálogo de contenidos

Para los geeks autodidactas, este es nuestro extenso catálogo de contenido con todos los materiales y tutoriales que hemos desarrollado hasta el día de hoy.

Tiene sentido comenzar a aprender leyendo y viendo videos sobre los fundamentos y cómo funcionan las cosas.

Full-Stack Software Developer

Data Science and Machine Learning - 16 wks

Buscar en lecciones

Aprendizaje social y en vivo

La forma más eficiente de aprender: Únete a una cohorte con compañeros, transmisiones en vivo, sesiones improvisadas de codificación, tutorías en vivo con expertos reales y mantenga la motivación.

← Volver a Proyectos

Continúa aprendiendo gratis sobre:

Proyecto Tutorial de K Vecinos Mas Cercanos

Meta

Tutoriales y ejercicios de 4Geeks Coding Projects para personas que están aprendiendo a codificar o mejorando sus habilidades de codificación

Dificultad

beginner

Repositorio

No disponible

Video

No disponible

Demo en vivo

No disponible

Duración promedio

2 hrs

Tecnologías

  • Al leer la lección de teoría de k-nearest neighbors, también leemos una introducción a los sistemas de recomendación. En este proyecto guiado, aprenderemos cómo construir un sistema de recomendación de películas simple utilizando el algoritmo de k-nearest neighbors.

  • Este proyecto contiene 2 conjuntos de datos con características diferentes para las mismas 5000 películas, por lo que debes fusionarlos.

🌱 Cómo iniciar este proyecto

Esta vez no se hará Fork, tómate un tiempo para leer estas instrucciones:

  1. Crear un nuevo repositorio basado en el proyecto de Machine Learing haciendo clic aquí.
  2. Abre el repositorio creado recientemente en Gitpod usando la extensión del botón de Gitpod.
  3. Una vez que Gitpod VSCode haya terminado de abrirse, comienza tu proyecto siguiendo las instrucciones a continuación.

🚛 Cómo entregar este proyecto

Una vez que hayas terminado de resolver los ejercicios, asegúrate de confirmar tus cambios, hazle "push" al fork de tu repositorio y ve a 4Geeks.com para subir el enlace del repositorio.

📝 Instrucciones

Sistema de recomendación de películas

¿Podemos predecir qué películas tendrán una calificación alta, incluso si no son un éxito comercial?

Este conjunto de datos es un subconjunto de la enorme API de base de datos de películas de TMDB, que contiene solo 5000 películas del número total.

Enlaces de conjuntos de datos:

tmdb_5000_movies: https://raw.githubusercontent.com/4GeeksAcademy/k-nearest-neighbors-project-tutorial/main/tmdb_5000_movies.csv

tmdb_5000_credits zip file to download: https://github.com/4GeeksAcademy/k-nearest-neighbors-project-tutorial/blob/main/tmdb_5000_credits.zip

Paso 1:

Importa las bibliotecas necesarias e importa el conjunto de datos.

1import pandas as pd 2import numpy as np 3import matplotlib.pyplot as plt 4import seaborn as sns 5%matplotlib inline 6 7movies = pd.read_csv('../data/tmdb_5000_movies.csv') 8credits = pd.read_csv('../data/tmdb_5000_credits.csv')

Paso 2:

Explora el conjunto de datos mirando las primeras filas y el número de filas y columnas.

1movies.head() 2 3movies.shape 4 5credits.head() 6 7credits.shape

Paso 3:

Combina ambos marcos de datos en la columna 'título'.

1movies = movies.merge(credits, on='title')

Paso 4:

Trabajaremos únicamente con las siguientes columnas:

-movie_id

-title

-overview

-genres

-keywords

-cast

-crew

1movies = movies[['movie_id','title','overview','genres','keywords','cast','crew']]

Paso 5:

Como solo faltan 3 valores en la columna "resumen", suéltelos.

1movies.isnull().sum() 2 3movies.dropna(inplace = True)

Paso 6:

Como puedes ver, hay algunas columnas con formato json. Con el siguiente código, puedes ver qué géneros se incluyen en la primera fila.

1movies.iloc[0].genres 2 3>>>>[{"id": 28, "name": "Action"}, {"id": 12, "name": "Adventure"}, {"id": 14, "name": "Fantasy"}, {"id": 878, "name": "Science Fiction"}]

Comenzaremos a convertir estas columnas usando una función para obtener solo los géneros, sin formato json. Solo estamos interesados ​​en los valores de las claves de 'nombre'.

1import ast 2 3def convert(obj): 4 L = [] 5 for i in ast.literal_eval(obj): 6 L.append(i['name']) 7 return L
1movies.dropna(inplace = True)
1movies['genres'] = movies['genres'].apply(convert) 2movies.head()

Repite el proceso para la columna "palabras clave".

1movies['keywords'] = movies['keywords'].apply(convert)

Para la columna 'cast' crearemos una función nueva pero similar. Esta vez limitaremos el número de elementos a tres.

1def convert3(obj): 2 L = [] 3 count = 0 4 for i in ast.literal_eval(obj): 5 if count < 3: 6 L.append(i['name']) 7 count +=1 8 return L
1movies['cast'] = movies['cast'].apply(convert3)

Puedes ver cómo va nuestro conjunto de datos:

1movies.head(1)

Las únicas columnas que quedan por modificar son 'crew' (equipo) y overview (resumen). Para el 'crew', crearemos una nueva función que permita obtener solo los valores de las claves 'name' (nombre) para cuyo 'job'(trabajo) el valor sea 'Director'. En resumen, estamos tratando de obtener el nombre del director.

1def fetch_director(obj): 2 L = [] 3 for i in ast.literal_eval(obj): 4 if i['job'] == 'Director': 5 L.append(i['name']) 6 break 7 return L
1movies['crew'] = movies['crew'].apply(fetch_director)

Finalmente, veamos la primera fila de la columna 'resumen':

1movies.overview[0]

Para la columna 'overview', la convertiremos en una lista usando el método 'split()'.

1movies['overview'] = movies['overview'].apply(lambda x : x.split())

Paso 7:

Para que el sistema de recomendación no se confunda, por ejemplo, entre 'Jennifer Aniston' y 'Jennifer Conelly', quitaremos los espacios entre palabras con función.

1def collapse(L): 2 L1 = [] 3 for i in L: 4 L1.append(i.replace(" ","")) 5 return L1

Ahora apliquemos nuestra función a las columnas 'genres' (géneros), 'cast' (elenco), 'crew' (equipo) y 'keywords' (palabras clave).

1movies['cast'] = movies['cast'].apply(collapse) 2movies['crew'] = movies['crew'].apply(collapse) 3movies['genres'] = movies['genres'].apply(collapse) 4movies['keywords'] = movies['keywords'].apply(collapse)

Paso 8:

Reduciremos nuestro conjunto de datos combinando todas nuestras columnas convertidas anteriores en una sola columna llamada 'tags' (que crearemos).

Esta columna ahora tendrá TODOS los elementos separados por comas, pero ignoraremos las comas usando lambda x :" ".join(x).

1movies['tags'] = movies['overview']+movies['genres']+movies['keywords']+movies['cast']+movies['crew']
1new_df = movies[['movie_id','title','tags']] 2 3new_df['tags'] = new_df['tags'].apply(lambda x :" ".join(x))

Mira cómo se ve ahora mostrando el primer tag:

1new_df['tags'][0] 2 3>>>>'In the 22nd century, a paraplegic Marine is dispatched to the moon Pandora on a unique mission, but becomes torn between following orders and protecting an alien civilization. Action Adventure Fantasy ScienceFiction cultureclash future spacewar spacecolony society spacetravel futuristic romance space alien tribe alienplanet cgi marine soldier battle loveaffair antiwar powerrelations mindandsoul 3d SamWorthington ZoeSaldana SigourneyWeaver JamesCameron'

Paso 9:

Usaremos el algoritmo KNN para construir el sistema de recomendación. Antes de ingresar al modelo, procedamos con la vectorización de texto que ya aprendiste en la lección de PNL.

1from sklearn.feature_extraction.text import CountVectorizer 2cv = CountVectorizer(max_features=5000 ,stop_words='english')
1vectors = cv.fit_transform(new_df['tags']).toarray()
1vectors.shape

Si deseas conocer las 5000 palabras más utilizadas, puede usar cv.get_feature_names().

Paso 10:

Encontremos la similitud de coseno entre las películas. Continúa y ejecuta las siguientes líneas de código en tu proyecto para ver los resultados.

1from sklearn.metrics.pairwise import cosine_similarity 2cosine_similarity(vectors).shape
1similarity = cosine_similarity(vectors)
1similarity[0]
1sorted(list(enumerate(similarity[0])),reverse =True , key = lambda x:x[1])[1:6]

Paso 11:

Finalmente, crea una función de recomendación basada en cosine_similarity. Esta función debería recomendar las 5 películas más similares.

1def recommend(movie): 2 movie_index = new_df[new_df['title'] == movie].index[0] ##fetching the movie index 3 distances = similarity[movie_index] 4 movie_list = sorted(list(enumerate( distances)),reverse =True , key = lambda x:x[1])[1:6] 5 6 for i in movie_list: 7 print(new_df.iloc[i[0]].title)

Paso 12:

Comprueba tu sistema de recomendación introduciendo una película. Corre a ver las recomendaciones.

1recommend('choose a movie here')

Paso 13:

Como siempre, usa notebook para experimentar y asegúrate de obtener los resultados que deseas.

Usa tu archivo app.py para guardar tus pasos definidos, canalizaciones o funciones en el orden correcto.

En tu archivo README escribe un breve resumen.

Guía de soluciones:

https://github.com/4GeeksAcademy/k-nearest-neighbors-project-tutorial/blob/main/solution_guide.ipynb

Meta

Tutoriales y ejercicios de 4Geeks Coding Projects para personas que están aprendiendo a codificar o mejorando sus habilidades de codificación

Dificultad

beginner

Repositorio

No disponible

Video

No disponible

Demo en vivo

No disponible

Duración promedio

2 hrs