首页 > 其他分享 >提取时序数据的趋势、季节性以及残差

提取时序数据的趋势、季节性以及残差

时间:2024-07-06 15:10:00浏览次数:13  
标签:seasonal plt 季节性 残差 时序 np import data weekly

 一天的光滑数据

sub = [199.68, 187.16, 173.97, 159.85, 146.92, 135.29, 125.04, 114.86, 105.85, 97.93, 90.6, 84.19, 78.37, 72.85, 68.93, 66.59, 62.19, 58.59, 54.15, 50.26, 47.16, 44.14, 41.62, 38.99, 36.84, 34.9, 33.32, 32.75, 33.1, 32.49, 31.49, 30.13, 28.96, 27.72, 27.02, 26.01, 24.81, 23.64, 22.5, 21.14, 19.61, 18.08, 16.85, 16.08, 15.42, 14.71, 14.27, 13.85, 13.33, 12.85, 12.77, 12.5, 12.21, 11.68, 11.3, 11.07, 10.81, 10.57, 10.32, 9.99, 9.81, 9.59, 9.39, 9.54, 9.86, 10.72, 11.05, 11.2, 11.28, 11.41, 11.51, 11.84, 11.87, 12.17, 12.44, 12.75, 13.09, 13.69, 14.32, 14.98, 15.62, 16.62, 17.78, 19.08, 20.53, 22.03, 23.48, 25.33, 26.91, 28.88, 31.03, 33.17, 35.28, 37.6, 39.7, 42.09, 44.84, 47.6, 50.08, 52.63, 55.35, 58.39, 61.85, 65.73, 69.26, 73.01, 77.22, 80.93, 84.9, 89.03, 93.53, 97.01, 100.34, 104.42, 108.11, 111.9, 115.88, 119.73, 123.65, 127.0, 130.81, 134.72, 139.23, 143.22, 146.97, 150.6, 154.12, 158.0, 160.79, 164.26, 167.85, 172.3, 176.39, 180.55, 184.54, 187.43, 190.19, 191.72, 194.04, 197.86, 201.93, 205.85, 209.98, 215.71, 222.41, 228.96, 237.09, 245.32, 252.96, 261.38, 271.01, 280.07, 288.58, 293.28, 298.88, 302.11, 303.89, 304.67, 303.63, 301.74, 297.96, 295.17, 289.9, 284.35, 278.44, 271.56, 264.14, 257.84, 252.81, 247.4, 242.34, 238.34, 234.8, 232.4, 230.27, 228.12, 227.27, 226.53, 226.7, 225.94, 225.77, 225.4, 225.77, 226.03, 225.37, 226.46, 228.19, 229.69, 231.28, 232.03, 232.97, 234.78, 236.51, 238.08, 239.13, 239.85, 240.21, 240.7, 241.1, 241.95, 242.71, 242.62, 243.52, 244.39, 245.62, 247.28, 247.29, 247.2, 244.31, 232.43, 232.11, 234.95, 236.59, 237.73, 237.79, 237.62, 239.26, 240.68, 242.67, 244.52, 246.94, 247.55, 249.97, 253.92, 259.84, 265.83, 271.51, 275.89, 281.14, 287.01, 293.99, 300.1, 304.04, 301.13, 305.42, 311.59, 317.24, 320.75, 327.11, 335.54, 346.18, 354.8, 364.94, 373.74, 380.87, 385.53, 393.56, 403.18, 414.45, 423.33, 433.06, 441.96, 451.35, 460.2, 467.68, 475.33, 481.09, 484.22, 486.48, 489.69, 490.18, 489.02, 485.48, 482.26, 475.31, 468.71, 460.07, 451.05, 440.02, 425.39, 412.68, 401.18, 388.03, 374.44, 362.4, 357.28, 347.81, 334.59, 320.07, 304.97, 289.75, 274.3, 258.01, 243.51, 229.82, 216.16, 204.78, 194.9]
index = pd.date_range('2018-01-01', periods=288, freq='5T')  # 从某个日期开始,每 5 分钟一个数据点
ts = pd.Series(sub, index=index)
plt.figure(figsize=(14, 4))
plt.plot(ts, label='原始数据')
plt.title("1天的原始数据", fontproperties=zhfont, fontsize=12)
plt.grid()
plt.legend()
View Code

