从数据到信息
从信息到洞察

从零开始 制作航空数据可视化报告

八月的某天,结束了北京的出差,在去往机场的路上,我问和我一起回上海的同事:

“最近北京机场延误挺严重的,你说咱俩能准时飞不”

“这个不好说,不过我肯定早到,我的航班早一个小时”

“嗯,正常情况是这样,不过延误就不好说了,说不定我在你前面到哦”

  … …

过去,想知道航班是否延误,延误多久,只能通过机场的航班信息显示屏或者广播了解。
从零开始 打造产品级的航空数据可视化报告

随着技术发展,空管局、机场、航空公司等多个渠道的数据已经可以被很多民用app获取,它们用一套算法把这些基础数据转换成乘客需要的简单明了的信息,我们熟知的很多app已经可以做到实时掌握航班动态。
从零开始 打造产品级的航空数据可视化报告
通过航旅纵横我查到同事的飞机因为前序航班延误,出港顺序排到了我的后面,最终我们几乎同时到达上海

 

感受到了实时数据的强大力量,我突发奇想:

用BI工具能不能实现类似的功能?把航班数据做成一个可视化报告,甚至再进一步,加入定时刷新功能,持续更新数据,让报告变成一个产品?

少啰嗦,先看东西


本文是报告制作过程的复盘,文章较长,限于篇幅,主要介绍功能和思路,分成四部分,技术细节就不展开了。

  • 数据获取:志向远大,也得白手起家
  • 数据清洗:费工费力,耗时最长
  • 数据分析:参考专业报告,独立计算所有指标
  • 报告设计:压轴环节

 

数据获取: 白手起家

有了想法,首先要调查市面上有哪些公开数据、能不能获取。上面提到的渠道数据有些是公开的,有些需要企业购买或交换,比如空管局和机场的很多数据不对外开放,个人用户拿不到。

而且考虑到公开发布的报告最多也只能间隔1个多小时刷新一次,类似进出港航班排队信息这样的近乎实时的数据首先被排除。票价信息也不在此次分析范围内,未做搜集。

 

时刻表数据

可以公开获取的是航班时刻表信息和航班飞行数据,时刻表源头是中航信,在OTA网站也可以找到,我用爬虫搞定了除春秋航空外的所有国内航班数据。国际航班、香港和台湾机场的时刻表都没有找到可供抓取的数据源,暂时放弃。

春秋航空作为廉航为了控制成本没接入中航信的系统,这样每笔交易就不必向中航信上缴佣金。
从零开始 打造产品级的航空数据可视化报告
每个航班在一周内可能有不同的计划,并不固定

 

航班飞行数据

飞机在飞行中会通过无线电实时向地面发送位置、速度、高度以及天气状况等信息,空管据此分析飞机的状况,提供保障服务。这些数据并不加密,可以通过一个名为ads-b的系统的接收,国外甚至做到了抬头看到一架飞机,拿着手机对着飞机拍照,能显示出这架飞机的数据,不过这套设备在国内限制进口。
从零开始 打造产品级的航空数据可视化报告
所以航班飞行数据在国外很多航迹追踪网站(flightradar24、flightware、flightstats)上都能查到,国内类似飞常准业内版估计也提供类似服务,这些网站和应用都提供全面、完整的航班历史数据下载,但都属于付费服务,不在考虑范围。

最后通过抓包分析,从某航迹网站页面上截取到了包含航班信息的json数据,可以作为数据源使用(限于篇幅,具体技术细节不再展开),

从零开始 打造产品级的航空数据可视化报告

json中包含每个航班在抓取时刻的详细信息

综合以上两个数据源,已经可以拼凑出一架飞机从起飞到降落的整个轨迹,通过航班号和飞行日期可以匹配到它的时刻表信息,进一步计算出航班延误。

其实这么做并非最佳选择,因为实际飞行数据往往比较复杂,比如涉及到跨零点起降的航班,要准确计算延误时间需要考虑的情况非常多,而类似飞常准这样的网站已经提供了计算好的数据,但是这类网站的反爬措施也非常完善,比如数字转图片格式,IP访问频率限制,很难突破。
从零开始 打造产品级的航空数据可视化报告

红框里是用图片显示的数字

 

控制文件大小

json数据以机场为单位抓取,每次抓取的文件在十几M到几十M之间。为了兼顾文件大小和航班轨迹的完整性(文件太大清洗效率下降,文件太小轨迹不完整),最终选定了8个机场,24小时的数据来分析,即每隔一小时为8个机场统一抓取数据,共生成24个文件,数据源整体大小在600M左右。
从零开始 打造产品级的航空数据可视化报告

 

爬虫工具

既然报告不是一锤子买卖,需要定时抓取数据,而且数据量比较大,PowerQuery就不在考虑范围了,数据清洗的时候再让它出场。爬虫是用R写的定时任务。

 

