gpt4 book ai didi

python - 在 Python 中绘制具有平滑外观的时间序列的导数

转载 作者:行者123 更新时间:2023-11-28 18:10:59 24 4
gpt4 key购买 nike

我有一个像这样的长 Pandas 时间序列:

2017-11-27 16:19:00     120.0
2017-11-30 02:40:35 373.4
2017-11-30 02:40:42 624.5
2017-12-01 14:15:31 871.8
2017-12-01 14:15:33 1120.0
2017-12-07 21:07:04 1372.2
2017-12-08 06:11:50 1660.0
2017-12-08 06:11:53 1946.7
2017-12-08 06:11:57 2235.3
2017-12-08 06:12:00 2521.3
....
dtype: float64

我想把它和它的导数一起绘制。根据定义,我以这种方式计算导数:

numer=myTimeSeries.diff()
denominat=myTimeSeries.index.to_series().diff().dt.total_seconds()/3600
derivative=numer/denominat

因为增量时间的某些值(以分额表示)非常接近(或有时等于)零,所以我在导数中得到了一些 inf 值。实际上我得到了这个:[ ]. [1]

时间序列蓝色(左刻度),导数绿色(右刻度)

现在我想平滑导数以使其更具可读性。我尝试了不同的操作,例如:

  • 计算更高时期的差异: enter image description here

为 numer 和 denominat 设置 periods=5

  • 使用移动平均线:smotDeriv=derivative.rolling(window=10,min_periods=3,center=True,win_type='boxcar').mean() 获取:

enter image description here

我也使用了不同的窗口类型,没有任何有用的更改

  • 我也想剪裁这些值,但我不知道将哪些有效值用作最小值和最大值。我尝试了 25% 和 75% 分位数,但没有任何优势
  • 我还绑定(bind)了使用 pykalman 的卡尔曼滤波器:

    derivative.fillna(0,inplace=True)
    kf = KalmanFilter(initial_state_mean=0)
    state_means,_ = kf.filter(derivative.values)
    state_means = state_means.flatten()
    indexDate=derivative.index
    derivativeKalman=pd.Series(state_means,index=indexDate)

得到这个:

enter image description here

实际上我找不到任何有用的改进。如果可能的话,你能给我什么建议来提高图表上导数图的可读性。显然,我会削减导数的一些峰值以获得接近真实值的平滑曲线。我尝试了关于窗口类型、周期等的不同组合,但没有任何结果。关于卡尔曼滤波器,我不是专家,可以说是新手,所以我只是使用了 this 之后的默认值。 .我还找到了实现卡尔曼滤波器的 filterpy 库,但我还没有找到如何在不设置起始参数的情况下使用。

最佳答案

如果您的目标是消除衍生系列中的“离群值”尖峰,我会首先尝试“滚动中位数”而不是“滚动均值”,因为中位数通常对离群值更不敏感。

例如:

smotDeriv = derivative.rolling(window=10, min_periods=3, center=True).median()

然后,如果您想进一步消除它,一种可能的选择是应用 rolling_mean() .

注意:由于我手边没有您的数据可供使用,因此我不确定 window 的最佳值和 min_periods .这取决于你想把它平滑到什么程度。此外,在我看来,平滑导数变得更像是平滑原始时间序列,所以如果有一种已知的方法来平滑原始时间序列,那可能会更直接。

希望这对您有所帮助。

关于python - 在 Python 中绘制具有平滑外观的时间序列的导数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50766061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com