Skip to content

Instantly share code, notes, and snippets.

@LouisdeBruijn
Last active August 28, 2019 12:03
Show Gist options
  • Save LouisdeBruijn/2f7119a90daae8ef7ca6c04669d5bc09 to your computer and use it in GitHub Desktop.
Save LouisdeBruijn/2f7119a90daae8ef7ca6c04669d5bc09 to your computer and use it in GitHub Desktop.
recommend one and all users
def recommend(user_id):
'''recommend N items to user'''
sparse_user_item = load_npz("sparse_user_item.npz")
with open('model.sav', 'rb') as pickle_in:
model = pickle.load(pickle_in)
recommended, _ = zip(*model.recommend(user_id, sparse_user_item))
return recommended, map_movies(recommended)
def recommend_all_users():
'''recommend N items to all users'''
sparse_user_item = load_npz("sparse_user_item.npz")
with open('model.sav', 'rb') as pickle_in:
model = pickle.load(pickle_in)
# numpy array with N recommendations for each user
# remove first array, because those are the columns
all_recommended = model.recommend_all(user_items=sparse_user_item, N=10,
recalculate_user=False, filter_already_liked_items=True)[1:]
# create a new Pandas Dataframe with user_id, 10 recommendations, for all users
df = pd.read_csv('ml-1m/users.dat', delimiter='::', header=None,
names=['user_id', 'gender', 'agerange', 'occupation', 'timestamp'], engine='python')
df = df.drop(['gender', 'agerange', 'occupation', 'timestamp'], axis=1)
df[['rec1', 'rec2', 'rec3', 'rec4', 'rec5', 'rec6', 'rec7', 'rec8', 'rec9', 'rec10']] = pd.DataFrame(all_recommended)
df.to_pickle("all_recommended.pkl")
'''melt dataframe into SQL format for Django model
melted = df.melt(id_vars=['user_id'], var_name='order', value_name='recommendations',
value_vars=['rec1', 'rec2', 'rec3', 'rec4', 'rec5', 'rec6', 'rec7', 'rec8', 'rec9', 'rec10'])
melted['order'] = melted.order.str[3:]
print(melted.sort_values(by=['user_id', 'order']))
melted.to_pickle('all_recommended_melted.pkl')
'''
return df
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment