如何“扩展”python时间序列

时间:2014-06-19 18:14:12

标签: python

我有一些数据我必须在我的应用程序中处理,我不知道如何以合理可理解的方式进行处理。

我们有一系列未确定的数据,这些数据的间隔时间不同。间隔可以是每小时,每天,每周...例如:

hourly_data = {
    'interval': '1h',
    'data': [('05/10/2014 00:00', 10),
             ('05/10/2014 01:00', 11),
             ('05/10/2014 03:00', 6),
             ('05/10/2014 04:00', 8),
             ...
            ]
}

daily_data = {
    'interval': '1d',
    'data': [('05/10/2014 00:00', 87),
             ('05/11/2014 00:00', 73),
             ('05/12/2014 00:00', 86),
             ('05/13/2014 00:00', 99),
             ...
            ]
}

我需要比较这些数据。假设数据是工厂的生产,我需要计算每小时完成的每日生产总量的百分比。我需要遍历hourly_data列表,并将该值与daily_data中的相应值进行比较。

复杂的部分来自于我们不知道我们必须与这个系统“比较”多少系列(在这个例子中只有两个,但可以更多),也不知道每个系列将具有的间隔。我所知道的是,我必须按照我描述的系统循环播放这个系列。

我想到的所有可能的解决方案都是愚蠢且绝对难以阅读的。你会如何面对这个算法?

修改

回答@ user3727843,间隔选项非常窄:每小时,每天,每周和每月。就这样。我想从数据中“学习”是完全随意的。我已经解释了百分比示例,因为它很容易理解,但我想建立任何一种关系。

我认为解决这个问题的最通用的方法是“扩展”数据以匹配最小的间隔。像这样:

expanded_data = [
    [('05/10/2014 00:00', 10), ('05/10/2014 00:00', 87)],
    [('05/10/2014 01:00', 11), ('05/10/2014 00:00', 87)],
    ....
    [('05/11/2014 16:00', 7), ('05/11/2014 00:00', 93)],
    [('05/11/2014 17:00', 11), ('05/11/2014 00:00', 93)],
    ....
]

1 个答案:

答案 0 :(得分:1)

我认为无论你怎么做,它都会有点混乱。很高兴知道可能的全系列数据(例如每年?还是按分钟数据?)。从那里你应该确定你在比较什么以及以什么单位。使用您的示例可以说您的基本比较将是相对于一整天每小时产生的百分比。您可以决定基本单位是每小时/每天。然后你在另一个单位获得的任何东西,你可以转换为小时和天。

您的问题是我们需要知道您想要从数据中“学习”什么。它只是上面提到的示例百分比吗?或者它是更多类似的项目。当你说“比较多个系列”时,你的意思是创建一个差异表吗?我们需要有关您的问题的更多信息才能真正提供帮助,但希望这能为您提供一个开始。

编辑:

将时间序列扩展到最小单位是一个良好的开端。至于建立关系,你只需要有很多if语句。你可以做的是开发一些基本的数学函数来比较你的系列。这些可能包括两个系列中的数据关联百分比,差异等。您还可以使用集合来比较数据或获得差异:

a = set(seriesA)
b= set(seriesB)
a.difference(b)  #ref: https://docs.python.org/2/library/sets.html

一旦开发了许多这些功能,您可以简化其余的比较代码,只需调用所需的操作即可构建比较。