R

用R绘制云图

Posted by zluckyH on March 17, 2016

构建云图分析主要包括以下三个步骤:

  • 中文分词:jiebaR
  • 词频统计:table函数
  • 创建云图:wordcloud

jiebaR中文分词

“结巴”中文分词的R语言版本,支持最大概率法(Maximum Probability),隐式马尔科夫模型(Hidden Markov Model),索引模型(QuerySegment),混合模型(MixSegment),共四种分词模式,同时有词性标注,关键词提取,文本Simhash相似度比较等功能。项目使用了Rcpp和CppJieba进行开发。

安装

首先安装所需的分词包jiebaR,进行简单的分词尝试


#install.packages('jiebaR')
library("jiebaR")
mixseg = worker()
res = mixseg["江州市长江大桥参加了长江大桥的通车仪式"]
res

分词

jiebaR提供了四种分词模式,可以通过 worker() 来初始化分词引擎,使用 segment() 进行分词。


#  接受默认参数,建立分词引擎 
mixseg = worker()
# 相当于:
# worker( type = "mix", dict ="somepath/dict/jieba.dict.utf8",
#          hmm  = "somepath/dict/hmm_model.utf8",  # HMM模型数据
#          user = "somepath/dict/user.dict.utf8") #用户自定义词库

mixseg["江州市长江大桥参加了长江大桥的通车仪式"]  # `<=` 或 `[` 为分词运算符

# 相当于 segment( "江州市长江大桥参加了长江大桥的通车仪式" , mixseg ) 
# 或者 mixseg <= "江州市长江大桥参加了长江大桥的通车仪式"

支持对文件进行分词:


#本文使用2016年两会政府工作报告的一部分作为例子
mixseg["C:/Users/zluck/Documents/R/2016工作重点.txt"] 
# 自动判断输入文件编码模式,默认文件输出在同目录下。

# 等同于segment( "C:/Users/zluck/Documents/R/2016工作重点.txt" , mixseg )

关键词提取

关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径,使用方法与分词类似。 topn 参数为关键词的个数。


keys = worker("keywords", topn = 5)
keys <= "我爱北京天安门"
keys <= "C:/Users/zluck/Documents/R/2016工作重点.txt" #举个例子

词频统计

本文利用table()函数进行词频统计,python的字典功能貌似更容易一些,不过需要配置中文环境,可能稍微有些麻烦,随后会尝试使用


#读取分词文件,读取结果为一个字符串向量
mytxt<-readLines("C:/Users/zluck/Documents/R/words.txt",encoding='UTF-8')
#利用strsplit()对字符串向量进行分割,得到由词语组成的一个列表
mytxt<-strsplit(mytxt,split = " ")[[1]]
#利用table进行词频统计
t<-table(mytxt)
#提取词语
words<-names(t)[-c(which(names(t)=="的"),which(names(t)=="和"))]
#提取频数
freq<-as.vector(t)[-c(which(names(t)=="的"),which(names(t)=="和"))] 

创建云图

wordcloud包中的wordcloud()函数可以直接绘制云图,一步到位

wordcloud函数介绍

wordcloud(words,freq,scale=c(4,.5),min.freq=3,max.words=Inf, random.order=TRUE, random.color=FALSE, rot.per=.1, colors=”black”,ordered.colors=FALSE,use.r.layout=FALSE, fixed.asp=TRUE, …)

具体参数介绍详见help()文件

具体使用案例

1.安装加载程序包


#install.packages('wordcloud')

library(wordcloud)

2.给出字体颜色

自己指定字体颜色


colors=c('red','blue','green','yellow','purple')

或者使用R颜色程序包中现成的主题模板


colors=brewer.pal(9,"Set1")

3.执行函数


wordcloud(words,freq,scale=c(3,0.3),min.freq=-Inf,max.words=Inf,
          colors=colors,random.order=F,random.color=T,
          ordered.colors=F,encoding='UTF-8')

这样我们就得到了2016年两会政府工作报告的一幅云图,从中可以明显看到报告的重点——发展,so,简单有趣,不断尝试,不断发现新乐趣。

Tips

  • Rmarkdown输出过程中如果有超过50条warning(),不会导致文件无法编译,而是导致最终输出的pdf文件最后有很多页的错误提示,解决这一问题的方法是在插入命令处设置warning=FALSE,例如{r,warning=FALSE}

  • 在使用Rmarkdown的过程中,经常会涉及到中文的输出,在R中可以顺利输出的中文在Rmarkdown中会相当麻烦,关于Rmarkdown涉及中文的图片输出难题,目前个人找到的最简单的解决方法是加载showtext包,在绘图命令处设置fig.showtext=TRUE,{r,fig.showtext=TRUE},具体可以参考rmarkdown转化中文字符为PDF的设置showtext package integration

展示一下成果:

yuntu