如何检测和过滤时间序列数据中的峰值?

时间:2018-06-25 15:50:53

标签: python python-3.x pandas time-series

我有一个这样的用户登录熊猫数据框:

    id     datetime_login 
    646  2017-03-15 15:30:25
    611  2017-04-14 11:38:30
    611  2017-05-15 08:49:01
    651  2017-03-15 15:30:25
    611  2017-03-15 15:30:25
    652  2017-03-08 14:03:56
    652  2017-03-08 14:03:56
    652  2017-03-15 15:30:25
    654  2017-03-15 15:30:25
    649  2017-03-15 15:30:25
    902  2017-09-09 15:00:00
    902  2017-02-13 16:39:53
    902  2017-11-15 12:00:00
    902  2017-11-15 12:00:00
    902  2017-09-09 15:00:00
    902  2017-05-15 08:48:47
    902  2017-11-15 12:00:00

绘制登录名后:

df.datetime_login = df.datetime_login.apply(lambda x: str(x)[:10])
df.datetime_login = df.datetime_login.apply(lambda x: date(int(x[:4]), int(x[5:7]), int(x[8:10])))


fig, ax = subplots()
df.datetime_login.value_counts().sort_index().plot(figsize=(25,10), colormap='jet',fontsize=20)
  1. 如何在我的绘图中检测时间序列数据中的峰值?

  2. 如何将时间序列数据中的峰值过滤到阵列中?

我试图:

import peakutils
indices = peakutils.indexes(df, thres=0.4, min_dist=1000)
print(indices) 

但是,我得到了:

TypeError: unsupported operand type(s) for -: 'datetime.date' and 'int'

但是,我得到了:

1 个答案:

答案 0 :(得分:1)

哪里 df.datetime_login.value_counts().sort_index().plot(figsize=(25,10), colormap='jet',fontsize=20)个图:

enter image description here

让我们尝试以下操作,您需要使用value_counts返回的系列而不是原始的df peakutils.indexes

df_counts = df.datetime_login.value_counts().sort_index()
df_counts[peakutils.indexes(df_counts, thres=0.4, min_dist=1000)]

输出:

2017-03-15 15:30:25    6
Name: datetime_login, dtype: int64