白天受欢迎的公式?

时间:2011-02-01 20:56:16

标签: php mysql statistics popularity

我有一个基本上是日历的应用程序,用户可以输入每天的事件。现在我必须找到最好的方式来显示整个月的日历,同时突出最忙碌的日子。

显然颜色是这里的选择,但我想知道你们会怎么做。我已经集思广益了以下内容:

  • 获取max个活动一天,然后将其除以可用颜色的数量。因此,如果有一天有30个事件,我们有3种颜色,第一个将是0到9,以下是10到19,最后一个是20。
  • 找到average并将其除以colors/2,所以如果平均值为10个事件且我们有3种颜色,则数学将为10 / 1.5 = 6.66,这意味着第一个颜色范围将是从0到6.66,第二个从6.67到13.32,最后一个从13.33开始。

但是,我不确定这是解决这个问题的最佳方法。两者都是线性的,如果我们的平均值大约为20且最大值有100个事件,则第一个可能会使事情变得非常混乱,只会出现两种颜色。

我不是静态的,但我认为这个问题可以通过百分位数和四分位数来解决,但我不确定如何实现它。

感谢。

2 个答案:

答案 0 :(得分:1)

我建议使用一种用于构建标签云的logarthmic分布算法。标签是你的日子,标签的数量是一天的事件数量。

PHP和Python的良好实现(尚未正确检查)似乎是this one。这是一个例子:

$tags = array(
    array('tag'   => 1,
          'count' => 10),
    array('tag'   => 2,
          'count' => 30),
    array('tag'   => 3,
          'count' => 5),
    array('tag'   => 4,
          'count' => 5));
$colours = array('green', 'yellow', 'red');
foreach(tagcloud($tags, 0, count($colours) - 1, 0) as $d) {
  echo  '<div style="background-color:' . $colours[floor($d['size'])] . '">Day: '.$d['tag'].' Events: '.$d['count'].'</div>';
}

答案 1 :(得分:0)

一些想法:

  1. 确保均匀分布颜色:订购N个事件/天并为每种颜色指定相同的天数
  2. 将N个事件/天映射到连续颜色范围内的值,而不是使用离散桶。例如,0到max(事件)到RGB值。
  3. 找到一个非线性分布 - 例如,正态分布,指数等。您正在寻找的公式是CDF(请参阅http://en.wikipedia.org/wiki/Cumulative_distribution_function),它可用于将事件数/天转换为百分