统计24小时内每个小时最后一条数据_从零开始 打造产品级的航空数据可视化报告...

b19e1b1429a5c5045e71baf3bb742978.png

八月的某天,结束了北京的出差,

在去往机场的路上,我问和我一起回上海的同事:

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

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

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

… …

以前,航班是否延误,延误多久,只能通过机场的航班信息显示屏或者广播了

618553bd8746cb3fe07d4c13a5dbe712.png

随着技术发展,空管局、机场、航空公司等多个渠道的数据已经可以被很多民用app获取,它们用一套算法把这些基础数据转换成乘客需要的简单明了的信息,我们熟知的很多app已经可以做到实时掌握航班动态。

9ef46b96d3497b647fbdd513aad8928e.png

通过航旅纵横我查到同事的飞机因为前序航班延误,出港顺序排到了我的后面,最终我们几乎同时到达上海。

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

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

少啰嗦 先看东西

f963e1bf2bce325bba85a4a8b1464738.png

452e3605353491fa0b3e171ad0be48c9.png

47b381e31c3f2b8f6be7a8981f7e83d5.png

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

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

文章约4300字,阅读需要11分钟

数据获取 志向远大 白手起家

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

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

时刻表数据

可以公开获取的是航班时刻表信息和航班飞行数据,时刻表源头是中航信,在OTA网站也可以找到,我用爬虫搞定了除春秋航空外的所有国内航班数据。

国际航班、香港和台湾机场的时刻表都没有找到可供抓取的数据源,暂时放弃。

春秋航空作为廉航为了控制成本没接入中航信的系统,这样每笔交易就不必向中航信上缴佣金。

780bba2f602535bc6a8c9693cb9d1443.png
每个航班在一周内可能有不同的计划,并不固定

航班飞行数据

飞机在飞行中会通过无线电实时向地面发送位置、速度、高度以及天气状况等信息,空管据此分析飞机的状况,提供保障服务。这些数据并不加密,可以通过一个名为ads-b的系统的接收,国外甚至做到了抬头看到一架飞机,拿着手机对着飞机拍照,能显示出这架飞机的数据,不过这套设备在国内限制进口。

17c808dcf3ebf1a3b122f7858e306396.png

所以航班飞行数据在国外很多航迹追踪网站(flightradar24、flightware、flightstats)上都能查到,国内类似飞常准业内版估计也提供类似服务,这些网站和应用都提供全面、完整的航班历史数据下载,但都属于付费服务,不在考虑范围。

9afa14c97526ff07f12464b9eada6ccc.png

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

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

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

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

7ba9e3a85bf948723cad5c81cdc7fcbf.png

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

控制文件大小

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

ea0809b2b021ed8821470f875f0053f1.png

爬虫工具

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

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

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

转换中文信息

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

最耗时环节

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

46dde9a71042cbd1a26480be7f464d68.png

为了统一视觉,我最后决定重绘所有logo,做法是在固定尺寸的飞机尾翼图上加入航司标志

cb1165e0cb3ed2cdb5c2dc94a90f61d1.png
一共绘制了140个航司,不但耗时最久,还落下了喜欢看飞机尾翼猜航司的后遗症。

数据分析 参考专业报告

定义KPI

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

计算航班延误

跨零点起降航班和空驶航段容易造成延误数据异常,具体情况比较复杂,主要计算花在优化这两种情况上。

分析中涉及的具体的计算过程不在这篇文章里讨论了。

报告设计 压轴环节

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

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

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

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

机场天气状况是航班延误的主要因素之一,Powerbi中的iconmap控件自带openweathermap服务,可以实时显示全球范围内最近两小时的天气状况,之前介绍台风山竹的文章使用的也是这个控件。

d1b339b2509497e0028487082b326f9a.gif

风力分布中的红色区域是正在日本登陆的台风谭美,切换到降水分布可以看到台风登陆范围产生了大量降水。

注:控件使用免费api服务,有并发限制。

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

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

圆圈大小代表机场昨日出港航班总数,出港准点率只以匹配到时刻表信息的航班为base计算。

