2022 年首届“钉钉杯”大学生大数据挑战赛B题:航班数据分析与预测——国奖论文代码分享

2023年的钉钉杯挑战赛马上要来了~这里给大家分享一下去年的国奖论文思路与代码

摘要:

        随着民航事业的迅速发展 , 飞机出行已成为未来发展的一种必然趋势,然而近年来, 航班延误现象频频发生,成为困扰机场和航空公司的难题。对航班延误做出合理评价是 分析航班延误总体水平、降低延误成本,以及制定相关处置预案的重要基础,有着重要 的现实运用价值。
        针对机场聚类分析问题的第一部分,首先按照题目要求的五种属性对原始数据集进 行预处理和计算,整理成 2006-2008 年所有航班数据涉及的全部机场属性数据集。在进行聚类分析前,我们采用霍普金斯统计量判断数据集的聚类趋势,计算得到该值为 0.94 , 十分接近于 1 ,即可以认为数据集具有较好的聚集特性,适于采用聚类方法。接着,我们分别采用 k-means 聚类、层次聚类、 DBSCAN 聚类方法基于计算出的五种属性对机场进行分类讨论,并采用轮廓系数对聚类结果进行评价与比较。结果得出,K-means 聚类方法对于该问题的聚类效果最好,机场在五个维度的属性变量下被分为了四类。
      针对机场聚类分析问题的第二部分,首先需要基于 2006-2008 年的航班信息和机场数据进行特征属性的提取。综合考虑机场的延误情况、航班特征和地理位置,人工筛选以及计算出若干属性变量,接着利用低方差过滤的方法剔除方差过小的属性,得到 21个机场属性特征。然后对 21 个属性进行因子分析,提取出 5 个公因子,分别反映机场的出发延误属性,到达延误属性,航班起落属性,地理属性和航班异常属性。对其进行层次聚类分析,结合聚类结果及一致性聚类分析判断出机场被分成 4 类效果较好。通过上述两种聚类方式与结果的对比,我们采用的自选综合性因子属性具有更好的解释性, 且聚类效果显著,稳定性高。针对起飞航班的延误分析,我们首先筛选可能影响到飞机是否延误的影响因素,接着考虑到总体数据量较大,故对全部的航班信息进行均匀随机抽样。将影响因素特征作为训练集输入,然后将延误与否视作虚拟变量(True False )输出进行分类。在建立模型时,我们发现,数据输入与输出具有良好的线性特征,拟合效果好,预测正确率高, 其输入数据的非线性性不强。我们采用 Logistic 回归 预测模型判断航班是否延误,测试
集准确率达到 0.9476
    针对到达航班延误的分析,我们采取与起飞航班相同的处理方法,根据机场分布对 原始数据集进行抽样,使用 Logistic 回归 预测模型判断航班是否延误最终测试结果准确 率可以达到 0.9677
关键字: 航班延误 K-means 聚类 层次聚类 Logistics 逻辑回归

数据预处理

