利用MATLAB批量完成科研数据处理

利用常用软件批量完成科研数据处理

tags:

  • MATLAB
  • 科研软件

相信平时大家都有这种时候,测了一大堆数据,也知道该怎么去处理,但是样品很多,数据量很大,然后对于每个样品去处理的时候都得用软件进行重复的处理,才能得出有效的信息。这样不仅工作量相当大,自己也会感到非常厌烦。一般我碰到这种时候是不能忍的,所以就通过手头能用到的东西,简化了工作。今天就给大家介绍一下我自己的解决办法。

首先我们看一下我们要处理的数据内容,是一堆excel文件,而excel文件里面的数据是仪器的的测试数据。

《利用MATLAB批量完成科研数据处理》 Fig.1. 文件夹中的数据

首先我们要做的就是把数据读取出来,这里会用到MATLAB里的几个函数,首先是dir函数,此函数的作用是获取特定地址文件夹中的文件列表。用法如下:

path='D:\my_data\test data\IV data\20171116\'
%此处文件地址改为需要的文件夹路径
Files = dir(strcat(path,'*.xlsx'));

其中Files是我们命名的变量,而path是文件夹的地址,strcat是横向连接字符的函数,这样相当于是把文件列表中的每个xlsx文件的地址和名称获取了,然后存到了一个数组中,数组名为Files。
然后,我们需要知道这个数组的长度,所以应用length函数获取数组长度

LengthFiles = length(Files);

接下来就是对每一个文件读取其中的数据,并且将其存到一个与原始数据大小一致的二维矩阵中。

for i = 1:LengthFiles
    xls_data = xlsread(strcat(path,Files(i).name));
    file_name=Files(i).name;
    [m,n]=size(xls_data);
end

上面代码中应用循环结构,对每个文件都采用数据读取函数,MATLAB中excel文件的读取函数是xlsread,其用法与dir函数类似,都需要strcat函数来对文件的地址和名称连接,然后作为函数的参数。最后的[m,n]是用于获取每个文件的数据的大小,其中m是数据的行数,n是数据的列数。

到这里我还只是获取文件的数据和文件的地址吗,名字而已。未对数据做出任何处理。下面我们以画图为例,展示批量处理数据然后每个数据输出图片。这里我的每个文件数据中还有很多列有用的,相当于每个文件中又有单独的几个器件的数据。这样我还需要一层循环结构:

for j=3:3:n-1
       set(gcf,'visible','off')%设置图片弹窗为不可见
       zeroparameter = xls_data((m+1)/2,j+1);%取X轴零点处的y坐标
       y = xls_data(:,j+1)- zeroparameter;%将纵坐标归零
           
       plot(xls_data(:,j),abs(y));%画图
       semilogy(xls_data(:,j),abs(y));%将y轴变量取对数
       axis([-2,2,1E-12,1E-4]);%设定y轴的范围为固定的,此处设定坐标轴的语句必须置于将y轴变量取对数的语句之后 
       xlabel('Voltage(V)');% x轴名称
       ylabel('Current(A)');
       k=j/3;
       saveas(gcf,[path,strcat(file_name,'-',num2str(k)),'.jpg']);%输出图形到指定地址
       delete(gcf);
   end

这里大家可以自行修改,比如我的文件里面还有独立的组,那我就还需要一层循环,但是如果你的文件里只有一组数据,那你就不需要在加一层循环。

我这里是每三列数据为一组,所以我这里循环的步长是j=3:3:n-1,但是其实你也可以根据自己的来定。还有我的数据测试了之后会在零点处有一点漂移,所以我对妹一组数据都会获取零点处的漂移量,然后将整体的数据都平移,使得零点归零。

还有一些对图片属性设置的,比如我把图片的弹框设置为不可见,这样在循环过程中画图的时候就不会弹框,不然MATLAB是默认会弹框的,其实我们这种画图的方法其实是调用MATLAB本身的画图函数,然后遍历每个文件的每组数据,将其画图,然后将画出的图保存到指定的地址。所以上面关于图片的属性其实都可以在保存图片之前进行修改设定。像我上面的情形就是对图片设置了一下,首先对y轴的变量值进行了绝对值处理,然后对y轴取对数,相当于图片中y轴显示为对数坐标的模式。然后我还设定了一下坐标的范围,这些都是可以设定,大家也可以去搜索命令,对图片进行自己需要的参数设定。

最后,是代码整体的效果。测试可行的结果以下面的代码为准!

path='D:\my_data\test data\IV data\20171116\';
%此处文件地址改为需要的文件夹路径

Files = dir(strcat(path,'*.xlsx'));
LengthFiles = length(Files);
%%将每次测试不同器件的数据都画图
for i = 1:LengthFiles
    xls_data = xlsread(strcat(path,Files(i).name));
    file_name=Files(i).name;
    [m,n]=size(xls_data);
    %%将每个器件多次重复测试的数据都画图
    for j=3:3:n-1
       set(gcf,'visible','off')%设置图片弹窗为不可见
       zeroparameter = xls_data((m+1)/2,j+1);%取X轴零点处的y坐标
       y = xls_data(:,j+1)- zeroparameter;%将纵坐标归零
           
       plot(xls_data(:,j),abs(y));%画图
       semilogy(xls_data(:,j),abs(y));%将y轴变量取对数
       axis([-2,2,1E-12,1E-4]);%设定y轴的范围为固定的,此处设定坐标轴的语句必须置于将y轴变量取对数的语句之后 
       xlabel('Voltage(V)');% x轴名称
       ylabel('Current(A)');
       k=j/3;
       saveas(gcf,[path,strcat(file_name,'-',num2str(k)),'.jpg']);%输出图形到指定位置
       delete(gcf);
   end
end
clear;
clc;

以上代码均为原创,转载请告知。
另外,由于本人没有啥编程背景,所以水平有限。有和疏漏或不当的地方还请轻拍指正。向各位虚心请教!
欢迎关注微信公众号(ID:薛定谔不在家)获取更多科研软件技巧的文章~

《利用MATLAB批量完成科研数据处理》 image.png

    原文作者:yetwanng
    原文地址: https://www.jianshu.com/p/f77463bc1a73
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