Ronald H. Coase 在当下,计算机科学已经是驾驶舱的日常,单纯的操作技能已经远不能代表飞行水平的高低。飞行品质已然数据化,保存在快速存储系统QAR中,每秒高达8次的采样率,对几百个参数进行记录,供飞行后进行飞行品质分析以提高飞行品质、供事件分析使用以查明原因、供大数据分析以节能增效等。 然而,由于种种原因,例如飞行员不熟悉IT,ITer不熟悉飞行,只有少数人能接触到数据,数据又以海量数字的形式展现,令人眼花缭乱、懵懵懂懂,导致QAR在飞行品质、节能增效上作用有限,而对飞行员的警告、处罚却越来越多,这也难怪,面对枯燥的数字,咱们政委能想到的除了超不超限,还能有什么呢? 所以,飞行员可以学会自己分析QAR数据。数据本身是无用的,除非你从中获取到有价值的洞察。通过数据可视化,从中发现趋势、发现改进方法,发现隐藏的问题,成为自己的专家。本篇与大家一起探讨一种简便的QAR数据分析方法。 QAR:快速访问记录器(Quick Access Recorder)是一种机载飞行数据记录仪,设计目的是提供快速、方便的方式访问原始飞行数据,可以同时采集数百个数据,涵盖了飞机运行品质的绝大部分参数。飞行结束后通过USB或无线方式下载到本地保存。Python:是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。这句话的意思是,写了代码可以直接运行,也可以编译成exe文件运行;可以使用大量的库和函数,提高效率,就像盖大楼,有人用砖一点点起,有人用混凝土浇灌,也有人用工厂定制的楼层盖大楼,Python语言就类似最后一种,简单又快速,因为每个楼层、房间的细节工厂都准备好了,盖楼者只需要关心盖什么样的楼。Pycharm:PyCharm是Python开发工具(IDE)之一,适合包括飞行员这类专业人员使用,带有一整套可以帮助用户提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制。数据可视化:可视化的终极目标是洞悉蕴含在数据中的现象和规律,这里面有多重含义:发现、决策、解释、分析、探索和学习。数据可视化可以看到交互界面,更适合于探索性地分析数据。数据可视分析是将数据呈现给用户以易于感知的图形符号,让用户交互地理解数据。数据的处理和图形化展现,通常用Excel也能胜任,但是以下几个难点无法解决:
- 数据量大,QAR通常几百列几万行,Excel处理小规模数据还可以,多了就不行。
- 空数据处理,QAR不是每个数据都同步采样,有的1秒1次,有的1秒多次,造成很多空格没有数据,这样一来很难把多个字段数据画到一张图上对比分析。
而对于Python,只需要不多的几行代码,上面问题都将转为它的优势,而且,它可以对细节部分不断放大,方便查找问题所在。第一步:你的电脑只需要安装Python以及Pycharm两个应用,具体步骤请参考(实际上直接安装Pycharm即可,它会自动安装Python): https://www.runoob.com/python3/python3-install.html安装时,如果提示path之类的选项,都打勾就是,否则所写代码无法执行。 安装好之后,打开Pycharm,如图所示,新建一个Python文件,开始你的第一个Python程序吧:找公司索取你的某个航班的QAR数据包,通常是CSV格式,可以用Excel打开,另存为qar.xlsx即可。 然后,对着你的Py程序点击右键,选show in explorer,会跳出一个文件夹(小技巧:为方便使用,请为这个文件夹建立桌面快捷方式)。在这个文件夹内新建一个文件夹,命名data,并将qar.xlsx复制到这里。第三步:新建一个Py文件(起名qar或者你喜欢的其他名字),装入以下代码(全选并复制粘贴即可):# designed by Ubuntu330 from openpyxl import load_workbook #调用操作excel的库openpyxl 版本3.0.5 import matplotlib.pyplot as plt #调用绘图库matplotlib 版本3.3.2 import time plt.figure(figsize=(8,4.5),facecolor='black') #定义窗口大小颜色 plt.style.use('dark_background') #选择图表配色风格 print('Loading data......pls wait......',time.strftime('%H:%M:%S',time.localtime()) ) #安慰式提示 wb = load_workbook('data\qar.xlsx') #从文件夹data中装入QAR原始数据qar.xlsx ws = wb.active #打开数据表 print('Data loaded...',time.strftime('%H:%M:%S',time.localtime()) ) #载入数据完成 # 设计单列图形化函数 def qaritem(column,name,style,width,color): listx = [] listy=[] list = [] for cell in ws[column]: c=(cell.value) if isinstance(c,int) or isinstance(c,float): #找出数字,去除非数字格 list.append(c) x=cell.row listx.append(x)
ma=max(list) #数据尺度格式化:为避免各列数值相差太大导致显示混乱,统一缩放到0-100 mi=min(list) for y in list: y=(y-mi)*100/(ma-mi) listy.append(y)
#print(listx, listy) #去掉注释后用于纠错 plt.plot(listx, listy, label=name, linestyle=style,linewidth=width,color=color) return # 单列图形化函数结束
# 以下为用户根据需要编辑 qaritem(column='N',name='ALT_STDC',style='-',width=1,color='coral') #调用单列图形化函数,下同 qaritem(column='W',name='IASC',style='-',width=1,color='lightgreen') qaritem(column='AX',name='VRTG',style='-',width=1,color='orchid') qaritem(column='U',name='IVVR',style='--',width=1,color='steelblue') #qaritem(column='AZ',name='N11',style=':',width=1,color='salmon')
# 显示绘图结果 plt.title('QAR-items Chart') #图标标题 plt.legend(loc='best') #图例参数 plt.show() #显示图表
wb.close() #关闭数据表
这段就是代码的全部了,能够这么短的原因,在于它调用了两个库:第二行的openpyxl和第三行的matplotlib,可以在这个界面安装所需库: 库的版本一定要对!否则就双击上图的库名称,去选择所需版本。 打开qar.xlsx,找到你关心的数据列,一列或多列都行,然后回到Python代码,按33-37行的样子修改代码:上图的column的“N”是表头字母,name的“ALT_STDC”是字段名称,如下图:接下来的style是线型,width是线的粗细,color是线条颜色,这些都可以根据自己的爱好改。 上面四步完成后,点击运行即可,由于数据量大,需要几分钟时间才出结果,请耐心等待。接下来,就是你自己的可视化之旅,如果有了新发现,欢迎在评论区留言。 由于QAR设计原因,数据里面含有大量空数据列或冗余数据,大约占到总量的三分之二,导致每次载入数据耗时很长,为解决这个问题,这里给出一段专用数据瘦身代码,直接装入Pycharm运行一次即可(新建个Py,起名QAR-Drain,全选并复制粘贴)。如果你分析的航班数据超过10M,就建议先瘦身,否则运算时很容易整个人原地爆炸。# designed by Ubuntu330 # 为QAR的xlsx文件减肥,提高运算效率 from openpyxl import load_workbook #调用操作excel的库openpyxl 版本3.0.5 import time #调用时间库,用于显示清洗进度 print('Loading data......pls wait......',time.strftime('%H:%M:%S',time.localtime()) ) #安慰式提示 wb = load_workbook('data\qar.xlsx') #从文件夹data中装入QAR原始数据qar.xlsx ws = wb.active #打开数据表 print('Data loaded...',time.strftime('%H:%M:%S',time.localtime()) ) #载入数据完成 kill=[] #定义要清除的列表 cols=ws.max_column #获取数据表列数 rows=ws.max_row #获取数据表行数 i=0 print('collect empty column from ',cols,' columns:',end=' ') while i <= cols: i = 1 print(i,end=' ') #用户等待时间长,显示翻查进展 j=1 k=False v1 = ws.cell(row=j, column=i).value while j <= rows: j = 1 v=ws.cell(row=j, column=i).value #遍历每列单元格值 if v != None: #寻找第一个非空值 v1=v break
while j <= rows: j = 1 v=ws.cell(row=j, column=i).value #遍历每列单元格值 if v != None and v != v1: #找出全列为空或者数值无变化的列 k=True break
if k == False: kill.append(i) #找出来的空列放入清除列表
print() print('deleting:') kill.reverse() #列表反转,从后向前删除列,目的是删除时避免指针错乱
if len(kill)>1: #如果存在空列,则开始删除,否则结束运行 kill1=kill[0] kill2=kill[1:] killpair=[] k=1 for i in kill2: #逐列删除太慢,将连续列转为组合进行删除,提高清理速度 if i==kill1-1: k = 1 kill1=i else: killpair.append([kill1,k]) kill1=i k=1
killpair.append([kill1,k])
pairs=len(killpair) kk=0 for i in killpair: #遍历删除组合列 a=i[0] b=i[1] ws.delete_cols(a,b) #删除该组合列 pairs -= 1 #计算剩余组合列数 print(a,'-',a b-1, 'deleted','at',time.strftime('%H:%M:%S',time.localtime()),pairs,'left') #显示删除进展 #kk = 1 #!!如果数据太大,清洗期间需要关机,建议将这五行代码激活 #if kk==50: #!!决定删除多少次保存一次,不宜太频繁,保存大文件也很耗时 # wb.save('data\qar.xlsx') #!!保存文件 # print('saved at',time.strftime('%H:%M:%S',time.localtime())) # kk=0 #!!五行代码结束
wb.save('data\qar.xlsx') #保存清理后的最终数据
wb.close() #关闭数据表
注意1:数据瘦身耗时较长,大约1M要1分钟的样子,需要耐心,屏幕上会有进度提示(下图绿框部分按下,有助屏幕舒适度)。一旦完成,后续计算分析耗时将显著缩减。注意2:瘦身后的数据各列顺序会往前提,所以上面提到的第四步,需要重做一次,确保分析的是你需要的那几列。到这里,你已经上手计算机编程,而且走得很深。编程不仅限于QAR分析,还可以开发统计分析(飞行时间处理)、图像处理(对你家的猫狗进行面部识别)、网络通信(做个5G步话机代替无线步话机)、人工智能(给AI喂食QAR数据让它学会开飞机)等非常多的功能,找到相关的库,就能用简捷的代码完成你想要的任务。知道象棋大师卡斯帕罗夫败给AI后干什么去了么?嗯,他带着深蓝去各地比赛。打不过AI,就要和AI为伍。Python为我们打开了脑机接口,成就通向AI合作的道路,希望本文能够帮助你继续抱住金饭碗十五年。
|