2017-09-01 158 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

相關問題