필터 지우기
필터 지우기

merge multiple csv file to one and draw a boxplot

조회 수: 10 (최근 30일)
Venkatkumar
Venkatkumar 2022년 11월 1일
편집: Venkatkumar M 2022년 11월 4일
Hi ,
I have multiple csv files namely(50hz.csv, 10hz.csv,no_mot.csv) in E/data directory
Each file has 2 columns of data
I want to take 1st and 2nd column from all files and save as single csv.
and draw a box plot like this below pic
in place of
F1 50 hz
GOOD 1st column of 50hz.csv
BAD 2nd column of 50hz.csv
F2 10 hz
GOOD 1st column of 10hz.csv
BAD 2nd column of 10hz.csv
F2 10 hz
GOOD 1st column of no_mot.csv
BAD 2nd column of no_mot.csv
Could anyone from the community please hep me resolve this the problem?
Also I have attched sample data csv file here.
  댓글 수: 2
Khushboo
Khushboo 2022년 11월 4일
Hello,
Do you want to concatenate all the csv files such that final one has 2 columns with data concatenated column wise?
Venkatkumar M
Venkatkumar M 2022년 11월 4일
편집: Venkatkumar M 2022년 11월 4일
@Khushboo No I want to combine all csv file into one which has 6 columns.

댓글을 달려면 로그인하십시오.

답변 (1개)

Eshan Patel
Eshan Patel 2022년 11월 4일
Hey Venkatkumar,
I understand that your two objectives are to merge your CSV files into a single file and generate some boxplots from your original data.
To merge your files, you can use the following snippet of code:
load 50hz.csv;
load 10hz.csv;
load no_mot.csv;
mergedData = [X50; X10; no_mot];
save mergedData.csv;
This will save the required data into a file called "mergedData.csv" in your working directory.
To plot the data as you have described, you can use the following snippet of code to plot all your data:
% unwrap data into a single column vector
plotData = [X50(:,1); X50(:,2); X10(:,1); X10(:,2); no_mot(:,1); no_mot(:,2)];
% make groupings for the boxplot
g1 = repmat({'F1-Good'}, 90, 1);
g2 = repmat({'F1-Bad'}, 90, 1);
g3 = repmat({'F2-Good'}, 90, 1);
g4 = repmat({'F2-Bad'}, 90, 1);
g5 = repmat({'F3-Good'}, 90, 1);
g6 = repmat({'F3-Bad'}, 90, 1);
g = [g1; g2; g3; g4];
% plot your data
subplot(1,3,1);
boxplot(plotData(1:180), g(1:180), 'Labels', {'Good', 'Bad'});
xlabel('F1');
subplot(1,3,2);
boxplot(plotData(181:360), g(181:360), 'Labels', {'Good', 'Bad'});
xlabel('F2');
subplot(1,3,3);
boxplot(plotData(361:end), g(361:end), 'Labels', {'Good', 'Bad'});
xlabel('F3');
Alternatively, you can use a loop to plot the data after making the column vector and groupings:
n = 3; %number of files
left = 1;
right = 180; %number of data points in each file
for i = 1:n
% plot the data here
subplot(1, n, i);
boxplot(plotData(left:right), g(left:right), 'Labels', {'Good', 'Bad'});
xlabel("F" + i);
% update left and right variables to plot the correct data
range = right - left;
left = right + 1;
right = left + range;
end
You can refer to the documentation for boxplot for more information at the following link:
  댓글 수: 1
Venkatkumar M
Venkatkumar M 2022년 11월 4일
편집: Venkatkumar M 2022년 11월 4일
X50=load ('50.csv');
X10=load('10.csv');
no_mot=load ('no_mot.csv');
mergedData = [X50;no_mot];
save mergedData.csv;
plotData = [X50(:,1); X50(:,2);X10(:,1); X10(:,2);no_mot(:,1); no_mot(:,2)];
n = 3; %number of files
left = 1;
right = 180; %number of data points in each file
for i = 1:n
% plot the data here
subplot(1, n, i);
boxplot(plotData(left:right), g(left:right), 'Labels', {'Good', 'Bad'});
xlabel("F" + i);
% update left and right variables to plot the correct data
range = right - left;
left = right + 1;
right = left + range;
end
Error using load
Unable to find file or directory '50.csv'.
error message:
Index exceeds the number of array elements. Index must not exceed 360.
X50=load ('50.csv');
X10=load('10.csv');
no_mot=load ('no_mot.csv');
mergedData = [X50;no_mot];
save mergedData.csv;
plotData = [X50(:,1); X50(:,2);X10(:,1); X10(:,2);no_mot(:,1); no_mot(:,2)];
g1 = repmat({'F1-Good'}, 90, 1);
g2 = repmat({'F1-Bad'}, 90, 1);
g3 = repmat({'F2-Good'}, 90, 1);
g4 = repmat({'F2-Bad'}, 90, 1);
g5 = repmat({'F3-Good'}, 90, 1);
g6 = repmat({'F3-Bad'}, 90, 1);
g = [g1; g2; g3; g4];
subplot(1,3,1);
boxplot(plotData(1:180), g(1:180), 'Labels', {'Good', 'Bad'});
xlabel('F1');
subplot(1,3,2);
boxplot(plotData(181:360), g(181:360), 'Labels', {'Good', 'Bad'});
xlabel('F2');
subplot(1,3,3);
boxplot(plotData(361:end), g(361:end), 'Labels', {'Good', 'Bad'});
xlabel('F3');
Error Message
Error using boxplot>assignUserLabels
There must be the same number of labels as groups or as the number of elements in X.
Error in boxplot>identifyGroups (line 1261)
assignUserLabels(labels,groupIndexByPoint,numFlatGroups,xlen,...
Error in boxplot (line 291)
identifyGroups (gDat,grouporder,positions,colorgroup,...
And both code doesn't plot 3rd graph.
You are combinning the csv files veritically that has 2 cloumns as a final file but i want to combine it in a way final output has 6 columns of data from all 3 file.
Could you please help me to reoslve the issue?

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Axis Labels에 대해 자세히 알아보기

제품


릴리스

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by