蔣理 陸春燕 夏洋 章嘯可
摘 要:航班數據是航空公司運行的重要組成部分,將繁雜的數據高效地展示出來,可以有效地提升航空公司運行效率,也可以使客戶更有效地了解相關信息。文章介紹了一種航班數據可視化展示的軟件系統,詳細介紹了從數據獲取到展示的過程。
關鍵詞:航班數據;可視化;數據展示
隨著互聯網大數據的發展,各種大數據的分析對各行業都產生了不同程度的影響。網站數據等是互聯網的重要組成部分。對于民航業領域,社會事件的發生,會很大程度影響旅客的出行需求變化,從而影響航空公司飛機運力投放、航班編排、票價策略等,對互聯網事件的準確抓取和分析,能夠幫助航空公司更好地服務市場,服務旅客,提升收益。
對于航空公司來說,能否預先判斷旅客的出行需求,可用于航空公司及行業管理部門決定行業運力投放的合理性,從而提高旅客服務水平,提高航空公司航班收益水平,從互聯網獲取大量的影響民航領域的信息,能夠幫助航空公司制定銷售策略。但是互聯網上的數據復雜性非常高,一是事件數據來源多;二是各數據源對事件的描述非常復雜,來自不同數據源的同一事件,可能差別較大;三是事件數據一般為非結構化數據,其處理能力有一定的難度。
傳統做法需要投入大量人工進行標注。因此,需要系統具有抓取數據的技術和一定的自然語言處理能力,實現自動化[1]。
本系統能夠從數據源智能實時抓取航班數據,并分類可視化與地圖上的產品,主要功能是實現互聯網信息采集,事件畫像建模,可視化展示。
1 主要技術介紹
網絡爬蟲是一種用來自動瀏覽萬維網的網絡機器人。網絡搜索引擎等站點通過爬蟲軟件更新自身的網站內容或其對其他網站的索引。網絡爬蟲可以將自己所訪問的頁面保存下來,以便搜索引擎事后生成索引供用戶搜索。
爬蟲訪問網站的過程會消耗目標系統資源,不少網絡系統并不默許爬蟲工作。因此,在訪問大量頁面時,爬蟲需要考慮到規劃、負載,還需要講“禮貌”。不愿意被爬蟲訪問、被爬蟲主人知曉的公開站點可以使用robots.txt文件之類的方法避免訪問。這個文件可以要求機器人只對網站的一部分進行索引,或完全不作處理。
互聯網資源數據量巨大,這意味著網絡爬蟲在一定時間內只能下載有限數量的網頁,因此它需要優化它的下載方式。互聯網資源瞬息萬變,這也意味著網絡爬蟲下載的網頁在使用前就已經被修改甚至是刪除了。服務器端軟件所生成的統一資源地址數量龐大,以致于網絡爬蟲難以避免地采集到重復內容。根據超文本協議“顯示請求”(HTTP GET)的參數的無盡組合所返回的頁面中,只有很少一部分確實傳回唯一的內容。
2 系統整體設計
本系統分為前端與后端。前端主要負責數據可視化由以下4個模塊構成:地理位置、事件建模、航班信息和統計視圖。后端主要負責信息采集,采用多線程爬蟲處理,使用定時爬取。
系統總體結構如圖1所示。
3 算法設計
基于線性回歸預測航班降落時間:
線性回歸(Linear Regression)算法。在統計學中,線性回歸是利用稱為線性回歸方程的最小平方函數對一個或多個自變量和因變量之間關系進行建模的一種回歸分析。這種函數是一個或多個稱為回歸系數的模型參數的線性組合。
回歸分析中,只包括一個自變量和一個因變量,且二者的關系可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析。如果回歸分析中包括兩個或兩個以上的自變量,且因變量和自變量之間是線性關系,則稱為多元線性回歸分析[2]。
多元線性方程格式:
(1)
從一堆看起來沒有聯系的樣本點中找到一個直線方程,能讓數據盡可能擬合這條直線,從而對未知數據進行預測。
代價損失函數(cost fuction):
(2)
用spark來對航班歷史數據進行分析,把每個航班的歷史數據分為訓練集和測試集通過spark ml對訓練集進行訓練得到weights和intercept。再對測試集進行測試,進行權重優化,采用隨機梯度下降。觀察得到的函數是否足夠擬合訓練集數據,挑出最好的函數(cost function最小),即可把對應航班的weights和intercept存入mysql中,獲取當前航班的起飛時間和計劃起飛時間預測降落時間。
4 其他關鍵模塊
重新訪問策略,網站的屬性之一就是經常動態變化,而爬取網站的一小部分往往需要花費幾個星期或者幾個月。等到網站爬蟲完成它的爬取,很多事件也已經發生了,包括增加、更新和刪除。在搜索引擎的角度,因為沒有檢測這些變化,會導致存儲了過期資源的代價。最常用的估價函數是新鮮度和過時性。新鮮度:這是一個衡量抓取內容是不是準確的二元值。在時間t內,倉庫中頁面p的新鮮度是這樣定義的:
(3)
過時性是一個衡量本地已抓取的內容過時程度的指標。在時間t時,倉庫中頁面p的時效性的定義如下:
(4)
準點率的計算是根據爬取到的歷史航班數據計算每個飛機所有實際飛行時間和預計飛行時間的誤差之和,最后計算平均值,得到準點率。
從定時爬蟲模塊中獲取所有minLon,minLat,maxLon,maxLat和token參數,然后重新構建url,放入ThreadPool中,合并所有線程返回的結果集,并將結果集存入redis的db0中。Read time out /connect time out,減少線程數目,或增加線程睡眠時間,或換用大帶寬網絡,或高質量網絡IP被網站ban,增加線程睡眠時間,或減少長時間持續高密度爬蟲,或設置userAgent偽裝和輪換,或設置代理IP或者設置代理IP池。