按天计算受欢迎程度的公式?

3
我有一个基本上是日历的应用程序,用户可以为每天输入事件。现在我必须找到最好的方法来展示整个月份的日历,同时突出显示最繁忙的日子。
显然,颜色是这里的选择,但我想知道你们会怎么做。我已经进行了头脑风暴,以下是我的想法:
1.获取一天中的最大事件数,然后将其除以可用颜色的数量。因此,如果一天有30个事件,我们有3种颜色,第一种颜色将从0到9,接下来从10到19,最后从20开始。
2.查找平均值并将其除以“颜色/ 2”,因此如果平均值为10个事件,我们有3种颜色,则数学计算为10/1.5 = 6.66,这意味着第一个颜色范围将从0到6.66,第二个颜色范围将从6.67到13.32,最后一个颜色范围将从13.33开始。
然而,我不确定这是否是解决此问题的最佳方法。两者都是线性的,如果我们的平均值约为20且最大值为100个事件,则第一个方法可能会导致混乱,只会显示两种颜色。
我不是统计学家,但我认为这个问题可以用百分位数和四分位数来解决,但我不确定如何实现。
谢谢。
2个回答

1
我建议使用对数分布算法来构建标签云,这在编程中经常使用。标签代表日期,标签计数代表该日期的事件数量。
一个很好的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>';
}

0

几个想法:

  1. 确保颜色均匀分布:按照每天的N个事件排序,并将相等数量的天数分配给每种颜色。
  2. 将每天的N个事件映射到连续的颜色范围内的值,而不是使用离散的桶。例如,将0到max(events)映射到RGB值。
  3. 找到非线性分布 - 例如正态分布、指数分布等。你要找的公式是累积分布函数(CDF)(参见http://en.wikipedia.org/wiki/Cumulative_distribution_function),它可以用于将每天的事件数转换为百分位数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接