【Python百宝箱】时序之美:Python 时间序列探秘与创新

时光漫游:Python 时间序列分析全指南

前言

在数字化时代,时间序列数据扮演着关键的角色,从金融到气象再到生产制造。本文将引导你穿越Python丰富的时间序列分析工具,探索从基础统计到机器学习和深度学习的各个层面。无论你是初学者还是专业数据科学家,这里有一篇完整的指南等待你的探索。

欢迎订阅专栏:Python库百宝箱:解锁编程的神奇世界

文章目录

  • 时光漫游:Python 时间序列分析全指南
    • 前言
      • 1. Prophet
        • 1.1 概述
        • 1.2 主要特点
        • 1.3 应用场景
      • 2. Statsmodels
        • 2.1 概述
        • 2.2 时间序列分析功能
          • 2.2.1 ARIMA 模型
          • 2.2.2 SARIMA 模型
      • 3. Numpy
        • 3.1 数组操作和数学函数
        • 3.2 随机数生成
          • 3.2.1 `numpy.random` 模块
      • 4. Pandas
        • 4.1 数据结构
          • 4.1.1 Series
          • 4.1.2 DataFrame
        • 4.2 时间序列处理
          • 4.2.1 时间索引
          • 4.2.2 时期
      • 5. Matplotlib
        • 5.1 绘图基础
          • 5.1.1 折线图
          • 5.1.2 散点图
        • 5.2 时间序列可视化
          • 5.2.1 `matplotlib.dates` 模块
      • 6. Seaborn
        • 6.1 统计数据可视化
        • 6.2 时间序列数据可视化
          • 6.2.1 时间序列图
      • 7. Scikit-learn
        • 7.1 机器学习基础
        • 7.2 时间序列预测与分类
          • 7.2.1 时间序列预测模型
          • 7.2.2 时间序列分类模型
      • 8. TensorFlow
        • 8.1 神经网络基础
        • 8.2 时间序列预测与深度学习
          • 8.2.1 LSTM 模型
          • 8.2.2 GRU 模型
      • 9. PyTorch
        • 9.1 深度学习框架简介
        • 9.2 时间序列深度学习模型
      • 10. Scipy
        • 10.1 科学计算库
        • 10.2 信号处理与频谱分析
          • 10.2.1 FFT(快速傅里叶变换)
          • 10.2.2 滤波器设计
      • 11. Plotly
        • 11.1 交互式可视化
        • 11.2 时间序列可视化
          • 11.2.1 Plotly Express 库
      • 12. Bokeh
        • 12.1 互动式可视化工具
        • 12.2 时间序列数据可视化
          • 12.2.1 Bokeh 绘图基础
      • 13. Prophet-ml
        • 13.1 Prophet 模型的机器学习扩展
        • 13.2 高级时间序列分析
          • 13.2.1 季节性调整
          • 13.2.2 节假日效应
      • 14. XGBoost
        • 14.1 梯度提升框架
        • 14.2 时间序列预测中的 XGBoost
          • 14.2.1 XGBoost 基础
          • 14.2.2 XGBoost 在时间序列中的应用
    • 总结

1. Prophet

1.1 概述

Facebook开源的Prophet是一款用于时间序列预测的工具。其设计初衷是简化时间序列分析的复杂性,使非专业人士能够轻松应用。Prophet能够处理缺失值、异常值,并支持多个季节性组件的建模。

1.2 主要特点
  • 灵活性: Prophet能够处理多变量、不规则的假期效应,适用于多种业务场景。
  • 自动调整: 自动调整参数,减轻用户的调参负担。
  • 可解释性: 提供可解释的模型参数,方便用户理解预测结果。
1.3 应用场景

Prophet广泛应用于销售预测、股票价格预测等业务场景。以下是一个简单的Prophet使用示例:

from fbprophet import Prophet
import pandas as pd# 创建一个示例数据集
data = pd.DataFrame({'ds': pd.date_range(start='2023-01-01', periods=365),'y': range(1, 366)
})# 初始化Prophet模型
model = Prophet()# 拟合模型
model.fit(data)# 创建未来时间的数据框
future = model.make_future_dataframe(periods=30)# 预测未来数据
forecast = model.predict(future)# 绘制预测结果
fig = model.plot(forecast)

