python - 将短周期的到达数据转换为生成器函数
问题描述
我有一个包含 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
如何将此 24 小时数据转换为生成器函数,以便我每次调用该函数时都可以生成下一个到达时间,甚至超过原来的 24 小时周期?它不需要是线性函数,也可能是指数函数。
我正在考虑将数据外推到一个大的 df 集中,但这在内存上似乎相当低效,我也不确定如何以这种方式外推。
def generator(df):
for index, row in df.iterrows():
yield row['time']
解决方案
(编辑:改进的生成器输出格式)
您可能希望对此进行线性回归。
这个想法是在你的数据集上训练一个模型来学习函数。这称为“拟合”模型。然后您可以使用此模型来预测未来的到达时间。
这是一个例子:
我将假设您的数据框如下所示:
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
推荐阅读
- javascript - 使用 setTimeout 函数时出现 toLowerCase 错误
- java - 如何使用重试模板捕获特定异常
- java - 为什么我的 toast 应用程序无法编译
- r - 如何在与“日期”关联的 quanteda 的“textstat_keyness”函数中设置目标
- python - 如何通过 Keras Tuner 函数传递多个参数
- azure - Terraform Azure 提供程序 - 只能使用 azurerm_linux_virtual_machine 加密 OS 磁盘吗?
- r - sec.axis() 对每个方面都有不同的转换
- flutter - 颤动中的Listview中的弹跳容器
- javascript - 带有 Chakra UI 的 React-hook-form 未在 NextJS 中显示验证错误消息
- python - 生成直方图时如何防止重复的 NaN 条目?