如何在scipy中创建评分的csr_matrix?

6

我有一个以以下格式的csv文件:

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

我希望构建一个稀疏矩阵,其中行为userId,列为movieID。我已经将所有数据存储为一个名为“column”的字典,其中column ['user']包含用户ID,column ['movie']具有电影ID,column ['ratings']具有以下评级:

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'])))

我遇到了"TypeError: invalid shape"的错误。
请帮忙解决。
2个回答

1

检查这种方式:

df = pd.read_csv('f:\\train.csv', usecols=[0, 1, 2], names=['userId ', 
                   'movieID', 'ratings'], skiprows=1)
from scipy.sparse import csr_matrix
utility_csr = csr_matrix((df.ratings, (df.userId , df.movieID)))

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

你有一个包含1xn维列表的元组和一个2xn维列表,但这个方法行不通。
P.S.:关于数据读取,建议使用Pandas :-) (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())

1
这个操作不会为用户作为行、电影作为列、[row,column] 作为评分创建稀疏矩阵。我们如何创建一个以用户为行、电影为列,并将评分作为 [row,column] 上的值的稀疏矩阵呢? - shane
原始命令 "mat = scipy.sparse.csr_matrix((column['rating'],(column['user'],column['movie'])))" 是正确的,只是需要在使用函数之前将 column['user']、column['rating'] 和 column['movie'] 转换为数组。 - Alice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接