如何在MATLAB R2016b(mac版本)中处理带有字符串的CSV文件
问题描述:
我现在正试图在matlab r2016b mac版本中处理大型csv(200万行)。 csv的一小部分如下所示。如何在MATLAB R2016b(mac版本)中处理带有字符串的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,
我想要做的是为
- 读取csv文件到MATLAB;
- 将用户标识和视频标识映射到简单号码标识;
- 删除会话ID。
我已经尝试了很多方法,但无法得到我想要的结果。 csvread
无法处理此csv文件,因为里面有一些非数字项目,而我不熟悉fopen
,并且总是会出现一些奇怪的错误,例如所有数据进入单个单元格。有没有解决这个问题的方法?
答
由于您提到的文字格式不同,因此使用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}];
答
我无法想象你将如何处理这些字符串。如果你只是需要编辑文件,我建议使用python(这是最简单的,但不是最快的,虽然比matlab快)或C(这是因为你的条件2百万行速度非常快,但不是最简单的)。根据我在Matlab中看到的,它非常擅长矩阵的数学运算,但对于你想做的事情来说不是一个好的选择。也许如果你说出你将要处理的所有数据(我的意思是数学运算符在你所说的之后),那么有人可以提供帮助!
难道我的回答解决问题了吗? –
@ Poyuan.Bn对不起,我刚刚检查了它。它的工作原理和非常感谢! – Vinnton