【问题标题】:Resampling a time series of events + duration into concurrent events将时间序列的事件 + 持续时间重新采样为并发事件
【发布时间】:2014-03-15 01:31:19
【问题描述】:

我有两列;事件开始的时间和该事件的持续时间。像这样:

time, duration
1:22:51,41
1:56:29,36
2:02:06,12
2:32:37,38
2:34:51,24
3:24:07,31
3:28:47,59
3:31:19,32
3:42:52,37
3:57:04,58
4:21:55,23
4:40:28,17
4:52:39,51
4:54:48,26
5:17:06,46
6:08:12,1
6:21:34,12
6:22:48,24
7:04:22,1
7:06:28,46
7:19:12,51
7:19:19,4
7:22:27,27
7:32:25,53

我想创建一个折线图来显示全天发生的并发事件的数量。将时间重命名为start_time 并添加一个计算end_time 的新列很容易(假设这是下一步)——我不太确定我理解的是如何在之后重新采样这些数据,所以我可以绘制并发图表。

我想我想以类似的东西结束(但按分钟计算):

time, events
1:30:00,1
2:00:00,2
2:30:00,1
3:00:00,1
3:30:00,2

【问题讨论】:

  • 你的数据集是什么格式的?
  • 原来是 json,我导入到 pandas timeseries

标签: python matplotlib pandas


【解决方案1】:

首先让它成为一个实际的时间戳:

df['time'] = pd.to_datetime('2014-03-14 ' + df['time'])

现在您可以获得结束时间:

df['end_time'] = df['time'] + df['duration'] * pd.offsets.Minute(1)

获取开放事件的一种方法是结合开始时间和结束时间、重采样和累积和:

In [11]: open = pd.concat([pd.Series(1, df.time),  # created add 1
                           pd.Series(-1, df.end_time)  # closed substract 1
                           ]).resample('30Min', how='sum').cumsum()

In [12]: open
Out[12]:
2014-03-14 01:00:00    1
2014-03-14 01:30:00    2
2014-03-14 02:00:00    1
2014-03-14 02:30:00    1
2014-03-14 03:00:00    2
2014-03-14 03:30:00    4
2014-03-14 04:00:00    2
2014-03-14 04:30:00    2
2014-03-14 05:00:00    2
2014-03-14 05:30:00    1
2014-03-14 06:00:00    2
2014-03-14 06:30:00    0
2014-03-14 07:00:00    3
2014-03-14 07:30:00    2
2014-03-14 08:00:00    0
Freq: 30T, dtype: int64

【讨论】:

  • 这很好,可以帮助我解决其他不相关的问题。谢谢。
【解决方案2】:

您可以创建一个列表,其中包含值为“时间”、“事件”的字典项

显然,您需要以不同方式处理时间数据类型的评估和操作,但您可以执行以下操作:

 event_bucket = []
 time_interval = (end_time - start_time) / num_of_buckets
 for ii in range(num_of_buckets):
      event_bucket.append({"time":start_time + ii*time_interval,"events":0})

 for entry in time_entry:
      for bucket in event_bucket:
            if  bucket["time"] >= entry["start_time"] and bucket["time"] <= entry["end_time"]:
                  bucket["events"] += 1

如果您使num_of_buckets 更大,则可以使图表更精确。

【讨论】:

    猜你喜欢
    • 2018-08-27
    • 2023-03-07
    • 2018-03-14
    • 1970-01-01
    • 2018-06-24
    • 2019-07-21
    • 2018-06-05
    • 2013-11-27
    • 2018-12-18
    相关资源
    最近更新 更多