将短时间内的到达数据转换为生成器函数

时间:2019-03-24 10:29:57

标签: python pandas

我有一个数据集,其中包含24小时窗口的到达时间。通过绘制数据,我注意到它似乎是大致线性的。我想将其转换为python中的生成器。

绘制的数据:https://i.imgur.com/i2CJhtY.png

Arrival data in min of day:
287.73
302.17
318.03
357.66
389.87
392.82
395.99
406.47
446.29
466.47
...
1341.88
1342.17
1348.14
1348.76
1369.15
1384.69
1390.71
Day ends at 1440mins

如何将此24h数据转换为一个生成器函数,以便即使在原始24h周期之后,每次调用该函数时都可以生成下一个到达时间?它不必是线性函数,也可以是指数函数。

我当时正在考虑将数据外推到大型df集中,但这似乎在内存上效率很低,而且我也不确定如何以这种方式外推。

def generator(df):
    for index, row in df.iterrows():
        yield row['time']

1 个答案:

答案 0 :(得分:1)

(已编辑:改进了生成器的输出格式)

您可能希望对此进行线性回归。

这个想法是在数据集上训练模型以学习该功能。这称为“拟合”模型。然后,您可以使用此模型预测未来的到达时间。

这里是一个例子:

我将假设您的数据框如下所示:

    0
0   20.130714
1   37.598029
2   46.015164
3   52.042456
4   64.218346
5   58.528393
....
145 1296.520794
146 1320.282179
147 1327.387859
148 1326.318235
149 1337.973246

第一列是索引,第二列是到达时间。

from sklearn.linear_model import LinearRegression

def generator(df):
    X = df.index.values.reshape(-1,1)
    y = df.values

    reg = LinearRegression().fit(X,y)

    i=1
    while True:
        yield np.asscalar(reg.predict(X[-1].reshape(1,-1)+i))
        i+=1

测试:

for i,v in enumerate(generator(df)):
    print(i,v)
    if i == 10:
        break

收益:

0 1358.2313994853853
1 1367.2216112477986
2 1376.2118230102114
3 1385.2020347726243
4 1394.1922465350372
5 1403.1824582974505
6 1412.1726700598633
7 1421.1628818222762
8 1430.1530935846895
9 1439.1433053471023
10 1448.1335171095152