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)
|