Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从时间序列中提取模式_Python_Python 3.x_Pandas_Numpy - Fatal编程技术网

Python 从时间序列中提取模式

Python 从时间序列中提取模式,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,我有以下数据集,一个熊猫数据帧: Score min max Date Loc 0 2.757 0.000 2.757 2020-07-04 11:00:00 3 2.723 2.723 0.000 2020-07-04 14:00:00 8 2.724 2.724 0.000 2020-07-04 19:00:00 11 2.752 0.000 2.752 2020-07-04 22:00:00 13 2

我有以下数据集,一个熊猫数据帧:

      Score   min   max               Date
Loc
0    2.757  0.000  2.757 2020-07-04 11:00:00
3    2.723  2.723  0.000 2020-07-04 14:00:00
8    2.724  2.724  0.000 2020-07-04 19:00:00
11   2.752  0.000  2.752 2020-07-04 22:00:00
13   2.742  2.742  0.000 2020-07-05 00:00:00
15   2.781  0.000  2.781 2020-07-05 02:00:00
18   2.758  2.758  0.000 2020-07-05 05:00:00
20   2.865  0.000  2.865 2020-07-05 07:00:00
24   2.832  0.000  2.832 2020-07-05 11:00:00
25   2.779  2.779  0.000 2020-07-05 12:00:00
29   2.775  2.775  0.000 2020-07-05 16:00:00
34   2.954  0.000  2.954 2020-07-05 21:00:00
37   2.886  2.886  0.000 2020-07-06 00:00:00
48   3.101  0.000  3.101 2020-07-06 11:00:00
53   3.012  3.012  0.000 2020-07-06 16:00:00
55   3.068  0.000  3.068 2020-07-06 18:00:00
61   2.970  2.970  0.000 2020-07-07 00:00:00
64   3.058  0.000  3.058 2020-07-07 03:00:00
其中:

分数是一个非常基本的趋势,最小值和最大值是分数的局部最小值和最大值

Loc是该行x轴上的值,日期是图表上该行的日期

绘制时,该数据如下所示:

我试图从我的代码中检测红色框中的数据,以便在其他数据集中检测它。基本上,我正在寻找的是一种从我的代码中设置该数据段定义的方法,以便可以从其他数据中检测到它

到目前为止,我只在图表上标记了局部最大值和最小值黄点和红点,我还知道如何用自己的话定义该模式,我只需要从代码中执行:

定义最小值/最大值点非常远的时间,使其与上一个最小值/最大值点具有更高的值

然后,找出局部极小值和极大值的点是否非常接近,它们的值是否相差不大。简言之,当一个强劲的增长,如果紧随其后的是一个范围内的分数没有上升或下降很多


我希望问题足够清楚,如果需要,我可以提供更多细节。我不知道它是否适用于Numpy或任何其他库。

我认为动态时间扭曲dtw可能适合您。我也用过类似的东西。本质上,它允许您评估时间序列的相似性

以下是我所知道的python实现:

fastdtw dtw dtw python 这里有一个很好的解释它是如何工作的

您可以使用它来比较传入的时间序列与红色框中的数据的相似程度

例如:

# Event were looking for
event = np.array([10, 100, 50, 60, 50, 70])

# A matching event occurring
event2 = np.array([0, 7, 12, 4, 11, 100, 51, 62, 53, 72])

# A non matching event
non_event = np.array([0, 5, 10, 5, 10, 20, 30, 20, 11, 9])

distance, path = fastdtw(event, event2)
distance2, path2 = fastdtw(event, non_event)
这将产生一组指数,其中两个时间序列最匹配。此时,您可以通过您喜欢的方法进行评估。我粗略地看了一下这些值之间的相关性

def event_corr(event,event2, path):
    d = []
    for p in path:
        d.append((event2[p[1]] * event[p[0]])/event[p[0]]**2)

    return np.mean(d)

print("Our event re-occuring is {:0.2f} correlated with our search event.".format(event_corr(event, event2, path)))
print("Our non-event is {:0.2f} correlated with our search event.".format(event_corr(event, non_event, path2)))
产生:

我们的事件重复发生与我们的搜索事件相关度为0.85


我们的非事件与搜索事件的相关性为0.45。

使用相关或互相关函数听起来很简单。numpy和scipy中都有实现。尝试一下,如果您有具体问题,请随时更新。谢谢您的回答!关于这件事你有什么例子吗?我刚刚开始,你应该提供一个最小的工作示例。我给了你一个开始四处看看的提示,这样你就可以开始了。希望您可以在numpy或scipy文档中找到一些示例进行尝试。如果您有具体的实现问题或错误,那么您可以打开另一个问题,或者更新此问题。我发现了互相关等的含义,但我不确定这是否是我在这个阶段需要的。基本上,从我的理解来看,交叉关联意味着在数据集中找到一种模式。在本例中,我有一个我想要搜索的模式,但我不知道如何用代码定义该模式,这是主要问题,只需使用数据集中的数据即可。然后尝试将其与其他数据集相匹配。试试看。如果你遇到了一个特定的问题,那么请多多询问你的答案。这很有趣!我唯一的问题是我需要以某种方式规范化这些数据,原因如下:模式可能与我在问题上附加的模式完全相同,但值不同。因此,在这种情况下,模式中的值范围为2到3;但是,如果图案的形状相同,但值从13到15,例如,会发生什么情况?根据其他数据不是事件时的情况,可以通过将数据集除以在某个时间段内的变化(例如,应用dtw之前的data/max-min)来进行规范化。事实上,通过变量进行规范化可能是一个很好的解决方案,尽管在某些情况下可能仍然有点不准确,所以我想看看是否有更准确的方法。让我对DTM进行一些研究,看看它是否能与我的案例一起工作。顺便问一下,你用过树桩吗?对我来说,这听起来像是一个很酷的工作;我认为这在很大程度上取决于我如何规范我的数据,但这可能是一种可行的方法。我将用DTW测试它,看看我得到了什么,如果我有任何问题,我将提出另一个问题。非常感谢你!还有一件事:假设有一个模式A,例如红色框中的模式。然后我有另一个数据集。我想在数据集B中找到模式A,因为数据集B很大,所以模式A只能在数据集的某些部分找到,所以我只需要从数据集B中提取找到模式A的区域;可能吗?