自适应滑动窗算法航班排序的代码注释
时间: 2023-10-09 22:16:57 浏览: 48
#导入模块
import pandas as pd
import numpy as np
#读取数据
df = pd.read_csv('flight_data.csv')
#定义滑动窗口大小和阈值
window_size = 10
threshold = 2
#定义函数计算每个滑动窗口的标准差
def window_std(window):
return np.std(window)
#定义函数计算每个滑动窗口的均值
def window_mean(window):
return np.mean(window)
#定义函数计算每个航班的标准差
def flight_std(series):
return np.std(series)
#定义函数计算每个航班的均值
def flight_mean(series):
return np.mean(series)
#定义函数对每个航班进行排序
def sort_flights(df):
#将每个航班的数据按时间排序
df = df.sort_values('time')
#计算每个航班的标准差和均值
df['std'] = df['delay'].rolling(window_size).apply(window_std, raw=False)
df['mean'] = df['delay'].rolling(window_size).apply(window_mean, raw=False)
#将每个航班的数据按标准差和均值排序
df = df.sort_values(['std', 'mean'], ascending=[True, False])
return df
#定义函数对航班进行分组
def group_flights(df):
groups = []
#将第一个航班加入第一个组
group = [df.iloc[0]]
for i in range(1, len(df)):
#将当前航班的标准差和均值与组内航班的标准差和均值比较
current_flight_std = df.iloc[i]['std']
current_flight_mean = df.iloc[i]['mean']
group_std = flight_std(pd.Series([flight['delay'] for flight in group]))
group_mean = flight_mean(pd.Series([flight['delay'] for flight in group]))
#如果当前航班与组内航班的标准差和均值都在阈值内,将当前航班加入当前组
if abs(current_flight_std - group_std) <= threshold and abs(current_flight_mean - group_mean) <= threshold:
group.append(df.iloc[i])
#如果当前航班与组内航班的标准差和均值都不在阈值内,将当前组加入组列表,将当前航班加入新的组
else:
groups.append(group)
group = [df.iloc[i]]
#将最后一个组加入组列表
groups.append(group)
return groups
#对每个航班进行排序
df = sort_flights(df)
#对航班进行分组
groups = group_flights(df)
#输出分组结果
for i, group in enumerate(groups):
print('Group', i+1)
for flight in group:
print(flight['flight_id'], flight['time'], flight['delay'])
print()