Python5大时间序列库介绍及使用实例

513 阅读8分钟

学习任何机器学习技术或任何编程语言,一般来说,并不容易。如果你想像专家一样掌握编码,激情应该是驱动力。学习编程需要大量的时间、努力和精力。在某种程度上,学习机器学习和编程进展是一种时间序列数据,你的经验随着时间的推移而增长。

这就是为什么很多大学生在处理写作任务时喜欢 购买大学论文 ,这样他们就可以腾出更多时间来学习编码。之所以要花这么多时间,是因为你不仅要学习编程语言,还要探索不同的库,比如我们在这篇文章中要看的这些库。

时间序列简单地表示随时间变化的数据点。因此,它们在自然界和商业中无处不在:温度、心跳、出生率、人口动态、互联网流量、库存、股票、销售、订单、工厂生产--任何东西。在无数情况下,对时间序列的有效处理和预测可以提供决定性的好处。

它可以帮助企业提前调整战略(例如,如果可以提前安排生产)或改善运营(例如,通过检测复杂系统的异常情况)。虽然有很多时间序列的模型和工具,但由于每种模型和工具都有其复杂性,而且不能总是以同样的方式使用,所以使用它们往往还是不容易的。

在这篇文章中,我们将介绍:

  1. 时间序列
  2. 弗林特
  3. 飞毛腿
  4. 俾斯麦(Pyflux)
  5. Prophet

重要提示: 在使用这些库之前,请确保你安装了Python 3.6或更高版本和C++ 14或更高版本。

1.Sktime

Sktime是一个开源的基于Python的机器学习工具集,专门为时间序列设计。这个项目由英国经济和社会研究委员会、消费者数据研究中心和艾伦-图灵研究所的社区赞助和运行。

Sktime提供了对scikit-learn API的扩展,用于时间序列解决方案。它包含有效解决时间序列回归、预测和分类问题的所有基本算法和工具。该库包括其他流行库所没有的特殊机器学习算法和时间序列的转换方法。

Data Visual

Sktime是为了与scikit-learn一起工作而开发的,毫不费力地调整连接时间序列问题的算法和构建复杂的模型。它是如何工作的?许多时间序列问题在某种程度上是相互关联的。一个可以应用于一个问题的算法,往往也可以用来解决另一个相关的问题。这个概念被称为还原。

例如,一个用于时间序列回归的模型(利用一个序列来预测结果值)可以为一个时间序列预测问题(预测结果值--未来将得到的值)重新运行。

1.1 Sktime的安装

要通过pip安装sktime,请使用以下命令:

 pip install sktime

1.2 Sktime代码示例

下面是一个关于如何使用sktime的例子:

from sktime import datasets
from sktime.forecasting import model_selection
from sktime.utils.plotting import plot_series

y = datasets.load_airline()
y_train, y_test = model_selection.temporal_train_test_split(y)
plot_series(y_train, y_test, labels=["y_train", "y_test"])

sktime example

2.弗林特

现在,无论是生产自动化系统和金融应用,还是物联网(IoT,Internet of Things)平台,对大规模分析时间序列数据的能力都有很大需求。今天大数据处理的事实标准是Apache Spark计算框架。

它包含许多内置和可插拔的库,其中之一是Two Sigma的产品,用于快速并行时间序列操作的开源Flint库。Flint利用时间序列数据的自然排序,提供基于位置的优化。

Programming Visual

Flint库可以通过Maven和PyPI获得。Flint中所有时间序列分析功能的入口是Scala API的TimeSeriesRDD和Python API的TimeSeriesDataFrame。在高层次上,TimeSeriesRDDD包含OrderedRDD,它可以用来表示一串有序的键值对。TimeSeriesRDDD使用Long来表示从一个纪元开始的纳秒级的时间戳作为键,使用InternalRows作为OrderedRDD的值来表示一个时间序列数据集。

与DataFrame和Dataset不同,TimeSeriesRDD Flint可以利用现有的数据集静止时的排序属性,而且几乎所有的数据操作和对这些数据集的分析都会考虑其时间排序属性。它与Spark中其他时间序列的不同之处在于,它能够有效地对面板数据或大规模、高频数据进行计算。

2.1 Flint安装

要通过pip安装sktime,请使用以下命令:

 pip install ts-flint

2.2 Sktime代码示例

下面是一个关于如何使用Flint的例子。

from ts.flint import FlintContext, summarizers

flintContext = FlintContext(sqlContext)
df = spark.CreateDataFrame(
    [("2021-08-20", "1.0"), ("2021-08-21", "2.0"), ("2021-08-23", "3.0")],
    ["time", "v"]
).withColumn("time", from_uts_timestamp(col("time"), "UTC"))

flint_df = flintContext.read.dataframe(df)
flint_df = flint_df.withColumn('v', flint_df['v'] + 1)