import pandas as pd
import numpy as np
#06-08预处理
df1=pd.read_csv('2006.csv')
df2=pd.read_csv('2007.csv')
df3=pd.read_csv('2008.csv')
df=pd.concat([df1,df2,df3])
df=df.fillna(0)
df.to_csv('06-08.csv',index=None)
df=pd.read_csv('06-08.csv')
df=df.drop(labels=['Year',
'Month','DayofMonth','DayOfWeek','UniqueCarrier','FlightNum','TailNum'], axis=1)
df.to_csv('r06-08.csv',index=None)
#06-08计算
df=pd.read_csv('r06-08.csv')
df1=df['Origin'].value_counts()
df2=df['Dest'].value_counts()
df1.to_csv('ORIGIN.csv')
df2.to_csv('DEST.csv')
#计算起飞和到达航班总数
df1=pd.read_csv('ORIGIN.csv')
df2=pd.read_csv('DEST.csv')
df=pd.merge(df1, df2, on=['airport'], how='outer')
df=df.fillna(0)
df['Sum']=df['Origin']+df['Dest']
df.to_csv('Airports.csv',index=None)
#计算到达延迟超过10分钟航班的比例,出发延迟超过10分钟航班的比例,取消航班的比例,该机场所有航线的平均距离
df=pd.read_csv('Airports.csv')
ss=['ArrDelay10','DepDelay10','Cancelled','AveDistance']
for s in ss:
df[s]=0
df0=pd.read_csv('r06-08.csv')
ii=0
for i in df['airport']:
num1=len(df0[(df0['Dest']==i) & (df0['ArrDelay']>10)])
df['ArrDelay10'].loc[ii]=num1/df['Dest'].loc[ii] #计算到达延迟超过10分钟航班的比例
num2 = len(df0[(df0['Origin'] == i) & (df0['DepDelay'] > 10)])
df['DepDelay10'].loc[ii] = num2 / df['Origin'].loc[ii] #计算出发延迟超过10分钟航班的比例
num3 = len(df0[(df0['Cancelled'] == 1) & (df0['Dest'] == i)])
num4 = len(df0[(df0['Cancelled'] == 1) & (df0['Origin'] == i)])
df['Cancelled'].loc[ii] = (num3+num4) / df['Sum'].loc[ii] # 计算取消航班的比例
df00=df0[(df0['Origin'] == i) | (df0['Dest'] == i)]
df['AveDistance'].loc[ii] =df00['Distance'].sum() / df['Sum'].loc[ii] #
计算所有航线的平均距离
ii=ii+1
df.to_csv('Airport.csv',index=None)
#新属性计算
#计算到达延迟超过10分钟航班的比例,出发延迟超过10分钟航班的比例,取消航班的比例,该机场所有航线的平均距离
df=pd.read_csv('Airport.csv')
df=df.fillna(0)
ss=['ArrDelay30','DepDelay30','SumDelay10','SumDelay30','AveArrDelay','AveDepDelay','AveArrDelay0','AveDepDelay0']
for s in ss:
df[s]=0
df0=pd.read_csv('r06-08.csv')
ii=0
for i in df['airport']:
num1=len(df0[(df0['Dest']==i) & (df0['ArrDelay']>30)])
df['ArrDelay30'].loc[ii]=num1/df['Dest'].loc[ii] #计算到达延迟超过30分钟航班的比例
num2 = len(df0[(df0['Origin'] == i) & (df0['DepDelay'] > 30)])
df['DepDelay30'].loc[ii] = num2 / df['Origin'].loc[ii] #计算出发延迟超过30分钟航班的比例
df['SumDelay30'].loc[ii] = (num1+num2)/df['Sum'].loc[ii]#计算总延迟超过30分钟航班的比例
num3 = len(df0[(df0['Dest'] == i) & (df0['ArrDelay'] > 10)])
num4 = len(df0[(df0['Origin'] == i) & (df0['DepDelay'] > 10)])
df['SumDelay10'].loc[ii] = (num3 + num4) / df['Sum'].loc[ii] # 计算总延迟超过10分钟航班的比例
df00=df0[(df0['Dest'] == i) & (df0['ArrDelay'] > 0)]
df['AveArrDelay'].loc[ii] =df00['ArrDelay'].sum() / len(df00) #
计算所有航班的平均到达延误时间(+)
df01 = df0[(df0['Origin'] == i) & (df0['DepDelay'] > 0)]
df['AveDepDelay'].loc[ii] = df01['DepDelay'].sum() / len(df01) #
计算所有航班的平均出发延误时间(+)
df02 = df0[(df0['Dest'] == i)]
df['AveArrDelay0'].loc[ii] = df02['ArrDelay'].sum() / len(df02) #
计算所有航班的平均到达延误时间(all)
df03 = df0[(df0['Origin'] == i)]
df['AveDepDelay0'].loc[ii] = df03['DepDelay'].sum() / len(df03) #
计算所有航班的平均出发延误时间(all)
ii=ii+1
df.to_csv('Airports_extended.csv',index=None)
#计算到达延迟超过10分钟航班的比例,出发延迟超过10分钟航班的比例,取消航班的比例,该机场所有航线的平均距离
df=pd.read_csv('Airports_extended.csv')
df=df.fillna(0)
ss=['DelayforA','DelayforB','DelayforC','DelayforD','lat','long']
for s in ss:
df[s]=0
df0=pd.read_csv('r06-08.csv')
dfa=pd.read_csv('airports.csv')
ii=0

完整版pdf请私戳获取 

猜你喜欢

转载自blog.csdn.net/lichensun/article/details/131466811