如何统计每日各时段房间在馆人数?(支持R/Python/Excel/PowerBI)
解决方案:按15分钟间隔统计房间实时在馆人数
问题背景
我需要统计每日不同时段内房间中的在馆人数,当有人员离开房间时需实时更新计数。核心需求是统计时间区间的重叠次数,且需按每15分钟的间隔进行检查,数据集以15分钟间隔记录人员的完整停留时长。我可熟练使用R、Python、Excel及PowerBI工具,寻求任一工具的解决方案。
数据集示例
| ID | Date | Start Time | End Time |
|---|---|---|---|
| 11111 | 09/01/21 | 0900 | 1700 |
| 22222 | 09/01/21 | 1000 | 1300 |
| 33333 | 09/01/21 | 0900 | 1200 |
| 44444 | 09/02/21 | 0900 | 1700 |
| 55555 | 09/02/21 | 1200 | 1500 |
| 66666 | 09/02/21 | 0945 | 1400 |
| 77777 | 09/02/21 | 1000 | 1230 |
| 88888 | 09/02/21 | 0900 | 1445 |
| 99999 | 09/02/21 | 1300 | 1700 |
可行解决方案
R语言方案(实际采用)
经过测试,Langtang提供的R语言方案高效且贴合需求,我在项目中采用了近似的实现方式。核心逻辑是先将时间转换为标准datetime格式,再按日期分组计算每个时间点的区间重叠次数:
library(data.table) # 转换为data.table格式,并创建datetime类型的sdate和edate列 setDT(dt)[ ,c("sdate","edate"):=lapply(.SD, \(x) lubridate::mdy_hm(paste(Date,x))), .SDcols = c("Start Time", "End Time") ] # 按日期分组,计算每个结束时间点对应的在馆人数,最后清理临时列 dt[, in_room:=sapply(edate, \(x) sum(sdate<x & edate>x)), by=Date] [,`:=`(sdate=NULL, edate=NULL)]
其他工具思路参考
- Python:可以借助
pandas库处理时间数据,先生成按15分钟间隔排列的时间序列,再针对每个时间点统计与之重叠的停留区间数量。 - Excel:可通过Power Query生成15分钟间隔的时间轴,再用
COUNTIFS函数统计每个时间点的在馆人数;也可使用数组公式直接计算区间重叠次数。 - PowerBI:先创建包含15分钟间隔的日期表,再编写DAX公式,通过筛选每个时间点对应的有效停留区间来统计人数。
致谢
感谢Langtang和Maël提供的有效解决方案!
内容的提问来源于stack exchange,提问作者brandooo23
相关产品推荐
相关产品推荐

