2016-11-14 28 views
3

我有一個CSV文件格式如下:如何在scipy中創建收視率csr_matrix?

userId movieId rating timestamp 
1  31  2.5 1260759144 
2  10  4  835355493 
3  1197 5  1298932770 
4  10  4  949810645 

我想構建具有行作爲用戶id和列movieID稀疏矩陣。 我已將所有數據存儲爲名爲「列」的字典,其中列['user']包含用戶ID,列['movie']包含電影ID,列['rating']的評分如下:

f = open('ratings.csv','rb') 
reader = csv.reader(f) 
headers = ['user','movie','rating','timestamp'] 
column = {} 
for h in headers: 
    column[h] = [] 
for row in reader: 
    for h, v in zip(headers, row): 
     column[h].append(float(v)) 

當我打電話稀疏矩陣功能:

mat = scipy.sparse.csr_matrix((column['rating'],(column['user'],column['movie']))) 

我得到 「類型錯誤:無效的形狀」

請幫

回答

1
scipy.sparse.csr_matrix([column['rating'],column['user'],column['movie']]) 

您有一個由1xn維度列表和2xn維度列表組成的元組,它不起作用。

P.S .:對於閱讀數據,你應該嘗試熊貓:-)(http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html)。最小的例子:

import pandas as pd 

# Setup a dataframe from the CSV and make it sparse 
df = pd.read_csv('ratings.csv') 
df = df.to_sparse(fill_value=0) 
print(df.head()) 
+0

這不會創建一個稀疏矩陣的行作爲用戶,列作爲電影和[行,列]作爲評級?我們如何創建一個稀疏矩陣,其中用戶爲行,電影爲列,額定值爲[行,列]處的值? – shane

+0

原始命令「mat = scipy.sparse.csr_matrix((column ['rating'],(column ['user'],column ['movie'])))」除列['user']外是正確的,在使用函數之前,column ['rating']和column ['movie']被轉換爲數組。 – Alice

相關問題