0

我有一个数据聚类问题。我有一系列由时间戳标记的事件,我试图计算每 15(也是 30)分钟块中有多少事件。我正在使用数据透视表在excel 中执行此操作。我可以管理 15 分钟的块,但问题是我需要,如果有一个空块,我需要在那个块中为零。相反,excel根本不显示那个块。

那么如何让空块出现呢?

相关问题我正在使用这个块在matlab中创建一个向量,到目前为止我还没有想出简单的方法来做到这一点。我有点挣扎如何轻松地将数据透视表的结果从 excel 导入到 matlab。

样本输入:

30/11/12 12:42 AM
30/11/12 12:47 AM
30/11/12 12:56 AM
30/11/12 1:01 AM
30/11/12 1:52 AM
30/11/12 1:57 AM
30/11/12 2:38 AM
30/11/12 2:39 AM
30/11/12 6:00 AM
30/11/12 6:09 AM
30/11/12 6:16 AM
30/11/12 6:23 AM
30/11/12 6:31 AM

数据透视表将给出

12:30 1
12:45 2
1:00 1
1:45 2
2:30 2
6:00 2
6:15 2
6:30 1

问题是,我想由此创建一个向量(全天每 15 分钟表示 24*4 = 96 个元素),如果有事件,则为“1”,如果没有事件,则为“0”。

所以输出看起来像从 00:00 到 6:30。

输出:

 vector = (0,0,1,1;1,0,0,1;0,0,1,0;0,0,0,0;0,0,0,0;0,0,0,0;1,1,1) 

分号每小时分配一次只是为了更容易阅读

如何解决这个问题?有什么提示吗?这在 Matlab 中是否更容易解决,但时间戳不像在 excel 中那么容易。

4

1 回答 1

1

我不确定如何解决您的 Excel 问题。但这里是如何在 Matlab 中做到这一点:

%Data
dateStrings = {...
    '30/11/12 12:42 AM' ...
    '30/11/12 12:47 AM' ...
    '30/11/12 12:56 AM' ...
    '30/11/12 1:01 AM' ...
    '30/11/12 1:52 AM' ...
    '30/11/12 1:57 AM' ...
    '30/11/12 2:38 AM' ...
    '30/11/12 2:39 AM' ...
    '30/11/12 6:00 AM' ...
    '30/11/12 6:09 AM' ...
    '30/11/12 6:16 AM' ...
    '30/11/12 6:23 AM' ...
    '30/11/12 6:31 AM' ...
    };
%Convert data into datenums.  This is Matlab's standard numeric date encoding.
%    in units of days, starting at year 0000.
dateNumbers = datenum(dateStrings, 'dd/mm/yy HH:MM PM');

%Parametrically define the boundaries where you want to count
aggregationInterval = 1/24/4;  %15 minutes, in days\
aggregationStart = datenum('2012-11-30 00:00','yyyy-mm-dd HH:MM');
aggregationStop = datenum('2012-11-30 03:00','yyyy-mm-dd HH:MM');

%Use parameters to construct a vector of counting boundaries
aggregationBoundaries = aggregationStart:aggregationInterval:aggregationStop;

%The function histc does all the work, and returns a vector of counts
counts = histc(dateNumbers, aggregationBoundaries);

%This creates a cell to give you something to look at,  Instead of "disp" you coult use "xlswrite" to put this back into Excel.
disp([...
    cellstr(datestr(aggregationBoundaries','yyyy-mm-dd HH:MM')) ...
    num2cell(counts)])

这显示

'2012-11-30 00:00'    [0]
'2012-11-30 00:15'    [0]
'2012-11-30 00:30'    [1]
'2012-11-30 00:45'    [2]
'2012-11-30 01:00'    [1]
'2012-11-30 01:15'    [0]
'2012-11-30 01:30'    [0]
'2012-11-30 01:45'    [2]
'2012-11-30 02:00'    [0]
'2012-11-30 02:15'    [0]
'2012-11-30 02:30'    [2]
'2012-11-30 02:45'    [0]
'2012-11-30 03:00'    [0]

如果您的日期已经在 Excel 中,您还可以查看xlsread将值读取到 Matlab 中,而无需任何文本格式。

于 2013-04-30T15:04:53.070 回答