2. Statsmodels

2.1 概述

Statsmodels是一个强大的统计分析库,提供了丰富的时间序列分析工具。它包括了经典的统计模型,如ARIMA和SARIMA。

2.2 时间序列分析功能
2.2.1 ARIMA 模型

ARIMA(Autoregressive Integrated Moving Average)模型是一种常用于时间序列分析的模型,结合了自回归和移动平均的特性。以下是一个简单的ARIMA模型示例:

from statsmodels.tsa.arima.model import ARIMA
import numpy as np# 创建一个示例时间序列
np.random.seed(42)
data = np.cumsum(np.random.normal(size=100))# 拟合ARIMA模型
model = ARIMA(data, order=(1, 1, 1))
result = model.fit()# 打印模型摘要
print(result.summary())
2.2.2 SARIMA 模型

SARIMA(Seasonal Autoregressive Integrated Moving Average)模型在ARIMA的基础上引入了季节性成分。以下是一个简单的SARIMA模型示例:

from statsmodels.tsa.statespace.sarimax import SARIMAX# 创建一个示例时间序列
np.random.seed(42)
data = np.cumsum(np.random.normal(size=100))# 拟合SARIMA模型
model = SARIMAX(data, order=(1, 1, 1), seasonal_order=(0, 1, 1, 12))
result = model.fit()# 打印模型摘要
print(result.summary())

这样,文章将逐渐填充每个章节的内容,详细介绍每个库的特性和使用方法。

3. Numpy

3.1 数组操作和数学函数

Numpy是Python中用于科学计算的基础库之一,特别擅长处理数组操作和数学函数。以下是一个简单的Numpy示例:

import numpy as np# 创建一个一维数组
arr = np.array([1, 2, 3, 4, 5])# 数组操作:加法
arr_plus_1 = arr + 1# 数学函数:平方
arr_squared = np.square(arr)# 打印结果
print("Original Array:", arr)
print("Array + 1:", arr_plus_1)
print("Array Squared:", arr_squared)
3.2 随机数生成
3.2.1 numpy.random 模块

numpy.random模块提供了生成随机数的功能。以下是一个简单的随机数生成示例:

import numpy as np# 生成服从正态分布的随机数
random_data = np.random.normal(loc=0, scale=1, size=100)# 打印前10个随机数
print("Random Data:", random_data[:10])

4. Pandas

4.1 数据结构
4.1.1 Series

Pandas中的Series是一种一维标记数组,可存储任意数据类型。以下是一个简单的Series示例:

import pandas as pd# 创建一个Series
series_data = pd.Series([1, 3, 5, np.nan, 6, 8])# 打印Series
print("Series Data:")
print(series_data)
4.1.2 DataFrame

DataFrame是Pandas中的二维表格数据结构。以下是一个简单的DataFrame示例:

import pandas as pd# 创建一个DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],'Age': [25, 30, 35],'City': ['New York', 'San Francisco', 'Los Angeles']
}
df = pd.DataFrame(data)# 打印DataFrame
print("DataFrame:")
print(df)
4.2 时间序列处理
4.2.1 时间索引

Pandas支持时间序列数据的处理,其中时间索引是关键。以下是一个简单的时间索引示例:

import pandas as pd# 创建一个时间序列
time_series_data = pd.Series([1, 2, 3, 4], index=pd.date_range('2023-01-01', periods=4))# 打印时间序列
print("Time Series Data:")
print(time_series_data)
4.2.2 时期

Pandas中的时期表示时间区间。以下是一个简单的时期示例:

import pandas as pd# 创建一个时期
period_data = pd.period_range('2023-01', periods=3, freq='M')# 打印时期
print("Period Data:")
print(period_data)

这样,文章将逐步填充每个章节的内容,详细介绍每个库的特性和使用方法。

5. Matplotlib

5.1 绘图基础
5.1.1 折线图

