虎旸潤 王保云
摘要:隨著移動網(wǎng)絡(luò)的高速發(fā)展和網(wǎng)絡(luò)新媒體的廣泛運用,越來越多的人已經(jīng)習慣在網(wǎng)絡(luò)上發(fā)表自己的見解,因此,網(wǎng)絡(luò)逐漸成為社會輿論的主要平臺,新浪微博就是一個典型的例子。但如今產(chǎn)生的輿情數(shù)據(jù)量越發(fā)龐大,所以對輿情數(shù)據(jù)進行采集、存儲、處理以及分析其傳播中的關(guān)鍵因素也帶來了前所未有的挑戰(zhàn)。根據(jù)輿情的數(shù)據(jù)特點,設(shè)計和實現(xiàn)了一套基于Hadoop的微博輿情分析系統(tǒng),為應(yīng)對輿情危機提供自動化、系統(tǒng)化、科學化的信息支持。
關(guān)鍵詞:輿情分析;數(shù)據(jù)挖掘;網(wǎng)絡(luò)爬蟲;Hadoop生態(tài)系統(tǒng);微博輿情分析系統(tǒng);數(shù)據(jù)可視化
輿情可簡稱為輿論情況,其指的是在一定的空間和時間內(nèi),民眾圍繞著社會熱議話題中所表達出的情緒、態(tài)度及意見的總和。如今互聯(lián)網(wǎng)高速發(fā)展,網(wǎng)絡(luò)新媒體發(fā)展更加迅速,以微博為例,相關(guān)研究顯示,傳統(tǒng)媒體方式普及到五千萬人,收音機花了38年,電視機花了13年,而微博只用了14個月?;ヂ?lián)網(wǎng)新媒體存在的虛擬、開發(fā)以及互動的特性,一方面讓新媒體能更快地發(fā)展,另一方面則讓輿情更加自由,更多的人會對社會熱點問題發(fā)表自身的看法和意見。與此同時,同一事件往往存在被多元解讀的空間,如果引導(dǎo)不力,輿情很可能會出現(xiàn)嚴重的惡性局面。
網(wǎng)絡(luò)輿情參與人數(shù)眾多,數(shù)據(jù)量越發(fā)龐大。中國互聯(lián)網(wǎng)信息中心(CNNIC)在2017年1月發(fā)布了《第39次中國互聯(lián)網(wǎng)絡(luò)發(fā)展狀況統(tǒng)計報告》,報告顯示,截至2016年12月,我國網(wǎng)民規(guī)模達7.31億,互聯(lián)網(wǎng)普及率53.2%。其中使用手機上網(wǎng)人群的占比提升到95.1%。同時,因為互聯(lián)網(wǎng)用戶數(shù)的大幅增加,越來越多的人會通過網(wǎng)絡(luò)社交平臺對社會事件發(fā)表自身的看法和意見。由此可見,隨著移動網(wǎng)絡(luò)的高速發(fā)展,網(wǎng)絡(luò)已經(jīng)成為輿情的重要載體之一。以新浪微博為例,根據(jù)新浪微博數(shù)據(jù)中心發(fā)布的2016微博用戶發(fā)展報告顯示,截至2016年9月30日,微博月活躍用戶已達到2.97億,日活躍用戶達到1.32億。因此,這將會產(chǎn)生海量、動態(tài)、異構(gòu)的輿情數(shù)據(jù)。
傳統(tǒng)的輿情系統(tǒng)是基于服務(wù)器集群,采用流量鏡像的方法監(jiān)控輿情數(shù)據(jù)源。這種措施雖然能夠全面地搜集數(shù)據(jù),但存在可擴展性差、成本高和容易產(chǎn)生單節(jié)點故障等缺點;同時由于互聯(lián)網(wǎng)數(shù)據(jù)的高速增長,往往產(chǎn)生異構(gòu)、海量的網(wǎng)絡(luò)數(shù)據(jù),而Hadoop技術(shù)對這類型的數(shù)據(jù)的存儲、處理提供了可靠、高效的解決辦法。
本文在此背景下設(shè)計并實現(xiàn)了一個基于Hadoop的微博輿情分析系統(tǒng)。該系統(tǒng)對微博轉(zhuǎn)發(fā)數(shù)據(jù)進行采集,基于Hadoop技術(shù)對數(shù)據(jù)進行處理,最終將數(shù)據(jù)結(jié)果使用可視化圖表的方式進行展示。通過該系統(tǒng)應(yīng)用到各類微博熱點輿情問題中,可了解熱點輿情事件傳播、發(fā)酵的關(guān)鍵因素。這對于深入研究網(wǎng)絡(luò)輿情傳播規(guī)律、傳播關(guān)鍵因素以及有利引導(dǎo)網(wǎng)絡(luò)輿論是至關(guān)重要的。
1輿情分析系統(tǒng)架構(gòu)
1.1系統(tǒng)框架
Hadoop是一種開源的分布式系統(tǒng)基礎(chǔ)架構(gòu)軟件,因其可以充分利用集群的性能進行高速運算和存儲而被廣泛引用。Hadoop主要由HDFS(Hadoop Distributed File System,Hadoop分布式文件系統(tǒng))和MapReduce(并行計算框架)兩大核心組成。本文中設(shè)計和實現(xiàn)的輿情分析系統(tǒng)正是基于Hadoop進行實現(xiàn),并以MongoDB和HDFS作為非結(jié)構(gòu)化采集和處理數(shù)據(jù)存儲的數(shù)據(jù)庫,CSV格式文件用于暫存采集數(shù)據(jù),MapReduce框架用于數(shù)據(jù)清洗和處理,實現(xiàn)微博數(shù)據(jù)采集層、微博輿情監(jiān)控層、用戶交互的三層結(jié)構(gòu)。
圖1為輿情分析系統(tǒng)的系統(tǒng)架構(gòu),其中分布式計算層完成對采集數(shù)據(jù)的清洗、過濾以及排序等處理操作,分布式存儲層用于存儲采集到的數(shù)據(jù)以及分析結(jié)果。
1.2輿情分析系統(tǒng)功能模塊設(shè)計
1.2.1模塊總體設(shè)計
輿情分析系統(tǒng)通過采集新浪微博數(shù)據(jù),使用Hadoop進行數(shù)據(jù)清洗和過濾,最終在瀏覽器中顯示可視化的結(jié)果。因此分為如下模塊:數(shù)據(jù)采集模塊、數(shù)據(jù)存儲模塊、數(shù)據(jù)處理模塊、輿情分析模塊、交互模塊。每個模塊的功能如下:
1)數(shù)據(jù)采集模塊:使用Scrapy爬蟲框架并編寫相應(yīng)爬蟲代碼,采集指定微博的轉(zhuǎn)發(fā)信息以及轉(zhuǎn)發(fā)用戶、博主用戶的信息。
2)數(shù)據(jù)存儲模塊:提供對MapReduce、用戶交互的存取接口以及暫存采集數(shù)據(jù)的寫人接口,用于存儲和讀取采集的數(shù)據(jù)和分析的結(jié)果。
3)數(shù)據(jù)處理模塊:對采集數(shù)據(jù)進行清洗、ETL(Extract-Transform-Load,提取、轉(zhuǎn)換、載入)等操作。
4)輿情分析模塊:對數(shù)據(jù)庫中的數(shù)據(jù)進行分詞、整理等,將結(jié)果輸出到數(shù)據(jù)存儲庫。
5)交互模塊:基于Django框架實現(xiàn)用戶交互功能。
1.2.2微博數(shù)據(jù)采集
數(shù)據(jù)采集是實現(xiàn)微博輿情分析系統(tǒng)的首要工作,因此獲取到原始、全面的輿情數(shù)據(jù)是相當關(guān)鍵的。本系統(tǒng)主要采用網(wǎng)絡(luò)爬蟲的方式對輿情數(shù)據(jù)進行采集,在Scrapy爬蟲框架的基礎(chǔ)上深度定制開發(fā),編寫相應(yīng)的代碼使其能夠滿足需求的網(wǎng)絡(luò)爬蟲。
如圖2所示為微博數(shù)據(jù)采集結(jié)構(gòu)圖。
在上圖中,本系統(tǒng)涉及兩類爬蟲項目,一是根據(jù)指定微博,獲取其內(nèi)容、發(fā)布時間、當前微博轉(zhuǎn)發(fā)數(shù)、評論數(shù)、點贊數(shù)以及轉(zhuǎn)發(fā)當前微博用戶的ID、轉(zhuǎn)發(fā)理由、轉(zhuǎn)發(fā)時間。二是通過上一個爬蟲項目采集到的用戶ID來批量獲取用戶的信息,包含昵稱、性別、微博顯示區(qū)域、用戶類型、粉絲數(shù)、發(fā)布微博數(shù)、關(guān)注數(shù)以及用戶ID。
1.2.3數(shù)據(jù)存儲模塊
數(shù)據(jù)存儲模塊中主要將網(wǎng)絡(luò)代理服務(wù)器IP地址、模擬登陸后產(chǎn)生的Cookies,采集的數(shù)據(jù)、處理后的數(shù)據(jù)存儲于HDFS、CSV以及MongoDB中。其中,使用MongoDB存儲網(wǎng)絡(luò)代理和Cookies中,而后兩者存儲在CSV格式文件中,而處理前后的數(shù)據(jù)則使用HDFS進行存儲。
1.2.4數(shù)據(jù)處理模塊
爬取指定微博的爬蟲項目采集到的數(shù)據(jù)包含發(fā)布內(nèi)容、發(fā)布時間、當前微博轉(zhuǎn)發(fā)數(shù)、評論數(shù)、點贊數(shù)以及轉(zhuǎn)發(fā)當前微博用戶的ID、轉(zhuǎn)發(fā)理由、轉(zhuǎn)發(fā)時間。獲取用戶信息的爬蟲項目使用上一個爬蟲項目采集到的用戶ID來批量獲取用戶的信息,包含呢稱、性別、微博顯示區(qū)域、用戶類型、粉絲數(shù)、發(fā)布微博數(shù)、關(guān)注數(shù)以及用戶ID。
1.2.5輿情分析和交互模塊
本模塊將處理后的數(shù)據(jù)進行分析,主要分為如下幾個部分:轉(zhuǎn)發(fā)時間分析、轉(zhuǎn)發(fā)者地域分析、轉(zhuǎn)發(fā)者性別分析、轉(zhuǎn)發(fā)者認證分析、轉(zhuǎn)發(fā)者粉絲質(zhì)量分析、轉(zhuǎn)發(fā)關(guān)鍵詞分析、轉(zhuǎn)發(fā)表情頻率分析七大部分。
所使用的技術(shù)是Echaas圖表庫和Django后端框架。Echam是百度開發(fā)的一個使用JavaScript語言編寫的圖表庫,底層依賴輕量級的Canvas進行實現(xiàn),同時其擁有豐富的交互功能和可視化效果,提供直觀,生動,可交互,可高度個性化定制的數(shù)據(jù)可視化圖表。而Django是一個使用Python編寫的Web框架,采用了MVC(Model-View-Control,模型-視圖-控制器)的軟件設(shè)計方式,能夠簡便、快速的開發(fā)帶有數(shù)據(jù)庫驅(qū)動的平臺。
本模塊后端通過Django將數(shù)據(jù)讀取和處理,前端通過Echarts調(diào)用處理后的數(shù)據(jù)進行可視化的展示,并提供交互功能。對每個部分的數(shù)據(jù)處理如下:
(1)轉(zhuǎn)發(fā)時間處理和分析:數(shù)據(jù)處理模塊將轉(zhuǎn)發(fā)時間進行格式化和排序處理后,通過一定的規(guī)則將時間按照時間段分割和合并,通過合并后的數(shù)據(jù),將數(shù)據(jù)輸出到前端,將其可視化,方便分析該輿情何時為爆發(fā)點。
(2)轉(zhuǎn)發(fā)者地域分析:數(shù)據(jù)處理模塊將地域數(shù)據(jù)歸并處理后,后端讀取數(shù)據(jù)庫中的數(shù)據(jù),將讀取后的數(shù)據(jù)輸出到Eehares,調(diào)用Echarts圖表庫中地圖,將地域數(shù)據(jù)分布到每個省份下,當用戶點擊的時候,提供該區(qū)域的人數(shù);同時通過顏色深淺分析該輿情在每個省份下的傳播情況。
(3)轉(zhuǎn)發(fā)者性別分析:通過數(shù)據(jù)處理模塊將性別數(shù)據(jù)進行歸并處理后,后端讀取數(shù)據(jù)并將數(shù)據(jù)輸出到Eebarts,調(diào)用用Echarts中的餅狀圖模板,通過分析餅狀圖的形狀分析該輿隋是否于性別有關(guān)系。
(4)轉(zhuǎn)發(fā)者認證分析和轉(zhuǎn)發(fā)者粉絲質(zhì)量分析:微博用戶有四種分類:企業(yè)認證、個人認證、達人和普通用戶。而粉絲質(zhì)量主要通過每個微博用戶的粉絲數(shù)量進行分析,該用戶的影響力一定程度上是與其粉絲數(shù)量成正比的。本模塊通過數(shù)據(jù)處理模塊將數(shù)據(jù)歸并處理后,同樣輸出到前端,將數(shù)據(jù)可視化顯示,從而分析該輿情中,網(wǎng)絡(luò)大v對輿情傳播的影響力。
(5)轉(zhuǎn)發(fā)關(guān)鍵詞分析和轉(zhuǎn)發(fā)表情頻率分析:要獲得轉(zhuǎn)發(fā)的關(guān)鍵詞,首先需要對中文詞匯進行切割。本模塊使用開源的iieba分詞編寫相應(yīng)的代碼,對中文進行自動化的分詞。通過對分詞后的詞匯獲得詞頻,然后通過WordCloud(詞云)將數(shù)據(jù)進行可視化展示,從而分析該輿情中轉(zhuǎn)發(fā)者中比較關(guān)注的事物;而轉(zhuǎn)發(fā)表情頻率獲得則較為簡單,通過數(shù)據(jù)處理模塊自動處理后,直接輸出到數(shù)據(jù)庫,之后再使用Django讀取輸出到前端,使用Echats直接顯示即可。通過分析轉(zhuǎn)發(fā)表情的頻率,可以了解轉(zhuǎn)發(fā)者對該輿情的觀點。
2輿情分析系統(tǒng)實現(xiàn)
2.1集群系統(tǒng)結(jié)構(gòu)
Hadoop有三種配置方式:單機方式(非分布式)、偽分布式方式、集群方式。Hadoop默認模式是非分布式方式,非分布式方式就是單獨的Java進程;偽分布式形式是指Hadoop在單節(jié)點上運行,Hadoop進程以分離的Java進程來運行;而集群模式則是Hadoop在多個節(jié)點上運行,一個作為主節(jié)點(Master),其余作為從節(jié)點(Slave)。本系統(tǒng)的處理模塊中采用分布式方式中的偽分布式模式進行配置。
軟件環(huán)境如表1所示:
主要配置如下軟件或環(huán)境:
①網(wǎng)卡和用戶名配置;
②SSH無密碼連接;
③JAVA軟件和環(huán)境配置;
④Hadoop基本環(huán)境配置文件:如hadoop-env.sh、core-site.xml、hdfs-site.xml、mapreduce.xml、yarn-site.xml等;
⑤Eclipse軟件配置。
有關(guān)這些軟件和環(huán)境配置的參數(shù),限于篇幅,見文獻,這里不再贅述。
2.2數(shù)據(jù)采集、存儲、處理模塊
由于這三個模塊聯(lián)系比較緊密,所以合并進行介紹。
首先采用第一類爬蟲分別對三條微博數(shù)據(jù)進行采集,分別采集該微博的博主信息、該微博信息以及轉(zhuǎn)發(fā)信息,采集后的數(shù)據(jù)存儲于CSV文件中。
其次對數(shù)據(jù)使用Hadoop進行處理,分別是:對轉(zhuǎn)發(fā)理由進行分詞獲得轉(zhuǎn)發(fā)中文語句和表情符號、對表情符號進行合并計數(shù)處理、對用戶ID進行合并,對轉(zhuǎn)發(fā)時間行計數(shù)等操作。
之后使用第二類爬蟲文件通過合并后的用戶ID對轉(zhuǎn)發(fā)用戶數(shù)據(jù)進行采集。同樣使用MapReduce對采集到的數(shù)據(jù)進行處理。最后將處理后的存儲于MongoDB數(shù)據(jù)庫中。
數(shù)據(jù)庫存儲格式如圖3所示:
2.3數(shù)據(jù)分析和可視化模塊
對2017年3月31日前后大慶肇州父親掌摑女兒的輿情事件進行研究和分析。可視化效果如圖4:
該頁面包含5個頁面,分別是:總覽、傳播分析、轉(zhuǎn)發(fā)者-地域分析、轉(zhuǎn)發(fā)者-相關(guān)信息以及轉(zhuǎn)發(fā)內(nèi)容分析頁面。
總覽頁面包含發(fā)布該微博的博主的相關(guān)信息和該微博的相關(guān)信息(如圖2.2所示);傳播分析頁面包含轉(zhuǎn)發(fā)時間數(shù)據(jù)(每10分鐘統(tǒng)計一次),地域分析頁面包含轉(zhuǎn)發(fā)者地域數(shù)據(jù),轉(zhuǎn)發(fā)者一相關(guān)信息頁面包含轉(zhuǎn)發(fā)者性別分類、認證信息以及粉絲質(zhì)量,轉(zhuǎn)發(fā)內(nèi)容分析頁面包含表情頻率和關(guān)鍵詞的詞云圖。
以對轉(zhuǎn)發(fā)內(nèi)容分析頁面為例,將轉(zhuǎn)發(fā)內(nèi)容中表情出現(xiàn)的頻率以柱狀圖進行顯示,將轉(zhuǎn)發(fā)內(nèi)容中關(guān)鍵詞以詞云圖的方式進行顯示。如圖5所示。
3結(jié)語
本文主要對微博輿情分析系統(tǒng)進行了研究和實現(xiàn),主要分析了輿情擴散的問題,首先使用網(wǎng)絡(luò)爬蟲獲取轉(zhuǎn)發(fā)數(shù)據(jù),其次把HDFS和MapReduce運用到微博轉(zhuǎn)發(fā)數(shù)據(jù)處理中,將獲取到的微博轉(zhuǎn)發(fā)數(shù)據(jù)進行了可視化的展示,最后將系統(tǒng)應(yīng)用到了熱點輿情事件中,從而分析輿情擴散的相關(guān)因素。主要工作包含四個方面:
1)數(shù)據(jù)采集與解析。通過研究微博頁面結(jié)構(gòu)設(shè)置了較為有效合理的采集策略,并用Scrapy爬蟲框架編寫相應(yīng)的爬蟲項目,通過該項目采集了指定微博轉(zhuǎn)發(fā)的相關(guān)數(shù)據(jù)。此外,還根據(jù)實際應(yīng)用過程中的一些具體問題,給出了解決方案。
2)使用Hadoop對數(shù)量龐大的數(shù)據(jù)進行處理。使用MapReduce編寫相應(yīng)的程序分別針對不同的數(shù)據(jù)類別進行處理,如去重、排序、計數(shù)等;使用HDFS對數(shù)據(jù)進行分布式存儲,作為MapReduce進行處理的輸入和輸出模塊。
3)數(shù)據(jù)可視化展示。提出使用網(wǎng)站架構(gòu)方式讀取和操作數(shù)據(jù)庫來展示可視化數(shù)據(jù)的策略。同時針對可視化的需求提出使用Sentiment前端框架、Echarts圖表庫框架和Django后端框架相結(jié)合的方式實現(xiàn)網(wǎng)站的開發(fā)。
4)輿情熱點問題驗證。使用本文介紹的輿情分析系統(tǒng)對三個問題進行驗證。針對轉(zhuǎn)發(fā)數(shù)據(jù)得出了輿情擴散的一些關(guān)鍵因素。
有待進一步研究的內(nèi)容包含以下幾方面:
1)采集模塊中使用單節(jié)點的方式對數(shù)據(jù)進行采集。而針對多節(jié)點采集的方式,本文未做進一步的研究。這里可以使用分布式的方式對數(shù)據(jù)進行采集,這樣效率更高。
2)在存儲模塊中,可以嘗試使用非關(guān)系型數(shù)據(jù)庫Redis數(shù)據(jù)庫,這樣針對分布式采集數(shù)據(jù)過程中可以直接在數(shù)據(jù)庫中進行去重處理。同時可以使用HBase列數(shù)據(jù)庫作為MapReduce處理數(shù)據(jù)的輸入、輸出模塊,這樣操作起來更為方便。
3)本系統(tǒng)個別步驟,如數(shù)據(jù)導(dǎo)入等操作需要手工進行,因此,下一步可以編寫操作系統(tǒng)的批處理命令或Shell腳本自動運行所有操作。以實現(xiàn)自動化、高效化的處理方式。