项目名称:基于互联网大数据的事件智能抓取和画像系统项目成员:禹精华、刘可可、刘贤辉
对基于互联网大数据的事件智能抓取和画像系统进行算法描述和软件设计说明。
项目背景:随着互联网大数据的发展,各种大数据的分析对各行业都产生了不同程度的影响。网站数据、社交媒体数据等是互联网大数据的重要组成部分。对于民航业领域,社会事件的发生,会很大程度影响旅客的出行需求变化,从而影响航空公司飞机运力投放、航班编排、票价策略调整等,对互联网事件的准确抓取和分析能够帮助航空公司更好的服务市场、服务旅客、提升收益。
行业背景:对于航空公司来说,能否预先判断旅客的出行需求,可用于航空公司及行业管理部门决定行业运力投放的合理性,从而提高旅客服务水平、提高航空公司航班收益水平,从互联网中获取大量的影响民航领域的信息能够帮助航空公司制定销售策略。
1.3项目概要
开发团队:武汉职业技术学院筑梦云工作室demo01团队
项目开发平台说明:
操作系统:Windows7及以上版本
应用服务器:UbuntuServer14.04LTS64位
服务器配置:CUP:1核内存:1GB公网带宽:1Mbps硬盘:20G
应用服务器:WindowsServers2008
服务器配置:CUP:1核内存:2GB公网带宽:1Mbps硬盘:40G
网络架构:完全支持TCP/IP协议
开发工具或技术体系:开发语言:Python3.6,开发工具:Pycharm2017
数据库:MongoDB3.4.3
软件运行环境说明:
设备:
客户程序硬件要求:
具有1核处理器且满足以下要求的计算机:
最低1G内存
最小20GB硬盘
web服务器硬件需求:
总线I/O:8M/s;
数据库服务器硬件需求:
从互联网上抓取事件,对事件数据进行数据处理,存储到数据库,进行分词及语义等处理,提取事件的属性建立事件模型,以及可视化展现。
1、实现互联网事件天级或更高频次抓取,采集政治会议、展会、体育赛事、演唱会、突发异常天气等各类中比较主要的事件,每个类型的事件数据至少来自2个数据源(网站),每天爬取一次。
2、实现事件的去重功能,一是不同数据源(网站)的事件去重,二是不同天抓取的事件去重。
3、事件画像建模,即事件属性自动化提取。
4、使用DataV进行可视化展现。
1、网络爬虫模块实现互联网事件抓取。
2、日志模块实现各个模块间日志的生成。
3、数据处理模块实现数据的准备、清洗、去重、转换。
4、数据建模模块对数据建立模型,计算及转换。
5、事件画像模块对事件分词及提取属性。
6、DataV进行可视化展示。
系统需求分析:为航空公司飞机的运力投放、航班编制、票价策略提供服务。
软件系统结构描述:基于互联网大数据的事件智能抓取和画像系统由爬虫模块、日志模块、数据处理模块、数据建模模块、事件画像模块、可视化系统构成。
软件结构如图3-1:
图3-1系统总用例图
数据流程如图3-2:
图3-2数据流程
软件系统采用B/S架构,并且将程序部署在云服务器。
3.2.2基本设计概念和处理流程
考虑到互联网上的数据复杂性非常高、并且事件数据一般为非结构化数据,其处理和分析有一定的难度,对爬虫的稳定性和爬取速度有很大的要求,我们使用scrapy爬虫框架技术来从各网站爬取数据,对数据进行处理,使用NoSQL型数据库MongoDB存储半结构化数据,对数据画像、分析、建模并且将程序部署在云端。通过访问云端数据库,数据流映射到DataV实现可视化展示。
系统流程如图3-2-2:
图3-2-2系统流程图
设计说明:
1、每一个计算机需要不需要安装客户程序,但是需要有IE4.0或更高版本的支持;
2、WEB发布服务器访问数据库服务器,数据库服务器对外部不可见;
3、数据库服务器使用MongoDB来实现,对于目前的访问量,MongoDB在足够的硬件环境的支持下能够适用,并且在经济上也是合理的;
4、多用户并发访问和处理、数据加锁、事务协调,由MongoDB数据库来完成,本系统不提供单独的事务处理服务器;
5、scrapy爬虫框架可以实现快速、高并发、高层次的网络抓取。
应用程序采用Python语言进行开发,网络爬虫使用scrapy框架进行开发并将其部署在云服务器上,考虑到爬虫抓取的数据多为半结构化或者非结构化数据,我们使用NoSQL型数据库MongoDB进行数据存储,并部署在云服务器上。
系统设计如图3-3-1:
图3-3-1系统设计图
整个系统共划分为6个模块
1、爬虫模块
2、日志模块
3、数据处理
4、数据建模
5、事件画像
6、可视化展示
系统模块设计如下:
1、爬虫模块分为定时爬虫模块和scrapy爬虫两个模块构成。
定时爬虫模块:管理整个爬虫模块,监控爬虫运行状态、设置爬虫抓取频率(每天爬取一次)、爬虫程序异常处理、管理爬虫日志。
Scrapy爬虫模块:从目标网站上抓取数据,采集政治会议、展会、体育赛事、演唱会、突发异常天气、交通管制新闻网等数据源网站的事件经过数据处理,并生成爬虫日志存储到数据库。此模块由11个爬虫脚本组成,分别对相应的数据源进行数据爬取。
爬虫模块如图3-3-2:
图3-3-2爬虫模块图
2、日志模块:日志模块与系统各个模块部分联系紧密,各个模块运行都会产生日志,生成的日志将存储到数据库,方便系统管理、维护、排错。
日志设计图如图3-3-3:
图3-3-3日志模块设计图
3、数据处理:数据处理分为数据准备、数据转换、数据聚合。主要对非结构化/半结构化数据进行处理,得到干净、规整的数据。爬虫爬取网站数据源的时候进行数据预处理,对所收集数据进行审核、筛选、排序等操作。数据预处理完成后对数据进行清洗,过滤掉不符合要求的数据,将脏数据转化为满足要求的数据。再进行缺失值处理,对缺失项进行特殊值填充,存储到数据库。数据去重主要对不同网站的事件数据去重复处理。
4、数据建模:对事件数据建立一个统一的模型,利用聚类等机器学习算法挖掘数据间隐藏的属性及关系。由聚类算法和搜索引擎收录数两个子模块构成。
聚类算法:使用无监督学习的K-Means对数据进行聚类分析。
5、事件画像:事件画像模块实现了对事件属性的自动化提取。调用数据建模模块对数据进行聚类,对不同类型的事件进行分词及属性提取,数据样本初始化,日志生成,对事件画像,生成事件样本。
事件属性表如下:
6、可视化展示我们使用阿里云的可视化工具DataV来生成图表和数字大屏。
定时爬虫模块设计如图3.3.3:
图3.3.3定时爬虫模块
程序定时及爬虫管理脚本TimerAdmins.py
scrapy爬虫模块设计如图3.3.4:
图3.3.4Scrapy爬虫模块类和接口设计
日志模块设计如图3.3.4:
图3.3.4日志接口类图
算法及源码设计如下:
3.3.5数据处理
数据处理脚本文件ToHeavy.py
数据去重设计如图3.3.5:
图3.3.5数据去重接口和类图
数据去重算法说明:根据表名查询数据库对应的表,获取该条事件过去三天所有数据,对事件名分词,如果事件名与过去三天的事件记录相似度超过65%,标记为重复数据,flag赋值为0。
3.3.6数据建模
3.3.6.1聚类算法
数据建模说明:我们采用机器学习算法的无监督学习算法,对原始数据建立分类模型,使用聚类分析算法来对数据进行建模。
中国会展门户数据如图3.3.6.1:
图3.3.6.1中国会展门户数据图
K-Means聚类算法说明:在具体的聚类算法中我们采用K-Means聚类算法,对数据建模,将事件热度分为三类,既聚类热度级别为1、2、3。K-Means算法是基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分为预定的类数K,采用距离作为相似性的评价指标,既认为两个对象的距离越近,相似度就越大。度量样本之间的相似性使用的是欧氏距离,公式如图3.3.6.2:
图3.3.6.2欧氏距离公式图
具体算法描述如图3.3.6.3:
图3.3.6.3算法描述
聚类算法流程如图3.3.6.4:
图3.3.6.4聚类算法流程图
建模程序设计及算法说明:KMeans.py聚类算法文件。
聚类算法设计接口如图3.3.6.5:
图3.3.6.5聚类算法设计接口和类图
K-Means聚类算法设计源码如下:
聚类完成后,根据事件的主办方级别、主办方类型及影响范围属性对聚类热度进行加权,得到热度属性。
3.3.6.2搜索引擎收录数
获取搜索引擎收录数文件:GetSearchEngineResult.py
3.3.7事件画像
3.3.7.1事件画像系统设计
事件画像系统集成了事件画像管理脚本、数据样本初始化、事件样本输出、数据建模、事件画像等功能。事件画像系统调用数据建模模块,提取各类事件的属性,生成事件样本。事件画像系统设计如图3.3.7.1:
图3.3.7.1事件画像系统设计图
3.3.7.2事件画像
事件画像模块的主要类是实体类、数据访问接口和功能类。
实体类保存了事件的基本属性数据,访问接口连接数据库,功能类对事件提取属性。
事件画像设计及接口类如图3.3.7.2:
图3.3.7.2事件画像模块接口和类图
我们使用阿里的DataV做可视化展示,通过DataV建立云端数据库的连接,实现数据流映射到DataV。从而生成数据大屏。
可视化展示预览图如图3.3.8:
图3.3.8数据大屏
考虑到程序的稳定性和团队协同工作等特性,我们将数据库部署在云服务器,实现了实时访问、高性能、高扩展性等特点。
数据库软件:MongoDB建立的数据库名称:Spider、Config、DataV、Log存储爬虫抓取的数据:Spider系统配置数据库:Config存储可视化展示数据的库:DataV存储日志数据:Log
将对数据库的操作封装为一个模块。各个模块都要进行数据的存储,将数据的存储单独划分出来做成一个模块的好处是显而易见的,实现了系统模块间的弱耦合,方便数据的写入、读取等操作。
****ConnectMongoDB.py功能:连接mongodb数据库
连接数据库接口源码:
OperatingDB.py功能:封装了对数据库的操作,创建表\集合、插入数据、删除数据、查询数据、关闭数据库连接。
3.4.3数据库结构
由于NoSQL型数据库不同于传统的关系型数据库,在建立表结构、索引这些操作时没有像关系型的关联、约束等关系。结构设计也相对简单。
数据库设计如下表
MongoDB将数据存储为一个文档/表,数据结构由键值(key=>value)对组成。MongoDB文档/表类似于JSON对象。数据库各个表字段设计如下。
数据库:Spider
表名:CityWeather
表名:DamaiConcert、JuchengConcert、YongleConcert
表名:DamaiSports
表名:Longitudes
表名:WaringWeather
表名:XishiquConcert、XishiquSports
表名:YongleSports
表名:cnena
表名:eshow
表名:people
表名:trafficcontrol
表名:xinhuanet
数据库:Config
表名:timer
数据库:Log
表名:CityWeather、ConcertAttr、CrawlAdmin、DaMaiPW、EventPortrait、EventPortraitAdmin、
ExhibitionAttr、JuChenSpider、SportAttr、TimerAdmin、WarngingCrawl、XishiquConcert、XishiquSports、people、xinhuanet、yonglePW。