您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

七个最新的时间序列分析库介绍和代码示例

时间:2023-04-10 13:46:39  来源:微信公众号  作者:DeepHub IMBA

时间序列分析包括检查随着时间推移收集的数据点,目的是确定可以为未来预测提供信息的模式和趋势。我们已经介绍过很多个时间序列分析库了,但是随着时间推移,新的库和更新也在不断的出现,所以本文将分享8个目前比较常用的,用于处理时间序列问题的Python/ target=_blank class=infotextkey>Python库。他们是tsfresh, autots, darts, atspy, kats, sktime, greykite。

1、Tsfresh

Tsfresh在时间序列特征提取和选择方面功能强大。它旨在自动从时间序列数据中提取大量特征,并识别出最相关的特征。Tsfresh支持多种时间序列格式,可用于分类、聚类和回归等各种应用程序。

 
import pandas as pd
 from tsfresh import extract_features
 from tsfresh.utilities.dataframe_functions import make_forecasting_frame
 
 # Assume we have a time series dataset `data` with columns "time" and "value"
 data = pd.read_csv('data.csv')
 
 # We will use the last 10 points to predict the next point
 df_shift, y = make_forecasting_frame(data["value"], kind="value", max_timeshift=10, rolling_direction=1)
 
 # Extract relevant features using tsfresh
 X = extract_features(df_shift, column_id="id", column_sort="time", column_value="value", impute_function=impute)

2、AutoTS

autots是另一个用于时间序列预测的Python库:

  • 提供了单变量和多变量时间序列预测的各种算法,包括ARIMA, ETS, Prophet和DeepAR。
  • 为最佳模型执行自动模型集成。
  • 提供了上界和下界的置信区间预测。
  • 通过学习最优NaN imputation和异常值去除来处理数据。
 
from autots.datasets import load_monthly
 
 df_long = load_monthly(long=True)
 
 from autots import AutoTS
 
 model = AutoTS(
     forecast_length=3,
     frequency='infer',
     ensemble='simple',
     max_generations=5,
     num_validations=2,
 )
 model = model.fit(df_long, date_col='datetime', value_col='value', id_col='series_id')
 
 # Print the description of the best model
 print(model)

3、darts

darts(Data Analytics and Real-Time Systems)有多种时间序列预测模型,包括ARIMA、Prophet、指数平滑的各种变体,以及各种深度学习模型,如LSTMs、gru和tcn。Darts还具有用于交叉验证、超参数调优和特征工程的内置方法。

darts的一个关键特征是能够进行概率预测。这意味着,不仅可以为每个时间步骤生成单点预测,还可以生成可能结果的分布,从而更全面地理解预测中的不确定性。

 
import pandas as pd
 import matplotlib.pyplot as plt
 
 from darts import TimeSeries
 from darts.models import ExponentialSmoothing
 
 # Read data
 df = pd.read_csv("AIrPassengers.csv", delimiter=",")
 
 # Create a TimeSeries, specifying the time and value columns
 series = TimeSeries.from_dataframe(df, "Month", "#Passengers")
 
 # Set aside the last 36 months as a validation series
 train, val = series[:-36], series[-36:]
 
 # Fit an exponential smoothing model, and make a (probabilistic)
 # prediction over the validation series’ duration
 model = ExponentialSmoothing()
 model.fit(train)
 prediction = model.predict(len(val), num_samples=1000)
 
 # Plot the median, 5th and 95th percentiles
 series.plot()
 prediction.plot(label="forecast", low_quantile=0.05, high_quantile=0.95)
 plt.legend()

图片

4、AtsPy

atspy,可以简单地加载数据并指定要测试的模型,如下面的代码所示。

 
# Importing packages
 import pandas as pd
 from atspy import AutomatedModel
 
 # Reading data
 df = pd.read_csv("AirPassengers.csv", delimiter=",")
 
 # Preprocessing data
 data.columns = ['month','Passengers']
 data['month'] = pd.to_datetime(data['month'],infer_datetime_format=True,format='%y%m')
 data.index = data.month
 df_air = data.drop(['month'], axis = 1)
 
 # Select the models you want to run:
 models = ['ARIMA','Prophet']
 run_models = AutomatedModel(df = df_air, model_list=models, forecast_len=10)

