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

news/2025/3/15 13:38:01/

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

1、Tsfresh

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

 importpandasaspdfromtsfreshimportextract_featuresfromtsfresh.utilities.dataframe_functionsimportmake_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 pointdf_shift, y=make_forecasting_frame(data["value"], kind="value", max_timeshift=10, rolling_direction=1)# Extract relevant features using tsfreshX=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和异常值去除来处理数据。
 fromautots.datasetsimportload_monthlydf_long=load_monthly(long=True)fromautotsimportAutoTSmodel=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 modelprint(model)

3、darts

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

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

 importpandasaspdimportmatplotlib.pyplotaspltfromdartsimportTimeSeriesfromdarts.modelsimportExponentialSmoothing# Read datadf=pd.read_csv("AirPassengers.csv", delimiter=",")# Create a TimeSeries, specifying the time and value columnsseries=TimeSeries.from_dataframe(df, "Month", "#Passengers")# Set aside the last 36 months as a validation seriestrain, val=series[:-36], series[-36:]# Fit an exponential smoothing model, and make a (probabilistic) # prediction over the validation series’ durationmodel=ExponentialSmoothing()model.fit(train)prediction=model.predict(len(val), num_samples=1000)# Plot the median, 5th and 95th percentilesseries.plot()prediction.plot(label="forecast", low_quantile=0.05, high_quantile=0.95)plt.legend()

4、AtsPy

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

 # Importing packagesimportpandasaspdfromatspyimportAutomatedModel# Reading datadf=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.monthdf_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 katsimportpandasaspdfromkats.constsimportTimeSeriesDatafromkats.models.prophetimportProphetModel, ProphetParams# Read datadf=pd.read_csv("AirPassengers.csv", names=["time", "passengers"])# Convert to TimeSeriesData objectair_passengers_ts=TimeSeriesData(air_passengers_df)# Create a model param instanceparams=ProphetParams(seasonality_mode='multiplicative')# Create a prophet model instancem=ProphetModel(air_passengers_ts, params)# Fit model simply by calling m.fit()m.fit()# Make prediction for next 30 monthforecast=m.predict(steps=30, freq="MS")forecast.head()

6、Sktime

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

 fromsktime.datasetsimportload_arrow_headfromsktime.classification.composeimportTimeSeriesForestClassifierfromsktime.utils.samplingimporttrain_test_split# Load ArrowHead datasetX, y=load_arrow_head(return_X_y=True)# Split data into train and test setsX_train, X_test, y_train, y_test=train_test_split(X, y)# Create and fit a time series forest classifierclassifier=TimeSeriesForestClassifier(n_estimators=100)classifier.fit(X_train, y_train)# Predict labels for the test sety_pred=classifier.predict(X_test)# Print classification reportfromsklearn.metricsimportclassification_reportprint(classification_report(y_test, y_pred))

7、GreyKite

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

 fromgreykite.common.data_loaderimportDataLoaderfromgreykite.framework.templates.autogen.forecast_configimportForecastConfigfromgreykite.framework.templates.autogen.forecast_configimportMetadataParamfromgreykite.framework.templates.forecasterimportForecasterfromgreykite.framework.templates.model_templatesimportModelTemplateEnum# Defines inputsdf=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 configurationforecast_horizon=24,   # Forecasts 24 steps aheadcoverage=0.95,         # 95% prediction intervals)# Creates forecastsforecaster=Forecaster()result=forecaster.run_forecast_config(df=df, config=config)# Accesses resultsresult.forecast     # Forecast with metrics, diagnosticsresult.backtest     # Backtest with metrics, diagnosticsresult.grid_search  # Time series CV resultresult.model        # Trained modelresult.timeseries   # Processed time series with plotting functions

总结

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

https://avoid.overfit.cn/post/45451d119a154aeba72bf8dd3eaa9496

作者:Joanna


http://www.ppmy.cn/news/46466.html

相关文章

【云原生】Kubernetes 中容器跨主机网络是怎么样的?

文章目录 前言什么是 FlannelFlannel 的后端实现有哪些UDPVXLANHost-gw 基于 Flannel UDP 模式的实现跨主通信UDP 模式案例实现基于 Flannel VXLAN 模式的跨主通信VXLAN 模式案例实现 总结 前言 在云原生领域,Kubernetes 已经成为了最主流的容器管理工具。Kubernet…

本地Pycharm连接远程服务器训练模型教程-yolov5为例

本篇文章解决的问题: 本地pycharm 与云服务器/实验室服务器进行远程连接跑实验训练、同步本地与云服务器的全部或者部分文件。 在这之前需要做的的工作: 1.服务器上已经创建好虚拟环境(不会的可以看下篇文章):使用云…

线程池技术

线程池技术是一种典型的生产者-消费者模型。 线程池技术是指能够保证所创建的任一线程都处于繁忙状态,而不需要频繁地为了某一任务而创建和销毁线程,因为系统在创建和销毁线程时所耗费的cpu资源很大。如果任务很多,频率很高,为了…

4月Google Play政策更新,游戏上架需要注意这几点

3月21日,据路透社报道,由于发现国内某知名电商应用存在恶意软件问题,谷歌已暂时将该APP从商店下架,并表示:将该APP下架是一种安全预防措施,已经下载的用户也会收到警告,提示他们进行卸载。 4月…

k8s的yaml文件中kind类型详解

在Kubernetes(k8s)的YAML语法中,kind是一种重要的关键字,它用于指定Kubernetes资源的类型。根据Kubernetes官方文档,以下是kind可能的取值: Deployment:用于定义应用程序的声明式更新。Statefu…

KD2684S绕组匝间故障检测仪

一、产品简介 KD2684S匝间冲击耐压试验仪适用于电机、变压器、电器线圈等这些由漆包线绕制的产品。因漆包线的绝缘涂敷层本身存在着质量问题,以及在绕线、嵌线、刮线、接头端部整形、绝缘浸漆、装配等工序工艺中不慎而引起绝缘层的损伤等,都会造成线圈层…

【Java|golang】1042. 不邻接植花---邻接表着色

有 n 个花园,按从 1 到 n 标记。另有数组 paths ,其中 paths[i] [xi, yi] 描述了花园 xi 到花园 yi 的双向路径。在每个花园中,你打算种下四种花之一。 另外,所有花园 最多 有 3 条路径可以进入或离开. 你需要为每个花园选择一…

图的宽度优先遍历

文章目录 图的宽度优先遍历程序设计程序分析图的宽度优先遍历 【问题描述】根据输入图的邻接矩阵A,给出图的宽度优先遍历序列; 【输入形式】第一行为图的结点个数n,第二行输入顶点的信息,每个顶点用一个字符表示,接下来的n行为图的邻接矩阵A。其中A[i][j]=1表示两个结点邻…