如何处理具有MATLAB R2016B(MAC版本)中字符串的CSV文件



我现在正在尝试处理MATLAB R2016B MAC版本中的大型CSV(200万行)。CSV的一小部分如下所示。

user_id,video_id,session,new_speed,old_speed,new_time,old_time,event_type,event_time
a74fe6d4812fa93a1afa1a6a334ebdda,af7f974d395a4adddc8ab17a83996073,892d85cfeea8298fb7ca8755ac090e90,,,,,play_video,2015-04-06 22:20:58.928268
a74fe6d4812fa93a1afa1a6a334ebdda,af7f974d395a4adddc8ab17a83996073,892d85cfeea8298fb7ca8755ac090e90,,,161.0,72.581,seek_video,2015-04-06 22:20:58.879149
a74fe6d4812fa93a1afa1a6a334ebdda,7fb29805973a8a396c6de3faa8290ac1,892d85cfeea8298fb7ca8755ac090e90,,,,,play_video,2015-04-06 22:24:14.988693
a74fe6d4812fa93a1afa1a6a334ebdda,9ace07b312f206ef7af2f48188360b16,892d85cfeea8298fb7ca8755ac090e90,,,,,load_video,

我想做的是

  1. 将CSV文件读取到MATLAB;
  2. 将用户ID和视频ID映射到简单的数字ID;
  3. 删除会话ID。

我尝试了很多方法,但无法得到我想要的结果。csvread无法处理此CSV文件,因为里面有一些非数字项目,而我不熟悉fopen,并且总是会遇到一些奇怪的错误,例如所有数据都进入一个单元格。有没有解决此问题的解决方案?

我无法想象您将如何处理这些字符串。如果您只需要进行编辑,建议使用 python (最简单但不是最快的,尽管比MATLAB快)或 C> c (它更快得多考虑到您的身份200万行,但最简单)。

据我从MATLAB中看到的,它非常擅长于矩阵上的数学操作,但对于您想做的事情不是一个不错的选择。也许如果您说要使用所有这些数据要做什么(我的意思是您所说的数学操作),有人可以提供帮助!

由于您提到的文本中的格式不同,因此使用textread()函数是一个好主意。它返回 1D 单元格数组。因此,首先,您必须通过regexp()解析并以这种方式索引单元格:

Thecell{row}{column}  %accessing cell elements

我们去:

cellarray = textread('Put directory here','%s',9);
for i=1:length(cellarray)
parsed_cell{i} = regexp(cellarray, ',', 'split'); %% Parsing 1d cell
end
%% 3 items which you wanted for e.g. the first line
line1 = parsed_cell{1};
line1{1}{3} = []; %% Deleting session id in line 1 of the text.
                  %%easily can be implemented for others
%% putting user_id,video_id into number id  in line 1. 
numberid = [line1{1}{1},line1{1}{2}]; 

最新更新