数据清洗:费工费力 耗时最长

常规的清洗操作不做赘述,结构转换、异常值过滤这些步骤是必须的。说一个性能问题的坑,我在Powerquery的局限这篇文章里提过,对于需要每行执行的计算,数据量上去之后PQ的效率会有明显下降,我这个case里清洗环节的用时可以增加5倍,所以必须优化掉行级别计算。

 

转换中文信息

原始数据以英文为主,比如航司、机场使用icao和iata代码来标记,为了在报告中使用统一规范的中文名,需要做建立一个中文信息库。最后一共整理了全球600多个机场、130多个航司、70多种机型的详细信息用来匹配,这个环节耗时比较长。

 

最耗时环节

为了提升最后的可视化效果,在航司分析环节,加入各家的logo是个不错的选择,也比较容易获取。但是因为logo形状各异,最终效果不理想

从零开始 打造产品级的航空数据可视化报告
为了统一视觉,我最后决定重绘所有logo,做法是在固定尺寸的飞机尾翼图上加入航司标志
从零开始 打造产品级的航空数据可视化报告
一共绘制了140个航司,不但耗时最久,还落下了喜欢看飞机尾翼猜航司的后遗症。

 

数据分析:自主探索,参考专业报告

定义KPI时参考了一些业内专业网站和报告的分析思路,在可视化环节介绍,也可以参考报告的说明页面和指标解释页面

 

计算航班延误

跨零点起降航班和空驶航段容易造成延误数据异常,具体情况比较复杂,主要计算花在优化这两种情况上。分析中涉及的具体的计算过程不在这篇文章里讨论了。

 

报告设计压轴环节

之前的内容都是铺垫,对于使用自助BI分析师,有个比较尴尬的现实,如果报告扑街,前面的工作做了再多,价值也基本归0。想要出彩,每个环节都不能有明显的短板。

配合Powerbi图表控件的扩展能力,报告实现了一些很实用的交互功能,有的甚至可以比肩专业的航班分析服务。同时为了取得比较好的视觉效果,报告也做了很多细节优化和妥协。

报告分为机场概况、机场报告航司报告三个主题。

 

机场概况:实时天气+机场流量趋势

机场天气状况是航班延误的主要因素之一,Powerbi中的iconmap控件自带openweathermap服务,可以实时显示全球范围内最近两小时的天气状况,之前介绍台风山竹的文章使用的也是这个控件。
从零开始 打造产品级的航空数据可视化报告
风力分布中的红色区域是正在日本登陆的台风谭美,切换到降水分布可以看到台风登陆范围产生了大量降水。
注:控件使用免费api服务,有并发限制。

动态计算机场出港航班准点率

对航班延误的判定,业内默认标准是航班起飞时间比计划起飞时间推迟30分钟以上,不超过30分钟都视为准点。报告中将推迟时间设置为自定义项,用户可以自行改变延误时长,查看各机场对应的出港准点率。

圆圈大小代表机场昨日出港航班总数,出港准点率只以匹配到时刻表信息的航班为base计算。
从零开始 打造产品级的航空数据可视化报告

 

昨日进出港航班流量趋势图

受页面尺寸限制,只放出了六个机场的流量趋势图,红点代表峰值时刻。右侧可以切换进港和出港两种状态

从零开始 打造产品级的航空数据可视化报告

 

机场报告:掌握机场整体运行情况和航班详情

分钟粒度的航班出港流量趋势图:红色代表延误航班,绿色是准点航班,灰色是未匹配到时刻表的航班。可以按状态和任意时间段筛选航班

右侧切换为进港状态:趋势图代表所有进港航班在各自始发地起飞的时间和状态。
右侧切换为国际航线:只显示流量趋势,没有延误状态信息
从零开始 打造产品级的航空数据可视化报告

 

飞行轨迹地图

显示当前机场昨日24小时所有航班的飞行轨迹,每条航线由起点、终点、途中位置、飞行角度四个要素组成,其中途中位置来自飞行轨迹上所有打点位置的平均值,并非航班的实时位置。
如果当期航线的途中位置只捕捉到起点或终点(短途航线存在这种可能),飞机图标就会落在起点或者终点,当某一点飞机图标过多时,会产生溢出,显示为飞机图标一字排开。

飞行角度:飞机在途中回传的瞬时数据,飞行全程中可能有多种角度,很多航线并不是直线飞行。

从起点到途中位置的实线表示已完成的航线,剩余未完成的航线用虚线表示。
从零开始 打造产品级的航空数据可视化报告

 

航班轨迹回放

以小时为单位回放当前机场昨日24小时航班活动轨迹,间隔2s。地图右下角显示当前回放时刻

从零开始 打造产品级的航空数据可视化报告

 

