Pandas:数据帧到矩阵

2024-10-03 13:17:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一个这样的csv表:

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

你可以把这个表看作是矩阵的描述。我想建立一个矩阵:

^{pr2}$

我已经将数据加载到熊猫数据框中:

triplets_training_set = pd.read_csv(filepath)

现在我想用这些数据建立一个稀疏矩阵。在

另一个问题:

是否需要对值进行矢量化?i、 e.将“b80344d063b5ccb3212f76538f3d9e43d87dca9e”转换为整数用户标识?(相同 使用song_id)

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


我想出的唯一解决办法是先做两个句子:

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

然后逐行迭代数据帧三元组训练集构造矩阵。但这是一个天真的解决办法。一定有更好的。在

提前谢谢!在


Tags: csv数据frankidsong矩阵神经网络john
2条回答

这是你想要的吗?在

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  

可以使用^{}user_id和{}字段编码为整数。这些可以作为矩阵的索引。从那里我将使用您从^{}中选择的矩阵来加载数据。如下所示:

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)

相关问题 更多 >