(我希望我的数学词汇更发达)
我有一个网站。在那个网站上是一个视频。当用户观看视频时,一些javascript存储他们到目前为止在视频中获得的距离。当他们停止观看视频时,会存储该秒数。不幸的是,当js执行此操作时,没有任何模式。
因此,如果有人正在观看视频,我们可能会看到以下内容:
3
6
8
10
12
16
另一个人可能会立即感到无聊:
1
3
此数据全部存储在同一个地方,匿名。因此,包含所有这些信息的排序表将如下所示:
1
3
3
6
8
10
12
16
最后,存储视频开始的次数。在这种情况下,它将是2
。
所以。如何在视频播放的所有时间内获得平均“高时间”(视频中最远的点)?
我知道如果我们每秒都有一个值:
1
2
3
4
5
6
7
...
14
15
16
1
2
3
然后我们可以计算值并除以播放次数:
(19) / 2 = 9.5
或者如果数据是否均匀,比如以5为增量,那么我们可以将其计数并将其乘以5(在示例中,我们会有一些精度损失,但没关系):
5
10
15
5
(4) * 5 / 2 = 10
所以看起来我有一个可以工作的一般功能:
count * 1/d = avg
其中d
是数字的密度(在上例中以5秒为增量,1/5
)。
有没有办法从一组有效的随机数中导出密度d
?
答案 0 :(得分:2)
为什么不保留上次提供的时间,并保持平均值?如果你要么扔掉,要么只关注最后一个数字,看起来你可能只是对这些数字进行平均。
您可能还想查看术语standard deviation,因为这可能不是最有用的衡量标准。如果你也有标准偏差,它可以帮助你意识到你的平均值为7,但它主要由1和15组成。
如果您必须拥有所有数据,就像您建议的那样,我会尝试更多地考虑这一点。我并不完全确定如何将值与其附带的所有先前值相关联。你总是知道输出数字的顺序吗?如果是这样的话,我想我知道你可以推导出“最后一个”的方法,这可能会有点计算成本。
如果你只有一个整数序列,我想你可以增加每个值(以指数方式?)来“补偿”后来的值'包含'早期值的事实。我仍然在研究这个想法,但也许它会给别人一个种子。如果你对这些总和求平均值,然后取这个平均值的base2 logarithm怎么办?这是否提供任何有用的指标?这应该将后面的值“加权”到它们补偿早期值之和的点。我想。
在python-esk中:
sum = 0
numberOf = 0
for node in nodes:
sum = sum + node.value ^ 2
numberOf = numberOf + 1
weightedAverage = log(sum/numberOf, 2)
print weightedAverage
print "Thanks Brian"
答案 1 :(得分:1)
我认为@ brian-stiner在他的一条评论中走在正确的轨道上。
从以下内容开始:
1
3
3
6
8
10
12
16
将其转换为数字和计数。
1, 1
3, 2
6, 1
8, 1
10, 1
12, 1
16, 1
然后从头到尾阅读,发现所有发生的点比任何剩余点更频繁。
3, 2
16, 1
计算差异。
3, 1
16, 1
你估计停车位。
这将不是无偏估计。但是如果JavaScript独立地不一致并且人数很多,则偏差应该相当小。
这是不对的,但它足够接近政府的工作。
答案 2 :(得分:0)
要获得每个用户观看的总时间,您将解析从最小到最大的列表。如果您有4个视图,则会查看列表,直到您发现不再有4个相同的数字,最后一个数字,其中4个相同的数字是第一个视图的最大值。然后你会找到3个相同的数字何时停止,依此类推。例如:
4次观看数据: 1111222233334445566778
4个并排的观点:
1 1 1 1
2 2 2 2
3 3 3 3< - 第一视图最大为3秒
4 4 4 < - 第二视图最大为4秒
5 5
6 6
7 7&lt; - 第三视图最大为7秒
8 < - 第四视图max是8秒
编辑 - 哦,我刚注意到他们不统一。在这种情况下,移动平均线可能是您最好的选择。
答案 3 :(得分:0)
假设增量总是在5左右,有些丢失,有些则更长或更短。那么完全做到这一点并不容易(可能吗?)。我的建议是:计算类似'移动计数'的东西。与moving average类似。
所以,对于第二个7:计算有多少数字是5,6,7,8或9并除以5.这将让你很好地猜测有多少人观看了第7秒。对第二个10做同样的事。差异将接近于第二个7到10之间留下的人数。
答案 4 :(得分:0)
值的数量大致对应于javascript发送值的时间段数(如果视频停止时间附有必须的时间,则减去1/2,因为它的时刻在时间间隔内是随机的)。 / p>
如果所有客户都有类似的间隔并且您知道它们,则可以使用:
SELECT (COUNT(*) - 0.5) * 5.0 / (SELECT counter FROM countertable)
FROM ticktable
5.0
是这里帖子之间的间隔。
请注意,它甚至不会查看值:您也可以只存储&#34;滴答&#34;。
答案 5 :(得分:-1)
在最长时间内,您可以在字段上使用MAX()
。也许就像......
SELECT MAX(play_time) AS maxTime FROM video
哪会给你一个人播放视频的时间最长。
如果您想要其他内容,例如AVG()
,那么您将需要更复杂的查询,按用户收集等等。
MySQL还包含一个名为STDDEV()
和STD()
的标准偏差函数,它也可以为您提供帮助。