基于一天的数据构造两周的毛刺数据

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager
fname="/usr/local/python3.6/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/simhei.ttf"
zhfont = font_manager.FontProperties(fname=fname)
from statsmodels.tsa.seasonal import seasonal_decompose

# 设置随机种子以便结果可复现
np.random.seed(0)

# 将每日数据扩展至14天
one_day_data = sub
one_day_data = np.array(one_day_data)
n_days = 14  # 14 days of data (two weeks)
n_points = n_days * len(one_day_data)  # 总共的数据点数
daily_data = np.tile(one_day_data, n_days)

# 构造长期趋势:保持稳定并有小幅度上涨的平滑趋势
trend = 0.001 * np.arange(n_points)  # 使用一个较小的线性增长趋势
# 每周季节性成分:周期为7天,每周重复,周末人数增多
weekly_pattern = np.array([39, 46, 48, 60, 61, 87, 85])  # 周一到周日的用户波动模式
seasonal_weekly = np.tile(np.repeat(weekly_pattern, len(one_day_data)), n_days // 7 + 1)[:n_points]  # 匹配至完整数据点数
# 随机噪声
noise = np.random.normal(0, 16, n_points)  # 降低噪声幅度以保持数据更平滑
# 合成信号 = 趋势 + 每周季节性 + 每日季节性 + 噪声
signal = trend + seasonal_weekly + daily_data + noise


# 将数据放入 pandas Series
index = pd.date_range('2018-01-01', periods=n_points, freq='5T')  # 从某个日期开始,每 5 分钟一个数据点
ts = pd.Series(signal, index=index)


# 绘制构造结果
plt.figure(figsize=(16, 6))
plt.plot(ts, label='Original')
plt.title('根据1天的原始数据构造模拟两周的样本数据', fontproperties=zhfont, fontsize=14)
plt.xlabel('Time')
plt.legend(loc='best')
# plt.grid()
plt.show()
View Code

 

 方法一:使用statsmodels提取

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager
fname="/usr/local/python3.6/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/simhei.ttf"
zhfont = font_manager.FontProperties(fname=fname)
from statsmodels.tsa.seasonal import seasonal_decompose


# 使用 statsmodels 进行季节性分解
# 设定每周的周期
result_weekly = seasonal_decompose(ts, period=len(one_day_data) * 7, model='additive')
# 获取分解结果
trend_component = result_weekly.trend
seasonal_component = result_weekly.seasonal
residual_component = result_weekly.resid


# 绘制分解结果
plt.figure(figsize=(12, 9))
plt.subplot(3, 1, 1)
plt.plot(trend_component, label='Trend')
plt.title('长期趋势', fontproperties=zhfont, fontsize=12)
plt.xlabel('Time')
plt.legend(loc='best')

plt.subplot(3, 1, 2)
plt.plot(seasonal_component, label='Seasonal (Weekly)')
plt.title('每周季节性')
plt.xlabel('Time')
plt.legend(loc='best')

plt.subplot(3, 1, 3)
plt.plot(residual_component, label='Residual')
plt.title('残差')
plt.xlabel('Time')
plt.legend(loc='best')

plt.tight_layout()
plt.show()
View Code

 

标签:seasonal,plt,季节性,残差,时序,np,import,data,weekly
From: https://www.cnblogs.com/standby/p/18287224

相关文章

  • 【BP时序预测】基于布谷鸟优化算法CS实现负荷数据预测单输入单输出附matlab代码
    %负荷数据预测单输入单输出(BP时序预测)%使用布谷鸟优化算法实现%假设你已经有了输入数据和对应的输出数据%输入数据应该是一个矩阵,每一行代表一个样本,每一列代表一个特征%输出数据应该是一个列向量,每个元素代表对应样本的输出%设置布谷鸟优化算法参数max_iter=......
  • 从时序数据中提取特征分量
     原始数据importmatplotlib.pyplotaspltfrommatplotlibimportfont_managerfname="/usr/local/python3.6/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/simhei.ttf"zhfont=font_manager.FontProperties(fname=fname)plt.figure(figsize=(......
  • 计算时序数据的周期性
    构造时序数据importnumpyasnpimportmatplotlib.pyplotasplt#设置参数period=128num_cycles=5total_length=period*num_cycles#生成周期性信号(正弦波形)np.random.seed(42)time=np.arange(0,total_length,1)signal=10*np.sin(2*np.pi*time......
  • ICLR2024 | iTransformer: 倒置Transformer,刷新时序预测新纪录
    目录:1、引言---1.1 问题背景---1.2设计思路  2、相关工作---2.1Transformer系预测模型---2.2多变量时序数据的词构建3、iTransformer---3.1模型结构---3.2以变量为主体的特征表示---3.3模块分析4、实验分析---4.1时序预测---4.2框架能力1、引言 近......
  • 1v1直播源码,保证请求时序的两种常用方法
    1v1直播源码,保证请求时序的两种常用方法 在1v1直播源码中经常遇到请求输入查找场景,防抖与截流很好处理了频繁输入问题,但是不能解决最先发起请求结果后返回,覆盖了最后一次的搜索结果,导致搜索结果不正确。我总结一下自己常用的两种方法。一、使用时间戳来过滤返回结果如果请......
  • 单细胞测序最好的教程(十五):最具代表性的拟时序计算模型合集
    作者按本章节主要讲解了不基于RNA速率的三种拟时序模型的代表算法,包括扩散时间,Slingshot,Palantir,VIA等,并简单介绍了细胞的状态转移。本教程首发于单细胞最好的中文教程,未经授权许可,禁止转载。全文字数|预计阅读时间:5000|10min——Starlitnightly(星夜)1.背景单细胞测序技......
  • 【减法网络】Minusformer:通过逐步学习残差来改进时间序列预测
    摘要本文发现泛在时间序列(TS)预测模型容易出现严重的过拟合。为了解决这个问题,我们采用了一种去冗余的方法来逐步恢复TS的真实值。具体来说,我们引入了一种双流和减法机制,这是一种深度Boosting集成学习方法。通过将信息聚合机制从加法转向减法,对普通的Transformer进行了改......
  • R语言动态广义相加模型GAM张量积交互项、傅立叶项、谐波回归分析季节性时间序列航空乘
    全文链接:https://tecdat.cn/?p=36497原文出处:拓端数据部落公众号季节性在真实的时间序列中是非常常见的。许多系列以周期性、规律性的方式变化。例如,冰淇淋销售在温暖的假期月份往往更高,而候鸟数量围绕年度迁徙周期强烈波动。由于季节性非常普遍,已经开发了许多时间序列和预测方......
  • Google Earth Engine(GEE)——计算闪闪红星的ndvi的值和折线图(时序分析)
     函数:ui.Chart.image.doySeries(imageCollection, region, regionReducer, scale, yearReducer, startDay, endDay)......
  • 时序预测 | Matlab基于CFBP级联前向BP神经网络时序预测
    在Matlab中使用CFBP(CascadeForward-BackwardPropagation)级联前向BP(Backpropagation)神经网络进行时序预测可以按照以下步骤进行:准备数据:首先,准备你的时序数据。确保数据已经进行了预处理,例如归一化或标准化,以便神经网络能够更好地进行学习和预测。构建级联前向BP神经网络......