手把手: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

时间: 2024-08-21 13:05:06

手把手:R语言文本挖掘和词云可视化实践的相关文章

用R语言进行数据可视化的综合指南(一)

让我们快速浏览一下这张图表: 这张可视化数据图(最初用Tableau软件创建 )是如何利用数据可视化来帮助决策者的一个很好的例子.想象一下,如果这些信息通过表格来告诉投资者,你认为你会花多长时间来向他解释? 如今的世界里,随着数据量的不断增长,很难不用可视化的形式来呈现你数据里的全部信息.虽然有专门的工具,如Tableau, QlikView 和 d3.js,但没有任何东西能代替有很好可视化能力的建模/统计工具.尤其是它有助于做若干探索性数据分析和特征化工程.这就是R语言,它提供了令人难以置信的

手把手 | 教你爬下100部电影数据:R语言网页爬取入门指南

前言 网页上的数据和信息正在呈指数级增长.如今我们都使用谷歌作为知识的首要来源--无论是寻找对某地的评论还是了解新的术语.所有这些信息都已经可以从网上轻而易举地获得. 网络中可用数据的增多为数据科学家开辟了可能性的新天地.我非常相信网页爬取是任何一个数据科学家的必备技能.在如今的世界里,我们所需的数据都在互联网上,使用它们唯一受限的是我们对数据的获取能力.有了本文的帮助,您定会克服这个困难. 网上大多数的可用数据并不容易获取.它们以非结构化的形式(HTML格式)表示,并且不能下载.因此,这便需要

用R语言进行数据可视化的综合指南(二)

高级可视化效果 什么是Hexbin Binning? 如果在同一个地方有很多点(overplotting),我们可以使用Hexbin包.六边形面元划分是一种二元直方图,对大数量级结构的数据集的可视化非常有用.下面是代码: >library(hexbin) >a=hexbin(diamonds$price,diamonds$carat,xbins=40) >library(RColorBrewer) >plot(a) 我们也可以创建一个调色板,然后用Hexbin绘图功能以获得更好的视

《R语言数据挖掘》----1.5 文本挖掘

本节书摘来自华章出版社<R语言数据挖掘>一书中的第1章,第1.5节,作者[哈萨克斯坦]贝特·麦克哈贝尔(Bater Makhabel),李洪成 许金炜 段力辉 译,更多章节内容可以访问"华章计算机"公众号查看. 1.5 文本挖掘 文本挖掘基于文本数据,关注从大型自然语言文本中提取相关信息,并搜寻有意义的关系.语法关系以及提取实体或各项之间的语义关联.它也被定义为自动或半自动的文本处理.相关的算法包括文本聚类.文本分类.自然语言处理和网络挖掘. 文本挖掘的特征之一是数字与文本

《R语言数据挖掘》----1.15 结果可视化

本节书摘来自华章出版社<R语言数据挖掘>一书中的第1章,第1.15节,作者[哈萨克斯坦]贝特·麦克哈贝尔(Bater Makhabel),李洪成 许金炜 段力辉 译,更多章节内容可以访问"华章计算机"公众号查看. 1.15 结果可视化 可视化是数据描述的图形表示,以便一目了然地揭示复杂的信息,包括所有类型的结构化信息表示.它包括图形.图表.图解.地图.故事板以及其他结构化的图示. 好的可视化结果使你有机会通过专家的眼光来查看数据.可视化结果很美,不仅因为它们的美学设计,而且

《数据科学:R语言实现》——1.5 使用词法域

1.5 使用词法域 词法域又称静态绑定,确定了一个取值如何绑定到一个函数的自由变量.它是源于范式函数式编程语言的重要特征,也是R语言区别于S语言的地方.在本教程中,我们会展示词法域在R语言中是如何工作的. 准备工作 确保你已经在操作系统中安装了R语言,完成了之前的步骤. 实现步骤 执行下列步骤,理解词法域规则是如何工作的. 1.我们创建一个变量x,然后创建函数tmpfunc,返回结果x+3: 2.创建函数parentfunc,其带有嵌套函数childfunc.当我们调用函数parentfunc时

【独家】手把手教线性回归分析(附R语言实例)

通常在现实应用中,我们需要去理解一个变量是如何被一些其他变量所决定的. 回答这样的问题,需要我们去建立一个模型.一个模型就是一个公式之中,一个因变量(dependent variable)(需要预测的值)会随着一个或多个数值型的自变量(independent variable)(预测变量)而改变的.我们能够构建的最简单的模型之一就是线性模型,我们可以假设因变量和自变量间是线性的关系.回归分方法可用于预测数值型数据以及量化预测结果与其预测变量之间关系的大小及强度.本文将介绍如何将回归方法应用到你自

《R语言数据分析》——导读

前 言 自20多年前发源于学术界以来,R语言已经成为统计分析的通用语言,活跃于众多产业领域.目前,越来越多的商业项目开始使用R,兼之R用户开发了数以千计易于上手的开发包,都使得R成为数据分析工程师及科学家最常用的工具. 本书将帮助读者熟悉R语言这一开源生态系统,并介绍一些基本的统计背景知识,以及一小部分相关的数学知识.我们将着重探讨使用R语言解决实际的问题. 由于数据科学家在数据的采集.清洗及重构上将耗费大量时间,因此本书首先将通过第一手实例来重点探讨从文件.数据库以及在线资源中导入数据的方法,

《R语言数据挖掘》----导读

Preface 前 言 世界各地的统计学家和分析师正面临着处理许多复杂统计分析项目的迫切问题.由于人们对数据分析领域的兴趣日益增加,所以R语言提供了一个免费且开源的环境,非常适合学习和有效地利用现实世界中的预测建模方案.随着R语言社区的不断发展及其大量程序包的不断增加,它具备了解决众多实际问题的强大功能. R编程语言诞生已经有数十年了,它已经变得非常知名,不但被社区的科学家而且被更广泛的开发者社区所熟知.它已经成长为一个强大的工具,可以帮助开发者在执行数据相关任务时生成有效且一致的源代码.由于R