flint_df = flint_df.summarizeCycles(summarizers.count())

3.Darts

如果你是一个与时间序列打交道的数据科学家,那么你已经知道了:时间序列是很特别的蛮牛。对于表格中的普通数据,你经常可以直接使用scikit-learn来完成大多数机器学习任务,从预处理到预测和模型选择。但对于时间序列来说,情况就不是这样了。你很容易发现,你需要一个库来做预处理,第二个库来做季节性判断,另一个库来匹配预测模型,最后,很多时候你还得开发自己的测试和模型选择程序。

这可能会变得很累,因为大多数库使用各种API和数据类型。这还不算与基于神经网格的更复杂的模型有关的情况,或者涉及外部数据和其他维度的问题。你可能必须为你的特定应用开发你的模型,例如通过Tensorflow或PyTorch等库。总而言之,我们认为Python中的时间序列机器学习体验仍然不是完全无缝的。

Coding Visual

我们是scikit-learn方法的忠实支持者:一个统一的开源库,具有连贯的API,为端到端机器学习提供了一套优秀的工具。Darts努力去理解时间序列学习,所以它的核心目标是让机器学习时间序列的整个过程变得更容易。

3.1 Darts的安装

要通过pip安装sktime,请使用以下命令。

 pip install darts

3.2 Darts代码示例

下面是一个关于如何使用Darts的例子。

import pandas as pd
import matplotlib.pyplot as plt

from darts import TimeSeries
from darts.models import ExponentialSmoothing

df = pd.read_csv("AirPassengers.csv")
series = TimeSeries.from_dataframe(df, "Month", "#Passengers")
train, val = series.split_before(pd.Timestamp("19580101"))

model = ExponentialSmoothing()
prediction = model.predict(len(val))

series.plot(label="actual")
prediction.plot(label="forecast", lw=3)
plt.legend()

4.PyFlux

Pyflux是一个为Python设计的时间序列的开源库。Pyflux选择了一种更加基于似然的方法来处理时间序列问题。这种方法对预测等问题特别有用,因为在这些问题上需要对不确定性有一个更完整的了解。

用户可以构建一个随机模式,其中数据和隐藏值通过使用联合概率被处理为随机危害。

Data Science Visual

Sktime是为了与scikit-learn一起工作而开发的,毫不费力地调整连接时间序列问题的算法,构建复杂的模型。它是如何工作的?许多时间序列问题在某种程度上是相互关联的。一个可以应用于一个问题的算法,往往也可以用来解决另一个相关的问题。这个概念被称为还原。

例如,一个用于时间序列回归的模型(利用一个序列来预测结果值)可以为一个时间序列预测问题(预测结果值--未来将得到的值)重新运行。

4.1 PyFlux的安装

要通过pip安装sktime,请使用以下命令。

 pip install pyflux

4.2 PyFlux代码示例

下面是一个关于如何使用Pyflux的例子。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import pyflux as pf
from pandas_datareaded.data import DataReader
from datetime import datetime

reader = DataReader("JPM", "yahoo", datetime(2006, 6, 1), datetime(2016, 6, 1))
reader_data = pd.DataFrame(np.diff(np.log(reader["Adj Close"].values)))
reader_data.index = reader.index.values[1:reader.index.values.shape[0]]
reader_data.columns = ["JPM Returns"]

model = pf.GARCH(p = 1, q = 1, data = reader_data)
result = model.fit("M-H", nsims = 20000)

model.plot_z([1, 2])
model.plot_fit(figsize=(15,5))
model.plot_predict(h=30, figsize=(15,5))

5.Prophet

Prophet是一个开源的库,致力于对一维时间序列数据集进行预测。作为用户友好型软件,它的目的是自动搜索合适的模型超集范围,对默认的具有趋势和季节性结构的数据进行准确预测。

先知实现了一个加法时间序列预测模型,这个实现保持了趋势、季节和假期。

Data Visual

该库提供两种接口,包括R和Python。

5.1 先知的安装

通过pip安装sktime,使用以下命令:

 pip install sktime

5.2 预言家代码示例

下面是一个关于如何使用先知的例子。

import pandas as pd
import matplotlib.pyplot as plt
from fbprophet import Prophet

df = pd.read_csv("AirPassengers.csv")
model = Prophet()
model.fit(df)

future_df = model.make_future_dataframe(periods=730)
forecast = model.predict(future_df)

plot = model.plot(forecast)
complot = model.plot_components(forecast)
plt.show()

结语

在这篇文章中,我们有机会检查了一些用于处理时间序列数据的最好的Python库。请确保你为自己提供足够的空闲时间,你会花时间去探索这些库。你也可以查看 有用的reddit评论 ,找到在大学的困难时期到来时有用的服务。如果你对Python充满热情,确保你花每一分钟来探索它。很快你就会得到回报的。

谢谢你的阅读!