4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Matlab::フォルダ内のcsv-fileをmat-fileに変換する方法

Last updated at Posted at 2016-11-25
課題
  • Matlabはcsvファイルをimportするのが遅い.
  • 大量の実験データ(数十Mbyteのcsvファイル結構沢山ある.)
解決方法
  1. 実験データを保管しているフォルダ内のcsvを検索しリスト化.
  2. 1つ目のファイルを一度Workspaceに取り込み,その値をMatファイル形式で保存.
  3. 全てのcsvファイルに対して上記2の処理をfor文で実施.

使用Matlab関数

  • addpath()
  • dir();
  • importfile(); Import機能で半自動で実装できる関数です.
  • fileparts();
  • save()

今回はJINS MEME ACADEMIC PACKを使って実験したので,そちらのデータをサンプルにします.

JINS MEMEで計測したデータのサンプル

// Data mode  : Full
// Transmission speed  : 100Hz
// Accelerometer sensor's range  : 2g
// Gyroscope sensor's range  : 250dps
//
//ARTIFACT,NUM,DATE,ACC_X,ACC_Y,ACC_Z,GYRO_X,GYRO_Y,GYRO_Z,EOG_L,EOG_R,EOG_H,EOG_V
,1,2016/04/01 08:27:35.29,919,1321,-15849,732,-659,-396,-128,316,-444,-94
,2,2016/04/01 08:27:35.30,1077,1250,-15779,679,-453,-441,-113,334,-447,-110
,3,2016/04/01 08:27:35.31,1161,1189,-15779,685,-254,-456,-97,348,-445,-125
,4,2016/04/01 08:27:35.32,1093,1200,-16087,687,-94,-474,-86,354,-440,-134
,5,2016/04/01 08:27:35.33,943,1147,-16451,630,-2,-456,-80,361,-441,-140
,6,2016/04/01 08:27:35.34,1009,1115,-16666,554,-24,-393,-75,366,-441,-145
,7,2016/04/01 08:27:35.35,954,1069,-16648,448,-106,-300,-75,363,-438,-144

100Hzでサンプリングしているので1時間計測すると100×60×60=36万行程度になり,ファイルサイズも20Mbyte程度になります.

これをMATLABでcsvread()などすると結構時間がかかる.いや,アホみたいに時間がかかります.
(もし5秒程度で読み込む方法があるなら教えて頂けると嬉しいです.)

一方でMatファイル形式だと結構あっさり読み込みなどが終わります.
ということで,大量のcsvファイルをMatファイルに変換する方法をメモ.

前提
  • csvをImportするm-file(コード中の"import()")は事前に作ってあります.
  • 計測データ(csvファイル)があるフォルダへのパスを通して,csvファイルが検索できる状態になっている.(参考
% add folder path if needed
addpath('/Users/***/****/folderA')

% Search csv files in folder-A. Type of "files" is structure.
files = dir('/Users/***/****/folder-A/*.csv');

% Transform csv into MAT
for i=1:1:length(files)

    %Import csv file to workspace
    [ARTIFACT,NUM,DATE,ACC_X,ACC_Y,ACC_Z,GYRO_X,GYRO_Y,GYRO_Z,EOG_L,EOG_R,EOG_H,EOG_V]=importfile(files(i).name);  
    
    %Split filename in folder path, file name, and extention. 
    [path, name, ext] = fileparts(files(i).name); 
    
    %save mat
    extention='.mat';
    matname=[name extention];
    save(matname);
end
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?