R导入自建文本绘制词云图
最近小编和小伙伴们在一起学习如何用R绘制词云图,前面的文章也介绍了词云图的基本绘制方法,包括自定义词云图形状。但是,之前我们都是使用的内置数据集。那么,我们能不能用自己建立的文本作为数据集,来绘制词云图呢?答案是肯定的!
今天,小编就和大家一起来学习下如何完成自建文本绘制词云图。
首先,我们得创建一个文本,小编从网上下载了一首《春江花夜月》,把内容复制到了Word2016中。
选择菜单栏文件,在弹出页面选择“导出”,“更改文件类型”,“纯文本”点击“另存为”,然后需要我们选择将文件保存的位置,小编是保存在桌面的,命名为521。小伙伴们可随意保存(但是要记得位置哦),然后会弹出一个对话框,要我们选择编码类型,这里选择“其他编码”,选择“Unicode(UTF-8)”,点击“确定”
现在,我们就准备好自己的文本了。
当然喽,接下来就是在Rstudio中进行操作了。首先是准备工作
library(jiebaR)
library(jiebaRD)
library(wordcloud2)
这几行代码是加载相关包。前两个包的作用是分词,何为“分词”,就是把句子打断,成为一个个词组。最后的包小伙伴们应该熟悉,是绘制词云图的包(注意,小编已经安装了jiebaR和jiebaRD包,未安装的小伙伴需要先安装,代码install.packages("jiebaR")
)
text<-readLines("C:UsersAdministratorDesktop521.txt",encoding = "UTF-8")
上面代码是读取文件,也就是我们自建的txt文本。在代码中text是引入的变量名(名字可以根据需要改变),<-是赋值符号,-readLines("C:UsersAdministratorDesktop521.txt",encoding = "UTF-8")
是读取文本的函数,括号中"C:UsersAdministratorDesktop521.txt"是小编自建文本的路径,encoding = "UTF-8"是指编码方式为UTF-8
seg<-worker()
这句代码可以理解为初始化worker()函数,worker()函数是jiebaR包中的一个关键函数,承担这分词的作用!
seg<=text ,这句代码就是对文本进行分词,效果如下
我们可以看见,文本已经被分为一个个词组。
freq<-freq(segment(text,seg))
这句代码的意思是统计分开的词组中出现的频率,其中freq是一个变量,这是随便取的名字,<-赋值符号。freq(segment(text,seg))是统计频率的函数,括号中的segment(text,seg)是一个整体,当然其本身也是一个函数,小伙伴们要是觉得这样不容易理解,小编可以多引入一个变量。比如x<- segment(text,seg),然后freq<-freq(segment(text,seg))变为freq<-freq(x),当然,要是不好理解也不必强求,只要会用就行。
index <- order(-freq[,2])
order2<-freq[index, ]这两句就是进行排序操作,其中order(-freq[,2])中-freq前有“-”号,就是指降序。(这两句代码其实不太好理解,但小编今天不打算详细讲,怕让小伙伴们听得一头雾水,姑且就把这两行代码视为降序吧,后面有机会我们再深入讲解)
wordcloud2(order2,size = 1, color = "random-light")最后这行代码就是绘图了。我们前面那么多操作,在wordcloud2(order2,size = 1, color = "random-light")中就是order2这个参数。
绘制词云图如下
感觉代码有点乱,小编把代码整个贴一下
library(jiebaR)
library(jiebaRD)
library(wordcloud2)
text<-readLines("C:UsersAdministratorDesktop521.txt",encoding = "UTF-8")
seg<-worker()
seg<=text
freq<-freq(segment(text,seg))
index <- order(-freq[,2])
order2<-freq[index, ]
wordcloud2(order2,size = 1, color = "random-light")