【问题标题】:Pandas: Dataframe to Matrix熊猫:数据框到矩阵
【发布时间】:2018-01-13 04:23:33
【问题描述】:

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

我有一个这样的 csv 表:

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

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

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,构建矩阵。但这是一个幼稚的解决方案。一定有更好的。

提前致谢!

【问题讨论】:

  • 你可以使用my_df.as_matrix(),你能告诉我你为什么要建立一个带有分类值的稀疏矩阵吗?你知道什么是稀疏矩阵吗?
  • @francarranza 试试这个stackoverflow.com/questions/48133358/…

标签: python pandas matrix scikit-learn sparse-matrix


【解决方案1】:

您可以使用sklearn.preprocessing.LabelEncoderuser_idsong_id 字段编码为整数。然后这些可以用作矩阵的索引。从那里我将使用您从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)

【讨论】:

    【解决方案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  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 2017-04-11
      • 2021-10-02
      • 1970-01-01
      • 2020-12-15
      • 2019-07-09
      • 2018-01-25
      相关资源
      最近更新 更多