python的scale方法的变体以及使用_python-使用已知的谷值平滑时间序列的函数

博客探讨了在Internet测量实验中使用Pandas进行时间序列分析时遇到的问题。作者比较了内置的`pd.rolling_max()`平滑函数和自定义平滑函数的效果,后者在数据下降超过20%时向前传递值。最后,作者决定采用异常值检测方法,通过筛选出测量序列中低于滚动中位数一定比例的点作为异常值,并应用中位数绝对偏差来识别和过滤异常值。
摘要由CSDN通过智能技术生成

随着时间的推移,我获得了Internet测量实验的结果,如下图所示.我正在用熊猫进行时间序列分析.某些数据下降是由于服务器中断造成的.我正在寻找平滑数据的好方法.

在更简单的内置平滑函数中,pd.rolling_max()提供了一个合理的估计值.但是,它高估了一点.我还尝试编写自己的平滑函数,当下降幅度大于20%时,该函数会转发值.这也提供了合理的估计,但是阈值是任意设置的.

def my_smooth(win, thresh = 0.80):

win = win.copy()

for i, val in enumerate(win):

if i > 1 and val < win[i-1] * thresh:

win[i] = win[i-1]

return win[-1]

ts = pd.rolling_apply(ts, 6, my_smooth)

我的问题是,鉴于特定的特征,对于这种类型的时间序列,哪种平滑函数更好? (即,它是事件的计数,主要的测量误差在特定时间的计数之下很大).另外,我建议的平滑功能是否可以减少即席设置或优化?

解决方法:

我想补充一下我最终如何为其他感兴趣的人解决此问题.首先,在研究了多种平滑技术之后,由于它会更改数据,我最终决定不进行平滑处理.相反,我选择过滤掉10%的点作为异常值,这是机器学习和信号处理中的常见技术.

在我们的案例中,异常值是由于测量记录失败而导致的低测量值.有多种检测异常值的技术,其中很流行的是在NIST的Engineering Statistics Handbook中命名的.鉴于我的数据趋势明显,我选择了“中位数绝对偏差”的变体:将测量序列中的每个点与滚动中值,产生差异,并适当选择截止点.

# 'data' are the weekly measurements, in a Pandas series

filtered = data.copy()

dm = pd.rolling_median(data, 9, center=True)

df = sorted(np.abs(data - dm).dropna(), reverse=True)

cutoff = df[len(df) // 10]

filtered[np.abs(data - dm) > cutoff] = np.nan

标签:pandas,time-series,python

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值