蒋理 陆春燕 夏洋 章啸可
摘 要:航班数据是航空公司运行的重要组成部分,将繁杂的数据高效地展示出来,可以有效地提升航空公司运行效率,也可以使客户更有效地了解相关信息。文章介绍了一种航班数据可视化展示的软件系统,详细介绍了从数据获取到展示的过程。
关键词:航班数据;可视化;数据展示
随着互联网大数据的发展,各种大数据的分析对各行业都产生了不同程度的影响。网站数据等是互联网的重要组成部分。对于民航业领域,社会事件的发生,会很大程度影响旅客的出行需求变化,从而影响航空公司飞机运力投放、航班编排、票价策略等,对互联网事件的准确抓取和分析,能够帮助航空公司更好地服务市场,服务旅客,提升收益。
对于航空公司来说,能否预先判断旅客的出行需求,可用于航空公司及行业管理部门决定行业运力投放的合理性,从而提高旅客服务水平,提高航空公司航班收益水平,从互联网获取大量的影响民航领域的信息,能够帮助航空公司制定销售策略。但是互联网上的数据复杂性非常高,一是事件数据来源多;二是各数据源对事件的描述非常复杂,来自不同数据源的同一事件,可能差别较大;三是事件数据一般为非结构化数据,其处理能力有一定的难度。
传统做法需要投入大量人工进行标注。因此,需要系统具有抓取数据的技术和一定的自然语言处理能力,实现自动化[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池。