2017-09-01 160 views
0

我正在尝试使用python和django构建电影推荐程序web应用程序。我试图使用一个命令来拍摄电影的描述,并创建一个信息检索系统,以允许用户找到输入相关单词的电影。然后将此tf-idf模型与初始推荐系统模型(基于CF项目和对数似然比)一起保存在Django缓存中。推荐系统:ValueError at /无法将字符串转换为float:

负载数据的命令是

python manage.py load_data --input=plots.csv --nmaxwords=30000 --umatrixfile=umatrix.csv 

终端错误

File "/home/anthra/server_movierecsys/books_recsys_app/management/commands/load_data.py", line 80, in handle 
matr[0]=newrow 
ValueError: could not convert string to float: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 

plot.csv截图

plot.csv umatrix.csv

的代码如下:

matr = np.empty([1,ndims]) 
    titles = [] 
    cnt=0 
    for m in xrange(nmovies): 
     moviedata = MovieData() 
     moviedata.title=tot_titles[m] 
     moviedata.description=tot_textplots[m] 
     moviedata.ndim= ndims 
     moviedata.array=json.dumps(vec_tfidf[m].toarray()[0].tolist()) 
     moviedata.save() 
     newrow = moviedata.array 
     if cnt==0: 
      matr[0]=newrow 
     else: 
      matr = np.vstack([matr, newrow]) 
     titles.append(moviedata.title) 
     cnt+=1 

moviedata.array输出 moviedata.array output

回答

0

微小的变化给了很棒的结果。改变

moviedata.array=json.dumps(vec_tfidf[m].toarray()[0].tolist())" 

moviedata.array=vec_tfidf[m].toarray()[0] 
0

json.dumps产生一个字符串NEWROW变量。然后你试图将你序列化的变量写入一个numpy数组。

据我所知,numpy数组被限制在一个声明的类型(隐式,如果你没有明确提供),所以当你使用浮点数初始化数组时,代码尝试类型化你的字符串var newrow浮动值 - 这会失败,因为你没有传递一个代表数字的字符串,而是一个可迭代的数字。

+0

感谢。任何想法如何解决问题 – Sumi

+0

我不太确定为什么你要序列化那里的数据。你可以在该行执行其他调用,将结果保存为newrow,然后只有json.dumps该变量。 – jkm

相关问题