摘?要:面對移動互聯(lián)網(wǎng)中龐大的數(shù)據(jù)量,如何進(jìn)行挖掘和可視化的分析是當(dāng)前大數(shù)據(jù)研究的一個熱點(diǎn)。本文搭建了一個互聯(lián)網(wǎng)數(shù)據(jù)挖掘與分析平臺,首先采用基于Scrapy框架搭建的爬蟲系統(tǒng)從互聯(lián)網(wǎng)絡(luò)爬取了大量新聞數(shù)據(jù)與招聘數(shù)據(jù),通過Sphinx和CoreSeek經(jīng)過googlediffmatchpatch算法去重,最后利用R語言對這些數(shù)據(jù)進(jìn)行可視化分析,從而為制定決策提供更好的依據(jù)。
關(guān)鍵詞:互聯(lián)網(wǎng)數(shù)據(jù);R語言;Scrapy;可視化分析
隨著社會信息化程度的不斷提高,作為信息化的產(chǎn)物目前各種APP和網(wǎng)站層出不窮,然而每一款優(yōu)秀的APP或者網(wǎng)站其后臺必然存在龐大的數(shù)據(jù)量。如果能夠?qū)@些數(shù)據(jù)進(jìn)行很好的挖掘與分析以及將其可視化,幫助決策者更好地掌握自己的產(chǎn)品和客戶的動向,這毫無疑問會提升其產(chǎn)品在市場競爭上的生命力。因此數(shù)據(jù)挖掘和數(shù)據(jù)可視化分析一直是數(shù)據(jù)分析方向的一個研究熱點(diǎn)。R語言作為數(shù)據(jù)分析的工具,已經(jīng)被越來越多地用在數(shù)據(jù)的可視化分析中。由于R語言是開源的,R的擴(kuò)展包非常龐大又功能齊全,在這些豐富的擴(kuò)展包的幫助下,讓數(shù)據(jù)的可視化分析變得簡單易行。因此,本文從互聯(lián)網(wǎng)爬下來的大量數(shù)據(jù)的分析與可視化采用R語言來實現(xiàn)。
1?數(shù)據(jù)的獲取
在做數(shù)據(jù)分析與可視化工作時為了更加準(zhǔn)確地說明問題,往往是需要大量實時可靠的數(shù)據(jù)作為基礎(chǔ)的,數(shù)據(jù)獲取是進(jìn)行數(shù)據(jù)分析與可視化的第一個阻礙,尤其是像新聞和招聘這類數(shù)據(jù),單純靠手工收集獲取難度巨大,這時可行的辦法是搭建爬蟲系統(tǒng)來自動爬取實時的互聯(lián)網(wǎng)數(shù)據(jù),作為數(shù)據(jù)分析與可視化的基礎(chǔ)。然而現(xiàn)在網(wǎng)站大多都存在反爬蟲機(jī)制,Scrapy框架編寫的爬蟲系統(tǒng)在對互聯(lián)網(wǎng)網(wǎng)站數(shù)據(jù)進(jìn)行爬取時,針對目前網(wǎng)站常用的反爬機(jī)制會采取一些措施。它的工作流程如圖1所示。因此本文選取Scrapy爬蟲系統(tǒng)進(jìn)行爬取新聞數(shù)據(jù)和招聘數(shù)據(jù)。
2?除去重復(fù)數(shù)據(jù)
爬蟲是通過URL來定位資源的位置進(jìn)行數(shù)據(jù)爬取的,這就會導(dǎo)致一些問題的出現(xiàn),當(dāng)然這些問題本身也是不可避免的,因為不同的URL對應(yīng)的數(shù)據(jù)可能存在高度的相似性,尤其像新聞信息這樣的數(shù)據(jù)。為了保證后期數(shù)據(jù)可視化時效果的合理性與科學(xué)性,必須在數(shù)據(jù)進(jìn)行可視化之前對爬取的數(shù)據(jù)去除冗余。本文采取的做法是,在對新爬取的數(shù)據(jù)進(jìn)行入庫之前,需要拿新爬取的數(shù)據(jù)與數(shù)據(jù)庫中已存在的數(shù)據(jù)進(jìn)行文本差異性比較,如果在比較時發(fā)現(xiàn)兩條數(shù)據(jù)差異性比較小則刪除新爬取的數(shù)據(jù)禁止其入庫,從而避免數(shù)據(jù)冗余。
本文采用googlediffmatchpatch算法對數(shù)據(jù)進(jìn)行差異性鑒定,不是直接用一條數(shù)據(jù)的全部內(nèi)容參與差異性分析,而是在比較之前對數(shù)據(jù)進(jìn)行關(guān)鍵詞提取,如利用Pathon中文分詞組件Jieba分詞,找出最能代表某條數(shù)據(jù)的全部關(guān)鍵詞,通過比較兩條數(shù)據(jù)的關(guān)鍵詞的差異性來間接地確定兩條數(shù)據(jù)的差異性,從而提高了鑒定的效率。
googlediffmatchpatch算法的思想:使用兩條待比較的數(shù)據(jù)其中的一條為模板,把作為模板的一條進(jìn)行復(fù)原,統(tǒng)計出復(fù)原的步數(shù),再計算出復(fù)原成模板最壞情況下的步數(shù),用最壞情況下復(fù)原成模板的步數(shù)減去實際復(fù)原所用的步數(shù),再除以最壞情況下的步數(shù)即為兩個帶比較文本的相似度。每個步驟只能做“保持不變”“插入”或者“刪除”操作。
3?數(shù)據(jù)的可視化分析
完成了數(shù)據(jù)的獲取以及對獲取的數(shù)據(jù)進(jìn)行挖掘與分析工作之后,就可以進(jìn)一步對數(shù)據(jù)進(jìn)行可視化分析??梢暬姆治鼋Y(jié)果能夠顯著地為決策者提供一定的支持。之前爬取的數(shù)據(jù)已保存在MySQL數(shù)據(jù)庫中,所以在利用RStudio工具對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行分析之前,需要先設(shè)置數(shù)據(jù)源然后利用R語言中的RODBC包提供的相關(guān)接口與MySQL數(shù)據(jù)庫建立連接。最后就是根據(jù)要達(dá)到的可視化目標(biāo),編寫相應(yīng)邏輯的SQL語句來獲取數(shù)據(jù)庫中的數(shù)據(jù),之后利用R語言豐富的擴(kuò)展包所提供的相關(guān)函數(shù),把獲取的數(shù)據(jù)轉(zhuǎn)化成R語言可視化所要求的數(shù)據(jù)格式便于可視化分析,至此完成對數(shù)據(jù)可視化分析的工作。
本文主要采用R語言詞云圖對新聞進(jìn)行了可視化分析,利用餅圖、條形圖和繪制地圖等方式對招聘信息進(jìn)行了可視化分析。
3.1?新聞數(shù)據(jù)詞云圖
圖2采用詞云的方式對爬取的所有新聞數(shù)據(jù)共同提到的關(guān)鍵詞匯進(jìn)行可視化,當(dāng)鼠標(biāo)移動到相應(yīng)的詞匯時,將會顯示該詞匯一共被提及的次數(shù)。本文利用wordcloud2這樣一款用于從文本生成詞云圖而提供的工具包進(jìn)行詞云的生成。
3.2?招聘數(shù)據(jù)城市分布圖
圖3采用餅圖的形式,展示了數(shù)據(jù)庫中招聘崗位數(shù)量最多的前六位城市的各類崗位的分布情況。利用R語言提取數(shù)據(jù)和繪制餅圖的代碼如下所示:
library(RODBC)
par(mfrow=c(3,2))
myconn=odbcConnect("MySQLODBC","root","")
works<sqlQuery(myconn,"select?catalog,?count(recruitNumber)?as?recruits?from?newsanalysis_tencent?where?workLocation='北京'?group?by?catalog?order?by?recruits")
city<works['catalog']
recruits<works['recruits']
recruits<as.matrix(recruits)
recruits<as.numeric(recruits)
city<works['catalog']
city<as.character(unlist(city['catalog']))#將數(shù)據(jù)框類型轉(zhuǎn)換為字符型
pct<round(recruits/sum(recruits)*100)
lbls2<paste(city,"?",pct,"%",sep="")
pie(recruits,labels=lbls2,col=rainbow(length(lbls2)),radius=1.1,main="北京")
圖4采用條形圖的形式對數(shù)據(jù)庫中每個城市招聘職位總數(shù)進(jìn)行可視化。當(dāng)鼠標(biāo)移動到對應(yīng)城市的條形圖上時會自動顯示該城市目前的招聘職位總數(shù)。利用R語言提取數(shù)據(jù)和繪制條形圖的代碼如下所示:
library(RODBC)
library(ggplot2)
library(plotly)
library(dplyr)
myconn=odbcConnect("MySQLODBC","root","")
city<sqlQuery(myconn,"select?distinct?workLocation?from?newsanalysis_tencent?order?by?workLocation")
count<sqlQuery(myconn,"select?count(recruitNumber)?as?count?from?newsanalysis_tencent?group?by?workLocation?order?by?workLocation")
city<cbind(city,count)
city$workLocation<reorder(city$workLocation,city$count,function(x){mean(x)})
city<arrange(city,desc(count))
#取前8名
City<city$workLocation[1∶8]
Works<city$count[1∶10]
p<ggplot(data=city[1∶10,],aes(City,Works))+geom_bar(fill='red',stat="identity")+labs(x="城市",y="職位數(shù)",title="各地方崗位數(shù)量")
p<ggplotly(p,width=672,height=480)
本文基于R語言對比較有代表性的新聞數(shù)據(jù)和招聘數(shù)據(jù)進(jìn)行了可視化分析,并對分析過程中需要注意的重要流程做了詳細(xì)的分析與說明。用R語言代碼演示了新聞數(shù)據(jù)對應(yīng)的云圖以及招聘數(shù)據(jù)對應(yīng)的餅圖、條形圖、城市分布圖的完整繪制過程。R語言是既能處理海量數(shù)據(jù),又能提供幾乎整個統(tǒng)計領(lǐng)域的所有前沿算法的強(qiáng)大的數(shù)據(jù)可視化工具,下一步將對爬取的互聯(lián)網(wǎng)數(shù)據(jù)進(jìn)行更深入的挖掘,并采用R語言構(gòu)建一個數(shù)據(jù)分析和可視化的平臺,能進(jìn)行更強(qiáng)大的數(shù)據(jù)挖掘分析和可視化能力。
參考文獻(xiàn):
[1]劉璐,等.基于topk顯露模式的商品對比評論分析[J].計算機(jī)應(yīng)用,2015,35(10):27272732.
[2]孟詩瓊,孟詩瑤,尹志.基于R語言的汽車消費(fèi)數(shù)據(jù)挖掘及可視化方法[J].寧波工程學(xué)院學(xué)報,2015,27(4):1723.
[3]楊霞,吳東偉.R語言在大數(shù)據(jù)處理中的應(yīng)用[J].科技資訊,2013(23):1920.
[4]劉培寧,韓笑,楊福興.基于R語言的Net?CDF文件分析和可視化應(yīng)用[J].氣象科技,2014,42(4):629634.
[5]孫歆,戴樺,孔曉昀,趙明明.基于Scrapy的工業(yè)漏洞爬蟲設(shè)計[J].信息安全與技術(shù),2017.8(1):6671.
作者簡介:李翔坤(1978—?),女,漢族,遼寧營口人,碩士,副教授,研究方向:數(shù)據(jù)存儲、數(shù)據(jù)挖掘及應(yīng)用。