MATLAB Answers

csvデータシートの抽出

34 views (last 30 days)
現在CNN入力層にcsvの一次元データを適用した解析を行っています。
csvを読み込む関数をreadDatastoreCSVと定義し
function data = readDatastoreCSV(filename)
data = csvread(filename);
data = reshape(data, [1 x 1 1]); %xはデータの数
と定義しています。 この関数はcsvファイルのA列のみ使用した関数なのですが、今回使用するcsvファイルのデータシートは1~2401行、A~OI列(縦2401横399)まで存在するcsvを扱います。
このcsvデータのA列、B列...を各々1データとして取り扱いたいのですが、関数readDatastoreでどういった処理を行えばよいでしょうか?

  0 Comments

Sign in to comment.

Accepted Answer

Hirokazu Tanaka
Hirokazu Tanaka on 17 Aug 2018
「このcsvデータのA列、B列...を各々1データとして取り扱いたい」というところもう少し詳しく教えてください。
CNNということはデータは imageDatastore で処理されてますか?imageDatastore でカスタムの読み込み関数を定義して、csv ファイルを読み込んでいるということでしょうか?
また、csvファイルには 399 列のデータがあり、それぞれを別々の入力データとして学習させることが目的ですか?例えば、1つのファイルを列毎に別々の csvファイル 399個に分割して学習させる必要があるかもしれないところを、カスタムの読み込み関数をうまく定義して避けたいということでしょうか?

  2 Comments

Jo Sasaki
Jo Sasaki on 17 Aug 2018
readDatastoreCSVとは、CNNにおけるimageDatastore内のReadFcn: @readDatastoreImageの部分で画像の代わりにcsvデータを読み込むための関数です。
いままでは加速度計の値を読み込んでいたためエクセルファイルのA列にのみ数値が存在していました。 ですが、波形処理後のデータを入力データとして扱うため今回使用するcsvデータは399列のデータが存在しています。 この399列のデータそれぞれ1列ずつ抽出してを入力層に入力させたいと考えています。
なので、 csvファイルには 399 列のデータがあり、それぞれを別々の入力データとして学習させることが目的ですか?例えば、1つのファイルを列毎に別々の csvファイル 399個に分割して学習させる必要があるかもしれないところを、カスタムの読み込み関数をうまく定義して避けたいということでしょうか?
この目的であっています。 こちらでcsvの分割するのは、データの数が多いのでこの関数の中で完結させたいと考えています。 この方法以外になにかいい手法や提案がありましたら教えていただければありがたいです。
Hirokazu Tanaka
Hirokazu Tanaka on 17 Aug 2018
imageDatastore の今の機能では難しそうですね・・。 ファイルの分割自体は比較的単純なスクリプトで実現(読み込んで、1列毎に保存)できると思いますので、まずは分割してしまうのが近道かとは思いますが、どうでしょうか。

Sign in to comment.

More Answers (1)

Jo Sasaki
Jo Sasaki on 17 Aug 2018
Edited: Jo Sasaki on 17 Aug 2018
難しそうですか。。。 いまエクセルのマクロで分割コードを実行して、各列のcsvを連続で保存していたのですがどうしても遅さが気になってしまいますね。 こういった各列のデータを連続でcsvとして出力は可能でしょうか? 参考になるドキュメントなどあったら教えていただきたいです。。。

  3 Comments

Hirokazu Tanaka
Hirokazu Tanaka on 17 Aug 2018
エクセルのマクロは普段触らないのでわかりませんが、、MATLAB の方が早く処理できそうな気がします。
data = csvread('test.csv');
for ii=1:size(data,2)
filename = ['test_',num2str(ii),'.csv'];
csvwrite(filename, data(:,ii));
end
test.csv の複数列のデータを、各列別々のファイル test_1.csv - test_x.csv (xは列数)に保存するスクリプト例です。。
参考までエクセルのマクロと感覚で大丈夫なのでどれくらいの速度差か教えてください。
Jo Sasaki
Jo Sasaki on 18 Aug 2018
実践したところMATLAB約25秒、マクロ10分以上と大きく差がでました。 マクロ自体最適化されたコードかどうかも微妙なのですが、断然MATLABのほうが早そうですね。 ご回答ありがとうございました。
Hirokazu Tanaka
Hirokazu Tanaka on 18 Aug 2018
良かったです。そんなに差が出るもんなんですね。

Sign in to comment.

Sign in to answer this question.