【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项目中,您可以在pom.xml文件中配置本地仓库的路径。在pom.xml文件中,您可以添加以下配置来指定本地仓库的路径: <project>...<repositories><repository><id>local-repo</id><url>file://…...
Qt获取屏幕DPI缩放比
获取屏幕缩放比 网上很多代码是用 logicalDotsPerInch 除以 96 来获取屏幕缩放比: // Windows 除以 96,macOS 除以 72 qreal factor window->screen()->logicalDotsPerInch() / 96.0; 当使能了缩放适配后,logicalDotsPerInch 值就不…...
Spring MVC控制层框架
三、Spring MVC控制层框架 目录 一、SpringMVC简介和体验 1. 介绍2. 主要作用3. 核心组件和调用流程理解4. 快速体验 二、SpringMVC接收数据 1. 访问路径设置2. 接收参数(重点) 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基础概念
目录 任务(Jobs) 构建(Builds) 触发器(Triggers) 构建环境(Build Environment): 插件(Plugins): 参数化构建(Paramet…...
AWS 知识二:AWS同一个VPC下的ubuntu实例通过ldapsearch命令查询目录用户信息
前言: 前提:需要完成我的AWS 知识一创建一个成功运行的目录。 主要两个重要:1.本地windows如何通过SSH的方式连接到Ubuntu实例 2.ldapsearch命令的构成 一 ,启动一个新的Ubuntu实例 1.创建一个ubuntu实例 具体创建实例步骤我就不…...
Ubuntu 常用命令之 fdisk 命令用法介绍
📑Linux/Ubuntu 常用命令归类整理 fdisk 是一个用于处理磁盘分区的命令行工具,它在 Linux 系统中广泛使用。fdisk 命令可以创建、删除、更改、复制和显示硬盘分区,以及更改硬盘的分区 ID。 fdisk 命令的常用参数如下 -l:列出所…...
论文中公式怎么降重 papergpt
大家好,今天来聊聊论文中公式怎么降重,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧,可以借助此类工具: 论文中公式怎么降重 一、引言 在论文撰写过程中,公式是表达学…...
27. 过滤器
Filter(过滤器)简介 Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 进行响应处理的前后实现一些特殊的功能。在 Servlet API 中定义了三个接口类来开供开发人员编写 Filter 程序:Filter, FilterChain, FilterConfigFi…...
做一个wiki页面是体验HTML语义的好方法
HTML语义:如何运用语义类标签来呈现Wiki网页 在上一篇文章中,我花了大量的篇幅和你解释了正确使用语义类标签的好处和一些场景。那么,哪些场景适合用到语义类标签呢,又如何运用语义类标签呢? 不知道你还记不记得在大…...
金融CRM有用吗?金融行业CRM有哪些功能
市场形式波诡云谲,金融行业也面临着资源体系分散、竞争力后继不足、未知风险无法规避等问题。金融企业该如何解决这些问题,或许可以了解一下CRM管理系统,和其提供的金融行业CRM解决方案。 金融行业是银行业、保险业、信托业、证券业和租赁业…...
@XmlAccessorType+@XmlElement完美解决Java类到XML映射问题
前言: 最近项目在做静态代码扫描的时候,出现Java类中成员变量命名的问题,开头字母必须小写,但是这个类成员是对接其他公司的字段,对方提供的请求格式是XML,必须将Java类转化为XML的格式,而且这…...
软件渗透测试有哪些测试流程?权威安全测试报告的重要性
软件渗透测试也是安全测试的一种,是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。作为网络安全防范的一种新技术,对于网络安全组织具有实际应用价值。 一、软件渗透测试的过程 软件渗透测试的过程通常包括四个主…...
安防视频融合云平台/智慧监控平台EasyCVR如何添加验证码调用接口?
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...
浏览器输入一个url,它的解析过程
URL解析: 浏览器首先解析URL,提取其中的协议(例如,HTTP、HTTPS)、域名和路径等信息。这个过程被称为URL解析。 DNS解析: 浏览器会检查域名的IP地址是否已经缓存。如果没有缓存或者缓存已经过期,…...
第29节: Vue3 列表渲染
在UniApp中使用Vue3框架时,你可以使用列表渲染语法来动态地渲染一个列表。下面是一个示例,演示了如何在UniApp中使用Vue3框架使用列表渲染: <template> <view> <button click"addItem">Add Item</button&g…...
CloudPulse:一款针对AWS云环境的SSL证书搜索与分析引擎
关于CloudPulse CloudPulse是一款针对AWS云环境的SSL证书搜索与分析引擎,广大研究人员可以使用该工具简化并增强针对SSL证书数据的检索和分析过程。 在网络侦查阶段,我们往往需要收集与目标相关的信息,并为目标创建一个专用文档,…...
【网络安全】学习Web安全必须知道的一本书
【文末送书】今天推荐一本网络安全领域优质书籍。 目录 正文实战案例1:使用Docker搭建LAMP环境实战案例2:使用Docker搭建LAMP环境文末送书 正文 学习Web安全离不开Web,那么,需要先来学习网站的搭建。搭建网站是每一个Web安全学习…...
千帆 AppBuilder 初体验,不仅解决解决了我筛选简历的痛苦,更是让提效10倍!
文章目录 🌟 前言🌟 什么是百度智能云千帆 AppBuilder🌟 百度智能云千帆 AppBuilder 初体验🌟 利用千帆AppBuilder搭建简历小助手🌟 让人眼前一亮的神兵利器 - 超级助理 🌟 前言 前两天朋友 三掌柜 去北京…...
Ubuntu 常用命令之 cal 命令用法介绍
📑Linux/Ubuntu 常用命令归类整理 cal命令在Ubuntu系统下用于显示日历。它可以显示任何特定月份或整个年份的日历。 cal命令的参数如下 -1:只显示当前月份的日历。-3:显示前一个月、当前月和下一个月的日历。-s:指定日历的开始…...
项目中webpack优化配置(1)
项目中webpack优化配置 一. 开发效率, 体验 1. DLL(开发过程中减少构建时间和增加应用程序的性能) 使用 DllPlugin 进行分包,使用 DllReferencePlugin(索引链接) 对 manifest.json 引用,让一些基本不会改动的代码先…...
【Qt之Quick模块】5. QML基本类型及示例用法
QML格式 QML基本类型 在 QML 中,有以下基本类型: int:整数类型。 Rectangle {function myFunction() {// 输出 debug 信息console.log("11 " (11));}Component.onCompleted: {myFunction();} }结果: 2. real&…...
wordpress配置七牛云cdn/手机百度账号登录个人中心
近来通过Appium,Robotium等几个框架去了解移动平台自动化测试。Appium官方实例是使用ContactManager.apk,而Robotium使用的是SDK自带的Notepad.apk,为了方便比较,在了解Appium的同时把实例修改成跟Robotium一致的Notepad.apk并记录…...
装潢设计软件免费/seo代码优化工具
一. 前言在使用实践中, fastjson其实确实是简便易用, 但是无奈会有一定的安全漏洞隐患, 为了安全起见, 避免作频繁的 fastjson版本升级, 因此考虑用安全性更佳的jackson来替代全线应用中的fastjson, 其中遇到的问题还相当多, 总结归纳下重点有如下几点:应用场景下时间日期的使用…...
如何在微信公众号添加wordpress/百度推广后台登录页面
在采样速率和可用带宽方面,当今的射频模数转换器(RF ADC)已有长足的发展。其中还纳入了大量数字处理功能,电源方面的复杂性也有提高。那么,当今的RF ADC为什么有如此多不同的电源轨和电源域?为了解电源域和电源的增长情况…...
前端开发中英文网站怎么做/官方百度app下载安装
#Android应用界面开发 第三章学习 第三部分 异步处理中使用AsyncTask踩过的坑 AsyncTask是Android提供的工具之一,可以简单方便地用于子线程更新UI,他也是个抽象类,使用时需要重写其方法,根据定义时传入的3个参数类型来判断重写哪…...
如何用服务器代替空间做网站/百度手机app
该文章转载自 http://fann.im/blog/2012/04/12/difference-between-objectforkey-and-valueforkey-in-nsdictionary/ 感谢原作者 从 NSDictionary 取值的时候有两个方法,objectForKey: 和 valueForKey:,这两个方法具体有什么不同呢? 先从 NS…...
三好街做网站的公司/网站seo诊断
今天安装Sql Server之后,出现SQL Server只能使用Windows身份登录,不能使用sa等Sql server身份进行登录的问题是由于sql server只设置了Windows身份验证,没有设置sa登录,修改登录方式。在网上查了一下,找到了这篇文章&a…...