该包提供了一组完全自动化的模型。包括:

 

图片

 

5、kats

kats (kit to Analyze Time Series)是一个由Facebook(现在的Meta)开发的Python库。这个库的三个核心特性是:

模型预测:提供了一套完整的预测工具,包括10+个单独的预测模型、集成、元学习模型、回溯测试、超参数调优和经验预测区间。

检测:Kats支持检测时间序列数据中的各种模式的函数,包括季节性、异常、变化点和缓慢的趋势变化。

特征提取和嵌入:Kats中的时间序列特征(TSFeature)提取模块可以生成65个具有明确统计定义的特征,可应用于大多数机器学习(ML)模型,如分类和回归。

 
# pip install kats
 
 import pandas as pd
 from kats.consts import TimeSeriesData
 from kats.models.prophet import ProphetModel, ProphetParams
 
 # Read data
 df = pd.read_csv("AirPassengers.csv", names=["time", "passengers"])
 
 # Convert to TimeSeriesData object
 air_passengers_ts = TimeSeriesData(air_passengers_df)
 
 # Create a model param instance
 params = ProphetParams(seasonality_mode='multiplicative')
 
 # Create a prophet model instance
 m = ProphetModel(air_passengers_ts, params)
 
 # Fit model simply by calling m.fit()
 m.fit()
 
 # Make prediction for next 30 month
 forecast = m.predict(steps=30, freq="MS")
 forecast.head()

6、Sktime

sktime是一个用于时间序列分析的库,它构建在scikit-learn之上,并遵循类似的API,可以轻松地在两个库之间切换。下面是如何使用Sktime进行时间序列分类的示例:

from sktime.datasets import load_arrow_head
 from sktime.classification.compose import TimeSeriesForestClassifier
 from sktime.utils.sampling import train_test_split
 
 # Load ArrowHead dataset
 X, y = load_arrow_head(return_X_y=True)
 
 # Split data into train and test sets
 X_train, X_test, y_train, y_test = train_test_split(X, y)
 
 # Create and fit a time series forest classifier
 classifier = TimeSeriesForestClassifier(n_estimators=100)
 classifier.fit(X_train, y_train)
 
 # Predict labels for the test set
 y_pred = classifier.predict(X_test)
 
 # Print classification report
 from sklearn.metrics import classification_report
 print(classification_report(y_test, y_pred))

7、GreyKite

greykite是LinkedIn发布的一个时间序列预测库。该库可以处理复杂的时间序列数据,并提供一系列功能,包括自动化特征工程、探索性数据分析、预测管道和模型调优。

from greykite.common.data_loader import DataLoader
 from greykite.framework.templates.autogen.forecast_config import ForecastConfig
 from greykite.framework.templates.autogen.forecast_config import MetadataParam
 from greykite.framework.templates.forecaster import Forecaster
 from greykite.framework.templates.model_templates import ModelTemplateEnum
 
 # Defines inputs
 df = DataLoader().load_bikesharing().tail(24*90)  # Input time series (pandas.DataFrame)
 config = ForecastConfig(
      metadata_param=MetadataParam(time_col="ts", value_col="count"),  # Column names in `df`
      model_template=ModelTemplateEnum.AUTO.name,  # AUTO model configuration
      forecast_horizon=24,   # Forecasts 24 steps ahead
      coverage=0.95,         # 95% prediction intervals
  )
 
 # Creates forecasts
 forecaster = Forecaster()
 result = forecaster.run_forecast_config(df=df, config=config)
 
 # Accesses results
 result.forecast     # Forecast with metrics, diagnostics
 result.backtest     # Backtest with metrics, diagnostics
 result.grid_search  # Time series CV result
 result.model        # Trained model
 result.timeseries   # Processed time series with plotting functions

总结

