You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中去除图表异常值:如何平滑含噪时间序列曲线?

时间序列数据平滑去噪方法

针对你提到的带噪声的时间序列曲线,可通过以下几种常用方法实现平滑处理,代码基于Python的pandas和相关库实现:

1. 移动平均(Rolling Mean)

适合简单随机噪声的场景,通过滑动窗口内的均值压制高频波动,窗口大小需根据数据的时间粒度调整:

import pandas as pd

# 确保datetime列为时间类型并设置为索引(保证数据按时间排序)
df['datetime'] = pd.to_datetime(df['datetime'])
df = df.set_index('datetime').sort_index()

# 窗口大小设为7(示例,可根据数据频率调整:如小时数据用24,日数据用7)
# center=True 让窗口中心对应当前时间点,避免滞后
df['smoothed_rolling'] = df['target_column'].rolling(window=7, center=True).mean()

2. 指数加权移动平均(EWMA)

给近期数据赋予更高权重,能有效保留趋势同时平滑噪声,解决移动平均的滞后问题:

# span参数控制平滑程度:span越小越贴近原始数据,越大平滑效果越强
df['smoothed_ewma'] = df['target_column'].ewm(span=10, adjust=False).mean()

3. Savitzky-Golay 多项式滤波

适合需要保留数据趋势转折点的场景,通过多项式拟合窗口内数据,在去噪的同时保留关键特征:

from scipy.signal import savgol_filter

# window_length必须为奇数,polyorder为拟合的多项式阶数(通常选2或3)
df['smoothed_savgol'] = savgol_filter(df['target_column'], window_length=11, polyorder=2)

4. 滑动中值(Rolling Median)

对异常值(尖锐噪声)的鲁棒性更强,适合数据中存在离群点的情况:

df['smoothed_median'] = df['target_column'].rolling(window=7, center=True).median()

方法选择参考

  • 平稳无趋势的数据:优先移动平均/滑动中值
  • 带趋势的时间序列:选指数加权移动平均
  • 需要保留趋势突变点:用Savitzky-Golay滤波
  • 所有方法的窗口/参数都需根据数据的实际时间粒度(分钟/小时/日)调试,直到达到类似黑色曲线的平滑效果

内容的提问来源于stack exchange,提问作者SAHAR GOHARSHENASAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:35:17