如何使用python检测时间序列数据中的多个高原和上升和下降

add*_*lor 6 python classification time-series matplotlib timeserieschart

分析自行车道的时间序列数据,我想知道每个高原、上升和下降的时间间隔。此处上传示例 csv 文件。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
import matplotlib.dates as mdates


df = pd.read_csv(r'C:\Data\Sample.csv', parse_dates=['dateTime'])
feature_used='Cycle_Alt'
print("Eliminating null values..")
df=df[df[feature_used].notnull()]

plt.figure(figsize=(8,6))
x=df['dateTime']        
y=df['Cycle_Alt']

plt.plot(x,y,c='b',linestyle=':',label="Altitude")
plt.xticks(rotation='vertical')
plt.gcf().autofmt_xdate()   
plt.legend(loc='best', bbox_to_anchor=(1, 0.5))
Run Code Online (Sandbox Code Playgroud)

这个图为我提供了这样的交叉配置文件。 在此处输入图片说明

可以做些什么来对时间序列数据进行分类以检测每个高原、上升和下降,并假设一个变量可能比样本中呈现的变量多。

在此处输入图片说明

Xia*_* Lu 3

如果您只对识别系列中的平稳期、上升期和下降期感兴趣,最简单的方法是使用该numpy.diff函数计算第 n 个离散差值。然后,您可以使用 将numpy.sign差异转换为正数(上升)、零(平稳)或负数(下降)。

一个例子:

a = np.random.randint(1, 5, 10)
#array([1, 1, 1, 1, 3, 4, 2, 2, 2, 2])

diff = np.diff(a)
#array([ 0,  0,  0,  2,  1, -2,  0,  0,  0])

gradient = np.sign(diff)
#array([ 0,  0,  0,  1,  1, -1,  0,  0,  0])
Run Code Online (Sandbox Code Playgroud)

请注意,最终数组gradient将比原始数组少一个元素,因为该numpy.diff函数将返回长度为 n 的数组的 (n-1) 个差异。