如何将多项式拟合到python中的时间序列数据

时间:2017-07-17 11:46:58

标签: python machine-learning time-series polynomials

我有一个数据框: 数据帧的索引是时间对象,一列名为“空闲持续时间”,作为一些数值。

14:09:00           1644
14:22:35            321
14:25:17            498
14:26:10            195
14:28:22            216
14:31:58            101
14:32:07            268
14:36:26            154
14:40:26            160
14:42:46           3085
14:45:21            172
14:50:29             71
14:51:14            594
14:52:03             79
14:55:32            130
14:55:39             69
14:57:29             80
14:58:15             68
14:59:57             78
15:02:15            112
15:03:09            191
15:04:10            537
15:04:26             85
15:04:45             65
15:05:20            223
15:07:28             95
15:13:26            117
15:13:39            176
15:15:22             73
15:15:30             70
...                 ...
16:08:29            181
16:09:47            137
16:10:28            345
16:12:10            138
16:14:34             65
16:15:00            104
16:15:41             65
16:16:40             91
16:16:43            415
16:17:36            302
16:18:12           2478
16:19:17            644
16:24:19            654
16:24:52            163
16:25:32            276
16:29:08             65
16:29:23             72
16:30:19             65
16:32:10             79
16:32:56             85
16:34:32             90
16:34:41           1261
16:34:52             65
16:38:13            277
16:40:06            155
16:43:11            110
16:50:57           1190
16:52:59            142
16:56:30            756
17:00:02            116

[102 rows x 1 columns]

我希望将最佳多项式拟合到此数据,以预测接下来30分钟的空闲持续时间。我使用polyfit函数来拟合多项式。但是我收到了这个错误:

  

TypeError:不支持的操作数类型+:'datetime.time'和'float'

任何人都可以在这里提出错误的建议。我的代码是:

Idletimes=pd.DataFrame(SampleOne, index=Times, columns=['Idle_duration'])
Idletimes.sort_index(inplace=True)
z = np.polyfit(Idletimes.index, Idletimes['Idle_duration'], 2)
print(z)

1 个答案:

答案 0 :(得分:0)

您无法在日期对象上应用np.polyfitxy都应该是数字数组。

例如,请参阅the documentation中的以下示例:

x = np.array([0.0, 1.0, 2.0, 3.0,  4.0,  5.0])
y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])
z = np.polyfit(x, y, 3)
z
array([ 0.08703704, -0.81349206,  1.69312169, -0.03968254])

因此,您需要将日期列转换为某些数值。正如@Evert建议的那样,您可以尝试将其转换为从初始起点开始的秒数。