分析自行车道的时间序列数据,我想知道每个高原,上升和下降的时间间隔。示例csv文件已上传here。
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))
此图为我提供了这样的交叉轮廓。
在假设一个人的变量可能多于样本中给出的假设的情况下,可以对时间序列数据进行分类以检测每种平稳,上升和下降的方法。
最佳答案
如果您只想识别序列中的平稳,上升和下降,则简单的方法是使用 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])
请注意,最终数组
gradient
将比原始数组少一个元素,因为numpy.diff
函数将针对长度为n的数组返回(n-1)个差。