【问题标题】:Matlab: Load Users-Items-Ratings CSV into Ratings matrixMatlab:将用户-项目-评分 CSV 加载到评分矩阵中
【发布时间】:2017-08-01 18:48:17
【问题描述】:

我有以下 CSV 格式用于用户评分项目:

A1YS,8F20,3.0
A3TS,8320,2.0
A3BU,1905,5.0
A3BU,3574,4.0
A14X,185A,1.0

这些列是 UserID、ItemID、Rating

我想将它加载到一个 Matlab 矩阵中,其中用户的行、项目的列和单元格值将包含评分(未知评分等于零),例如:

      8F20,  1905,  3574,  185A
A1YS    3 ,    0 ,    0 ,    0 
A3TS    2 ,    0 ,    0 ,    0 
A3BU    0 ,    5 ,    4 ,    0 
A14X    0 ,    0 ,    0 ,    1 

另外,其实矩阵可以这样形成:

3 ,    0 ,    0 ,    0 
2 ,    0 ,    0 ,    0 
0 ,    5 ,    4 ,    0 
0 ,    0 ,    0 ,    1 

我对 Matlab 很陌生,并尝试了一些变体:

https://stackoverflow.com/a/13775907/1726419https://stackoverflow.com/a/19613301/1726419

没有大的成功 - 我会非常感谢任何帮助。

编辑: 到目前为止我得到的是:

fid = fopen('ratings_sample.csv');
out = textscan(fid,'%s%s%d%d','delimiter',',');
fclose(fid);

c1 = out{1};
c2 = out{2};
c3 = out{3};

我的问题是我需要重复删除 c1c2 并正确填充矩阵的内部单元格。另外,我不知道这是否是加载它的正确方法。

【问题讨论】:

  • 您需要先加载数据,然后将其操作为您想要的形状。你在第二个例子中尝试过 textscan 吗?如果是这样,请告诉我们您取得了多大的成就,哪些没有奏效?
  • 谢谢,@Justin,我已经上传了到目前为止我所做的事情,我的主要问题是旋转矢量、重复删除和填充数据...

标签: matlab csv matrix recommendation-engine


【解决方案1】:

如果UserID和ItemID是唯一的,可以使用crosstab

UserID = categorical(c1);
ItemID = categorical(c2);
Rating = crosstab(UserID,ItemID);
Rating(Rating==1) = c3;

然后得到:

Rating =
     3     0     0     0     0
     0     0     0     0     1
     0     2     5     0     0
     0     0     0     4     0

如果你想在表格中组织它,你需要先将项目的 ID 转换为有效的变量名(以字母开头):

Items = cellfun(@(s) ['Item_' s],c2,'un',0);

然后您可以使用table 来保存所有数据:

Tbl = array2table(Rating,...
                  'RowNames',unique(c1,'stable'),...
                  'VariableNames',unique(Items,'stable'))

结果:

Tbl =
  4×5 table
            Item_8F20    Item_8320    Item_1905    Item_3574    Item_185A
            _________    _________    _________    _________    _________
    A1YS    3            0            0            0            0        
    A3TS    0            0            0            0            1        
    A3BU    0            2            5            0            0        
    A14X    0            0            0            4            0        

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-08
    • 2020-04-29
    • 2013-08-30
    • 2017-04-07
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 2014-10-20
    相关资源
    最近更新 更多