Matplotlib是Python中广泛使用的绘图库。以下是一个简单的折线图示例:

import matplotlib.pyplot as plt# 创建示例数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]# 绘制折线图
plt.plot(x, y, marker='o', linestyle='-')# 添加标签和标题
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Line Plot Example')# 显示图形
plt.show()
5.1.2 散点图

散点图是另一种常见的数据可视化方式。以下是一个简单的散点图示例:

import matplotlib.pyplot as plt# 创建示例数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]# 绘制散点图
plt.scatter(x, y, color='red', marker='o')# 添加标签和标题
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Scatter Plot Example')# 显示图形
plt.show()
5.2 时间序列可视化
5.2.1 matplotlib.dates 模块

Matplotlib中的matplotlib.dates模块提供了处理日期和时间的功能。以下是一个简单的时间序列可视化示例:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd# 创建示例时间序列数据
data = pd.DataFrame({'date': pd.date_range(start='2023-01-01', periods=365),'value': range(1, 366)
})# 绘制时间序列图
plt.plot(data['date'], data['value'])# 设置日期格式
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))# 添加标签和标题
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Time Series Visualization')# 自动格式化日期
plt.gcf().autofmt_xdate()# 显示图形
plt.show()

6. Seaborn

6.1 统计数据可视化

Seaborn是基于Matplotlib的统计数据可视化库,能够创建各种吸引人的图形。以下是一个简单的Seaborn示例:

import seaborn as sns
import matplotlib.pyplot as plt# 创建示例数据
data = sns.load_dataset('tips')# 绘制箱线图
sns.boxplot(x='day', y='total_bill', data=data)# 添加标签和标题
plt.xlabel('Day')
plt.ylabel('Total Bill')
plt.title('Boxplot Example')# 显示图形
plt.show()
6.2 时间序列数据可视化
6.2.1 时间序列图

Seaborn同样支持时间序列数据的可视化。以下是一个简单的时间序列图示例:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd# 创建示例时间序列数据
data = pd.DataFrame({'date': pd.date_range(start='2023-01-01', periods=365),'value': range(1, 366)
})# 绘制时间序列图
sns.lineplot(x='date', y='value', data=data)# 添加标签和标题
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Time Series Visualization with Seaborn')# 显示图形
plt.show()

这样,文章将逐渐填充每个章节的内容,详细介绍每个库的特性和使用方法。

7. Scikit-learn

7.1 机器学习基础

Scikit-learn是一个用于机器学习的开源工具包,包含了多种机器学习算法和工具。以下是一个简单的线性回归模型示例:

from sklearn.linear_model import LinearRegression
import numpy as np# 创建示例数据
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([2, 4, 5, 4, 5])# 初始化线性回归模型
model = LinearRegression()# 拟合模型
model.fit(X, y)# 打印模型参数
print("Coefficient:", model.coef_)
print("Intercept:", model.intercept_)
7.2 时间序列预测与分类
7.2.1 时间序列预测模型

Scikit-learn并不直接提供专门用于时间序列的模型,但可以使用其回归模型进行时间序列预测。

from sklearn.linear_model import LinearRegression
import numpy as np# 创建示例时间序列数据
X = np.array(range(1, 11)).reshape(-1, 1)
y = np.array([2, 4, 5, 4, 5, 7, 8, 9, 10, 12])# 初始化线性回归模型
model = LinearRegression()# 拟合模型
model.fit(X, y)# 预测未来数据
future_data = np.array(range(11, 16)).reshape(-1, 1)
predicted_values = model.predict(future_data)# 打印预测结果
print("Predicted Values:", predicted_values)
7.2.2 时间序列分类模型

对于时间序列的分类问题,可以使用Scikit-learn中的分类算法,如支持向量机(SVM)或决策树。

from sklearn.svm import SVC
import numpy as np# 创建示例时间序列数据
X = np.array(range(1, 11)).reshape(-1, 1)
y = np.array([0, 0, 0, 0, 1, 1, 1, 1, 1, 1])# 初始化支持向量机分类器
model = SVC(kernel='linear')# 拟合模型
model.fit(X, y)# 预测未来数据
future_data = np.array(range(11, 16)).reshape(-1, 1)
predicted_labels = model.predict(future_data)# 打印预测结果
print("Predicted Labels:", predicted_labels)