6e774bd16702a2f40f8f5b14e06c110d.gif

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

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

e3148190b4c05a8215a8ad40fff29fb1.gif

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

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

红色代表延误航班,绿色是准点航班,灰色是未匹配到时刻表的航班。可以按状态和任意时间段筛选航班

右侧切换为进港状态:趋势图代表所有进港航班在各自始发地起飞的时间和状态。

右侧切换为国际航线:只显示流量趋势,没有延误状态信息

7af73c2e8b50cb1a7a582d076b217a0e.gif

飞行轨迹地图

显示当前机场昨日24小时所有航班的飞行轨迹,每条航线由起点、终点、途中位置、飞行角度四个要素组成,其中途中位置来自飞行轨迹上所有打点位置的平均值,并非航班的实时位置。

如果当期航线的途中位置只捕捉到起点或终点(短途航线存在这种可能),飞机图标就会落在起点或者终点,当某一点飞机图标过多时,会产生溢出,显示为飞机图标一字排开。

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

从起点到途中位置的实线表示已完成的航线,剩余未完成的航线用虚线表示。

7ff54537b2aabb580cc1ae530b88a1c6.png

航班轨迹回放

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

8968849ba439d585ec1f58f603aed261.gif

机场KPI数据

反映机场运行情况的数据指标,所有指标均与切片器联动,比如下图反映的是国内航线所有出港航班的数据,按住ctrl可以选择多个维度。

旅客数预估:基于每个航班的执飞机型,按预估的平均座位数乘以100%上座率计算得来,仅供参考。

高峰时刻:指小时航班数量最高的时刻,高峰频次乘以60是其峰值航班数量

放行准点率:航班出港准点率的平均值,筛选器为出港状态时,指标反映当前机场出港准点率;进港状态反映的是所有进港航班在各自出发机场的出港准点率均值。

放行平均延误:每个航班的平均延误时间,正值代表推迟起飞,负值代表提前起飞。

到港指标参照以上两条解释。

127f761ad53c9311d4fe7b1041b1ef20.png

航司排名Top12

显示当前机场航班数量排名top12的航司,受页面筛选器影响,动态变化。也可以用作筛选器,查看指定航司的所有航班。

68fc0c7f006569d9707ce3b9af0a522d.png

航班时刻表

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

c7a7f753f57d2d069f6c5246e8dd26e5.png

航班详情信息

鼠标悬停在时刻表任意航班上,显示更多飞行详情。

15e460944219378ad64c937199e17489.png

这里的飞行高度指气压高度,不保证准确反映航班距地面或海平面的真实高度。

机场简报

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

f84726a6dfa7bd341cd7a9b006e59ea3.png

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

航司排行榜

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

29b3937f31f7a8b3d9266fd1a573381c.gif
当筛选某个航司时,同时显示被筛选航司结果

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

显示当前航司的所有航班数据,按每个航班的最终状态做标记,不同于机场报告中的出港状态。

可选择指定状态查看其详情;可筛选任意时间段查看在此期间的流量详情。(起始时刻显示可能有瑕疵,请忽略)

a156a37cf67b8e01e09ec13e734004c7.png

统一的航司视觉效果

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

目前我在市面上都没有找到第二个这么整齐统一的视觉设计....

c23541fa55b9a8f5ede4a84c749d0840.png

航线视角地图

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

30e89b0fb2e64588a23dc33bb0800e12.gif

目的地视角地图

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

15b07e7e48ec48ede1f402a6c72d7458.png

航司目的地top10

按类别显示航司的目的地航线数量top10的结果,选中类别可以查看对应的航司

3e1be6ddb8251cee41e6fe6c199e020e.png

机型分类统计

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

61f2594c349908daad3fcd0ff57ab990.png

按联盟筛选当前报告

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

总结

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

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

报告已经开始每天定时更新,大家十一假期如果有出行安排,不妨试试看这个报告能否准确抓取你的航班数据。

最后,附上在线版报告地址

Microsoft Power BI​app.powerbi.cn

顶部选择报告即可看到报告链接

祝各位假期愉快。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值