【发布时间】:2017-05-30 08:36:15
【问题描述】:
我正在通过使用 Movielens 数据集的协同过滤来制作电影推荐系统。 我关注this:http://blog.ethanrosenthal.com/2015/11/02/intro-to-collaborative-filtering/
但它在 ln[8] 上不起作用:
import numpy as np
import pandas as pd
data = open('ratings.csv')
names = ['user_id','item_id','rating','timestamp']
df = pd.read_csv('ratings.csv', sep=',', names=names)
df.head()
n_users = df.user_id.unique().shape[0]
n_items = df.item_id.unique().shape[0]
print (str(n_users) + ' users')
print (str(n_items) + ' items')
ratings = np.zeros((n_users, n_items))
for row in df.itertuples():
ratings[row[1]-1, row[2]-1] = row[3]
ratings
sparsity = float(len(ratings.nonzero()[0]))
sparsity /= (ratings.shape[0] * ratings.shape[1])
sparsity *= 100
print ('Sparsity: {:4.2f}%'.format(sparsity))
并且有这样的错误:
line 17, in <module>
ratings[row[1]-1, row[2]-1] = row[3]
TypeError: unsupported operand type(s) for -: 'str' and 'int'
【问题讨论】:
-
Exception很清楚 - 你rows 持有strs。
标签: python recommendation-engine collaborative-filtering