8. TensorFlow

8.1 神经网络基础

TensorFlow是一个用于构建和训练深度学习模型的开源库。以下是一个简单的神经网络示例:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense# 创建示例数据
X = np.array(range(1, 11)).reshape(-1, 1)
y = np.array([2, 4, 5, 4, 5, 7, 8, 9, 10, 12])# 构建神经网络模型
model = Sequential([Dense(10, input_dim=1, activation='relu'),Dense(1, activation='linear')
])# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')# 训练模型
model.fit(X, y, epochs=100, verbose=0)# 预测未来数据
future_data = np.array(range(11, 16)).reshape(-1, 1)
predicted_values = model.predict(future_data)# 打印预测结果
print("Predicted Values:", predicted_values.flatten())
8.2 时间序列预测与深度学习
8.2.1 LSTM 模型

长短时记忆网络(LSTM)是一种常用于处理序列数据的深度学习模型。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense# 创建示例时间序列数据
X = np.array(range(1, 11)).reshape(-1, 1)
y = np.array([2, 4, 5, 4, 5, 7, 8, 9, 10, 12])# 构建LSTM模型
model = Sequential([LSTM(50, activation='relu', input_shape=(1, 1)),Dense(1)
])# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')# 将输入数据调整为LSTM的输入形状
X_lstm = X.reshape((X.shape[0], 1, 1))# 训练模型
model.fit(X_lstm, y, epochs=100, verbose=0)# 调整未来数据形状并预测
future_data = np.array(range(11, 16)).reshape(-1, 1, 1)
predicted_values = model.predict(future_data)# 打印预测结果
print("Predicted Values:", predicted_values.flatten())
8.2.2 GRU 模型

门控循环单元(GRU)是另一种处理序列数据的深度学习模型。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import GRU, Dense# 创建示例时间序列数据
X = np.array(range(1, 11)).reshape(-1, 1)
y = np.array([2, 4, 5, 4, 5, 7, 8, 9, 10, 12])# 构建GRU模型
model = Sequential([GRU(50, activation='relu', input_shape=(1, 1)),Dense(1)
])# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')# 将输入数据调整为GRU的输入形状
X_gru = X.reshape((X.shape[0], 1, 1))# 训练模型
model.fit(X_gru, y, epochs=100, verbose=0)# 调整未来数据形状并预测
future_data = np.array(range(11, 16)).reshape(-1, 1, 1)
predicted_values = model.predict(future_data)# 打印预测结果
print("Predicted Values:", predicted_values.flatten())

9. PyTorch

9.1 深度学习框架简介

PyTorch是另一个流行的深度学习框架,具有动态计算图的优势。以下是一个简单的PyTorch示例:

import torch
import torch.nn as nn
import numpy as np# 创建示例数据
X = torch.tensor(np.array(range(1, 11)).reshape(-1, 1), dtype=torch.float32)
y = torch.tensor(np.array([2, 4, 5, 4, 5, 7, 8, 9, 10, 12]), dtype=torch.float32)# 构建神经网络模型
model = nn.Sequential(nn.Linear(1, 10),nn.ReLU(),nn.Linear(10, 1)
)# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)# 训练模型
for epoch in range(100):# 前向传播predictions = model(X)# 计算损失loss = criterion(predictions, y.view(-1, 1))# 反向传播和优化optimizer.zero_grad()loss.backward()optimizer.step()# 预测未来数据
future_data = torch.tensor(np.array(range(11, 16)).reshape(-1, 1), dtype=torch.float32)
predicted_values = model(future_data)# 打印预测结果
print("Predicted Values:", predicted_values.detach().numpy().flatten())
9.2 时间序列深度学习模型

PyTorch同样可以用于构建和训练深度学习模型来处理时间序列数据。以下是一个使用LSTM模型的时间序列预测示例:

import torch
import torch.nn as nn
import numpy as np# 创建示例时间序列数据
X = torch.tensor(np.array(range(1, 11)).reshape(-1, 1), dtype=torch.float32)
y = torch.tensor(np.array([2, 4, 5, 4, 5, 7, 8, 9, 10, 12]), dtype=torch.float32)# 将输入数据调整为LSTM的输入形状
X_lstm = X.view(-1, 1, 1)# 构建LSTM模型
model = nn.Sequential(nn.LSTM(1, 50, batch_first=True),nn.Linear(50, 1)
)# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)# 训练模型
for epoch in range(100):# 前向传播predictions, _ = model(X_lstm)# 计算损失loss = criterion(predictions[:, -1, :], y.view(-1, 1))# 反向传播和优化optimizer.zero_grad()loss.backward()optimizer.step()# 调整未来数据形状并预测
future_data = torch.tensor(np.array(range(11, 16)).reshape(-1, 1), dtype=torch.float32)
future_data_lstm = future_data.view(-1, 1, 1)
predicted_values, _ = model(future_data_lstm)# 打印预测结果
print("Predicted Values:", predicted_values.detach().numpy().flatten())

10. Scipy

10.1 科学计算库

Scipy是一个建立在Numpy基础上的科学计算库,提供了许多用于科学和工程的模块。以下是一个简单的Scipy示例:

import scipy.stats as stats
import numpy as np# 创建示例数据
data = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5])# 计算均值和标准差
mean_value = np.mean(data)
std_dev = np.std(data)# 计算正态分布的概率密度函数
pdf_values = stats.norm.pdf(data, loc=mean_value, scale=std_dev)# 打印结果
print("Mean:", mean_value)
print("Standard Deviation:", std_dev)
print("PDF Values:", pdf_values)
10.2 信号处理与频谱分析
10.2.1 FFT(快速傅里叶变换)

快速傅里叶变换是一种频谱分析方法,用于将信号从时域转换到频域。

from scipy.fft import fft
import numpy as np
import matplotlib.pyplot as plt# 创建示例信号
fs = 1000  # 采样频率
t = np.linspace(0, 1, fs, endpoint=False)  # 时间向量
freq = 5  # 信号频率
signal = np.sin(2 * np.pi * freq * t)# 进行快速傅里叶变换
fft_result = fft(signal)# 计算频率轴
freq_axis = np.fft.fftfreq(len(fft_result), 1/fs)# 绘制频谱图
plt.plot(freq_axis, np.abs(fft_result))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.title('FFT Example')# 显示图形
plt.show()
10.2.2 滤波器设计

Scipy提供了滤波器设计的功能,以下是一个简单的滤波器设计示例:

from scipy import signal
import matplotlib.pyplot as plt# 设计一个低通Butterworth滤波器
order = 4  # 滤波器阶数
cutoff_frequency = 100  # 截止频率b, a = signal.butter(order, cutoff_frequency, btype='low', analog=False, fs=1000)# 频率响应
w, h = signal.freqz(b, a, worN=8000)
plt.plot(0.5 * 1000 * w / np.pi, np.abs(h), 'b')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Gain')
plt.title('Butterworth Lowpass Filter Frequency Response')
plt.show()

11. Plotly

11.1 交互式可视化

Plotly是一个用于创建交互式图形的库,支持多种图表类型。以下是一个简单的Plotly示例:

import plotly.express as px
import pandas as pd# 创建示例数据
data = pd.DataFrame({'x': [1, 2, 3, 4, 5],'y': [2, 4, 5, 4, 5],'category': ['A', 'A', 'B', 'B', 'B']
})# 绘制交互式散点图
fig = px.scatter(data, x='x', y='y', color='category', title='Interactive Scatter Plot')
fig.show()
11.2 时间序列可视化
11.2.1 Plotly Express 库

Plotly Express是Plotly的高级接口,能够轻松创建时间序列图。

