DEV Community

Cover image for Let's Build a Movie Recommendation App Using OpenAI & Python!
Pavan Belagatti
Pavan Belagatti

Posted on

Let's Build a Movie Recommendation App Using OpenAI & Python!

In today's digital age, personalization is key. Whether you're browsing an online store or searching for a movie to watch, tailored recommendations enhance user experience. In this tutorial, we'll embark on a journey to create a simple movie recommendation app using OpenAI, Python and SingleStore's Notebook feature. Harness the power of cutting-edge language models to provide movie suggestions based on user interests.

movie recommendation app

Let's Get Started!

Pre-Requisites:

  • Free SingleStore cloud account so you can access the Notebook feature
  • Python 3.x installed
  • OpenAI's API key. Where can you find your API Key? Here

We will be using SingleStore Notebook feature as our playground to execute all our commands inside. I'll show you how in the tutorial:)

What is SingleStore Notebooks?

Notebooks have become increasingly popular in the data science community as they provide an efficient way to explore, analyze and visualize data, making it easier to communicate insights and results. SingleStore's Notebook feature is based on the popular Jupyter Notebook, which is widely used in data science and machine learning communities.

One interesting fact about SingleStore Notebooks is that, they allow users to query SingleStore's distributed SQL database directly from within the notebook interface.

Let's get started with our tutorial,
Once you signup, go to the Notebooks tab and create a blank Notebook.
singlestore notebook

Create a blank Notebook.
blank notebook

Libraries:

openai - to interface with OpenAI's API
pandas - for data manipulation
numpy - for numerical operations

First, you'll need to install the libraries if you haven't already:



pip install openai pandas numpy


Enter fullscreen mode Exit fullscreen mode

Like I said above, we will add this command in our SingleStore Notebook's playground. Also, make sure you run the cell every time you add any new command in your Notebook.

Install numpy

Steps:

1. Import Libraries



import openai
import pandas as pd
import numpy as np


Enter fullscreen mode Exit fullscreen mode

ss playground

2. Load Data

Let's load movie names



import csv
import random

movie_names = ["The Godfather", "Casablanca", "Star Wars: A New Hope", "Inception", "Pulp Fiction", "Schindler's List", "Gone with the Wind",
               "Shawshank Redemption", "The Matrix", "Jaws", "Jurassic Park", "Citizen Kane", "Avatar", "The Dark Knight", "Forrest Gump",
               "Fight Club", "Titanic", "E.T. the Extra-Terrestrial", "2001: A Space Odyssey", "The Silence of the Lambs", "Goodfellas",
               "To Kill a Mockingbird", "The Wizard of Oz", "Saving Private Ryan", "The Lord of the Rings: The Fellowship of the Ring",
               "Terminator 2: Judgment Day", "One Flew Over the Cuckoo's Nest", "The Sixth Sense", "Psycho", "The Social Network", "Apocalypse Now",
               "Rear Window", "Braveheart", "The Lion King", "The Shining", "Toy Story", "Memento", "La La Land", "The Departed", "Black Panther",
               "The Avengers", "Indiana Jones: Raiders of the Lost Ark", "Rocky", "Amélie", "Alien", "The Good, the Bad and the Ugly",
               "The Big Lebowski", "Inglourious Basterds", "The Princess Bride", "The Graduate"]

