您的當前位置: 首頁(yè) >
發(fā)布時(shí)間:2026-05-05 06:49:44 瀏覽:867 次
一個(gè)牛人用PowerBI(打造航空級數據可視化產(chǎn)品)
在去往機場(chǎng)的造ヽ(′ー`)ノ航??路上,我問(wèn)和我一起回上海的空級??可視同事:
“最近北京機場(chǎng)延誤挺嚴重的,你說(shuō)咱??倆能準時(shí)飛不”
“這個(gè)不好說(shuō),數據不過(guò)我肯定早到,化產(chǎn)我的個(gè)牛航班早一個(gè)小時(shí)”
“嗯,正常情況是人用這樣,不過(guò)延誤就不好說(shuō)了,造航說(shuō)不定我在你前面到哦”
… …
以前,空級可視航班是數據否ヽ(′▽?zhuān)?ノ延誤,延誤多??久,化產(chǎn)只能通過(guò)機場(chǎng)的個(gè)牛航班信息顯示屏或者廣播了解。
隨著(zhù)技術(shù)發(fā)展,人用空管局、造航機場(chǎng)、航空公司等多個(gè)渠道的數據已經(jīng)可以被很多民用app獲取,它們用一套算法把這些基礎數據轉換成乘客需??要的簡(jiǎn)單明了的信息,我們熟知的很多app已經(jīng)可以做到實(shí)時(shí)掌握航班動(dòng)態(tài)。
通過(guò)航旅縱橫我查到同事的飛機因(yin)為前序航班延誤,出港順序排到了我的后面,最終我們幾乎同時(shí)到達上海。??
用BI工具能不能實(shí)現類(lèi)似的功能?把航班??數據做成一個(gè)可視化報告,甚至再進(jìn)一步,加入定時(shí)刷新功能,持續??更新數據,讓報告變成一個(gè)產(chǎn)品?
“
少啰嗦 先看東西
”
這篇文章是報告制作過(guò)程的復盤(pán),文章較長(cháng),限于篇幅,主要介紹功能和思路,分成四部分,技術(shù)細節就不展開(kāi)了。
數據獲?。褐鞠蜻h大,也得白手起家數據清洗:費工費力,???耗時(shí)最長(cháng)數據分析:參考專(zhuān)業(yè)報告,獨立計算所有指標報告設計:壓軸環(huán)節數據獲取
志向遠大 白手起家
有了想法,首先要調查市面上有哪些公開(kāi)數據(ju)、能不能獲取。上面提到(?_?;)的渠道數據有些是公開(kāi)的,有些需要企業(yè)購買(mǎi)或交換,比如空管(╯°□°)╯︵ ┻━┻局和機場(chǎng)的很多數據不對外開(kāi)放,個(gè)人(ren)用戶(hù)拿不到。
而且考慮到公開(kāi)發(fā)布的報(bao)告最多也只能間隔1個(gè)多小時(shí)刷新一次,類(lèi)似進(jìn)出港航班排隊??信息這(′?`)樣的近乎實(shí)時(shí)的數據首先(xian)被排除。票價(jià)信息也不在此次分析范圍內,未做搜集。
時(shí)刻表數據
可以公開(kāi)獲取的是航班時(shí)刻表信息和航班飛行數據,時(shí)刻表源頭是中航信,在OTA網(wǎng)站也可以找到,我用爬蟲(chóng)搞定了除春秋航空外的所有國內航班數據。
國際航班、香港和臺灣機場(chǎng)的時(shí)刻表都沒(méi)有找到可供抓取的數據源,暫時(shí)放棄。
春秋航空作為廉航為了控制成本沒(méi)接入中航信的系統,這樣每筆交易就不必向中航信上繳傭金。
每個(gè)航班??在一周內可能有不同的計劃,并不固定
航班飛行數據
飛機在飛行中會(huì )通過(guò)無(wú)線(xiàn)電實(shí)時(shí)向地面發(fā)送位置、速度、高度以(yi)及天氣狀況等信息,空管據此分析飛機的狀況,提供保障服務(wù)。這些數據并不加密,可以通過(guò)一個(gè)名為ads-b的(╯°□°)╯系統的接收,國外甚至做到了抬頭看到一架飛機,拿著(zhù)手機對著(zhù)飛機拍照,能顯示出這架飛機的數(shu)據,不過(guò)這套設備在國內限制進(jìn)口。
所以航班飛行數據在國外很多航跡追蹤網(wǎng)站(flightradar24、flightware、flightstats??)上都能查到,國內類(lèi)似飛常準業(yè)內版估計也提供類(lèi)似服務(wù),這些網(wǎng)站和應用??都提供全面、完整的航班歷史數據下載,但都屬于付費服務(wù),不在考慮范圍。
綜合以上兩個(gè)數據源,已經(jīng)可以拼湊出一架飛機從起飛到降落的整個(gè)軌跡,通過(guò)航班號和飛行日期可以匹配到它的時(shí)刻表信息,進(jìn)一步計算出航班延誤。
其實(shí)這么做并非最佳選擇,因為實(shí)際飛行數據往往比較復雜,比如涉及到跨零點(diǎn)起降的航班,要準確計算延誤時(shí)ヽ(′▽?zhuān)?ノ間需要考慮的情況非常多,而類(lèi)似飛常準這樣的網(wǎng)站已經(jīng)提供了計算好的數據,但是這類(lèi)網(wǎng)站的反爬措施也非??常完善,比如數字轉圖片格(╯°□°)╯︵ ┻━┻式,I???P訪(fǎng)問(wèn)頻率限制,很難突破。
紅框里是用圖片顯示的數字
控制文件大小
j??son數據以機場(chǎng)為單位抓取??,每次抓取的文件在十幾M到幾十M之間。為??了兼顧文件大小和航班軌跡的完整性(文件太大清洗效率下降,文件太小軌跡不完整),最終選??定了8個(gè)機場(chǎng),24小時(shí)的數據來(lái)分析,即每隔一小時(shí)為8個(gè)機場(chǎng)統一抓取數據,共生成24個(gè)文件,數據源整體大小在600M左右。
爬蟲(chóng)工具
既然報告不是一錘子買(mǎi)賣(mài),需要定時(shí)抓取數據,而且數據量比較大,PowerQuery就不在考慮范圍了,數據清洗的時(shí)候再讓它出場(chǎng)。爬蟲(chóng)是用R寫(xiě)ヽ(′ー`)ノ的定時(shí)任務(wù)。
費工費力 耗時(shí)最長(cháng)
常規的清洗操作不做贅述,結構轉換、異常值過(guò)濾這些步驟是必須的。說(shuō)一個(gè)性能問(wèn)題的坑,我在Powerquery的局限這篇文章里提過(guò),對于需要每行執行的計算,數據量上去之(╯°□°)╯︵ ┻━┻后PQ的效率會(huì )有明顯下降,我這個(gè)case里清洗環(huán)節的用時(shí)可以(yi)增加5倍,所以必須優(yōu)化掉行級別計算。
轉換中文信息
原始數據以英文為主,比如航司、機場(chǎng)使用icao和iata代碼來(lái)標記,為了在報告中使用統一規范的中文名,需要做建立一個(gè)(ge)中文信息庫。最后一共整理了全球600多個(gè)機場(chǎng)、130多個(gè)航司、70多種機型的詳細??信息用來(lái)(′_`)匹配,這個(gè)環(huán)節耗時(shí)比較長(cháng)。
最耗(′-ι_-`)時(shí)環(huán)節
為了提升最后的可視化效果,在航司分析環(huán)??ヾ(′?`)?節,加入各家的logo是(′Д` )個(gè)不錯的選擇,也比較容易獲取。但是因為logo形狀各異,最終效果不理想
為了統一視覺(jué),我最后決定重繪所有logo,ヽ(′?`)ノ做法是在固定尺寸?的飛機尾翼圖上加入航司標志
一共繪制了140個(gè)(ge)航司,不但ヽ(′ー`)ノ耗時(shí)最久,還落下了喜歡看飛機尾翼猜航司的后遺癥。
數據分析
參考專(zhuān)業(yè)報告
參考了一些(xie)業(yè)內專(zhuān)業(yè)網(wǎng)站和報告的分析思路,在可視化環(huán)節介紹,也可以參考報告的說(shuō)明頁(yè)面和指標解釋頁(yè)面
計算航班延誤??
跨零點(diǎn)起降航班和空駛航( ?° ?? ?°)段容易造成延誤數據異常,具體情況比較復雜,主要計算花在優(yōu)化這兩種情ヽ(′ー`)ノ況上。
分析中涉及的具體的計算過(guò)程不在這篇文章里討論了。
壓軸環(huán)節
之前的內容都是鋪墊,對于使用自助BI分析師,有個(gè)比較尷尬的現實(shí),如果報告撲街,前面的工作做(zuo)了再多,價(jià)值也基本歸0。想要出彩,每個(gè)環(huán)節都不能有明顯的短板。
配合Powerbi圖表控件的擴展能力,報告實(shí)現了一些很實(shí)用的交互功能,有的甚至可以比肩專(zhuān)業(yè)的航班分析???服務(wù)。同時(shí)為了取得(T_T)比較好的視覺(jué)效果,報告也做了很多細節優(yōu)化和妥協(xié)。
報告分為機場(chǎng)概況、機場(chǎng)報告和航司報告三個(gè)主題。
機場(chǎng)概況:實(shí)時(shí)天氣+機場(chǎng)流量趨勢
機場(chǎng)天氣狀況是航班延誤的主要因素之一,Po(?Д?)werbi中的iconmap控件自帶openweathermap服務(wù),可以實(shí)時(shí)顯示全球范圍內最近兩小時(shí)的天氣狀況??,之前介紹臺風(fēng)山竹的文章使用的也是這個(gè)控件。
風(fēng)力分布中的紅色區域??是正在日本登陸的臺風(fēng)譚美,(′?_?`)切換到降水分布可以看到臺風(fēng)登陸范圍產(chǎn)生了大量降水。
注:控件使用免費api服務(wù),有并發(fā)限制。
動(dòng)態(tài)計算機場(chǎng)出港航班準點(diǎn)率
對航班延誤的判定,業(yè)內默認標準是航班起飛時(shí)間比計劃起飛時(shí)間推遲30分鐘以上,不超過(guò)30分鐘都視為準點(diǎn)。報(?????)告中將推遲時(shí)間設置為自定義項,用戶(hù)可以自行改變延誤( ?ω?)時(shí)長(cháng),查看各機場(chǎng)對應的出港準(◎_◎;)點(diǎn)率。
圓圈大小代表機場(chǎng)昨日出港航班總數,出港準點(diǎn)率只以匹配到時(shí)刻表信息的航班為base計算。
昨日進(jìn)出港航班流量趨勢圖
受頁(yè)面尺寸限制,只放出了(╯‵□′)╯六個(gè)機場(chǎng)的流量趨勢圖,紅點(diǎn)代表峰值時(shí)刻。右側可(′?ω?`)以切換進(jìn)港和出港兩種狀態(tài)
機場(chǎng)報告:掌握機場(chǎng)整體運行情(qing)況和航班詳情
紅色代表延誤航班,綠色是準點(diǎn)航班,灰色是未匹配到時(shí)刻表的航班??梢园礌顟B(tài)和任意時(shí)間段篩選航班
右側切換為進(jìn)港狀態(tài):趨勢圖代表所有進(jìn)港航班在各自始發(fā)地起飛的時(shí)間和狀態(tài)。
右側切換為國際航線(xiàn):??只顯示流量趨勢,沒(méi)有延誤狀態(tài)信息
飛行軌跡地圖
顯示當前機場(chǎng)昨日24小時(shí)所有航班的飛行軌跡,每條┐(′?`)┌航線(xiàn)由起點(diǎn)、終點(diǎn)、途中(zhong)位置、飛行角度四個(gè)要素組成,其中途中位置來(lái)自飛行軌跡上所有打點(diǎn)位置的平均值,并非航班的實(shí)時(shí)位置。
如果當期航線(xiàn)的途中位置只捕捉到起點(diǎn)或終點(diǎn)((′ω`*)短途航線(xiàn)存在這種可能),飛機圖標就會(huì )(′?_?`)落在起點(diǎn)或者終點(diǎn),當某一點(diǎn)飛機圖(°o°)標過(guò)多時(shí),會(huì )產(chǎn)生溢出,顯示為飛機圖標一字排開(kāi)。
飛行角度:飛機在途中回傳的瞬時(shí)數據,飛行全程中可能有多種角度,很多航線(xiàn)并不是直線(xiàn)??飛行。
從起點(diǎn)到途中位置的實(shí)線(xiàn)表示已完成的航線(xiàn),剩余未完成的航線(xiàn)用虛線(xiàn)表示。
航班軌跡回放
以小時(shí)為單位回放當前機場(chǎng)昨日24小時(shí)航班活動(dòng)軌跡,間隔2s。地(′?_?`)圖右下角顯示當前回放時(shí)刻
機場(chǎng)KPI數據
反映機場(chǎng)運行情況的數據指標,所有指標均與切片器聯(lián)動(dòng),比如下圖反映的是國內??航線(xiàn)所有出港航班的數據,按住ctrl可以選擇多個(gè)維度。
旅客數預估:基于每個(gè)航班的執飛機型,按預估的平均座位數乘以100%上座率計算得來(lái),僅供參ヾ(′?`)?考。
高峰時(shí)刻:指小時(shí)航班數量最高的時(shí)刻,高峰頻次乘以??60是其峰值航班數量
放行準點(diǎn)率:航班(ban)出港準點(diǎn)率的平均值,篩選器為出港狀態(tài)時(shí),指標反映當前??機場(chǎng)出港準點(diǎn)率;進(jìn)港狀態(tài)反映的是所有進(jìn)港航班在各自出發(fā)機場(chǎng)的出港準點(diǎn)率均值。
放行平均??延誤:每個(gè)航??班的平均延誤時(shí)間,正值代表推遲起飛,負值代表提前起飛。
到港指標參照以上兩條解釋。
航司排名Top12
航班時(shí)刻表
航班詳情信息
鼠標懸停在時(shí)刻表任意航班上,顯示更多飛行詳情。
這里的飛行高度指氣壓高度,不保證準確反映航班距地面或海平面的真實(shí)高度。
機場(chǎng)簡(jiǎn)報
簡(jiǎn)單總結當前機場(chǎng)運行情況,只在切換機場(chǎng)時(shí)刷新
航司報告:對比分析不同的航司數據表現
航司排行榜
按準點(diǎn)率統計最準時(shí)/最不準時(shí)、平均延誤時(shí)長(cháng)、平均飛行時(shí)間,繁忙程度和目的地數量共六項指標,每項指標排名首位的航司顯示logo,鼠標懸停顯示top5航司。
當篩選某個(gè)航司時(shí),同時(shí)顯示被篩(╯‵□′)╯選航司結果。(動(dòng)圖中的這些航空公司lヽ(′▽?zhuān)?ノogo,點(diǎn)擊后就切換到對應的數據,其實(shí)就是相當于Excel中控件的功能,在黃老師的微博《數說(shuō)》欄目也有很多Excel高階動(dòng)態(tài)??圖表的教程,有興趣的朋友可以看文末介紹~)
分鐘級航司出港流量趨勢圖(tu)
顯示當前航司的所有航班數據,按每個(gè)航班的最終狀態(tài)做標記,不同于機場(chǎng)報告中的出港狀(zhuang)態(tài)。
可選擇指定狀??態(tài)查看其詳情;可篩選任意時(shí)間段查看在此期間的流量詳情。(起始時(shí)刻顯示可能(neng)有瑕疵,請忽略)
統一的航司視覺(jué)效果
顯示民航、貨航、公務(wù)機在內的超過(guò)120家航司的logo,可按中文簡(jiǎn)稱(chēng)搜索并篩選任意航司,也可以按聯(lián)(′_`)盟搜索。
航線(xiàn)(xian)視角地圖
顯示城市間飛行軌跡(連線(xiàn))和航班狀(zhuang)態(tài)(顏色),可按狀態(tài)篩選航線(xiàn)。 (默認視圖,加載稍慢,只在選擇航司或聯(lián)盟后生效,無(wú)篩選時(shí)為空)
(用Excel實(shí)現地圖ヾ(′▽?zhuān)??可視化的內容,在黃老師的微博《數說(shuō)》欄目也有相關(guān)的教程,有興趣的朋友可以看文末介紹~)
目的地視角地圖
顯示當前選擇航司的所有目的地城市,icon越大代表航線(xiàn)數量越多。
航司目的地top10
按類(lèi)別顯示航司的目的地航線(xiàn)數量topヽ(′▽?zhuān)?ノ10的結果,選中類(lèi)別可??以查看對應的航司
機型分類(lèi)統計
按通用標準將客機分為小型、中型和大型,統計每個(gè)類(lèi)別對應的航班架次和預估的乘客人數。(乘客數按每個(gè)機型的平均座位數和上座率100%估算)
按聯(lián)盟篩選當前報告
之前一次線(xiàn)下活動(dòng)上,有人問(wèn)我,PowerBI能不能做出一個(gè)??產(chǎn)品形式的報告(′?`*),持續提供價(jià)??值,其實(shí)這個(gè)并不難,很多公司內部已經(jīng)在用這種報告,最大的障礙其實(shí)(′▽?zhuān)?)是(′?`*)數據安全,內部數據不能分享,而公開(kāi)的數據往往又很難持續更新。
這個(gè)航空數據可視化報告是這個(gè)方向上的一個(gè)嘗試(shi),當然它自身也有一些兼容性的問(wèn)題,比如用IE、??火狐瀏覽器可能顯示不正常,自定義控件加載慢、內存占??用大的情況,推薦你用谷歌瀏覽器瀏覽報告,希望這些問(wèn)題可以被微軟慢慢改善。
