虎旸润 王保云
摘要:随着移动网络的高速发展和网络新媒体的广泛运用,越来越多的人已经习惯在网络上发表自己的见解,因此,网络逐渐成为社会舆论的主要平台,新浪微博就是一个典型的例子。但如今产生的舆情数据量越发庞大,所以对舆情数据进行采集、存储、处理以及分析其传播中的关键因素也带来了前所未有的挑战。根据舆情的数据特点,设计和实现了一套基于Hadoop的微博舆情分析系统,为应对舆情危机提供自动化、系统化、科学化的信息支持。
关键词:舆情分析;数据挖掘;网络爬虫;Hadoop生态系统;微博舆情分析系统;数据可视化
舆情可简称为舆论情况,其指的是在一定的空间和时间内,民众围绕着社会热议话题中所表达出的情绪、态度及意见的总和。如今互联网高速发展,网络新媒体发展更加迅速,以微博为例,相关研究显示,传统媒体方式普及到五千万人,收音机花了38年,电视机花了13年,而微博只用了14个月。互联网新媒体存在的虚拟、开发以及互动的特性,一方面让新媒体能更快地发展,另一方面则让舆情更加自由,更多的人会对社会热点问题发表自身的看法和意见。与此同时,同一事件往往存在被多元解读的空间,如果引导不力,舆情很可能会出现严重的恶性局面。
网络舆情参与人数众多,数据量越发庞大。中国互联网信息中心(CNNIC)在2017年1月发布了《第39次中国互联网络发展状况统计报告》,报告显示,截至2016年12月,我国网民规模达7.31亿,互联网普及率53.2%。其中使用手机上网人群的占比提升到95.1%。同时,因为互联网用户数的大幅增加,越来越多的人会通过网络社交平台对社会事件发表自身的看法和意见。由此可见,随着移动网络的高速发展,网络已经成为舆情的重要载体之一。以新浪微博为例,根据新浪微博数据中心发布的2016微博用户发展报告显示,截至2016年9月30日,微博月活跃用户已达到2.97亿,日活跃用户达到1.32亿。因此,这将会产生海量、动态、异构的舆情数据。
传统的舆情系统是基于服务器集群,采用流量镜像的方法监控舆情数据源。这种措施虽然能够全面地搜集数据,但存在可扩展性差、成本高和容易产生单节点故障等缺点;同时由于互联网数据的高速增长,往往产生异构、海量的网络数据,而Hadoop技术对这类型的数据的存储、处理提供了可靠、高效的解决办法。
本文在此背景下设计并实现了一个基于Hadoop的微博舆情分析系统。该系统对微博转发数据进行采集,基于Hadoop技术对数据进行处理,最终将数据结果使用可视化图表的方式进行展示。通过该系统应用到各类微博热点舆情问题中,可了解热点舆情事件传播、发酵的关键因素。这对于深入研究网络舆情传播规律、传播关键因素以及有利引导网络舆论是至关重要的。
1舆情分析系统架构
1.1系统框架
Hadoop是一种开源的分布式系统基础架构软件,因其可以充分利用集群的性能进行高速运算和存储而被广泛引用。Hadoop主要由HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)和MapReduce(并行计算框架)两大核心组成。本文中设计和实现的舆情分析系统正是基于Hadoop进行实现,并以MongoDB和HDFS作为非结构化采集和处理数据存储的数据库,CSV格式文件用于暂存采集数据,MapReduce框架用于数据清洗和处理,实现微博数据采集层、微博舆情监控层、用户交互的三层结构。
图1为舆情分析系统的系统架构,其中分布式计算层完成对采集数据的清洗、过滤以及排序等处理操作,分布式存储层用于存储采集到的数据以及分析结果。
1.2舆情分析系统功能模块设计
1.2.1模块总体设计
舆情分析系统通过采集新浪微博数据,使用Hadoop进行数据清洗和过滤,最终在浏览器中显示可视化的结果。因此分为如下模块:数据采集模块、数据存储模块、数据处理模块、舆情分析模块、交互模块。每个模块的功能如下:
1)数据采集模块:使用Scrapy爬虫框架并编写相应爬虫代码,采集指定微博的转发信息以及转发用户、博主用户的信息。
2)数据存储模块:提供对MapReduce、用户交互的存取接口以及暂存采集数据的写人接口,用于存储和读取采集的数据和分析的结果。
3)数据处理模块:对采集数据进行清洗、ETL(Extract-Transform-Load,提取、转换、载入)等操作。
4)舆情分析模块:对数据库中的数据进行分词、整理等,将结果输出到数据存储库。
5)交互模块:基于Django框架实现用户交互功能。
1.2.2微博数据采集
数据采集是实现微博舆情分析系统的首要工作,因此获取到原始、全面的舆情数据是相当关键的。本系统主要采用网络爬虫的方式对舆情数据进行采集,在Scrapy爬虫框架的基础上深度定制开发,编写相应的代码使其能够满足需求的网络爬虫。
如图2所示为微博数据采集结构图。
在上图中,本系统涉及两类爬虫项目,一是根据指定微博,获取其内容、发布时间、当前微博转发数、评论数、点赞数以及转发当前微博用户的ID、转发理由、转发时间。二是通过上一个爬虫项目采集到的用户ID来批量获取用户的信息,包含昵称、性别、微博显示区域、用户类型、粉丝数、发布微博数、关注数以及用户ID。
1.2.3数据存储模块
数据存储模块中主要将网络代理服务器IP地址、模拟登陆后产生的Cookies,采集的數据、处理后的数据存储于HDFS、CSV以及MongoDB中。其中,使用MongoDB存储网络代理和Cookies中,而后两者存储在CSV格式文件中,而处理前后的数据则使用HDFS进行存储。
1.2.4数据处理模块
爬取指定微博的爬虫项目采集到的数据包含发布内容、发布时间、当前微博转发数、评论数、点赞数以及转发当前微博用户的ID、转发理由、转发时间。获取用户信息的爬虫项目使用上一个爬虫项目采集到的用户ID来批量获取用户的信息,包含呢称、性别、微博显示区域、用户类型、粉丝数、发布微博数、关注数以及用户ID。
1.2.5舆情分析和交互模块
本模块将处理后的数据进行分析,主要分为如下几个部分:转发时间分析、转发者地域分析、转发者性别分析、转发者认证分析、转发者粉丝质量分析、转发关键词分析、转发表情频率分析七大部分。
所使用的技术是Echaas图表库和Django后端框架。Echam是百度开发的一个使用JavaScript语言编写的图表库,底层依赖轻量级的Canvas进行实现,同时其拥有丰富的交互功能和可视化效果,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。而Django是一个使用Python编写的Web框架,采用了MVC(Model-View-Control,模型-视图-控制器)的软件设计方式,能够简便、快速的开发带有数据库驱动的平台。
本模块后端通过Django将数据读取和处理,前端通过Echarts调用处理后的数据进行可视化的展示,并提供交互功能。对每个部分的数据处理如下:
(1)转发时间处理和分析:数据处理模块将转发时间进行格式化和排序处理后,通过一定的规则将时间按照时间段分割和合并,通过合并后的数据,将数据输出到前端,将其可视化,方便分析该舆情何时为爆发点。
(2)转发者地域分析:数据处理模块将地域数据归并处理后,后端读取数据库中的数据,将读取后的数据输出到Eehares,调用Echarts图表库中地图,将地域数据分布到每个省份下,当用户点击的时候,提供该区域的人数;同时通过颜色深浅分析该舆情在每个省份下的传播情况。
(3)转发者性别分析:通过数据处理模块将性别数据进行归并处理后,后端读取数据并将数据输出到Eebarts,调用用Echarts中的饼状图模板,通过分析饼状图的形状分析该舆隋是否于性别有关系。
(4)转发者认证分析和转发者粉丝质量分析:微博用户有四种分类:企业认证、个人认证、达人和普通用户。而粉丝质量主要通过每个微博用户的粉丝数量进行分析,该用户的影响力一定程度上是与其粉丝数量成正比的。本模块通过数据处理模块将数据归并处理后,同样输出到前端,将数据可视化显示,从而分析该舆情中,网络大v对舆情传播的影响力。
(5)转发关键词分析和转发表情频率分析:要获得转发的关键词,首先需要对中文词汇进行切割。本模块使用开源的iieba分词编写相应的代码,对中文进行自动化的分词。通过对分词后的词汇获得词频,然后通过WordCloud(词云)将数据进行可视化展示,从而分析该舆情中转发者中比较关注的事物;而转发表情频率获得则较为简单,通过数据处理模块自动处理后,直接输出到数据库,之后再使用Django读取输出到前端,使用Echats直接显示即可。通过分析转发表情的频率,可以了解转发者对该舆情的观点。
2舆情分析系统实现
2.1集群系统结构
Hadoop有三种配置方式:单机方式(非分布式)、伪分布式方式、集群方式。Hadoop默认模式是非分布式方式,非分布式方式就是单独的Java进程;伪分布式形式是指Hadoop在单节点上运行,Hadoop进程以分离的Java进程来运行;而集群模式则是Hadoop在多个节点上运行,一个作为主节点(Master),其余作为从节点(Slave)。本系统的处理模块中采用分布式方式中的伪分布式模式进行配置。
软件环境如表1所示:
主要配置如下软件或环境:
①网卡和用户名配置;
②SSH无密码连接;
③JAVA软件和环境配置;
④Hadoop基本环境配置文件:如hadoop-env.sh、core-site.xml、hdfs-site.xml、mapreduce.xml、yarn-site.xml等;
⑤Eclipse软件配置。
有关这些软件和环境配置的参数,限于篇幅,见文献,这里不再赘述。
2.2数据采集、存储、处理模块
由于这三个模块联系比较紧密,所以合并进行介绍。
首先采用第一类爬虫分别对三条微博数据进行采集,分别采集该微博的博主信息、该微博信息以及转发信息,采集后的数据存储于CSV文件中。
其次对数据使用Hadoop进行处理,分别是:对转发理由进行分词获得转发中文语句和表情符号、对表情符号进行合并计数处理、对用户ID进行合并,对转发时间行计数等操作。
之后使用第二类爬虫文件通过合并后的用户ID对转发用户数据进行采集。同样使用MapReduce对采集到的数据进行处理。最后将处理后的存储于MongoDB数据库中。
数据库存储格式如图3所示:
2.3数据分析和可视化模块
对2017年3月31日前后大庆肇州父亲掌掴女儿的舆情事件进行研究和分析。可视化效果如图4:
该页面包含5个页面,分别是:总览、传播分析、转发者-地域分析、转发者-相关信息以及转发内容分析页面。
总览页面包含发布该微博的博主的相关信息和该微博的相关信息(如图2.2所示);传播分析页面包含转发时间数据(每10分钟统计一次),地域分析页面包含转发者地域数据,转发者一相关信息页面包含转发者性别分类、认证信息以及粉丝质量,转发内容分析页面包含表情频率和关键词的词云图。
以对转发内容分析页面为例,将转发内容中表情出现的频率以柱状图进行显示,将转发内容中关键词以词云图的方式进行显示。如图5所示。
3结语
本文主要对微博舆情分析系统进行了研究和实现,主要分析了舆情扩散的问题,首先使用网络爬虫获取转发数据,其次把HDFS和MapReduce运用到微博转发数据处理中,将获取到的微博转发数据进行了可视化的展示,最后将系统应用到了热点舆情事件中,从而分析舆情扩散的相关因素。主要工作包含四個方面:
1)数据采集与解析。通过研究微博页面结构设置了较为有效合理的采集策略,并用Scrapy爬虫框架编写相应的爬虫项目,通过该项目采集了指定微博转发的相关数据。此外,还根据实际应用过程中的一些具体问题,给出了解决方案。
2)使用Hadoop对数量庞大的数据进行处理。使用MapReduce编写相应的程序分别针对不同的数据类别进行处理,如去重、排序、计数等;使用HDFS对数据进行分布式存储,作为MapReduce进行处理的输入和输出模块。
3)数据可视化展示。提出使用网站架构方式读取和操作数据库来展示可视化数据的策略。同时针对可视化的需求提出使用Sentiment前端框架、Echarts图表库框架和Django后端框架相结合的方式实现网站的开发。
4)舆情热点问题验证。使用本文介绍的舆情分析系统对三个问题进行验证。针对转发数据得出了舆情扩散的一些关键因素。
有待进一步研究的内容包含以下几方面:
1)采集模块中使用单节点的方式对数据进行采集。而针对多节点采集的方式,本文未做进一步的研究。这里可以使用分布式的方式对数据进行采集,这样效率更高。
2)在存储模块中,可以尝试使用非关系型数据库Redis数据库,这样针对分布式采集数据过程中可以直接在数据库中进行去重处理。同时可以使用HBase列数据库作为MapReduce处理数据的输入、输出模块,这样操作起来更为方便。
3)本系统个别步骤,如数据导入等操作需要手工进行,因此,下一步可以编写操作系统的批处理命令或Shell脚本自动运行所有操作。以实现自动化、高效化的处理方式。