時間序列資料分析與預測之Python工具彙總

本文中總結了十多種時間序列資料分析和預測工具和python庫,在我們處理時間序列專案時,可以翻開本文,根據需要選擇合適的工具,將會事半功倍!

時間序列

時間序列是按時間順序索引的資料點序列。這是在連續時間點對同一變數的觀察。換句話說,它是在一段時間內觀察到的一組資料。

  • 趨勢
  • 季節性變化
  • 週期性變化
  • 隨機變化

時間序列專案示例

  • 心率異常: 這是指心率在正常範圍內的任何變化。這可能是由於心臟問題或如何刺激它。
  • 心律異常:這是指節律與其正常模式的任何變化。這可能是由於脈衝透過心臟傳導的方式存在問題,或者它們透過心臟傳導的速度存在問題。

時間序列專案的工具

時間序列在各個行業中的重要性,已經不用多說。接下來看看用於時間序列專案的Python工具都有哪些。

  • 日期範圍生成和頻率轉換
  • 移動視窗統計
  • 移動視窗線性迴歸
  • 日期轉換
  • 滯後等等
  • 日期和時間的表示
  • 日期和時間的算術
  • 日期和時間的比較
  • 傅立葉變換元件
  • 小波變換元件
  • 偏自相關等

資料分析和視覺化包

資料分析和視覺化包是幫助資料分析師從他們的資料中建立圖形和圖表的工具。資料分析被定義為清理、轉換和建模資料的過程,以便發現對業務決策有用的資訊。資料分析的目標是從資料中提取有用的資訊並根據該資訊做出決策。

  • 製作適合出版的地塊
  • 建立可以放大、平移和更新的互動式圖形
  • 改變視覺風格和佈局

時間序列預測包

時間序列專案中最重要的部分可能是預測。預測是根據當前和過去的資料預測未來事件的過程。它基於這樣一種假設,即未來可以從過去實現。此外,它假設資料中有一些模式可用於預測接下來會發生什麼。

  • 一組平穩性和季節性的統計檢驗
  • 各種內生和外生變壓器,包括 Box-Cox 和傅立葉變換
  • 季節性時間序列、交叉驗證實用程式和其他工具的分解
import pmdarima as pm
from pmdarima import model_selection
import matplotlib.pyplot as plt
import numpy as np
# 加载数据并将其拆分为单独的部分
data = pm.datasets.load_lynx()
train, test = model_selection.train_test_split(data, train_size=100)
# fit一些验证(cv)样本
arima = pm.auto_arima(train, start_p=1, start_q=1, d=0, max_p=5, max_q=5,
out_of_sample_size=10, suppress_warnings=True,
stepwise=True, error_action='ignore')

# 现在绘制测试集的结果和预测
preds, conf_int = arima.predict(n_periods=test.shape[0],
return_conf_int=True)

fig, axes = plt.subplots(2, 1, figsize=(12, 8))
x_axis = np.arange(train.shape[0] + preds.shape[0])
axes[0].plot(x_axis[:train.shape[0]], train, alpha=0.75)
axes[0].scatter(x_axis[train.shape[0]:], preds, alpha=0.4, marker='o')
axes[0].scatter(x_axis[train.shape[0]:], test, alpha=0.4, marker='x')
axes[0].fill_between(x_axis[-preds.shape[0]:], conf_int[:, 0], conf_int[:, 1],
alpha=0.1, color='b')

# 填写在模型中"held out"样本的部分
axes[0].set_title("Train samples & forecasted test samples")

# 现在将实际样本添加到模型中并创建NEW预测
arima.update(test)
new_preds, new_conf_int = arima.predict(n_periods=10, return_conf_int=True)
new_x_axis = np.arange(data.shape[0] + 10)

axes[1].plot(new_x_axis[:data.shape[0]], data, alpha=0.75)
axes[1].scatter(new_x_axis[data.shape[0]:], new_preds, alpha=0.4, marker='o')
axes[1].fill_between(new_x_axis[-new_preds.shape[0]:],
new_conf_int[:, 0], new_conf_int[:, 1],
alpha=0.1, color='g')
axes[1].set_title("Added new observed values with new forecasts")
plt.show()
  • 一個時間序列資料集類,它抽象處理變數轉換、缺失值、隨機子取樣、多個歷史長度等。
  • 一個基本模型類,它提供時間序列模型的基本訓練以及登入張量板和通用視覺化,例如實際與預測和依賴圖
  • 用於時間序列預測的多個神經網路架構,已針對實際部署進行了增強,並具有內建的解釋功能
  • 多水平時間序列指標
  • Ranger 最佳化器用於更快的模型訓練
  • 使用optuna進行超引數調整
  • 最先進的時間序列預測演算法
  • 時間序列的轉換,例如去趨勢或去季節化等
  • 模型和轉換、模型調整實用程式和其他有用功能的管道
  • 季節性樸素預測器
  • ARIMA
  • 多項式趨勢預測器
  • Lasso Net 具有去季節化和去趨勢選項以及許多其他選項
# TimeSeries从 Pandas DataFrame创建一个对象,并将其拆分为训练/验证系列:
import pandas as pd
import matplotlib.pyplot as plt
from darts import TimeSeries
from darts.models import ExponentialSmoothing
df = pd.read_csv('AirPassengers.csv', delimiter=",")
series = TimeSeries.from_dataframe(df, 'Month', '#Passengers')
train, val = series[:-36], series[-36:]
# 拟合指数平滑模型,并对验证系列的持续时间进行(概率)预测:
model = ExponentialSmoothing()
model.fit(train)
prediction = model.predict(len(val), num_samples=1000)
# 绘制中位数、第 5 和第 95 个百分位数:
series.plot()
prediction.plot(label='forecast', low_quantile=0.05, high_quantile=0.95)
plt.legend()
from kats.models.sarima import SARIMAModel, SARIMAParams
# create SARIMA param class
params = SARIMAParams(p = 2, d=1, q=1,
trend = 'ct', seasonal_order=(1,0,1,12))
# initiate SARIMA model
m = SARIMAModel(data=air_passengers_ts, params=params)
# fit SARIMA model
m.fit()
# generate forecast values
fcst = m.predict(steps=30, freq="MS")
m.plot()

預測庫比較

這裡提供了一個包含一些常見功能的表格來比較預測包。表中顯示了一些指標,例如 GitHub 星數、釋出年份、支援功能等。

結論

在這篇文章中,我們描述了時間序列專案最常用的工具、包和庫。使用此工具列表,可以涵蓋幾乎所有與時間序列相關的專案。最重要的是,我們提供了用於預測的庫的比較,其中顯示了一些有趣的統計資料,例如釋出年份、受歡迎程度以及它支援的模型型別。

文章推薦

餅圖變形記,肝了3000字,收藏就是學會!

--

--

這是一個專注於數據分析職場的內容部落格,聚焦一批數據分析愛好者,在這裡,我會分享數據分析相關知識點推送、(工具/書籍)等推薦、職場心得、熱點資訊剖析以及資源大盤點,希望同樣熱愛數據的我們一同進步! 臉書會有更多互動喔:https://www.facebook.com/shujvfenxi/

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
數據分析那些事

數據分析那些事

這是一個專注於數據分析職場的內容部落格,聚焦一批數據分析愛好者,在這裡,我會分享數據分析相關知識點推送、(工具/書籍)等推薦、職場心得、熱點資訊剖析以及資源大盤點,希望同樣熱愛數據的我們一同進步! 臉書會有更多互動喔:https://www.facebook.com/shujvfenxi/