我为某人制作了一些软件,以便跟踪目前有多少人在景点内。当有人进入或离开时,我在我的数据库中得到一个标记此事件的条目。如果不跟踪个人情况,是否可以仅使用我的数据来估算此景点的平均访客持续时间?
我在12:00到12:05之间跨越五分钟的数据的示例部分如下所示:
+----------+-----+-----+
| Time | In | Out |
+----------+-----+-----+
| 12:00:00 | 1 | 0 |
| 12:01:04 | 0 | 1 |
| 12:01:05 | 0 | 1 |
| 12:01:05 | 0 | 1 |
| 12:01:06 | 0 | 1 |
| 12:01:13 | 1 | 0 |
| 12:01:13 | 1 | 0 |
| 12:01:14 | 1 | 0 |
| 12:01:14 | 1 | 0 |
| 12:02:56 | 0 | 1 |
| 12:02:56 | 0 | 1 |
| 12:02:56 | 0 | 1 |
| 12:02:56 | 0 | 1 |
| 12:04:13 | 1 | 0 |
| 12:04:13 | 1 | 0 |
| 12:04:14 | 1 | 0 |
| 12:04:14 | 1 | 0 |
+----------+-----+-----+
在一天开始时,景点中没有人,所以上述数据足以计算在给定时间内有多少人。是否还有足够的信息来估计平均访问者花费的时间?
答案 0 :(得分:1)
严格地说,我认为你没有足够的信息,因为你不能把“退出”与“收入”配对。但是,总的来说,我认为你可以简单地计算:
(SELECT SUM(IF(out=1,time,0))) - SELECT (SUM(IF(in=1,time,0))) / SELECT count(*)
但是,你必须确保你考虑的行是成对的(输出与输入相同)。
这有点棘手,但我希望它能奏效......
答案 1 :(得分:1)
是的,有足够的数据,但您应该注意一些问题。
假设您有2位访客。访客1在12:00进入并在12:30(30分钟)退出,而访客2在12:20进入并退出和13:20(60分钟)。平均访问时间为45分钟((30 + 60)/ 2)。
您实际上不必知道哪个出口对应于哪个条目。如果你让他们混淆了你将有访客1进入12:00并退出13:20(80分钟)和访客2进入12:20并退出12:30(10分钟)...但平均仍然是45分钟((80 + 10)/ 2)。
所以第一个解决方案可能是:
但如果某些访问者在未正确更新数据库的情况下进入或退出,则可能会出现问题。在这种情况下,您将有一些额外的条目或出口,您无法匹配。除非您随机匹配条目和退出,否则您可能会稍微偏离计算。
另一种计算相同平均值的更好方法是:
根据上面提供的样本数据,您将获得平均入境时间12:10((12:00 + 12:20)/ 2),平均出口时间为12:55((12:30 + 13:20) )/ 2)。平均访问时间0:45(12:55-12:10)......与方法1相同。
第二种方法更好,因为它不会受到不匹配数据的影响。它确实表示即使数据不完善也可以使用提供的数据计算的最佳估计值。
如果数据良好(完全匹配现实生活中发生的事情,每次进入和退出都正确注册),那么这两种解决方案在数学上都是准确的,并提供相同的结果。