如何在python中绘制显示置信区间的时间序列数组?

2024-06-06 20:46:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些时间序列慢慢增加,但在很短的时间内,它们是非常波动的。例如,时间序列可能如下所示:

[10 + np.random.rand() for i in range(100)] + [12 + np.random.rand() for i in range(100)] + [14 + np.random.rand() for i in range(100)] 

我想把时间序列的绘制重点放在大势上,而不是小浪上。是否有方法绘制一段时间内的平均值,并用一条指示波的条纹包围(条纹应表示置信区间,数据点可能在该时刻)?

简单的情节如下:

enter image description here

我想要的,带置信区间的曲线图如下:

enter image description here

在Python中有一种优雅的方式来实现它吗?


Tags: 方法in重点fornp时间绘制range
3条回答

可以使用pandas函数rolling(n)生成连续点上的平均值和标准偏差值。

对于置信区间的阴影(用标准差之间的空格表示),可以使用fill_between()中的函数matplotlib.pyplot。有关更多信息,您可以查看here,从中可以获得以下代码的灵感。

time_series_df = pd.DataFrame(time_series_array)
smooth_path    = time_series_df.rolling(20).mean()
path_deviation = 2 * time_series_df.rolling(20).std()
plt.plot(smooth_path, linewidth=2)
plt.fill_between(path_deviation.index, (smooth_path-2*path_deviation)[0], (smooth_path+2*path_deviation)[0], color='b', alpha=.1)

通过上面的代码,您可以获得如下结果: enter image description here

可以用多种方法生成平滑曲线。

一个简单的方法是使用移动平均值(滑动窗口中点的平均值)。如果您将数据存储在Pandas数据框中,则可以很容易地绘制出来。你也可以计算每个点的标准误差来得到你的置信区间。

另一种方法是将模型与数据拟合,并使用该方法生成平滑曲线。例如,可以使用高斯过程来实现这一点。该模型还可以为每个点产生期望的置信区间。有关详细信息,请参阅此Scikit-learn example

看起来,你的性病加倍了两次。我想应该是这样的:

time_series_df = pd.DataFrame(time_series_array)
smooth_path = time_series_df.rolling(20).mean()
path_deviation = time_series_df.rolling(20).std()
plt.plot(smooth_path, linewidth=2)
plt.fill_between(path_deviation.index, (smooth_path-2*path_deviation)[0], (smooth_path+2*path_deviation)[0], color='b', alpha=.1)

相关问题 更多 >