自己玩转QAR数据

如果你拷问数据到一定程度,它会坦白一切。

Ronald H. Coase

在当下,计算机科学已经是驾驶舱的日常,单纯的操作技能已经远不能代表飞行水平的高低。飞行品质已然数据化,保存在快速存储系统QAR中,每秒高达8次的采样率,对几百个参数进行记录,供飞行后进行飞行品质分析以提高飞行品质、供事件分析使用以查明原因、供大数据分析以节能增效等。
然而,由于种种原因,例如飞行员不熟悉IT,ITer不熟悉飞行,只有少数人能接触到数据,数据又以海量数字的形式展现,令人眼花缭乱、懵懵懂懂,导致QAR在飞行品质、节能增效上作用有限,而对飞行员的警告、处罚却越来越多,这也难怪,面对枯燥的数字,咱们政委能想到的除了超不超限,还能有什么呢?
所以,飞行员可以学会自己分析QAR数据。数据本身是无用的,除非你从中获取到有价值的洞察。通过数据可视化,从中发现趋势、发现改进方法,发现隐藏的问题,成为自己的专家。本篇与大家一起探讨一种简便的QAR数据分析方法。
基本概念

QAR:快速访问记录器(Quick Access Recorder)是一种机载飞行数据记录仪,设计目的是提供快速、方便的方式访问原始飞行数据,可以同时采集数百个数据,涵盖了飞机运行品质的绝大部分参数。飞行结束后通过USB或无线方式下载到本地保存。
Python:是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。这句话的意思是,写了代码可以直接运行,也可以编译成exe文件运行;可以使用大量的库和函数,提高效率,就像盖大楼,有人用砖一点点起,有人用混凝土浇灌,也有人用工厂定制的楼层盖大楼,Python语言就类似最后一种,简单又快速,因为每个楼层、房间的细节工厂都准备好了,盖楼者只需要关心盖什么样的楼。
有点儿像玩乐高。
Pycharm:PyCharm是Python开发工具(IDE)之一,适合包括飞行员这类专业人员使用,带有一整套可以帮助用户提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制。
数据可视化:可视化的终极目标是洞悉蕴含在数据中的现象和规律,这里面有多重含义:发现、决策、解释、分析、探索和学习。数据可视化可以看到交互界面,更适合于探索性地分析数据。数据可视分析是将数据呈现给用户以易于感知的图形符号,让用户交互地理解数据。
Python还是Excel

数据的处理和图形化展现,通常用Excel也能胜任,但是以下几个难点无法解决:
  • 数据量大,QAR通常几百列几万行,Excel处理小规模数据还可以,多了就不行。
  • 空数据处理,QAR不是每个数据都同步采样,有的1秒1次,有的1秒多次,造成很多空格没有数据,这样一来很难把多个字段数据画到一张图上对比分析。
  • 对于发现的细节,需要重新取样画图。
而对于Python,只需要不多的几行代码,上面问题都将转为它的优势,而且,它可以对细节部分不断放大,方便查找问题所在。
Python使用准备
第一步:你的电脑只需要安装Python以及Pycharm两个应用,具体步骤请参考(实际上直接安装Pycharm即可,它会自动安装Python):
https://www.runoob.com/python3/python3-install.html
安装时,如果提示path之类的选项,都打勾就是,否则所写代码无法执行。
安装好之后,打开Pycharm,如图所示,新建一个Python文件,开始你的第一个Python程序吧:
右侧编辑区输入一行代码:
print('Hello, QAR!')
点击运行按钮,下方出现结果:
Hello, QAR!
恭喜!你的第一个程序已经完成!
第二步:准备数据
找公司索取你的某个航班的QAR数据包,通常是CSV格式,可以用Excel打开,另存为qar.xlsx即可。
然后,对着你的Py程序点击右键,选show in explorer,会跳出一个文件夹(小技巧:为方便使用,请为这个文件夹建立桌面快捷方式)。在这个文件夹内新建一个文件夹,命名data,并将qar.xlsx复制到这里。

第三步:新建一个Py文件(起名qar或者你喜欢的其他名字),装入以下代码(全选并复制粘贴即可):
# designed by Ubuntu330from openpyxl import load_workbook  #调用操作excel的库openpyxl 版本3.0.5import matplotlib.pyplot as plt  #调用绘图库matplotlib 版本3.3.2import timeplt.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.xlsxws = 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合作的道路,希望本文能够帮助你继续抱住金饭碗十五年。

深入了解民航,请进入下列链接:
你缺多少氧?
起降标准之拍案三叹
舌尖上的运行规范
简画飞行训练
简画飞行训练(续)
极简NPA
指鹿为马的PBN
121R5之麻衣算油
极简121:新规章下的疲劳管理
极简121部
SMS那些事儿
名词乱炖
各国航空安全规章对比
(0)

相关推荐