2017-11-25 112 views
2

我現在正試圖在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, 

我想要做的是爲

  1. 讀取csv文件到MATLAB;
  2. 將用戶標識和視頻標識映射到簡單號碼標識;
  3. 刪除會話ID。

我已經嘗試了很多方法,但無法得到我想要的結果。 csvread無法處理此csv文件,因爲裏面有一些非數字項目,而我不熟悉fopen,並且總是會出現一些奇怪的錯誤,例如所有數據進入單個單元格。有沒有解決這個問題的方法?

+0

難道我的回答解決問題了嗎? –

+0

@ Poyuan.Bn對不起,我剛剛檢查了它。它的工作原理和非常感謝! – Vinnton

回答

0

由於您提到的文字格式不同,因此使用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}]; 
1

我無法想象你將如何處理這些字符串。如果你只是需要編輯文件,我建議使用python(這是最簡單的,但不是最快的,雖然比matlab快)或C(這是因爲你的條件2百萬行速度非常快,但不是最簡單的)。根據我在Matlab中看到的,它非常擅長矩陣的數學運算,但對於你想做的事情來說不是一個好的選擇。也許如果你說出你將要處理的所有數據(我的意思是數學運算符在你所說的之後),那麼有人可以提供幫助!

+0

感謝您的評論!我正在努力是否應該轉向python。但是因爲我以前沒有用過Python,請給我一些關於我可以用來解決這個問題的函數的提示嗎? – Vinnton

+0

有一個用於處理csv文件的好庫:https://docs.python.org/3/library/csv.html你可以在文檔中看到一些示例 – Ehsan

+0

非常感謝你的幫助! – Vinnton

相關問題