当前位置: 首页 > news >正文

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

相关文章:

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

时光漫游:Python 时间序列分析全指南 前言 在数字化时代,时间序列数据扮演着关键的角色,从金融到气象再到生产制造。本文将引导你穿越Python丰富的时间序列分析工具,探索从基础统计到机器学习和深度学习的各个层面。无论你是初学…...

flutter开发实战-第一帧布局完成回调实现

flutter开发实战-第一帧布局完成回调实现 在开发中,我们有时候需要在第一帧布局完成后调用一些相关的方法。这里记录一下是实现过程。 Flutter中有多种不同的Binding,每种Binding都负责不同的功能。下面是Flutter中常见的Binding: 这里简单…...

Windows11编译VTM源码生成Visual Studio 工程

VTM介绍 VTM作为H266/VVC标准的官方参考软件,一直用作H266/VVC标准的研究和迭代。关于H2666/VVC标准的介绍、代码、提案、文档等,可以参考H266/VVC编码标准介绍。 官方代码地址: https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM&…...

[数据结构进阶 C++] 二叉搜索树(BinarySearchTree)的模拟实现

文章目录 1、二叉搜索树1.1 二叉搜索数的概念1.2 二叉搜索树的操作1.2.1 二叉搜索树的查找1.2.2 二叉搜索树的插入1.2.3 二叉搜索树的删除 2、二叉搜索树的应用2.1 K模型2.2 KV模型 3、二叉搜索树的性能分析4、K模型与KV模型完整代码4.1 二叉搜索树的模拟实现(K模型…...

PostGIS学习教程十四:更多的空间连接

PostGIS学习教程十四:更多的空间连接 在上一节中,我们看到了ST_Centroid(geometry)和ST_Union([geometry])函数,以及一些简单的示例。在本节中,我们将用它们做一些更详细的事情。 提示:写完文章后,目录可以…...

【爬虫软件】孔夫子二手书采集

项目演示 孔网爬取图书信息 目录结构 [ |-- api-ms-win-core-synch-l1-2-0.dll, |-- api-ms-win-core-sysinfo-l1-1-0.dll, |-- api-ms-win-core-timezone-l1-1-0.dll, |-- api-ms-win-core-util-l1-1-0.dll, |-- api-ms-win-crt-conio-l1-1-0.dll, |-- api…...

P8736 [蓝桥杯 2020 国 B] 游园安排

题目描述 L \mathrm{L} L 星球游乐园非常有趣,吸引着各个星球的游客前来游玩。小蓝是 L \mathrm{L} L 星球 游乐园的管理员。 为了更好的管理游乐园,游乐园要求所有的游客提前预约,小蓝能看到系统上所有预约游客的名字。每个游客的名字由一…...

初识Docker-什么是docker

Docker是一个快速交付应用、运行应用的技术 目录 一、Docker 二、运用场景 一、什么是Docker?它的作用是什么? Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题? Docker允许开发中将应用、依赖、函数库、配置一起打包&…...

maven的pom.xml设置本地仓库

配置 在Maven项目中&#xff0c;您可以在pom.xml文件中配置本地仓库的路径。在pom.xml文件中&#xff0c;您可以添加以下配置来指定本地仓库的路径&#xff1a; <project>...<repositories><repository><id>local-repo</id><url>file://…...

Qt获取屏幕DPI缩放比

获取屏幕缩放比 网上很多代码是用 logicalDotsPerInch 除以 96 来获取屏幕缩放比&#xff1a; // Windows 除以 96&#xff0c;macOS 除以 72 qreal factor window->screen()->logicalDotsPerInch() / 96.0; 当使能了缩放适配后&#xff0c;logicalDotsPerInch 值就不…...

Spring MVC控制层框架

三、Spring MVC控制层框架 目录 一、SpringMVC简介和体验 1. 介绍2. 主要作用3. 核心组件和调用流程理解4. 快速体验 二、SpringMVC接收数据 1. 访问路径设置2. 接收参数&#xff08;重点&#xff09; 2.1 param 和 json参数比较2.2 param参数接收2.3 路径 参数接收2.4 json参…...

vmware安装银河麒麟V10高级服务器操作系统

vmware安装银河麒麟V10高级服务器操作系统 1、下载银河麒麟V10镜像2、VMware安装银河麒麟V10高级服务器操作系统2.1、新建虚拟机2.2、安装虚拟机 3、配置银河麒麟V10高级服务器操作系统3.1、安装vmware tools3.2、配置静态IP地址 和 dns3.3、查看磁盘分区3.4、查看系统版本 1、…...

掌握Jenknis基础概念

目录 任务&#xff08;Jobs&#xff09; 构建&#xff08;Builds&#xff09; 触发器&#xff08;Triggers&#xff09; 构建环境&#xff08;Build Environment&#xff09;&#xff1a; 插件&#xff08;Plugins&#xff09;&#xff1a; 参数化构建&#xff08;Paramet…...

AWS 知识二:AWS同一个VPC下的ubuntu实例通过ldapsearch命令查询目录用户信息

前言&#xff1a; 前提&#xff1a;需要完成我的AWS 知识一创建一个成功运行的目录。 主要两个重要&#xff1a;1.本地windows如何通过SSH的方式连接到Ubuntu实例 2.ldapsearch命令的构成 一 &#xff0c;启动一个新的Ubuntu实例 1.创建一个ubuntu实例 具体创建实例步骤我就不…...

Ubuntu 常用命令之 fdisk 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 fdisk 是一个用于处理磁盘分区的命令行工具&#xff0c;它在 Linux 系统中广泛使用。fdisk 命令可以创建、删除、更改、复制和显示硬盘分区&#xff0c;以及更改硬盘的分区 ID。 fdisk 命令的常用参数如下 -l&#xff1a;列出所…...

论文中公式怎么降重 papergpt

大家好&#xff0c;今天来聊聊论文中公式怎么降重&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 论文中公式怎么降重 一、引言 在论文撰写过程中&#xff0c;公式是表达学…...

27. 过滤器

Filter(过滤器)简介 Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截&#xff0c;从而在 Servlet 进行响应处理的前后实现一些特殊的功能。在 Servlet API 中定义了三个接口类来开供开发人员编写 Filter 程序&#xff1a;Filter, FilterChain, FilterConfigFi…...

做一个wiki页面是体验HTML语义的好方法

HTML语义&#xff1a;如何运用语义类标签来呈现Wiki网页 在上一篇文章中&#xff0c;我花了大量的篇幅和你解释了正确使用语义类标签的好处和一些场景。那么&#xff0c;哪些场景适合用到语义类标签呢&#xff0c;又如何运用语义类标签呢&#xff1f; 不知道你还记不记得在大…...

金融CRM有用吗?金融行业CRM有哪些功能

市场形式波诡云谲&#xff0c;金融行业也面临着资源体系分散、竞争力后继不足、未知风险无法规避等问题。金融企业该如何解决这些问题&#xff0c;或许可以了解一下CRM管理系统&#xff0c;和其提供的金融行业CRM解决方案。 金融行业是银行业、保险业、信托业、证券业和租赁业…...

@XmlAccessorType+@XmlElement完美解决Java类到XML映射问题

前言&#xff1a; 最近项目在做静态代码扫描的时候&#xff0c;出现Java类中成员变量命名的问题&#xff0c;开头字母必须小写&#xff0c;但是这个类成员是对接其他公司的字段&#xff0c;对方提供的请求格式是XML&#xff0c;必须将Java类转化为XML的格式&#xff0c;而且这…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...