import plotly.express as px
import pandas as pd# 创建示例时间序列数据
data = pd.DataFrame({'date': pd.date_range(start='2023-01-01', periods=365),'value': range(1, 366)
})# 绘制时间序列图
fig = px.line(data, x='date', y='value', title='Time Series Visualization with Plotly Express')
fig.show()

12. Bokeh

12.1 互动式可视化工具

Bokeh是一个用于创建交互式可视化的库,支持多种图表类型。以下是一个简单的Bokeh示例:

from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource
import pandas as pd# 创建示例数据
data = pd.DataFrame({'x': [1, 2, 3, 4, 5],'y': [2, 4, 5, 4, 5],'color': ['red', 'blue', 'green', 'red', 'blue']
})# 创建Bokeh的ColumnDataSource
source = ColumnDataSource(data)# 绘制散点图
p = figure(title='Interactive Scatter Plot with Bokeh', tools='pan,box_zoom,reset', x_axis_label='X-axis', y_axis_label='Y-axis')
p.scatter('x', 'y', source=source, size=10, color='color')# 显示图形
show(p)
12.2 时间序列数据可视化
12.2.1 Bokeh 绘图基础

Bokeh同样支持时间序列数据的可视化。以下是一个简单的时间序列图示例:

from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource
import pandas as pd# 创建示例时间序列数据
data = pd.DataFrame({'date': pd.date_range(start='2023-01-01', periods=365),'value': range(1, 366)
})# 创建Bokeh的ColumnDataSource
source = ColumnDataSource(data)# 绘制时间序列图
p = figure(title='Time Series Visualization with Bokeh', x_axis_label='Date', y_axis_label='Value', x_axis_type='datetime')
p.line('date', 'value', source=source, line_width=2)# 显示图形
show(p)

13. Prophet-ml

13.1 Prophet 模型的机器学习扩展

Prophet-ml是基于Prophet模型的机器学习扩展,支持更灵活的模型调整和集成学习方法。

13.2 高级时间序列分析
13.2.1 季节性调整

Prophet-ml支持对时间序列数据进行季节性调整,以更准确地捕捉季节性趋势。

13.2.2 节假日效应

通过Prophet-ml的节假日效应功能,用户可以更好地建模和预测在特定节假日期间可能发生的异常情况。

14. XGBoost

14.1 梯度提升框架

XGBoost是一个用于梯度提升的框架,支持分布式计算和优化技巧。

14.2 时间序列预测中的 XGBoost
14.2.1 XGBoost 基础

XGBoost可以应用于时间序列预测问题,以下是一个简单的XGBoost示例:

import xgboost as xgb
import numpy as np# 创建示例数据
X = np.array(range(1, 11)).reshape(-1, 1)
y = np.array([2, 4, 5, 4, 5, 7, 8, 9, 10, 12])# 初始化XGBoost回归模型
model = xgb.XGBRegressor(objective ='reg:squarederror', colsample_bytree = 0.3, learning_rate = 0.1, max_depth = 5, alpha = 10, n_estimators = 10)# 拟合模型
model.fit(X, y)# 预测未来数据
future_data = np.array(range(11, 16)).reshape(-1, 1)
predicted_values = model.predict(future_data)# 打印预测结果
print("Predicted Values:", predicted_values)
14.2.2 XGBoost 在时间序列中的应用

XGBoost在时间序列问题中可以通过调整参数、使用滞后特征(lag features)和引入时间相关的特征来优化性能。以下是一个更细致的XGBoost时间序列预测示例:

import xgboost as xgb
import pandas as pd
import numpy as np# 创建示例时间序列数据
data = pd.DataFrame({'date': pd.date_range(start='2023-01-01', periods=10),'value': [2, 4, 5, 4, 5, 7, 8, 9, 10, 12]
})# 添加滞后特征
for i in range(1, 4):data[f'value_lag_{i}'] = data['value'].shift(i)# 添加时间特征
data['month'] = data['date'].dt.month
data['day'] = data['date'].dt.day
data['day_of_week'] = data['date'].dt.dayofweek# 将数据拆分为训练集和测试集
train_data = data.iloc[:-2, :]
test_data = data.iloc[-2:, :]# 提取特征和目标变量
X_train = train_data.drop(['date', 'value'], axis=1)
y_train = train_data['value']
X_test = test_data.drop(['date', 'value'], axis=1)# 初始化XGBoost回归模型
model = xgb.XGBRegressor(objective ='reg:squarederror', colsample_bytree = 0.3, learning_rate = 0.1, max_depth = 5, alpha = 10, n_estimators = 10)# 拟合模型
model.fit(X_train, y_train)# 预测未来数据
predicted_values = model.predict(X_test)# 打印预测结果
print("Predicted Values:", predicted_values)

