MATLAB Answers

1

csvデータシートの抽出

Jo Sasaki さんによって質問されました 2018 年 8 月 16 日
最新アクティビティ Hirokazu Tanaka さんによって コメントされました 2018 年 8 月 18 日
現在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 件のコメント

サインイン to comment.

2 件の回答

回答者: Hirokazu Tanaka 2018 年 8 月 17 日
 採用された回答

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

  2 件のコメント

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

サインイン to comment.


回答者: Jo Sasaki 2018 年 8 月 17 日
編集済み: Jo Sasaki 2018 年 8 月 17 日

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

  3 件のコメント

Hirokazu Tanaka 2018 年 8 月 17 日
エクセルのマクロは普段触らないのでわかりませんが、、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 2018 年 8 月 18 日
実践したところMATLAB約25秒、マクロ10分以上と大きく差がでました。 マクロ自体最適化されたコードかどうかも微妙なのですが、断然MATLABのほうが早そうですね。 ご回答ありがとうございました。
Hirokazu Tanaka 2018 年 8 月 18 日
良かったです。そんなに差が出るもんなんですね。

サインイン to comment.