R制作词云图(玩票性质)
首先,我们得把以下几个包给安装:jiebaRD和jiebaR(中文分词用)、wordcloud和wordcloud2(制作词云)
安装好之后,就可以开始了。
library(jiebaRD)
library(jiebaR)
library(wordcloud2)
library(wordcloud)
然后我们利用jiebaR包里的segement函数进行分词,segement用法如下:
segment(code,jieba)
#code是文件的内容,jieba是用来分词的工具
分词工具的输入:
engine = worker()
到此时位置的代码应该是
library(jiebaRD)
library(jiebaR)
library(wordcloud2)
engine <- worker() #固定语句
segment("td.txt",engine) #输入你要分析的文本,获得下一步“”的内容
这里的文档我用的《遥远的救世主》这本书的TXT文件(即“td.txt”)
ctrl+enter后会得出一个新的,已经分好的txt文件,我们再将其导入R就可:
> segment("td.txt",engine)
[1] "td.segment.2021-05-23_22_21_12.txt"
> word <- scan("td.segment.2021-05-23_22_21_12.txt",sep='\n',what='',encoding="UTF-8")
Read 1 item
之后进行计算词频:
word <- qseg[word]
word <- freq(word)
这里补充下:做词云图,关键是要做如下几步,一是把词给分好。因为现实生活中基本没有分好词和词频的文件,所以需要我们自己动手进行分。二是将文件的的词的频率计算出来。三是将无意义的符号给去除掉(下文会讲2个处理方法)。
此时结果如下:
接下来就可以使用wordcloud2了。其函数是:
wordcloud2(file,color = 颜色, backgroundColor = 颜色,shape='形状')
代入这个例子就是:
wordcloud2(word, backgroundColor = "grey",shape = "star")
图像是(dim后有20310个项,电脑不行,所以没让图没跑完)
关于这个词云的形状,我们可以选择不同的其他形状。如默认是‘circle’(圆形),‘cardioid’(苹果形或心形),‘star’(星形),‘diamond’(钻石),‘triangle-forward’(三角形),‘triangle’(三角形),‘pentagon’(五边形)等等。
我们也可以使用lettercloud函数,使得词云图呈现出字母的形状
letterCloud(demoFreq,"R")
还有也可以用自己的图片来生成一个定义好形状的词云。不过这个我还不会,嘿嘿,等以后在说吧。
此时的代码如此:
library(jiebaRD)
library(jiebaR)
library(wordcloud2)
engine <- worker() #固定语句
segment("td.txt",engine) #输入你要分析的文本,获得下一步“”的内容
word <- scan("td.segment.2021-05-23_22_21_12.txt",sep='\n',what='',encoding="UTF-8")
word <- qseg[word]
word <- freq(word)
wordcloud2(word, backgroundColor = "grey",shape = "star")
# wordcloud2(file,color = 颜色, backgroundColor = 颜色,shape='形状')
最后我们回来审视下过程,我们会发现我们的词云图太冗长,里面包罗万象,有很多词频很小(比如1)的词也包含在内。这一方面影响运行速度和美观,也影响我们的分析的结果。
为此我们需要使用到停词。
停词,比如说“的”,“它”,“你”等等。解决这种问题的手段就我会的有2种。一是是通过手动增加停词的文件,或是引用其他人已经做好的停词文件。二是直接通过Excel解决的,因为这里的停词是清晰可见的,而且数量较少,备份一下,然后手动删除,利用vlookup函数或是排序后,手动删除。
如果采用第一种的话,可以通过worker()函数里的stop_word参数进行清除。我们将需要删除的停用词放在stopwords.txt文件中。
然后把engine这步换成如下:
engine <- worker(stop_word = 'stopwords.txt')
这样就可以清除一些不必要的词语了,会是词云图简洁明了更有用。
使用停词后的总代码如下:
library(jiebaRD)
library(jiebaR)
library(wordcloud2)
engine <- worker(stop_word = 'stopwords.txt') #结合停用词
segment("td.txt",engine) #输入你要分析的文本,获得下一步“”的内容
word <- scan("td.segment.2021-05-23_22_21_12.txt",sep='\n',what='',encoding="UTF-8")
word <- qseg[word]
word <- freq(word)
wordcloud2(word, backgroundColor = "grey",shape = "star")
#wordcloud2(file,color = 颜色, backgroundColor = 颜色,shape='形状')
本文的一些有用链接:https://blog.csdn.net/weixin_40278806/article/details/80509301利用R制作词云图
https://zhuanlan.zhihu.com/p/51771874如何用R语言做词云图,以某部网络小说为例
或者去统计之都,看看郎大为大佬的文章,有详细解释。