如何使用python有效地填充矩阵给定一个非常大的表?

时间:2016-11-16 23:00:17

标签: python pandas sparse-matrix

我有一个包含三列'customer','item_id','ct_id'的表格,但行数约为300万。唯一的'item_id'有20350个条目,'customer'有 2485个条目。每个客户可以在20350种商品中购买任意数量的商品

目标是基于该表构建推荐系统。首先,我想构建一个2485x20350的矩阵,其行为“custmer”,列为“item_id”。 每个元素都是“客户”和“客户”的出现次数。表中的'item_id'对。我可以根据此客户/项目矩阵建立相似性矩阵。

我尝试在pandas中使用pivot_table,如下所示: d_pivt = dt.pivot_table(index = ['cstm_num','it_num'],aggfunc ='count'),

我只是想知道,有了这些信息,构建我想要的矩阵的最有效方法是什么。

谢谢,

2 个答案:

答案 0 :(得分:0)

你在列中说'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')

enter image description here

答案 1 :(得分:0)

@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大小的矩阵。稀疏地进行相关计算?