You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Matlab绘制24小时商场日均在店人数曲线?

解决24小时商场日均在店人数统计的Matlab方案

我之前处理过类似的24小时营业场所客流统计需求,这个问题的核心难点在于处理跨天的停留记录,再把多年数据按天拆分后计算时段均值。下面是一套便捷的实现流程:

1. 数据导入与格式确认

首先确保你的进店/离店时间被正确识别为Matlab的datetime类型:

% 导入数据(假设是CSV格式,可根据实际文件类型调整)
data = readtable('your_data_file.csv');
% 强制转换为datetime格式(如果导入时未自动识别)
data.intime = datetime(data.intime, 'InputFormat', 'dd-MM-yyyy HH:mm:ss');
data.outtime = datetime(data.outtime, 'InputFormat', 'dd-MM-yyyy HH:mm:ss');

2. 拆分跨天的停留记录

对于跨天的顾客(比如当天21:50进店,次日8:31离店),我们需要把单条记录拆成两条:一条覆盖当天剩余时长,另一条覆盖次日的停留时长:

% 筛选跨天记录(离店日期晚于进店日期)
cross_day_mask = days(data.outtime - data.intime) >= 1;
cross_day_data = data(cross_day_mask, :);

% 拆分第一条:进店时间到当天23:59:59
split1 = cross_day_data;
split1.outtime = datetime(date(split1.intime)) + hours(23) + minutes(59) + seconds(59);

% 拆分第二条:次日00:00:00到离店时间
split2 = cross_day_data;
split2.intime = datetime(date(split2.outtime));

% 合并拆分后的数据与非跨天数据
processed_data = [data(~cross_day_mask, :); split1; split2];

3. 生成全天的时间刻度(X轴)

我们可以按小时划分时段,也可以用更精细的间隔(比如15分钟),这里以小时为例:

% 生成一天24个小时的起始时间点
time_bins = datetime(0,1,1,0:23,0,0);
% 转换为小时数(方便后续插值计算)
time_bins_hours = hours(time_bins - datetime(0,1,1));

4. 按日期分组,统计单日各时段在店人数

通过事件法(进店+1,离店-1)计算单日各时段的累计人数,再批量处理所有日期:

% 提取每条记录的日期(用于分组)
processed_data.date = date(processed_data.intime);

% 初始化数组存储每天的时段人数
all_days_counts = [];
% 获取所有唯一日期
unique_dates = unique(processed_data.date);

for d = unique_dates'
    % 筛选当天的所有记录
    daily_data = processed_data(processed_data.date == d, :);
    
    % 生成事件序列:进店标记+1,离店标记-1
    events = [daily_data.intime; daily_data.outtime];
    count_changes = [ones(height(daily_data),1); -ones(height(daily_data),1)];
    
    % 按时间排序事件
    [sorted_events, idx] = sort(events);
    sorted_changes = count_changes(idx);
    
    % 计算累计在店人数
    cumulative_counts = cumsum(sorted_changes);
    
    % 转换为时间序列并插值到预设的时段上
    ts = timeseries(cumulative_counts, sorted_events);
    % 用最近邻插值更贴合实际人数变化(整数跳变)
    daily_counts = interp1(hours(ts.Time - datetime(d)), ts.Data, time_bins_hours, 'nearest', 0);
    
    all_days_counts = [all_days_counts; daily_counts];
end

5. 计算日均人数并绘图

最后对所有日期的时段人数取均值,生成可视化图表:

% 计算日均各时段人数
avg_hourly_counts = mean(all_days_counts, 1);

% 绘制图表
figure;
plot(time_bins_hours, avg_hourly_counts, '-o', 'LineWidth', 1.5);
xticks(0:23);
xticklabels({'00:00','01:00','02:00','03:00','04:00','05:00','06:00','07:00','08:00','09:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00','23:00'});
xlabel('一天中的时间');
ylabel('日均在店人数');
title('24小时商场日均在店人数变化');
grid on;

优化小贴士

  • 如果数据量极大,可以用groupsummary替代循环,提升运行效率;
  • 时间间隔可灵活调整,比如改成15分钟的话,执行time_bins = datetime(0,1,1,0:0.25:23.75,0,0);即可;
  • 若要更精准统计,可以把时间bins设为分钟级,再按小时聚合均值。

内容的提问来源于stack exchange,提问作者Rossonista

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:42:53