机场KPI数据

反映机场运行情况的数据指标,所有指标均与切片器联动,比如下图反映的是国内航线所有出港航班的数据,按住ctrl可以选择多个维度。
旅客数预估:基于每个航班的执飞机型,按预估的平均座位数乘以100%上座率计算得来,仅供参考。
高峰时刻:指小时航班数量最高的时刻,高峰频次乘以60是其峰值航班数量
放行准点率:航班出港准点率的平均值,筛选器为出港状态时,指标反映当前机场出港准点率;进港状态反映的是所有进港航班在各自出发机场的出港准点率均值。
放行平均延误:每个航班的平均延误时间,正值代表推迟起飞,负值代表提前起飞。
到港指标参照以上两条解释。
从零开始 打造产品级的航空数据可视化报告

 

航司排名Top12

显示当前机场航班数量排名top12的航司,受页面筛选器影响,动态变化。也可以用作筛选器,查看指定航司的所有航班。
从零开始 打造产品级的航空数据可视化报告

 

航班时刻表

显示当前机场航班详情数据,对于没有计划时间的航班,其到达状态未知;对于尚未降落的航班,到达状态为“-”(通常集中在跨0点到达的航班)

从零开始 打造产品级的航空数据可视化报告

 

航班详情信息

鼠标悬停在时刻表任意航班上,显示更多飞行详情。
从零开始 打造产品级的航空数据可视化报告
这里的飞行高度指气压高度,不保证准确反映航班距地面或海平面的真实高度。

 

机场简报

简单总结当前机场运行情况,只在切换机场时刷新

从零开始 打造产品级的航空数据可视化报告

 

航司报告:对比分析不同的航司数据表现

航司排行榜

按准点率统计最准时/最不准时、平均延误时长、平均飞行时间,繁忙程度和目的地数量共六项指标,每项指标排名首位的航司显示logo,鼠标悬停显示top5航司。

从零开始 打造产品级的航空数据可视化报告
当筛选某个航司时,同时显示被筛选航司结果

分钟级航司出港流量趋势图

显示当前航司的所有航班数据,按每个航班的最终状态做标记,不同于机场报告中的出港状态。
可选择指定状态查看其详情;可筛选任意时间段查看在此期间的流量详情。(起始时刻显示可能有瑕疵,请忽略)

从零开始 打造产品级的航空数据可视化报告

 

统一的航司视觉效果

显示民航、货航、公务机在内的超过120家航司的logo,可按中文简称搜索并筛选任意航司,也可以按联盟搜索。

航线视角地图

显示城市间飞行轨迹(连线)和航班状态(颜色),可按状态筛选航线。 (默认视图,加载稍慢,只在选择航司或联盟后生效,无筛选时为空)

从零开始 打造产品级的航空数据可视化报告

目的地视角地图

显示当前选择航司的所有目的地城市,icon越大代表航线数量越多。

从零开始 打造产品级的航空数据可视化报告

航司目的地top10

按类别显示航司的目的地航线数量top10的结果,选中类别可以查看对应的航司
从零开始 打造产品级的航空数据可视化报告

 

机型分类统计

按通用标准将客机分为小型、中型和大型,统计每个类别对应的航班架次和预估的乘客人数。(乘客数按每个机型的平均座位数和上座率100%估算)

从零开始 打造产品级的航空数据可视化报告

 

按联盟筛选当前报告

单独查看三大联盟(天合联盟、寰宇一家、星空联盟)各自的数据表现,包括航司排行榜在内的结果将重新计算。(右上角航线类型的选择会影响筛选结果)

 

尾声

之前一次线下活动上,有人问我,PowerBI能不能做出一个产品形式的报告,持续提供价值,其实这个并不难,很多公司内部已经在用这种报告,最大的障碍其实是数据安全,内部数据不能分享,而公开的数据往往又很难持续更新。

这个航空数据可视化报告是这个方向上的一个尝试,当然它自身也有一些兼容性的问题,比如用IE、火狐浏览器可能显示不正常,自定义控件加载慢、内存占用大的情况,推荐你用谷歌浏览器浏览报告,希望这些问题可以被微软慢慢改善。

报告数据每天都会更新,点击右下角双向箭头可以全屏观看。

原创内容 转载请联系作者授权:PowerBI极客 » 从零开始 制作航空数据可视化报告

1
说点什么

1000
 
smilegrinwinkmrgreenneutraltwistedarrowshockunamusedcooleviloopsrazzrollcryeeklolmadsadexclamationquestionideahmmbegwhewchucklesillyenvyshutmouth
1 评论数
0 被回复的评论
1 订阅评论的人数
 
查看最近回复
查看最热评论
  订阅本文评论  
最新 最旧 得票最多
提醒
游客
duang

厉害~~~