如何更改这段代码,使能够以五分钟为颗粒度,根据vehicletype_list里不同数字的显示,筛选不同车辆类型5分钟内的数据库,并且进行数据存入
时间: 2024-09-10 09:23:56 浏览: 43
为了按每五分钟粒度,根据不同车辆类型的计数,在`get_data`方法中进行调整,你可以这样做:
1. 首先,你需要在开始处理前计算出`start_time`对应的具体五分钟区间,例如 `five_min_intervals`,可以根据当前时间戳减去整数倍的5分钟。
```python
from datetime import timedelta, datetime
# 获取起始时间五分钟粒度的区间列表
def get_five_min_intervals(start_time):
end_time = start_time + timedelta(minutes=5)
intervals = []
while end_time <= df['timestamp'].max():
intervals.append((end_time - timedelta(minutes=5), end_time))
end_time += timedelta(minutes=5)
return intervals
# 使用这个函数替换原有的 start_time
five_min_intervals = get_five_min_intervals(start_time)
```
2. 然后,在遍历`vehicletype_list`之前,根据`five_min_intervals`过滤df,只保留特定区间的记录。
```python
filtered_dfs = {}
for interval in five_min_intervals:
filtered_df = df[(df['timestamp'] >= interval[0]) & (df['timestamp'] < interval[1])]
for i in vehicletype_list:
dt = filtered_df[filtered_df["vehicletype"] == i] # 只考虑该时间段内特定车辆类型的数据
...
```
3. 更新插入数据的部分,现在会为每个五分钟后的时间范围分别存储数据。
```python
for interval, dt in filtered_dfs.items():
sql_type = self.hp.get_database_params('db_type')
if sql_type == 'MYSQL':
self.stat_data_insert_mysql(dt, interval[0])
elif sql_type == 'MSSQLACTIVATE':
self.stat_data_insert_sqlsevel(dt, interval[0])
```
这样,每次循环都会处理一个五分钟的时间段,对每个车辆类型单独操作,存储相应时间范围内数据。
阅读全文