感謝eBDA工作室的投稿,!
大數(shù)據(jù)文摘?dú)g迎類似干貨投稿,投稿請加微信2027671925,,備注“投稿”,,謝絕軟文。 互聯(lián)網(wǎng)時代,,大量的新聞信息,、網(wǎng)絡(luò)交互、輿情信息以文本形式存儲在數(shù)據(jù)庫中,,如何利用數(shù)據(jù)分析和文本挖掘的算法,,將海量文本的價值挖掘出來,成為我們團(tuán)隊(duì)近期的一個研究方向,本案例就是我們的一個初步嘗試,。飛信群是我們在工作,、生活中交流的重要平臺,在將近一年的時間里共產(chǎn)生了幾萬條的聊天記錄,,展現(xiàn)了我們這個團(tuán)隊(duì)的方方面面,。 本文將通過KNIME、R語言和tagxedo三個工具來實(shí)現(xiàn)文本挖掘和詞云可視化技術(shù),,體驗(yàn)一下輿情分析的魅力,。 一、數(shù)據(jù)導(dǎo)入 數(shù)據(jù)源:2014年10月—2015年7月的飛信群全部聊天記錄: 圖一 原數(shù)據(jù)示例 通過KNIME進(jìn)行原始聊天記錄文件的結(jié)構(gòu)化轉(zhuǎn)換,,提取文件中發(fā)言人,、發(fā)言時間和發(fā)言內(nèi)容三個字段,并保存為csv文件,。 圖二 KNIME的流程 R語言的語句: log <- read.csv('feixin.csv', sep=',', header=FALSE) #數(shù)據(jù)導(dǎo)入并保存為log對象 二,、發(fā)言熱度分布 通過熱力圖,我們可以看到大家聊天的熱情在2014年12月最為高漲,,而2015年的2月由于春節(jié)原因,群里冷冷清清了好久,。周末2天的空檔期也展現(xiàn)的很清晰哦,。 R語言的語句: require(plyr) time <- as.POSIXlt(log$V3,origin = '1970-1-1 00:00:00' ,format='%Y-%m-%d %H:%M:%S') #設(shè)置日期格式 cbind(format(time,'%Y-%m'),format(time,'%d'))->day_table #生成發(fā)言時間分布表 as.data.frame(day_table)->day_table #轉(zhuǎn)換數(shù)據(jù)框格式 table(day_table)->day_m #生成日期列聯(lián)表 heatmap(day_m,Rowv=NA,Colv=NA,scale = 'column',col=brewer.pal(4,'Blues'),revC = TRUE) #繪制按日發(fā)言量的熱力圖,藍(lán)色越深代表發(fā)言熱度越高,。 圖三 熱度分析 三,、個人發(fā)言習(xí)慣分析 誰最能說?通過條形圖可以清晰的看到大家發(fā)言的頻率對比,,一目了然,。 R語言的語句: require(plyr) require(ggplot2) name=log$V2 #獲取發(fā)言人姓名字段 table(name)->t_name #生成按姓名出現(xiàn)頻率的列聯(lián)表 as.data.frame(t_name)->t_name #轉(zhuǎn)換為數(shù)據(jù)框格式 gg = ggplot(t_name) gg+geom_bar(aes(x=reorder(name,Freq),y=Freq,fill=name),stat='identity',position='dodge')+coord_flip()+theme(axis.title=element_text(size=18,color='blue'),axis.text=element_text(family='A',size=22,color='black')) 用ggplot擴(kuò)展包繪制條形圖 圖四 發(fā)言量分析 注:因?yàn)樯婕皞€人隱私所以把圖上10個人的名字都隱去了 有趣的來了,看看我們每個人喜歡在什么時間說話吧,。大家都是有兩個發(fā)言高峰,,一個是上午10點(diǎn),一個是下午4點(diǎn)左右,,而中午12點(diǎn)是一個明顯的午休靜默期,。另外可以看到,有些童鞋在上午說話的頻率高于下午,,有些則正相反,。 R語言的語句: require(plyr) time <- as.POSIXlt(log$V3,origin = '1970-1-1 00:00:00' ,format='%Y-%m-%d %H:%M:%S') #設(shè)置日期格式 hour <- format(time,'%H') #提取日期值中的“小時”數(shù) hour_name <- as.data.frame(cbind(log$V2,hour)) count(hour_name,V1,hour)->hour_table #計算每人按小時發(fā)言的頻次 as.character(hour_name$hour)->hour_name$hour as.numeric(hour_name$hour)->hour_name$hour #將“小時”字段轉(zhuǎn)換為數(shù)字格式 gg=ggplot(hour_name) gg+ geom_density(aes(x=hour,fill=V1))+facet_wrap(~V1) +theme( strip.text=element_text(family='A',size=18,color='black'),axis.text=element_text(family='A',size=16,color='black')) #通過ggplot擴(kuò)展包繪制基于發(fā)言時間段分布的面積圖 圖五 發(fā)言時間分布 注:因?yàn)樯婕皞€人隱私所以把圖上10個人的名字都隱去了 四、詞云可視化 震撼的來了,,看看這一年大家最關(guān)心什么,?討論最多的是什么?有什么有趣的話題呢?為了和團(tuán)隊(duì)的LOGO呼應(yīng),,選用大象輪廓的詞云圖,,效果棒棒噠。 R語言的語句: require(tm) require(Rwordseg) gsub('[0-9,a-z,A-Z]', '', log$V1)->t #去除英文和數(shù)字 segmentCN(t)->t_seg #中文分詞 removeWords(unlist(t_seg),mystopword)->word #去除停用詞 word = lapply(X = word, FUN = strsplit, ' ') #將分詞結(jié)果按空格分隔整理 v = table(unlist(word)) #計算每個單詞的詞頻 v = sort(v, decreasing = T) #按降序排列 d = data.frame(word = names(v), freq = v) #將詞頻矩陣轉(zhuǎn)換為數(shù)據(jù)框格式 d$word=as.character(d$word) #將單詞字段規(guī)整為字符串格式 rbind(d[nchar(d$word)==1,][1:10,],d[nchar(d$word)==2,][1:20,],d[nchar(d$word)>3,][1:20,])->result_r #提取不同字?jǐn)?shù)的單詞中詞頻最高的TOP50單詞,,作為詞云繪制的素材 write.table(result_r,'result.csv',sep=',',row.names = FALSE) #保存結(jié)果為csv文件 通過一款開源的詞云可視化工具tagxedo,,將導(dǎo)出的詞頻矩陣?yán)L制為各種形狀的詞云圖。 圖六 團(tuán)隊(duì)詞云 看看,,除了對“數(shù)據(jù)”,、“互聯(lián)網(wǎng)”的關(guān)心是天經(jīng)地義的,我們說的最多的竟然是“吃”,,名副其實(shí)的“吃貨”團(tuán)隊(duì),,民以食為天嘛?!爸軋蟆焙杖恍涯恳彩亲砹?,其它的高頻詞都和工作息息相關(guān),“實(shí)驗(yàn)室”,、“工程師”,,還有“平臺”、“服務(wù)器”,、“數(shù)據(jù)庫”,,真心是學(xué)習(xí)型聊天群啊。最開心的要數(shù)“哈哈哈”,,證明我們的工作也是歡笑多多,,其樂無窮的。 想看到每位童鞋的詞云有什么不同么,? 圖七 個體詞云一 爽朗的“哈哈哈”,,憤怒的“啊啊啊”,最擅用“[圖片]”在群里展現(xiàn)心情,。致我們的美女?dāng)?shù)據(jù)分析師,,也是團(tuán)隊(duì)大象logo的設(shè)計者。 下面重磅推出我們的首席數(shù)據(jù)科學(xué)家,,瞧瞧科學(xué)家的世界與我們是多么的不同,。竟然……基本都是英文術(shù)語。 圖八個體詞云二 五,、建模流程 下面用一張圖簡單回顧一下本文實(shí)現(xiàn)的建模過程: 圖九 整體分析思路 希望上面的案例分析能幫助大家更好的理解文本挖掘和輿情分析可視化的一些分析思路和呈現(xiàn)方式,,我們也會盡力挖掘更多的創(chuàng)意,制作更好的產(chǎn)品呈現(xiàn)給大家,,謝謝,!,。 |
|