CoolFace
Apppublic

Huiiiiiiii/Recommender_System

sourceHugging Faceotherupdated 4y agoView on Hugging Face
0likes
app.py117 linesDownload Raw Back to root
1import streamlit as st2import pickle3import pandas as pd4import numpy as np5import math6from sklearn.metrics.pairwise import cosine_similarity7 8st.title("WBSFLX")9 10st.write("""11### Project description12As a freelance Data Scientist, a customer approaches you with an ambitious request: she wants to take her DVD store online. And you thought all DVD stores were dead! Not quite: her store, called WBSFLIX, operates in a small town near Berlin and is still alive thanks to a loyal customer base that appreciates the local atmosphere and, more than anything, the personal recommendations of the owner, Ursula.13 14""")15 16 17ratings=pd.read_csv('https://drive.google.com/file/d/1fx654lrDFyNYk7ZbdRtfGcHZv5gK4XNf/view?usp=sharing')18movies=pd.read_csv('https://drive.google.com/file/d/1Gd5-Lpq1CZLSgyvp6jrFnJEgzg4LRmaB/view?usp=sharing')19links=pd.read_csv('https://drive.google.com/file/d/17_HVsX4loAA22B7TtgwtNEgLMxEtz2K4/view?usp=sharing')20 21st.write("### Popular Movies")22 23genre_1 = st.selectbox("",("","Action","Adventure","Animation","Children", "Comedy", "Crime", "Documentary","Drama","Fantasy","Film-Noir","Horror","Musical","Mystery","Romance","Sci-Fi","Thriller","War","Western","no genres listed"), key="str")24 25movies_3=movies26movies_3["release_year"]=movies_3["title"].str.extract("\(([0-9]+)\)")27movies_3["title"]=movies_3["title"].str.replace("\(([0-9]+)\)", "",regex=True)28movies_3["title"]=movies_3["title"].str.strip()29 30rating = pd.DataFrame(ratings.groupby('movieId')['rating'].mean())31rating['rating_count'] = ratings.groupby('movieId')['rating'].count()32rating=rating.sort_values("rating_count", ascending=False)33rating=rating.reset_index()34pop_mov=rating.merge(movies_3, how="left", on="movieId")35 36filter1=pop_mov["genres"].str.contains(genre_1)37pop_mov=pop_mov[["rating","title", "genres"]]38pop_mov=pop_mov[filter1].head(10)39st.table(pop_mov)40st.write("### Recommandations based on Movies like")41movie_title = st.text_input('', 'Shawshank Redemption, The')42movies_1=movies43n = st.number_input("Numbers of Recommandations", value=5,key=int)44n=math.floor(n)45st.write("Genre")46 47 48movies_crosstab = pd.pivot_table(data=ratings, values='rating', index='userId', columns='movieId')49#movies_crosstab.head(10)50movies_1["release_year"]=movies_1["title"].str.extract("\(([0-9]+)\)")51movies_1["title"]=movies_1["title"].str.replace("\(([0-9]+)\)", "",regex=True)52movies_1["title"]=movies_1["title"].str.strip()53klass=movies.loc[movies.title==movie_title,'movieId'].values[0]54top_movieId=klass55topmovie_ratings = movies_crosstab[top_movieId]56#topmovie_ratings[topmovie_ratings>=0]57similar_to_Topmov = movies_crosstab.corrwith(topmovie_ratings)58similar_to_Topmov.sort_values(ascending=False)59corr_Topmov = pd.DataFrame(similar_to_Topmov, columns=['PearsonR'])60corr_Topmov.dropna(inplace=True)61rating = pd.DataFrame(ratings.groupby('movieId')['rating'].mean())62rating['rating_count'] = ratings.groupby('movieId')['rating'].count()63corr_Topmov_summary = corr_Topmov.join(rating['rating_count'])64top10 = corr_Topmov_summary[corr_Topmov_summary['rating_count']>=20].sort_values('PearsonR', ascending=False)65top10=top10.reset_index()66top10 = top10.merge(movies, how="left", on="movieId")67 68top10=top10[["title","genres"]].head(n)69#top10_gen=top10[filter1].head(n)70st.table(top10)71 72 73 74 75st.write("### Recommandations based on User")76uid = st.number_input("User ID",value=50,max_value=610)77#uid = st.number_input("Enter User Id", value=50,max_value=610)78#st.write("### Recommandations based on User ",uid) 79num = st.number_input("Numbers of Recommandations", value=5)80genre = st.selectbox("",("","Action","Adventure","Animation","Children", "Comedy", "Crime", "Documentary","Drama","Fantasy","Film-Noir","Horror","Musical","Mystery","Romance","Sci-Fi","Thriller","War","Western","no genres listed"))81 82num=math.floor(num)83uid=math.floor(uid)84movies_2= movies85 86users_items = pd.pivot_table(data=ratings, 87                                 values='rating', 88                                 index='userId', 89                                 columns='movieId')90 91users_items.fillna(0, inplace=True)92 93user_similarities = pd.DataFrame(cosine_similarity(users_items),94                                 columns=users_items.index, 95                                 index=users_items.index)96 97movies_crosstab = pd.pivot_table(data=ratings, values='rating', index='userId', columns='movieId')98movies_crosstab.head(10)99movies_2["release_year"]=movies_2["title"].str.extract("\(([0-9]+)\)")100movies_2["title"]=movies_2["title"].str.replace("\(([0-9]+)\)", "",regex=True)101movies_2["title"]=movies_2["title"].str.strip()102 103weights = (104    user_similarities.query("userId!=@uid")[uid] / sum(user_similarities.query("userId!=@uid")[uid])105          )106notwwatchedmovies = users_items.loc[users_items.index!=uid, users_items.loc[uid,:]==0]107weighted_averages = pd.DataFrame(notwwatchedmovies.T.dot(weights), columns=["predicted_rating"])108#notwwatchedmovies.T109recommendations = weighted_averages.merge(movies, left_index=True, right_on="movieId")110topn=recommendations.sort_values("predicted_rating", ascending=False)111filter1=topn["genres"].str.contains(genre)112topn=topn[["title", "genres"]]113 114 115topn=topn[filter1].head(num)116st.table(topn)117