import random
def because_you_watched(user, user_item, users, movies, k=5, N=5):
movieTableIDs = get_rated_movies_ids(user, user_item, users, movies)
df = get_movies(movieTableIDs, movies_table)
movieIDs = random.sample(list([df.movieId, N]))
for movieID in movieIDs:
title = df[df.movieId == movieID].iloc[0].title
print("Because you've watched ", title)
similar_and_display(movieID, movies_table, movies, k)
because_you_watched(500, user_item, users, movies, k=5, N=5)
答案 0 :(得分:0)
random.sample
函数中的第二个参数。根据文档:
random.sample(人口k)
返回长度为k的唯一元素列表 从总体序列中选择。用于随机抽样而无需 替换。
替换此:
movieIDs = random.sample(list([df.movieId, N]))
与此
movieIDs = random.sample(list(df.movieId), N)
答案 1 :(得分:0)
正如Pawel的回答所述。 random包的样本函数带有两个参数,而您仅提供一个作为列表。假设参数N
表示样本数,您可以尝试使用类似movieIDs = random.sample(list(df.movieId),N)
的方法。否则,为什么不只使用熊猫数据框documented here的样本方法。
DataFrame.sample(n =无,frac =无,replace = False,权重=无,random_state =无,轴=无)
从对象轴返回随机的项目样本。
n:int,可选
从轴返回的项目数。不能与压裂片一起使用。如果frac = None,则默认= 1。
那我想你可以sample = list(df.sample(n=N).movieId)
来做。
答案 2 :(得分:-1)
在以下代码行中您需要输入k值:
movieIDs = random.sample(list([df.movieId, N]))
as random.sample接受documentation.
中指定的两个参数