如何使用python有效地填充给定一个非常大的表的矩阵?
Posted
技术标签:
【中文标题】如何使用python有效地填充给定一个非常大的表的矩阵?【英文标题】:How to efficiently populate a matrix given a very large table using python? 【发布时间】:2016-11-16 23:00:16 【问题描述】:我有一个三列'customer'、'item_id'、'ct_id' 的表,但行数约为 300 万。唯一的 'item_id' 有 20350 个条目,而 'customer' 有 2485 个条目。在 20350 种商品中,每位顾客可以购买任意数量的商品
目标是建立一个基于表格的推荐系统。首先,我要构造一个 2485x20350 的矩阵,其行是“客户”,列是“项目 ID”。 每个元素是表中 'customer' & 'item_id' 对的出现次数。那么我可以根据这个客户/商品矩阵构建相似度矩阵。
我尝试在 pandas 中使用 pivot_table,如下所示: d_pivt = dt.pivot_table(index=['cstm_num','it_num'], aggfunc='count'),
我只是想知道,有了这些信息,构建我想要的矩阵的最有效方法是什么。
谢谢,
【问题讨论】:
所以您尝试使用pivot_table
,您的尝试出了什么问题?它是否引发了错误,是不是太慢了?请详细说明为什么它不适合您。
【参考方案1】:
你在列中说'item_id'
,在行中说'customer'
。
d_pivt = dt.pivot_table(values='ct_id', index='customer',
columns='item_id', aggfunc='count')
演示
df = pd.DataFrame(np.random.randint(0, 10, (1000, 3)),
columns=['customer', 'item_id', 'ct_id'])
df.pivot_table('ct_id', 'customer', 'item_id', 'count')
【讨论】:
我想创建一个以customer为行,item_id为列的矩阵。 @Y.Liu 我已经更新了我的帖子。如果这不是您想要的,那么您需要向我们展示您想要的,因为告诉我们是行不通的。 非常感谢。我测试了我的数据。这正是我想要的。现在我删除 NaN 后,我的客户/项目矩阵如下所示:【参考方案2】:@piRSquared 你的方法就像我想要的那样工作。现在我的客户/项目矩阵如下所示: enter image description here
我还没有被允许添加图片。 :-(
但我得到了我想要的矩阵,其尺寸为 2485x20350。 您可以通过上面的图片链接看到,有很多零,因为客户可能只购买了数百件商品。 我尝试使用以下方法计算项目相关矩阵:
sall_pvtb = sales_all.pivot_table(values='cm_id', index='cstm_num',
columns = 'it_num', aggfunc='count')
sall_pvtb.fillna(0, inplace = True)
sall_corr = sall_pvtb.corr()
但是项目相关性计算需要很长时间,因为它是一个 20350x20350 大小的矩阵。相关计算稀疏完成?
【讨论】:
以上是关于如何使用python有效地填充给定一个非常大的表的矩阵?的主要内容,如果未能解决你的问题,请参考以下文章