编写代码设计一个根据已有电影数据的用户评分,对某用户进行最感兴趣电影的推荐。 (1)首先需要生成数据模拟(也可以使用真实数据)多人对多个电影的打分(1-6 分)。 默认10个用户,总共15部电影。每个用户至少评3部,最多10部电影。 (2)然后根据这些数据对某用户 A 进行推荐。推荐规则为:在已有数据中选择与该用户 A 的爱好最相似的用户 B,然后从最相似的用户 B 已看过但用户 A 还没看过的电影中选择用户 B 打分最高的电影推荐给用户 A。 相似度的计算标准为:1)两个用户共同打分过的电影越多,越相似;2)两个用户对共同打分的电影的打分越接近,越相似。 (3)使用tkinter实现GUI编程。from random import seed,randrange # 模拟历史电影打分数据 seed(2050) data = {'user'+str(i):{'film'+str(randrange(1, 15)):randrange(1, 6) for j in range(randrange(3, 10))} for i in range(10)} #print(data) # 当前用户打分数据 user = {'film'+str(randrange(1, 15)):randrange(1,6) for i in range(5)} #print(user) # 基于用户的协同过滤算法原理: # 两个用户共同打分的电影最多,并且所有电影打分差值的平方和最小 f = lambda item:(-len(item[1].keys()&user), sum(((item[1].get(film)-user.get(film))**2 for film in user.keys()&item[1].keys()))) # 寻找最相似的用户及其对电影打分情况 similarUser, films = min(data.items(), key=f) #print(similarUser, films) print('known data'.center(50, '=')) print(data) print('current user'.center(50, '=')) print(user) print('most similar user and his films'.center(50, '=')) print(similarUser, films, sep=':') print('recommended film'.center(50, '=')) # 在当前用户没看过的电影中选择打分最高的进行推荐 将以上代码根据要求完善
时间: 2024-02-18 20:05:14 浏览: 21
以下是根据要求完善后的代码:
```python
from random import seed, randrange
import tkinter as tk
# 模拟历史电影打分数据
seed(2050)
data = {'user'+str(i):{'film'+str(randrange(1, 16)):randrange(1, 6) for j in range(randrange(3, 11))} for i in range(10)}
# 当前用户打分数据
user = {'film'+str(randrange(1, 16)):randrange(1,6) for i in range(5)}
# 基于用户的协同过滤算法原理:
# 两个用户共同打分的电影越多,并且所有电影打分差值的平方和最小
f = lambda item:(-len(item[1].keys()&user), sum(((item[1].get(film)-user.get(film))**2 for film in user.keys()&item[1].keys())))
# 寻找最相似的用户及其对电影打分情况
similarUser, films = min(data.items(), key=f)
# 在当前用户没看过的电影中选择打分最高的进行推荐
recommended_film = max(films.keys() - user.keys(), key=films.get)
# 创建GUI界面
root = tk.Tk()
root.title("电影推荐系统")
# 显示已有的电影数据
text1 = tk.Text(root, height=10, width=50)
text1.insert(tk.END, "已有电影数据:\n")
for u, f in data.items():
text1.insert(tk.END, "{}: {}\n".format(u, f))
text1.pack()
# 显示当前用户的打分数据
text2 = tk.Text(root, height=5, width=50)
text2.insert(tk.END, "当前用户打分数据:\n")
text2.insert(tk.END, "{}\n".format(user))
text2.pack()
# 显示最相似的用户及其对电影的打分情况
text3 = tk.Text(root, height=5, width=50)
text3.insert(tk.END, "最相似的用户及其对电影的打分情况:\n")
text3.insert(tk.END, "{}: {}\n".format(similarUser, films))
text3.pack()
# 显示推荐的电影
text4 = tk.Text(root, height=5, width=50)
text4.insert(tk.END, "推荐的电影:\n")
text4.insert(tk.END, "{}\n".format(recommended_film))
text4.pack()
root.mainloop()
```
这段代码实现了根据已有电影数据的用户评分,对某用户进行最感兴趣电影的推荐,并使用tkinter实现了GUI界面。在GUI界面中,显示了已有电影数据、当前用户的打分数据、最相似的用户及其对电影的打分情况以及推荐的电影。