我们可以看到,这些时间序列的库主要功能有2个方向,一个是特征的生成,另外一个就是多种时间序列预测模型的集成,所以无论是处理单变量还是多变量数据,它们都可以满足我们的需求,但是具体用那个还要看具体的需求和使用的习惯。



Tags:时间序列   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
面向时间序列数据的深度学习应用综述
时间序列数据是指按照时间顺序排列的数据集合,如股票价格、气象数据、交通流量等。深度学习作为一种强大的机器学习技术,已经在时间序列数据分析中取得了显著的成果。本文将对...【详细内容】
2023-11-27  Search: 时间序列  点击:(112)  评论:(0)  加入收藏
什么是时间序列异常检测
时间序列异常检测是指在时间序列数据中发现不符合预期模式的数据点或数据集合的方法,它广泛应用于金融、制造业、能源等领域中,可以帮助企业及早发现异常,并采取相应措施,从而提...【详细内容】
2023-09-22  Search: 时间序列  点击:(202)  评论:(0)  加入收藏
时间序列的重采样和pandas的resample方法介绍
重采样是时间序列分析中处理时序数据的一项基本技术。它是关于将时间序列数据从一个频率转换到另一个频率,它可以更改数据的时间间隔,通过上采样增加粒度,或通过下采样减少粒度...【详细内容】
2023-09-19  Search: 时间序列  点击:(254)  评论:(0)  加入收藏
七个最新的时间序列分析库介绍和代码示例
时间序列分析包括检查随着时间推移收集的数据点,目的是确定可以为未来预测提供信息的模式和趋势。我们已经介绍过很多个时间序列分析库了,但是随着时间推移,新的库和更新也在不...【详细内容】
2023-04-10  Search: 时间序列  点击:(278)  评论:(0)  加入收藏
从零开始学习系列之时间序列数据库
监控系统大家应该都用过,而监控里面记录的比较重要的数据就是某个时间点发生了什么,而用来存储这些数据的数据库,用专业术语讲就是时间序列数据库(Time Series Database,缩写简称...【详细内容】
2023-03-24  Search: 时间序列  点击:(119)  评论:(0)  加入收藏
如何将一个时间序列分解为周期序列和趋势序列的和?
时间序列分解是时序分析中的重要方法,广泛应用于时间序列预测,时间序列异常检测,时间序列聚类等场景,在工业界有很多的落地应用。一个时间序列往往是以下几类变化形式的叠加或耦...【详细内容】
2023-03-07  Search: 时间序列  点击:(197)  评论:(0)  加入收藏
Python中的时间序列数据操作总结
时间序列数据是一种在一段时间内收集的数据类型,它通常用于金融、经济学和气象学等领域,经常通过分析来了解随着时间的推移的趋势和模式Pandas是Python中一个强大且流行的数据...【详细内容】
2023-01-04  Search: 时间序列  点击:(309)  评论:(0)  加入收藏
时间序列数据库(TSDB)初识与选择
背景这两年互联网行业掀着一股新风,总是听着各种高大上的新名词。大数据、人工智能、物联网、机器学习、商业智能、智能预警啊等等。以前的系统,做数据可视化,信息管理,流程控制...【详细内容】
2020-11-25  Search: 时间序列  点击:(4169)  评论:(0)  加入收藏
Python中的时间序列数据可视化的完整指南
时间序列数据在许多不同的行业中都非常重要。它在研究、金融行业、制药、社交媒体、网络服务等领域尤为重要。对时间序列数据的分析也变得越来越重要。在分析中有什么比一...【详细内容】
2020-11-20  Search: 时间序列  点击:(254)  评论:(0)  加入收藏
使用卡尔曼滤波平滑时间序列,提高时序预测的准确率
在时间序列预测中,脏乱数据的存在会影响最终的预测结果。这是肯定的,尤其是在这个领域,因为时间依赖性在处理时间序列时起着至关重要的作用。噪音或异常值必须按照特别的解决...【详细内容】
2020-09-17  Search: 时间序列  点击:(410)  评论:(0)  加入收藏
▌简易百科推荐
小红书、视频号、抖音流量算法解析,干货满满,值得一看!
咱们中国现在可不是一般的牛!网上的网友已经破了十个亿啦!到了这个互联网的新时代,谁有更多的人流量,谁就能赢得更多的掌声哦~抖音、小红书、、视频号,是很多品牌必争的流量洼地...【详细内容】
2024-02-23  二手车小胖说    Tags:流量算法   点击:(13)  评论:(0)  加入收藏
雪花算法详解与Java实现:分布式唯一ID生成原理
SnowFlake 算法,是 Twitter 开源的分布式 ID 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 ID。在分布式系统中的应用十分广泛,且 ID 引入了时间戳...【详细内容】
2024-02-03   一安未来  微信公众号  Tags:雪花算法   点击:(50)  评论:(0)  加入收藏
程序开发中常用的十种算法,你用过几种?
当编写程序时,了解和使用不同的算法对解决问题至关重要。以下是C#中常用的10种算法,每个算法都伴随着示例代码和详细说明。1. 冒泡排序 (Bubble Sort):冒泡排序是一种简单的比...【详细内容】
2024-01-17  架构师老卢  今日头条  Tags:算法   点击:(44)  评论:(0)  加入收藏
百度推荐排序技术的思考与实践
本文将分享百度在推荐排序方面的思考与实践。在整个工业界的推广搜场景上,特征设计通常都是采用离散化的设计,需要保证两方面的效果,一方面是记忆,另一方面是泛化。特征都是通过...【详细内容】
2024-01-09  DataFunTalk  微信公众号  Tags:百度推荐   点击:(77)  评论:(0)  加入收藏
什么是布隆过滤器?如何实现布隆过滤器?
以下我们介绍了什么是布隆过滤器?它的使用场景和执行流程,以及在 Redis 中它的使用,那么问题来了,在日常开发中,也就是在 Java 开发中,我们又将如何操作布隆过滤器呢?布隆过滤器(Blo...【详细内容】
2024-01-05  Java中文社群  微信公众号  Tags:布隆过滤器   点击:(87)  评论:(0)  加入收藏
面向推荐系统的深度强化学习算法研究与应用
随着互联网的快速发展,推荐系统在各个领域中扮演着重要的角色。传统的推荐算法在面对大规模、复杂的数据时存在一定的局限性。为了解决这一问题,深度强化学习算法应运而生。本...【详细内容】
2024-01-04  数码小风向    Tags:算法   点击:(96)  评论:(0)  加入收藏
非负矩阵分解算法:从非负数据中提取主题、特征等信息
非负矩阵分解算法(Non-negativeMatrixFactorization,简称NMF)是一种常用的数据分析和特征提取方法,主要用于从非负数据中提取主题、特征等有意义的信息。本文将介绍非负矩阵分解...【详细内容】
2024-01-02  毛晓峰    Tags:算法   点击:(63)  评论:(0)  加入收藏
再谈前端算法,你这回明白了吗?
楔子 -- 青蛙跳台阶一只青蛙一次可以跳上一级台阶,也可以跳上二级台阶,求该青蛙跳上一个n级的台阶总共需要多少种跳法。分析: 当n=1的时候,①只需要跳一次即可;只有一种跳法,即f(...【详细内容】
2023-12-28  前端爱好者  微信公众号  Tags:前端算法   点击:(108)  评论:(0)  加入收藏
三分钟学习二分查找
二分查找是一种在有序数组中查找元素的算法,通过不断将搜索区域分成两半来实现。你可能在日常生活中已经不知不觉地使用了大脑里的二分查找。最常见的例子是在字典中查找一个...【详细内容】
2023-12-22  小技术君  微信公众号  Tags:二分查找   点击:(78)  评论:(0)  加入收藏
强化学习算法在资源调度与优化中的应用
随着云计算和大数据技术的快速发展,资源调度与优化成为了现代计算系统中的重要问题。传统的资源调度算法往往基于静态规则或启发式方法,无法适应动态变化的环境和复杂的任务需...【详细内容】
2023-12-14  职场小达人欢晓    Tags:算法   点击:(165)  评论:(0)  加入收藏
站内最新
站内热门
站内头条