Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MATLAB对多个excel文件中的数据进行平均_Excel_Matlab_Average_Missing Data - Fatal编程技术网

使用MATLAB对多个excel文件中的数据进行平均

使用MATLAB对多个excel文件中的数据进行平均,excel,matlab,average,missing-data,Excel,Matlab,Average,Missing Data,我有多个excel文件,如下图所示(每小时数据)。我想得到每天的平均值(例如从第二天17:00到16:00)。我只知道一点Matlab。目前我的解决方案如下,但有一些问题 读取每个excel文件并将数据存储在变量中 将所有数据合并到单个变量中 找到17:00的行号(n)。为此,我获得了每行的datenum,然后只需搜索(查找)对应于17:00的datenum 平均每两行之间的数据(n(i)) 如果原始数据是正确的,它就可以正常工作。但问题如下 17:00的一些数据丢失。因此,当它尝试查找17:0

我有多个excel文件,如下图所示(每小时数据)。我想得到每天的平均值(例如从第二天17:00到16:00)。我只知道一点Matlab。目前我的解决方案如下,但有一些问题

  • 读取每个excel文件并将数据存储在变量中
  • 将所有数据合并到单个变量中
  • 找到17:00的行号(n)。为此,我获得了每行的datenum,然后只需搜索(查找)对应于17:00的datenum
  • 平均每两行之间的数据(n(i))
  • 如果原始数据是正确的,它就可以正常工作。但问题如下

  • 17:00的一些数据丢失。因此,当它尝试查找17:00的行时,将出现错误
  • 当我有超过100个excel文件时,它运行得非常慢
  • 有谁能提出一些解决问题的建议吗?我更喜欢使用Matlab,因为它是我所知道的唯一工具。非常感谢

    编辑1:提供的代码

    以下是获取日平均值的代码。我已将所有数据合并到文件“summary_file.xls”中(此部分的代码未显示)

    如下表所示

  • 17:00、9月1日和9月2日之间的平均时间没有问题
  • 对于缺少数据的天数,我希望在17:00之前获得所有可用数据的平均值
  • 示例:由于缺少9月3日17:00的数据,因此无法获得9月2-3日的平均值。对于这种情况,我希望获得17:00之前(即9月3日9:00之前)所有数据的平均值
  • 然后,对于9月3-4日,我想计算18:00开始的平均值
  • 对于丢失所有数据的天数,只需将所有数据设置为0或标记为不可用即可
  • [num,txt,raw]=xlsread('summary_file.xls');%read文件

    date_num = num(:,11); % read the column containing date number
    starting = '2003/09/05-17:00'; %  starting time
    starting = datenum(starting,formatIn_2); % convert starting time to date number
    ending = '2003/09/09-17:00';%  ending time
    ending = datenum(ending,formatIn_2); %convert ending time to date number
    
    s = starting:1:ending; % All date number with 17:00
    
    %% find the row number with 17:00
    for i = 1:ending-starting+1
        [a(i) b(i)] = find(date_num==s(i));
    end
    %% Store the averaged data in variable p
    for i = 1:ending-starting
        p(i,:) = mean(num(a(i):a(i+1)-1,:));
    end
    
    样本输入数据-

    +------+-------+----------+-------+-------+-------+-------+-------+-------+ | 2003 | 1-Sep | 15:00 | 100.2 | 29 | 70.5 | 3.903 | 728 | 0 | +------+-------+----------+-------+-------+-------+-------+-------+-------+ | 2003 | 1-Sep | 16:00 | 100.1 | 29.31 | 70.7 | 4.328 | 611.8 | 0 | | 2003 | 1-Sep | 17:00 | 100.1 | 29.64 | 67.06 | 3.719 | 434.8 | 0 | | 2003 | 1-Sep | 18:00 | 100.1 | 29.67 | 64.4 | 3.005 | 172.4 | 0 | | 2003 | 1-Sep | 19:00 | 100.1 | 29.06 | 68.22 | 2.292 | 19.89 | 0 | | 2003 | 1-Sep | 20:00 | 100.2 | 28.43 | 74.7 | 2.436 | 0.428 | 0 | | 2003 | 1-Sep | 21:00 | 100.2 | 27.92 | 76.2 | 1.931 | 0.006 | 0 | | 2003 | 1-Sep | 22:00 | 100.3 | 27.67 | 77.3 | 1.825 | 0.007 | 0 | | 2003 | 1-Sep | 23:00 | 100.4 | 27.55 | 77.9 | 1.622 | 0.007 | 0 | | 2003 | 1-Sep | 24:00:00 | 100.4 | 27.69 | 77.8 | 0.863 | 0.008 | 0 | | 2003 | 2-Sep | 1:00 | 100.4 | 27.55 | 78.3 | 0.879 | 0.008 | 0 | | 2003 | 2-Sep | 2:00 | 100.3 | 27.05 | 82.1 | 1 | 0.016 | 0.762 | | 2003 | 2-Sep | 3:00 | 100.3 | 26.41 | 86.8 | 0.805 | 0.006 | 0 | | 2003 | 2-Sep | 4:00 | 100.2 | 26.6 | 85.5 | 0.522 | 0.011 | 0.508 | | 2003 | 2-Sep | 5:00 | 100.2 | 25.53 | 83.8 | 2.158 | 0.011 | 0 | | 2003 | 2-Sep | 6:00 | 100.3 | 24.5 | 86.6 | 2.711 | 0.016 | 0 | | 2003 | 2-Sep | 7:00 | 100.4 | 24.85 | 86.9 | 2.562 | 0.016 | 4.318 | | 2003 | 2-Sep | 8:00 | 100.6 | 21.11 | 94 | 8.15 | 9.96 | 26.67 | | 2003 | 2-Sep | 9:00 | 100.6 | 22.23 | 91.9 | 5.065 | 31.67 | 0.254 | | 2003 | 2-Sep | 10:00 | 100.6 | 23.51 | 88.8 | 5.742 | 39.16 | 0.254 | | 2003 | 2-Sep | 11:00 | 100.6 | 24 | 87.7 | 4.494 | 97.8 | 0 | | 2003 | 2-Sep | 12:00 | 100.6 | 24.69 | 85.3 | 4.709 | 142.2 | 0 | | 2003 | 2-Sep | 13:00 | 100.5 | 25.57 | 82.8 | 5.66 | 259.1 | 0 | | 2003 | 2-Sep | 14:00 | 100.4 | 25.69 | 81.9 | 5.634 | 157.5 | 0 | | 2003 | 2-Sep | 15:00 | 100.3 | 26.18 | 79.1 | 5.564 | 308.2 | 0 | | 2003 | 2-Sep | 16:00 | 100.3 | 26.08 | 78.3 | 6.283 | 135.3 | 0 | | 2003 | 2-Sep | 17:00 | 100.3 | 25.75 | 81.2 | 4.595 | 55.68 | 0.762 | | 2003 | 2-Sep | 18:00 | 100.3 | 25.01 | 84.5 | 4.843 | 55.21 | 1.778 | | 2003 | 2-Sep | 19:00 | 100.3 | 25.15 | 86.1 | 1.433 | 22.43 | 0 | | 2003 | 2-Sep | 20:00 | 100.3 | 24.98 | 86.1 | 1.985 | 0.301 | 0 | | 2003 | 2-Sep | 21:00 | 100.3 | 24.75 | 85.1 | 0.712 | 0.009 | 0 | | 2003 | 2-Sep | 22:00 | 100.4 | 24.76 | 85.3 | 1.546 | 0.011 | 0 | | 2003 | 2-Sep | 23:00 | 100.5 | 24.92 | 84.5 | 1.186 | 0.008 | 0 | | 2003 | 2-Sep | 24:00:00 | 100.5 | 24.96 | 84.9 | 1.31 | 0.007 | 0 | | 2003 | 3-Sep | 1:00 | 100.5 | 25 | 85.3 | 0.702 | 0.012 | 0 | | 2003 | 3-Sep | 2:00 | 100.5 | 24.99 | 86 | 0.35 | 0.017 | 0 | | 2003 | 3-Sep | 3:00 | 100.4 | 25.07 | 86.1 | 0.69 | 0.008 | 0 | | 2003 | 3-Sep | 4:00 | 100.3 | 24.92 | 86.5 | 1.347 | 0.011 | 0 | | 2003 | 3-Sep | 5:00 | 100.3 | 25.27 | 85.5 | 0.834 | 0.009 | 0 | | 2003 | 3-Sep | 6:00 | 100.3 | 24.97 | 86.9 | 0.627 | 0.012 | 0 | | 2003 | 3-Sep | 7:00 | 100.3 | 24.8 | 87.7 | 0.755 | 0.108 | 0 | | 2003 | 3-Sep | 8:00 | 100.4 | 25.54 | 85 | 0.202 | 37.11 | 0 | | 2003 | 3-Sep | 9:00 | 100.4 | 26.72 | 81 | 1.853 | 219.4 | 0 | | 2003 | 3-Sep | 18:00 | 100.2 | 29.67 | 56.39 | 2.856 | 456.2 | 0 | | 2003 | 3-Sep | 19:00 | 100.2 | 30.17 | 53.66 | 2.204 | 266 | 0 | +------+-------+----------+-------+-------+-------+-------+-------+-------+ +------+-------+----------+-------+-------+-------+-------+-------+-------+ |2003年9月1日15:00 100.2 29.5 3.903 728 0| +------+-------+----------+-------+-------+-------+-------+-------+-------+ |2003年9月1日16:00 100.1 29.31 70.7 4.328 611.8| |2003年9月1日17:00 100.1 29.64 67.06 3.719 434.8| |2003年9月1日18:00 100.1 29.67 64.4 3.005 172.4 0| |2003年9月1日19:00 100.1 29.06 68.22 2.292 19.89 0| |2003年9月1日20:00 100.2 28.43 74.7 2.436 0.428| |2003年9月1日21:00 100.2 27.92 76.2 1.931 0.006 0| |2003年9月1日22:00 100.3 27.67 77.3 1.825 0.007 0| |2003年9月1日23:00 100.4 27.55 77.9 1.622 0.007 0| |2003年| 9月1日| 24:00:00 | 100.4 | 27.69 | 77.8 | 0.863 | 0.008 | 0| |2003年9月2日1:00 100.4 27.55 78.3 0.879 0.008 0| |2003年9月2日2:00 100.3 27.05 82.1 1 0.016 0.762| |2003年9月2日3:00 100.3 26.41 86.8 0.805 0.006 0| |2003年9月2日4:00 100.2 26.6 85.5 0.522 0.011 0.508| |2003年9月2日5:00 100.2 25.53 83.8 2.158 0.011 0| |2003年9月2日6:00 100.3 24.5 86.6 2.711 0.016 0| |2003年9月2日7:00 100.4 24.85 86.9 2.562 0.016 4.318| |2003年| 9月2日| 8:00 | 100.6 | 21.11 | 94 | 8.15 | 9.96 | 26.67| |2003年9月2日9:00 100.6 22.23 91.9 5.065 31.67 0.254| |2003年9月2日10:00 100.6 23.51 88.8 5.742 39.16 0.254| |2003年9月2日11:00 100.6 24 87.7 4.494 97.8| |2003年9月2日12:00 100.6 24.69 85.3 4.709 142.2| |2003年9月2日13:00 100.5日25.57日82.8日5.66日259.1日| |2003年9月2日14:00 100.4 25.69 81.9 5.634 157.5 0| |2003年9月2日15:00 100.3 26.18 79.1 5.564 308.2| |2003年9月2日16:00 100.3 26.08 78.3 6.283 135.3 0| |2003年9月2日17:00 100.3 25.75 81.2 4.595 55.68 0.762| |2003年9月2日18:00 100.3 25.01 84.5 4.843 55.21 1.778| |2003年| 9月2日| 19:00 | 100.3 | 25.15 | 86.1 | 1.433 | 22.43 | 0| |2003年| 9月2日| 20:00 | 100.3 | 24.98 | 86.1 | 1.985 | 0.301 | 0| |2003年9月2日21:00 100.3 24.75 85.1 0.712 0.009 0| |2003年9月2日22:00 100.4 24.76 85.3 1.546 0.011 0| |2003年| 9月2日| 23:00 | 100.5 | 24.92 | 84.5 | 1.186 | 0.008 | 0| |2003年| 9月2日| 24:00:00 | 100.5 | 24.96 | 84.9 | 1.31 | 0.007 | 0| |2003年9月3日1:00 100.5日85.3日0.702日0.012日0| |2003年9月3日2:00 100.5日24.99日86日0.35日0.017日| |2003年9月3日3:00 100.4 25.07 86.1 0.69 0.008 0| |2003年9月3日4:00 100.3日24.92日86.5日1.347日0.011日0| |2003年9月3日5:00 100.3 25.27 85.5 0.834 0.009 0| |2003年9月3日6:00 100.3日24.97日86.9日0.627日0.012日0| |2003年9月3日7:00 100.3 24.8 87.7 0.755 0.108 0| |2003年9月3日8:00 | 100.4 | 25.54 | 85 | 0.202 | 37.11 | 0| |2003年9月3日9:00 100.4 26.72 81 1.853 219.4 0| |2003年9月3日18:00 100.2 29.67 56.39 2.856 456.2 0| |2003年9月3日19:00 100.2 30.17 53.66 2.204 266 0| +------+-------+----------+-------+-------+-------+-------+-------+-------+
    当您使用Matlab的
    xlsread
    时,它会打开和关闭Excel COM服务器,因此将其与多个文件一起使用会降低执行速度。请阅读Matlab Central,其中解释了如何避免打开和关闭Excel COM服务器


    至于缺少的数据,也许你可以用
    find(time17:00,'first')中的数据插值17:00

    我喜欢使用MATLAB,但如果你不介意我问的话,你考虑过
    %% Setup params and data
    start_hour = 17;
    [num,txt,raw] = xlsread('summary_file.xls');
    
    datenums = NaN(size(num,1),1);
    for count = 1:size(num,1)
        year1 = cell2mat(raw(count,1));
        date1 = cell2mat(raw(count,2));
        time1 = cell2mat(raw(count,3));
        date_str = strcat( num2str(year1) , '-', date1 );
        datenums(count) = datenum( date_str, 'yyyy-dd-mmm')  + time1(:);
    end
    
    %% Take care of conditions
    firstdata_start_hour = round(24*cell2mat(raw(1,3)));
    if firstdata_start_hour > 17
        start1 =  floor(datenums(1))  + (start_hour/24);
    elseif firstdata_start_hour < 17
        start1 =  floor(datenums(1))-1  + (start_hour/24);
    else
        start1 = datenums(1);
    end
    
    ind1 = floor(datenums-start1) + 1;
    
    %% Start Processing
    num_items = size(num,2)-3;
    num_days = max(ind1);
    
    bins = NaN(num_days,num_items);
    for count1 = 1:size(bins,2)
        for count2 = 1:size(bins,1)
            bins(count2,count1) = mean(num(find(ind1==count2),count1+3));
        end
    end
    bins(isnan(bins))=0;
    average_nums = bins
    
    +-----------+---------------+------+-------------+------------+-----------+--------------+
    |   Date    | Pressure(kPa) | Temp | Humidity(%) | W-spd(m/s) | Radiation | Rainfall(mm) |
    +-----------+---------------+------+-------------+------------+-----------+--------------+
    | 8/10/2009 | 100.1         | 25.8 | 79.1        | 1.4        | 82.6      | 1.7          |
    | 8/11/2009 | 100.2         | 27.5 | 75.7        | 1.9        | 173.8     | 0.0          |
    | 8/12/2009 | 100.1         | 28.4 | 73.5        | 2.1        | 177.1     | 0.0          |
    | 8/13/2009 | 100.0         | 28.4 | 73.2        | 2.5        | 197.4     | 0.0          |
    | 8/14/2009 | 100.0         | 28.5 | 73.5        | 2.2        | 151.2     | 0.0          |
    | 8/15/2009 | 100.2         | 27.3 | 75.4        | 1.2        | 96.2      | 0.4          |
    | 8/16/2009 | 100.2         | 27.1 | 75.5        | 1.4        | 122.6     | 0.0          |
    | 8/17/2009 | 100.2         | 27.2 | 75.7        | 1.5        | 158.3     | 0.2          |
    | 8/18/2009 | 100.2         | 27.5 | 72.2        | 1.4        | 186.4     | 0.0          |
    | 8/19/2009 | 100.3         | 28.4 | 68.4        | 1.9        | 186.9     | 0.0          |
    | 8/20/2009 | 100.3         | 28.1 | 69.2        | 2.0        | 184.8     | 0.0          |
    | 8/21/2009 | 100.3         | 26.5 | 75.8        | 1.3        | 122.3     | 0.6          |
    +-----------+---------------+------+-------------+------------+-----------+--------------+