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

問題は、これから、イベントがあった場合は「1」、イベントがなかった場合は「0」を持つベクトル (1 日 15 分ごとに 24*4 = 96 要素を意味する) を作成したいということです。

したがって、出力は 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) 

読みやすくするために、セミコロンで 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 に答える