这样,你可以调整XGBoost模型的参数,尝试不同的特征工程方法,以获得更好的时间序列预测效果。

总结

时间序列分析是数据科学领域中不可或缺的一环,而Python生态系统提供了丰富的工具和库来应对这一挑战。从最简单的统计模型到复杂的深度学习算法,本文旨在为读者提供全方位的视角,让他们能够灵活应对不同领域的时间序列数据分析任务。通过学习本文,读者将不仅仅了解这些库的使用方法,还能够选择最适合自己需求的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/238231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL概括与SQL分类

文章目录 一、计算机语言二、SQL语言三、数据库系统四、MySQL简介 一、计算机语言 二、SQL语言 三、数据库系统 四、MySQL简介

ZZ014城市轨道交通运营与维护赛题第5套

ZZ014城市轨道交通运营与维护赛题第5套 模块1赛题 模块序号 模块1 对应赛项编号 ZZ014 模块名称 城市轨道交通运营服务 子任务数量 12 竞赛时间 60分钟 任务描述 行车组织作业、票务设备故障处置以及突发事件应急处理 职业要素 R基本专业素养 R专业实践技能 R协…

【MySQL】事务、事务隔离级别、死锁

文章目录 1. 事务1.1 事务的属性 ACID1.2 创建事务1.3 autocommit 2. 并发和锁定2.1 并发问题 3. 事务隔离级别3.1 读未提交3.2 读已提交3.3 可重复读:MySQL的默认事务隔离级别3.4 序列化 4. 死锁 1. 事务 事务:单个工作单元的一组SQL语句。事务中的所有…

Python的环境搭建环境配置()

Python 环境搭建 一,下载Python 1.去官网 www.python.org 下载环境 2.如图点击Download 3.选择Windows 4.如图直接下载 5.直接勾选 6.后面就一直默认选项 Win11 安装目录 不能放在C盘的ProgramFIle路径下 二,测试环境是否安装成功 1.winR 输入cmd 2.输入python --versio…

React AntDesign form表单文件上传 nodejs formidable 接受参数并把文件放置后端项目相对目录指定文件夹下面

@umijs/max 请求方法 // 上传文件改成form表单 export async function uploadFile(data, options) {return request(CMMS_UI_HOST + /api/v1/uploadFile, {method: POST,data,requestType: form,...(options || {}),}); }前端调用方法 注意upload组件上传 onChange的如下方法,…

strlen

strlen()从字符串的开头位置依次往后面计数,直到遇到‘\0’停止,所计算的字符串大小为‘\0’以前的字符所计算的值,最终的字符串长度不包括‘\0’ 它的原型是size_t strlen(const char* str) 例如一个数组 char arr…

【JS】事件循环机制

一、JS单线程、异步、同步概念 众所周知,JS是单线程(如果一个线程删DOM,一个线程增DOM,浏览器傻逼了~所以只能单着了),虽然有webworker酱紫的多线程出现,但也是在主线程的控制下。we…

服务器数据恢复-服务器断电导致linux操作系统数据丢失的数据恢复案例

linux操作系统服务器数据恢复环境: 某品牌R730服务器MD3200系列存储,linux操作系统。 服务器故障: 机房意外断电导致服务器linux操作系统部分文件丢失。 服务器数据恢复过程: 1、将故障服务器连接到北亚企安数据恢复中心备份服务器…

【JVM】一、认识JVM

