csvファイルの一括インポートおよび一括処理
Show older comments
2点ほどお伺いしたいです.
➀PC内にある対象者1人分の10試技のデータを一括でインポートする方法はありますか?現在,一つのデータずつインポートしているのでかなり時間がかかっています.for文かなにか使えばよいんでしょうか...
②取り込んだ10試技のデータを一つのコードで一気に処理したいです.for文を試したのですがよくわかったため,毎回の処理で名前を変えています.具体的なコードも教えていただけますと助かります.
初歩的な質問で申し訳ありません.どなたかよろしくお願い致します.
Answers (1)
例えば、1列目に要素番号、2列目にランダムな数が5つ並んだcsvファイルが3つあり、それぞれファイル名がfile1.csv、 file2.csv、 file3.csvとなっているとします。以下のコードでサンプルファイルを生成できます。
% サンプルデータ
numfiles = 3;
x = (1:5)';
for k = 1:numfiles
y = rand(size(x)); % 乱数
mydata = table(x,y);
myfilename = sprintf('file%d.csv', k);
writetable(mydata,myfilename);
end
そして、そのファイルを連続で読み込み、ここでは簡単に、二列目の平均を算出したいとします。Rさんのcsvファイルのヘッダーがどうなっているかわかりませんが、例えば上で生成したcsvファイルはreadtable関数でテキスト ファイルから table に読み取ることができ、二列目のデータ(ここでは変数y)に対して平均化処理を適用することができます。
% ファイルのインポート,平均処理
clear
numfiles = 3;
mydata = cell(1, numfiles);
ave = zeros(1,numfiles);
for k = 1:numfiles
myfilename = sprintf('file%d.csv', k);
mydata{k} = readtable(myfilename);
ave(k) = mean(mydata{k}.y);
end
13 Comments
R
on 6 Jun 2020
Takumi
on 7 Jun 2020
そのフォルダ内には処理したいデータ22個以外に他のファイルが入っていますか? また処理したいファイル名はA60、D40といったように拡張子を持たないファイル名ですか?
R
on 7 Jun 2020
これでいかがでしょう?
% サンプルデータ
numfiles = 3;
x = (1:5)';
for k = 1:numfiles
y = rand(size(x)); % 乱数
mydata = table(x,y);
myfilename = sprintf('file%d', k);
writetable(mydata,myfilename);
end
フォルダ内のファイルはdir関数で参照できますので、それを利用します。
Files = dir;
Files = Files(~ismember({Files.name}, {'.', '..'})); % カレントディレクトリと親ディレクトリを除く
numfiles = length(Files);
mydata = cell(1, numfiles);
ave = zeros(1,numfiles);
for k = 1:numfiles
myfilename = Files(k).name;
mydata{k} = readtable(myfilename);
ave(k) = mean(mydata{k}.y);
end
Takumi
on 7 Jun 2020
回答の仕方が間接的で良くないような気がしてきました。
具体的に処理したいファイル(例えばA60とD40)を添付していただくことはできますか?
R
on 7 Jun 2020
Takumi
on 7 Jun 2020
データを拝見しましたところ、実際の数値データは6行目から始まるようですが、いつもどのようにインポートされてますか?またどのようにインポートしたいですか?
R
on 7 Jun 2020
Takumi
on 7 Jun 2020
csvファイルの最初の5行は読み飛ばすことにする場合、次のようにすると良いと思います。
ここではデータの一列目がTime、二列目がforceだと想定しています。
Files = dir('*.csv');
numfiles = length(Files);
mydata = cell(1, numfiles);
for k = 1:numfiles
myfilename = Files(k).name;
mydata{k} = readtable(myfilename,'HeaderLines',5);
Time = mydata{k}.Var1;
force = mydata{k}.Var2;
%%% ここに望む処理を追加 %%%
end
R
on 8 Jun 2020
Takumi
on 8 Jun 2020
最初に示しておけばよかったのですが、、、以下のリンクを参考にもう少し具体的に、何をどのように(どんなファイルを、どんなコードで)したら、そのようなエラーが出るのか教えていただけますか?
特にこちらでも同じ状況を完全に再現できると非常に回答しやすいです。
R
on 8 Jun 2020
Takumi
on 8 Jun 2020
Time = mydata{k}.VarName1;
ではなくて
Time = mydata{k}.Var1;
ではないでしょうか。
Categories
Find more on 標準ファイル形式 in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!