虎旸潤 王保云



摘要:隨著移動網絡的高速發展和網絡新媒體的廣泛運用,越來越多的人已經習慣在網絡上發表自己的見解,因此,網絡逐漸成為社會輿論的主要平臺,新浪微博就是一個典型的例子。但如今產生的輿情數據量越發龐大,所以對輿情數據進行采集、存儲、處理以及分析其傳播中的關鍵因素也帶來了前所未有的挑戰。根據輿情的數據特點,設計和實現了一套基于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腳本自動運行所有操作。以實現自動化、高效化的處理方式。