File size: 1,401 Bytes
30e0370
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import pandas as pd

def load_movie_data(path="imdb_top_1000/imdb_top_1000.csv"):
    df = pd.read_csv(path)
    df.rename(columns={"Series_Title": "title", "Released_Year": "year", "Genre": "genre",
        "IMDB_Rating": "rating", "Poster_Link": "poster"}, inplace=True)

    # OPTIONAL: Add a fake 'mood' column based on genre (can be improved later)
    df["mood"] = df["genre"].apply(lambda g: infer_mood_from_genre(g))
    return df

def infer_mood_from_genre(genre_str):
    genre_str = genre_str.lower() if isinstance(genre_str, str) else ""
    if any(g in genre_str for g in ["romance", "comedy"]):
        return "Feel-good"
    elif any(g in genre_str for g in ["action", "thriller"]):
        return "Intense"
    elif "drama" in genre_str:
        return "Thought-provoking"
    elif "animation" in genre_str:
        return "Funny"
    else:
        return "General"

def recommend_movies(df, mood=None, genre=None, min_rating=0.0):
    filtered = df.copy()

    if mood:
        filtered = filtered[filtered["mood"].str.contains(mood, case=False, na=False)]

    if genre and genre.lower() != "any":
        filtered = filtered[filtered["genre"].str.contains(genre, case=False, na=False)]

    filtered = filtered[filtered["rating"] >= min_rating]

    filtered = filtered.sort_values(by="rating", ascending=False)

    return filtered.head(10)