时间间隔的数据分析

时间:2014-05-24 01:30:02

标签: excel matlab datetime group-by time-series

我正在处理我最近为研究收集的大量数据。我想知道一天中用户活动的时间。以下是我的少量数据集快照:

enter image description here

我申请了以下代码以了解时间间隔登录活动。

=SUMPRODUCT(--(HOUR(I2:I185143)>=K4*24),--(HOUR(I2:I185143)<L4*24))

结果写在N栏中。到目前为止,我相信的所有作品。但是我的问题是如果我想每10分钟而不是每一小时进行一次分析。

例如8.00 am-8.10 am之间发生了多少次登录。我目前找到every hour interval的方法。如果你能用excel或matlab帮助我,我会很高兴的。

enter image description here

3 个答案:

答案 0 :(得分:0)

如果你使用数组函数Frequency()

,这在excel中相对简单

采取的一些步骤:

我假设你想按天的时间排序每天

所以time列是data_array,是Frequency的第一个参数(查看excel帮助)

对于bin数据,你必须得到一个开头时间 添加以下每个10分钟以下的垃圾箱(= 1/24/6),以便在几天内完成6小时

所以一整天共有144个箱子

然后选择bin和数组旁边的列段,使用= Frequency(data_array,bin_array)编辑它,不要忘记输入

答案 1 :(得分:0)

好的,我在下面的剧情简介中得到了答案。

enter image description here

答案 2 :(得分:0)

这是一个可能的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个事件,依此类推。您可以轻松调整代码以更改间隔长度。