如何在scipy中创建评级csr_matrix?

时间:2016-11-14 11:06:16

标签: python scipy sparse-matrix

我有一个这种格式的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"的字典。其中['用户']列包含用户ID,列['电影']包含电影ID,列['评分']的评分如下:

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:无效的形状"

请帮忙

2 个答案:

答案 0 :(得分: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 :(得分: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)))