Pandas:数据帧到矩阵

Pandas: Dataframe to Matrix

我对这个话题很陌生。我目前正在开发一种潜在因子矩阵分解,它将作为神经网络的训练数据。

我有一个这样的 csv table:

user_id song_id playcount
frank   SOBYHAJ12A6701BF1D  23
john    SODACBL12A8C13C273  1
john    SODXRTY12AB0180F3B  3
mary    SOFRQTD12A81C233C0  1

您可以将此 table 视为对矩阵的描述。我想构建一个矩阵:

rows=song_id, columns=user_id, value=playcount

我已将数据加载到 pandas 数据帧中:

triplets_training_set = pd.read_csv(filepath)

现在我想用该数据构建一个稀疏矩阵。

另一个问题:

我需要向量化值吗?即将'b80344d063b5ccb3212f76538f3d9e43d87dca9e'翻译成整数user_id? (相同的 song_id)

我读过这样的问题,但我不知道如何处理最后一个问题


我想出的唯一解决方案是首先制作 2 个命令,例如:

{ frank: 1, john: 2, mary:3, ..}
{ SOBYHAJ12A6701BF1D:1 , SODACBL12A8C13C273:2. ..}

然后逐行遍历数据帧triplets_training_set,构建矩阵。但这是一个天真的解决方案。一定有更好的。

提前致谢!

您可以使用sklearn.preprocessing.LabelEncoder to encode the user_id and song_id fields into integers. These could then be used as the indices for your matrix. From there I would use your matrix of choice from scipy.sparse加载数据。类似于以下内容:

from sklearn.preprocessing import LabelEncoder
from scipy import sparse as ss

le = LabelEncoder()
user_ids = le.fit_transform(df.user_id)
song_ids = le.fit_transform(df.song_id)

sarr = ss.csr_matrix((df.playcount, (user_ids, song_ids)))
sarr
<3x4 sparse matrix of type '<class 'numpy.int64'>'
    with 4 stored elements in Compressed Sparse Row format>
sarr.todense()
matrix([[23,  0,  0,  0],
        [ 0,  1,  3,  0],
        [ 0,  0,  0,  1]], dtype=int64)

这是你想要的吗?

df.pivot(*df.columns)
Out[648]: 
song_id  SOBYHAJ12A6701BF1D  SODACBL12A8C13C273  SODXRTY12AB0180F3B  \
user_id                                                               
frank                  23.0                 NaN                 NaN   
john                    NaN                 1.0                 3.0   
mary                    NaN                 NaN                 NaN   
song_id  SOFRQTD12A81C233C0  
user_id                      
frank                   NaN  
john                    NaN  
mary                    1.0