with open('movies.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(["MovieName"])
    for movie in movie_names:
        writer.writerow([movie])


Enter fullscreen mode Exit fullscreen mode

movies added



import pandas as pd

df_data = pd.read_csv("movies.csv")
df_data


Enter fullscreen mode Exit fullscreen mode

movie list

3. Initialize OpenAI API

Replace 'your-api-key-here' with your actual API key.



openai.api_key = "your-api-key-here"


Enter fullscreen mode Exit fullscreen mode

4. Map each movie to its category



# Dictionary mapping movie names to categories
movie_categories = {
    "The Godfather": "Drama",
    "Casablanca": "Romance",
    "Star Wars: A New Hope": "Sci-Fi",
    "Inception": "Sci-Fi",
    "Pulp Fiction": "Crime",
    "Schindler's List": "Drama",
    "Gone with the Wind": "Romance",
    "Shawshank Redemption": "Drama",
    "The Matrix": "Sci-Fi",
    "Jaws": "Thriller",
    "Jurassic Park": "Adventure",
    "Citizen Kane": "Drama",
    "Avatar": "Sci-Fi",
    "The Dark Knight": "Action",
    "Forrest Gump": "Drama",
    "Fight Club": "Drama",
    "Titanic": "Romance",
    "E.T. the Extra-Terrestrial": "Family",
    "2001: A Space Odyssey": "Sci-Fi",
    "The Silence of the Lambs": "Thriller",
    "Goodfellas": "Crime",
    "To Kill a Mockingbird": "Drama",
    "The Wizard of Oz": "Family",
    "Saving Private Ryan": "War",
    "The Lord of the Rings: The Fellowship of the Ring": "Fantasy",
    "Terminator 2: Judgment Day": "Action",
    "One Flew Over the Cuckoo's Nest": "Drama",
    "The Sixth Sense": "Thriller",
    "Psycho": "Horror",
    "The Social Network": "Drama",
    "Apocalypse Now": "War",
    "Rear Window": "Thriller",
    "Braveheart": "War",
    "The Lion King": "Family",
    "The Shining": "Horror",
    "Toy Story": "Family",
    "Memento": "Thriller",
    "La La Land": "Musical",
    "The Departed": "Crime",
    "Black Panther": "Action",
    "The Avengers": "Action",
    "Indiana Jones: Raiders of the Lost Ark": "Adventure",
    "Rocky": "Sports",
    "Amélie": "Romantic Comedy",
    "Alien": "Sci-Fi",
    "The Good, the Bad and the Ugly": "Western",
    "The Big Lebowski": "Comedy",
    "Inglourious Basterds": "War",
    "The Princess Bride": "Fantasy",
    "The Graduate": "Drama"
}


Enter fullscreen mode Exit fullscreen mode

[Note: Make sure you run the cell when you map these movies to their respective categories]

movie genre

5. Let's ask our app to recommend some 'Drama' movies.



def recommend_movies(genre):
    # Find movies of the given genre
    recommendations = [movie for movie, category in movie_categories.items() if category == genre]

    if recommendations:
        print(f"Recommended {genre} movies:")
        for rec in recommendations:
            print(f"- {rec}")
    else:
        print(f"Sorry, no movies of the {genre} genre found.")

# Test the function
recommend_movies("Drama")


Enter fullscreen mode Exit fullscreen mode

drama movies

6. Let's ask user input this time



# Get user input for the genre
user_genre = input("What type of movie are you in the mood for? ")

# Recommend movies based on user input
recommend_movies(user_genre)


Enter fullscreen mode Exit fullscreen mode

user input movies

In wrapping up, we've journeyed through the simplicity and power of combining OpenAI with Python to craft a personalized movie recommendation engine. While our approach is straightforward, it offers a glimpse into the vast potential of AI-driven solutions in enhancing user experiences. With just a few lines of code, we've transformed a basic query into tailored movie suggestions.

If you are really interested in more such tutorials, I have the below ones for you to try.

Top comments (5)

Collapse
 
rajboruah profile image
BlrDevOpsGuy • Edited

Hi Pavan,

Thank you for writing this. Unfortunately, I did not notice anywhere you used openai in the program (other than importing openai and assigning the key to openai.api_key. I felt, this program will work without openai.

Please help in understanding the use of openai above. I hope, I am making mistake somewhere.

Thanks.

Collapse
 
pavanbelagatti profile image
Pavan Belagatti

You can see the 3rd point of initializing OpenAI API.

Collapse
 
rajboruah profile image
BlrDevOpsGuy

Yeah, I could see that and I meant that while saying in my previous comment: 'importing openai and assigning the key to openai.api_key '. But I am finding it hard to see where are you calling openai apis ? Also, where you using panda

Collapse
 
proteusiq profile image
Prayson Wilfred Daniel • Edited

Did you intend to use the movie description or plot as embedding with OpenAI and using distance/similarity matrix or did you generate the genre with a prompt? As it is, OpenAI is not used and the code will work without it as it is dictionary value-to-key lookup.

Collapse
 
bhatia2akshit profile image
Akshit Bhatia

hahahah, what a fool you have made out of us!!! neither have you used any embedding related thing nor have you made any call to openai api. but you managed to waste people's time! good job on that!