【问题标题】:Converting Pandas DataFrame to sparse matrix将 Pandas DataFrame 转换为稀疏矩阵
【发布时间】:2018-07-09 07:25:59
【问题描述】:

这是我的代码:

data=pd.get_dummies(data['movie_id']).groupby(data['user_id']).apply(max)

df=pd.DataFrame(data)

replace=df.replace(0,np.NaN)

t=replace.fillna(-1)

sparse=sp.csr_matrix(t.values)

我的数据由两列组成,分别是 movie_id 和 user_id。

 user_id      movie_id

   5             1000 

   6             1007 

我想将数据转换为稀疏矩阵。我首先创建了一个交互矩阵,其中行表示 user_id,列表示 movie_id,正交互为 +1,负交互为 -1。然后我使用 scipy 将其转换为稀疏矩阵。我的结果如下所示:

(0,0) -1

(0,1) -1

(0,2) 1

但我真正想要的是:

(1000,0) -1

(1000,1) 1

(1007,0) -1

任何帮助将不胜感激。

【问题讨论】:

  • 您能否分享一些描述您如何尝试转换这些数组的代码?
  • 我刚刚调用了 sparse=scipy.csr_matrix(dataframe.values)

标签: python python-3.x pandas dataframe recommendation-engine


【解决方案1】:

如果您同时拥有行索引和列索引(在您的情况下分别为 movie_id 和 user_id),建议使用 COO 格式进行创建。

您可以将其转换为稀疏格式,如下所示:

import scipy
sparse_mat = scipy.sparse.coo_matrix((t.values, (df.movie_id, df.user_id)))

重要的是,请注意构造函数如何通过将电影 ID 和用户 ID 作为数据参数传递来给出稀疏矩阵的隐式形状。
此外,您可以将此矩阵转换为您想要的任何其他稀疏格式,例如 CSR。

【讨论】:

  • 不幸的是,当我避免构建交互矩阵数据框属性时,出现错误-->'DataFrame' 对象没有属性'movie_id',如何创建具有该属性的交互矩阵? ??
  • 嗯,这只是根据您提供的 DF 结构。基本上,您只需传递包含 movie_id 参数的数据框列。
  • data=pd.get_dummies(data['movie_id']).groupby(data['user_id']).apply(max) 执行上述操作似乎我的交互矩阵不包含这两个参数,而我从第一个数据帧(数据)错误弹出这样的参数“行,列和数据数组必须都是相同的长度”
  • 如果没有看到数据,我真的无法判断这里出了什么问题。我也相信这根本与问题无关,因此我建议您可能希望针对单独的问题启动另一个线程,或者提供有关您的数据的更多见解。即使是最小的可重现示例也应该足够了,但是由于我们不知道您的数据是什么样的,我们无能为力...
  • 只是测试LightFM推荐器的虚拟数据,可以把我的数据和我的代码发到你的邮箱里让你看看
猜你喜欢
  • 2023-04-10
  • 2021-11-25
  • 2017-07-02
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 2020-04-07
  • 2017-12-02
相关资源
最近更新 更多