手把手:R语言文本挖掘和词云可视化实践
互聯網時代,大量的新聞信息、網絡交互、輿情信息以文本形式存儲在數據庫中,如何利用數據分析和文本挖掘的算法,將海量文本的價值挖掘出來,成為我們團隊近期的一個研究方向,本案例就是我們的一個初步嘗試。飛信群是我們在工作、生活中交流的重要平臺,在將近一年的時間里共產生了幾萬條的聊天記錄,展現了我們這個團隊的方方面面。
本文將通過KNIME、R語言和tagxedo三個工具來實現文本挖掘和詞云可視化技術,體驗一下輿情分析的魅力。
一、數據導入
數據源:2014年10月—2015年7月的飛信群全部聊天記錄:
圖一 原數據示例
通過KNIME進行原始聊天記錄文件的結構化轉換,提取文件中發言人、發言時間和發言內容三個字段,并保存為csv文件。
圖二 KNIME的流程
R語言的語句:
log <- read.csv('feixin.csv', sep=",", essay-header=FALSE) #數據導入并保存為log對象
二、發言熱度分布
通過熱力圖,我們可以看到大家聊天的熱情在2014年12月最為高漲,而2015年的2月由于春節原因,群里冷冷清清了好久。周末2天的空檔期也展現的很清晰哦。
R語言的語句:
require(plyr)
time <- as.POSIXlt(log$V3,origin = '1970-1-1 00:00:00' ,format="%Y-%m-%d %H:%M:%S") #設置日期格式
cbind(format(time,"%Y-%m"),format(time,"%d"))->day_table #生成發言時間分布表
as.data.frame(day_table)->day_table #轉換數據框格式
table(day_table)->day_m #生成日期列聯表
heatmap(day_m,Rowv=NA,Colv=NA,scale = "column",col=brewer.pal(4,"Blues"),revC = TRUE)
#繪制按日發言量的熱力圖,藍色越深代表發言熱度越高。
圖三 熱度分析
三、個人發言習慣分析
誰最能說?通過條形圖可以清晰的看到大家發言的頻率對比,一目了然。
R語言的語句:
require(plyr)
require(ggplot2)
name=log$V2 #獲取發言人姓名字段
table(name)->t_name #生成按姓名出現頻率的列聯表
as.data.frame(t_name)->t_name #轉換為數據框格式
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擴展包繪制條形圖
圖四 發言量分析
注:因為涉及個人隱私所以把圖上10個人的名字都隱去了
有趣的來了,看看我們每個人喜歡在什么時間說話吧。大家都是有兩個發言高峰,一個是上午10點,一個是下午4點左右,而中午12點是一個明顯的午休靜默期。另外可以看到,有些童鞋在上午說話的頻率高于下午,有些則正相反。
R語言的語句:
require(plyr)
time <- as.POSIXlt(log$V3,origin = '1970-1-1 00:00:00' ,format="%Y-%m-%d %H:%M:%S")
#設置日期格式
hour <- format(time,'%H') #提取日期值中的“小時”數
hour_name <- as.data.frame(cbind(log$V2,hour))
count(hour_name,V1,hour)->hour_table #計算每人按小時發言的頻次
as.character(hour_name$hour)->hour_name$hour
as.numeric(hour_name$hour)->hour_name$hour #將“小時”字段轉換為數字格式
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擴展包繪制基于發言時間段分布的面積圖
圖五 發言時間分布
注:因為涉及個人隱私所以把圖上10個人的名字都隱去了
四、詞云可視化
震撼的來了,看看這一年大家最關心什么?討論最多的是什么?有什么有趣的話題呢?為了和團隊的LOGO呼應,選用大象輪廓的詞云圖,效果棒棒噠。
R語言的語句:
require(tm)
require(Rwordseg)
gsub("[0-9,a-z,A-Z]", "", log$V1)->t #去除英文和數字
segmentCN(t)->t_seg #中文分詞
removeWords(unlist(t_seg),mystopword)->word #去除停用詞
word = lapply(X = word, FUN = strsplit, " ") #將分詞結果按空格分隔整理
v = table(unlist(word)) #計算每個單詞的詞頻
v = sort(v, decreasing = T) #按降序排列
d = data.frame(word = names(v), freq = v) #將詞頻矩陣轉換為數據框格式
d$word=as.character(d$word) #將單詞字段規整為字符串格式
rbind(d[nchar(d$word)==1,][1:10,],d[nchar(d$word)==2,][1:20,],d[nchar(d$word)>3,][1:20,])->result_r #提取不同字數的單詞中詞頻最高的TOP50單詞,作為詞云繪制的素材
write.table(result_r,"result.csv",sep=",",row.names = FALSE) #保存結果為csv文件
通過一款開源的詞云可視化工具tagxedo,將導出的詞頻矩陣繪制為各種形狀的詞云圖。
圖六 團隊詞云
看看,除了對“數據”、“互聯網”的關心是天經地義的,我們說的最多的竟然是“吃”,名副其實的“吃貨”團隊,民以食為天嘛。“周報”赫然醒目也是醉了,其它的高頻詞都和工作息息相關,“實驗室”、“工程師”,還有“平臺”、“服務器”、“數據庫”,真心是學習型聊天群啊。最開心的要數“哈哈哈”,證明我們的工作也是歡笑多多,其樂無窮的。
想看到每位童鞋的詞云有什么不同么?
圖七 個體詞云一
爽朗的“哈哈哈”,憤怒的“啊啊啊”,最擅用“[圖片]”在群里展現心情。致我們的美女數據分析師,也是團隊大象logo的設計者。
下面重磅推出我們的首席數據科學家,瞧瞧科學家的世界與我們是多么的不同。竟然……基本都是英文術語。
圖八個體詞云二
五、建模流程
下面用一張圖簡單回顧一下本文實現的建模過程:
圖九 整體分析思路
希望上面的案例分析能幫助大家更好的理解文本挖掘和輿情分析可視化的一些分析思路和呈現方式,我們也會盡力挖掘更多的創意,制作更好的產品呈現給大家,謝謝!。
原文發布時間為:2015-09-18
本文來自云棲社區合作伙伴“大數據文摘”,了解相關信息可以關注“BigDataDigest”微信公眾號
總結
以上是生活随笔為你收集整理的手把手:R语言文本挖掘和词云可视化实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Python核心编程(第二版)》——1
- 下一篇: 掘金专访 - 收藏集 - 掘金