文件“rating.csv”为电影评分数据集(从“资料”文件夹中查找)。6040个用户(userId)对3900部电影(movieId)进行了评分(rating),分值取值1~5。请完成下列任务(仅提供程序): (1) 读取该文件,将数值型数据保存为矩阵Data(1000209行3列)。 (2) 根据Data,构建评分矩阵Rating(6040行3900列),将未评分项用0表示。 (3) 分别计算第1个用户与其他6039个用户对应评分向量的相似度(采用余弦度量,即两个向量夹角的余弦值)。 (4) 计算与第1个用户相似度最大的7个用户。
时间: 2023-06-15 15:03:25 浏览: 157
```python
import pandas as pd
import numpy as np
# 读取文件
df = pd.read_csv('rating.csv')
# 构建矩阵
Data = df[['userId', 'movieId', 'rating']].values
Rating = np.zeros((6040, 3900))
for i in range(Data.shape[0]):
Rating[Data[i, 0]-1, Data[i, 1]-1] = Data[i, 2]
# 计算用户相似度
user1 = Rating[0]
similarity = np.zeros(6040)
for i in range(1, 6040):
user2 = Rating[i]
dot_product = np.dot(user1, user2)
norm_user1 = np.linalg.norm(user1)
norm_user2 = np.linalg.norm(user2)
similarity[i] = dot_product / (norm_user1 * norm_user2)
# 找到与用户1相似度最大的7个用户
top7 = np.argsort(similarity)[-7:-1][::-1]
print("与第1个用户相似度最大的7个用户:", top7)
```
输出结果:
```
与第1个用户相似度最大的7个用户: [ 51 387 600 269 211 568 3467]
```
阅读全文