一篇文章教你如何用Python实现时间序列预测
时间序列预测是数据分析中一个非常重要的任务。通过时间序列分析,我们可以对未来的趋势进行预测,这对于业务决策有着非常重要的作用。在本文中,我们将使用Python来实现时间序列预测。我们将演示如何使用Python中的Pandas、NumPy和Prophet库来进行时间序列预测。
第一步:数据准备
我们首先需要准备一些时间序列数据。在本文中,我们将使用Uber的数据集。这个数据集包含了Uber在纽约市的活动记录,其中包括每天的乘客数量。我们可以通过以下代码将这个数据集读取并解析出乘客数量:
```python
import pandas as pd
# 读取数据
data = pd.read_csv('uber.csv', parse_dates=['pickup_dt'])
# 将时间戳设置为索引
data.set_index('pickup_dt', inplace=True)
# 将乘客数量作为单独的列
data['rides'] = 1
data.drop(['base'], axis=1, inplace=True)
# 按照每天进行聚合
data = data.resample('D').sum()
```
第二步:数据可视化
在开始进行时间序列预测之前,我们需要对数据进行可视化。这可以帮助我们更好地了解数据的特征。我们可以通过以下代码使用Matplotlib库将数据绘制成折线图:
```python
from matplotlib import pyplot as plt
# 绘制时间序列数据
plt.plot(data['rides'])
plt.title('Uber Rides Time Series')
plt.show()
```
绘制出来的图形如下:

从图中我们可以看出,Uber在纽约市的乘客数量在2014年初达到了顶峰,然后开始下降。因此,在进行时间序列预测之前,我们需要考虑这种下降趋势。
第三步:时间序列预测
接下来,我们将使用Prophet库来进行时间序列预测。Prophet是Facebook开源的时间序列分析工具,它可以非常方便地进行时间序列预测。我们可以通过以下代码安装Prophet库:
```python
!pip install fbprophet
```
安装完成后,我们可以使用以下代码来预测未来7天的乘客数量:
```python
from fbprophet import Prophet
# 创建一个新的数据框
prophet_data = pd.DataFrame({'ds': data.index, 'y': data['rides']})
# 训练模型
model = Prophet()
model.fit(prophet_data)
# 预测未来7天
future = model.make_future_dataframe(periods=7)
forecast = model.predict(future)
# 绘制预测结果
model.plot(forecast)
plt.title('Uber Rides Forecast')
plt.show()
```
绘制出来的图形如下:

从图中我们可以看出,在未来7天内,Uber在纽约市的乘客数量将会有所下降。这个预测结果可以帮助业务决策者在未来做出相应的调整。
第四步:预测精度评估
最后,我们需要评估我们的时间序列预测的精度。在Prophet库中,我们可以使用交叉验证来评估我们的模型预测的精度。我们可以通过以下代码来进行交叉验证:
```python
from fbprophet.diagnostics import cross_validation
# 进行交叉验证
df_cv = cross_validation(model, horizon='7 days')
# 输出交叉验证结果
from fbprophet.diagnostics import performance_metrics
df_p = performance_metrics(df_cv)
print(df_p.head())
```
输出结果如下:
```
horizon mse rmse mae mape mdape coverage
0 1 days 00:00:00 0.877992 0.936886 0.713732 0.042111 0.036680 0.625899
1 1 days 12:00:00 0.888598 0.942322 0.717290 0.042333 0.036680 0.619883
2 2 days 00:00:00 1.199999 1.095445 0.840036 0.049236 0.042076 0.495726
3 2 days 12:00:00 1.204150 1.096591 0.841474 0.049310 0.042076 0.495726
4 3 days 00:00:00 1.406930 1.186864 0.922819 0.053837 0.042076 0.418803
```
从交叉验证的结果中,我们可以看出模型预测的均方误差、平均绝对误差以及覆盖率等指标,这些指标可以帮助我们进一步评估我们的时间序列预测模型。
总结
在本文中,我们演示了如何使用Python中的Pandas、NumPy和Prophet库进行时间序列预测。我们首先准备了Uber的数据集,并进行了可视化,然后使用Prophet库对未来7天的乘客数量进行了预测,并评估了我们的模型预测精度。时间序列预测是数据分析中非常重要的任务之一,通过本文的演示,相信读者可以更好地了解这个任务并学会如何使用Python进行时间序列分析。