有哪些良好的方法可以跨时间压缩数据?

4

我有一个对象数组,包含timevalue属性。看起来像这样:

更新: 数据集使用的是时间戳而不是时间字符串

[{datetime:1383661634, value: 43},{datetime:1383661856, value: 40}, {datetime:1383662133, value: 23}, {datetime:1383662944, value: 23}]

该数组比这个例子要大得多,可能有6位数长度。我打算建立一个图表来表示这个数组。由于明显的原因,我不能使用所有数据来构建这个图表(value vs time);所以我需要在时间上进行归一化。

所以这是主要问题-这些对象的时间戳中没有趋势;因此我需要动态选择时间槽,在这些槽中,我可以平均值或显示该槽中的对象数量。

如何计算用户友好的时间槽,例如每分钟、小时、天、8小时等。我希望最多只有25个时间槽,显示在图表上。

我希望这可以帮助您理解我的观点。


@HighPerformanceMark 我的错。我手动准备了一个演示数据集。 - Omkar Khair
@sled 看起来很接近,但我需要跨时间范围的桶,这几乎是排序的。您提出的方案将非常有助于创建值的桶。我说得对吗? - Omkar Khair
使用区间作为值怎么样?例如:从根节点开始扩展的第一个分支将是(max_date - min_date)/2,然后您将项目分成这两个区间并再次分支和分割,完成后开始合并... - sled
1
还有另一个想法,你可以尝试使用k最近邻算法在时间轴上构建聚类。 - sled
你是否正在寻找一个将日期时间映射到桶编号的函数? - mbeckish
显示剩余3条评论
3个回答

1
你可以将日期/时间转换为纪元,并使用numpy.histogram获取范围:
import random, numpy
l = [ random.randint(0, 1000) for x in range(1000) ]
num_items_bins, bin_ranges = numpy.histogram(l, 25) 
print num_items_bins
print bin_ranges

给出:

[34 38 42 41 43 50 34 29 37 46 31 47 43 29 30 42 38 52 42 44 42 42 51 34 39]
[    1.      40.96    80.92   120.88   160.84   200.8    240.76   280.72
   320.68   360.64   400.6    440.56   480.52   520.48   560.44   600.4
   640.36   680.32   720.28   760.24   800.2    840.16   880.12   920.08
   960.04  1000.  ]

问题不在于日期时间转换。我已经有了结果时刻。更多的是在将100,000个值压缩到时间轴上,以使它更加用户友好。也许我会在问题中更新数据中的时刻。 - Omkar Khair
我不确定。我如何在我的数据上使用它。我需要在时间尺度上进行压缩。基本上是将结果显示为每分钟/每天/每小时等的时间段/桶。 - Omkar Khair
将直方图应用于时期,稍后可以将其转换为天、分钟等。 - perreal

1

不知道你的价值观本质是什么,所以很难说如何压缩展示价值观。这取决于你可以舍弃什么和不能舍弃什么。以下是一些想法:

  1. 直方图
  2. 蜡烛图

0

这是JSON和DateTime以文本形式传输吗?

为什么不将日期作为长整型(Int64)进行传输,并使用一种方法来转换/从DateTime进行转换?根据所使用的语言,您可以使用以下实现:

这样做可以节省大量空间,因为字符串每个字符占用16位,而长整型时间戳只需64位。


问题不在于日期时间转换。我已经得到了结果时刻。更多的是关于在时间轴上压缩100,000个值,使其更加用户友好。 - Omkar Khair

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