文章目录 1、虚拟机2、Java虚拟机3、JVM的整体结构4、Java代码的执行流程5、JVM的分类6、JVM的生命周期 1、虚拟机 虚拟机,Virtual Machine,一台虚拟的计算机,用来执行虚拟计算机指令。分为: 系统虚拟机:如VMware&am…

如何在Portainer部署一个web站点到Nginx容器并结合内网穿透远程访问

文章目录 前言1. 安装Portainer1.1 访问Portainer Web界面 2. 使用Portainer创建Nginx容器3. 将Web静态站点实现公网访问4. 配置Web站点公网访问地址4.1公网访问Web站点 5. 固定Web静态站点公网地址6. 固定公网地址访问Web静态站点 前言 Portainer是一个开源的Docker轻量级可视…

Appearance-Motion Memory Consistency Network for Video Anomaly Detection 论文阅读

Appearance-Motion Memory Consistency Network for Video Anomaly Detection 论文阅读 AbstractIntroductionRelated WorkMethodExperimentsConclusions阅读总结 论文标题:Appearance-Motion Memory Consistency Network for Video Anomaly Detection 文章信息&am…

Node.js-模块化(二)

1. 模块化的基本概念 1.1 什么是模块化 模块化是指解决一个复杂问题时,自顶向下逐层将系统拆分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。 1.2 编程领域中的模块化 编程领域中的模块化,就是遵守固定的规则&…

大一C语言作业题目2

目录 字符串? struct? index细节? scanf细节? 7-2 找出总分最高的学生 给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符…

数据结构和算法笔记2:二分法

二分法网上有两种写法&#xff0c;一种左闭右闭&#xff0c;一种左闭右开&#xff0c;个人习惯左闭右闭的写法&#xff0c; 有序数组查找数 这是标准二分法&#xff0c;对应力扣的704. 二分查找&#xff1a; 求值为target的索引 int search(vector<int>& nums, i…

说说 style gan 中的感知路径长度(Perceptual Path Length)

我在之前的博库中介绍了 style gan 的基本原理&#xff0c;原文中有提出感知路径长度&#xff08;Perceptual Path Length&#xff09;的概念。这是一种评价生成器质量的方式。 PPL基本思想&#xff1a;给出两个随机噪声 z 1 , z 2 ​ &#xff0c;为求得两点的感知路径长度PPL…

利用ffmpeg cv2取h265码流视频(转换图片灰屏问题解决)

利用海康威视相机拍出来的视频是H265格式的&#xff0c;相比于常规的H264编码&#xff0c;压缩率更高&#xff0c;但因此如果直接用正常取流方法读取&#xff0c;会出现无法读取的情况 1. 如图h265码流取出图片为灰屏 2 、解决灰屏问题 import subprocess import cv2# 将h265流…

Spring事务管理—讲解、案例、应用

简介&#xff1a;Spring事务管理和数据库的事务管理的功能作用上是一样的&#xff0c;在学习数据库时&#xff0c;为了数据完整性&#xff0c;采用了事务管理&#xff0c;即开启事务、提交事务和管理事务。在SpringBoot框架中添加一个注解 Transactional 就可以将当前方法、类和…

c语言错误总结

函数 A:void类型函数可以 B&#xff1a;不需要&#xff0c;如果return 不返回任何值&#xff0c;函数会在return语句执行后终止执行&#xff0c;后面的语句不会执行 C&#xff1a;对的 D&#xff1a;不可能&#xff0c;return只能返回一个数据 A:函数不一定有返回值 B:可以…

AUTOSAR从入门到精通-存储配置(NvM)(六)

目录 几个相关概念 Sector Page Block 原理 NVRAM Block NVM基本操作

柔性屏的性能、使用、维护

柔性屏是一种新型的显示技术&#xff0c;相比传统刚性屏幕&#xff0c;具有许多独特的优势。以下是关于柔性屏的性能、使用和维护的详细介绍&#xff1a; 一、性能 弯曲性&#xff1a;柔性屏幕可以轻松弯曲、卷曲或弯折&#xff0c;适应不同的表面形状&#xff0c;如弧形墙面、…