在MYSQL中计算跨行的值分布的最佳方法是什么(或者可能是ruby中的某些计算值)。
示例是通过站点发送的消息的长度。所以我们可以查看所有消息,看看这个消息长100个字符,等等。
然后,对于给定的消息,我想以%返回,比如“此消息长度为90%”与其他消息相比。
注意事项
也许在ruby中有一些stats package / gem或者有什么好的例子吗?谢谢!
答案 0 :(得分:2)
您可以计算数据集的标准差,然后给出数据点,告诉您平均值与标准偏差的距离。
这样你可以说95%等等。
退房:
正态分布:http://www.regentsprep.org/Regents/math/algtrig/ATS2/NormalLesson.htm
答案 1 :(得分:0)
计算标准偏差和数据平均值以及进行反向正常查找的问题在于您正在做出非常严格的限制性假设。如果您的数据不正常怎么办?在很多情况下,这是一个非常糟糕的假设。
理想情况下,您希望回答此问题非参数,即无需依赖某些分布式假设。一种方法是使用MySQL视图:
http://www.mysqltutorial.org/mysql-views-tutorial.aspx
假设您要计算表中每行的消息长度的百分位数,您可以尝试创建一个MySQL视图,对于第i行,计算小于或等于消息长度的其他消息长度的数量对于我的行。由于每次插入时表都会更新一次,因此查找速度很快。
如果MySQL视图的计算速度太慢,您也可以尝试将以下逻辑插入数据访问层的写入中:
因为你的问题在排名中非常线性,我们可以通过使用后一种方法将O(n ^ 2)复杂度降低到O(n)。希望这会有所帮助。
此外,如果您有兴趣进行其他操作而不仅仅是百分位数,请查看此博客,了解有关规范化,缩放,排名等的信息。它包含一些关于数据发生情况的良好图形,尽管它是书面的对于c#:
http://www.redowlconsulting.com/Blog/post/2011/07/28/StatisticalTricksForLists.aspx