这是一个可能的 MATLAB 解决方案。
1) 假数据
为了测试我的代码,我首先必须生成一些与您的实际数据相似的假数据。处理真实数据时可以跳过此部分。
len = 50;
%# random dates inbetween these two
dt_start = datenum('2013-06-22 19:17:00');
dt_end = datenum('2013-06-22 19:23:00');
dt = sort(dt_start + rand(len,1)*(dt_end-dt_start));
%# create the columns
ID = repmat(int32(104885), [len 1]);
Date = cellstr(datestr(dt, 'mm/dd/yyyy'));
Time = cellstr(datestr(dt, 'HH:MM:SS'));
EE = rand(len,1);
%# combine columns into a cell array
C = [num2cell(ID), Date, Time, num2cell(EE)];
%# create a "table" for convenience, and export to CSV file
t = cell2table(C, 'VariableNames',{'ID', 'Date', 'Time', 'EE'})
writetable(t, 'data.csv')
%# cleanup
clear len dt_start dt_end dt ID Date Time EE C t
以下是我为本示例生成的数据的摘录:
t =
ID Date Time EE
______ ____________ __________ _________
104885 '06/22/2013' '19:17:19' 0.95808
104885 '06/22/2013' '19:17:22' 0.72305
104885 '06/22/2013' '19:17:31' 0.86481
104885 '06/22/2013' '19:17:33' 0.52325
.
.
104885 '06/22/2013' '19:22:37' 0.5167
104885 '06/22/2013' '19:22:39' 0.53815
104885 '06/22/2013' '19:22:41' 0.27151
104885 '06/22/2013' '19:22:54' 0.37826
104885 '06/22/2013' '19:22:59' 0.51215
2) 时间间隔中的频率计数
我从 CSV 文件中读取数据,然后应用类似于您链接到的 the post 中使用的过程。在这种情况下,时间间隔长度是您可以指定的参数(10分钟间隔、1小时等)
%# load data from CSV
t = readtable('data.csv', 'Format','%d %s %s %f', 'Delimiter',',', ...
'ReadVariableNames',true, 'FileType','text');
%# convert date/time columns to serial date number
dt = datenum(strcat(t.Date , {' '}, t.Time), 'mm/dd/yyyy HH:MM:SS');
%# desired interval window-size (expressed in units of days).
%# Here I am using a 2 minutes interval
interval = 2/(24*60); % (24 hours per day, 60 min per hour)
% bin datetimes into specified intervals
dt_binned = fix(dt/interval)*interval;
% count frequencies in each interval
[dt_unique,~,dt_unique_idx] = unique(dt_binned);
counts = accumarray(dt_unique_idx, 1);
freq = [cellstr(datestr(dt_unique)) num2cell(counts)]
结果:
freq =
'22-Jun-2013 19:16:00' [ 7]
'22-Jun-2013 19:18:00' [21]
'22-Jun-2013 19:20:00' [12]
'22-Jun-2013 19:22:00' [10]
所以我们在第一个时间间隔(从 19:16 到 19:18)发生了 7 个事件,在第二个事件发生了 21 个事件,依此类推。您可以轻松地调整代码以更改间隔长度。