我有一个用户,商店和购买数据框:
user shop median spend
0 00012 McDonald 3.950
1 00012 Subway 6.000
2 00012 Netflix 10.990
3 00012 Tesco 3.635
4 0007b Lidl 51.870
我想将其转换为稀疏矩阵(用于推荐系统)。为此,用户和商店需要转换为数字:
# getting categorical codes
data['user_id'] = data['user'].astype("category").cat.codes
data['shop_id'] = data['shop'].astype("category").cat.codes
print(data.head)
user shop user_id shop_id
0 00012 McDonald 0 99
1 00012 Subway 0 101
2 00012 Netflix 0 224
3 00012 Tesco 0 307
4 0007b Lidl 1 182
然后我将其转换为稀疏矩阵
sparse_item_user = sparse.csr_matrix((data['median spend'].astype(float), (data['shop_id'], data['user_id'])))
<351x35993 sparse matrix of type '<class 'numpy.float64'>'
with 630819 stored elements in Compressed Sparse Row format>
现在,当我将其转换回数据框时,商店是行,客户是列。
问题是,我不知道哪个商店对应哪一行。您可以在我以前的数据帧打印中看到,麦当劳是shop_id 99
。这是否与下面的矩阵中的99
行相对应?还是应该用data['shop'].unique()
填充行,即按照原始数据帧中出现的顺序填充?与客户相同-矩阵列是我的客户按原始df中出现的顺序排列吗?
pd.DataFrame(sparse_item_user.todense())