时间序列数据预处理

这篇具有很好参考价值的文章主要介绍了时间序列数据预处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

时间序列数据是指按照时间顺序排列的一系列数据点或观测值,通常用于描述某个变量随时间的变化情况。例如,股价、气温、人口数量等都可以被视为时间序列数据。时间序列数据的预处理是进行时间序列分析的重要步骤。常见的时间序列预处理步骤包括:

  1. 构建时间序列数据:在处理时间序列数据之前,需要将原始数据按照时间顺序排序,并构建时间序列数据。
  2. 查找缺失值:在时间序列数据中,可能存在缺失值,需要对其进行查找。常用的缺失值处理方法有插值法、删除等。
  3. 查找数据集中存在的异常值:在时间序列数据中,可能存在异常值需要被识别和处理。常用的异常值检测方法有基于统计学的方法和基于机器学习的方法。

构建时间序列数据

原始数据中的时间列,可能存在时间顺序紊乱如下图这样,先将时间数据数据转成datetime格式,再进行升值排序;

时间序列数据预处理

import pandas as pd
#将时间列的数据转换成pandas时间格式
datac['time'] = pd.to_datetime(data['time'], format='%Y-%m-%d')
# 对时间列数据进行排序
data= data.sort_values(by='time')

时间列的时间数据是缺失的,比如2022-05-01--2022-05-31时间段的数据,一共31条时间数据,而原始数据中只要28条数据,因此需要对时间数据进行补充;

import pandas as np
datanew = pd.DataFrame()
datanew['time'] = pd.date_range('2022-05-01','2022-05-31')
#tt 为时间序列特征值/目标值
datanew['tt]']=np.nan
data = data.append(datawnew)
data = data.drop_duplicates(subset =['time']).sort_values(by['time']).reset_index(drop=True)

查找缺失值

1、在缺失值比例较大的情况下,可能影响分析的精度和可靠性时,可选择删除;

2、在缺失值较少的情况下,可以通过手动填充、插值等方法近处理;

常见的时间序列缺失值填充方法:

  • 前向填充法:用前一时刻的观测值来填充缺失值;
  • 后向填充法:用后一时刻的观测值来填充缺失值;
  • 线性插值法:使用前后两个缺失值之间的线性函数对缺失值进行插值;
  • XGBoost等机器学习模型预测法:使用机器学习模型预测缺失值

前向填充法

代码中,ffill()方法表示使用向前填充法对缺失值进行填充。将缺失值替换为该值之前的最近一个非缺失值。

import pandas as pd

# 创建示例时间序列数据,其中第2个和第4个时间点为缺失值
ts = pd.Series([1, None, 3, None, 5], index=pd.date_range('2023-04-01', periods=5, freq='D'))

# 使用向前填充方法填充缺失值
ts_ffill = ts.ffill()

print("原始数据:\n", ts)
print("\n向前填充后的数据:\n", ts_ffill)

时间序列数据预处理时间序列数据预处理

 后向填充法

上代码中,bfill()方法表示使用向后填充法对缺失值进行填充。将缺失值替换为该值之后的最近一个非缺失值。

import pandas as pd

# 创建示例时间序列数据,其中第2个和第4个时间点为缺失值
ts = pd.Series([1, None, 3, None, 5], index=pd.date_range('2023-04-01', periods=5, freq='D'))

# 使用向后填充方法填充缺失值
ts_bfill = ts.bfill()

print("原始数据:\n", ts)
print("\n向后填充后的数据:\n", ts_bfill)

时间序列数据预处理时间序列数据预处理

线性插值法

 代码中,interpolate()方法表示使用线性插值法对缺失值进行填充。线性插值方法是根据已知的数据点进行线性外推或者内插,以得到缺失点的估计值。默认情况下,该方法使用线性插值进行缺失值填充。

import pandas as pd

# 创建示例时间序列数据,其中第2个和第4个时间点为缺失值
ts = pd.Series([1, None, 3, None, 5], index=pd.date_range('2023-04-01', periods=5, freq='D'))

# 使用线性插值方法填充缺失值
ts_interpolated = ts.interpolate()

print("原始数据:\n", ts)
print("\n线性插值填充后的数据:\n", ts_interpolated)

 时间序列数据预处理时间序列数据预处理

 XGBoost填充缺失值

首先将时间序列划分为特征(X)和目标值(y)。然后我们使用70%的数据训练XGBoost回归器,并用它来预测缺失值。最后,我们返回填充后的时间序列。

# 导入必要的库
import xgboost as xgb
import numpy as np

# 构建XGBoost模型
def run_xgb(timeseries):
    # 构建特征和目标值
    X = []
    y = []
    for i in range(len(timeseries)-1):
        if timeseries[i] != None and timeseries[i+1] != None:
            X.append([timeseries[i]])
            y.append(timeseries[i+1])

    X = np.array(X)
    y = np.array(y)

    # 分割训练集和测试集
    split = int(len(X)*0.7)
    X_train, y_train = X[:split], y[:split]
    X_test, y_test = X[split:], y[split:]

    # 训练模型
    model = xgb.XGBRegressor()
    model.fit(X_train, y_train)

    # 预测并填充缺失值
    for i in range(len(timeseries)):
        if timeseries[i] == None:
            timeseries[i] = model.predict(np.array([[timeseries[i-1]]]))

    return timeseries

异常值处理

在时间序列分析中,异常值是指在数据集中出现的极端异常的观测值。这些异常值可能会对模型的预测和准确性产生负面影响,因此需要处理。

一般来说,处理时间序列异常值的方法有以下几种:

  1. 阈值的方法:该方法是将异常值定义为与正常值相比显著偏离的数据点。可以使用统计学方法来确定阈值,例如,Zscore阀值。

  2. 移动窗口的方法:该方法是计算数据点在固定时间窗口内的平均值和标准差,并识别偏离平均值很多个标准差的点。

  3. 时间序列异常检测 ADTK:adtk(Anomaly Detection Toolkit)是无监督异常检测的python工具包,它提供常用算法和处理函数;

阀值去除异常值

z-score : z标准分数,它测量数据值到平均值的距离,当数据与平均值相差2个标准差时z-score为2,如果将z-score为3作为异常值判断标准时,便相当于3sigma。(3sigma内包含99.7%的数据)

 mean = data[feature].mean()
 std = data1[feature].std()
 data['z'] = (data[feature]-mean)/std
# 异常数据
 dfk = data[data['z']>3.0]

时间序列异常检测 ADTK

详细参考Python 时间序列异常检测 ADTK

以上是时间序列数据预处理过程;文章来源地址https://www.toymoban.com/news/detail-484758.html

到了这里,关于时间序列数据预处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flink的流式数据处理与时间序列分析

    Apache Flink 是一个流处理框架,用于实时数据处理和分析。它支持大规模数据流处理,具有高吞吐量和低延迟。Flink 可以处理各种数据源和数据接收器,如 Kafka、HDFS、TCP 流等。 时间序列分析是一种用于分析时间序列数据的方法,用于发现数据中的趋势、季节性和随机性。时间

    2024年02月21日
    浏览(49)
  • 预处理信号——将信号与不同开始时间对齐

    许多测量涉及多个传感器异步采集的数据。如果您要集成信号,您必须同步它们。 Signal Processing Toolbox(信号处理工具箱) 提供的一些函数可实现此目的。 例如,假设有一辆汽车经过一座桥。它产生的振动由位于不同位置的三个相同传感器进行测量。信号有不同到达时间。

    2023年04月09日
    浏览(40)
  • postman 携带时间戳及md5加密预处理

    // 获取全局变量 uid = postman.getGlobalVariable(“uid”) sid = postman.getGlobalVariable(“sid”) //设置当前时间戳 postman.setGlobalVariable(“time”,Math.round(new Date().getTime())); time = postman.getGlobalVariable(‘time’) //设置KEY_WORD为全局变量 postman.setGlobalVariable(“Key”,“******”) KEY_WORD = postman.getGlobalV

    2024年02月14日
    浏览(44)
  • postman 携带时间戳及md5加密预处理测试

    在很多接口进行测试的时候,都会需要携带时间戳进行校验,或者存在需要sign进行md5加密处理 全局参数: {{$timestamp}} 时间戳长度: 13 位 优缺点:使用方便但是不能进行参数处理 使用示例 预处理: Pre-request Script 时间戳长度:*可以自己处理位数 优缺点:可以根据需求进行

    2024年02月08日
    浏览(58)
  • 数据采集与预处理01: 项目1 数据采集与预处理准备

    数据采集:足够的数据量是企业大数据战略建设的基础,因此数据采集成为大数据分析的前站。数据采集是大数据价值挖掘中重要的一环,其后的分析挖掘都建立在数据采集的基础上。大数据技术的意义确实不在于掌握规模庞大的数据信息,而在于对这些数据进行智能处理,

    2024年01月25日
    浏览(57)
  • Pandas库分析-时间序列的处理

    在使用Python进行数据分析时,经常会遇到时间日期格式处理和转换,特别是分析和挖掘与时间相关的数据,比如量化交易就是从历史数据中寻找股价的变化规律。Python中自带的处理时间的模块有datetime,NumPy库也提供了相应的方法,Pandas作为Python环境下的数据分析库,更是提供

    2024年02月07日
    浏览(89)
  • 数据预处理matlab matlab数据的获取、预处理、统计、可视化、降维

    1.1 从Excel中获取 使用readtable() 例1: 使用 spreadsheetImportOptions(Name,Value) 初步确定导入信息, 再用 opts.Name=Value 的格式添加。 例2: 先初始化 spreadsheetImportOptions 对象, 再用 opts.Name=Value 的格式逐个添加。 例3: 将导入信息存到变量里, 再使用 spreadsheetImportOptions(Name,Value)

    2024年02月15日
    浏览(53)
  • 大数据采集技术与预处理学习一:大数据概念、数据预处理、网络数据采集

    目录 大数据概念: 1.数据采集过程中会采集哪些类型的数据? 2.非结构化数据采集的特点是什么? 3.请阐述传统的数据采集与大数据采集的区别? ​​​​​​​ ​​​​​​​4.大数据采集的数据源有哪些?针对不同的数据源,我们可以采用哪些不同的方法和工具? 数据

    2024年01月25日
    浏览(52)
  • 数据预处理之数据规约

    目录 一、前言 二、PCA的主要参数: 三、数据归约任务1 四、数据规约任务2 PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构

    2024年02月12日
    浏览(41)
  • 数据分析--数据预处理

    本文主要是个人的学习笔记总结,数据预处理的基本思路和方法,包括一些方法的使用示例和参数解释,具体的数据预处理案例case详见其他文章。如有错误之处还请指正! 目录 数据的质量评定 数据处理步骤 缺失值的处理 标记缺失值 删除 缺失值 填充 缺失值 重复值处理 异

    2024年02月04日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包